记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
8bb4314f
Commit
8bb4314f
authored
Mar 20, 2026
by
wangyifan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into dev-wyf-1.5
parents
953e6dae
ab2b517e
Changes
26
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
1136 additions
and
62 deletions
+1136
-62
DamaiService.java
...m/liquidnet/service/kylin/service/other/DamaiService.java
+4
-0
damai.html
...esources/templates/zhengzai/kylin/performances/damai.html
+50
-44
details.html
...ources/templates/zhengzai/kylin/performances/details.html
+3
-2
performances.html
...s/templates/zhengzai/kylin/performances/performances.html
+3
-3
KylinDamaiServiceImpl.java
...in/zhengzai/kylin/service/impl/KylinDamaiServiceImpl.java
+6
-0
KylinOrderTicketEntities.java
...uidnet/service/kylin/entity/KylinOrderTicketEntities.java
+21
-0
KylinPerformanceStatus.java
...iquidnet/service/kylin/entity/KylinPerformanceStatus.java
+7
-0
KylinOrderTicketsMapper.java
...quidnet/service/kylin/mapper/KylinOrderTicketsMapper.java
+10
-0
KylinPerformancesMapper.java
...quidnet/service/kylin/mapper/KylinPerformancesMapper.java
+5
-0
KylinOrderTicketsMapper.xml
...iquidnet.service.kylin.mapper/KylinOrderTicketsMapper.xml
+51
-0
KylinPerformancesMapper.xml
...iquidnet.service.kylin.mapper/KylinPerformancesMapper.xml
+13
-0
FeignPlatformTaskClient.java
...net/service/feign/kylin/task/FeignPlatformTaskClient.java
+11
-7
FeignPlatformApiClient.java
...et/service/feign/platform/api/FeignPlatformApiClient.java
+4
-0
KylinTaskHandler.java
...idnet/service/executor/main/handler/KylinTaskHandler.java
+12
-6
PlatformTaskHandler.java
...et/service/executor/main/handler/PlatformTaskHandler.java
+10
-0
damai_sync_migration.sql
...idnet-service-platform-impl/docu/damai_sync_migration.sql
+8
-0
taobao-sdk-java-auto_1600401599540-20210607-impl.jar
.../lib/taobao-sdk-java-auto_1600401599540-20210607-impl.jar
+0
-0
taobao-sdk-java-auto_1600401599540-20210607.jar
...-impl/lib/taobao-sdk-java-auto_1600401599540-20210607.jar
+0
-0
pom.xml
...-service-platform/liquidnet-service-platform-impl/pom.xml
+14
-0
PlatformDamaiController.java
.../service/platform/controller/PlatformDamaiController.java
+25
-0
PlatformDamaiServiceImpl.java
...rvice/platform/service/impl/PlatformDamaiServiceImpl.java
+579
-0
DataUtils.java
.../java/com/liquidnet/service/platform/utils/DataUtils.java
+12
-0
DateUtils.java
.../java/com/liquidnet/service/platform/utils/DateUtils.java
+164
-0
TaobaoTicketUtils.java
...m/liquidnet/service/platform/utils/TaobaoTicketUtils.java
+120
-0
KylinPerformancesPartnerServiceImpl.java
...ime/service/impl/KylinPerformancesPartnerServiceImpl.java
+3
-0
PerformanceUtils.java
...va/com/liquidnet/service/slime/util/PerformanceUtils.java
+1
-0
No files found.
liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/service/other/DamaiService.java
View file @
8bb4314f
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
();
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/performances/damai.html
View file @
8bb4314f
...
...
@@ -7,66 +7,72 @@
<div
class=
"wrapper wrapper-content animated fadeInRight ibox-content"
>
<form
class=
"form-horizontal m"
id=
"form-damai-edit"
th:object=
"${kylinPerformanceDamaiVo}"
>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label
is-required"
>
performances_id
:
</label>
<label
class=
"col-sm-3 control-label
"
>
演出ID
:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"performancesId"
th:field=
"*{performancesId}"
class=
"form-control"
type=
"text"
readonly
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label
is-required
"
>
演出名称:
</label>
<label
class=
"col-sm-3 control-label"
>
演出名称:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"title"
th:field=
"*{title}"
class=
"form-control"
type=
"text"
readonly
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label is-required"
>
是否
同步
:
</label>
<label
class=
"col-sm-3 control-label is-required"
>
是否
开启同步大麦
:
</label>
<div
class=
"col-sm-8"
th:if=
"*{syncDamai==1}"
>
<div
class=
"radio check-box"
>
<input
type=
"radio"
value=
"1"
name=
"performance_sync_damai"
checked
>
同步
</label>
<input
type=
"radio"
value=
"1"
name=
"performance_sync_damai"
checked
>
开启
同步
</label>
</div>
<div
class=
"radio check-box"
>
<input
type=
"radio"
value=
"0"
name=
"performance_sync_damai"
>
不
同步
</label>
<input
type=
"radio"
value=
"0"
name=
"performance_sync_damai"
>
关闭
同步
</label>
</div>
</div>
<div
class=
"col-sm-8"
th:if=
"*{syncDamai==0}"
>
<div
class=
"radio check-box"
>
<input
type=
"radio"
value=
"1"
name=
"performance_sync_damai"
>
同步
</label>
<input
type=
"radio"
value=
"1"
name=
"performance_sync_damai"
>
开启
同步
</label>
</div>
<div
class=
"radio check-box"
>
<input
type=
"radio"
value=
"0"
name=
"performance_sync_damai"
checked
>
不
同步
</label>
<input
type=
"radio"
value=
"0"
name=
"performance_sync_damai"
checked
>
关闭
同步
</label>
</div>
</div>
</div>
<div
th:each=
"tickets : ${kylinPerformanceDamaiVo.damaiTickets}"
>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label is-required"
>
票种名称:
</label>
<div
class=
"col-sm-8"
>
<input
name=
"title"
th:value=
"${tickets.title}"
class=
"form-control"
type=
"text"
readonly
>
<input
name=
"ticketsId"
th:value=
"${tickets.ticketsId}"
class=
"form-control"
type=
"hidden"
required
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label is-required"
>
是否同步:
</label>
<div
class=
"col-sm-8"
th:if=
"${tickets.syncDamai==1}"
>
<div
class=
"radio check-box"
>
<input
type=
"radio"
value=
"1"
th:name=
"'ticket_syncDamai:'+${tickets.ticketsId}"
checked
>
同步
</label>
</div>
<div
class=
"radio check-box"
>
<input
type=
"radio"
value=
"0"
th:name=
"'ticket_syncDamai:'+${tickets.ticketsId}"
>
不同步
</label>
</div>
</div>
<div
class=
"col-sm-8"
th:if=
"${tickets.syncDamai==0}"
>
<div
class=
"radio check-box"
>
<input
type=
"radio"
value=
"1"
th:name=
"'ticket_syncDamai:'+${tickets.ticketsId}"
>
同步
</label>
</div>
<div
class=
"radio check-box"
>
<input
type=
"radio"
value=
"0"
th:name=
"'ticket_syncDamai:'+${tickets.ticketsId}"
checked
>
不同步
</label>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
></label>
<div
class=
"col-sm-8"
>
<span
style=
"color: #EF9C26;font-size: 14px;"
>
说明:开启同步大麦后,该演出的票务订单每隔一分钟同步大麦一次,直至售票结束;"开启后再关闭"需注意关闭同步后产生的的演出订单信息,及时对订单信息进行处理,避免订单信息遗漏导致的的客诉问题
</span>
</div>
</div>
<!-- <div th:each="tickets : ${kylinPerformanceDamaiVo.damaiTickets}">-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label is-required">票种名称:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="title" th:value="${tickets.title}" class="form-control" type="text" readonly>-->
<!-- <input name="ticketsId" th:value="${tickets.ticketsId}" class="form-control" type="hidden" required>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label is-required">是否同步:</label>-->
<!-- <div class="col-sm-8" th:if="${tickets.syncDamai==1}">-->
<!-- <div class="radio check-box">-->
<!-- <input type="radio" value="1" th:name="'ticket_syncDamai:'+${tickets.ticketsId}"-->
<!-- checked>同步</label>-->
<!-- </div>-->
<!-- <div class="radio check-box">-->
<!-- <input type="radio" value="0" th:name="'ticket_syncDamai:'+${tickets.ticketsId}">不同步</label>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="col-sm-8" th:if="${tickets.syncDamai==0}">-->
<!-- <div class="radio check-box">-->
<!-- <input type="radio" value="1" th:name="'ticket_syncDamai:'+${tickets.ticketsId}">同步</label>-->
<!-- </div>-->
<!-- <div class="radio check-box">-->
<!-- <input type="radio" value="0" th:name="'ticket_syncDamai:'+${tickets.ticketsId}" checked>-->
<!-- 不同步</label>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<button
type=
"button"
class=
"btn btn-w-m btn-success"
onclick=
"submitHandler()"
>
修改
...
...
@@ -89,15 +95,15 @@
status
:
parseInt
(
$
(
"input[name^='performance_sync_damai']:checked"
).
val
())
}
paramList
.
push
(
param
)
var
ticketObj
=
JSON
.
parse
(
'[[${kylinPerformanceDamaiVo.damaiTickets}]]'
);
$
.
each
(
ticketObj
,
function
(
i
,
damaiTickets
)
{
var
param
=
{
id
:
damaiTickets
.
ticketsId
,
type
:
"ticket"
,
status
:
parseInt
(
$
(
"input[name^='ticket_syncDamai:"
+
damaiTickets
.
ticketsId
+
"']:checked"
).
val
())
}
paramList
.
push
(
param
)
});
//
var ticketObj = JSON.parse('[[${kylinPerformanceDamaiVo.damaiTickets}]]');
//
$.each(ticketObj, function (i, damaiTickets) {
//
var param = {
//
id:damaiTickets.ticketsId,
//
type:"ticket",
//
status:parseInt($("input[name^='ticket_syncDamai:"+damaiTickets.ticketsId+"']:checked").val())
//
}
//
paramList.push(param)
//
});
$
.
operate
.
post
(
prefix
+
"/damai/change"
,
{
params
:
JSON
.
stringify
(
paramList
)},
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/performances/details.html
View file @
8bb4314f
...
...
@@ -385,6 +385,7 @@
const
auditStatus
=
'[[${kylinPerformanceMisVo.auditStatus}]]'
;
const
status
=
'[[${kylinPerformanceMisVo.status}]]'
;
const
fieldStatus
=
'[[${kylinPerformanceMisVo.fieldAuditStatus}]]'
;
const
type
=
'[[${kylinPerformanceMisVo.type}]]'
;
const
endTime
=
new
Date
(
'[[${kylinPerformanceMisVo.timeEnd}]]'
.
replaceAll
(
"
\"
"
,
""
)).
valueOf
();
const
now
=
new
Date
().
valueOf
();
// const et = new Date(endTime.replaceAll("\"", "")).valueOf();
...
...
@@ -427,7 +428,7 @@
}
var
damaiFlag
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performances:damai'
)}]];
if
(
damaiFlag
==
"hidden"
)
{
if
(
damaiFlag
==
"hidden"
||
type
!=
101
)
{
document
.
getElementById
(
"li-tab-5"
).
style
.
display
=
"none"
;
}
...
...
@@ -443,7 +444,7 @@
var
orderImportFlag
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performances:orderImport'
)}]];
if
(
orderImportFlag
==
"hidden"
)
{
document
.
getElementById
(
"li-tab-8"
).
style
.
display
=
"none"
;
document
.
getElementById
(
"li-tab-8"
).
style
.
display
=
"none"
;
}
var
payTxt
=
[[
$
{@
permission
.
hasPermi
(
'kylin:performances:payTxt'
)}]];
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/performances/performances.html
View file @
8bb4314f
...
...
@@ -156,9 +156,9 @@
}
else
{
actions
.
push
(
'<a class="btn btn-success btn-xs '
+
detailFlag
+
'" href="javascript:void(0)" onclick="$.operate.detailTab(
\'
'
+
row
.
performancesId
+
'
\'
)"><i class="fa fa-edit"></i>查看</a> '
);
}
if
(
row
.
syncDamai
==
1
)
{
actions
.
push
(
'<a class="btn btn-warning btn-xs '
+
expertFlag
+
'" href="javascript:void(0)" onclick="f(
\'
'
+
row
.
performancesId
+
'
\'
)"><i class="fa fa-remove"></i>同步</a>'
);
}
//
if (row.syncDamai == 1) {
//
actions.push('
<
a
class
=
"btn btn-warning btn-xs ' + expertFlag + '"
href
=
"javascript:void(0)"
onclick
=
"f(
\
'' + row.performancesId + '
\
')"
><
i
class
=
"fa fa-remove"
><
/i>同步</
a
>
');
//
}
return actions.join('');
}
}]
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/service/impl/KylinDamaiServiceImpl.java
View file @
8bb4314f
...
...
@@ -6,6 +6,7 @@ import com.liquidnet.client.admin.common.utils.DateUtils;
import
com.liquidnet.client.admin.zhengzai.kylin.utils.DataUtils
;
import
com.liquidnet.client.admin.zhengzai.kylin.utils.TaobaoTicketUtils
;
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.*
;
...
...
@@ -337,6 +338,11 @@ public class KylinDamaiServiceImpl extends ServiceImpl<KylinRoadShowsMapper, Kyl
}
}
@Override
public
ResponseDto
<
Boolean
>
scheduledSyncDamai
()
{
return
null
;
}
public
static
void
main
(
String
[]
args
)
{
Long
a
=
IDGenerator
.
getDamaiCode
(
"1360935572095672321307852"
);
...
...
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinOrderTicketEntities.java
View file @
8bb4314f
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
{
...
...
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinPerformanceStatus.java
View file @
8bb4314f
...
...
@@ -160,6 +160,13 @@ public class KylinPerformanceStatus implements Serializable ,Cloneable{
*/
private
Integer
fieldAuditStatus
;
/**
* 该演出的场地场次票种基础信息是否已推过大麦 0否 1是
*/
private
Integer
isDamaiBasicSynced
;
/**
* 创建时间
*/
...
...
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinOrderTicketsMapper.java
View file @
8bb4314f
...
...
@@ -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
);
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinPerformancesMapper.java
View file @
8bb4314f
...
...
@@ -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
);
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/resources/com.liquidnet.service.kylin.mapper/KylinOrderTicketsMapper.xml
View file @
8bb4314f
...
...
@@ -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 IN (0, 3) THEN 1
WHEN (ote.is_payment IN (2, 3) OR ots.transfer_status IN (2, 6)) AND ote.is_damai_withdraw_synced IN (0, 3) 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 IN (0, 3))
OR
((ote.is_payment IN (2, 3) OR ots.transfer_status IN (2, 6)) AND ote.is_damai_withdraw_synced IN (0, 3))
)
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>
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/resources/com.liquidnet.service.kylin.mapper/KylinPerformancesMapper.xml
View file @
8bb4314f
...
...
@@ -1327,4 +1327,17 @@ 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 1=1
AND kps.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>
liquidnet-bus-feign/liquidnet-api-feign-kylin/src/main/java/com/liquidnet/service/feign/kylin/task/FeignPlatformTaskClient.java
View file @
8bb4314f
...
...
@@ -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
{
...
...
@@ -31,23 +29,29 @@ public interface FeignPlatformTaskClient {
@GetMapping
(
"platform/performance/line"
)
ResponseDto
<
Boolean
>
performanceLine
();
/**
* 定时开票提醒
*
* @author zjp
* @return: com.liquidnet.service.base.ResponseDto<java.lang.Boolean>
* @date 2024/3/21 18:03
*/
*/
@GetMapping
(
"platform/performance/subscribePush"
)
ResponseDto
<
Boolean
>
performanceSubscribePush
();
/*
* @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
();
}
liquidnet-bus-feign/liquidnet-api-feign-platform/src/main/java/com/liquidnet/service/feign/platform/api/FeignPlatformApiClient.java
View file @
8bb4314f
...
...
@@ -5,6 +5,7 @@ import feign.hystrix.FallbackFactory;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
@Component
...
...
@@ -29,4 +30,7 @@ public interface FeignPlatformApiClient {
@RequestParam
(
"pageSize"
)
Integer
pageSize
);
@PostMapping
(
"platform/damai/scheduledSync"
)
ResponseDto
<
Boolean
>
scheduledSyncDamai
();
}
liquidnet-bus-service/liquidnet-service-executor-all/liquidnet-service-executor-main/src/main/java/com/liquidnet/service/executor/main/handler/KylinTaskHandler.java
View file @
8bb4314f
...
...
@@ -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
();
...
...
@@ -82,14 +85,15 @@ public class KylinTaskHandler {
XxlJobHelper
.
handleFail
();
}
}
/**
* 开票提醒定时推送
*
* @author zjp
* @param null
* @param null
* @return: null
* @date 2024/3/21 15:32
*/
*/
@XxlJob
(
value
=
"sev-platform:performanceSubscribePush"
)
public
void
performanceSubscribePush
()
{
try
{
...
...
@@ -102,6 +106,7 @@ public class KylinTaskHandler {
/**
* 退款失败自动处理
*
* @author zjp
* @param null
* @return: null
...
...
@@ -116,4 +121,5 @@ public class KylinTaskHandler {
XxlJobHelper
.
handleFail
();
}
}
}
liquidnet-bus-service/liquidnet-service-executor-all/liquidnet-service-executor-main/src/main/java/com/liquidnet/service/executor/main/handler/PlatformTaskHandler.java
View file @
8bb4314f
...
...
@@ -153,4 +153,14 @@ public class PlatformTaskHandler {
XxlJobHelper
.
handleFail
();
}
}
@XxlJob
(
value
=
"sev-platform:scheduledSyncDamai"
)
public
void
scheduledSyncDamaiHandler
()
{
try
{
XxlJobHelper
.
handleSuccess
(
"定时大麦同步结果:"
+
feignPlatformApiClient
.
scheduledSyncDamai
().
getData
());
}
catch
(
Exception
e
)
{
XxlJobHelper
.
log
(
e
);
XxlJobHelper
.
handleFail
();
}
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/docu/damai_sync_migration.sql
0 → 100644
View file @
8bb4314f
-- 1. 商演同步大麦开关设计及防复推
ALTER
TABLE
`kylin_performance_status`
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=推送失败'
;
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/lib/taobao-sdk-java-auto_1600401599540-20210607-impl.jar
0 → 100644
View file @
8bb4314f
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/lib/taobao-sdk-java-auto_1600401599540-20210607.jar
0 → 100644
View file @
8bb4314f
File added
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/pom.xml
View file @
8bb4314f
...
...
@@ -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>
...
...
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/PlatformDamaiController.java
0 → 100644
View file @
8bb4314f
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
();
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/service/impl/PlatformDamaiServiceImpl.java
0 → 100644
View file @
8bb4314f
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
())
{
log
.
info
(
"[大麦定时同步] 该演出无需要推送订单 performancesId={}"
,
performancesId
);
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
());
}
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/utils/DataUtils.java
View file @
8bb4314f
...
...
@@ -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
;
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/utils/DateUtils.java
0 → 100644
View file @
8bb4314f
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
+
"分钟"
;
}
}
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/utils/TaobaoTicketUtils.java
0 → 100644
View file @
8bb4314f
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
;
}
}
}
liquidnet-bus-service/liquidnet-service-slime/liquidnet-service-slime-impl/src/main/java/com/liquidnet/service/slime/service/impl/KylinPerformancesPartnerServiceImpl.java
View file @
8bb4314f
...
...
@@ -256,6 +256,7 @@ public class KylinPerformancesPartnerServiceImpl implements IKylinPerformancesPa
performancePartnerVo
.
setIsTrueName
(
step2Param
.
getIsTrueName
());
performancePartnerVo
.
setLimitCount
(
step2Param
.
getLimitCount
());
performancePartnerVo
.
setIdCount
(
step2Param
.
getIdCount
());
performancePartnerVo
.
setCreatedAt
(
createdAt
.
format
(
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
)));
performancePartnerVo
.
setIsSubmit
(
step2Param
.
getIsSubmit
());
// performancePartnerVo.setStatusSell(1);
...
...
@@ -352,6 +353,7 @@ public class KylinPerformancesPartnerServiceImpl implements IKylinPerformancesPa
performancePartnerVo
.
setIsTrueName
(
step2Param
.
getIsTrueName
());
performancePartnerVo
.
setLimitCount
(
step2Param
.
getLimitCount
());
performancePartnerVo
.
setIdCount
(
step2Param
.
getIdCount
());
performancePartnerVo
.
setCreatedAt
(
now
.
format
(
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
)));
performancePartnerVo
.
setUpdatedAt
(
now
.
format
(
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
)));
performancePartnerVo
.
setIsSubmit
(
step2Param
.
getIsSubmit
());
...
...
@@ -484,6 +486,7 @@ public class KylinPerformancesPartnerServiceImpl implements IKylinPerformancesPa
vo
.
setIsTrueName
(
step2Param
.
getIsTrueName
());
vo
.
setLimitCount
(
step2Param
.
getLimitCount
());
vo
.
setIdCount
(
step2Param
.
getIdCount
());
mongoSlimeUtils
.
updateKylinPerformanceVoById
(
vo
);
redisSlimeUtils
.
delPerformanceVo
(
performanceId
);
...
...
liquidnet-bus-service/liquidnet-service-slime/liquidnet-service-slime-impl/src/main/java/com/liquidnet/service/slime/util/PerformanceUtils.java
View file @
8bb4314f
...
...
@@ -294,6 +294,7 @@ public class PerformanceUtils {
}
else
{
performanceStatus
.
setStatusSell
(
1
);
}
performanceRelations
.
setPerformanceId
(
performances
.
getPerformancesId
());
performanceRelations
.
setPerformanceRelationsId
(
IDGenerator
.
nextSnowId
());
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment