Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica-cloud-analysis
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
com.pica.cloud.online.exam
pica-cloud-analysis
提交
901372ef
提交
901372ef
编写于
12月 27, 2018
作者:
minghao.wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feature: redis集群切换,支持传入活动id
上级
a5b1f5ef
流水线
#3061
已通过 于阶段
in 8 second
变更
12
流水线
1
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
138 行增加
和
202 行删除
+138
-202
CommonUtils.java
...m/pica/cloud/online/exam/analysis/common/CommonUtils.java
+0
-11
pom.xml
pom.xml
+1
-1
pom.xml
server/pom.xml
+5
-16
App.java
.../java/com/pica/cloud/online/exam/analysis/server/App.java
+2
-2
BeanConfiguration.java
...exam/analysis/server/configuration/BeanConfiguration.java
+10
-4
SpringContextAware.java
...xam/analysis/server/configuration/SpringContextAware.java
+25
-0
AnalysisController.java
...e/exam/analysis/server/controller/AnalysisController.java
+26
-125
AntiSpamController.java
...e/exam/analysis/server/controller/AntiSpamController.java
+10
-14
CatFilterConfigure.java
...line/exam/analysis/server/monitor/CatFilterConfigure.java
+0
-23
CHCAnalysisService.java
...line/exam/analysis/server/service/CHCAnalysisService.java
+10
-1
CHCAnalysisServiceImpl.java
.../analysis/server/service/impl/CHCAnalysisServiceImpl.java
+48
-5
AnalysisRoundMapper.xml
server/src/main/resources/mybatis/AnalysisRoundMapper.xml
+1
-0
未找到文件。
common/src/main/java/com/pica/cloud/online/exam/analysis/common/CommonUtils.java
浏览文件 @
901372ef
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
common
;
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
common
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.pica.cloud.foundation.redis.RedisClient
;
import
com.pica.cloud.foundation.utils.entity.PicaUser
;
import
com.pica.cloud.foundation.utils.entity.PicaUser
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
...
@@ -25,14 +24,4 @@ public class CommonUtils {
...
@@ -25,14 +24,4 @@ public class CommonUtils {
}
}
return
JSON
.
parseObject
(
JSON
.
toJSONString
(
map
),
PicaUser
.
class
);
return
JSON
.
parseObject
(
JSON
.
toJSONString
(
map
),
PicaUser
.
class
);
}
}
public
static
PicaUser
getUserByToken
(
RedisClient
client
,
String
token
)
{
PicaUser
picaUser
=
null
;
try
{
picaUser
=
CommonUtils
.
getUser
(
client
.
getToken
(
token
));
}
catch
(
Exception
e
)
{
logger
.
error
(
"根据token获取user失败:"
+
token
);
}
return
picaUser
;
}
}
}
pom.xml
浏览文件 @
901372ef
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
<dependency>
<dependency>
<groupId>
com.pica.cloud.foundation
</groupId>
<groupId>
com.pica.cloud.foundation
</groupId>
<artifactId>
pica-cloud-utils
</artifactId>
<artifactId>
pica-cloud-utils
</artifactId>
<version>
1.0.7
-SNAPSHOT
</version>
<version>
2.0.0
-SNAPSHOT
</version>
<scope>
compile
</scope>
<scope>
compile
</scope>
</dependency>
</dependency>
</dependencies>
</dependencies>
...
...
server/pom.xml
浏览文件 @
901372ef
...
@@ -101,17 +101,15 @@
...
@@ -101,17 +101,15 @@
<artifactId>
springfox-swagger-ui
</artifactId>
<artifactId>
springfox-swagger-ui
</artifactId>
<version>
2.8.0
</version>
<version>
2.8.0
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
com.pica.cloud.foundation
</groupId>
<groupId>
redis.clients
</groupId>
<artifactId>
pica-cloud-r
edis
</artifactId>
<artifactId>
j
edis
</artifactId>
<version>
1.1.2
</version>
<version>
2.9.0
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
com.pica.cloud.foundation
</groupId>
<groupId>
com.pica.cloud.foundation
</groupId>
<artifactId>
pica-cloud-
util
s
</artifactId>
<artifactId>
pica-cloud-
redi
s
</artifactId>
<version>
1.
0.7
-SNAPSHOT
</version>
<version>
1.
2.0
-SNAPSHOT
</version>
</dependency>
</dependency>
<dependency>
<dependency>
...
@@ -138,10 +136,6 @@
...
@@ -138,10 +136,6 @@
<version>
5.1.39
</version>
<version>
5.1.39
</version>
</dependency>
</dependency>
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-sleuth-zipkin-stream
</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-stream-rabbit
</artifactId>
<artifactId>
spring-cloud-starter-stream-rabbit
</artifactId>
...
@@ -154,11 +148,6 @@
...
@@ -154,11 +148,6 @@
<scope>
compile
</scope>
<scope>
compile
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
com.pica.cloud.foundation
</groupId>
<artifactId>
pica-cloud-utils
</artifactId>
<version>
1.0.7-SNAPSHOT
</version>
</dependency>
<dependency>
<dependency>
<groupId>
com.dianping.cat
</groupId>
<groupId>
com.dianping.cat
</groupId>
<artifactId>
cat-core
</artifactId>
<artifactId>
cat-core
</artifactId>
...
...
server/src/main/java/com/pica/cloud/online/exam/analysis/server/App.java
浏览文件 @
901372ef
...
@@ -9,10 +9,10 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients;
...
@@ -9,10 +9,10 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
@EnableCircuitBreaker
@EnableCircuitBreaker
@SpringBootApplication
@SpringBootApplication
(
scanBasePackages
=
"com.pica.cloud"
)
@EnableDiscoveryClient
@EnableDiscoveryClient
@EnableSwagger2
@EnableSwagger2
@EnableFeignClients
@EnableFeignClients
(
basePackages
=
"com.pica.cloud"
)
@MapperScan
(
"com.pica.cloud.online.exam.analysis.server.mapper"
)
@MapperScan
(
"com.pica.cloud.online.exam.analysis.server.mapper"
)
public
class
App
{
public
class
App
{
public
static
void
main
(
String
[]
args
)
public
static
void
main
(
String
[]
args
)
...
...
server/src/main/java/com/pica/cloud/online/exam/analysis/server/configuration/BeanConfiguration.java
浏览文件 @
901372ef
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
server
.
configuration
;
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
server
.
configuration
;
import
com.pica.cloud.foundation.redis.CacheMigrateClient
;
import
com.pica.cloud.foundation.redis.ICacheClient
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.cloud.context.config.annotation.RefreshScope
;
import
org.springframework.cloud.context.config.annotation.RefreshScope
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
com.pica.cloud.foundation.redis.RedisClient
;
@Configuration
@Configuration
@RefreshScope
@RefreshScope
public
class
BeanConfiguration
{
public
class
BeanConfiguration
{
@Autowired
private
SpringContextAware
springContextAware
;
@Value
(
"${spring.redis.config}"
)
@Value
(
"${spring.redis.config}"
)
private
String
configStr
;
private
String
configStr
;
@Bean
@Bean
public
RedisClient
redisClient
()
{
@ConditionalOnMissingBean
System
.
out
.
println
(
configStr
);
public
ICacheClient
cacheClient
()
{
return
new
CacheMigrateClient
(
springContextAware
.
getActiveProfile
());
return
new
RedisClient
(
configStr
);
}
}
}
}
server/src/main/java/com/pica/cloud/online/exam/analysis/server/configuration/SpringContextAware.java
0 → 100644
浏览文件 @
901372ef
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
server
.
configuration
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.stereotype.Component
;
/**
* @author wuminghao
* @date 2018/12/27 14:11
*/
@Component
public
class
SpringContextAware
implements
ApplicationContextAware
{
private
ApplicationContext
context
=
null
;
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
this
.
context
=
applicationContext
;
}
public
String
getActiveProfile
()
{
return
context
.
getEnvironment
().
getActiveProfiles
()[
0
];
}
}
server/src/main/java/com/pica/cloud/online/exam/analysis/server/controller/AnalysisController.java
浏览文件 @
901372ef
...
@@ -5,13 +5,12 @@ import com.dianping.cat.Cat;
...
@@ -5,13 +5,12 @@ import com.dianping.cat.Cat;
import
com.dianping.cat.message.Transaction
;
import
com.dianping.cat.message.Transaction
;
import
com.pica.cloud.foundation.entity.PicaResponse
;
import
com.pica.cloud.foundation.entity.PicaResponse
;
import
com.pica.cloud.foundation.entity.PicaResultCode
;
import
com.pica.cloud.foundation.entity.PicaResultCode
;
import
com.pica.cloud.foundation.redis.RedisClient
;
import
com.pica.cloud.foundation.utils.annotation.LoginPermission
;
import
com.pica.cloud.foundation.utils.controller.BaseController
;
import
com.pica.cloud.foundation.utils.entity.PicaUser
;
import
com.pica.cloud.foundation.utils.entity.PicaUser
;
import
com.pica.cloud.online.exam.analysis.common.CommonUtils
;
import
com.pica.cloud.online.exam.analysis.common.constants.CommonConstants
;
import
com.pica.cloud.online.exam.analysis.common.constants.CommonConstants
;
import
com.pica.cloud.online.exam.analysis.common.dto.*
;
import
com.pica.cloud.online.exam.analysis.common.dto.*
;
import
com.pica.cloud.online.exam.analysis.common.util.ReturnUtil
;
import
com.pica.cloud.online.exam.analysis.common.util.ReturnUtil
;
import
com.pica.cloud.online.exam.analysis.server.client.IConfigServiceClient
;
import
com.pica.cloud.online.exam.analysis.server.configuration.PropertiesConfiguration
;
import
com.pica.cloud.online.exam.analysis.server.configuration.PropertiesConfiguration
;
import
com.pica.cloud.online.exam.analysis.server.entity.*
;
import
com.pica.cloud.online.exam.analysis.server.entity.*
;
import
com.pica.cloud.online.exam.analysis.server.service.AntiSpamService
;
import
com.pica.cloud.online.exam.analysis.server.service.AntiSpamService
;
...
@@ -19,16 +18,16 @@ import com.pica.cloud.online.exam.analysis.server.service.CHCAnalysisService;
...
@@ -19,16 +18,16 @@ import com.pica.cloud.online.exam.analysis.server.service.CHCAnalysisService;
import
com.pica.cloud.online.exam.analysis.server.service.CHCRankingListService
;
import
com.pica.cloud.online.exam.analysis.server.service.CHCRankingListService
;
import
com.pica.cloud.online.exam.analysis.server.service.DoctorService
;
import
com.pica.cloud.online.exam.analysis.server.service.DoctorService
;
import
com.pica.cloud.online.exam.analysis.server.utils.DateUtils
;
import
com.pica.cloud.online.exam.analysis.server.utils.DateUtils
;
import
com.pica.cloud.foundation.redis.ICacheClient
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
javassist.bytecode.ExceptionsAttribute
;
import
org.omg.CORBA.INTERNAL
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.
cloud.client.loadbalancer.LoadBalancerClient
;
import
org.springframework.
beans.factory.annotation.Qualifier
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
javax.ws.rs.Path
;
import
java.text.SimpleDateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.Date
;
...
@@ -40,31 +39,21 @@ import java.util.List;
...
@@ -40,31 +39,21 @@ import java.util.List;
*/
*/
@RestController
@RestController
@RequestMapping
(
"/"
)
@RequestMapping
(
"/"
)
@Api
(
value
=
"题目分析接口"
,
description
=
"查看活动及详情,用户点赞、医生回复"
)
public
class
AnalysisController
extends
BaseController
{
public
class
AnalysisController
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
AnalysisController
.
class
);
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
AnalysisController
.
class
);
@Qualifier
(
"cacheMigrateClient"
)
@Autowired
@Autowired
private
RedisClient
redisClient
;
private
ICacheClient
redisClient
;
@Autowired
private
LoadBalancerClient
slb
;
@Autowired
private
IConfigServiceClient
client
;
@Autowired
@Autowired
private
CHCAnalysisService
analysisService
;
private
CHCAnalysisService
analysisService
;
@Autowired
@Autowired
private
DoctorService
doctorService
;
private
DoctorService
doctorService
;
@Autowired
@Autowired
private
AntiSpamService
antiSpamService
;
private
AntiSpamService
antiSpamService
;
@Autowired
@Autowired
private
CHCRankingListService
rankingListService
;
private
CHCRankingListService
rankingListService
;
@Autowired
@Autowired
private
PropertiesConfiguration
propertiesConfiguration
;
private
PropertiesConfiguration
propertiesConfiguration
;
...
@@ -81,59 +70,17 @@ public class AnalysisController {
...
@@ -81,59 +70,17 @@ public class AnalysisController {
}
}
@ApiOperation
(
value
=
"获取活动详情"
,
response
=
PicaResponse
.
class
)
@ApiOperation
(
value
=
"获取活动详情"
,
response
=
PicaResponse
.
class
)
@RequestMapping
(
value
=
"/activityDetail"
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
@RequestMapping
(
value
=
{
"/activityDetail"
,
"/activityDetail/{id}"
}
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
public
PicaResponse
<
CHCAnalysisDto
>
getActivityDetail
(
@
RequestParam
(
required
=
false
)
Integer
id
,
public
PicaResponse
<
CHCAnalysisDto
>
getActivityDetail
(
@
PathVariable
(
required
=
false
)
Integer
id
,
@RequestHeader
(
required
=
false
)
String
token
)
{
@RequestHeader
(
required
=
false
)
String
token
)
{
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/activityDetail"
);
PicaResponse
.
Builder
<
CHCAnalysisDto
>
builder
=
new
PicaResponse
.
Builder
<>();
PicaResponse
.
Builder
<
CHCAnalysisDto
>
builder
=
new
PicaResponse
.
Builder
<>();
/**
PicaUser
user
=
null
;
* 如果不传活动id进来,活动id就用1
*/
id
=
(
id
==
null
?
CHC_ANALYSIS_ID
:
id
);
try
{
try
{
CHCAnalysisDto
analysisDto
=
analysisService
.
getCHCAnalysisDtoById
(
id
);
user
=
fetchPicaUser
();
PicaUser
user
=
null
;
if
(
token
!=
null
)
{
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
}
if
(
rankingListService
.
isRankingInTop200
(
user
!=
null
?
user
.
getId
()
:
0
))
{
analysisDto
.
setIsJoinIn
(
1
);
}
else
{
analysisDto
.
setIsJoinIn
(
0
);
}
List
<
AnalysisRoundDto
>
roundList
=
analysisService
.
getRoundListByAnalysisId
(
id
);
/**
* chc活动固定返回两轮, 将第一轮设置为所有
*/
if
(
roundList
.
size
()
>
0
)
{
roundList
.
get
(
0
).
setRoundId
(-
1
);
}
/**
* 如果是最后一起, 补上最后一期 和前端约定为-2
*/
if
(
roundList
.
size
()
==
1
)
{
AnalysisRoundDto
analysisRoundDto
=
new
AnalysisRoundDto
();
analysisRoundDto
.
setRoundId
(-
2
);
roundList
.
add
(
analysisRoundDto
);
}
analysisDto
.
setRoundList
(
roundList
);
builder
.
setData
(
analysisDto
);
t
.
setStatus
(
Transaction
.
SUCCESS
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
"getActivityDetail"
,
e
);
t
.
setStatus
(
e
);
Cat
.
logError
(
e
);
}
}
t
.
complete
(
);
builder
.
setData
(
analysisService
.
getActivityDetail
(
id
==
null
?
CHC_ANALYSIS_ID
:
id
,
user
)
);
return
builder
.
build
();
return
builder
.
build
();
}
}
...
@@ -197,10 +144,7 @@ public class AnalysisController {
...
@@ -197,10 +144,7 @@ public class AnalysisController {
@RequestHeader
(
required
=
false
)
String
token
)
{
@RequestHeader
(
required
=
false
)
String
token
)
{
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/replyList"
);
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/replyList"
);
PicaUser
user
=
null
;
PicaUser
user
=
fetchPicaUser
();
if
(
token
!=
null
)
{
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
}
PicaResponse
.
Builder
<
ExamTitleReplyDto
>
builder
=
new
PicaResponse
.
Builder
<>();
PicaResponse
.
Builder
<
ExamTitleReplyDto
>
builder
=
new
PicaResponse
.
Builder
<>();
...
@@ -264,10 +208,7 @@ public class AnalysisController {
...
@@ -264,10 +208,7 @@ public class AnalysisController {
@RequestHeader
(
required
=
false
)
String
token
)
{
@RequestHeader
(
required
=
false
)
String
token
)
{
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/replyDetail"
);
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/replyDetail"
);
PicaUser
user
=
null
;
PicaUser
user
=
fetchPicaUser
();
if
(
token
!=
null
)
{
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
}
PicaResponse
.
Builder
<
ExamTitleReplyDetailDto
>
builder
=
new
PicaResponse
.
Builder
<>();
PicaResponse
.
Builder
<
ExamTitleReplyDetailDto
>
builder
=
new
PicaResponse
.
Builder
<>();
...
@@ -326,11 +267,7 @@ public class AnalysisController {
...
@@ -326,11 +267,7 @@ public class AnalysisController {
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/replyDetailByExamTitleId"
);
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/replyDetailByExamTitleId"
);
logger
.
info
(
"replyDetailByExamTitleId: examTitleId == "
+
examTitleId
.
toString
()
+
", token="
+
token
);
logger
.
info
(
"replyDetailByExamTitleId: examTitleId == "
+
examTitleId
.
toString
()
+
", token="
+
token
);
PicaUser
user
=
null
;
PicaUser
user
=
fetchPicaUser
();
if
(
token
!=
null
)
{
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
}
PicaResponse
.
Builder
<
ExamTitleReplyDetailDto
>
builder
=
new
PicaResponse
.
Builder
<>();
PicaResponse
.
Builder
<
ExamTitleReplyDetailDto
>
builder
=
new
PicaResponse
.
Builder
<>();
...
@@ -385,16 +322,14 @@ public class AnalysisController {
...
@@ -385,16 +322,14 @@ public class AnalysisController {
return
builder
.
build
();
return
builder
.
build
();
}
}
@LoginPermission
@ApiOperation
(
value
=
"点赞"
,
response
=
PicaResponse
.
class
)
@ApiOperation
(
value
=
"点赞"
,
response
=
PicaResponse
.
class
)
@RequestMapping
(
value
=
"/starReply/{replyId}/analysis/{analysisId}/round/{roundId}/examTitle/{examTitleId}"
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
@RequestMapping
(
value
=
"/starReply/{replyId}/analysis/{analysisId}/round/{roundId}/examTitle/{examTitleId}"
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
public
PicaResponse
starReply
(
@PathVariable
(
"analysisId"
)
Integer
analysisId
,
@PathVariable
(
"roundId"
)
Integer
roundId
,
public
PicaResponse
starReply
(
@PathVariable
(
"analysisId"
)
Integer
analysisId
,
@PathVariable
(
"roundId"
)
Integer
roundId
,
@PathVariable
(
"examTitleId"
)
Integer
examTitleId
,
@PathVariable
(
"replyId"
)
Integer
replyId
,
@PathVariable
(
"examTitleId"
)
Integer
examTitleId
,
@PathVariable
(
"replyId"
)
Integer
replyId
,
@RequestHeader
(
required
=
false
)
String
token
)
{
@RequestHeader
(
required
=
false
)
String
token
)
{
if
(
token
==
null
)
{
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
SYSTEM_NO_TOKEN
);
}
PicaUser
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
PicaUser
user
=
fetchPicaUser
(
);
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
logger
.
info
(
"starrecord: user == null, token="
+
token
);
logger
.
info
(
"starrecord: user == null, token="
+
token
);
...
@@ -433,21 +368,12 @@ public class AnalysisController {
...
@@ -433,21 +368,12 @@ public class AnalysisController {
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
SUCCESS
);
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
SUCCESS
);
}
}
@LoginPermission
@ApiOperation
(
value
=
"取消点赞"
,
response
=
PicaResponse
.
class
)
@ApiOperation
(
value
=
"取消点赞"
,
response
=
PicaResponse
.
class
)
@RequestMapping
(
value
=
"/cancelStar/{replyId}"
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
@RequestMapping
(
value
=
"/cancelStar/{replyId}"
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
public
PicaResponse
cancelStar
(
@PathVariable
(
"replyId"
)
Integer
replyId
,
public
PicaResponse
cancelStar
(
@PathVariable
(
"replyId"
)
Integer
replyId
,
@RequestHeader
(
required
=
false
)
String
token
)
{
@RequestHeader
(
required
=
false
)
String
token
)
{
if
(
token
==
null
)
{
PicaUser
user
=
fetchPicaUser
();
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
SYSTEM_NO_TOKEN
);
}
PicaUser
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
logger
.
info
(
"cancelStar: user == null, token="
+
token
);
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
}
logger
.
info
(
"cancelStar: replyid="
+
replyId
.
toString
()
+
" token="
+
token
);
logger
.
info
(
"cancelStar: replyid="
+
replyId
.
toString
()
+
" token="
+
token
);
if
(
0
!=
analysisService
.
removeStarRecord
(
replyId
,
user
.
getId
()))
{
if
(
0
!=
analysisService
.
removeStarRecord
(
replyId
,
user
.
getId
()))
{
...
@@ -461,15 +387,9 @@ public class AnalysisController {
...
@@ -461,15 +387,9 @@ public class AnalysisController {
@RequestMapping
(
value
=
"/nextExamTitle/{examTitleId}"
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
@RequestMapping
(
value
=
"/nextExamTitle/{examTitleId}"
,
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
public
PicaResponse
<
ExamTitleReplyDto
>
nextReplyList
(
@PathVariable
(
"examTitleId"
)
Integer
examTitleId
,
public
PicaResponse
<
ExamTitleReplyDto
>
nextReplyList
(
@PathVariable
(
"examTitleId"
)
Integer
examTitleId
,
@RequestHeader
(
required
=
false
)
String
token
)
{
@RequestHeader
(
required
=
false
)
String
token
)
{
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/nextExamTitle"
);
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/nextExamTitle"
);
PicaUser
user
=
null
;
PicaUser
user
=
fetchPicaUser
();
if
(
token
!=
null
)
{
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
}
PicaResponse
.
Builder
<
ExamTitleReplyDto
>
builder
=
new
PicaResponse
.
Builder
<>();
PicaResponse
.
Builder
<
ExamTitleReplyDto
>
builder
=
new
PicaResponse
.
Builder
<>();
try
{
try
{
...
@@ -522,13 +442,7 @@ public class AnalysisController {
...
@@ -522,13 +442,7 @@ public class AnalysisController {
@RequestHeader
(
required
=
false
)
String
token
)
{
@RequestHeader
(
required
=
false
)
String
token
)
{
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/nextReply"
);
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/nextReply"
);
PicaUser
user
=
fetchPicaUser
();
PicaUser
user
=
null
;
if
(
token
!=
null
)
{
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
}
PicaResponse
.
Builder
<
ExamTitleReplyDetailDto
>
builder
=
new
PicaResponse
.
Builder
<>();
PicaResponse
.
Builder
<
ExamTitleReplyDetailDto
>
builder
=
new
PicaResponse
.
Builder
<>();
try
{
try
{
...
@@ -578,6 +492,7 @@ public class AnalysisController {
...
@@ -578,6 +492,7 @@ public class AnalysisController {
return
builder
.
build
();
return
builder
.
build
();
}
}
@LoginPermission
@ApiOperation
(
value
=
"回复"
,
response
=
PicaResponse
.
class
)
@ApiOperation
(
value
=
"回复"
,
response
=
PicaResponse
.
class
)
@RequestMapping
(
value
=
"/reply/{examTitleId}"
,
method
=
RequestMethod
.
POST
,
produces
=
"application/json;charset=UTF-8"
)
@RequestMapping
(
value
=
"/reply/{examTitleId}"
,
method
=
RequestMethod
.
POST
,
produces
=
"application/json;charset=UTF-8"
)
public
PicaResponse
reply
(
@PathVariable
(
"examTitleId"
)
Integer
examTitleId
,
public
PicaResponse
reply
(
@PathVariable
(
"examTitleId"
)
Integer
examTitleId
,
...
@@ -591,14 +506,7 @@ public class AnalysisController {
...
@@ -591,14 +506,7 @@ public class AnalysisController {
return
picaResponse
;
return
picaResponse
;
}
}
PicaUser
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
PicaUser
user
=
fetchPicaUser
();
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
logger
.
info
(
"reply: user == null, token="
+
token
);
PicaResponse
picaResponse
=
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
picaResponse
.
setData
(
""
);
return
picaResponse
;
}
try
{
try
{
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
content
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
content
);
...
@@ -742,21 +650,14 @@ public class AnalysisController {
...
@@ -742,21 +650,14 @@ public class AnalysisController {
return
builder
.
build
();
return
builder
.
build
();
}
}
@LoginPermission
@ApiOperation
(
value
=
"我的赞"
,
response
=
PicaResponse
.
class
)
@ApiOperation
(
value
=
"我的赞"
,
response
=
PicaResponse
.
class
)
@RequestMapping
(
value
=
{
"/myStar/{roundId}"
,
"/myStar/"
},
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
@RequestMapping
(
value
=
{
"/myStar/{roundId}"
,
"/myStar/"
},
method
=
RequestMethod
.
GET
,
produces
=
"application/json;charset=UTF-8"
)
public
PicaResponse
<
MyStarDto
>
myStar
(
@PathVariable
(
value
=
"roundId"
,
required
=
false
)
Integer
roundId
,
public
PicaResponse
<
MyStarDto
>
myStar
(
@PathVariable
(
value
=
"roundId"
,
required
=
false
)
Integer
roundId
,
@RequestHeader
(
required
=
false
)
String
token
)
{
@RequestHeader
(
required
=
false
)
String
token
)
{
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/roundDetail/v2/"
);
Transaction
t
=
Cat
.
newTransaction
(
"Link"
,
"/roundDetail/v2/"
);
if
(
token
==
null
)
{
PicaUser
user
=
fetchPicaUser
();
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
SYSTEM_NO_TOKEN
);
}
PicaUser
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
logger
.
info
(
"myStar: user == null, token="
+
token
);
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
}
if
(
roundId
!=
null
)
{
if
(
roundId
!=
null
)
{
logger
.
info
(
"myStar: roundId="
+
roundId
.
toString
()
+
" token="
+
token
);
logger
.
info
(
"myStar: roundId="
+
roundId
.
toString
()
+
" token="
+
token
);
}
}
...
...
server/src/main/java/com/pica/cloud/online/exam/analysis/server/controller/AntiSpamController.java
浏览文件 @
901372ef
...
@@ -3,17 +3,16 @@ package com.pica.cloud.online.exam.analysis.server.controller;
...
@@ -3,17 +3,16 @@ package com.pica.cloud.online.exam.analysis.server.controller;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.pica.cloud.foundation.entity.PicaResponse
;
import
com.pica.cloud.foundation.entity.PicaResponse
;
import
com.pica.cloud.foundation.entity.PicaResultCode
;
import
com.pica.cloud.foundation.entity.PicaResultCode
;
import
com.pica.cloud.foundation.redis.
Redis
Client
;
import
com.pica.cloud.foundation.redis.
ICache
Client
;
import
com.pica.cloud.foundation.utils.annotation.LoginPermission
;
import
com.pica.cloud.foundation.utils.annotation.LoginPermission
;
import
com.pica.cloud.foundation.utils.controller.BaseController
;
import
com.pica.cloud.foundation.utils.entity.PicaUser
;
import
com.pica.cloud.foundation.utils.entity.PicaUser
;
import
com.pica.cloud.online.exam.analysis.common.CommonUtils
;
import
com.pica.cloud.online.exam.analysis.common.util.ReturnUtil
;
import
com.pica.cloud.online.exam.analysis.common.util.ReturnUtil
;
import
com.pica.cloud.online.exam.analysis.server.service.AntiSpamService
;
import
com.pica.cloud.online.exam.analysis.server.service.AntiSpamService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
/**
/**
...
@@ -22,10 +21,10 @@ import org.springframework.web.bind.annotation.*;
...
@@ -22,10 +21,10 @@ import org.springframework.web.bind.annotation.*;
*/
*/
@RestController
@RestController
@RequestMapping
(
"/antispam"
)
@RequestMapping
(
"/antispam"
)
@Api
(
value
=
"内容甄别解析"
,
description
=
"检测文本、图片内容"
)
public
class
AntiSpamController
extends
BaseController
{
public
class
AntiSpamController
{
@Qualifier
(
"cacheMigrateClient"
)
@Autowired
@Autowired
private
Redis
Client
redisClient
;
private
ICache
Client
redisClient
;
@Autowired
@Autowired
AntiSpamService
antiSpamService
;
AntiSpamService
antiSpamService
;
...
@@ -36,8 +35,7 @@ public class AntiSpamController {
...
@@ -36,8 +35,7 @@ public class AntiSpamController {
public
PicaResponse
processText
(
@RequestBody
String
content
,
public
PicaResponse
processText
(
@RequestBody
String
content
,
@RequestHeader
String
sysCode
,
@RequestHeader
String
sysCode
,
@RequestHeader
String
token
)
{
@RequestHeader
String
token
)
{
PicaUser
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
PicaUser
user
=
fetchPicaUser
();
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
}
}
...
@@ -76,8 +74,7 @@ public class AntiSpamController {
...
@@ -76,8 +74,7 @@ public class AntiSpamController {
public
PicaResponse
processTextV2
(
@RequestBody
String
content
,
public
PicaResponse
processTextV2
(
@RequestBody
String
content
,
@RequestHeader
String
sysCode
,
@RequestHeader
String
sysCode
,
@RequestHeader
String
token
)
{
@RequestHeader
String
token
)
{
PicaUser
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
PicaUser
user
=
fetchPicaUser
();
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
}
}
...
@@ -103,6 +100,7 @@ public class AntiSpamController {
...
@@ -103,6 +100,7 @@ public class AntiSpamController {
);
);
}
}
@LoginPermission
@ApiOperation
(
value
=
"图片检测"
,
response
=
PicaResponse
.
class
)
@ApiOperation
(
value
=
"图片检测"
,
response
=
PicaResponse
.
class
)
@RequestMapping
(
value
=
"/image"
,
method
=
RequestMethod
.
POST
,
produces
=
"application/json;charset=UTF-8"
)
@RequestMapping
(
value
=
"/image"
,
method
=
RequestMethod
.
POST
,
produces
=
"application/json;charset=UTF-8"
)
public
PicaResponse
processImage
(
@RequestBody
String
content
,
public
PicaResponse
processImage
(
@RequestBody
String
content
,
...
@@ -111,9 +109,7 @@ public class AntiSpamController {
...
@@ -111,9 +109,7 @@ public class AntiSpamController {
if
(
token
==
null
)
{
if
(
token
==
null
)
{
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
SYSTEM_NO_TOKEN
);
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
SYSTEM_NO_TOKEN
);
}
}
PicaUser
user
=
fetchPicaUser
();
PicaUser
user
=
CommonUtils
.
getUserByToken
(
redisClient
,
token
);
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
if
(
user
==
null
||
user
.
getId
().
intValue
()
==
0
)
{
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
return
ReturnUtil
.
getPicaResponse
(
PicaResultCode
.
LOGIN_FAILE
);
}
}
...
...
server/src/main/java/com/pica/cloud/online/exam/analysis/server/monitor/CatFilterConfigure.java
已删除
100644 → 0
浏览文件 @
a5b1f5ef
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
server
.
monitor
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
com.dianping.cat.servlet.CatFilter
;
@Configuration
public
class
CatFilterConfigure
{
@Bean
public
FilterRegistrationBean
catFilter
()
{
FilterRegistrationBean
registration
=
new
FilterRegistrationBean
();
CatFilter
filter
=
new
CatFilter
();
registration
.
setFilter
(
filter
);
registration
.
addUrlPatterns
(
"/*"
);
registration
.
setName
(
"cat-filter"
);
registration
.
setOrder
(
1
);
return
registration
;
}
}
\ No newline at end of file
server/src/main/java/com/pica/cloud/online/exam/analysis/server/service/CHCAnalysisService.java
浏览文件 @
901372ef
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
server
.
service
;
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
server
.
service
;
import
com.pica.cloud.foundation.utils.entity.PicaUser
;
import
com.pica.cloud.online.exam.analysis.common.dto.*
;
import
com.pica.cloud.online.exam.analysis.common.dto.*
;
import
com.pica.cloud.online.exam.analysis.server.entity.AnalysisRound
;
import
com.pica.cloud.online.exam.analysis.server.entity.AnalysisRound
;
import
com.pica.cloud.online.exam.analysis.server.entity.AnalysisRoundExamTitle
;
import
com.pica.cloud.online.exam.analysis.server.entity.AnalysisRoundExamTitle
;
...
@@ -14,6 +15,14 @@ import java.util.List;
...
@@ -14,6 +15,14 @@ import java.util.List;
* @date 2018/8/17 9:40
* @date 2018/8/17 9:40
*/
*/
public
interface
CHCAnalysisService
{
public
interface
CHCAnalysisService
{
/**
* 获取消息详情
* @param analysisId
* @return
*/
CHCAnalysisDto
getActivityDetail
(
Integer
analysisId
,
PicaUser
user
);
/**
/**
* 根据活动id获取活动详情
* 根据活动id获取活动详情
* @param analysisId
* @param analysisId
...
@@ -168,7 +177,7 @@ public interface CHCAnalysisService {
...
@@ -168,7 +177,7 @@ public interface CHCAnalysisService {
/**
/**
* 获取所有的历史轮详情
* 获取所有的历史轮详情
* @param ana
n
lysisId
* @param analysisId
* @return
* @return
*/
*/
List
<
AnalysisRoundDto
>
getCHCHistoryRound
(
Integer
analysisId
);
List
<
AnalysisRoundDto
>
getCHCHistoryRound
(
Integer
analysisId
);
...
...
server/src/main/java/com/pica/cloud/online/exam/analysis/server/service/impl/CHCAnalysisServiceImpl.java
浏览文件 @
901372ef
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
server
.
service
.
impl
;
package
com
.
pica
.
cloud
.
online
.
exam
.
analysis
.
server
.
service
.
impl
;
import
com.pica.cloud.foundation.utils.entity.PicaUser
;
import
com.pica.cloud.online.exam.analysis.common.dto.*
;
import
com.pica.cloud.online.exam.analysis.common.dto.*
;
import
com.pica.cloud.online.exam.analysis.server.configuration.PropertiesConfiguration
;
import
com.pica.cloud.online.exam.analysis.server.configuration.PropertiesConfiguration
;
import
com.pica.cloud.online.exam.analysis.server.entity.*
;
import
com.pica.cloud.online.exam.analysis.server.entity.*
;
import
com.pica.cloud.online.exam.analysis.server.mapper.*
;
import
com.pica.cloud.online.exam.analysis.server.mapper.*
;
import
com.pica.cloud.online.exam.analysis.server.service.CHCAnalysisService
;
import
com.pica.cloud.online.exam.analysis.server.service.CHCAnalysisService
;
import
com.pica.cloud.online.exam.analysis.server.service.CHCRankingListService
;
import
com.pica.cloud.online.exam.analysis.server.utils.DateUtils
;
import
com.pica.cloud.online.exam.analysis.server.utils.DateUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
@@ -42,9 +44,51 @@ public class CHCAnalysisServiceImpl implements CHCAnalysisService {
...
@@ -42,9 +44,51 @@ public class CHCAnalysisServiceImpl implements CHCAnalysisService {
@Autowired
@Autowired
DoctorMapper
doctorMapper
;
DoctorMapper
doctorMapper
;
@Autowired
CHCRankingListMapper
rankingListMapper
;
@Autowired
@Autowired
private
PropertiesConfiguration
properties
;
private
PropertiesConfiguration
properties
;
@Autowired
private
CHCRankingListService
chcRankingListService
;
/**
* chc 活动详情
* @param analysisId
* @param user
* @return
*/
@Override
public
CHCAnalysisDto
getActivityDetail
(
Integer
analysisId
,
PicaUser
user
)
{
CHCAnalysisDto
analysisDto
=
this
.
getCHCAnalysisDtoById
(
analysisId
);
if
(
chcRankingListService
.
isRankingInTop200
(
user
!=
null
?
user
.
getId
()
:
0
))
{
analysisDto
.
setIsJoinIn
(
1
);
}
else
{
analysisDto
.
setIsJoinIn
(
0
);
}
List
<
AnalysisRoundDto
>
roundList
=
this
.
getRoundListByAnalysisId
(
analysisId
);
/**
* chc活动固定返回两轮, 将第一轮设置为所有
*/
if
(
roundList
.
size
()
>
0
)
{
roundList
.
get
(
0
).
setRoundId
(-
1
);
}
/**
* 如果是最后一起, 补上最后一期 和前端约定为-2
*/
if
(
roundList
.
size
()
==
1
)
{
AnalysisRoundDto
analysisRoundDto
=
new
AnalysisRoundDto
();
analysisRoundDto
.
setRoundId
(-
2
);
roundList
.
add
(
analysisRoundDto
);
}
analysisDto
.
setRoundList
(
roundList
);
return
analysisDto
;
}
@Override
@Override
public
CHCAnalysis
getAnalysisById
(
Integer
analysisId
)
{
public
CHCAnalysis
getAnalysisById
(
Integer
analysisId
)
{
return
analysisMapper
.
selectByPrimaryKey
(
analysisId
);
return
analysisMapper
.
selectByPrimaryKey
(
analysisId
);
...
@@ -103,15 +147,14 @@ public class CHCAnalysisServiceImpl implements CHCAnalysisService {
...
@@ -103,15 +147,14 @@ public class CHCAnalysisServiceImpl implements CHCAnalysisService {
@Override
@Override
public
List
<
AnalysisRoundDto
>
getRoundListByAnalysisId
(
Integer
analysisId
)
{
public
List
<
AnalysisRoundDto
>
getRoundListByAnalysisId
(
Integer
analysisId
)
{
List
<
AnalysisRound
>
roundList
=
new
ArrayList
<
AnalysisRound
>();
List
<
AnalysisRound
>
roundList
=
new
ArrayList
<>();
CHCAnalysis
analysis
=
analysisMapper
.
selectByPrimaryKey
(
analysisId
);
CHCAnalysis
analysis
=
analysisMapper
.
selectByPrimaryKey
(
analysisId
);
if
(
analysis
.
getType
()
==
1
)
if
(
analysis
.
getType
()
==
1
)
{
roundList
=
analysisRoundMapper
.
selectRoundListById
(
analysisId
);
roundList
=
analysisRoundMapper
.
selectRoundListById
(
analysisId
);
else
}
else
{
roundList
=
analysisRoundMapper
.
selectPSARoundListById
(
analysisId
);
roundList
=
analysisRoundMapper
.
selectPSARoundListById
(
analysisId
);
}
if
(
null
==
roundList
){
if
(
null
==
roundList
){
return
null
;
return
null
;
}
}
...
...
server/src/main/resources/mybatis/AnalysisRoundMapper.xml
浏览文件 @
901372ef
...
@@ -38,6 +38,7 @@
...
@@ -38,6 +38,7 @@
seq_no from p_analysis_round
seq_no from p_analysis_round
where is_published = 1
where is_published = 1
and is_deleted = 0
and is_deleted = 0
and analysis_id = #{id,jdbcType=INTEGER}
order by seq_no desc
order by seq_no desc
limit 1)
limit 1)
order by seq_no
order by seq_no
...
...
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录