增加问答功能
diff --git a/backend/src/main/java/com/supwisdom/dlpay/framework/jpa/page/SimplePage.java b/backend/src/main/java/com/supwisdom/dlpay/framework/jpa/page/SimplePage.java
index 6386838..d48d9ef 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/framework/jpa/page/SimplePage.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/framework/jpa/page/SimplePage.java
@@ -34,7 +34,7 @@
setTotalCount(totalCount);
setPageSize(pageSize);
setPageNo(pageNo);
- adjustPageNo();
+// adjustPageNo();
}
/**
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/AdvisoryRepositoryImpl.java b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/AdvisoryRepositoryImpl.java
new file mode 100644
index 0000000..c16ab64
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/AdvisoryRepositoryImpl.java
@@ -0,0 +1,46 @@
+package com.supwisdom.dlpay.portal.dao.impl;
+
+import com.supwisdom.dlpay.framework.jpa.BaseRepository;
+import com.supwisdom.dlpay.framework.jpa.Finder;
+import com.supwisdom.dlpay.framework.jpa.page.Pagination;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.portal.bean.AdvisorySearchBean;
+import com.supwisdom.dlpay.portal.dao.AdvisoryRepository;
+import com.supwisdom.dlpay.portal.domain.TBAdvisory;
+import org.hibernate.transform.Transformers;
+import org.jetbrains.annotations.NotNull;
+
+public class AdvisoryRepositoryImpl extends BaseRepository implements AdvisoryRepository {
+ @NotNull
+ @Override
+ public Pagination getAdvisoryList(@NotNull AdvisorySearchBean bean) {
+ String title = bean.getTitle();
+ String content = bean.getContent();
+ int pageno = bean.getPageno();
+ int pagesize = bean.getPagesize();
+ StringBuilder sql = new StringBuilder("select * from tb_advisory where 1=1");
+ if (!StringUtil.isEmpty(title)) {
+ sql.append(" and title like :title");
+ }
+ if (!StringUtil.isEmpty(content)) {
+ sql.append(" and content like :content");
+ }
+ sql.append(" order by ordernum");
+ Finder f = Finder.create(sql.toString());
+ if (!StringUtil.isEmpty(title)) {
+ f.setParameter("title", "%" + title.trim() + "%");
+ }
+ if (!StringUtil.isEmpty(content)) {
+ f.setParameter("content", "%" + content.trim() + "%");
+ }
+ return findNative(f, Transformers.aliasToBean(TBAdvisory.class), pageno, pagesize);
+ }
+
+ @NotNull
+ @Override
+ public Pagination getMobileAdvisoryList(int pageno, int pagesize) {
+ String sql = "select * from tb_advisory where isdisplay='1' order by ordernum ";
+ Finder f = Finder.create(sql);
+ return findNative(f, Transformers.aliasToBean(TBAdvisory.class), pageno, pagesize);
+ }
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/ArticleRepositoryImpl.java b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/ArticleRepositoryImpl.java
index 1fc7264..8d46a80 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/ArticleRepositoryImpl.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/ArticleRepositoryImpl.java
@@ -78,10 +78,10 @@
@NotNull
@Override
@SuppressWarnings("unchecked")
- public List<TBArticle> getArticleListByColumnid(@NotNull String columnid,int pageno, int pagesize) {
+ public Pagination getArticleListByColumnid(@NotNull String columnid,int pageno, int pagesize) {
String sql = "select * from tb_article where isdelete='0' and isdisplay='1' and status='released' and columnid =:columnid order by releasetime desc";
Finder f = Finder.create(sql);
f.setParameter("columnid", columnid);
- return (List<TBArticle>) findNative(f, Transformers.aliasToBean(TBArticle.class), pageno, pagesize).getList();
+ return findNative(f, Transformers.aliasToBean(TBArticle.class), pageno, pagesize);
}
}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBAdvisory.java b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBAdvisory.java
new file mode 100644
index 0000000..7bae93d
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBAdvisory.java
@@ -0,0 +1,86 @@
+package com.supwisdom.dlpay.portal.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "tb_advisory", indexes = {
+ @Index(name = "advisory_idx", columnList = "title")
+})
+public class TBAdvisory {
+ @Id
+ @GenericGenerator(name = "idGenerator", strategy = "uuid")
+ @GeneratedValue(generator = "idGenerator")
+ @Column(name = "advisoryid", nullable = false, length = 32)
+ private String advisoryid;
+ @Column(name = "title", length = 30)
+ private String title;
+ @Column(name = "content", length = 250)
+ private String content;
+ @Column(name = "operid", length = 32)
+ private String operid;
+ @Column(name = "updatetime", length = 14)
+ private String updatetime;
+ @Column(name = "ordernum")
+ private Integer ordernum;
+ @Column(name = "isdisplay", length = 1)
+ private String isdisplay;
+
+
+ public String getAdvisoryid() {
+ return advisoryid;
+ }
+
+ public void setAdvisoryid(String advisoryid) {
+ this.advisoryid = advisoryid;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public String getOperid() {
+ return operid;
+ }
+
+ public void setOperid(String operid) {
+ this.operid = operid;
+ }
+
+ public String getUpdatetime() {
+ return updatetime;
+ }
+
+ public void setUpdatetime(String updatetime) {
+ this.updatetime = updatetime;
+ }
+
+ public Integer getOrdernum() {
+ return ordernum;
+ }
+
+ public void setOrdernum(Integer ordernum) {
+ this.ordernum = ordernum;
+ }
+
+ public String getIsdisplay() {
+ return isdisplay;
+ }
+
+ public void setIsdisplay(String isdisplay) {
+ this.isdisplay = isdisplay;
+ }
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBColumn.java b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBColumn.java
index 2e9d3ae..5171ce5 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBColumn.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBColumn.java
@@ -1,5 +1,6 @@
package com.supwisdom.dlpay.portal.domain;
+import com.supwisdom.dlpay.framework.jpa.page.Pagination;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
@@ -51,7 +52,7 @@
private String parentname;
@Transient
- private List<TBArticle> articles;
+ private Pagination articles;
public String getColumnid() {
return columnid;
@@ -133,11 +134,11 @@
this.ordernum = ordernum;
}
- public List<TBArticle> getArticles() {
+ public Pagination getArticles() {
return articles;
}
- public void setArticles(List<TBArticle> articles) {
+ public void setArticles(Pagination articles) {
this.articles = articles;
}
}
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index 64665f8..8f0983b 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -22,6 +22,7 @@
import com.supwisdom.dlpay.paysdk.proxy.UserProxy
import com.supwisdom.dlpay.portal.bean.FeedbackSearchBean
import com.supwisdom.dlpay.portal.domain.TBFeedback
+import com.supwisdom.dlpay.portal.service.AdvisoryService
import com.supwisdom.dlpay.portal.service.ArticleService
import com.supwisdom.dlpay.portal.service.ColumnService
import com.supwisdom.dlpay.portal.service.FeedbackService
@@ -69,6 +70,8 @@
lateinit var articleService: ArticleService
@Autowired
lateinit var userProxy: UserProxy
+ @Autowired
+ lateinit var advisoryService: AdvisoryService
val logger = KotlinLogging.logger { }
@RequestMapping("/time")
@@ -315,6 +318,24 @@
}
}
+ /**
+ * 获取咨询问答
+ */
+ @RequestMapping("/advisory/list")
+ fun getActivity(@RequestHeader("Authorization") auth: String?,
+ pageno:Int,pagesize:Int): JsonResult? {
+ try {
+ val page = advisoryService.getMobileAdvisoryList(pageno, pagesize)
+ return JsonResult.ok().put("data", page)
+ } catch (e: Exception) {
+ logger.error { e.message }
+ if (e is PortalBusinessException) {
+ return JsonResult.error(e.message)
+ }
+ return JsonResult.error("服务器繁忙,请稍后重试")
+ }
+ }
+
fun judgeLoginMode(auth: String?): String {
var mode = "tourist"
if (auth != null) {
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
index a7ef28b..eaa5fe7 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
@@ -10,14 +10,8 @@
import com.supwisdom.dlpay.framework.util.StringUtil
import com.supwisdom.dlpay.mobile.exception.PortalBusinessException
import com.supwisdom.dlpay.portal.bean.*
-import com.supwisdom.dlpay.portal.domain.TBArticle
-import com.supwisdom.dlpay.portal.domain.TBColumn
-import com.supwisdom.dlpay.portal.domain.TBMsgTemplate
-import com.supwisdom.dlpay.portal.domain.TBReply
-import com.supwisdom.dlpay.portal.service.ArticleService
-import com.supwisdom.dlpay.portal.service.ColumnService
-import com.supwisdom.dlpay.portal.service.FeedbackService
-import com.supwisdom.dlpay.portal.service.MsgService
+import com.supwisdom.dlpay.portal.domain.*
+import com.supwisdom.dlpay.portal.service.*
import com.supwisdom.dlpay.portal.util.PortalConstant
import mu.KotlinLogging
import org.jose4j.jwt.ReservedClaimNames
@@ -50,6 +44,8 @@
lateinit var columnService: ColumnService
@Autowired
lateinit var uploadPicService: UploadPicService
+ @Autowired
+ lateinit var advisoryService: AdvisoryService
val logger = KotlinLogging.logger { }
@RequestMapping("/test")
@@ -189,7 +185,10 @@
@RequestMapping(value = ["/article/uploadpic"], method = [RequestMethod.POST])
fun uploadPic(request: MultipartHttpServletRequest): JsonResult? {
val map = uploadPicService.uploadPic(request)
- return JsonResult.ok()
+ if (map["retcode"] == "1") {
+ return JsonResult.error("图片上传失败!")
+ }
+ return JsonResult.ok().put("data",map)
}
@RequestMapping("/column/all")
@@ -255,18 +254,18 @@
@RequestMapping(value = ["/article/release"], method = [RequestMethod.POST])
fun releaseArticle(@RequestBody article: TBArticle): JsonResult? {
- try {
+ try {
val p = SecurityContextHolder.getContext().authentication
val oper = operatorDetailService.findByOperid(p.name)
article.operid = oper.operid
articleService.releaseArticle(article)
- return JsonResult.ok()
+ return JsonResult.ok()
} catch (e: Exception) {
logger.error { e.message }
if (e is PortalBusinessException) {
return JsonResult.error(e.message)
}
- return JsonResult.error("发布文章异常")
+ return JsonResult.error("发布文章异常")
}
}
@@ -276,7 +275,7 @@
val p = SecurityContextHolder.getContext().authentication
val oper = operatorDetailService.findByOperid(p.name)
article.operid = oper.operid
- articleService.reviewArticle(article,oper.opername)
+ articleService.reviewArticle(article, oper.opername)
JsonResult.ok()
} catch (e: Exception) {
logger.error { e.message }
@@ -331,4 +330,55 @@
JsonResult.error("切换文章是否显示异常")
}
}
+
+ @RequestMapping(value = ["/advisory/save"], method = [RequestMethod.POST])
+ fun saveAdvisory(@RequestBody advisory: TBAdvisory): JsonResult? {
+ return try {
+ val p = SecurityContextHolder.getContext().authentication
+ val oper = operatorDetailService.findByOperid(p.name)
+ advisory.operid = oper.operid
+ advisoryService.saveAdvisory(advisory)
+ JsonResult.ok()
+ } catch (e: Exception) {
+ logger.error { e.message }
+ JsonResult.error("保存问答异常")
+ }
+ }
+
+ @RequestMapping(value = ["/advisory/list"], method = [RequestMethod.GET])
+ fun getAdvisoryList(bean: AdvisorySearchBean): JsonResult? {
+ return try {
+ val page = advisoryService.getAdvisoryList(bean)
+ if (page.list == null || page.list.size == 0) {
+ return JsonResult.ok().put("msg", "无数据")
+ }
+ return JsonResult.ok().put("page", page)
+ } catch (e: Exception) {
+ logger.error { e.message }
+ JsonResult.error("查询咨询问答列表异常")
+ }
+ }
+
+ @RequestMapping(value = ["/advisory/switchdisplay/{advisoryid}"], method = [RequestMethod.POST])
+ fun switchAdvisoryDisplay(@PathVariable(value = "advisoryid") advisoryid: String,
+ @RequestParam(value = "value") value: String): JsonResult? {
+ return try {
+ val result = advisoryService.switchDisplay(advisoryid, value)
+ JsonResult.ok().put("result", result)
+ } catch (e: Exception) {
+ logger.error { e.message }
+ JsonResult.error("切换问答是否显示异常")
+ }
+ }
+
+ @RequestMapping(value = ["/advisory/delete/{advisoryid}"], method = [RequestMethod.POST])
+ fun deleteAdvisory(@PathVariable(value = "advisoryid") advisoryid: String): JsonResult? {
+ return try {
+ advisoryService.deleteAdvisory(advisoryid)
+ JsonResult.ok()
+ } catch (e: Exception) {
+ logger.error { e.message }
+ JsonResult.error("删除问答异常")
+ }
+ }
}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/AdvisorySearchBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/AdvisorySearchBean.kt
new file mode 100644
index 0000000..6432370
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/AdvisorySearchBean.kt
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.portal.bean
+
+class AdvisorySearchBean {
+ var title: String = ""
+ var content: String = ""
+ var pageno: Int = 1
+ var pagesize: Int = 10
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryDao.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryDao.kt
new file mode 100644
index 0000000..a1c0c9a
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryDao.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.portal.dao
+
+import com.supwisdom.dlpay.portal.domain.TBAdvisory
+import org.springframework.data.jpa.repository.JpaRepository
+import org.springframework.stereotype.Repository
+
+@Repository
+interface AdvisoryDao : JpaRepository<TBAdvisory, String>,AdvisoryRepository{
+
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryRepository.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryRepository.kt
new file mode 100644
index 0000000..cfd40a2
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/AdvisoryRepository.kt
@@ -0,0 +1,9 @@
+package com.supwisdom.dlpay.portal.dao
+
+import com.supwisdom.dlpay.framework.jpa.page.Pagination
+import com.supwisdom.dlpay.portal.bean.AdvisorySearchBean
+
+interface AdvisoryRepository {
+ fun getAdvisoryList(bean: AdvisorySearchBean): Pagination
+ fun getMobileAdvisoryList(pageno: Int, pagesize: Int): Pagination
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ArticleRepository.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ArticleRepository.kt
index a1379da..f7cf0b6 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ArticleRepository.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ArticleRepository.kt
@@ -9,5 +9,5 @@
@Throws(ParseException::class)
fun getArticleList(bean: ArticleSearchBean): Pagination
- fun getArticleListByColumnid(columnid: String, pageno: Int, pagesize: Int): List<TBArticle>
+ fun getArticleListByColumnid(columnid: String, pageno: Int, pagesize: Int): Pagination
}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/AdvisoryService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/AdvisoryService.kt
new file mode 100644
index 0000000..832a6ba
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/AdvisoryService.kt
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.portal.service
+
+import com.supwisdom.dlpay.framework.jpa.page.Pagination
+import com.supwisdom.dlpay.portal.bean.AdvisorySearchBean
+import com.supwisdom.dlpay.portal.domain.TBAdvisory
+import org.springframework.transaction.annotation.Transactional
+
+interface AdvisoryService {
+ @Transactional
+ fun saveAdvisory(advisory:TBAdvisory)
+ @Transactional
+ fun getAdvisoryList(bean: AdvisorySearchBean): Pagination
+ @Transactional
+ fun switchDisplay(advisoryid:String,value:String):String
+ @Transactional
+ fun deleteAdvisory(advisoryid:String)
+ @Transactional
+ fun getMobileAdvisoryList(pageno:Int,pagesize:Int): Pagination
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/AdvisoryServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/AdvisoryServiceImpl.kt
new file mode 100644
index 0000000..2e72d93
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/AdvisoryServiceImpl.kt
@@ -0,0 +1,54 @@
+package com.supwisdom.dlpay.portal.service.Impl
+
+import com.supwisdom.dlpay.framework.jpa.page.Pagination
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.portal.bean.AdvisorySearchBean
+import com.supwisdom.dlpay.portal.dao.AdvisoryDao
+import com.supwisdom.dlpay.portal.domain.TBAdvisory
+import com.supwisdom.dlpay.portal.service.AdvisoryService
+import com.supwisdom.dlpay.portal.util.PortalConstant
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+@Service
+class AdvisoryServiceImpl : AdvisoryService{
+ @Autowired
+ lateinit var systemUtilService: SystemUtilService
+ @Autowired
+ lateinit var advisoryDao: AdvisoryDao
+
+ override fun saveAdvisory(advisory: TBAdvisory) {
+ advisory.updatetime = systemUtilService.sysdatetime.hostdatetime
+ advisory.isdisplay = PortalConstant.YES
+ advisoryDao.save(advisory)
+ }
+
+ override fun getAdvisoryList(bean: AdvisorySearchBean): Pagination {
+ return advisoryDao.getAdvisoryList(bean)
+ }
+
+ override fun switchDisplay(advisoryid: String, value: String): String {
+ val optional = advisoryDao.findById(advisoryid)
+ if (optional.isPresent) {
+ val advisory = optional.get()
+ advisory.isdisplay = value
+ advisoryDao.save(advisory)
+ return advisory.isdisplay
+ }else{
+ throw RuntimeException("ID为:[${advisoryid}]的问答未找到")
+ }
+ }
+
+ override fun deleteAdvisory(advisoryid: String) {
+ val optional = advisoryDao.findById(advisoryid)
+ if (optional.isPresent) {
+ advisoryDao.delete(optional.get())
+ }else{
+ throw RuntimeException("ID为:[${advisoryid}]的问答未找到")
+ }
+ }
+
+ override fun getMobileAdvisoryList(pageno: Int, pagesize: Int): Pagination {
+ return advisoryDao.getMobileAdvisoryList(pageno,pagesize)
+ }
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/MsgServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/MsgServiceImpl.kt
index 0c59f94..50af7e3 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/MsgServiceImpl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/MsgServiceImpl.kt
@@ -3,7 +3,6 @@
import com.supwisdom.dlpay.api.service.KafkaSendMsgService
import com.supwisdom.dlpay.framework.jpa.page.Pagination
import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.mobile.dao.MsgDao
import com.supwisdom.dlpay.portal.bean.MsgTemplateSearchBean
import com.supwisdom.dlpay.portal.bean.SendMsgBean
import com.supwisdom.dlpay.portal.dao.MsgTemplateDao
@@ -11,7 +10,6 @@
import com.supwisdom.dlpay.portal.service.MsgService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
-import java.lang.RuntimeException
import java.util.regex.Pattern
@Service
@@ -19,8 +17,6 @@
@Autowired
lateinit var msgTemplateDao: MsgTemplateDao
@Autowired
- lateinit var msgDao: MsgDao
- @Autowired
lateinit var systemUtilService: SystemUtilService
@Autowired
lateinit var kafkaSendMsgService: KafkaSendMsgService
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/security.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/security.kt
index e1d5a1f..b993822 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -7,6 +7,7 @@
import com.supwisdom.dlpay.framework.service.OperatorDetailService
import com.supwisdom.dlpay.framework.tenant.TenantContext
import com.supwisdom.dlpay.framework.util.Constants
+import com.supwisdom.dlpay.framework.util.StringUtil
import com.supwisdom.dlpay.framework.util.TradeDict
import com.supwisdom.dlpay.mobile.AuthLoginFailHandler
import com.supwisdom.dlpay.mobile.AuthLoginSuccessHandler
@@ -156,7 +157,8 @@
url = url.replace(context, "")
}
logger.info(url)
- request.getHeader(jwtConfig.header)?.let { authHeader ->
+ val authHeader:String? = request.getHeader(jwtConfig.header)
+ if (!authHeader.isNullOrEmpty()) {
try {
val jwt = if (authHeader.startsWith(jwtConfig.tokenHeader)) {
authHeader.substring(jwtConfig.tokenHeader.length)
@@ -250,7 +252,8 @@
url = url.replace(context, "")
}
logger.info(url)
- request.getHeader(jwtConfig.header)?.let { authHeader ->
+ val authHeader:String? = request.getHeader(jwtConfig.header)
+ if(!authHeader.isNullOrEmpty()) {
try {
val jwt = if (authHeader.startsWith(jwtConfig.tokenHeader)) {
authHeader.substring(jwtConfig.tokenHeader.length)
diff --git a/backend/src/main/resources/data-postgresql.sql b/backend/src/main/resources/data-postgresql.sql
index 1a98333..bc0b484 100644
--- a/backend/src/main/resources/data-postgresql.sql
+++ b/backend/src/main/resources/data-postgresql.sql
@@ -14,8 +14,11 @@
INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.url', 'http://112.35.4.197:15000', '{tenantid}');
INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.pwd', 'kingstar#2019', '{tenantid}');
INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('article.currentno', '1', '{tenentid}');
-INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.appid', '700001', '{tenentid}');
-INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.secret', '5f788ce433ec44f299351cdf7f137e81', '{tenentid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.appid', '800001', '{tenentid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.secret', '1a8905a272364ef592e61f4a1288f07d', '{tenentid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('aes.cfb.totp.offset', '20', '{tenantid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('aes.cfb.rootkey', 'Vbb1syh8U1+CdLmTVGdtDiVvKBQ81n4GmgBEO/ohSbU=', '{tenantid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('aes.cfb.iv', '55b6f5b3287c535f8274b99354676d0e', '{tenantid}');
INSERT INTO "tb_column"("columnid", "isleaf", "name", "needreview", "parentid", "code", "ispublic", "publishable", "ordernum") VALUES ('2c9cab947451988c017451a737b10000', '0', '线上活动', '0', '', 'OnlineActivities', '1', '1', 12);
INSERT INTO "tb_column"("columnid", "isleaf", "name", "needreview", "parentid", "code", "ispublic", "publishable", "ordernum") VALUES ('2c9cab947451988c017451b280870001', '0', '线下活动', '0', '', 'OfflineActivities', '1', '1', 13);
@@ -28,6 +31,8 @@
INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('81d3556981c34633adadb0fc4dc8d1f3', '1', 4, 'f066939ecbf64da3a54fa93d56e4391b', '栏目管理', '/column/index', '1', NULL);
INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('99604b8d18b34417befe051a3720cbed', '1', 6, 'f066939ecbf64da3a54fa93d56e4391b', '创建文章', '/article/create', '1', NULL);
INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('4665765bf07d455486f2a5215dd97380', '1', 5, 'f066939ecbf64da3a54fa93d56e4391b', '文章管理', '/article/list', '1', NULL);
+INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('80e0326446a643069bc8d26c132d45ea', '1', 7, 'f066939ecbf64da3a54fa93d56e4391b', '咨询问答管理', '/advisory/index', '1', NULL);
+
INSERT INTO "tb_operator"("operid", "closedate", "email", "mobile", "opendate", "opercode", "opername", "operpwd", "opertype", "sex", "status", "tenantid", "thirdadmin", "jti", "roleid") VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', NULL, NULL, '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', NULL, 'normal', '{tenantid}', 'no', 'QwC1ln7rReYmBOhq57op6Q', '20497f2fa27a44f7841492288ab75d88');
@@ -40,6 +45,8 @@
INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('fd4a4e21231e4844b1310f95afc40f9a', '20200825152358', '81d3556981c34633adadb0fc4dc8d1f3', '20497f2fa27a44f7841492288ab75d88');
INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('fc8f90bb3b6d41f8b7e1b840b1a0d590', '20200827110834', '4665765bf07d455486f2a5215dd97380', '20497f2fa27a44f7841492288ab75d88');
INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('460d7f0b57eb4dcfb73fb1b51ad37f4f', '20200827142245', '99604b8d18b34417befe051a3720cbed', '20497f2fa27a44f7841492288ab75d88');
+INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('49cb562956534d7dbf54b762b2b6af0d', '20200921162433', '80e0326446a643069bc8d26c132d45ea', '20497f2fa27a44f7841492288ab75d88');
+
--------- end of script
diff --git a/frontend/src/api/advisory.js b/frontend/src/api/advisory.js
new file mode 100644
index 0000000..db9ed14
--- /dev/null
+++ b/frontend/src/api/advisory.js
@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+
+export function saveAdvisory(data) {
+ return request({
+ url: '/advisory/save',
+ method: 'post',
+ data
+ })
+}
+
+export function getAdvisoryList(query) {
+ return request({
+ url: '/advisory/list',
+ method: 'get',
+ params: query
+ })
+}
+
+export function deleteAdvisory(advisoryid) {
+ return request({
+ url: '/advisory/delete/' + advisoryid,
+ method: 'post'
+ })
+}
+
+export function switchDisplay(advisoryid, value) {
+ return request({
+ url: '/advisory/switchdisplay/' + advisoryid,
+ method: 'post',
+ params: value
+ })
+}
diff --git a/frontend/src/components/Tinymce/components/EditorImage.vue b/frontend/src/components/Tinymce/components/EditorImage.vue
index 366bb4f..ac1be17 100644
--- a/frontend/src/components/Tinymce/components/EditorImage.vue
+++ b/frontend/src/components/Tinymce/components/EditorImage.vue
@@ -33,6 +33,7 @@
<script>
// import { getToken } from 'api/qiniu'
import { uploadImage } from '@/api/article'
+import user from '@/store/modules/user'
export default {
name: 'EditorSlideUpload',
@@ -47,21 +48,24 @@
dialogVisible: false,
listObj: {},
fileList: [],
- url: ''
+ url: '',
+ imageUrl: ''
}
},
created() {
+ this.imageUrl = user.state.url
this.url = process.env.VUE_APP_BASE_API
},
methods: {
checkAllSuccess() {
return Object.keys(this.listObj).every(item => this.listObj[item].hasSuccess)
},
- uploadImage(file) {
+ uploadImage(uploader) {
const params = new FormData()
- params.append('file', file.file)
+ params.append('file', uploader.file)
uploadImage(params).then(response => {
- console.log(response)
+ uploader.onSuccess(response)
+ this.handleSuccess(response, uploader.file)
}).catch(error => {
this.$message({
message: error.msg || '图片上传异常',
@@ -82,12 +86,11 @@
this.dialogVisible = false
},
handleSuccess(response, file) {
- console.log(response)
const uid = file.uid
const objKeyArr = Object.keys(this.listObj)
for (let i = 0, len = objKeyArr.length; i < len; i++) {
if (this.listObj[objKeyArr[i]].uid === uid) {
- this.listObj[objKeyArr[i]].url = response.files.file
+ this.listObj[objKeyArr[i]].url = this.imageUrl + response.data.picid
this.listObj[objKeyArr[i]].hasSuccess = true
return
}
diff --git a/frontend/src/layout/components/TagsView/index.vue b/frontend/src/layout/components/TagsView/index.vue
index edbef59..72b9ffd 100644
--- a/frontend/src/layout/components/TagsView/index.vue
+++ b/frontend/src/layout/components/TagsView/index.vue
@@ -17,7 +17,7 @@
</router-link>
</scroll-pane>
<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu">
- <li @click="refreshSelectedTag(selectedTag)">刷新</li>
+ <li @click="refreshSelectedTag(selectedTag)">重新加载</li>
<li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">关闭当前标签页</li>
<li @click="closeOthersTags">关闭其他标签页</li>
<li @click="closeAllTags(selectedTag)">关闭所有标签页</li>
diff --git a/frontend/src/views/advisory/index.vue b/frontend/src/views/advisory/index.vue
new file mode 100644
index 0000000..7b24d62
--- /dev/null
+++ b/frontend/src/views/advisory/index.vue
@@ -0,0 +1,292 @@
+<template>
+ <div class="app-container">
+ <div class="filter-container">
+ <div class="filter-item" style="margin-right:15px">问答标题</div>
+ <el-input
+ v-model="formData.title"
+ placeholder="咨询问答标题"
+ style="width: 350px;margin-right:50px"
+ class="filter-item"
+ />
+ <div class="filter-item" style="margin-right:15px">问答内容</div>
+ <el-input
+ v-model="formData.content"
+ placeholder="咨询问答内容"
+ style="width: 350px;margin-right:50px"
+ class="filter-item"
+ />
+ <el-button
+ class="filter-item"
+ type="primary"
+ icon="el-icon-search"
+ @click="handleFilter()"
+ >
+ 搜索
+ </el-button>
+ </div>
+ <el-button type="primary" icon="el-icon-circle-plus-outline" @click="addAdvisory()">
+ 新增问答
+ </el-button>
+ <el-table
+ :key="tableKey"
+ v-loading="listLoading"
+ :data="list"
+ border
+ fit
+ highlight-current-row
+ style="width: 100%;margin-top:10px"
+ >
+ <el-table-column label="问答标题" width="150" align="center">
+ <template slot-scope="{row}">
+ <span>{{ row.title }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="问答内容" align="center">
+ <template slot-scope="{row}">
+ <span>{{ row.content }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="修改日期" align="center" width="160">
+ <template slot-scope="{row}">
+ <span>{{ dateFormat(row.updatetime) }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="排序" width="80" align="center">
+ <template slot-scope="{row}">
+ <span>{{ row.ordernum }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column width="100px" label="是否展示" align="center">
+ <template slot-scope="{row}">
+ <el-switch
+ :value="row.isdisplay === '1'"
+ active-color="#13ce66"
+ inactive-color="#a7a7a7"
+ @click.native.prevent="switchDisplay(row)"
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" width="100">
+ <template slot-scope="{row}">
+ <el-tooltip class="item" effect="dark" content="修改" placement="bottom">
+ <el-button type="primary" icon="el-icon-edit" circle size="mini" @click="updateAdvisory(row)" />
+ </el-tooltip>
+ <el-tooltip class="item" effect="dark" content="删除" placement="bottom">
+ <el-button type="danger" icon="el-icon-delete" circle size="mini" @click="deleteAdvisory(row)" />
+ </el-tooltip>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <pagination
+ v-show="total>0"
+ :total="total"
+ :page.sync="formData.pageno"
+ :limit.sync="formData.pagesize"
+ style="margin-top:0;"
+ @pagination="getAdvisoryList"
+ />
+ <el-dialog
+ :title="title"
+ :visible.sync="advisoryDialogVisible"
+ width="45%"
+ >
+ <div>
+ <el-form ref="advisoryForm" :model="advisoryForm" :rules="rules" label-width="100px">
+ <el-form-item label="问答标题" prop="title" class="form-input-item">
+ <el-input
+ v-model="advisoryForm.title"
+ maxlength="30"
+ show-word-limit
+ style="width:80%"
+ />
+ </el-form-item>
+ <el-form-item label="问答排序" prop="ordernum">
+ <el-input-number v-model="advisoryForm.ordernum" :min="1" style="width:40%" />
+ </el-form-item>
+ <el-form-item label="问答内容" prop="content">
+ <el-input
+ v-model="advisoryForm.content"
+ type="textarea"
+ maxlength="230"
+ :rows="8"
+ placeholder=""
+ show-word-limit
+ style="width:80%"
+ />
+ </el-form-item>
+ </el-form>
+ </div>
+ <div style="text-align:center">
+ <el-button
+ type="primary"
+ @click="saveAdvisory('advisoryForm')"
+ >保存
+ </el-button>
+ <el-button @click="advisoryDialogVisible = false">取消</el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+<script>
+import {
+ saveAdvisory,
+ getAdvisoryList,
+ switchDisplay,
+ deleteAdvisory
+} from '@/api/advisory'
+import moment from 'moment'
+import Pagination from '@/components/Pagination'
+export default {
+ name: 'Advisory',
+ components: {
+ Pagination
+ },
+ data() {
+ return {
+ advisoryDialogVisible: false,
+ formData: {
+ title: '',
+ content: '',
+ pageno: 1,
+ pagesize: 10
+ },
+ listLoading: false,
+ tableKey: 0,
+ list: null,
+ total: 0,
+ title: '',
+ advisoryForm: {
+ advisoryid: '',
+ title: '',
+ content: '',
+ ordernum: 1
+ },
+ rules: {
+ title: [
+ { required: true, message: '请输入问答标题', trigger: 'blur' }
+ ],
+ content: [
+ { required: true, message: '请输入问答内容', trigger: 'blur' }
+ ]
+ }
+ }
+ },
+ created() {
+ this.getAdvisoryList()
+ },
+ methods: {
+ addAdvisory() {
+ this.title = '新增问答'
+ this.resetForm('advisoryForm')
+ this.advisoryDialogVisible = true
+ },
+ saveAdvisory(formName) {
+ this.$refs[formName].validate((valid) => {
+ if (valid) {
+ saveAdvisory(this.advisoryForm).then(response => {
+ this.$notify({
+ title: '成功',
+ message: '保存成功!',
+ type: 'success',
+ duration: 2000
+ })
+ this.advisoryDialogVisible = false
+ this.getAdvisoryList()
+ }).catch(error => {
+ this.$message({
+ message: error.msg || '请求异常',
+ type: 'error'
+ })
+ })
+ } else {
+ return false
+ }
+ })
+ },
+ getAdvisoryList() {
+ this.listLoading = true
+ getAdvisoryList(this.formData).then(response => {
+ if (response.page) {
+ this.list = response.page.list
+ this.total = response.page.totalCount
+ } else {
+ this.list = null
+ this.total = 0
+ }
+ this.listLoading = false
+ }).catch(error => {
+ this.$message({
+ message: error.msg || '请求异常',
+ type: 'error'
+ })
+ this.listLoading = false
+ })
+ },
+ handleFilter() {
+ this.formData.pageno = 1
+ this.getAdvisoryList()
+ },
+ resetForm(formName) {
+ this.advisoryForm = {
+ advisoryid: '',
+ title: '',
+ content: '',
+ ordernum: null
+ }
+ this.$nextTick(() => {
+ this.$refs[formName].clearValidate()
+ })
+ },
+ updateAdvisory(row) {
+ this.title = '修改问答'
+ this.resetForm('advisoryForm')
+ this.advisoryForm = Object.assign({}, row)
+ this.advisoryDialogVisible = true
+ },
+ dateFormat(date) {
+ if (date === null) {
+ return ''
+ }
+ return moment(date, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss')
+ },
+ switchDisplay(row) {
+ switchDisplay(row.advisoryid, { value: row.isdisplay === '1' ? '0' : '1' }).then(response => {
+ this.$message({
+ type: 'success',
+ message: '操作成功!'
+ })
+ row.isdisplay = response.result
+ }).catch(error => {
+ this.$message({
+ message: error.msg || '请求异常',
+ type: 'error'
+ })
+ this.listLoading = false
+ })
+ },
+ deleteAdvisory(row) {
+ this.$confirm('是否确认删除该问答?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(() => {
+ deleteAdvisory(row.advisoryid).then(response => {
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ })
+ this.handleFilter()
+ }).catch(error => {
+ this.$message({
+ message: error.msg || '请求异常',
+ type: 'error'
+ })
+ this.listLoading = false
+ })
+ }).catch(() => {
+ })
+ }
+ }
+}
+</script>
diff --git a/frontend/src/views/article/list.vue b/frontend/src/views/article/list.vue
index 084f69e..7e481f7 100644
--- a/frontend/src/views/article/list.vue
+++ b/frontend/src/views/article/list.vue
@@ -121,7 +121,7 @@
</el-tooltip>
<el-tooltip class="item" effect="dark" content="删除" placement="bottom">
- <el-button type="primary" icon="el-icon-delete" circle size="mini" @click="deleteArticle(row)" />
+ <el-button type="danger" icon="el-icon-delete" circle size="mini" @click="deleteArticle(row)" />
</el-tooltip>
<!-- <el-tooltip v-if="row.status!=='save' && row.status!=='released'" class="item" effect="dark" content="撤回" placement="bottom">
<el-button type="primary" size="mini" circle>
diff --git a/frontend/src/views/feedback/index.vue b/frontend/src/views/feedback/index.vue
index 8ca94da..eb0723b 100644
--- a/frontend/src/views/feedback/index.vue
+++ b/frontend/src/views/feedback/index.vue
@@ -381,6 +381,7 @@
if (response.list) {
reply = response.list[0]
}
+ console.log(reply.replycontent)
const replyContent = {
title: '回复内容',
content: reply.replycontent,