记得上下班打卡 | 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
7cbf19f4
Commit
7cbf19f4
authored
Mar 05, 2026
by
wangyifan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
演出管理关联艺人
parent
087c6eb9
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1306 additions
and
5 deletions
+1306
-5
zhengzai-V1.5-20260304.sql
docu/zhengzai-V1.5-20260304.sql
+2
-2
KylinArtistController.java
.../web/controller/zhengzai/kylin/KylinArtistController.java
+175
-2
KylinPerformancesController.java
...ontroller/zhengzai/kylin/KylinPerformancesController.java
+33
-0
artistLineup.html
...s/templates/zhengzai/kylin/performances/artistLineup.html
+986
-0
details.html
...ources/templates/zhengzai/kylin/performances/details.html
+14
-0
KylinArtistAssociationStatusDto.java
...et/service/kylin/dao/KylinArtistAssociationStatusDto.java
+31
-0
KylinArtistPerformanceDao.java
...iquidnet/service/kylin/dao/KylinArtistPerformanceDao.java
+25
-0
KylinArtistPerformanceMapper.java
...et/service/kylin/mapper/KylinArtistPerformanceMapper.java
+9
-0
KylinArtistPerformanceMapper.xml
...net.service.kylin.mapper/KylinArtistPerformanceMapper.xml
+31
-1
No files found.
docu/zhengzai-V1.5-20260304.sql
View file @
7cbf19f4
...
...
@@ -48,10 +48,10 @@ CREATE TABLE `kylin_artist_performance` (
`created_at`
datetime
DEFAULT
CURRENT_TIMESTAMP
COMMENT
'创建时间'
,
`updated_at`
datetime
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'更新时间'
,
PRIMARY
KEY
(
`mid`
),
UNIQUE
KEY
`uk_artist_performance`
(
`artist_id`
,
`performances_id`
)
,
UNIQUE
KEY
`uk_artist_performance`
(
`artist_id`
,
`performances_id`
,
`times_id`
)
USING
BTREE
COMMENT
'艺人、演出、场次唯一索引'
,
KEY
`idx_performances_id`
(
`performances_id`
),
KEY
`idx_artist_id`
(
`artist_id`
)
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
4
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_0900_ai_ci
COMMENT
=
'艺人-演出关联表'
;
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
83
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_0900_ai_ci
COMMENT
=
'艺人-演出关联表'
;
-- 艺人操作记录表
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/kylin/KylinArtistController.java
View file @
7cbf19f4
package
com
.
liquidnet
.
client
.
admin
.
web
.
controller
.
zhengzai
.
kylin
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.github.pagehelper.PageInfo
;
import
com.liquidnet.client.admin.common.annotation.Log
;
import
com.liquidnet.client.admin.common.core.controller.BaseController
;
import
com.liquidnet.client.admin.common.core.domain.AjaxResult
;
import
com.liquidnet.client.admin.common.core.page.TableDataInfo
;
import
com.liquidnet.client.admin.common.enums.BusinessType
;
import
com.liquidnet.service.kylin.dao.KylinArtistAssociationStatusDto
;
import
com.liquidnet.service.kylin.dao.KylinArtistDao
;
import
com.liquidnet.service.kylin.dao.KylinArtistOperationLogDao
;
import
com.liquidnet.service.kylin.dao.KylinArtistPerformanceDao
;
import
com.liquidnet.service.kylin.dto.param.ArtistParam
;
import
com.liquidnet.service.kylin.dto.param.ArtistSearchParam
;
import
com.liquidnet.service.kylin.dto.vo.ArtistVo
;
import
com.liquidnet.service.kylin.entity.KylinArtistPerformance
;
import
com.liquidnet.service.kylin.mapper.KylinArtistPerformanceMapper
;
import
com.liquidnet.service.kylin.service.admin.IKylinArtistService
;
import
com.liquidnet.service.kylin.service.admin.IKylinArtistOperationLogService
;
import
io.swagger.annotations.Api
;
...
...
@@ -21,7 +26,10 @@ import org.springframework.stereotype.Controller;
import
org.springframework.ui.ModelMap
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
import
com.liquidnet.service.kylin.entity.KylinArtist
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* <p>
...
...
@@ -47,13 +55,15 @@ public class KylinArtistController extends BaseController {
@Autowired
private
IKylinArtistOperationLogService
operationLogService
;
@Autowired
private
KylinArtistPerformanceMapper
artistPerformanceMapper
;
@GetMapping
(
"/create"
)
@RequiresPermissions
(
"kylin:artist:create"
)
public
String
create
(
ModelMap
mmap
)
{
mmap
.
put
(
"platformUrl"
,
platformUrl
);
return
prefix
+
"/create"
;
}
@GetMapping
(
"/update/{artistId}"
)
@RequiresPermissions
(
"kylin:artist:update"
)
public
String
update
(
@PathVariable
(
"artistId"
)
String
artistId
,
ModelMap
mmap
)
{
...
...
@@ -200,4 +210,167 @@ public class KylinArtistController extends BaseController {
operationLogService
.
getOperationLogs
(
artistId
,
pageNum
,
pageSize
);
return
getDataTable
(
result
.
getList
());
}
/**
* 获取指定场次的艺人阵容
*/
@GetMapping
(
"/getSessionArtists"
)
@ResponseBody
public
AjaxResult
getSessionArtists
(
String
performancesId
,
String
timesId
)
{
try
{
if
(
performancesId
==
null
||
timesId
==
null
)
{
return
error
(
"参数不能为空"
);
}
// 查询该场次的艺人
List
<
KylinArtistPerformanceDao
>
artists
=
artistPerformanceMapper
.
selectArtistsByPerformanceAndTimes
(
performancesId
,
timesId
);
return
AjaxResult
.
success
(
artists
);
}
catch
(
Exception
e
)
{
return
error
(
"获取艺人阵容失败: "
+
e
.
getMessage
());
}
}
/**
* 更新艺人排序
*/
@Log
(
title
=
"更新演出艺人排序"
,
businessType
=
BusinessType
.
UPDATE
)
@PostMapping
(
"/updateArtistOrder"
)
@ResponseBody
public
AjaxResult
updateArtistOrder
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
try
{
String
performancesId
=
(
String
)
params
.
get
(
"performancesId"
);
String
timesId
=
(
String
)
params
.
get
(
"timesId"
);
List
<
Map
<
String
,
Object
>>
orderData
=
(
List
<
Map
<
String
,
Object
>>)
params
.
get
(
"orderData"
);
if
(
orderData
==
null
||
orderData
.
isEmpty
())
{
return
error
(
"排序数据不能为空"
);
}
// 更新每个艺人的排序
for
(
Map
<
String
,
Object
>
item
:
orderData
)
{
Long
mid
=
Long
.
valueOf
(
item
.
get
(
"mid"
).
toString
());
Integer
sort
=
Integer
.
valueOf
(
item
.
get
(
"sort"
).
toString
());
KylinArtistPerformance
entity
=
artistPerformanceMapper
.
selectById
(
mid
);
if
(
entity
!=
null
)
{
entity
.
setSort
(
sort
);
artistPerformanceMapper
.
updateById
(
entity
);
}
}
return
success
(
"排序更新成功"
);
}
catch
(
Exception
e
)
{
return
error
(
"更新排序失败: "
+
e
.
getMessage
());
}
}
/**
* 删除演出艺人关联
*/
@Log
(
title
=
"删除演出艺人"
,
businessType
=
BusinessType
.
DELETE
)
@PostMapping
(
"/deletePerformanceArtist"
)
@ResponseBody
public
AjaxResult
deletePerformanceArtist
(
Long
mid
,
String
performancesId
,
String
timesId
)
{
try
{
if
(
mid
==
null
)
{
return
error
(
"参数错误"
);
}
int
result
=
artistPerformanceMapper
.
deleteById
(
mid
);
if
(
result
>
0
)
{
return
success
(
"删除成功"
);
}
else
{
return
error
(
"删除失败"
);
}
}
catch
(
Exception
e
)
{
return
error
(
"删除失败: "
+
e
.
getMessage
());
}
}
/**
* 获取所有艺人以供关联
*/
@GetMapping
(
"/getAllArtists"
)
@ResponseBody
public
AjaxResult
getAllArtists
(
String
performancesId
,
String
timesId
,
String
keyword
)
{
try
{
// 1. 获取所有艺人
List
<
KylinArtist
>
allArtists
=
kylinArtistService
.
list
(
new
QueryWrapper
<
KylinArtist
>()
.
like
(
keyword
!=
null
&&
!
keyword
.
isEmpty
(),
"artist_name"
,
keyword
)
.
orderByDesc
(
"created_at"
));
// 2. 获取当前场次已关联的艺人,用 Map 保留各自的 sort 值
List
<
KylinArtistPerformanceDao
>
associatedArtists
=
artistPerformanceMapper
.
selectArtistsByPerformanceAndTimes
(
performancesId
,
timesId
);
// key: artistId value: 演出关联表中的 sort(越大越靠前)
Map
<
String
,
Integer
>
associatedSortMap
=
associatedArtists
.
stream
()
.
collect
(
Collectors
.
toMap
(
KylinArtistPerformanceDao:
:
getArtistId
,
KylinArtistPerformanceDao:
:
getSort
,
(
existing
,
replacement
)
->
existing
// 重复 key 保留已有值
));
// 3. 组装返回结果
List
<
KylinArtistAssociationStatusDto
>
resultList
=
allArtists
.
stream
().
map
(
artist
->
{
KylinArtistAssociationStatusDto
dto
=
new
KylinArtistAssociationStatusDto
();
dto
.
setArtistId
(
artist
.
getArtistId
());
dto
.
setArtistName
(
artist
.
getArtistName
());
dto
.
setAvatarUrl
(
artist
.
getAvatarUrl
());
boolean
associated
=
associatedSortMap
.
containsKey
(
artist
.
getArtistId
());
dto
.
setAssociated
(
associated
);
// sort 取演出关联表的值;未关联的艺人 sort 置 0
dto
.
setSort
(
associated
?
associatedSortMap
.
get
(
artist
.
getArtistId
())
:
0
);
return
dto
;
}).
collect
(
Collectors
.
toList
());
return
AjaxResult
.
success
(
resultList
);
}
catch
(
Exception
e
)
{
return
error
(
"获取艺人列表失败: "
+
e
.
getMessage
());
}
}
/**
* 修改艺人关联
* @param payload
* @return
*/
@PostMapping
(
"/updateArtistAssociations"
)
@ResponseBody
public
AjaxResult
updateArtistAssociations
(
@RequestBody
Map
<
String
,
Object
>
payload
)
{
try
{
String
performancesId
=
(
String
)
payload
.
get
(
"performancesId"
);
String
timesId
=
(
String
)
payload
.
get
(
"timesId"
);
List
<
Map
<
String
,
Object
>>
artistOrders
=
(
List
<
Map
<
String
,
Object
>>)
payload
.
get
(
"artistOrders"
);
// 1. 删除当前场次所有已关联的艺人
artistPerformanceMapper
.
delete
(
new
QueryWrapper
<
KylinArtistPerformance
>()
.
eq
(
"performances_id"
,
performancesId
)
.
eq
(
"times_id"
,
timesId
));
// 2. 按前端传入的顺序重新关联,sort 越大越靠前
if
(
artistOrders
!=
null
&&
!
artistOrders
.
isEmpty
())
{
for
(
Map
<
String
,
Object
>
item
:
artistOrders
)
{
String
artistId
=
(
String
)
item
.
get
(
"artistId"
);
Integer
sort
=
item
.
get
(
"sort"
)
!=
null
?
Integer
.
valueOf
(
item
.
get
(
"sort"
).
toString
())
:
0
;
KylinArtistPerformance
newAssociation
=
new
KylinArtistPerformance
();
newAssociation
.
setPerformancesId
(
performancesId
);
newAssociation
.
setTimesId
(
timesId
);
newAssociation
.
setArtistId
(
artistId
);
newAssociation
.
setSort
(
sort
);
artistPerformanceMapper
.
insert
(
newAssociation
);
}
}
return
success
(
"关联更新成功"
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"error"
,
e
);
return
error
(
"更新关联失败: "
+
e
.
getMessage
());
}
}
}
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/kylin/KylinPerformancesController.java
View file @
7cbf19f4
...
...
@@ -26,6 +26,7 @@ import com.liquidnet.service.kylin.dto.param.SysDamaiParam;
import
com.liquidnet.service.kylin.dto.vo.admin.*
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinPerformanceMisVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.KylinPerformancesVo
;
import
com.liquidnet.service.kylin.dto.vo.partner.TicketTimesTicketCreatePartnerVo
;
import
com.liquidnet.service.kylin.entity.KylinOrderImport
;
import
com.liquidnet.service.kylin.service.admin.IKylinPerformancesAdminService
;
import
com.liquidnet.service.kylin.service.other.DamaiService
;
...
...
@@ -258,6 +259,38 @@ public class KylinPerformancesController extends BaseController {
return
prefix
+
"/subscribe"
;
}
/**
* 演出阵容页面
*/
@GetMapping
(
value
=
"/artistLineup/{performancesId}"
)
public
String
artistLineup
(
@PathVariable
(
"performancesId"
)
String
performancesId
,
ModelMap
mmap
)
{
try
{
// 获取演出信息
KylinPerformanceMisVo
performance
=
kylinPerformancesService
.
performanceDetails
(
performancesId
);
if
(
performance
==
null
)
{
mmap
.
put
(
"errorMsg"
,
"演出不存在"
);
return
prefix
+
"/artistLineup"
;
}
// 将场次数据转换为JSON
List
<
TicketTimesTicketCreatePartnerVo
>
ticketTimes
=
performance
.
getTicketTimes
();
String
ticketTimesJson
=
"[]"
;
if
(
ticketTimes
!=
null
&&
!
ticketTimes
.
isEmpty
())
{
com
.
fasterxml
.
jackson
.
databind
.
ObjectMapper
mapper
=
new
com
.
fasterxml
.
jackson
.
databind
.
ObjectMapper
();
ticketTimesJson
=
mapper
.
writeValueAsString
(
ticketTimes
);
}
mmap
.
put
(
"performancesId"
,
performancesId
);
mmap
.
put
(
"performanceTitle"
,
performance
.
getTitle
());
mmap
.
put
(
"ticketTimesJson"
,
ticketTimesJson
);
return
prefix
+
"/artistLineup"
;
}
catch
(
Exception
e
)
{
mmap
.
put
(
"errorMsg"
,
"加载演出阵容失败: "
+
e
.
getMessage
());
return
prefix
+
"/artistLineup"
;
}
}
@Log
(
title
=
"预约统计:导出列表"
)
@PostMapping
(
"/subscribe/export"
)
@ResponseBody
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/performances/artistLineup.html
0 → 100644
View file @
7cbf19f4
This diff is collapsed.
Click to expand it.
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/resources/templates/zhengzai/kylin/performances/details.html
View file @
7cbf19f4
...
...
@@ -43,6 +43,8 @@
</li>
<li
id=
"li-tab-11"
><a
data-toggle=
"tab"
href=
"#tab-11"
aria-expanded=
"false"
onclick=
"subscribeInfo()"
>
预约统计
</a>
</li>
<li
id=
"li-tab-12"
><a
data-toggle=
"tab"
href=
"#tab-12"
aria-expanded=
"false"
onclick=
"artistLineupInfo()"
>
演出阵容
</a>
</li>
</ul>
<div
class=
"tab-content"
>
<div
id=
"tab-1"
class=
"tab-pane"
>
...
...
@@ -364,6 +366,13 @@
height=
800px
frameborder=
0
></iframe>
</div>
</div>
<div
id=
"tab-12"
class=
"tab-pane"
>
<div
class=
"panel-body"
>
<iframe
id=
"artist_lineup_iframe"
name=
"artist_lineup_iframe"
marginwidth=
0
marginheight=
0
width=
100%
height=
800px
frameborder=
0
></iframe>
</div>
</div>
</div>
</div>
</div>
...
...
@@ -563,6 +572,11 @@
document
.
getElementById
(
"subscribe_iframe"
).
src
=
"../subscribe/"
+
'[[${kylinPerformanceMisVo.performancesId}]]'
.
replaceAll
(
"
\"
"
,
""
);
}
//演出阵容
function
artistLineupInfo
()
{
document
.
getElementById
(
"artist_lineup_iframe"
).
src
=
"../artistLineup/"
+
'[[${kylinPerformanceMisVo.performancesId}]]'
.
replaceAll
(
"
\"
"
,
""
);
}
$
(
"#tab-nav-1"
).
bind
(
"click"
,
function
()
{
$
(
"#tab_iframe_1"
).
attr
(
"src"
,
prefix
+
"/performanceStatic/"
+
'[[${kylinPerformanceMisVo.performancesId}]]'
.
replaceAll
(
"
\"
"
,
""
));
});
...
...
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/dao/KylinArtistAssociationStatusDto.java
0 → 100644
View file @
7cbf19f4
package
com
.
liquidnet
.
service
.
kylin
.
dao
;
import
lombok.Data
;
@Data
public
class
KylinArtistAssociationStatusDto
{
/**
* 艺人ID
*/
private
String
artistId
;
/**
* 艺人名称
*/
private
String
artistName
;
/**
* 艺人头像地址
*/
private
String
avatarUrl
;
/**
* 是否关联
*/
private
boolean
isAssociated
;
/**
* 排序 越大越靠前
*/
private
int
sort
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/dao/KylinArtistPerformanceDao.java
View file @
7cbf19f4
...
...
@@ -11,6 +11,26 @@ public class KylinArtistPerformanceDao implements Serializable {
private
static
final
long
serialVersionUID
=
1L
;
/**
* 关联记录ID
*/
private
Long
mid
;
/**
* 艺人ID
*/
private
String
artistId
;
/**
* 艺人名称
*/
private
String
artistName
;
/**
* 艺人头像
*/
private
String
avatarUrl
;
/**
* 演出ID
*/
...
...
@@ -36,4 +56,9 @@ public class KylinArtistPerformanceDao implements Serializable {
*/
private
String
timeTitle
;
/**
* 排序权重
*/
private
Integer
sort
;
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinArtistPerformanceMapper.java
View file @
7cbf19f4
...
...
@@ -17,4 +17,13 @@ public interface KylinArtistPerformanceMapper extends BaseMapper<KylinArtistPerf
*/
List
<
KylinArtistPerformanceDao
>
selectPerformanceDaoByArtistId
(
@Param
(
"artistId"
)
String
artistId
);
/**
* 根据演出ID和场次ID查询艺人阵容
*
* @param performancesId 演出ID
* @param timesId 场次ID
* @return 艺人阵容列表
*/
List
<
KylinArtistPerformanceDao
>
selectArtistsByPerformanceAndTimes
(
@Param
(
"performancesId"
)
String
performancesId
,
@Param
(
"timesId"
)
String
timesId
);
}
liquidnet-bus-do/liquidnet-service-kylin-do/src/main/resources/com.liquidnet.service.kylin.mapper/KylinArtistPerformanceMapper.xml
View file @
7cbf19f4
...
...
@@ -4,12 +4,18 @@
<select
id=
"selectPerformanceDaoByArtistId"
parameterType=
"java.lang.String"
resultType=
"com.liquidnet.service.kylin.dao.KylinArtistPerformanceDao"
>
SELECT
ap.mid,
ap.artist_id as artistId,
a.artist_name as artistName,
a.avatar_url as avatarUrl,
p.performances_id as performanceId,
p.title,
DATE_FORMAT(p.time_start, '%Y-%m-%d %H:%i:%s') as timeStart,
t.ticket_times_id as timesId,
t.title as timeTitle
t.title as timeTitle,
ap.sort
FROM kylin_artist_performance ap
INNER JOIN kylin_artist a ON ap.artist_id = a.artist_id
INNER JOIN kylin_performances p ON ap.performances_id = p.performances_id
INNER JOIN kylin_ticket_times t ON ap.times_id = t.ticket_times_id
WHERE ap.artist_id = #{artistId}
...
...
@@ -24,4 +30,28 @@
AND status = 1
</select>
<!-- 根据演出ID和场次ID查询艺人阵容 -->
<select
id=
"selectArtistsByPerformanceAndTimes"
resultType=
"com.liquidnet.service.kylin.dao.KylinArtistPerformanceDao"
>
SELECT
ap.mid,
ap.artist_id as artistId,
ap.times_id as timesId,
ap.sort,
a.artist_name as artistName,
a.avatar_url as avatarUrl,
p.performances_id as performanceId,
p.title,
DATE_FORMAT(p.time_start, '%Y-%m-%d %H:%i:%s') as timeStart,
t.title as timeTitle
FROM kylin_artist_performance ap
INNER JOIN kylin_artist a ON ap.artist_id = a.artist_id
INNER JOIN kylin_performances p ON ap.performances_id = p.performances_id
INNER JOIN kylin_ticket_times t ON ap.times_id = t.ticket_times_id
WHERE ap.performances_id = #{performancesId}
<if
test=
"timesId != null and timesId != ''"
>
AND ap.times_id = #{timesId}
</if>
ORDER BY ap.sort DESC, ap.created_at ASC
</select>
</mapper>
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