Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
midjourney-proxy
Overview
Overview
Details
Activity
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
徐少华
midjourney-proxy
Commits
ff1648f3
Commit
ff1648f3
authored
Aug 21, 2019
by
阮思源
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://begitlab.chubanyun.me/rays/pcloud-book
into rsy-feat-1001514
parents
f20048be
bd1c0493
Show whitespace changes
Inline
Side-by-side
Showing
116 changed files
with
4469 additions
and
605 deletions
+4469
-605
BookConstant.java
...main/java/com/pcloud/book/book/constant/BookConstant.java
+5
-0
GroupCipherDTO.java
...c/main/java/com/pcloud/book/group/dto/GroupCipherDTO.java
+93
-0
GroupClassifyQrcodeDTO.java
...ava/com/pcloud/book/group/dto/GroupClassifyQrcodeDTO.java
+13
-0
GroupUseDTO.java
.../src/main/java/com/pcloud/book/group/dto/GroupUseDTO.java
+45
-0
LargeTempletDTO.java
.../main/java/com/pcloud/book/group/dto/LargeTempletDTO.java
+44
-0
PersonalQrcodeDTO.java
...ain/java/com/pcloud/book/group/dto/PersonalQrcodeDTO.java
+40
-0
BookGroupClassifyService.java
...m/pcloud/book/group/service/BookGroupClassifyService.java
+5
-0
BookGroupService.java
.../java/com/pcloud/book/group/service/BookGroupService.java
+24
-4
BookApplication.java
...e-book/src/main/java/com/pcloud/book/BookApplication.java
+13
-0
AdNewsBiz.java
...k/src/main/java/com/pcloud/book/adnews/biz/AdNewsBiz.java
+81
-3
AdNewsBizImpl.java
...n/java/com/pcloud/book/adnews/biz/impl/AdNewsBizImpl.java
+403
-53
AdNewsCheck.java
...c/main/java/com/pcloud/book/adnews/check/AdNewsCheck.java
+36
-30
AdNewsBanDao.java
...rc/main/java/com/pcloud/book/adnews/dao/AdNewsBanDao.java
+12
-0
AdNewsClickRecordDao.java
...java/com/pcloud/book/adnews/dao/AdNewsClickRecordDao.java
+11
-0
AdNewsGroupDao.java
.../main/java/com/pcloud/book/adnews/dao/AdNewsGroupDao.java
+6
-0
AdNewsGroupRecordDao.java
...java/com/pcloud/book/adnews/dao/AdNewsGroupRecordDao.java
+3
-0
AdNewsMessageStatisticDao.java
...com/pcloud/book/adnews/dao/AdNewsMessageStatisticDao.java
+15
-0
AdNewsWechatChooseDao.java
...ava/com/pcloud/book/adnews/dao/AdNewsWechatChooseDao.java
+22
-0
AdNewsWechatDao.java
...main/java/com/pcloud/book/adnews/dao/AdNewsWechatDao.java
+12
-0
AdNewsBanDaoImpl.java
...ava/com/pcloud/book/adnews/dao/impl/AdNewsBanDaoImpl.java
+25
-0
AdNewsClickRecordDaoImpl.java
...pcloud/book/adnews/dao/impl/AdNewsClickRecordDaoImpl.java
+14
-0
AdNewsGroupRecordDaoImpl.java
...pcloud/book/adnews/dao/impl/AdNewsGroupRecordDaoImpl.java
+11
-0
AdNewsMessageStatisticDaoImpl.java
...d/book/adnews/dao/impl/AdNewsMessageStatisticDaoImpl.java
+24
-0
AdNewsWechatChooseDaoImpl.java
...cloud/book/adnews/dao/impl/AdNewsWechatChooseDaoImpl.java
+46
-0
AdNewsWechatDaoImpl.java
.../com/pcloud/book/adnews/dao/impl/AdNewsWechatDaoImpl.java
+14
-0
AdNewsListParam.java
...main/java/com/pcloud/book/adnews/dto/AdNewsListParam.java
+44
-0
AdNews.java
...k/src/main/java/com/pcloud/book/adnews/entity/AdNews.java
+25
-1
AdNewsBan.java
...rc/main/java/com/pcloud/book/adnews/entity/AdNewsBan.java
+24
-0
AdNewsClickRecord.java
...java/com/pcloud/book/adnews/entity/AdNewsClickRecord.java
+26
-0
AdNewsGroup.java
.../main/java/com/pcloud/book/adnews/entity/AdNewsGroup.java
+4
-58
AdNewsGroupRecord.java
...java/com/pcloud/book/adnews/entity/AdNewsGroupRecord.java
+11
-66
AdNewsMessageStatistic.java
...com/pcloud/book/adnews/entity/AdNewsMessageStatistic.java
+42
-0
AdNewsSet.java
...rc/main/java/com/pcloud/book/adnews/entity/AdNewsSet.java
+14
-123
AdNewsWechat.java
...main/java/com/pcloud/book/adnews/entity/AdNewsWechat.java
+85
-0
AdNewsWechatChoose.java
...ava/com/pcloud/book/adnews/entity/AdNewsWechatChoose.java
+83
-0
AdContentFromEnum.java
.../java/com/pcloud/book/adnews/enums/AdContentFromEnum.java
+37
-0
AdNewsBanEnum.java
...main/java/com/pcloud/book/adnews/enums/AdNewsBanEnum.java
+17
-0
AdNewsContentTypeEnum.java
...a/com/pcloud/book/adnews/enums/AdNewsContentTypeEnum.java
+35
-0
AdNewsWechatEnum.java
...n/java/com/pcloud/book/adnews/enums/AdNewsWechatEnum.java
+18
-0
AdNewsFacade.java
...main/java/com/pcloud/book/adnews/facade/AdNewsFacade.java
+82
-13
AdNewsFacadeImpl.java
.../com/pcloud/book/adnews/facade/impl/AdNewsFacadeImpl.java
+149
-12
AdNewsGroupRecordVO.java
...n/java/com/pcloud/book/adnews/vo/AdNewsGroupRecordVO.java
+36
-0
AdNewsMessageStatisticVO.java
...a/com/pcloud/book/adnews/vo/AdNewsMessageStatisticVO.java
+65
-0
AdvertisingSpaceBizImpl.java
...ud/book/advertising/biz/impl/AdvertisingSpaceBizImpl.java
+3
-3
BookSet.java
...-book/src/main/java/com/pcloud/book/book/set/BookSet.java
+2
-0
BookClockBizImpl.java
...java/com/pcloud/book/clock/biz/impl/BookClockBizImpl.java
+1
-1
WechatGroupConsr.java
...om/pcloud/book/consumer/wechatgroup/WechatGroupConsr.java
+51
-0
BookGroupBiz.java
...src/main/java/com/pcloud/book/group/biz/BookGroupBiz.java
+44
-1
BookGroupClassifyBiz.java
.../java/com/pcloud/book/group/biz/BookGroupClassifyBiz.java
+43
-2
WeixinQrcodeBiz.java
.../main/java/com/pcloud/book/group/biz/WeixinQrcodeBiz.java
+1
-1
BookGroupBizImpl.java
...java/com/pcloud/book/group/biz/impl/BookGroupBizImpl.java
+190
-18
BookGroupClassifyBizImpl.java
.../pcloud/book/group/biz/impl/BookGroupClassifyBizImpl.java
+85
-10
GroupQrcodeBizImpl.java
...va/com/pcloud/book/group/biz/impl/GroupQrcodeBizImpl.java
+104
-19
WeixinQrcodeBizImpl.java
...a/com/pcloud/book/group/biz/impl/WeixinQrcodeBizImpl.java
+2
-2
BookBusinessConstants.java
...om/pcloud/book/group/constants/BookBusinessConstants.java
+18
-0
BookGroupClassifyDao.java
.../java/com/pcloud/book/group/dao/BookGroupClassifyDao.java
+5
-0
BookGroupDao.java
...src/main/java/com/pcloud/book/group/dao/BookGroupDao.java
+8
-0
JoinGroupCipherDao.java
...in/java/com/pcloud/book/group/dao/JoinGroupCipherDao.java
+30
-0
TempletRelevanceDao.java
...n/java/com/pcloud/book/group/dao/TempletRelevanceDao.java
+8
-0
WeixinQrcodeDao.java
.../main/java/com/pcloud/book/group/dao/WeixinQrcodeDao.java
+6
-1
BookGroupClassifyDaoImpl.java
.../pcloud/book/group/dao/impl/BookGroupClassifyDaoImpl.java
+5
-0
BookGroupDaoImpl.java
...java/com/pcloud/book/group/dao/impl/BookGroupDaoImpl.java
+10
-0
JoinGroupCipherDaoImpl.java
...om/pcloud/book/group/dao/impl/JoinGroupCipherDaoImpl.java
+72
-0
TempletRelevanceDaoImpl.java
...m/pcloud/book/group/dao/impl/TempletRelevanceDaoImpl.java
+19
-0
WeixinQrcodeDaoImpl.java
...a/com/pcloud/book/group/dao/impl/WeixinQrcodeDaoImpl.java
+12
-2
AutoUpdateGroupNumDTO.java
...java/com/pcloud/book/group/dto/AutoUpdateGroupNumDTO.java
+47
-0
BookGroupDTO.java
...src/main/java/com/pcloud/book/group/dto/BookGroupDTO.java
+16
-1
ClassifyDTO.java
.../src/main/java/com/pcloud/book/group/dto/ClassifyDTO.java
+11
-0
JoinGroupCipherDTO.java
...in/java/com/pcloud/book/group/dto/JoinGroupCipherDTO.java
+22
-0
OwnAltQrcodeInfoDTO.java
...n/java/com/pcloud/book/group/dto/OwnAltQrcodeInfoDTO.java
+81
-0
QrcodeNameAndProIdDTO.java
...java/com/pcloud/book/group/dto/QrcodeNameAndProIdDTO.java
+14
-0
BookGroup.java
...src/main/java/com/pcloud/book/group/entity/BookGroup.java
+15
-0
JoinGroupCipher.java
...in/java/com/pcloud/book/group/entity/JoinGroupCipher.java
+103
-0
TempletRelevance.java
...n/java/com/pcloud/book/group/entity/TempletRelevance.java
+43
-0
LargTempletEnum.java
...ain/java/com/pcloud/book/group/enums/LargTempletEnum.java
+31
-0
BookGroupFacade.java
...in/java/com/pcloud/book/group/facade/BookGroupFacade.java
+13
-0
BookGroupFacadeImpl.java
...om/pcloud/book/group/facade/impl/BookGroupFacadeImpl.java
+28
-0
BookGroupClassifyServiceImpl.java
...book/group/service/impl/BookGroupClassifyServiceImpl.java
+12
-1
BookGroupServiceImpl.java
.../pcloud/book/group/service/impl/BookGroupServiceImpl.java
+50
-5
WeixinQrcodeServiceImpl.java
...loud/book/group/service/impl/WeixinQrcodeServiceImpl.java
+1
-1
SendWeixinRequestTools.java
...a/com/pcloud/book/group/tools/SendWeixinRequestTools.java
+41
-24
GroupQrcodeBaseInfoVO.java
.../java/com/pcloud/book/group/vo/GroupQrcodeBaseInfoVO.java
+5
-32
BookGuideBiz.java
.../main/java/com/pcloud/book/keywords/biz/BookGuideBiz.java
+6
-0
BookKeywordBiz.java
...ain/java/com/pcloud/book/keywords/biz/BookKeywordBiz.java
+2
-1
BookGuideBizImpl.java
...a/com/pcloud/book/keywords/biz/impl/BookGuideBizImpl.java
+136
-35
BookKeywordBizImpl.java
...com/pcloud/book/keywords/biz/impl/BookKeywordBizImpl.java
+179
-11
BookKeywordDao.java
...ain/java/com/pcloud/book/keywords/dao/BookKeywordDao.java
+5
-0
BookKeywordDaoImpl.java
...com/pcloud/book/keywords/dao/impl/BookKeywordDaoImpl.java
+17
-0
ReplyKeywordDTO.java
...in/java/com/pcloud/book/keywords/dto/ReplyKeywordDTO.java
+12
-0
BookGuideFacadeImpl.java
...pcloud/book/keywords/facade/impl/BookGuideFacadeImpl.java
+21
-0
MQTopicConumer.java
...c/main/java/com/pcloud/book/mq/config/MQTopicConumer.java
+5
-0
UpdateWXGroupNameListener.java
...a/com/pcloud/book/mq/topic/UpdateWXGroupNameListener.java
+3
-3
WXGroupLearningReportListener.java
...m/pcloud/book/mq/topic/WXGroupLearningReportListener.java
+5
-3
WxAgreeAddUserListener.java
...java/com/pcloud/book/mq/topic/WxAgreeAddUserListener.java
+40
-0
WxGroupSendTextListener.java
...ava/com/pcloud/book/mq/topic/WxGroupSendTextListener.java
+4
-3
PushBizImpl.java
.../main/java/com/pcloud/book/push/biz/impl/PushBizImpl.java
+7
-6
RiddleRecordBizImpl.java
.../com/pcloud/book/riddle/biz/impl/RiddleRecordBizImpl.java
+5
-1
BookProps.java
.../main/java/com/pcloud/book/util/properties/BookProps.java
+7
-6
AdNewsBanMapper.xml
...book/src/main/resources/mapper/adnews/AdNewsBanMapper.xml
+40
-0
AdNewsChooseMapper.xml
...k/src/main/resources/mapper/adnews/AdNewsChooseMapper.xml
+1
-2
AdNewsClickRecordMapper.xml
.../main/resources/mapper/adnews/AdNewsClickRecordMapper.xml
+36
-0
AdNewsGroupMapper.xml
...ok/src/main/resources/mapper/adnews/AdNewsGroupMapper.xml
+15
-3
AdNewsGroupRecordMapper.xml
.../main/resources/mapper/adnews/AdNewsGroupRecordMapper.xml
+46
-5
AdNewsMapper.xml
...ce-book/src/main/resources/mapper/adnews/AdNewsMapper.xml
+56
-29
AdNewsMessageStatisticMapper.xml
.../resources/mapper/adnews/AdNewsMessageStatisticMapper.xml
+130
-0
AdNewsSetMapper.xml
...book/src/main/resources/mapper/adnews/AdNewsSetMapper.xml
+21
-2
AdNewsWechatChooseMapper.xml
...main/resources/mapper/adnews/AdNewsWechatChooseMapper.xml
+124
-0
AdNewsWechatMapper.xml
...k/src/main/resources/mapper/adnews/AdNewsWechatMapper.xml
+68
-0
BookGroupClassify.Mapper.xml
.../main/resources/mapper/group/BookGroupClassify.Mapper.xml
+25
-4
BookGroupMapper.xml
...-book/src/main/resources/mapper/group/BookGroupMapper.xml
+12
-1
GroupQrcode.Mapper.xml
...ok/src/main/resources/mapper/group/GroupQrcode.Mapper.xml
+1
-1
JoinGroupCipher.xml
...-book/src/main/resources/mapper/group/JoinGroupCipher.xml
+106
-0
TempletRelevance.xml
...book/src/main/resources/mapper/group/TempletRelevance.xml
+33
-0
WeixinQrcode.Mapper.xml
...k/src/main/resources/mapper/group/WeixinQrcode.Mapper.xml
+16
-1
BookKeyword.Mapper.xml
...src/main/resources/mapper/keywords/BookKeyword.Mapper.xml
+30
-1
BookKeywordWarehouseBizTest.java
...rvice-book/src/test/test/BookKeywordWarehouseBizTest.java
+189
-0
No files found.
pcloud-facade-book/src/main/java/com/pcloud/book/book/constant/BookConstant.java
View file @
ff1648f3
...
...
@@ -17,6 +17,11 @@ import java.util.Map;
public
class
BookConstant
{
/**
* 微信小号每天拉人次数缓存前缀
*/
public
static
final
String
WXGROUP_ADD_USER_NUM
=
CacheConstant
.
BOOK
+
"WXGROUP_ADD_USER_NUM:"
;
/**
* 图书基础缓存前缀名称
*/
public
static
final
String
BOOK_CACHE
=
CacheConstant
.
BOOK
+
"BOOK:"
;
...
...
pcloud-facade-book/src/main/java/com/pcloud/book/group/dto/GroupCipherDTO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serializable
;
/**
* @Description
* @Author ruansiyuan
* @Date 2019/8/12 14:57
**/
public
class
GroupCipherDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
4254978072223600943L
;
@ApiModelProperty
(
"密码"
)
private
String
cipher
;
@ApiModelProperty
(
"分类id"
)
private
Long
classifyId
;
@ApiModelProperty
(
"创建人"
)
private
Long
wechatUserId
;
@ApiModelProperty
(
"使用人微信id"
)
private
String
wxId
;
@ApiModelProperty
(
"是否使用"
)
private
Boolean
hasUsed
;
@ApiModelProperty
(
"机器人id"
)
private
String
altId
;
public
String
getCipher
()
{
return
cipher
;
}
public
void
setCipher
(
String
cipher
)
{
this
.
cipher
=
cipher
;
}
public
Long
getClassifyId
()
{
return
classifyId
;
}
public
void
setClassifyId
(
Long
classifyId
)
{
this
.
classifyId
=
classifyId
;
}
public
Long
getWechatUserId
()
{
return
wechatUserId
;
}
public
void
setWechatUserId
(
Long
wechatUserId
)
{
this
.
wechatUserId
=
wechatUserId
;
}
public
String
getWxId
()
{
return
wxId
;
}
public
void
setWxId
(
String
wxId
)
{
this
.
wxId
=
wxId
;
}
public
Boolean
getHasUsed
()
{
return
hasUsed
;
}
public
void
setHasUsed
(
Boolean
hasUsed
)
{
this
.
hasUsed
=
hasUsed
;
}
public
String
getAltId
()
{
return
altId
;
}
public
void
setAltId
(
String
altId
)
{
this
.
altId
=
altId
;
}
@Override
public
String
toString
()
{
return
"GroupCipherDTO{"
+
"cipher='"
+
cipher
+
'\''
+
", classifyId="
+
classifyId
+
", wechatUserId="
+
wechatUserId
+
", wxId='"
+
wxId
+
'\''
+
", hasUsed="
+
hasUsed
+
", altId='"
+
altId
+
'\''
+
'}'
;
}
}
pcloud-facade-book/src/main/java/com/pcloud/book/group/dto/GroupClassifyQrcodeDTO.java
View file @
ff1648f3
...
...
@@ -54,6 +54,10 @@ public class GroupClassifyQrcodeDTO implements Serializable {
* 是否开启群学习报告
*/
private
Boolean
hasOpenLearningReport
;
/**
* 进群方式:1群二维码,2客服机器人
*/
private
Integer
joinGroupType
;
public
Long
getBookId
()
{
return
bookId
;
...
...
@@ -135,6 +139,14 @@ public class GroupClassifyQrcodeDTO implements Serializable {
this
.
hasOpenLearningReport
=
hasOpenLearningReport
;
}
public
Integer
getJoinGroupType
()
{
return
joinGroupType
;
}
public
void
setJoinGroupType
(
Integer
joinGroupType
)
{
this
.
joinGroupType
=
joinGroupType
;
}
@Override
public
String
toString
()
{
return
"GroupClassifyQrcodeDTO{"
+
...
...
@@ -148,6 +160,7 @@ public class GroupClassifyQrcodeDTO implements Serializable {
", price="
+
price
+
", qrCodeUrl='"
+
qrCodeUrl
+
'\''
+
", hasOpenLearningReport="
+
hasOpenLearningReport
+
", joinGroupType="
+
joinGroupType
+
'}'
;
}
}
pcloud-facade-book/src/main/java/com/pcloud/book/group/dto/GroupUseDTO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serializable
;
/**
* @Description
* @Author ruansiyuan
* @Date 2019/8/7 9:26
**/
@ApiModel
(
"群使用情况模型"
)
public
class
GroupUseDTO
implements
Serializable
{
@ApiModelProperty
(
"已使用"
)
private
Integer
hasUsed
;
@ApiModelProperty
(
"未使用"
)
private
Integer
notUsed
;
public
Integer
getHasUsed
()
{
return
hasUsed
;
}
public
void
setHasUsed
(
Integer
hasUsed
)
{
this
.
hasUsed
=
hasUsed
;
}
public
Integer
getNotUsed
()
{
return
notUsed
;
}
public
void
setNotUsed
(
Integer
notUsed
)
{
this
.
notUsed
=
notUsed
;
}
@Override
public
String
toString
()
{
return
"GroupUseDTO{"
+
"hasUsed="
+
hasUsed
+
", notUsed="
+
notUsed
+
'}'
;
}
}
pcloud-facade-book/src/main/java/com/pcloud/book/group/dto/LargeTempletDTO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serializable
;
/**
* @Description
* @Author ruansiyuan
* @Date 2019/8/7 11:23
**/
public
class
LargeTempletDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
5982946901202138966L
;
@ApiModelProperty
(
"大类"
)
private
Integer
largeTemplet
;
@ApiModelProperty
(
"名称"
)
private
String
name
;
public
Integer
getLargeTemplet
()
{
return
largeTemplet
;
}
public
void
setLargeTemplet
(
Integer
largeTemplet
)
{
this
.
largeTemplet
=
largeTemplet
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
@Override
public
String
toString
()
{
return
"LargeTempletDTO{"
+
"largeTemplet="
+
largeTemplet
+
", name='"
+
name
+
'\''
+
'}'
;
}
}
pcloud-facade-book/src/main/java/com/pcloud/book/group/dto/PersonalQrcodeDTO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dto
;
import
java.io.Serializable
;
/**
* @author 戴兴
* @description TODO
* @date 2019/8/7 17:13
*/
public
class
PersonalQrcodeDTO
implements
Serializable
{
private
String
newQrcodeUrl
;
private
String
oldQrcodeUrl
;
public
String
getNewQrcodeUrl
()
{
return
newQrcodeUrl
;
}
public
void
setNewQrcodeUrl
(
String
newQrcodeUrl
)
{
this
.
newQrcodeUrl
=
newQrcodeUrl
;
}
public
String
getOldQrcodeUrl
()
{
return
oldQrcodeUrl
;
}
public
void
setOldQrcodeUrl
(
String
oldQrcodeUrl
)
{
this
.
oldQrcodeUrl
=
oldQrcodeUrl
;
}
@Override
public
String
toString
()
{
return
"PersonalQrcodeDTO{"
+
"newQrcodeUrl='"
+
newQrcodeUrl
+
'\''
+
", oldQrcodeUrl='"
+
oldQrcodeUrl
+
'\''
+
'}'
;
}
}
\ No newline at end of file
pcloud-facade-book/src/main/java/com/pcloud/book/group/service/BookGroupClassifyService.java
View file @
ff1648f3
...
...
@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
java.math.BigDecimal
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -54,4 +55,8 @@ public interface BookGroupClassifyService {
@ApiOperation
(
"过滤被删除的群分类、群二维码"
)
@PostMapping
(
"filterDeleteId"
)
ResponseEntity
<
ResponseDto
<
List
<
Long
>>>
filterDeleteId
(
@RequestBody
List
<
String
>
wxGroupIdList
);
@ApiOperation
(
"获取用户支付金额"
)
@GetMapping
(
"getPayPrice"
)
ResponseEntity
<
ResponseDto
<
BigDecimal
>>
getPayPrice
(
@RequestParam
(
"qrcodeId"
)
Long
qrcodeId
,
@RequestParam
(
"wxUserId"
)
String
wxUserId
);
}
pcloud-facade-book/src/main/java/com/pcloud/book/group/service/BookGroupService.java
View file @
ff1648f3
...
...
@@ -3,12 +3,12 @@ package com.pcloud.book.group.service;
import
java.util.List
;
import
java.util.Map
;
import
com.pcloud.book.group.dto.PersonalQrcodeDTO
;
import
com.pcloud.book.group.dto.GroupCipherDTO
;
import
com.pcloud.book.group.dto.GroupUseDTO
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.*
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.dto.StoreFlowInfoDto
;
...
...
@@ -52,4 +52,24 @@ public interface BookGroupService {
@RequestMapping
(
value
=
"getBaseInfoBySceneId"
,
method
=
RequestMethod
.
GET
)
ResponseEntity
<
ResponseDto
<
BookGroupDTO
>>
getBaseInfoBySceneId
(
@RequestParam
(
"sceneId"
)
Long
sceneId
)
throws
BizException
;
@ApiOperation
(
"更新个人二维码"
)
@RequestMapping
(
value
=
"updatePersonQrcode"
,
method
=
RequestMethod
.
POST
)
void
updatePersonQrcode
(
@RequestBody
PersonalQrcodeDTO
personalQrcodeDTO
)
throws
BizException
;
@ApiOperation
(
"获取暗号状态"
)
@GetMapping
(
"/getCipherState"
)
ResponseEntity
<
ResponseDto
<
Integer
>>
getCipherState
(
@RequestParam
(
"cipher"
)
String
cipher
)
throws
BizException
;
@ApiOperation
(
"更新暗号状态为已使用"
)
@GetMapping
(
"/updateCipherStateToUsed"
)
void
updateCipherStateToUsed
(
@RequestParam
(
"cipher"
)
String
cipher
,
@RequestParam
(
"wxId"
)
String
wxId
)
throws
BizException
;
@ApiOperation
(
"获取个人二维码方式群已使用和未使用数量"
)
@PostMapping
(
"/getGroupUse"
)
ResponseEntity
<
ResponseDto
<
GroupUseDTO
>>
getGroupUse
(
@RequestBody
List
<
String
>
altIds
)
throws
BizException
;
@ApiOperation
(
"获取暗号基本信息"
)
@GetMapping
(
"/getJoinGroupCipher"
)
ResponseEntity
<
ResponseDto
<
GroupCipherDTO
>>
getJoinGroupCipher
(
@RequestParam
(
"cipher"
)
String
cipher
)
throws
BizException
;
}
pcloud-service-book/src/main/java/com/pcloud/book/BookApplication.java
View file @
ff1648f3
...
...
@@ -198,4 +198,17 @@ public class BookApplication {
public
Binding
wxGroupLearningReportBind
()
{
return
RabbitMQFactory
.
bindingExchange
(
wxGroupLearningReportQueue
(),
MQTopicProducer
.
WXGROUP_LEARNING_REPORT
);
}
/**
* 微信个人机器人同意加好友
*/
@Bean
public
Queue
wxGroupAgreeAddUserQueue
()
{
return
RabbitMQFactory
.
queueBuilder
(
MQTopicConumer
.
WX_AGREE_ADD_USER
);
}
@Bean
public
Binding
wxGroupAgreeAddUserBind
()
{
return
RabbitMQFactory
.
bindingExchange
(
wxGroupAgreeAddUserQueue
(),
MQTopicProducer
.
WX_AGREE_ADD_USER
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/biz/AdNewsBiz.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
biz
;
import
com.pcloud.book.adnews.entity.AdNews
;
import
com.pcloud.book.adnews.entity.AdNewsSet
;
import
com.pcloud.book.adnews.entity.*
;
import
com.pcloud.book.adnews.dto.AdNewsListParam
;
import
com.pcloud.book.adnews.vo.AdNewsGroupRecordVO
;
import
com.pcloud.book.adnews.vo.AdNewsMessageStatisticVO
;
import
com.pcloud.common.page.PageBeanNew
;
import
java.util.List
;
...
...
@@ -40,10 +42,86 @@ public interface AdNewsBiz {
/**
* 获取素材库列表
*/
PageBeanNew
<
AdNews
>
getAdNewsList
(
String
title
,
Long
partyId
,
Integer
currentPage
,
Integer
numPerPage
);
PageBeanNew
<
AdNews
>
getAdNewsList
(
AdNewsListParam
adNewsListParam
);
/**
* 获取编辑已选取的素材库列表
*/
PageBeanNew
<
AdNews
>
getAdNewsChooseList
(
Long
partyId
,
String
title
,
Boolean
hasUsed
,
Integer
currentPage
,
Integer
numPerPage
);
/**
* 禁用/允许推送
* @param partyId
* @param adNewsId
* @param hasBan
*/
void
saveAdNewsBan
(
Long
partyId
,
Long
adNewsId
,
Integer
hasBan
);
/**
* 增加公众号反馈
* @param adNewsWechat
* @return
*/
Long
addAdNewsWechat
(
AdNewsWechat
adNewsWechat
);
/**
* 获取所有的公众号列表
* @param currentPage
* @param numPerPage
* @return
*/
PageBeanNew
<
AdNewsWechat
>
getAdNewsWechatList
(
Integer
currentPage
,
Integer
numPerPage
);
/**
* 获取编辑已选择的公众号列表
* @param partyId
* @param currentPage
* @param numPerPage
*/
PageBeanNew
<
AdNewsWechat
>
getAdNewsWechatChooseList
(
Long
partyId
,
Integer
currentPage
,
Integer
numPerPage
);
/**
* 编辑添加选择的公众号
* @param adNewsWechatIds
* @param partyId
*/
void
createAdNewsWechatChooseBatch
(
List
<
Long
>
adNewsWechatIds
,
Long
partyId
);
/**
* 编辑移除选择的公众号
* @param adNewsWechatId
* @param partyId
*/
void
deleteAdNewsWechatChoose
(
Long
adNewsWechatId
,
Long
partyId
);
/**
* 获取早晚报发送记录
* @param partyId
* @param title
* @param beginTime
* @param endTime
* @param proLabelId 专业
* @param depLabelId 深度
* @param purLabelId 目的
* @param currentPage
* @param numPerPage
* @return
*/
PageBeanNew
<
AdNewsMessageStatisticVO
>
getAdNewsMessageStatistic
(
Long
partyId
,
String
title
,
String
beginTime
,
String
endTime
,
Long
proLabelId
,
Long
depLabelId
,
Long
purLabelId
,
Integer
currentPage
,
Integer
numPerPage
);
/**
* 查询早晚报发送详情
* @param partyId
* @param messageStatisticId
* @return
*/
List
<
AdNewsGroupRecordVO
>
getAdNewsGroupRecord
(
Long
partyId
,
Long
messageStatisticId
);
/**
* 记录用户点击量
* @param adNewsClickRecord
* @return
*/
Long
addAdNewsClickRecord
(
AdNewsClickRecord
adNewsClickRecord
);
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/biz/impl/AdNewsBizImpl.java
View file @
ff1648f3
...
...
@@ -4,28 +4,43 @@ import com.pcloud.book.adnews.biz.AdNewsBiz;
import
com.pcloud.book.adnews.check.AdNewsCheck
;
import
com.pcloud.book.adnews.dao.*
;
import
com.pcloud.book.adnews.entity.*
;
import
com.pcloud.book.adnews.enums.AdContentFromEnum
;
import
com.pcloud.book.adnews.enums.AdNewsBanEnum
;
import
com.pcloud.book.adnews.dto.AdNewsListParam
;
import
com.pcloud.book.adnews.enums.AdNewsContentTypeEnum
;
import
com.pcloud.book.adnews.vo.AdNewsGroupRecordVO
;
import
com.pcloud.book.adnews.vo.AdNewsMessageStatisticVO
;
import
com.pcloud.book.base.exception.BookBizException
;
import
com.pcloud.book.consumer.wechatgroup.WechatGroupConsr
;
import
com.pcloud.book.group.biz.WeixinQrcodeBiz
;
import
com.pcloud.book.group.dao.GroupQrcodeDao
;
import
com.pcloud.book.group.dto.BookWxQrcodeDTO
;
import
com.pcloud.book.group.dto.GroupQrcodeFoAdDTO
;
import
com.pcloud.book.group.vo.BookGroupClassifyVO
;
import
com.pcloud.common.core.aspect.ParamLog
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.page.PageParam
;
import
com.pcloud.common.utils.DateUtils
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.ResponseHandleUtil
;
import
com.pcloud.common.utils.httpclient.UrlUtils
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.facade.quartz.entity.CallBackParam
;
import
com.pcloud.facade.quartz.entity.ScheduleJob
;
import
com.pcloud.facade.quartz.service.ScheduleService
;
import
com.pcloud.labelcenter.label.service.LabelService
;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
import
org.apache.commons.collections.MapUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.net.URLEncoder
;
import
java.security.cert.X509Certificate
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -46,6 +61,18 @@ public class AdNewsBizImpl implements AdNewsBiz {
@Autowired
private
AdNewsGroupDao
adNewsGroupDao
;
@Autowired
private
AdNewsWechatDao
adNewsWechatDao
;
@Autowired
private
AdNewsDao
adNewsDao
;
@Autowired
private
AdNewsGroupRecordDao
adNewsGroupRecordDao
;
@Autowired
private
AdNewsMessageStatisticDao
adNewsMessageStatisticDao
;
@Autowired
private
AdNewsClickRecordDao
adNewsClickRecordDao
;
@Autowired
private
AdNewsBanDao
adNewsBanDao
;
@Autowired
private
ScheduleService
scheduleService
;
@Autowired
private
GroupQrcodeDao
groupQrcodeDao
;
...
...
@@ -54,25 +81,28 @@ public class AdNewsBizImpl implements AdNewsBiz {
@Autowired
private
AdNewsChooseDao
adNewsChooseDao
;
@Autowired
private
AdNewsDao
adNewsDao
;
@Autowired
private
AdNewsGroupRecordDao
adNewsGroupRecordDao
;
private
AdNewsWechatChooseDao
adNewsWechatChooseDao
;
@Autowired
private
WeixinQrcodeBiz
weixinQrcodeBiz
;
@Autowired
private
LabelService
labelService
;
private
static
final
String
AD_MORNING_NEWS_SCHEDULE_PRE
=
"AD_MORNING_NEWS_SCHEDULE_"
;
private
static
final
String
AD_EVENING_NEWS_SCHEDULE_PRE
=
"AD_EVENING_NEWS_SCHEDULE_"
;
@Value
(
"${wechat.group.link.prefix}"
)
private
String
wechatGroupLinkPrefix
;
@Transactional
(
rollbackFor
=
Exception
.
class
)
@ParamLog
(
"新增早晚报设置"
)
@Override
public
Long
createAdNewsSet
(
AdNewsSet
adNewsSet
)
{
adNewsCheck
.
createAdNewsSetCheck
(
adNewsSet
);
//新增之前判断是否有记录
AdNewsSet
adNewsSetOld
=
adNewsSetDao
.
getByPartyId
(
adNewsSet
.
getCreateUser
());
if
(
adNewsSetOld
!=
null
)
{
throw
new
BookBizException
(
BookBizException
.
ERROR
,
"不可重复创建!"
);
AdNewsSet
adNewsSetOld
=
adNewsSetDao
.
getByPartyId
(
adNewsSet
.
getCreateUser
());
if
(
adNewsSetOld
!=
null
)
{
throw
new
BookBizException
(
BookBizException
.
ERROR
,
"不可重复创建!"
);
}
adNewsSetDao
.
insert
(
adNewsSet
);
buildAdNewsGroups
(
adNewsSet
,
adNewsSet
.
getCreateUser
());
...
...
@@ -155,45 +185,166 @@ public class AdNewsBizImpl implements AdNewsBiz {
@ParamLog
(
"发送编辑端早晚报"
)
@Override
public
void
sendAdNews
(
Long
adNewsSetId
)
{
AdNewsSet
adNewsSet
=
adNewsSetDao
.
getById
(
adNewsSetId
);
if
(
adNewsSet
==
null
)
{
return
;
}
//查询关联
//
查询关联
List
<
AdNewsGroup
>
adNewsGroups
=
adNewsGroupDao
.
getListByAdNewsSetId
(
adNewsSetId
);
if
(
ListUtils
.
isEmpty
(
adNewsGroups
)){
if
(
ListUtils
.
isEmpty
(
adNewsGroups
))
{
return
;
}
List
<
Long
>
classifyIds
=
adNewsGroups
.
stream
().
filter
(
s
->
s
.
getClassifyId
()
!=
null
).
map
(
AdNewsGroup:
:
getClassifyId
).
collect
(
Collectors
.
toList
());
//查询关联的群
List
<
GroupQrcodeFoAdDTO
>
groupQrcodeFoAdDTOS
=
groupQrcodeDao
.
GroupQrcodeFoAdDTOSByClassifyIds
(
classifyIds
);
if
(
ListUtils
.
isEmpty
(
groupQrcodeFoAdDTOS
)){
if
(
ListUtils
.
isEmpty
(
groupQrcodeFoAdDTOS
))
{
return
;
}
Integer
sendCount
=
adNewsSet
.
getSendCount
();
// 需要发送的早晚报内容
List
<
String
>
contents
=
new
ArrayList
<>();
// 插入发送记录
List
<
AdNewsGroupRecord
>
adNewsGroupRecords
=
new
ArrayList
<>();
// 插入消息统计信息
List
<
AdNewsMessageStatistic
>
adNewsMessageStatistics
=
new
ArrayList
<>();
// for循环内的临时变量
AdNewsGroupRecord
adNewsGroupRecord
;
AdNewsMessageStatistic
adNewsMessageStatistic
;
if
(
adNewsSet
.
getContentFrom
()
==
AdContentFromEnum
.
WECHAT
.
key
)
{
//查询要发的记录
Long
adviserId
=
adNewsSet
.
getCreateUser
();
List
<
AdNews
>
adNewsList
=
adNewsDao
.
getNewsToSendBySetIdAndAdviser
(
adNewsSetId
,
adviserId
,
sendCount
);
if
(
ListUtils
.
isEmpty
(
adNewsList
)){
List
<
AdNews
>
adNewsList
=
adNewsDao
.
getNewsToSendBySetIdAndAdviser
(
adNewsSetId
,
adNewsSet
.
getCreateUser
(),
adNewsSet
.
getSendCount
());
if
(
ListUtils
.
isEmpty
(
adNewsList
))
{
return
;
}
//分成300一组
List
<
String
>
contents
=
new
ArrayList
<>();
String
content
=
""
;
int
i
=
1
;
// 构建记录对象
for
(
GroupQrcodeFoAdDTO
groupQrcodeFoAdDTO
:
groupQrcodeFoAdDTOS
)
{
for
(
AdNews
adNews
:
adNewsList
)
{
String
contentL
=
content
+
i
+
"."
+
adNews
.
getTitle
()
+
adNews
.
getShortUrl
()
+
"\n"
;
if
(
contentL
.
length
()
>=
300
)
{
contents
.
add
(
content
);
content
=
i
+
"."
+
adNews
.
getTitle
()
+
adNews
.
getShortUrl
()
+
"\n"
;
}
else
{
content
=
contentL
;
adNewsGroupRecord
=
new
AdNewsGroupRecord
();
adNewsGroupRecord
.
setAdNewsId
(
adNews
.
getId
());
adNewsGroupRecord
.
setAdNewsSetId
(
adNewsSetId
);
adNewsGroupRecord
.
setBookGroupId
(
groupQrcodeFoAdDTO
.
getBookGroupId
());
adNewsGroupRecord
.
setClassifyId
(
groupQrcodeFoAdDTO
.
getClassifyId
());
adNewsGroupRecord
.
setQrcodeId
(
groupQrcodeFoAdDTO
.
getQrcodeId
());
adNewsGroupRecord
.
setCreateUser
(
adNewsSet
.
getCreateUser
());
adNewsGroupRecord
.
setUpdateUser
(
adNewsSet
.
getCreateUser
());
adNewsGroupRecord
.
setInsertMark
(
groupQrcodeFoAdDTOS
.
indexOf
(
groupQrcodeFoAdDTO
));
adNewsGroupRecords
.
add
(
adNewsGroupRecord
);
}
if
(
i
==
adNewsList
.
size
())
{
contents
.
add
(
content
);
// 统计记录
adNewsMessageStatistic
=
new
AdNewsMessageStatistic
();
adNewsMessageStatistic
.
setAdNewsSetId
(
adNewsSetId
);
adNewsMessageStatistic
.
setBookGroupId
(
groupQrcodeFoAdDTO
.
getBookGroupId
());
adNewsMessageStatistic
.
setClassifyId
(
groupQrcodeFoAdDTO
.
getClassifyId
());
adNewsMessageStatistic
.
setQrcodeId
(
groupQrcodeFoAdDTO
.
getQrcodeId
());
adNewsMessageStatistic
.
setCreateUser
(
adNewsSet
.
getCreateUser
());
adNewsMessageStatistic
.
setContentFrom
(
adNewsSet
.
getContentFrom
());
adNewsMessageStatistic
.
setMessageCount
(
adNewsList
.
size
());
adNewsMessageStatistic
.
setInsertMark
(
groupQrcodeFoAdDTOS
.
indexOf
(
groupQrcodeFoAdDTO
));
adNewsMessageStatistics
.
add
(
adNewsMessageStatistic
);
}
i
=
i
+
1
;
// 记录入库
this
.
insertRecord
(
adNewsGroupRecords
,
adNewsMessageStatistics
);
// 拼接中转链接
String
transferUrl
;
AdNews
adNews
;
// 遍历微信群
for
(
GroupQrcodeFoAdDTO
groupQrcodeFoAdDTO
:
groupQrcodeFoAdDTOS
)
{
// 遍历记录详情
for
(
AdNewsGroupRecord
item
:
adNewsGroupRecords
)
{
// 获取对应当前群的记录详情
if
(
groupQrcodeFoAdDTO
.
getQrcodeId
()
==
item
.
getQrcodeId
())
{
// 将对应当前群里的需要发送的新闻链接拼接完成
adNews
=
adNewsList
.
stream
().
filter
(
x
->
x
.
getId
()
==
item
.
getAdNewsId
()).
findFirst
().
get
();
transferUrl
=
wechatGroupLinkPrefix
.
concat
(
"/link"
)
.
concat
(
"?message_statistic_id="
).
concat
(
item
.
getMessageStatisticId
().
toString
())
.
concat
(
"&group_record_id="
).
concat
(
item
.
getId
().
toString
())
.
concat
(
"&url="
).
concat
(
URLEncoder
.
encode
(
adNews
.
getUrl
()));
adNews
.
setShortUrl
(
UrlUtils
.
getShortUrl4Own
(
transferUrl
));
}
}
// 将多条需要发送的早晚报拼接成300字符一组的消息
contents
=
this
.
concatContent
(
adNewsList
);
// 将对应群的消息发送出去
this
.
sendAdNewsToWechatGroup
(
adNewsSet
,
new
ArrayList
<
GroupQrcodeFoAdDTO
>()
{{
add
(
groupQrcodeFoAdDTO
);
}},
contents
);
}
}
else
if
(
adNewsSet
.
getContentFrom
()
==
AdContentFromEnum
.
CUSTOM
.
key
)
{
// 获取发送早报还是晚报
String
customContent
=
this
.
getMorningOrEveningContent
(
adNewsSet
);
if
(
StringUtil
.
isEmpty
(
customContent
))
{
LOGGER
.
info
(
AdNewsContentTypeEnum
.
getDescriptionByKey
(
adNewsSet
.
getContentType
())
+
"内容为空,无法发送"
);
return
;
}
for
(
GroupQrcodeFoAdDTO
groupQrcodeFoAdDTO
:
groupQrcodeFoAdDTOS
)
{
adNewsGroupRecord
=
new
AdNewsGroupRecord
();
adNewsGroupRecord
.
setAdNewsSetId
(
adNewsSetId
);
adNewsGroupRecord
.
setBookGroupId
(
groupQrcodeFoAdDTO
.
getBookGroupId
());
adNewsGroupRecord
.
setClassifyId
(
groupQrcodeFoAdDTO
.
getClassifyId
());
adNewsGroupRecord
.
setQrcodeId
(
groupQrcodeFoAdDTO
.
getQrcodeId
());
adNewsGroupRecord
.
setCreateUser
(
adNewsSet
.
getCreateUser
());
adNewsGroupRecord
.
setUpdateUser
(
adNewsSet
.
getCreateUser
());
adNewsGroupRecord
.
setCustomContent
(
customContent
);
adNewsGroupRecord
.
setInsertMark
(
groupQrcodeFoAdDTOS
.
indexOf
(
groupQrcodeFoAdDTO
));
adNewsGroupRecord
.
setContentType
(
adNewsSet
.
getContentType
());
adNewsGroupRecords
.
add
(
adNewsGroupRecord
);
// 统计记录
adNewsMessageStatistic
=
new
AdNewsMessageStatistic
();
adNewsMessageStatistic
.
setAdNewsSetId
(
adNewsSetId
);
adNewsMessageStatistic
.
setBookGroupId
(
groupQrcodeFoAdDTO
.
getBookGroupId
());
adNewsMessageStatistic
.
setClassifyId
(
groupQrcodeFoAdDTO
.
getClassifyId
());
adNewsMessageStatistic
.
setQrcodeId
(
groupQrcodeFoAdDTO
.
getQrcodeId
());
adNewsMessageStatistic
.
setCreateUser
(
adNewsSet
.
getCreateUser
());
adNewsMessageStatistic
.
setContentFrom
(
adNewsSet
.
getContentFrom
());
adNewsMessageStatistic
.
setMessageCount
(
1
);
adNewsMessageStatistic
.
setInsertMark
(
groupQrcodeFoAdDTOS
.
indexOf
(
groupQrcodeFoAdDTO
));
adNewsMessageStatistics
.
add
(
adNewsMessageStatistic
);
}
// 发送记录入库
this
.
insertRecord
(
adNewsGroupRecords
,
adNewsMessageStatistics
);
contents
.
add
(
customContent
);
// 通过机器人小号发送消息到微信群,自定义的消息无法记录点击,所以可以一起发(其实里面也是遍历微信群然后发送消息)
this
.
sendAdNewsToWechatGroup
(
adNewsSet
,
groupQrcodeFoAdDTOS
,
contents
);
}
}
/**
* 将发送记录入库
*
* @param adNewsGroupRecords
* @param adNewsMessageStatistics
*/
private
void
insertRecord
(
List
<
AdNewsGroupRecord
>
adNewsGroupRecords
,
List
<
AdNewsMessageStatistic
>
adNewsMessageStatistics
)
{
adNewsMessageStatisticDao
.
batchInsert
(
adNewsMessageStatistics
);
// 不会mybatis的主从表批量插入,所以只能这么做
for
(
AdNewsMessageStatistic
item
:
adNewsMessageStatistics
)
{
adNewsGroupRecords
.
stream
().
filter
(
x
->
x
.
getInsertMark
()
==
item
.
getInsertMark
()).
forEach
(
x
->
x
.
setMessageStatisticId
(
item
.
getId
()));
}
adNewsGroupRecordDao
.
batchInsert
(
adNewsGroupRecords
);
}
/**
* 通过机器人小号发送消息到微信群
*
* @param adNewsSet
* @param groupQrcodeFoAdDTOS
* @param contents
*/
private
void
sendAdNewsToWechatGroup
(
AdNewsSet
adNewsSet
,
List
<
GroupQrcodeFoAdDTO
>
groupQrcodeFoAdDTOS
,
List
<
String
>
contents
)
{
String
startContent
=
""
;
String
endContent
=
""
;
if
(
adNewsSet
.
getHasStartContent
())
{
...
...
@@ -203,11 +354,11 @@ public class AdNewsBizImpl implements AdNewsBiz {
endContent
=
adNewsSet
.
getEndContent
();
}
//循环发送
for
(
GroupQrcodeFoAdDTO
groupQrcodeFoAdDTO
:
groupQrcodeFoAdDTOS
)
{
String
weixinGroupId
=
groupQrcodeFoAdDTO
.
getWeixinGroupId
();
String
robotId
=
wechatGroupConsr
.
getRobotIdByGroupId
(
weixinGroupId
);
if
(
StringUtil
.
isEmpty
(
robotId
)){
LOGGER
.
info
(
"发送编辑端早晚报未找到小号"
+
weixinGroupId
);
for
(
GroupQrcodeFoAdDTO
groupQrcodeFoAdDTO
:
groupQrcodeFoAdDTOS
)
{
String
weixinGroupId
=
groupQrcodeFoAdDTO
.
getWeixinGroupId
();
String
robotId
=
wechatGroupConsr
.
getRobotIdByGroupId
(
weixinGroupId
);
if
(
StringUtil
.
isEmpty
(
robotId
))
{
LOGGER
.
info
(
"发送编辑端早晚报未找到小号"
+
weixinGroupId
);
}
if
(!
StringUtil
.
isEmpty
(
startContent
))
{
//发送开场语
...
...
@@ -223,22 +374,55 @@ public class AdNewsBizImpl implements AdNewsBiz {
sendAdNewsText
(
endContent
,
robotId
,
weixinGroupId
);
}
}
//插入发送记录
List
<
AdNewsGroupRecord
>
adNewsGroupRecords
=
new
ArrayList
<>();
for
(
GroupQrcodeFoAdDTO
groupQrcodeFoAdDTO
:
groupQrcodeFoAdDTOS
)
{
}
/**
* 发送早报还是晚报
*
* @param adNewsSet
* @return
*/
private
String
getMorningOrEveningContent
(
AdNewsSet
adNewsSet
)
{
Date
date
=
new
Date
();
String
dateOnly
=
DateUtils
.
formatDate
(
date
,
DateUtils
.
DATE_FORMAT_DATEONLY
);
Date
morningDateTime
=
DateUtils
.
StringToDateTime
(
dateOnly
.
concat
(
" "
).
concat
(
adNewsSet
.
getMorningTime
()));
Date
eveningDateTime
=
DateUtils
.
StringToDateTime
(
dateOnly
.
concat
(
" "
).
concat
(
adNewsSet
.
getEveningTime
()));
Long
morningDiff
=
date
.
getTime
()
-
morningDateTime
.
getTime
();
Long
eveningDiff
=
date
.
getTime
()
-
eveningDateTime
.
getTime
();
// 判断正负太麻烦,直接判断绝对值,哪个时间差小就发哪个
adNewsSet
.
setContentType
(
Math
.
abs
(
morningDiff
)
<=
Math
.
abs
(
eveningDiff
)
?
0
:
1
);
return
adNewsSet
.
getContentType
()
==
0
?
adNewsSet
.
getMorningContent
()
:
adNewsSet
.
getEveningContent
();
}
/**
* 将内容拼接为300字符一条数据项的数组【微信目前单次消息发送字符长度为300】
* 拼接内容大致为
* 1.xxxxxxxxxxx 2.xxxxxxxxxx 3.xxxxxxxx 【假设此条数据加下一条数据【4.xxx】 就大于300字符,那就先将之前的存一条到数组】
* 4.xxxxx 5.xxxxxxx 【多余300字符再重新拼接,以此循环下去】
*
* @param adNewsList
* @return
*/
private
List
<
String
>
concatContent
(
List
<
AdNews
>
adNewsList
)
{
List
<
String
>
contents
=
new
ArrayList
<>();
String
content
=
""
;
int
i
=
1
;
for
(
AdNews
adNews
:
adNewsList
)
{
AdNewsGroupRecord
adNewsGroupRecord
=
new
AdNewsGroupRecord
();
adNewsGroupRecord
.
setAdNewsId
(
adNews
.
getId
());
adNewsGroupRecord
.
setAdNewsSetId
(
adNewsSetId
);
adNewsGroupRecord
.
setBookGroupId
(
groupQrcodeFoAdDTO
.
getBookGroupId
());
adNewsGroupRecord
.
setClassifyId
(
groupQrcodeFoAdDTO
.
getClassifyId
());
adNewsGroupRecord
.
setQrcodeId
(
groupQrcodeFoAdDTO
.
getQrcodeId
());
adNewsGroupRecord
.
setCreateUser
(
adviserId
);
adNewsGroupRecord
.
setUpdateUser
(
adviserId
);
adNewsGroupRecords
.
add
(
adNewsGroupRecord
);
String
temp
=
content
+
i
+
"."
+
adNews
.
getTitle
()
+
adNews
.
getShortUrl
()
+
"\n"
;
if
(
temp
.
length
()
>=
300
)
{
// 如果本次拼接后的长度大于 300,那么将之前拼接的内容存入数组
contents
.
add
(
content
);
// 重置 content 的内容
content
=
i
+
"."
+
adNews
.
getTitle
()
+
adNews
.
getShortUrl
()
+
"\n"
;
}
else
{
content
=
temp
;
}
if
(
i
==
adNewsList
.
size
())
{
contents
.
add
(
content
);
}
i
=
i
+
1
;
}
adNewsGroupRecordDao
.
batchInsert
(
adNewsGroupRecords
)
;
return
contents
;
}
@ParamLog
(
"获取编辑早晚报设置"
)
...
...
@@ -246,6 +430,7 @@ public class AdNewsBizImpl implements AdNewsBiz {
public
AdNewsSet
getAdNewsSet
(
Long
partyId
)
{
AdNewsSet
adNewsSet
=
adNewsSetDao
.
getByPartyId
(
partyId
);
if
(
adNewsSet
!=
null
)
{
// 获取勾选的社群
List
<
AdNewsGroup
>
adNewsGroups
=
adNewsGroupDao
.
getListByAdNewsSetId
(
adNewsSet
.
getId
());
adNewsSet
.
setAdNewsGroups
(
adNewsGroups
);
if
(!
ListUtils
.
isEmpty
(
adNewsGroups
))
{
...
...
@@ -260,9 +445,9 @@ public class AdNewsBizImpl implements AdNewsBiz {
@ParamLog
(
"编辑添加选择的早晚报素材"
)
@Override
public
void
createAdNewsChooseBatch
(
List
<
Long
>
adNewsIds
,
Long
partyId
)
{
List
<
AdNewsChoose
>
adNewsChooses
=
new
ArrayList
<>();
for
(
Long
adNewsId
:
adNewsIds
)
{
AdNewsChoose
adNewsChoose
=
new
AdNewsChoose
();
List
<
AdNewsChoose
>
adNewsChooses
=
new
ArrayList
<>();
for
(
Long
adNewsId
:
adNewsIds
)
{
AdNewsChoose
adNewsChoose
=
new
AdNewsChoose
();
adNewsChoose
.
setAdNewsId
(
adNewsId
);
adNewsChoose
.
setAdviserId
(
partyId
);
adNewsChoose
.
setCreateUser
(
partyId
);
...
...
@@ -281,16 +466,21 @@ public class AdNewsBizImpl implements AdNewsBiz {
@ParamLog
(
"编辑移除选择的早晚报素材"
)
@Override
public
void
deleteAdNewsChoose
(
Long
adNewsId
,
Long
partyId
)
{
adNewsChooseDao
.
deleteAdNewsChooseById
(
adNewsId
,
partyId
);
adNewsChooseDao
.
deleteAdNewsChooseById
(
adNewsId
,
partyId
);
}
@ParamLog
(
"获取素材库列表"
)
@Override
public
PageBeanNew
<
AdNews
>
getAdNewsList
(
String
title
,
Long
partyId
,
Integer
currentPage
,
Integer
numPerPage
)
{
PageParam
pageParam
=
new
PageParam
(
currentPage
,
numPerPage
);
public
PageBeanNew
<
AdNews
>
getAdNewsList
(
AdNewsListParam
adNewsListParam
)
{
PageParam
pageParam
=
new
PageParam
(
adNewsListParam
.
getCurrentPage
(),
adNewsListParam
.
getNumPerPage
()
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"title"
,
title
);
map
.
put
(
"partyId"
,
partyId
);
map
.
put
(
"partyId"
,
adNewsListParam
.
getPartyId
());
map
.
put
(
"title"
,
adNewsListParam
.
getTitle
());
map
.
put
(
"beginTime"
,
adNewsListParam
.
getBeginTime
());
map
.
put
(
"endTime"
,
adNewsListParam
.
getEndTime
());
map
.
put
(
"hasBan"
,
adNewsListParam
.
getHasBan
());
map
.
put
(
"hasUsed"
,
adNewsListParam
.
getHasUsed
());
map
.
put
(
"adNewsWechatIds"
,
adNewsListParam
.
getAdNewsWechatIds
());
PageBeanNew
<
AdNews
>
pageBeanNew
=
adNewsDao
.
listPageNew
(
pageParam
,
map
,
"getAdNewsList"
);
return
pageBeanNew
;
}
...
...
@@ -307,12 +497,25 @@ public class AdNewsBizImpl implements AdNewsBiz {
return
page
;
}
@ParamLog
(
"禁用/允许推送"
)
@Override
public
void
saveAdNewsBan
(
Long
partyId
,
Long
adNewsId
,
Integer
hasBan
)
{
if
(
AdNewsBanEnum
.
BAN
.
key
==
hasBan
)
{
AdNewsBan
model
=
new
AdNewsBan
();
model
.
setAdviserId
(
partyId
);
model
.
setAdNewsId
(
adNewsId
);
adNewsBanDao
.
insert
(
model
);
}
else
{
adNewsBanDao
.
deleteByAdNewsId
(
partyId
,
adNewsId
);
}
}
@ParamLog
(
"发送消息"
)
private
void
sendAdNewsText
(
String
content
,
String
robotId
,
String
weixinGroupId
)
{
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setContent
(
content
);
sendTextMessageVO
.
setAltId
(
robotId
);
sendTextMessageVO
.
setGroupId
(
weixinGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendTextMessageVO
.
setIp
(
findIp
(
weixinGroupId
));
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
LOGGER
.
info
(
"发送编辑端早晚报"
+
sendTextMessageVO
.
toString
());
...
...
@@ -343,4 +546,151 @@ public class AdNewsBizImpl implements AdNewsBiz {
String
ip
=
Optional
.
ofNullable
(
groupVersion
.
get
(
wechatGroupId
)).
orElse
(
new
BookWxQrcodeDTO
()).
getWechatGroupIp
();
return
ip
;
}
@ParamLog
(
"增加公众号反馈"
)
@Override
public
Long
addAdNewsWechat
(
AdNewsWechat
adNewsWechat
)
{
return
adNewsWechatDao
.
insert
(
adNewsWechat
);
}
@ParamLog
(
"获取公众号列表"
)
@Override
public
PageBeanNew
<
AdNewsWechat
>
getAdNewsWechatList
(
Integer
currentPage
,
Integer
numPerPage
)
{
PageParam
pageParam
=
new
PageParam
(
currentPage
,
numPerPage
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
PageBeanNew
<
AdNewsWechat
>
pageBeanNew
=
adNewsWechatDao
.
listPageNew
(
pageParam
,
map
,
"getAdNewsWechatList"
);
return
pageBeanNew
;
}
@ParamLog
(
"获取编辑已选取的公众号列表"
)
@Override
public
PageBeanNew
<
AdNewsWechat
>
getAdNewsWechatChooseList
(
Long
partyId
,
Integer
currentPage
,
Integer
numPerPage
)
{
PageParam
pageParam
=
new
PageParam
(
currentPage
,
numPerPage
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"partyId"
,
partyId
);
PageBeanNew
<
AdNewsWechat
>
pageBeanNew
=
adNewsWechatDao
.
listPageNew
(
pageParam
,
map
,
"getAdNewsWechatChooseList"
);
return
pageBeanNew
;
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@ParamLog
(
"编辑添加选择的公众号"
)
@Override
public
void
createAdNewsWechatChooseBatch
(
List
<
Long
>
adNewsWechatIds
,
Long
partyId
)
{
List
<
AdNewsWechatChoose
>
adNewsWechatChooses
=
new
ArrayList
<>();
for
(
Long
adNewsWechatId
:
adNewsWechatIds
)
{
AdNewsWechatChoose
adNewsWechatChoose
=
new
AdNewsWechatChoose
();
adNewsWechatChoose
.
setAdNewsWechatId
(
adNewsWechatId
);
adNewsWechatChoose
.
setAdviserId
(
partyId
);
adNewsWechatChoose
.
setCreateUser
(
partyId
);
adNewsWechatChoose
.
setUpdateUser
(
partyId
);
adNewsWechatChooses
.
add
(
adNewsWechatChoose
);
}
// 移除编辑之前的选择
adNewsWechatChooseDao
.
deleteAdNewsWechatChooseByPartyId
(
partyId
);
if
(!
ListUtils
.
isEmpty
(
adNewsWechatChooses
)){
// 重新建立关系
adNewsWechatChooseDao
.
batchInsert
(
adNewsWechatChooses
);
}
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@ParamLog
(
"编辑移除选择的公众号"
)
@Override
public
void
deleteAdNewsWechatChoose
(
Long
adNewsWechatId
,
Long
partyId
)
{
adNewsWechatChooseDao
.
deleteAdNewsWechatChooseById
(
adNewsWechatId
,
partyId
);
}
@Override
@ParamLog
(
"获取早晚报发送记录"
)
public
PageBeanNew
<
AdNewsMessageStatisticVO
>
getAdNewsMessageStatistic
(
Long
partyId
,
String
title
,
String
beginTime
,
String
endTime
,
Long
proLabelId
,
Long
depLabelId
,
Long
purLabelId
,
Integer
currentPage
,
Integer
numPerPage
)
{
PageParam
pageParam
=
new
PageParam
(
currentPage
,
numPerPage
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"partyId"
,
partyId
);
map
.
put
(
"title"
,
title
);
map
.
put
(
"beginTime"
,
beginTime
);
map
.
put
(
"endTime"
,
StringUtil
.
isEmpty
(
endTime
)
?
null
:
endTime
.
concat
(
" 23:59:59"
));
map
.
put
(
"proLabelId"
,
proLabelId
);
map
.
put
(
"depLabelId"
,
depLabelId
);
map
.
put
(
"purLabelId"
,
purLabelId
);
PageBeanNew
<
AdNewsMessageStatisticVO
>
pageBeanNew
=
adNewsMessageStatisticDao
.
listPageNew
(
pageParam
,
map
,
"getAdNewsMessageStatistic"
);
if
(
pageBeanNew
==
null
)
{
return
new
PageBeanNew
<>(
currentPage
,
numPerPage
,
new
ArrayList
<>());
}
// 遍历填充标签
List
<
AdNewsMessageStatisticVO
>
adNewsMessageStatisticVOS
=
pageBeanNew
.
getRecordList
();
if
(!
ListUtils
.
isEmpty
((
adNewsMessageStatisticVOS
)))
{
List
<
Long
>
labelIds
=
new
ArrayList
<>();
for
(
AdNewsMessageStatisticVO
item
:
adNewsMessageStatisticVOS
)
{
if
(
item
.
getProLabelId
()
!=
null
)
{
labelIds
.
add
(
item
.
getProLabelId
());
}
if
(
item
.
getDepLabelId
()
!=
null
)
{
labelIds
.
add
(
item
.
getDepLabelId
());
}
if
(
item
.
getPurLabelId
()
!=
null
)
{
labelIds
.
add
(
item
.
getPurLabelId
());
}
}
Map
<
Long
,
String
>
labelMap
=
new
HashMap
<>();
if
(!
ListUtils
.
isEmpty
(
labelIds
))
{
labelMap
=
ResponseHandleUtil
.
parseMap
(
labelService
.
getLabelName
(
labelIds
),
Long
.
class
,
String
.
class
);
}
if
(!
MapUtils
.
isEmpty
(
labelMap
))
{
for
(
AdNewsMessageStatisticVO
item
:
adNewsMessageStatisticVOS
)
{
if
(
item
.
getProLabelId
()
!=
null
)
{
item
.
setProLabelName
(
labelMap
.
get
(
item
.
getProLabelId
()));
}
if
(
item
.
getDepLabelId
()
!=
null
)
{
item
.
setDepLabelName
(
labelMap
.
get
(
item
.
getDepLabelId
()));
}
if
(
item
.
getPurLabelId
()
!=
null
)
{
item
.
setPurLabelName
(
labelMap
.
get
(
item
.
getPurLabelId
()));
}
}
}
}
return
pageBeanNew
;
}
@Override
@ParamLog
(
"查询早晚报发送详情"
)
public
List
<
AdNewsGroupRecordVO
>
getAdNewsGroupRecord
(
Long
partyId
,
Long
messageStatisticId
)
{
return
adNewsGroupRecordDao
.
getAdNewsGroupRecord
(
partyId
,
messageStatisticId
);
}
@Override
@ParamLog
(
"记录用户点击量"
)
public
Long
addAdNewsClickRecord
(
AdNewsClickRecord
adNewsClickRecord
)
{
return
adNewsClickRecordDao
.
insert
(
adNewsClickRecord
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/check/AdNewsCheck.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
check
;
import
com.google.common.base.Enums
;
import
com.pcloud.book.adnews.entity.AdNewsGroup
;
import
com.pcloud.book.adnews.entity.AdNewsSet
;
import
com.pcloud.book.adnews.enums.AdContentFromEnum
;
import
com.pcloud.book.base.exception.BookBizException
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.NumberUtil
;
import
com.pcloud.common.utils.string.StringUtil
;
import
org.springframework.stereotype.Component
;
...
...
@@ -16,49 +19,52 @@ import org.springframework.stereotype.Component;
public
class
AdNewsCheck
{
public
void
createAdNewsSetCheck
(
AdNewsSet
adNewsSet
){
if
(
adNewsSet
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数错误"
);
public
void
createAdNewsSetCheck
(
AdNewsSet
adNewsSet
)
{
if
(
adNewsSet
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数错误"
);
}
if
(
ListUtils
.
isEmpty
(
adNewsSet
.
getAdNewsGroups
())){
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"发送群分类不能为空!"
);
if
(
ListUtils
.
isEmpty
(
adNewsSet
.
getAdNewsGroups
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"发送群分类不能为空!"
);
}
if
(
adNewsSet
.
getSendCount
()
==
null
||
adNewsSet
.
getSendCount
()<=
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"推送条数不能为空且必须大于0!"
);
if
(
adNewsSet
.
getSendCount
()
==
null
||
adNewsSet
.
getSendCount
()
<=
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"推送条数不能为空且必须大于0!"
);
}
if
(
adNewsSet
.
getHasMorningOpen
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"是否开启早报不能为空!"
);
if
(
adNewsSet
.
getHasMorningOpen
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"是否开启早报不能为空!"
);
}
if
(
adNewsSet
.
getHasEveningOpen
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"是否开启晚报不能为空!"
);
if
(
adNewsSet
.
getHasEveningOpen
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"是否开启晚报不能为空!"
);
}
if
(
adNewsSet
.
getHasStartContent
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"是否开启开场语不能为空!"
);
if
(
adNewsSet
.
getHasStartContent
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"是否开启开场语不能为空!"
);
}
if
(
adNewsSet
.
getHasEndContent
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"是否开启结束语不能为空!"
);
if
(
adNewsSet
.
getHasEndContent
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"是否开启结束语不能为空!"
);
}
if
(
adNewsSet
.
getHasMorningOpen
()
&&
StringUtil
.
isEmpty
(
adNewsSet
.
getMorningTime
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"早报时间不能为空!"
);
if
(
adNewsSet
.
getHasMorningOpen
()
&&
StringUtil
.
isEmpty
(
adNewsSet
.
getMorningTime
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"早报时间不能为空!"
);
}
if
(
adNewsSet
.
getHasEveningOpen
()
&&
StringUtil
.
isEmpty
(
adNewsSet
.
getEveningTime
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"晚报时间不能为空!"
);
if
(
adNewsSet
.
getHasEveningOpen
()
&&
StringUtil
.
isEmpty
(
adNewsSet
.
getEveningTime
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"晚报时间不能为空!"
);
}
if
(
adNewsSet
.
getHasStartContent
()
&&
StringUtil
.
isEmpty
(
adNewsSet
.
getStartContent
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"开场语不能为空!"
);
if
(
adNewsSet
.
getHasStartContent
()
&&
StringUtil
.
isEmpty
(
adNewsSet
.
getStartContent
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"开场语不能为空!"
);
}
if
(
adNewsSet
.
getHasEndContent
()
&&
StringUtil
.
isEmpty
(
adNewsSet
.
getEndContent
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"结束语不能为空!"
);
if
(
adNewsSet
.
getHasEndContent
()
&&
StringUtil
.
isEmpty
(
adNewsSet
.
getEndContent
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"结束语不能为空!"
);
}
for
(
AdNewsGroup
adNewsGroup:
adNewsSet
.
getAdNewsGroups
()){
if
(
adNewsGroup
==
null
){
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"早晚报关联不能为空!"
);
if
(
adNewsSet
.
getContentFrom
()
!=
AdContentFromEnum
.
WECHAT
.
key
&&
adNewsSet
.
getContentFrom
()
!=
AdContentFromEnum
.
CUSTOM
.
key
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"请选择早晚报内容来源!"
);
}
if
(
adNewsGroup
.
getClassifyId
()==
null
){
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"群分类id不能为空!"
);
for
(
AdNewsGroup
adNewsGroup
:
adNewsSet
.
getAdNewsGroups
())
{
if
(
adNewsGroup
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"早晚报关联不能为空!"
);
}
if
(
adNewsGroup
.
getBookGroupId
()==
null
){
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"社群码id不能为空!"
);
if
(
adNewsGroup
.
getClassifyId
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"群分类id不能为空!"
);
}
if
(
adNewsGroup
.
getBookGroupId
()
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"社群码id不能为空!"
);
}
}
...
...
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/AdNewsBanDao.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
;
import
com.pcloud.book.adnews.entity.AdNewsBan
;
import
com.pcloud.common.core.dao.BaseDao
;
/**
* @author zhengyongqiang
* @date 2019/8/12 15:12
*/
public
interface
AdNewsBanDao
extends
BaseDao
<
AdNewsBan
>
{
void
deleteByAdNewsId
(
Long
partyId
,
Long
adNewsId
);
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/AdNewsClickRecordDao.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
;
import
com.pcloud.book.adnews.entity.AdNewsClickRecord
;
import
com.pcloud.common.core.dao.BaseDao
;
/**
* @author zhengyongqiang
* @date 2019/8/15 11:10
*/
public
interface
AdNewsClickRecordDao
extends
BaseDao
<
AdNewsClickRecord
>
{
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/AdNewsGroupDao.java
View file @
ff1648f3
...
...
@@ -6,9 +6,15 @@ import com.pcloud.common.core.dao.BaseDao;
import
java.util.List
;
public
interface
AdNewsGroupDao
extends
BaseDao
<
AdNewsGroup
>
{
Integer
batchInsert
(
List
<
AdNewsGroup
>
adNewsGroups
);
void
deleteByAdNewsSetId
(
Long
adNewsSetId
);
/**
* 获取勾选关联的社群
* @param adNewsSetId
* @return
*/
List
<
AdNewsGroup
>
getListByAdNewsSetId
(
Long
adNewsSetId
);
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/AdNewsGroupRecordDao.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
;
import
com.pcloud.book.adnews.entity.AdNewsGroupRecord
;
import
com.pcloud.book.adnews.vo.AdNewsGroupRecordVO
;
import
com.pcloud.common.core.dao.BaseDao
;
import
java.util.List
;
...
...
@@ -12,4 +13,6 @@ import java.util.List;
**/
public
interface
AdNewsGroupRecordDao
extends
BaseDao
<
AdNewsGroupRecord
>
{
Integer
batchInsert
(
List
<
AdNewsGroupRecord
>
adNewsGroupRecords
);
List
<
AdNewsGroupRecordVO
>
getAdNewsGroupRecord
(
Long
partyId
,
Long
messageStatisticId
);
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/AdNewsMessageStatisticDao.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
;
import
com.pcloud.book.adnews.entity.AdNewsMessageStatistic
;
import
com.pcloud.common.core.dao.BaseDao
;
import
com.pcloud.common.page.PageBeanNew
;
import
java.util.List
;
/**
* @author zhengyongqiang
* @date 2019/8/13 19:05
*/
public
interface
AdNewsMessageStatisticDao
extends
BaseDao
<
AdNewsMessageStatistic
>
{
Integer
batchInsert
(
List
<
AdNewsMessageStatistic
>
list
);
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/AdNewsWechatChooseDao.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
;
import
com.pcloud.book.adnews.entity.AdNewsChoose
;
import
com.pcloud.book.adnews.entity.AdNewsWechatChoose
;
import
com.pcloud.common.core.dao.BaseDao
;
import
java.util.List
;
/**
* @author zhengyongqiang
* @date 2019/8/7 11:47
*/
public
interface
AdNewsWechatChooseDao
extends
BaseDao
<
AdNewsWechatChoose
>
{
Integer
batchInsert
(
List
<
AdNewsWechatChoose
>
adNewsWechatChooses
);
void
deleteAdNewsWechatChooseById
(
Long
adNewsWechatId
,
Long
partyId
);
void
deleteAdNewsWechatChooseByPartyId
(
Long
partyId
);
Integer
getCountByAdNewsWechatIdsAndPartyId
(
List
<
Long
>
adNewsIds
,
Long
partyId
);
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/AdNewsWechatDao.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
;
import
com.pcloud.book.adnews.entity.AdNewsWechat
;
import
com.pcloud.common.core.dao.BaseDao
;
/**
* @author zhengyongqiang
* @date 2019/8/7 11:46
*/
public
interface
AdNewsWechatDao
extends
BaseDao
<
AdNewsWechat
>
{
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/impl/AdNewsBanDaoImpl.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
.
impl
;
import
com.pcloud.book.adnews.dao.AdNewsBanDao
;
import
com.pcloud.book.adnews.entity.AdNewsBan
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Repository
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @author zhengyongqiang
* @date 2019/8/12 15:11
*/
@Repository
(
"adnewsBanDao"
)
public
class
AdNewsBanDaoImpl
extends
BaseDaoImpl
<
AdNewsBan
>
implements
AdNewsBanDao
{
@Override
public
void
deleteByAdNewsId
(
Long
partyId
,
Long
adNewsId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"partyId"
,
partyId
);
map
.
put
(
"adNewsId"
,
adNewsId
);
super
.
getSqlSession
().
delete
(
getStatement
(
"deleteByAdNewsId"
),
map
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/impl/AdNewsClickRecordDaoImpl.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
.
impl
;
import
com.pcloud.book.adnews.dao.AdNewsClickRecordDao
;
import
com.pcloud.book.adnews.entity.AdNewsClickRecord
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Repository
;
/**
* @author zhengyongqiang
* @date 2019/8/15 11:10
*/
@Repository
(
"adNewsClickRecordDao"
)
public
class
AdNewsClickRecordDaoImpl
extends
BaseDaoImpl
<
AdNewsClickRecord
>
implements
AdNewsClickRecordDao
{
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/impl/AdNewsGroupRecordDaoImpl.java
View file @
ff1648f3
...
...
@@ -2,10 +2,13 @@ package com.pcloud.book.adnews.dao.impl;
import
com.pcloud.book.adnews.dao.AdNewsGroupRecordDao
;
import
com.pcloud.book.adnews.entity.AdNewsGroupRecord
;
import
com.pcloud.book.adnews.vo.AdNewsGroupRecordVO
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Repository
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @Description
...
...
@@ -18,4 +21,12 @@ public class AdNewsGroupRecordDaoImpl extends BaseDaoImpl<AdNewsGroupRecord> imp
public
Integer
batchInsert
(
List
<
AdNewsGroupRecord
>
list
)
{
return
super
.
getSqlSession
().
insert
(
getStatement
(
"batchInsert"
),
list
);
}
@Override
public
List
<
AdNewsGroupRecordVO
>
getAdNewsGroupRecord
(
Long
partyId
,
Long
messageStatisticId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"partyId"
,
partyId
);
map
.
put
(
"messageStatisticId"
,
messageStatisticId
);
return
super
.
getSqlSession
().
selectList
(
getStatement
(
"getAdNewsGroupRecord"
),
map
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/impl/AdNewsMessageStatisticDaoImpl.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
.
impl
;
import
com.pcloud.book.adnews.dao.AdNewsMessageStatisticDao
;
import
com.pcloud.book.adnews.entity.AdNewsGroupRecord
;
import
com.pcloud.book.adnews.entity.AdNewsMessageStatistic
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
com.pcloud.common.page.PageBeanNew
;
import
org.springframework.stereotype.Repository
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author zhengyongqiang
* @date 2019/8/13 19:05
*/
@Repository
(
"adNewsMessageStatisticDao"
)
public
class
AdNewsMessageStatisticDaoImpl
extends
BaseDaoImpl
<
AdNewsMessageStatistic
>
implements
AdNewsMessageStatisticDao
{
@Override
public
Integer
batchInsert
(
List
<
AdNewsMessageStatistic
>
list
)
{
return
super
.
getSqlSession
().
insert
(
getStatement
(
"batchInsert"
),
list
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/impl/AdNewsWechatChooseDaoImpl.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
.
impl
;
import
com.pcloud.book.adnews.dao.AdNewsWechatChooseDao
;
import
com.pcloud.book.adnews.entity.AdNewsWechatChoose
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Repository
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author zhengyongqiang
* @date 2019/8/7 11:52
*/
@Repository
(
"adNewsWechatChooseDao"
)
public
class
AdNewsWechatChooseDaoImpl
extends
BaseDaoImpl
<
AdNewsWechatChoose
>
implements
AdNewsWechatChooseDao
{
@Override
public
Integer
batchInsert
(
List
<
AdNewsWechatChoose
>
adNewsWechatChooses
)
{
return
super
.
getSqlSession
().
insert
(
getStatement
(
"batchInsert"
),
adNewsWechatChooses
);
}
@Override
public
void
deleteAdNewsWechatChooseById
(
Long
adNewsWechatId
,
Long
partyId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"adNewsWechatId"
,
adNewsWechatId
);
map
.
put
(
"partyId"
,
partyId
);
super
.
getSqlSession
().
delete
(
getStatement
(
"deleteAdNewsWechatChooseById"
),
map
);
}
@Override
public
void
deleteAdNewsWechatChooseByPartyId
(
Long
partyId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"partyId"
,
partyId
);
super
.
getSqlSession
().
delete
(
getStatement
(
"deleteAdNewsWechatChooseByPartyId"
),
map
);
}
@Override
public
Integer
getCountByAdNewsWechatIdsAndPartyId
(
List
<
Long
>
adNewsWechatIds
,
Long
partyId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"adNewsWechatIds"
,
adNewsWechatIds
);
map
.
put
(
"partyId"
,
partyId
);
return
super
.
getSqlSession
().
selectOne
(
getStatement
(
"getCountByAdNewsWechatIdsAndPartyId"
),
map
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dao/impl/AdNewsWechatDaoImpl.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dao
.
impl
;
import
com.pcloud.book.adnews.dao.AdNewsWechatDao
;
import
com.pcloud.book.adnews.entity.AdNewsWechat
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Repository
;
/**
* @author zhengyongqiang
* @date 2019/8/7 11:52
*/
@Repository
(
"adNewsWechatDao"
)
public
class
AdNewsWechatDaoImpl
extends
BaseDaoImpl
<
AdNewsWechat
>
implements
AdNewsWechatDao
{
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/dto/AdNewsListParam.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiParam
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author zhengyongqiang
* @date 2019/8/12 11:33
*/
@Data
@ApiModel
(
"查询素材列表"
)
public
class
AdNewsListParam
{
@ApiModelProperty
(
"当前人"
)
private
Long
partyId
;
@ApiModelProperty
(
"标题"
)
private
String
title
;
@ApiModelProperty
(
"开始时间"
)
private
String
beginTime
;
@ApiModelProperty
(
"结束时间"
)
private
String
endTime
;
@ApiModelProperty
(
"公众号id"
)
private
List
<
Long
>
adNewsWechatIds
;
@ApiModelProperty
(
"已被禁用;0:没禁用; 1:已禁用;"
)
private
Integer
hasBan
;
@ApiModelProperty
(
"使用状态;0:未使用; 1:已使用;"
)
private
Integer
hasUsed
;
@ApiModelProperty
(
"当前页"
)
private
Integer
currentPage
;
@ApiModelProperty
(
"每页展示条数"
)
private
Integer
numPerPage
;
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNews.java
View file @
ff1648f3
...
...
@@ -38,6 +38,12 @@ public class AdNews extends BaseEntity {
@ApiModelProperty
(
"是否使用"
)
private
Boolean
hasUsed
;
@ApiModelProperty
(
"是否禁用"
)
private
Boolean
hasBan
;
@ApiModelProperty
(
"公众号"
)
private
String
wechatName
;
public
String
getType
()
{
return
type
;
}
...
...
@@ -102,6 +108,22 @@ public class AdNews extends BaseEntity {
this
.
hasUsed
=
hasUsed
;
}
public
Boolean
getHasBan
()
{
return
hasBan
;
}
public
void
setHasBan
(
Boolean
hasBan
)
{
this
.
hasBan
=
hasBan
;
}
public
String
getWechatName
()
{
return
wechatName
;
}
public
void
setWechatName
(
String
wechatName
)
{
this
.
wechatName
=
wechatName
;
}
@Override
public
String
toString
()
{
return
"AdNews{"
+
...
...
@@ -113,6 +135,8 @@ public class AdNews extends BaseEntity {
", shortUrl='"
+
shortUrl
+
'\''
+
", newsDate='"
+
newsDate
+
'\''
+
", hasUsed="
+
hasUsed
+
"} "
+
super
.
toString
();
", hasBan="
+
hasBan
+
", wechatName='"
+
wechatName
+
'\''
+
'}'
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNewsBan.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author zhengyongqiang
* @date 2019/8/12 15:13
*/
@ApiModel
(
"禁止推送"
)
@Data
public
class
AdNewsBan
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
5102664638916548405L
;
@ApiModelProperty
(
"编辑id"
)
private
Long
adviserId
;
@ApiModelProperty
(
"新闻id"
)
private
Long
adNewsId
;
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNewsClickRecord.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author zhengyongqiang
* @date 2019/8/15 11:02
*/
@Data
@ApiModel
(
"记录点击量"
)
public
class
AdNewsClickRecord
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
3879628889314992714L
;
@ApiModelProperty
(
"微信统计记录id"
)
private
Long
messageStatisticId
;
@ApiModelProperty
(
"微信记录详情id"
)
private
Long
groupRecordId
;
@ApiModelProperty
(
"微信用户id"
)
private
Long
wechatUserId
;
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNewsGroup.java
View file @
ff1648f3
...
...
@@ -3,12 +3,14 @@ package com.pcloud.book.adnews.entity;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @Description
* @Author ruansiyuan
* @Date 2019/7/17 15:20
**/
@Data
@ApiModel
(
"编辑新闻群关联"
)
public
class
AdNewsGroup
extends
BaseEntity
{
...
...
@@ -32,63 +34,7 @@ public class AdNewsGroup extends BaseEntity {
@ApiModelProperty
(
"修改人"
)
private
Long
updateUser
;
public
Long
getClassifyId
()
{
return
classifyId
;
}
@ApiModelProperty
(
"分类"
)
private
String
classify
;
public
void
setClassifyId
(
Long
classifyId
)
{
this
.
classifyId
=
classifyId
;
}
public
Long
getBookGroupId
()
{
return
bookGroupId
;
}
public
void
setBookGroupId
(
Long
bookGroupId
)
{
this
.
bookGroupId
=
bookGroupId
;
}
public
Long
getAdNewsSetId
()
{
return
adNewsSetId
;
}
public
void
setAdNewsSetId
(
Long
adNewsSetId
)
{
this
.
adNewsSetId
=
adNewsSetId
;
}
public
Boolean
getIsDelete
()
{
return
isDelete
;
}
public
void
setIsDelete
(
Boolean
isDelete
)
{
this
.
isDelete
=
isDelete
;
}
public
Long
getCreateUser
()
{
return
createUser
;
}
public
void
setCreateUser
(
Long
createUser
)
{
this
.
createUser
=
createUser
;
}
public
Long
getUpdateUser
()
{
return
updateUser
;
}
public
void
setUpdateUser
(
Long
updateUser
)
{
this
.
updateUser
=
updateUser
;
}
@Override
public
String
toString
()
{
return
"AdNewsGroup{"
+
"classifyId="
+
classifyId
+
", bookGroupId="
+
bookGroupId
+
", adNewsSetId="
+
adNewsSetId
+
", isDelete="
+
isDelete
+
", createUser="
+
createUser
+
", updateUser="
+
updateUser
+
"} "
+
super
.
toString
();
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNewsGroupRecord.java
View file @
ff1648f3
...
...
@@ -3,6 +3,7 @@ package com.pcloud.book.adnews.entity;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @Description
...
...
@@ -10,10 +11,14 @@ import io.swagger.annotations.ApiModelProperty;
* @Date 2019/7/17 15:55
**/
@ApiModel
(
"编辑新闻发送记录"
)
@Data
public
class
AdNewsGroupRecord
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
3271071194854381077L
;
@ApiModelProperty
(
"消息统计表id"
)
private
Long
messageStatisticId
;
@ApiModelProperty
(
"群id"
)
private
Long
qrcodeId
;
...
...
@@ -35,72 +40,12 @@ public class AdNewsGroupRecord extends BaseEntity{
@ApiModelProperty
(
"修改人"
)
private
Long
updateUser
;
public
Long
getQrcodeId
()
{
return
qrcodeId
;
}
public
void
setQrcodeId
(
Long
qrcodeId
)
{
this
.
qrcodeId
=
qrcodeId
;
}
public
Long
getClassifyId
()
{
return
classifyId
;
}
public
void
setClassifyId
(
Long
classifyId
)
{
this
.
classifyId
=
classifyId
;
}
public
Long
getBookGroupId
()
{
return
bookGroupId
;
}
public
void
setBookGroupId
(
Long
bookGroupId
)
{
this
.
bookGroupId
=
bookGroupId
;
}
public
Long
getAdNewsId
()
{
return
adNewsId
;
}
public
void
setAdNewsId
(
Long
adNewsId
)
{
this
.
adNewsId
=
adNewsId
;
}
public
Long
getAdNewsSetId
()
{
return
adNewsSetId
;
}
public
void
setAdNewsSetId
(
Long
adNewsSetId
)
{
this
.
adNewsSetId
=
adNewsSetId
;
}
public
Long
getCreateUser
()
{
return
createUser
;
}
public
void
setCreateUser
(
Long
createUser
)
{
this
.
createUser
=
createUser
;
}
public
Long
getUpdateUser
()
{
return
updateUser
;
}
@ApiModelProperty
(
"自定义内容"
)
private
String
customContent
;
public
void
setUpdateUser
(
Long
updateUser
)
{
this
.
updateUser
=
updateUser
;
}
@ApiModelProperty
(
"内容类型,0:早报;1:晚报"
)
private
Integer
contentType
;
@Override
public
String
toString
()
{
return
"AdNewsGroupRecord{"
+
"qrcodeId="
+
qrcodeId
+
", classifyId="
+
classifyId
+
", bookGroupId="
+
bookGroupId
+
", adNewsId="
+
adNewsId
+
", adNewsSetId="
+
adNewsSetId
+
", createUser="
+
createUser
+
", updateUser="
+
updateUser
+
"} "
+
super
.
toString
();
}
@ApiModelProperty
(
"insert时父子表标识"
)
Integer
insertMark
;
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNewsMessageStatistic.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author zhengyongqiang
* @date 2019/8/13 18:51
*/
@ApiModel
(
"消息记录统计表"
)
@Data
public
class
AdNewsMessageStatistic
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
5892129036072748567L
;
@ApiModelProperty
(
"群id"
)
private
Long
qrcodeId
;
@ApiModelProperty
(
"分类id"
)
private
Long
classifyId
;
@ApiModelProperty
(
"社群码id"
)
private
Long
bookGroupId
;
@ApiModelProperty
(
"编辑新闻设置id"
)
private
Long
adNewsSetId
;
@ApiModelProperty
(
"内容来源"
)
private
Integer
contentFrom
;
@ApiModelProperty
(
"发送消息数"
)
private
Integer
messageCount
;
@ApiModelProperty
(
"创建人"
)
private
Long
createUser
;
@ApiModelProperty
(
"insert时父子表标识"
)
private
Integer
insertMark
;
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNewsSet.java
View file @
ff1648f3
...
...
@@ -3,6 +3,7 @@ package com.pcloud.book.adnews.entity;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
...
...
@@ -11,6 +12,7 @@ import java.util.List;
* @Author ruansiyuan
* @Date 2019/7/17 16:13
**/
@Data
@ApiModel
(
"编辑新闻发送记录"
)
public
class
AdNewsSet
extends
BaseEntity
{
...
...
@@ -49,132 +51,21 @@ public class AdNewsSet extends BaseEntity {
@ApiModelProperty
(
"修改人"
)
private
Long
updateUser
;
@ApiModelProperty
(
"内容来源"
)
private
Integer
contentFrom
;
@ApiModelProperty
(
"早报内容"
)
private
String
morningContent
;
@ApiModelProperty
(
"晚报内容"
)
private
String
eveningContent
;
@ApiModelProperty
(
"内容类型"
)
private
Integer
contentType
;
@ApiModelProperty
(
"分类关联集合"
)
private
List
<
AdNewsGroup
>
adNewsGroups
;
@ApiModelProperty
(
"分类id集合"
)
private
List
<
Long
>
classifyIds
;
public
String
getMorningTime
()
{
return
morningTime
;
}
public
void
setMorningTime
(
String
morningTime
)
{
this
.
morningTime
=
morningTime
;
}
public
String
getEveningTime
()
{
return
eveningTime
;
}
public
void
setEveningTime
(
String
eveningTime
)
{
this
.
eveningTime
=
eveningTime
;
}
public
Boolean
getHasMorningOpen
()
{
return
hasMorningOpen
;
}
public
void
setHasMorningOpen
(
Boolean
hasMorningOpen
)
{
this
.
hasMorningOpen
=
hasMorningOpen
;
}
public
Boolean
getHasEveningOpen
()
{
return
hasEveningOpen
;
}
public
void
setHasEveningOpen
(
Boolean
hasEveningOpen
)
{
this
.
hasEveningOpen
=
hasEveningOpen
;
}
public
Integer
getSendCount
()
{
return
sendCount
;
}
public
void
setSendCount
(
Integer
sendCount
)
{
this
.
sendCount
=
sendCount
;
}
public
String
getStartContent
()
{
return
startContent
;
}
public
void
setStartContent
(
String
startContent
)
{
this
.
startContent
=
startContent
;
}
public
String
getEndContent
()
{
return
endContent
;
}
public
void
setEndContent
(
String
endContent
)
{
this
.
endContent
=
endContent
;
}
public
Boolean
getHasStartContent
()
{
return
hasStartContent
;
}
public
void
setHasStartContent
(
Boolean
hasStartContent
)
{
this
.
hasStartContent
=
hasStartContent
;
}
public
Boolean
getHasEndContent
()
{
return
hasEndContent
;
}
public
void
setHasEndContent
(
Boolean
hasEndContent
)
{
this
.
hasEndContent
=
hasEndContent
;
}
public
Long
getCreateUser
()
{
return
createUser
;
}
public
void
setCreateUser
(
Long
createUser
)
{
this
.
createUser
=
createUser
;
}
public
Long
getUpdateUser
()
{
return
updateUser
;
}
public
void
setUpdateUser
(
Long
updateUser
)
{
this
.
updateUser
=
updateUser
;
}
public
List
<
AdNewsGroup
>
getAdNewsGroups
()
{
return
adNewsGroups
;
}
public
void
setAdNewsGroups
(
List
<
AdNewsGroup
>
adNewsGroups
)
{
this
.
adNewsGroups
=
adNewsGroups
;
}
public
List
<
Long
>
getClassifyIds
()
{
return
classifyIds
;
}
public
void
setClassifyIds
(
List
<
Long
>
classifyIds
)
{
this
.
classifyIds
=
classifyIds
;
}
@Override
public
String
toString
()
{
return
"AdNewsSet{"
+
"morningTime='"
+
morningTime
+
'\''
+
", eveningTime='"
+
eveningTime
+
'\''
+
", hasMorningOpen="
+
hasMorningOpen
+
", hasEveningOpen="
+
hasEveningOpen
+
", sendCount="
+
sendCount
+
", startContent='"
+
startContent
+
'\''
+
", endContent='"
+
endContent
+
'\''
+
", hasStartContent="
+
hasStartContent
+
", hasEndContent="
+
hasEndContent
+
", createUser="
+
createUser
+
", updateUser="
+
updateUser
+
", adNewsGroups="
+
adNewsGroups
+
", classifyIds="
+
classifyIds
+
"} "
+
super
.
toString
();
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNewsWechat.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
/**
* @author zhengyongqiang
* @date 2019/8/7 11:23
*/
@ApiModel
(
"新闻微信公众号"
)
public
class
AdNewsWechat
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
454065623001378319L
;
public
AdNewsWechat
()
{
}
public
AdNewsWechat
(
String
newsFrom
,
String
wechatName
,
Long
adviserId
,
Boolean
isDelete
)
{
this
.
newsFrom
=
newsFrom
;
this
.
wechatName
=
wechatName
;
this
.
adviserId
=
adviserId
;
this
.
isDelete
=
isDelete
;
}
@ApiModelProperty
(
"微信公众号唯一标识"
)
private
String
newsFrom
;
@ApiModelProperty
(
"微信公众号名称"
)
private
String
wechatName
;
@ApiModelProperty
(
"编辑id"
)
private
Long
adviserId
;
@ApiModelProperty
(
"是否删除"
)
private
Boolean
isDelete
;
public
static
long
getSerialVersionUID
()
{
return
serialVersionUID
;
}
public
String
getNewsFrom
()
{
return
newsFrom
;
}
public
void
setNewsFrom
(
String
newsFrom
)
{
this
.
newsFrom
=
newsFrom
;
}
public
String
getWechatName
()
{
return
wechatName
;
}
public
void
setWechatName
(
String
wechatName
)
{
this
.
wechatName
=
wechatName
;
}
public
Long
getAdviserId
()
{
return
adviserId
;
}
public
void
setAdviserId
(
Long
adviserId
)
{
this
.
adviserId
=
adviserId
;
}
public
Boolean
getDelete
()
{
return
isDelete
;
}
public
void
setDelete
(
Boolean
delete
)
{
isDelete
=
delete
;
}
@Override
public
String
toString
()
{
return
"AdNewsWechat{"
+
"newsFrom='"
+
newsFrom
+
'\''
+
", wechatName='"
+
wechatName
+
'\''
+
", adviserId="
+
adviserId
+
", isDelete="
+
isDelete
+
", createTime="
+
createTime
+
", updateTime="
+
updateTime
+
'}'
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/entity/AdNewsWechatChoose.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
/**
* @author zhengyongqiang
* @date 2019/8/7 11:32
*/
@ApiModel
(
"新闻公众号选择关联"
)
public
class
AdNewsWechatChoose
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
209558478794921448L
;
@ApiModelProperty
(
"编辑id"
)
private
Long
adviserId
;
@ApiModelProperty
(
"公众号id"
)
private
Long
adNewsWechatId
;
@ApiModelProperty
(
"是否删除"
)
private
Boolean
isDelete
;
@ApiModelProperty
(
"创建人"
)
private
Long
createUser
;
@ApiModelProperty
(
"修改人"
)
private
Long
updateUser
;
public
Long
getAdviserId
()
{
return
adviserId
;
}
public
void
setAdviserId
(
Long
adviserId
)
{
this
.
adviserId
=
adviserId
;
}
public
Long
getAdNewsWechatId
()
{
return
adNewsWechatId
;
}
public
void
setAdNewsWechatId
(
Long
adNewsWechatId
)
{
this
.
adNewsWechatId
=
adNewsWechatId
;
}
public
Boolean
getDelete
()
{
return
isDelete
;
}
public
void
setDelete
(
Boolean
delete
)
{
isDelete
=
delete
;
}
public
Long
getCreateUser
()
{
return
createUser
;
}
public
void
setCreateUser
(
Long
createUser
)
{
this
.
createUser
=
createUser
;
}
public
Long
getUpdateUser
()
{
return
updateUser
;
}
public
void
setUpdateUser
(
Long
updateUser
)
{
this
.
updateUser
=
updateUser
;
}
@Override
public
String
toString
()
{
return
"AdNewsWechatChoose{"
+
"adviserId="
+
adviserId
+
", adNewsWechatId="
+
adNewsWechatId
+
", isDelete="
+
isDelete
+
", createUser="
+
createUser
+
", updateUser="
+
updateUser
+
", createTime="
+
createTime
+
", updateTime="
+
updateTime
+
'}'
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/enums/AdContentFromEnum.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
enums
;
import
com.pcloud.book.advertising.enums.AdDetailModeEnum
;
import
org.springframework.amqp.rabbit.support.PublisherCallbackChannelImpl
;
/**
* 早晚报内容来源
*
* @author zhengyongqiang
* @date 2019/8/6 17:50
*/
public
enum
AdContentFromEnum
{
WECHAT
(
0
,
"微信公众号"
),
CUSTOM
(
1
,
"自定义内容 "
);
public
final
Integer
key
;
public
final
String
name
;
AdContentFromEnum
(
Integer
key
,
String
name
)
{
this
.
key
=
key
;
this
.
name
=
name
;
}
public
static
String
getNameByKey
(
String
key
)
{
AdContentFromEnum
[]
var1
=
values
();
int
var2
=
var1
.
length
;
for
(
int
var3
=
0
;
var3
<
var2
;
++
var3
)
{
AdContentFromEnum
methodEnum
=
var1
[
var3
];
if
(
methodEnum
.
key
.
equals
(
key
))
{
return
methodEnum
.
name
;
}
}
return
null
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/enums/AdNewsBanEnum.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
enums
;
/**
* 禁止推送/允许推送
* @author zhengyongqiang
* @date 2019/8/12 14:42
*/
public
enum
AdNewsBanEnum
{
NONBAN
(
0
),
// 不禁止推送
BAN
(
1
);
// 禁止推送
public
final
Integer
key
;
AdNewsBanEnum
(
Integer
key
){
this
.
key
=
key
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/enums/AdNewsContentTypeEnum.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
enums
;
import
java.security.Key
;
/**
* 内容类型
*
* @author zhengyongqiang
* @date 2019/8/16 17:25
*/
public
enum
AdNewsContentTypeEnum
{
MORNING
(
0
,
"早报"
),
EVENING
(
1
,
"晚报"
);
public
final
Integer
key
;
public
final
String
description
;
AdNewsContentTypeEnum
(
Integer
key
,
String
description
)
{
this
.
key
=
key
;
this
.
description
=
description
;
}
public
static
String
getDescriptionByKey
(
Integer
key
)
{
AdNewsContentTypeEnum
[]
var1
=
values
();
int
var2
=
var1
.
length
;
for
(
int
var3
=
0
;
var3
<
var2
;
++
var3
)
{
AdNewsContentTypeEnum
methodEnum
=
var1
[
var3
];
if
(
methodEnum
.
key
.
equals
(
key
))
{
return
methodEnum
.
description
;
}
}
return
null
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/enums/AdNewsWechatEnum.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
enums
;
/**
* 公众号状态
* @author zhengyongqiang
* @date 2019/8/7 11:37
*/
public
enum
AdNewsWechatEnum
{
EXAMINING
(
0
),
// 审核中
ENABLE
(
1
);
// 已启用
public
final
Integer
key
;
AdNewsWechatEnum
(
Integer
key
){
this
.
key
=
key
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/facade/AdNewsFacade.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
facade
;
import
com.pcloud.book.adnews.entity.AdNewsClickRecord
;
import
com.pcloud.book.adnews.entity.AdNewsSet
;
import
com.pcloud.book.adnews.dto.AdNewsListParam
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.exceptions.BizException
;
import
com.pcloud.common.permission.PermissionException
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
io.swagger.annotations.*
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@FeignClient
(
value
=
"pcloud-service-book"
,
qualifier
=
"adNewsFacadeCloud"
,
path
=
"adNews"
)
@FeignClient
(
value
=
"pcloud-service-book"
,
qualifier
=
"adNewsFacadeCloud"
,
path
=
"adNews"
)
@Api
(
description
=
"推送群消息外部接口"
)
public
interface
AdNewsFacade
{
@ApiOperation
(
"新增编辑端早晚报设置"
)
@PostMapping
(
"/createAdNewsSet"
)
ResponseDto
<?>
createAdNewsSet
(
...
...
@@ -37,6 +36,7 @@ public interface AdNewsFacade {
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
)
throws
BizException
,
PermissionException
;
@Deprecated
@ApiOperation
(
"编辑添加选择的早晚报素材"
)
@PostMapping
(
"/createAdNewsChooseBatch"
)
ResponseDto
<?>
createAdNewsChooseBatch
(
...
...
@@ -44,6 +44,7 @@ public interface AdNewsFacade {
@RequestBody
@ApiParam
(
"新闻id集合"
)
List
<
Long
>
adNewsIds
)
throws
BizException
,
PermissionException
;
@Deprecated
@ApiOperation
(
"编辑移除选择的早晚报素材"
)
@GetMapping
(
"/deleteAdNewsChoose"
)
ResponseDto
<?>
deleteAdNewsChoose
(
...
...
@@ -51,23 +52,91 @@ public interface AdNewsFacade {
@RequestParam
@ApiParam
(
"adNewsChooseId"
)
Long
adNewsChooseId
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"获取早晚报素材库"
)
@GetMapping
(
"/getAdNewsList"
)
@Deprecated
@ApiOperation
(
"获取编辑选择的早晚报素材库"
)
@GetMapping
(
"/getAdNewsChooseList"
)
ResponseDto
<?>
getAdNewsChooseList
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
@ApiParam
(
"标题"
)
String
title
,
@RequestParam
(
value
=
"hasUsed"
,
required
=
false
)
@ApiParam
(
"标题"
)
Boolean
hasUsed
,
@RequestParam
(
"currentPage"
)
@ApiParam
(
"当前页"
)
Integer
currentPage
,
@RequestParam
(
"numPerPage"
)
@ApiParam
(
"每页条数"
)
Integer
numPerPage
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"早晚报素材库"
)
@PostMapping
(
"/getAdNewsList"
)
ResponseDto
<?>
getAdNewsList
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
@ApiParam
(
"标题"
)
String
title
,
@RequestBody
@ApiParam
(
"查询参数"
)
AdNewsListParam
adNewsListParam
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"禁用/解除禁用"
)
@GetMapping
(
"/saveAdNewsBan"
)
ResponseDto
<?>
saveAdNewsBan
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
"adNewsId"
)
@ApiParam
(
"新闻id"
)
Long
adNewsId
,
@RequestParam
(
"hasBan"
)
@ApiParam
(
"禁止推送"
)
Integer
hasBan
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"添加编辑选择的公众号"
)
@PostMapping
(
"/createAdNewsWechatChooseBatch"
)
ResponseDto
<?>
createAdNewsWechatChooseBatch
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestBody
@ApiParam
(
"选择的公众号主键"
)
List
<
Long
>
adNewsWechatIds
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"移除编辑已选择的公众号"
)
@GetMapping
(
"/deleteAdNewsWechatChoose"
)
ResponseDto
<?>
deleteAdNewsWechatChoose
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"adNewsWechatId"
)
@ApiParam
(
"公众号主键"
)
Long
adNewsWechatId
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"获取编辑已选择的公众号"
)
@GetMapping
(
"/getAdNewsWechatChooseList"
)
ResponseDto
<?>
getAdNewsWechatChooseList
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
"currentPage"
)
@ApiParam
(
"当前页"
)
Integer
currentPage
,
@RequestParam
(
"numPerPage"
)
@ApiParam
(
"每页条数"
)
Integer
numPerPage
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"获取
编辑选择的早晚报素材库
"
)
@GetMapping
(
"/getAdNews
Choose
List"
)
ResponseDto
<?>
getAdNews
Choose
List
(
@ApiOperation
(
"获取
所有的公众号列表
"
)
@GetMapping
(
"/getAdNews
Wechat
List"
)
ResponseDto
<?>
getAdNews
Wechat
List
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
@ApiParam
(
"标题"
)
String
title
,
@RequestParam
(
value
=
"hasUsed"
,
required
=
false
)
@ApiParam
(
"标题"
)
Boolean
hasUsed
,
@RequestParam
(
"currentPage"
)
@ApiParam
(
"当前页"
)
Integer
currentPage
,
@RequestParam
(
"numPerPage"
)
@ApiParam
(
"每页条数"
)
Integer
numPerPage
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"获取早晚报发送记录"
)
@GetMapping
(
"/getAdNewsMessageStatistic"
)
ResponseDto
<?>
getAdNewsMessageStatistic
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
@ApiParam
(
"群名称、群分类、社群码、社群书"
)
String
title
,
@RequestParam
(
value
=
"beginTime"
,
required
=
false
)
@ApiParam
(
"开始日期"
)
String
beginTime
,
@RequestParam
(
value
=
"endTime"
,
required
=
false
)
@ApiParam
(
"结束日期"
)
String
endTime
,
@RequestParam
(
value
=
"proLabelId"
,
required
=
false
)
@ApiParam
(
"专业"
)
Long
proLabelId
,
@RequestParam
(
value
=
"depLabelId"
,
required
=
false
)
@ApiParam
(
"深度"
)
Long
depLabelId
,
@RequestParam
(
value
=
"purLabelId"
,
required
=
false
)
@ApiParam
(
"目的"
)
Long
purLabelId
,
@RequestParam
(
value
=
"currentPage"
,
required
=
false
,
defaultValue
=
"0"
)
@ApiParam
(
"当前页"
)
Integer
currentPage
,
@RequestParam
(
value
=
"numPerPage"
,
required
=
false
,
defaultValue
=
"10"
)
@ApiParam
(
"每页条数"
)
Integer
numPerPage
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"查询早晚报发送详情"
)
@GetMapping
(
"/getAdNewsGroupRecord"
)
ResponseDto
<?>
getAdNewsGroupRecord
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
"messageStatisticId"
)
@ApiParam
(
"统计表id"
)
Long
messageStatisticId
)
throws
BizException
,
PermissionException
;
@ApiOperation
(
"记录用户点击量"
)
@PostMapping
(
"/addAdNewsClickRecord"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"userInfo"
,
value
=
"Cookie"
,
dataType
=
"String"
,
paramType
=
"header"
),
@ApiImplicitParam
(
name
=
"adNewsClickRecord"
,
value
=
"用户点击量对象"
,
dataType
=
"AdNewsClickRecord"
,
paramType
=
"body"
)})
ResponseDto
<?>
addAdNewsClickRecord
(
@CookieValue
(
"userInfo"
)
@ApiParam
(
"用户信息"
)
String
userInfo
,
@RequestBody
@ApiParam
(
"用户点击量对象"
)
AdNewsClickRecord
adNewsClickRecord
)
throws
BizException
,
PermissionException
;
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/facade/impl/AdNewsFacadeImpl.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
facade
.
impl
;
import
com.pcloud.book.adnews.biz.AdNewsBiz
;
import
com.pcloud.book.adnews.entity.AdNewsClickRecord
;
import
com.pcloud.book.adnews.entity.AdNewsSet
;
import
com.pcloud.book.adnews.entity.AdNewsWechat
;
import
com.pcloud.book.adnews.facade.AdNewsFacade
;
import
com.pcloud.book.adnews.dto.AdNewsListParam
;
import
com.pcloud.book.base.exception.BookBizException
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.exceptions.BizException
;
import
com.pcloud.common.permission.PermissionException
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.NumberUtil
;
import
com.pcloud.common.utils.SessionUtil
;
import
com.pcloud.common.utils.cookie.Cookie
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
import
java.util.Map
;
/**
* @Description
...
...
@@ -25,6 +33,7 @@ import java.util.List;
@RequestMapping
(
"adNews"
)
public
class
AdNewsFacadeImpl
implements
AdNewsFacade
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
AdNewsFacadeImpl
.
class
);
@Autowired
private
AdNewsBiz
adNewsBiz
;
...
...
@@ -83,10 +92,10 @@ public class AdNewsFacadeImpl implements AdNewsFacade {
@RequestBody
@ApiParam
(
"新闻id集合"
)
List
<
Long
>
adNewsIds
)
throws
BizException
,
PermissionException
{
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
if
(
ListUtils
.
isEmpty
(
adNewsIds
)){
if
(
ListUtils
.
isEmpty
(
adNewsIds
))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数错误"
);
}
adNewsBiz
.
createAdNewsChooseBatch
(
adNewsIds
,
partyId
);
adNewsBiz
.
createAdNewsChooseBatch
(
adNewsIds
,
partyId
);
return
new
ResponseDto
<>();
}
...
...
@@ -105,12 +114,92 @@ public class AdNewsFacadeImpl implements AdNewsFacade {
return
new
ResponseDto
<>();
}
@ApiOperation
(
"获取早晚报素材库"
)
@GetMapping
(
"/getAdNewsList"
)
@ApiOperation
(
"获取编辑选择的早晚报素材库"
)
@GetMapping
(
"/getAdNewsChooseList"
)
@Override
public
ResponseDto
<?>
getAdNewsChooseList
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
@ApiParam
(
"标题"
)
String
title
,
@RequestParam
(
value
=
"hasUsed"
,
required
=
false
)
@ApiParam
(
"使用状态"
)
Boolean
hasUsed
,
@RequestParam
(
"currentPage"
)
@ApiParam
(
"当前页"
)
Integer
currentPage
,
@RequestParam
(
"numPerPage"
)
@ApiParam
(
"每页条数"
)
Integer
numPerPage
)
throws
BizException
,
PermissionException
{
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
if
(
currentPage
==
null
||
currentPage
<
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"当前页不能为空且不能小于0!"
);
}
if
(
numPerPage
==
null
||
numPerPage
<=
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"每页条数不能为空且必须大于0!"
);
}
return
new
ResponseDto
<>(
adNewsBiz
.
getAdNewsChooseList
(
partyId
,
title
,
hasUsed
,
currentPage
,
numPerPage
));
}
@ApiOperation
(
"早晚报素材库"
)
@PostMapping
(
"/getAdNewsList"
)
@Override
public
ResponseDto
<?>
getAdNewsList
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
@ApiParam
(
"标题"
)
String
title
,
@RequestBody
@ApiParam
(
"查询参数"
)
AdNewsListParam
adNewsListParam
)
throws
BizException
,
PermissionException
{
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
if
(
adNewsListParam
.
getCurrentPage
()
==
null
||
adNewsListParam
.
getCurrentPage
()
<
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"当前页不能为空且不能小于0!"
);
}
if
(
adNewsListParam
.
getNumPerPage
()
==
null
||
adNewsListParam
.
getNumPerPage
()
<=
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"每页条数不能为空且必须大于0!"
);
}
adNewsListParam
.
setPartyId
(
partyId
);
return
new
ResponseDto
<>(
adNewsBiz
.
getAdNewsList
(
adNewsListParam
));
}
@Override
@ApiOperation
(
"禁用/解除禁用"
)
@GetMapping
(
"/saveAdNewsBan"
)
public
ResponseDto
<?>
saveAdNewsBan
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
"adNewsId"
)
@ApiParam
(
"新闻id"
)
Long
adNewsId
,
@RequestParam
(
"hasBan"
)
@ApiParam
(
"禁止推送"
)
Integer
hasBan
)
throws
BizException
,
PermissionException
{
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
if
(!
NumberUtil
.
isNumber
(
adNewsId
))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"adNewsId 不能小于0!"
);
}
if
(!
NumberUtil
.
isNumber
(
hasBan
))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"hasBan 必须大于0!"
);
}
adNewsBiz
.
saveAdNewsBan
(
partyId
,
adNewsId
,
hasBan
);
return
new
ResponseDto
<>();
}
@ApiOperation
(
"添加编辑选择的公众号"
)
@PostMapping
(
"/createAdNewsWechatChooseBatch"
)
@Override
public
ResponseDto
<?>
createAdNewsWechatChooseBatch
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestBody
@ApiParam
(
"选择的公众号主键"
)
List
<
Long
>
adNewsWechatIds
)
throws
BizException
,
PermissionException
{
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
adNewsBiz
.
createAdNewsWechatChooseBatch
(
adNewsWechatIds
,
partyId
);
return
new
ResponseDto
<>();
}
@Override
@ApiOperation
(
"移除编辑已选择的公众号"
)
@GetMapping
(
"/deleteAdNewsWechatChoose"
)
public
ResponseDto
<?>
deleteAdNewsWechatChoose
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"adNewsWechatId"
)
@ApiParam
(
"公众号主键"
)
Long
adNewsWechatId
)
throws
BizException
,
PermissionException
{
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
adNewsBiz
.
deleteAdNewsWechatChoose
(
adNewsWechatId
,
partyId
);
return
new
ResponseDto
<>();
}
@Override
@ApiOperation
(
"获取编辑已选择的公众号"
)
@GetMapping
(
"/getAdNewsWechatChooseList"
)
public
ResponseDto
<?>
getAdNewsWechatChooseList
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
"currentPage"
)
@ApiParam
(
"当前页"
)
Integer
currentPage
,
@RequestParam
(
"numPerPage"
)
@ApiParam
(
"每页条数"
)
Integer
numPerPage
)
throws
BizException
,
PermissionException
{
...
...
@@ -121,16 +210,14 @@ public class AdNewsFacadeImpl implements AdNewsFacade {
if
(
numPerPage
==
null
||
numPerPage
<=
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"每页条数不能为空且必须大于0!"
);
}
return
new
ResponseDto
<>(
adNewsBiz
.
getAdNews
List
(
title
,
partyId
,
currentPage
,
numPerPage
));
return
new
ResponseDto
<>(
adNewsBiz
.
getAdNews
WechatChooseList
(
partyId
,
currentPage
,
numPerPage
));
}
@ApiOperation
(
"获取编辑选择的早晚报素材库"
)
@GetMapping
(
"/getAdNewsChooseList"
)
@Override
public
ResponseDto
<?>
getAdNewsChooseList
(
@ApiOperation
(
"获取所有的公众号列表"
)
@GetMapping
(
"/getAdNewsWechatList"
)
public
ResponseDto
<?>
getAdNewsWechatList
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
@ApiParam
(
"标题"
)
String
title
,
@RequestParam
(
value
=
"hasUsed"
,
required
=
false
)
@ApiParam
(
"使用状态"
)
Boolean
hasUsed
,
@RequestParam
(
"currentPage"
)
@ApiParam
(
"当前页"
)
Integer
currentPage
,
@RequestParam
(
"numPerPage"
)
@ApiParam
(
"每页条数"
)
Integer
numPerPage
)
throws
BizException
,
PermissionException
{
...
...
@@ -141,8 +228,58 @@ public class AdNewsFacadeImpl implements AdNewsFacade {
if
(
numPerPage
==
null
||
numPerPage
<=
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"每页条数不能为空且必须大于0!"
);
}
return
new
ResponseDto
<>(
adNewsBiz
.
getAdNewsChooseList
(
partyId
,
title
,
hasUsed
,
currentPage
,
numPerPage
));
return
new
ResponseDto
<>(
adNewsBiz
.
getAdNewsWechatList
(
currentPage
,
numPerPage
));
}
@Override
@ApiOperation
(
"获取早晚报发送记录"
)
@GetMapping
(
"/getAdNewsMessageStatistic"
)
public
ResponseDto
<?>
getAdNewsMessageStatistic
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
value
=
"title"
,
required
=
false
)
@ApiParam
(
"群名称、群分类、社群码、社群书"
)
String
title
,
@RequestParam
(
value
=
"beginTime"
,
required
=
false
)
@ApiParam
(
"开始日期"
)
String
beginTime
,
@RequestParam
(
value
=
"endTime"
,
required
=
false
)
@ApiParam
(
"结束日期"
)
String
endTime
,
@RequestParam
(
value
=
"proLabelId"
,
required
=
false
)
@ApiParam
(
"专业"
)
Long
proLabelId
,
@RequestParam
(
value
=
"depLabelId"
,
required
=
false
)
@ApiParam
(
"深度"
)
Long
depLabelId
,
@RequestParam
(
value
=
"purLabelId"
,
required
=
false
)
@ApiParam
(
"目的"
)
Long
purLabelId
,
@RequestParam
(
value
=
"currentPage"
,
required
=
false
,
defaultValue
=
"0"
)
@ApiParam
(
"当前页"
)
Integer
currentPage
,
@RequestParam
(
value
=
"numPerPage"
,
required
=
false
,
defaultValue
=
"10"
)
@ApiParam
(
"每页条数"
)
Integer
numPerPage
)
throws
BizException
,
PermissionException
{
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
if
(
currentPage
==
null
||
currentPage
<
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"当前页不能为空且不能小于0!"
);
}
if
(
numPerPage
==
null
||
numPerPage
<=
0
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"每页条数不能为空且必须大于0!"
);
}
return
new
ResponseDto
<>(
adNewsBiz
.
getAdNewsMessageStatistic
(
partyId
,
title
,
beginTime
,
endTime
,
proLabelId
,
depLabelId
,
purLabelId
,
currentPage
,
numPerPage
));
}
@Override
@ApiOperation
(
"查询早晚报发送详情"
)
@GetMapping
(
"/getAdNewsGroupRecord"
)
public
ResponseDto
<?>
getAdNewsGroupRecord
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestParam
(
"messageStatisticId"
)
@ApiParam
(
"统计表id"
)
Long
messageStatisticId
)
throws
BizException
,
PermissionException
{
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
return
new
ResponseDto
<>(
adNewsBiz
.
getAdNewsGroupRecord
(
partyId
,
messageStatisticId
));
}
@Override
@ApiOperation
(
"记录用户点击量"
)
@PostMapping
(
"/addAdNewsClickRecord"
)
public
ResponseDto
<?>
addAdNewsClickRecord
(
@CookieValue
(
"userInfo"
)
@ApiParam
(
"用户信息"
)
String
userInfo
,
@RequestBody
@ApiParam
(
"用户点击量对象"
)
AdNewsClickRecord
adNewsClickRecord
)
throws
BizException
,
PermissionException
{
Map
<
String
,
Object
>
map
=
Cookie
.
getUserInfo
(
userInfo
);
Long
channelId
=
(
Long
)
map
.
get
(
Cookie
.
_CHANNEL_ID
);
Long
wechatUserId
=
(
Long
)
map
.
get
(
Cookie
.
_WECHAT_USER_ID
);
LOGGER
.
info
(
"addAdNewsClickRecord Map => "
+
map
.
toString
());
adNewsClickRecord
.
setWechatUserId
(
wechatUserId
);
return
new
ResponseDto
<>(
adNewsBiz
.
addAdNewsClickRecord
(
adNewsClickRecord
));
}
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/vo/AdNewsGroupRecordVO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author zhengyongqiang
* @date 2019/8/14 14:41
*/
@ApiModel
@Data
public
class
AdNewsGroupRecordVO
{
@ApiModelProperty
(
"主键id"
)
private
Long
id
;
@ApiModelProperty
(
"新闻id"
)
private
Long
adNewsId
;
@ApiModelProperty
(
"公众号名称"
)
private
String
wechatName
;
@ApiModelProperty
(
"新闻标题"
)
private
String
title
;
@ApiModelProperty
(
"新闻短链接"
)
private
String
shortUrl
;
@ApiModelProperty
(
"自定义早晚报内容"
)
private
String
customContent
;
@ApiModelProperty
(
"内容类型,0:早报;1:晚报"
)
private
Integer
contentType
;
}
pcloud-service-book/src/main/java/com/pcloud/book/adnews/vo/AdNewsMessageStatisticVO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
adnews
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
java.util.Date
;
/**
* @author zhengyongqiang
* @date 2019/8/14 10:43
*/
@Data
public
class
AdNewsMessageStatisticVO
{
@ApiModelProperty
(
"主键id"
)
private
Long
id
;
@ApiModelProperty
(
"微信群名称"
)
private
String
groupName
;
@ApiModelProperty
(
"分类"
)
private
String
classify
;
@ApiModelProperty
(
"社群码名称"
)
private
String
groupQrcodeName
;
@ApiModelProperty
(
"社群书名称"
)
private
String
bookName
;
@ApiModelProperty
(
"专业"
)
private
String
depLabelName
;
@ApiModelProperty
(
"深度"
)
private
String
proLabelName
;
@ApiModelProperty
(
"目的"
)
private
String
purLabelName
;
@ApiModelProperty
(
"专业Id"
)
private
Long
depLabelId
;
@ApiModelProperty
(
"深度Id"
)
private
Long
proLabelId
;
@ApiModelProperty
(
"目的Id"
)
private
Long
purLabelId
;
@ApiModelProperty
(
"内容来源"
)
private
Integer
contentFrom
;
@ApiModelProperty
(
"发送消息数"
)
private
Integer
messageCount
;
@ApiModelProperty
(
"发送时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
createTime
;
@ApiModelProperty
(
"点击次数"
)
private
Long
clickCount
;
@ApiModelProperty
(
"点击人数"
)
private
Long
userCount
;
}
pcloud-service-book/src/main/java/com/pcloud/book/advertising/biz/impl/AdvertisingSpaceBizImpl.java
View file @
ff1648f3
...
...
@@ -758,7 +758,7 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
}
}
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setGroupId
(
groupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
groupId
);
sendTextMessageVO
.
setAltId
(
altId
);
sendTextMessageVO
.
setContent
(
adTitle
);
sendTextMessageVO
.
setIp
(
findIp
(
groupId
));
...
...
@@ -769,7 +769,7 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
sendArticleMessageVO
.
setAltId
(
altId
);
sendArticleMessageVO
.
setTitle
(
advertisingSpace
.
getAdTitle
());
sendArticleMessageVO
.
setDescription
(
advertisingSpace
.
getAdSlogan
());
sendArticleMessageVO
.
setGroupId
(
groupId
);
sendArticleMessageVO
.
set
Wx
GroupId
(
groupId
);
String
adLink
=
""
;
if
(!
StringUtil
.
isEmpty
(
advertisingSpace
.
getAdLink
()))
{
if
(
advertisingSpace
.
getAdLink
().
contains
(
"?"
))
{
...
...
@@ -791,7 +791,7 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
}
else
if
(
AdPositionModeEnum
.
JUST_PIC
.
modeCode
.
equals
(
advertisingSpace
.
getAdPositionMode
()))
{
SendPicMessageVO
sendPicMessageVO
=
new
SendPicMessageVO
();
sendPicMessageVO
.
setAltId
(
altId
);
sendPicMessageVO
.
setGroupId
(
groupId
);
sendPicMessageVO
.
set
Wx
GroupId
(
groupId
);
sendPicMessageVO
.
setPicUrl
(
advertisingSpace
.
getAdPic
());
sendPicMessageVO
.
setIp
(
findIp
(
groupId
));
LOGGER
.
info
(
"发送微信消息-纯图片"
+
sendPicMessageVO
.
toString
());
...
...
pcloud-service-book/src/main/java/com/pcloud/book/book/set/BookSet.java
View file @
ff1648f3
...
...
@@ -1317,8 +1317,10 @@ public class BookSet {
Map
<
Long
,
Long
>
bookIdsMap
=
new
HashMap
<>();
for
(
Object
object
:
bookList
)
{
BookDto
bookDto
=
(
BookDto
)
object
;
if
(
bookDto
!=
null
&&
bookDto
.
getBookId
()
!=
null
)
{
bookIdsMap
.
put
(
bookDto
.
getBookId
(),
bookDto
.
getBookId
());
}
}
List
<
Long
>
bookIds
=
Lists
.
newArrayList
(
bookIdsMap
.
values
());
if
(
CollectionUtils
.
isEmpty
(
bookIds
))
{
return
;
...
...
pcloud-service-book/src/main/java/com/pcloud/book/clock/biz/impl/BookClockBizImpl.java
View file @
ff1648f3
...
...
@@ -377,7 +377,7 @@ public class BookClockBizImpl implements BookClockBiz {
//获取机器人微信号
String
altId
=
wechatGroupConsr
.
getRobotIdByGroupId
(
weixinGroupId
);
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setGroupId
(
weixinGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendTextMessageVO
.
setAltId
(
altId
);
sendTextMessageVO
.
setContent
(
bookClockInfoDTO
.
getNoticeContent
());
if
(!
MapUtils
.
isEmpty
(
wxQrcodeDTOMap
)
&&
wxQrcodeDTOMap
.
containsKey
(
weixinGroupId
)){
...
...
pcloud-service-book/src/main/java/com/pcloud/book/consumer/wechatgroup/WechatGroupConsr.java
View file @
ff1648f3
...
...
@@ -15,7 +15,10 @@ import com.pcloud.wechatgroup.group.service.GroupMemberService;
import
com.pcloud.wechatgroup.message.dto.GroupChatCountDTO
;
import
com.pcloud.wechatgroup.message.service.MessageService
;
import
com.pcloud.wechatgroup.monitor.service.MonitorService
;
import
com.pcloud.wechatgroup.selfrobot.service.SelfRobotService
;
import
com.pcloud.wechatgroup.selfrobot.dto.SelfRobotDTO
;
import
com.pcloud.wechatgroup.selfrobot.service.SelfRobotService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.stereotype.Component
;
...
...
@@ -38,6 +41,44 @@ public class WechatGroupConsr {
private
MessageService
messageService
;
@Autowired
private
MonitorService
monitorService
;
@Autowired
private
SelfRobotService
selfRobotService
;
@ParamLog
(
"根据机器人id和用户微信id获取最新暗号"
)
public
String
getCipherByRobotAndUserWxId
(
String
robotWxId
,
String
userWxId
)
{
if
(
StringUtil
.
isBlank
(
robotWxId
)
||
StringUtil
.
isBlank
(
userWxId
))
{
return
null
;
}
try
{
return
ResponseHandleUtil
.
parseResponse
(
selfRobotService
.
getCipherByRobotAndUserWxId
(
robotWxId
,
userWxId
),
String
.
class
);
}
catch
(
BizException
e
)
{
log
.
warn
(
"根据机器人id和用户微信id获取最新暗号失败:"
+
e
.
getMessage
(),
e
);
throw
new
BizException
(
e
.
getCode
(),
e
.
getMessage
());
}
catch
(
Exception
e
)
{
log
.
error
(
"根据机器人id和用户微信id获取最新暗号.[getCipherByRobotAndUserWxId]:"
+
e
.
getMessage
(),
e
);
throw
new
BookBizException
(
BookBizException
.
INVOKE_RES_ERROR
,
"服务内部错误,请稍后重试"
);
}
finally
{
log
.
info
(
"【根据机器人id和用户微信id获取最新暗号,<END>"
);
}
}
@ParamLog
(
"是否群机器人"
)
public
Boolean
isGroupRobot
(
String
robotWxId
)
{
if
(
StringUtil
.
isBlank
(
robotWxId
))
{
return
null
;
}
try
{
return
ResponseHandleUtil
.
parseResponse
(
selfRobotService
.
isGroupRobot
(
robotWxId
),
Boolean
.
class
);
}
catch
(
BizException
e
)
{
log
.
warn
(
"是否群机器人失败:"
+
e
.
getMessage
(),
e
);
throw
new
BizException
(
e
.
getCode
(),
e
.
getMessage
());
}
catch
(
Exception
e
)
{
log
.
error
(
"是否群机器人.[isGroupRobot]:"
+
e
.
getMessage
(),
e
);
throw
new
BookBizException
(
BookBizException
.
INVOKE_RES_ERROR
,
"服务内部错误,请稍后重试"
);
}
finally
{
log
.
info
(
"【是否群机器人,<END>"
);
}
}
/**
* 是否黑名单
...
...
@@ -271,6 +312,16 @@ public class WechatGroupConsr {
return
map
;
}
@ParamLog
(
value
=
"获取可用机器人"
)
public
SelfRobotDTO
getAvailableRobot
(
Long
wechatUserId
,
Integer
largeTemplet
,
Long
classifyId
)
{
SelfRobotDTO
selfRobotDTO
=
null
;
try
{
selfRobotDTO
=
ResponseHandleUtil
.
parseResponse
(
selfRobotService
.
getAvailableRobot
(
wechatUserId
,
largeTemplet
,
classifyId
),
SelfRobotDTO
.
class
);
}
catch
(
Exception
e
)
{
log
.
error
(
"获取可用机器人.[getAvailableRobot]:"
+
e
.
getMessage
(),
e
);
}
return
selfRobotDTO
;
}
@ParamLog
(
"根据用户微信ID获取用户信息"
)
public
GroupUserDTO
getWxUserInfoByWxUserId
(
String
wxUserId
)
{
GroupUserDTO
dto
=
new
GroupUserDTO
();
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/biz/BookGroupBiz.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
biz
;
import
com.pcloud.book.book.dto.BookDto
;
import
com.pcloud.book.group.dto.*
;
import
com.pcloud.book.group.dto.AppStatisticsDTO
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
import
com.pcloud.book.group.dto.ClassifyKeywordDTO
;
import
com.pcloud.book.group.dto.GroupStoreMyPayDto
;
import
com.pcloud.book.group.dto.QrcodeNameAndProIdDTO
;
import
com.pcloud.book.group.entity.BookGroup
;
import
com.pcloud.book.group.vo.*
;
import
com.pcloud.book.group.vo.StatisticVO
;
import
com.pcloud.common.dto.StoreFlowInfoDto
;
...
...
@@ -207,6 +207,13 @@ public interface BookGroupBiz {
BookGroupDTO
getBaseInfoBySceneId
(
Long
sceneId
);
/**
* @description 更新个人二维码
* @author 戴兴
* @date 2019/8/7 16:30
*/
void
updatePersonQrcode
(
PersonalQrcodeDTO
personalQrcodeDTO
);
/**
* @Author:lili
* @Desr:是否是特殊的出版社
* @Date:2019/5/28 11:14
...
...
@@ -256,6 +263,42 @@ public interface BookGroupBiz {
* 获取是否显示书名
*/
Boolean
getIsShowBookName
(
Long
partyId
);
/**
* 根据分类id获取个人二维码信息
*/
OwnAltQrcodeInfoDTO
getOwnAltQrcodeInfoDTOByClassifyId
(
Long
wechatUserId
,
Long
classifyId
);
/**
* 获取暗号状态
*/
Integer
getCipherState
(
String
cipher
);
/**
* 更新状态为已使用
*/
void
updateCipherStateToUsed
(
String
cipher
,
String
wxId
);
/**
* 获取个人二维码方式群已使用和未使用数量
*/
GroupUseDTO
getGroupUse
(
List
<
String
>
altIds
);
/**
* 获取所有的大类分类
*/
List
<
LargeTempletDTO
>
getAllLargTemplet
();
/**
* 根据微信id和机器人id获取分类集合
*/
List
<
JoinGroupCipherDTO
>
getClassifyIdsByWxIdAndAltId
(
String
wxId
,
String
altId
);
/**
* 获取暗号基本信息
*/
GroupCipherDTO
getJoinGroupCipher
(
String
cipher
);
/**
* 为信息流批量获取社群书基本信息
*/
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/biz/BookGroupClassifyBiz.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
biz
;
import
com.pcloud.book.group.dto.*
;
import
com.pcloud.book.group.dto.BookGroupStatisticDTO
;
import
com.pcloud.book.group.dto.ClassifyDTO
;
import
com.pcloud.book.group.dto.ClassifyLearningReportDto
;
import
com.pcloud.book.group.dto.GroupClassifyQrcodeDTO
;
import
com.pcloud.book.group.dto.GroupNameAndMaxSeqDTO
;
import
com.pcloud.book.group.dto.GroupQrcodeBaseDTO
;
import
com.pcloud.book.group.dto.ProAssocGroupAndUserNumberDTO
;
import
com.pcloud.book.group.entity.BookGroupClassify
;
import
com.pcloud.book.group.vo.*
;
import
com.pcloud.book.group.vo.AddClassifyVO
;
import
com.pcloud.book.group.vo.AdviserClassifyParam
;
import
com.pcloud.book.group.vo.AdviserClassifyVO
;
import
com.pcloud.book.group.vo.BookGroupClassifyVO
;
import
com.pcloud.book.group.vo.BookGroupQrcodeStatisticVO
;
import
com.pcloud.book.group.vo.ClassifyAndGroupCountVO
;
import
com.pcloud.book.group.vo.ClassifyAndUserCountVO
;
import
com.pcloud.book.group.vo.ClassifyNameVO
;
import
com.pcloud.book.group.vo.ClassifyVO
;
import
com.pcloud.book.group.vo.GroupQrcode4ClassifyVO
;
import
com.pcloud.book.group.vo.ListBookGroupQrcodeParamVO
;
import
com.pcloud.book.group.vo.ListClassify4WechatVO
;
import
com.pcloud.book.group.vo.ListClassifyVO
;
import
com.pcloud.book.group.vo.ListGroupClassifyParam
;
import
com.pcloud.book.group.vo.StatisticVO
;
import
com.pcloud.book.group.vo.UpdateClassifyVO
;
import
com.pcloud.book.group.vo.UpdateRankVO
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.page.PageParam
;
import
java.math.BigDecimal
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -106,6 +129,11 @@ public interface BookGroupClassifyBiz {
List
<
ListClassify4WechatVO
>
listClassify4Wechat
(
Long
bookGroupId
,
Long
wechatUserId
);
/**
* 批量获取分类信息
*/
List
<
GroupClassifyQrcodeDTO
>
listClassifyQrcodeInfo
(
List
<
Long
>
classifyIds
);
/**
* @Author:lili
* @Desr:客户端根据群分类获取二维码
* @Date:2019/4/29 17:21
...
...
@@ -113,6 +141,11 @@ public interface BookGroupClassifyBiz {
GroupQrcode4ClassifyVO
getGroupQrcode4ClassifyWechat
(
Long
classifyId
,
Long
wechatUserId
);
/**
* 用户获取具体进群id
*/
String
getWxGroupIdByClassifyIdAndWechatId
(
Long
classifyId
,
Long
wechatUserId
);
/**
* @Author:lili
* @Desr:获取编辑所有的分类
* @Date:2019/4/30 15:33
...
...
@@ -180,6 +213,14 @@ public interface BookGroupClassifyBiz {
PageBeanNew
<
ClassifyLearningReportDto
>
listClassifyForLearningReport
(
Integer
currentPage
,
Integer
numPerPage
,
String
keyword
,
Long
partyId
);
/**
* 用户支付金额
* @param qrcodeId
* @param wxId
* @return
*/
public
BigDecimal
getPayPrice
(
Long
qrcodeId
,
String
wxId
);
/**
* 拖动排序
*/
void
dragSortClassify
(
List
<
Long
>
classifyIds
);
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/biz/WeixinQrcodeBiz.java
View file @
ff1648f3
...
...
@@ -22,7 +22,7 @@ public interface WeixinQrcodeBiz {
* @Desr:从二维码获取一个二维码
* @Date:2019/4/17 16:17
*/
WeixinQrcodeDTO
getOneQrcode
();
WeixinQrcodeDTO
getOneQrcode
(
Integer
generation
);
/**
* @Author:lili
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/biz/impl/BookGroupBizImpl.java
View file @
ff1648f3
...
...
@@ -20,18 +20,21 @@ import com.pcloud.book.consumer.resource.ProductConsr;
import
com.pcloud.book.consumer.settlement.SettlementConsr
;
import
com.pcloud.book.consumer.trade.TradeConsr
;
import
com.pcloud.book.consumer.user.AdviserConsr
;
import
com.pcloud.book.consumer.wechatgroup.WechatGroupConsr
;
import
com.pcloud.book.group.biz.BookGroupBiz
;
import
com.pcloud.book.group.biz.BookGroupClassifyBiz
;
import
com.pcloud.book.group.dao.*
;
import
com.pcloud.book.group.dto.*
;
import
com.pcloud.book.group.entity.BookGroup
;
import
com.pcloud.book.group.entity.JoinGroupCipher
;
import
com.pcloud.book.group.entity.TempletRelevance
;
import
com.pcloud.book.group.enums.LargTempletEnum
;
import
com.pcloud.book.group.vo.StatisticVO
;
import
com.pcloud.book.group.dao.AppClickRecordDao
;
import
com.pcloud.book.group.dao.AppTouchRecordDao
;
import
com.pcloud.book.group.dao.BookGroupClassifyDao
;
import
com.pcloud.book.group.dao.BookGroupDao
;
import
com.pcloud.book.group.dto.AppStatisticsDTO
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
import
com.pcloud.book.group.dto.BookGroupStatisticDTO
;
import
com.pcloud.book.group.dto.ClassifyKeywordDTO
;
import
com.pcloud.book.group.dto.GroupStoreMyPayDto
;
import
com.pcloud.book.group.dto.QrcodeNameAndProIdDTO
;
import
com.pcloud.book.group.dto.*
;
import
com.pcloud.book.group.entity.BookGroup
;
import
com.pcloud.book.group.vo.*
;
import
com.pcloud.book.keywords.dao.BookKeywordDao
;
...
...
@@ -53,10 +56,7 @@ import com.pcloud.common.exceptions.BizException;
import
com.pcloud.common.page.PageBean
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.page.PageParam
;
import
com.pcloud.common.utils.DateUtils
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.QrcodeUtils
;
import
com.pcloud.common.utils.ResponseHandleUtil
;
import
com.pcloud.common.utils.*
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.common.utils.zip.CompressUtils
;
import
com.pcloud.facade.tradecenter.dto.GroupMoneyDto
;
...
...
@@ -73,11 +73,11 @@ import com.pcloud.resourcecenter.product.dto.UpdateAppProductParamDTO;
import
com.pcloud.resourcecenter.product.entity.Product
;
import
com.pcloud.resourcecenter.product.service.ProductService
;
import
com.pcloud.resourcecenter.store.constants.StoreCons
;
import
com.pcloud.settlementcenter.record.dto.GroupRescourceIncomeParamDTO
;
import
com.pcloud.settlementcenter.record.service.SettlementService
;
import
com.pcloud.videolesson.schedule.service.ScheduleService
;
import
com.pcloud.wechatgroup.group.service.GroupMemberService
;
import
com.pcloud.wechatgroup.selfrobot.dto.SelfRobotDTO
;
import
org.apache.commons.collections.MapUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
...
...
@@ -86,6 +86,7 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
...
...
@@ -161,6 +162,14 @@ public class BookGroupBizImpl implements BookGroupBiz {
private
TimeTableService
timeTableService
;
@Autowired
private
AppPriceCacheService
appPriceCacheService
;
@Autowired
private
TempletRelevanceDao
templetRelevanceDao
;
@Autowired
private
JoinGroupCipherDao
joinGroupCipherDao
;
@Autowired
private
WechatGroupConsr
wechatGroupConsr
;
@Autowired
private
WeixinQrcodeDao
weixinQrcodeDao
;
@Override
...
...
@@ -374,7 +383,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
public
void
updateBookGroup
(
BookGroup
bookGroup
)
throws
BizException
{
if
(
null
==
bookGroup
.
getId
()
||
StringUtil
.
isEmpty
(
bookGroup
.
getGroupQrcodeName
())
||
null
==
bookGroup
.
getProLabelId
()
||
null
==
bookGroup
.
getDepLabelId
()
||
null
==
bookGroup
.
getPurLabelId
()
||
StringUtil
.
isEmpty
(
bookGroup
.
getJoinTitle
())
||
StringUtil
.
isEmpty
(
bookGroup
.
getJoinSlogan
())
||
StringUtil
.
isEmpty
(
bookGroup
.
getPersonalQrcodeUrl
())
)
{
||
StringUtil
.
isEmpty
(
bookGroup
.
getJoinSlogan
())
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数有误!"
);
}
BookGroup
group
=
bookGroupDao
.
getById
(
bookGroup
.
getId
());
...
...
@@ -636,6 +645,15 @@ public class BookGroupBizImpl implements BookGroupBiz {
}
@Override
public
void
updatePersonQrcode
(
PersonalQrcodeDTO
personalQrcodeDTO
)
{
if
(
personalQrcodeDTO
==
null
||
personalQrcodeDTO
.
getNewQrcodeUrl
()
==
null
||
personalQrcodeDTO
.
getOldQrcodeUrl
()
==
null
){
throw
new
BookBizException
(
BookBizException
.
ERROR
,
"参数缺失"
);
}
bookGroupDao
.
updatePersonQrcode
(
personalQrcodeDTO
);
}
@Override
@ParamLog
(
"是否是特殊的出版社"
)
public
Boolean
isSpecialAgent
(
Long
agentId
)
{
return
bookGroupDao
.
isSpecialAgent
(
agentId
);
...
...
@@ -841,6 +859,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
wechatGroupDtoP
.
setType
(
"PRODUCT"
);
wechatGroupDtoP
.
setQrcodeId
(
qrcodeId
);
Map
<
Long
,
GroupMoneyDto
>
productSaleMap
=
tradeConsr
.
getQrGroupSaleMoney
(
wechatGroupDtoP
);
Map
<
Long
,
BigDecimal
>
productIncomeMap
=
settlementConsr
.
getAdviserIncomeByCondition
(
valProductIds
,
"PRODUCT"
,
partyId
,
qrcodeId
,
bookGroupId
);
SpeWechatGroupDto
speWechatGroupDto
=
new
SpeWechatGroupDto
();
speWechatGroupDto
.
setBookGroupId
(
bookGroupId
);
speWechatGroupDto
.
setPartyId
(
partyId
);
...
...
@@ -852,10 +871,11 @@ public class BookGroupBizImpl implements BookGroupBiz {
speWechatGroupDto
.
setProductIdMap
(
map
);
Map
<
Long
,
GroupMoneyDto
>
forBuyCountMap
=
tradeConsr
.
getSpeQrGroupSaleMoney
(
speWechatGroupDto
);
Map
<
Long
,
Double
>
proSaleMap
=
new
HashMap
<>();
Map
<
Long
,
Double
>
proIncomeMap
=
new
HashMap
<>();
if
(
productSaleMap
.
values
()
!=
null
&&
!
productSaleMap
.
values
().
isEmpty
())
{
dealSale
(
videoProductIds
,
videoPProductMapIds
,
productSaleMap
,
proSaleMap
);
dealSale
(
audioProductIds
,
audioPProductMapIds
,
productSaleMap
,
proSaleMap
);
dealSale
(
liveProductIds
,
livePProductMapIds
,
productSaleMap
,
proSaleMap
);
dealSale
(
videoProductIds
,
videoPProductMapIds
,
productSaleMap
,
proSaleMap
,
productIncomeMap
,
proIncomeMap
);
dealSale
(
audioProductIds
,
audioPProductMapIds
,
productSaleMap
,
proSaleMap
,
productIncomeMap
,
proIncomeMap
);
dealSale
(
liveProductIds
,
livePProductMapIds
,
productSaleMap
,
proSaleMap
,
productIncomeMap
,
proIncomeMap
);
for
(
AppStatisticsDTO
appStatisticsDTO
:
appStatisticsDTOS
)
{
Long
id
=
appStatisticsDTO
.
getServeId
();
String
type
=
appStatisticsDTO
.
getServeType
();
...
...
@@ -865,14 +885,14 @@ public class BookGroupBizImpl implements BookGroupBiz {
if
(
groupMoneyDto
!=
null
&&
groupMoneyDto
.
getSaleCount
()
!=
null
)
{
toAddCount
=
groupMoneyDto
.
getSaleCount
().
intValue
();
}
addProductSale
(
id
,
productDtoMap
,
proSaleMap
,
toAddCount
,
appStatisticsDTO
);
addProductSale
(
id
,
productDtoMap
,
proSaleMap
,
proIncomeMap
,
toAddCount
,
appStatisticsDTO
);
}
}
}
}
}
private
void
addProductSale
(
Long
id
,
Map
<
Long
,
ProductDto
>
productDtoMap
,
Map
<
Long
,
Double
>
proSaleMap
,
Integer
toAddCount
,
AppStatisticsDTO
appStatisticsDTO
)
{
private
void
addProductSale
(
Long
id
,
Map
<
Long
,
ProductDto
>
productDtoMap
,
Map
<
Long
,
Double
>
proSaleMap
,
Map
<
Long
,
Double
>
proIncomeMap
,
Integer
toAddCount
,
AppStatisticsDTO
appStatisticsDTO
)
{
ProductDto
productDto
=
productDtoMap
.
get
(
id
);
String
[]
videoTypes
=
{
"VIDEO_COURSE"
,
"VIDEO_SCHEDULE"
};
String
[]
audioTypes
=
{
"AUDIOAPP"
,
"AUDIO_RESOURCE"
,
"AUDIO_SCHEDULE"
,
"AUDIO_COURSE"
};
...
...
@@ -885,6 +905,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
||
Arrays
.
asList
(
audioTypes
).
contains
(
typeCode
)
||
Arrays
.
asList
(
liveTypes
).
contains
(
typeCode
)))
{
Double
toAdd
=
proSaleMap
.
get
(
id
);
Double
incomeToAdd
=
proIncomeMap
.
get
(
id
);
if
(
toAdd
!=
null
)
{
Double
oldSale
=
appStatisticsDTO
.
getSaleAmount
();
if
(
oldSale
==
null
)
{
...
...
@@ -892,6 +913,13 @@ public class BookGroupBizImpl implements BookGroupBiz {
}
appStatisticsDTO
.
setSaleAmount
(
oldSale
+
toAdd
);
}
if
(
incomeToAdd
!=
null
)
{
Double
oldIncome
=
appStatisticsDTO
.
getIncomeAmount
();
if
(
oldIncome
==
null
)
{
oldIncome
=
0
D
;
}
appStatisticsDTO
.
setIncomeAmount
(
oldIncome
+
incomeToAdd
);
}
if
(
toAddCount
!=
null
)
{
Integer
oldBuy
=
appStatisticsDTO
.
getBuyCount
();
if
(
oldBuy
==
null
)
{
...
...
@@ -910,13 +938,14 @@ public class BookGroupBizImpl implements BookGroupBiz {
}
}
private
void
dealSale
(
List
<
Long
>
ids
,
Map
<
Long
,
List
<
Long
>>
productMapIds
,
Map
<
Long
,
GroupMoneyDto
>
productSaleMap
,
Map
<
Long
,
Double
>
saleMap
)
{
private
void
dealSale
(
List
<
Long
>
ids
,
Map
<
Long
,
List
<
Long
>>
productMapIds
,
Map
<
Long
,
GroupMoneyDto
>
productSaleMap
,
Map
<
Long
,
Double
>
saleMap
,
Map
<
Long
,
BigDecimal
>
productIncomeMap
,
Map
<
Long
,
Double
>
incomeMap
)
{
if
(!
ListUtils
.
isEmpty
(
ids
))
{
for
(
Long
id
:
ids
)
{
List
<
Long
>
productIds
=
productMapIds
.
get
(
id
);
if
(!
ListUtils
.
isEmpty
(
productIds
))
{
Double
saleMoney
=
0
D
;
Long
saleCount
=
0L
;
Double
incomeMoney
=
0
D
;
for
(
Long
productId
:
productIds
)
{
GroupMoneyDto
groupMoneyDto
=
productSaleMap
.
get
(
productId
);
if
(
groupMoneyDto
!=
null
)
{
...
...
@@ -927,8 +956,12 @@ public class BookGroupBizImpl implements BookGroupBiz {
saleCount
=
saleCount
+
groupMoneyDto
.
getSaleCount
();
}
}
if
(
productIncomeMap
!=
null
&&
productIncomeMap
.
get
(
productId
)
!=
null
)
{
incomeMoney
=
incomeMoney
+
productIncomeMap
.
get
(
productId
).
doubleValue
();
}
}
saleMap
.
put
(
id
,
saleMoney
);
incomeMap
.
put
(
id
,
incomeMoney
);
}
}
}
...
...
@@ -1110,6 +1143,145 @@ public class BookGroupBizImpl implements BookGroupBiz {
return
bookGroupDao
.
getIsShowBookName
(
partyId
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@ParamLog
(
"根据分类id获取个人二维码信息"
)
@Override
public
OwnAltQrcodeInfoDTO
getOwnAltQrcodeInfoDTOByClassifyId
(
Long
wechatUserId
,
Long
classifyId
)
{
OwnAltQrcodeInfoDTO
ownAltQrcodeInfoDTO
=
new
OwnAltQrcodeInfoDTO
();
//根据分类id查询社群码信息
ClassifyDTO
classifyDTO
=
bookGroupClassifyDao
.
getById
(
classifyId
);
if
(
classifyDTO
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"没有该分类"
);
}
Long
bookId
=
classifyDTO
.
getBookId
();
Map
<
String
,
Object
>
paramMap
=
Maps
.
newHashMap
();
paramMap
.
put
(
"bookId"
,
bookId
);
paramMap
.
put
(
"adviserId"
,
classifyDTO
.
getCreateUser
());
paramMap
.
put
(
"channelId"
,
classifyDTO
.
getChannelId
());
BookDto
bookDto
=
bookDao
.
getById
(
paramMap
);
Long
templetId
=
bookDto
.
getTempletId
();
//根据分类id获取大类
TempletRelevance
templetRelevance
=
templetRelevanceDao
.
getByTempletId
(
templetId
);
LOGGER
.
info
(
"根据分类id获取大类templetRelevance"
+
templetRelevance
.
toString
());
Integer
largeTemplet
=
templetRelevance
.
getLargeTemplet
();
SelfRobotDTO
selfRobotDTO
=
wechatGroupConsr
.
getAvailableRobot
(
wechatUserId
,
largeTemplet
,
classifyId
);
if
(
selfRobotDTO
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"未找到机器人!"
);
}
ownAltQrcodeInfoDTO
.
setAltHeadUrl
(
selfRobotDTO
.
getHeadPic
());
ownAltQrcodeInfoDTO
.
setAltId
(
selfRobotDTO
.
getWxId
());
ownAltQrcodeInfoDTO
.
setAltNickName
(
selfRobotDTO
.
getNickName
());
ownAltQrcodeInfoDTO
.
setAltQrcodeUrl
(
selfRobotDTO
.
getQrcodeUrl
());
ownAltQrcodeInfoDTO
.
setAltHeadUrl
(
selfRobotDTO
.
getHeadPic
());
//获取之前是否有没有使用的暗号
JoinGroupCipher
joinGroupCipher
=
joinGroupCipherDao
.
getByWechatUserId
(
wechatUserId
,
classifyId
);
String
cipher
;
if
(
joinGroupCipher
!=
null
)
{
cipher
=
joinGroupCipher
.
getCipher
();
}
else
{
//新增暗号
cipher
=
UUIDUitl
.
generateShort
();
//查重,如果有重复,再次生成
JoinGroupCipher
joinGroupCipherHas
=
joinGroupCipherDao
.
getByCipher
(
cipher
);
if
(
joinGroupCipherHas
!=
null
)
{
cipher
=
UUIDUitl
.
generateShort
();
}
cipher
=
"RAYS_"
+
cipher
;
JoinGroupCipher
joinGroupCipherNew
=
new
JoinGroupCipher
();
joinGroupCipherNew
.
setCipher
(
cipher
);
joinGroupCipherNew
.
setWechatUserId
(
wechatUserId
);
joinGroupCipherNew
.
setClassifyId
(
classifyId
);
joinGroupCipherNew
.
setAltId
(
selfRobotDTO
.
getWxId
());
joinGroupCipherDao
.
insert
(
joinGroupCipherNew
);
}
ownAltQrcodeInfoDTO
.
setCipher
(
cipher
);
return
ownAltQrcodeInfoDTO
;
}
@ParamLog
(
"获取暗号状态"
)
@Override
public
Integer
getCipherState
(
String
cipher
)
{
Integer
state
;
if
(
StringUtil
.
isEmpty
(
cipher
))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数不能为空!"
);
}
JoinGroupCipher
joinGroupCipher
=
joinGroupCipherDao
.
getByCipher
(
cipher
);
if
(
joinGroupCipher
==
null
)
{
//暗号错误
state
=
2
;
}
else
if
(
joinGroupCipher
.
getHasUsed
()
!=
null
&&
joinGroupCipher
.
getHasUsed
())
{
//已使用
state
=
1
;
}
else
{
//未使用
state
=
0
;
}
return
state
;
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@ParamLog
(
"获取暗号状态为已使用"
)
@Override
public
void
updateCipherStateToUsed
(
String
cipher
,
String
wxId
)
{
if
(
StringUtil
.
isEmpty
(
cipher
)
||
StringUtil
.
isEmpty
(
wxId
))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数不能为空!"
);
}
joinGroupCipherDao
.
updateCipherStateToUsed
(
cipher
,
wxId
);
}
@ParamLog
(
"获取个人二维码方式群已使用和未使用数量"
)
@Override
public
GroupUseDTO
getGroupUse
(
List
<
String
>
altIds
)
{
if
(
ListUtils
.
isEmpty
(
altIds
))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数不能为空!"
);
}
GroupUseDTO
groupUseDTO
=
new
GroupUseDTO
();
Integer
notUsed
=
weixinQrcodeDao
.
countByState
(
0
,
altIds
);
Integer
hasUsed
=
weixinQrcodeDao
.
countByState
(
1
,
altIds
);
Integer
full
=
weixinQrcodeDao
.
countByState
(
2
,
altIds
);
groupUseDTO
.
setHasUsed
(
hasUsed
+
full
);
groupUseDTO
.
setNotUsed
(
notUsed
);
return
groupUseDTO
;
}
@ParamLog
(
"获取所有的大类分类"
)
@Override
public
List
<
LargeTempletDTO
>
getAllLargTemplet
()
{
List
<
LargeTempletDTO
>
list
=
new
ArrayList
<>();
for
(
LargTempletEnum
largTempletEnum
:
LargTempletEnum
.
values
())
{
LargeTempletDTO
largeTempletDTO
=
new
LargeTempletDTO
();
largeTempletDTO
.
setLargeTemplet
(
largTempletEnum
.
code
);
largeTempletDTO
.
setName
(
largTempletEnum
.
name
);
list
.
add
(
largeTempletDTO
);
}
return
list
;
}
@ParamLog
(
"根据微信id和机器人id获取分类集合"
)
@Override
public
List
<
JoinGroupCipherDTO
>
getClassifyIdsByWxIdAndAltId
(
String
wxId
,
String
altId
)
{
if
(
StringUtil
.
isEmpty
(
wxId
)
||
StringUtil
.
isEmpty
(
altId
))
{
return
new
ArrayList
<>();
}
List
<
JoinGroupCipherDTO
>
list
=
joinGroupCipherDao
.
getClassifyIdsByWxIdAndAltId
(
wxId
,
altId
);
return
CollectionUtils
.
isEmpty
(
list
)
?
Lists
.
newArrayList
()
:
list
;
}
@ParamLog
(
"获取暗号基本信息"
)
@Override
public
GroupCipherDTO
getJoinGroupCipher
(
String
cipher
)
{
if
(
StringUtil
.
isEmpty
(
cipher
))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数不能为空!"
);
}
JoinGroupCipher
joinGroupCipher
=
joinGroupCipherDao
.
getByCipher
(
cipher
);
if
(
joinGroupCipher
!=
null
)
{
GroupCipherDTO
groupCipherDTO
=
new
GroupCipherDTO
();
BeanUtils
.
copyProperties
(
joinGroupCipher
,
groupCipherDTO
);
return
groupCipherDTO
;
}
return
null
;
}
@ParamLog
(
"为信息流批量获取社群书基本信息"
)
@Override
public
Map
<
Long
,
StoreFlowInfoDto
>
getFlowInfoByBookGroupIds
(
List
<
Long
>
bookGroupIds
)
{
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/biz/impl/BookGroupClassifyBizImpl.java
View file @
ff1648f3
...
...
@@ -10,25 +10,59 @@ import com.pcloud.book.consumer.resource.ProductConsr;
import
com.pcloud.book.consumer.settlement.SettlementConsr
;
import
com.pcloud.book.consumer.trade.TradeConsr
;
import
com.pcloud.book.consumer.wechatgroup.WechatGroupConsr
;
import
com.pcloud.book.group.biz.*
;
import
com.pcloud.book.group.biz.BookGroupBiz
;
import
com.pcloud.book.group.biz.BookGroupClassifyBiz
;
import
com.pcloud.book.group.biz.GroupAnnouncementBiz
;
import
com.pcloud.book.group.biz.GroupQrcodeBiz
;
import
com.pcloud.book.group.biz.WeixinQrcodeBiz
;
import
com.pcloud.book.group.dao.BookClassifyBuyRecordDao
;
import
com.pcloud.book.group.dao.BookGroupClassifyDao
;
import
com.pcloud.book.group.dao.BookQrcodeUserDao
;
import
com.pcloud.book.group.dao.*
;
import
com.pcloud.book.group.dto.*
;
import
com.pcloud.book.group.dao.JoinGroupCipherDao
;
import
com.pcloud.book.group.dao.LearningReportBrowseRecordDao
;
import
com.pcloud.book.group.dao.LearningReportTouchRecordDao
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
import
com.pcloud.book.group.dto.BookGroupStatisticDTO
;
import
com.pcloud.book.group.dto.ClassifyDTO
;
import
com.pcloud.book.group.dto.ClassifyLearningCountDto
;
import
com.pcloud.book.group.dto.ClassifyLearningReportDto
;
import
com.pcloud.book.group.dto.GroupAndUserNumberDTO
;
import
com.pcloud.book.group.dto.GroupClassifyQrcodeDTO
;
import
com.pcloud.book.group.dto.GroupNameAndMaxSeqDTO
;
import
com.pcloud.book.group.dto.GroupQrcodeBaseDTO
;
import
com.pcloud.book.group.dto.GroupQrcodeInfoDTO
;
import
com.pcloud.book.group.dto.ProAssocGroupAndUserNumberDTO
;
import
com.pcloud.book.group.dto.QrcodeNameAndProIdDTO
;
import
com.pcloud.book.group.dto.WeixinQrcodeDTO
;
import
com.pcloud.book.group.entity.BookGroupClassify
;
import
com.pcloud.book.group.entity.BookQrcodeUser
;
import
com.pcloud.book.group.entity.GroupQrcode
;
import
com.pcloud.book.group.enums.RankTypeEnum
;
import
com.pcloud.book.group.set.GroupSet
;
import
com.pcloud.book.group.tools.SendWeixinRequestTools
;
import
com.pcloud.book.group.vo.*
;
import
com.pcloud.book.group.vo.AddClassifyVO
;
import
com.pcloud.book.group.vo.AdviserClassifyParam
;
import
com.pcloud.book.group.vo.AdviserClassifyVO
;
import
com.pcloud.book.group.vo.BookGroupClassifyVO
;
import
com.pcloud.book.group.vo.BookGroupQrcodeStatisticVO
;
import
com.pcloud.book.group.vo.ClassifyAndGroupCountVO
;
import
com.pcloud.book.group.vo.ClassifyAndUserCountVO
;
import
com.pcloud.book.group.vo.ClassifyNameVO
;
import
com.pcloud.book.group.vo.ClassifyVO
;
import
com.pcloud.book.group.vo.GroupQrcode4ClassifyVO
;
import
com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO
;
import
com.pcloud.book.group.vo.ListBookGroupQrcodeParamVO
;
import
com.pcloud.book.group.vo.ListClassify4WechatVO
;
import
com.pcloud.book.group.vo.ListClassifyVO
;
import
com.pcloud.book.group.vo.ListGroupClassifyParam
;
import
com.pcloud.book.group.vo.StatisticVO
;
import
com.pcloud.book.group.vo.SyncKeyworsVO
;
import
com.pcloud.book.group.vo.UpdateClassifyVO
;
import
com.pcloud.book.group.vo.UpdateRankVO
;
import
com.pcloud.book.keywords.dao.BookKeywordDao
;
import
com.pcloud.book.keywords.entity.BookKeyword
;
import
com.pcloud.book.util.common.ThreadPoolUtils
;
import
com.pcloud.book.util.properties.BookProps
;
import
com.pcloud.common.core.aspect.ParamLog
;
import
com.pcloud.common.core.constant.SystemCode
;
import
com.pcloud.common.core.enums.NotifyOriginTypeEnum
;
...
...
@@ -120,6 +154,8 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
private
LearningReportBrowseRecordDao
learningReportBrowseRecordDao
;
@Autowired
private
LearningReportTouchRecordDao
learningReportTouchRecordDao
;
@Autowired
private
JoinGroupCipherDao
joinGroupCipherDao
;
@Override
...
...
@@ -144,18 +180,24 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
if
(
qrcodeNameAndProId
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_NULL
,
"请先填写社群码信息!"
);
}
String
groupName
=
qrcodeNameAndProId
.
getGroupQrcodeName
();
bookGroupClassify
.
setProductId
(
qrcodeNameAndProId
.
getProductId
());
bookGroupClassify
.
setCreateUser
(
partyId
);
Integer
rank
=
bookGroupClassifyDao
.
getMaxRank
(
addClassifyVO
.
getBookGroupId
());
bookGroupClassify
.
setRank
(
rank
);
bookGroupClassifyDao
.
insert
(
bookGroupClassify
);
final
Long
wechatGroupNum
=
weixinQrcodeBiz
.
countWechatGroup
();
// 只有生产环境才有30个限制
if
(
"pro"
.
equalsIgnoreCase
(
BookProps
.
getSystemEnv
()))
{
if
(
null
==
wechatGroupNum
||
wechatGroupNum
<=
30
)
{
log
.
info
(
"[新增分类] : 可用微信群数量:{}个"
,
wechatGroupNum
);
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_NULL
,
"群二维码数量不足,您可以明天再创建群。"
);
}
WeixinQrcodeDTO
oneQrcode
=
weixinQrcodeBiz
.
getOneQrcode
();
}
Integer
generation
=
null
;
if
(
new
Integer
(
2
).
equals
(
qrcodeNameAndProId
.
getJoinGroupType
()))
{
generation
=
3
;
}
WeixinQrcodeDTO
oneQrcode
=
weixinQrcodeBiz
.
getOneQrcode
(
generation
);
if
(
oneQrcode
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_NULL
,
"系统二维码数量不足,请联系客服人员补充二维码数量!"
);
}
...
...
@@ -166,7 +208,16 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
groupQrcode
.
setWeixinQrcodeId
(
oneQrcode
.
getId
());
groupQrcode
.
setUserNumber
(
oneQrcode
.
getUserNumber
());
groupQrcode
.
setGroupSeq
(
1
);
groupQrcode
.
setGroupName
(
groupName
+
addClassifyVO
.
getClassify
()
+
"1群"
);
// 群长度超过16部分会被截取,导致群名称重复
final
String
s
=
"1群"
;
String
groupName
=
qrcodeNameAndProId
.
getGroupQrcodeName
()
+
addClassifyVO
.
getClassify
()
+
s
;
if
(
groupName
.
length
()
>
15
)
{
groupName
=
addClassifyVO
.
getClassify
()
+
s
;
if
(
groupName
.
length
()
>
15
)
{
groupName
=
addClassifyVO
.
getClassify
().
substring
(
0
,
16
-
s
.
length
())
+
s
;
}
}
groupQrcode
.
setGroupName
(
groupName
);
groupQrcode
.
setClassifyId
(
bookGroupClassify
.
getId
());
groupQrcode
.
setQrcodeHeadUrl
(
readerConsr
.
getNineHeadUrl
());
groupQrcodeBiz
.
insert
(
groupQrcode
);
...
...
@@ -430,6 +481,12 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
}
@Override
@ParamLog
(
"获取分类二维码相关标识"
)
public
List
<
GroupClassifyQrcodeDTO
>
listClassifyQrcodeInfo
(
List
<
Long
>
classifyIds
)
{
return
bookGroupClassifyDao
.
listClassifyQrcodeInfo
(
classifyIds
);
}
@Override
@ParamLog
(
"客户端获取分类信息"
)
public
List
<
ListClassify4WechatVO
>
listClassify4Wechat
(
Long
bookGroupId
,
Long
wechatUserId
)
{
//获取排序方式
...
...
@@ -511,6 +568,19 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
return
groupQrcode4ClassifyVO
;
}
@Override
public
String
getWxGroupIdByClassifyIdAndWechatId
(
Long
classifyId
,
Long
wechatUserId
)
{
if
(
null
==
classifyId
||
null
==
wechatUserId
)
{
return
null
;
}
final
GroupQrcode4ClassifyVO
wechat
=
this
.
getGroupQrcode4ClassifyWechat
(
classifyId
,
wechatUserId
);
if
(
null
==
wechat
)
{
return
null
;
}
final
GroupQrcodeBaseInfoVO
baseById
=
this
.
groupQrcodeBiz
.
getBaseById
(
wechat
.
getGroupQrcodeId
());
return
(
null
==
baseById
)
?
null
:
baseById
.
getWeixinGroupId
();
}
@ParamLog
(
"获取备用二维码"
)
private
String
getSpareQr
(
Long
bookGroupId
)
{
//获取备用二维码
...
...
@@ -964,6 +1034,11 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
}
@Override
public
BigDecimal
getPayPrice
(
Long
qrcodeId
,
String
wxId
)
{
return
joinGroupCipherDao
.
getPayPrice
(
wxId
,
qrcodeId
);
}
@ParamLog
(
"拖动排序"
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/biz/impl/GroupQrcodeBizImpl.java
View file @
ff1648f3
...
...
@@ -9,20 +9,10 @@ import com.pcloud.book.consumer.label.LabelConsr;
import
com.pcloud.book.consumer.reader.ReaderConsr
;
import
com.pcloud.book.consumer.user.AdviserConsr
;
import
com.pcloud.book.consumer.wechatgroup.WechatGroupConsr
;
import
com.pcloud.book.group.biz.BookGroupClassifyBiz
;
import
com.pcloud.book.group.biz.GroupAnnouncementBiz
;
import
com.pcloud.book.group.biz.GroupQrcodeBiz
;
import
com.pcloud.book.group.biz.WeixinQrcodeBiz
;
import
com.pcloud.book.group.biz.*
;
import
com.pcloud.book.group.constants.BookBusinessConstants
;
import
com.pcloud.book.group.dao.GroupQrcodeDao
;
import
com.pcloud.book.group.dto.BookWxQrcodeDTO
;
import
com.pcloud.book.group.dto.ChangeGroupNameDTO
;
import
com.pcloud.book.group.dto.GroupAndUserNumberDTO
;
import
com.pcloud.book.group.dto.GroupNameAndMaxSeqDTO
;
import
com.pcloud.book.group.dto.GroupQrcodeDTO
;
import
com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising
;
import
com.pcloud.book.group.dto.GroupQrcodeInfoDTO
;
import
com.pcloud.book.group.dto.PushAddUserMessageDTO
;
import
com.pcloud.book.group.dto.WeixinQrcodeDTO
;
import
com.pcloud.book.group.dto.*
;
import
com.pcloud.book.group.entity.GroupQrcode
;
import
com.pcloud.book.group.enums.QrcodeStatusEnum
;
import
com.pcloud.book.group.tools.SendWeixinRequestTools
;
...
...
@@ -65,6 +55,9 @@ import java.util.HashMap;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.util.stream.Collectors
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -101,7 +94,75 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
private
AdvertisingSpaceBiz
advertisingSpaceBiz
;
@Autowired
private
LabelConsr
labelConsr
;
@Autowired
private
BookGroupBiz
bookGroupBiz
;
/**
* 自动更新群人数线程是否开始执行
*/
private
static
final
AtomicBoolean
IS_START
=
new
AtomicBoolean
(
false
);
/**
* 处理群人数线程池
*/
private
static
final
ExecutorService
SINGLE_THREAD_EXECUTOR
=
Executors
.
newSingleThreadExecutor
();
/**
* 更新群人数线程
*/
private
void
updateGroupNum
()
{
// 若已开始则无需再启动
if
(
IS_START
.
get
())
{
return
;
}
// 若设置时已经为true则代表已经有线程执行成功
final
boolean
andSet
=
IS_START
.
getAndSet
(
true
);
if
(
andSet
)
{
return
;
}
SINGLE_THREAD_EXECUTOR
.
execute
(()
->
{
while
(
true
)
{
try
{
if
(
BookBusinessConstants
.
GROUP_NUM_DTO_MAP
.
size
()
<
1
)
{
try
{
Thread
.
sleep
(
5000
);
}
catch
(
InterruptedException
e
)
{
log
.
error
(
"[updateGroupNum] InterruptedException:{}"
,
e
);
}
continue
;
}
log
.
info
(
"[更新群人数] start GROUP_NUM_DTO_MAP:{}"
,
BookBusinessConstants
.
GROUP_NUM_DTO_MAP
);
for
(
Map
.
Entry
<
String
,
AutoUpdateGroupNumDTO
>
entry
:
BookBusinessConstants
.
GROUP_NUM_DTO_MAP
.
entrySet
())
{
final
AutoUpdateGroupNumDTO
value
=
entry
.
getValue
();
// 没到时间不执行(小于30s并且小于3个人不执行)
final
boolean
b
=
null
==
value
||
((
System
.
currentTimeMillis
()
+
10
)
<
value
.
getStartTime
().
getTime
()
&&
value
.
getNum
().
get
()
<
3
);
if
(
b
)
{
log
.
info
(
"[更新群人数] null == value:{}"
,
entry
);
continue
;
}
Integer
peopleCounts
=
WxGroupSDK
.
getPeopleCounts
(
value
.
getWxGroupId
(),
value
.
getRobotId
(),
value
.
getIp
());
if
(
null
==
peopleCounts
||
peopleCounts
<
1
)
{
log
.
info
(
"[更新群人数] null == peopleCounts || peopleCounts < 1 entry:{}; peopleCounts:{}"
,
entry
,
peopleCounts
);
continue
;
}
log
.
info
(
"[更新群人数] entry:{}, peopleCounts:{}"
,
entry
,
peopleCounts
);
groupQrcodeDao
.
updateUserNumber
(
value
.
getWxGroupId
(),
peopleCounts
);
BookBusinessConstants
.
GROUP_NUM_DTO_MAP
.
remove
(
entry
.
getKey
());
}
}
catch
(
Exception
e
)
{
log
.
error
(
"[updateGroupNum] : Exception:{}"
,
e
);
}
try
{
Thread
.
sleep
(
5000
);
}
catch
(
InterruptedException
e
)
{
log
.
error
(
"[updateGroupNum] InterruptedException:{}"
,
e
);
}
}
});
}
@Override
@ParamLog
(
"updateGroupQrcode"
)
...
...
@@ -240,11 +301,23 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
}
//获取群基本信息
GroupQrcodeDTO
groupQrcodeDTO
=
groupQrcodeDao
.
getGroupQrcodeInfo
(
weixinGroupId
);
log
.
info
(
"[新增一个用户] groupQrcodeDTO:{}"
,
groupQrcodeDTO
);
if
(
groupQrcodeDTO
==
null
)
{
return
;
}
//更新用户数
groupQrcodeDao
.
updateUserNumber
(
weixinGroupId
,
memberCount
);
//更新用户数(由于微信有延迟及时更新可能会数据对不上,所以调用方法延迟30s,统一处理)
AutoUpdateGroupNumDTO
numDTO
=
BookBusinessConstants
.
GROUP_NUM_DTO_MAP
.
get
(
weixinGroupId
);
if
(
null
==
numDTO
){
numDTO
=
new
AutoUpdateGroupNumDTO
(
weixinGroupId
,
robotId
,
ip
,
new
Date
());
}
else
{
numDTO
.
getNum
().
incrementAndGet
();
numDTO
.
setStartTime
(
new
Date
());
}
BookBusinessConstants
.
GROUP_NUM_DTO_MAP
.
put
(
weixinGroupId
,
numDTO
);
// 启动更新群人数线程
if
(!
IS_START
.
get
())
{
this
.
updateGroupNum
();
}
//如果人数超过限制,重新分配群
if
(
memberCount
>=
groupQrcodeDTO
.
getChangeNumber
()
&&
QrcodeStatusEnum
.
ON_USE
.
value
.
equals
(
groupQrcodeDTO
.
getQrcodeState
()))
{
//修改状态,重新分配一个群
...
...
@@ -397,24 +470,36 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
/**
* 重新分配一个群
*/
@ParamLog
(
"重新分配一个群"
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
addWechatGroup
(
Long
classifyId
,
Long
groupQrcodeId
)
{
WeixinQrcodeDTO
oneQrcode
=
weixinQrcodeBiz
.
getOneQrcode
();
Integer
generation
=
null
;
ClassifyVO
classifyVOOne
=
bookGroupClassifyBiz
.
getClassify
(
classifyId
);
if
(
classifyVOOne
!=
null
&&
classifyVOOne
.
getBookGroupId
()
!=
null
)
{
QrcodeNameAndProIdDTO
qrcodeNameAndProId
=
bookGroupBiz
.
getQrcodeNameAndProId
(
classifyVOOne
.
getBookGroupId
());
if
(
qrcodeNameAndProId
!=
null
&&
new
Integer
(
2
).
equals
(
qrcodeNameAndProId
.
getJoinGroupType
()))
{
generation
=
3
;
}
}
WeixinQrcodeDTO
oneQrcode
=
weixinQrcodeBiz
.
getOneQrcode
(
generation
);
log
.
info
(
"[重新分配一个群] : oneQrcode:{}"
,
oneQrcode
);
if
(
oneQrcode
!=
null
)
{
//将二维码改为已满群状态
Integer
number
=
groupQrcodeDao
.
changeQrcodeState
(
groupQrcodeId
,
QrcodeStatusEnum
.
OVER_NUMBER
.
value
);
log
.
info
(
"[重新分配一个群] : groupQrcodeDao.changeQrcodeState number:{}"
,
number
);
if
(
number
>
0
){
//获取标签对应基本信息
GroupNameAndMaxSeqDTO
groupNameAndMaxSeqDTO
=
bookGroupClassifyBiz
.
getGroupNameAndMaxSeq
(
classifyId
);
log
.
info
(
"[重新分配一个群] : groupNameAndMaxSeqDTO:{}"
,
groupNameAndMaxSeqDTO
);
if
(
groupNameAndMaxSeqDTO
!=
null
)
{
Integer
maxSeq
=
groupNameAndMaxSeqDTO
.
getMaxSeq
()
+
1
;
String
groupName
=
groupNameAndMaxSeqDTO
.
getGroupQrcodeName
()
+
groupNameAndMaxSeqDTO
.
getClassify
()
+
maxSeq
+
"群"
;
// 群长度超过16部分会被截取,导致群名称重复
if
(
groupName
.
length
()
>
1
6
)
{
if
(
groupName
.
length
()
>
1
5
)
{
final
String
s
=
maxSeq
+
"群"
;
groupName
=
groupNameAndMaxSeqDTO
.
getClassify
()
+
s
;
if
(
groupName
.
length
()
>
1
6
)
{
groupName
=
groupNameAndMaxSeqDTO
.
getClassify
().
substring
(
0
,
1
6
-
s
.
length
())
+
s
;
if
(
groupName
.
length
()
>
1
5
)
{
groupName
=
groupNameAndMaxSeqDTO
.
getClassify
().
substring
(
0
,
1
5
-
s
.
length
())
+
s
;
}
}
GroupQrcode
groupQrcode
=
new
GroupQrcode
();
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/biz/impl/WeixinQrcodeBizImpl.java
View file @
ff1648f3
...
...
@@ -84,8 +84,8 @@ public class WeixinQrcodeBizImpl implements WeixinQrcodeBiz {
@Override
@ParamLog
(
"从二维码库获取一个二维码"
)
@Transactional
(
propagation
=
Propagation
.
NOT_SUPPORTED
)
public
WeixinQrcodeDTO
getOneQrcode
()
{
WeixinQrcodeDTO
qrcodeVO
=
weixinQrcodeDao
.
getOneWechatGroup
();
public
WeixinQrcodeDTO
getOneQrcode
(
Integer
generation
)
{
WeixinQrcodeDTO
qrcodeVO
=
weixinQrcodeDao
.
getOneWechatGroup
(
generation
);
if
(
qrcodeVO
==
null
)
{
return
null
;
}
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/constants/BookBusinessConstants.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
constants
;
import
com.pcloud.book.group.dto.AutoUpdateGroupNumDTO
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* book业务常量类
*/
public
class
BookBusinessConstants
{
/**
* 需更新微信群信息
*/
public
static
final
Map
<
String
,
AutoUpdateGroupNumDTO
>
GROUP_NUM_DTO_MAP
=
new
ConcurrentHashMap
<>(
128
);
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/BookGroupClassifyDao.java
View file @
ff1648f3
...
...
@@ -132,6 +132,11 @@ public interface BookGroupClassifyDao extends BaseDao<BookGroupClassify> {
GroupClassifyQrcodeDTO
getClassifyQrcodeInfo
(
String
weixinGroupId
);
/**
* 批量获取分类信息
*/
List
<
GroupClassifyQrcodeDTO
>
listClassifyQrcodeInfo
(
List
<
Long
>
classifyIds
);
/**
* @Author:lili
* @Desr:获取所有的分类
* @Date:2019/4/29 11:23
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/BookGroupDao.java
View file @
ff1648f3
...
...
@@ -4,6 +4,7 @@ import java.util.List;
import
java.util.Map
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
import
com.pcloud.book.group.dto.PersonalQrcodeDTO
;
import
com.pcloud.book.group.dto.QrcodeNameAndProIdDTO
;
import
com.pcloud.book.group.entity.BookGroup
;
import
com.pcloud.common.core.dao.BaseDao
;
...
...
@@ -120,6 +121,13 @@ public interface BookGroupDao extends BaseDao<BookGroup> {
Boolean
isSpecialAgent
(
Long
agentId
);
/**
* @description 更新个人二维码
* @author 戴兴
* @date 2019/8/7 16:49
*/
void
updatePersonQrcode
(
PersonalQrcodeDTO
personalQrcodeDTO
);
/**
* 获取社群书基本信息(包括书籍封面isbn号)
* @param paramMap
* @return
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/JoinGroupCipherDao.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dao
;
import
com.pcloud.book.group.dto.JoinGroupCipherDTO
;
import
com.pcloud.book.group.entity.JoinGroupCipher
;
import
com.pcloud.common.core.dao.BaseDao
;
import
java.math.BigDecimal
;
import
java.util.List
;
public
interface
JoinGroupCipherDao
extends
BaseDao
<
JoinGroupCipher
>
{
JoinGroupCipher
getByWechatUserId
(
Long
wechatUserId
,
Long
classifyId
);
JoinGroupCipher
getByCipher
(
String
cipher
);
JoinGroupCipherDTO
getDTOByCipher
(
String
cipher
);
void
updateCipherStateToUsed
(
String
cipher
,
String
wxId
);
List
<
JoinGroupCipherDTO
>
getClassifyIdsByWxIdAndAltId
(
String
wxId
,
String
altId
);
void
updateQrcodeId
(
String
cipher
,
String
wxId
,
Long
qrcodeId
);
/**
* 用户支付金额
* @param wxId
* @param qrcodeId
* @return
*/
BigDecimal
getPayPrice
(
String
wxId
,
Long
qrcodeId
);
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/TempletRelevanceDao.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dao
;
import
com.pcloud.book.group.entity.TempletRelevance
;
import
com.pcloud.common.core.dao.BaseDao
;
public
interface
TempletRelevanceDao
extends
BaseDao
<
TempletRelevance
>
{
TempletRelevance
getByTempletId
(
Long
templetId
);
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/WeixinQrcodeDao.java
View file @
ff1648f3
...
...
@@ -24,7 +24,7 @@ public interface WeixinQrcodeDao extends BaseDao<WeixinQrcode> {
* @Desr:获取一个微信群
* @Date:2019/3/12 18:04
*/
WeixinQrcodeDTO
getOneWechatGroup
();
WeixinQrcodeDTO
getOneWechatGroup
(
Integer
generation
);
/**
* @Author:lili
...
...
@@ -155,4 +155,9 @@ public interface WeixinQrcodeDao extends BaseDao<WeixinQrcode> {
Map
<
String
,
BookWxQrcodeDTO
>
listByWxGroupIds
(
List
<
String
>
wxGroupIds
);
String
getVirtualIp
(
Integer
generation
);
/**
* 根据状态获取群数量
*/
Integer
countByState
(
Integer
state
,
List
<
String
>
altIds
);
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/impl/BookGroupClassifyDaoImpl.java
View file @
ff1648f3
...
...
@@ -110,6 +110,11 @@ public class BookGroupClassifyDaoImpl extends BaseDaoImpl<BookGroupClassify> imp
}
@Override
public
List
<
GroupClassifyQrcodeDTO
>
listClassifyQrcodeInfo
(
List
<
Long
>
classifyIds
)
{
return
this
.
getSqlSession
().
selectList
(
this
.
getStatement
(
"listClassifyQrcodeInfo"
),
classifyIds
);
}
@Override
public
List
<
ListClassify4WechatVO
>
listClassify4Wechat
(
Long
bookGroupId
,
Integer
rankType
)
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
();
paramMap
.
put
(
"bookGroupId"
,
bookGroupId
);
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/impl/BookGroupDaoImpl.java
View file @
ff1648f3
...
...
@@ -3,6 +3,8 @@ package com.pcloud.book.group.dao.impl;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
com.pcloud.book.group.dto.PersonalQrcodeDTO
;
import
org.springframework.stereotype.Repository
;
import
com.pcloud.book.group.dao.BookGroupDao
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
...
...
@@ -124,6 +126,14 @@ public class BookGroupDaoImpl extends BaseDaoImpl<BookGroup> implements BookGrou
}
@Override
public
void
updatePersonQrcode
(
PersonalQrcodeDTO
personalQrcodeDTO
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"newQrcodeUrl"
,
personalQrcodeDTO
.
getNewQrcodeUrl
());
map
.
put
(
"oldQrcodeUrl"
,
personalQrcodeDTO
.
getOldQrcodeUrl
());
this
.
getSqlSession
().
update
(
this
.
getStatement
(
"updatePersonQrcode"
),
map
);
}
@Override
public
List
<
BookGroupDTO
>
getBookInfoByIdsWithBookClockInfoId
(
Map
<
String
,
Object
>
paramMap
)
{
return
this
.
getSqlSession
().
selectList
(
this
.
getStatement
(
"getBookInfoByIdsWithBookClockInfoId"
),
paramMap
);
}
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/impl/JoinGroupCipherDaoImpl.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dao
.
impl
;
import
com.pcloud.book.group.dao.JoinGroupCipherDao
;
import
com.pcloud.book.group.dto.JoinGroupCipherDTO
;
import
com.pcloud.book.group.entity.JoinGroupCipher
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Component
;
import
java.math.BigDecimal
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @Description
* @Author ruansiyuan
* @Date 2019/8/5 16:18
**/
@Component
(
"joinGroupCipherDao"
)
public
class
JoinGroupCipherDaoImpl
extends
BaseDaoImpl
<
JoinGroupCipher
>
implements
JoinGroupCipherDao
{
@Override
public
JoinGroupCipher
getByWechatUserId
(
Long
wechatUserId
,
Long
classifyId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"wechatUserId"
,
wechatUserId
);
map
.
put
(
"classifyId"
,
classifyId
);
return
this
.
getSqlSession
().
selectOne
(
this
.
getStatement
(
"getByWechatUserId"
),
map
);
}
@Override
public
JoinGroupCipher
getByCipher
(
String
cipher
)
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getStatement
(
"getByCipher"
),
cipher
);
}
@Override
public
JoinGroupCipherDTO
getDTOByCipher
(
String
cipher
)
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getStatement
(
"getDTOByCipher"
),
cipher
);
}
@Override
public
void
updateCipherStateToUsed
(
String
cipher
,
String
wxId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"cipher"
,
cipher
);
map
.
put
(
"wxId"
,
wxId
);
this
.
getSqlSession
().
update
(
this
.
getStatement
(
"updateCipherStateToUsed"
),
map
);
}
@Override
public
List
<
JoinGroupCipherDTO
>
getClassifyIdsByWxIdAndAltId
(
String
wxId
,
String
altId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"wxId"
,
wxId
);
map
.
put
(
"altId"
,
altId
);
return
this
.
getSqlSession
().
selectList
(
this
.
getStatement
(
"getClassifyIdsByWxIdAndAltId"
),
map
);
}
@Override
public
void
updateQrcodeId
(
String
cipher
,
String
wxId
,
Long
qrcodeId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"cipher"
,
cipher
);
map
.
put
(
"wxId"
,
wxId
);
map
.
put
(
"qrcodeId"
,
qrcodeId
);
this
.
getSqlSession
().
update
(
this
.
getStatement
(
"updateQrcodeId"
),
map
);
}
@Override
public
BigDecimal
getPayPrice
(
String
wxId
,
Long
qrcodeId
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"wxId"
,
wxId
);
map
.
put
(
"qrcodeId"
,
qrcodeId
);
return
getSessionTemplate
().
selectOne
(
getStatement
(
"getPayPrice"
),
map
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/impl/TempletRelevanceDaoImpl.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dao
.
impl
;
import
com.pcloud.book.group.dao.TempletRelevanceDao
;
import
com.pcloud.book.group.entity.TempletRelevance
;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Component
;
/**
* @Description
* @Author ruansiyuan
* @Date 2019/8/5 16:19
**/
@Component
(
"templetRelevanceDao"
)
public
class
TempletRelevanceDaoImpl
extends
BaseDaoImpl
<
TempletRelevance
>
implements
TempletRelevanceDao
{
@Override
public
TempletRelevance
getByTempletId
(
Long
templetId
)
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getStatement
(
"getByTempletId"
),
templetId
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dao/impl/WeixinQrcodeDaoImpl.java
View file @
ff1648f3
...
...
@@ -25,8 +25,10 @@ import java.util.Map;
@Component
(
"WeixinQrcodeDao"
)
public
class
WeixinQrcodeDaoImpl
extends
BaseDaoImpl
<
WeixinQrcode
>
implements
WeixinQrcodeDao
{
@Override
public
WeixinQrcodeDTO
getOneWechatGroup
()
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getStatement
(
"getOneWechatGroup"
));
public
WeixinQrcodeDTO
getOneWechatGroup
(
Integer
generation
)
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
();
paramMap
.
put
(
"generation"
,
generation
);
return
this
.
getSqlSession
().
selectOne
(
this
.
getStatement
(
"getOneWechatGroup"
),
paramMap
);
}
@Override
...
...
@@ -154,4 +156,12 @@ public class WeixinQrcodeDaoImpl extends BaseDaoImpl<WeixinQrcode> implements We
public
String
getVirtualIp
(
Integer
generation
)
{
return
this
.
getSessionTemplate
().
selectOne
(
"getVirtualIp"
,
generation
);
}
@Override
public
Integer
countByState
(
Integer
state
,
List
<
String
>
altIds
)
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"state"
,
state
);
paramMap
.
put
(
"altIds"
,
altIds
);
return
this
.
getSessionTemplate
().
selectOne
(
"countByState"
,
paramMap
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dto/AutoUpdateGroupNumDTO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dto
;
import
java.util.Date
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
lombok.Data
;
/**
* 自动更新群人数DTO
*/
@Data
public
class
AutoUpdateGroupNumDTO
{
/**
* 群id
*/
private
String
wxGroupId
;
/**
* 机器人id
*/
private
String
robotId
;
/**
* wxGroupIp
*/
private
String
ip
;
/**
* 当前触发次数
*/
private
AtomicInteger
num
=
new
AtomicInteger
(
1
);
/**
* 开始更新时间(犹豫微信有延迟,所以新用户进群之后30s再次更新群人数)
*/
private
Date
startTime
;
public
AutoUpdateGroupNumDTO
()
{
}
public
AutoUpdateGroupNumDTO
(
String
wxGroupId
,
String
robotId
,
String
ip
,
Date
startTime
)
{
this
.
wxGroupId
=
wxGroupId
;
this
.
robotId
=
robotId
;
this
.
ip
=
ip
;
this
.
num
=
new
AtomicInteger
(
1
);
this
.
startTime
=
startTime
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dto/BookGroupDTO.java
View file @
ff1648f3
...
...
@@ -142,6 +142,11 @@ public class BookGroupDTO extends BaseDto {
*/
private
Boolean
isShowBookName
;
/**
* 进群方式:1群二维码,2客服机器人
*/
private
Integer
joinGroupType
;
public
String
getUrl
()
{
return
url
;
}
...
...
@@ -359,6 +364,14 @@ public class BookGroupDTO extends BaseDto {
this
.
isShowBookName
=
isShowBookName
;
}
public
Integer
getJoinGroupType
()
{
return
joinGroupType
;
}
public
void
setJoinGroupType
(
Integer
joinGroupType
)
{
this
.
joinGroupType
=
joinGroupType
;
}
@Override
public
String
toString
()
{
return
"BookGroupDTO{"
+
...
...
@@ -388,7 +401,8 @@ public class BookGroupDTO extends BaseDto {
", bookName='"
+
bookName
+
'\''
+
", url='"
+
url
+
'\''
+
", bookClockInfoId="
+
bookClockInfoId
+
", isShowBookName='"
+
isShowBookName
+
'\''
+
", isShowBookName="
+
isShowBookName
+
", joinGroupType="
+
joinGroupType
+
"} "
+
super
.
toString
();
}
}
\ No newline at end of file
pcloud-service-book/src/main/java/com/pcloud/book/group/dto/ClassifyDTO.java
View file @
ff1648f3
...
...
@@ -82,6 +82,8 @@ public class ClassifyDTO implements Serializable {
private
Long
bookClockInfoId
;
private
Long
createUser
;
public
Integer
getRank
()
{
return
rank
;
}
...
...
@@ -194,6 +196,14 @@ public class ClassifyDTO implements Serializable {
this
.
bookClockInfoId
=
bookClockInfoId
;
}
public
Long
getCreateUser
()
{
return
createUser
;
}
public
void
setCreateUser
(
Long
createUser
)
{
this
.
createUser
=
createUser
;
}
@Override
public
String
toString
()
{
return
"ClassifyDTO{"
+
...
...
@@ -211,6 +221,7 @@ public class ClassifyDTO implements Serializable {
", changeNumber="
+
changeNumber
+
", rank="
+
rank
+
", bookClockInfoId="
+
bookClockInfoId
+
", createUser="
+
createUser
+
'}'
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dto/JoinGroupCipherDTO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dto
;
import
lombok.Data
;
@Data
public
class
JoinGroupCipherDTO
{
private
String
cipher
;
private
Long
classifyId
;
private
Long
qrcodeId
;
private
Long
wechatUserId
;
private
String
wxId
;
private
Boolean
hasUsed
;
private
Long
bookGroupId
;
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dto/OwnAltQrcodeInfoDTO.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
dto
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.io.Serializable
;
/**
* @Description
* @Author ruansiyuan
* @Date 2019/8/5 17:14
**/
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
OwnAltQrcodeInfoDTO
implements
Serializable
{
@ApiModelProperty
(
"小号id"
)
private
String
altId
;
@ApiModelProperty
(
"小号昵称"
)
private
String
altNickName
;
@ApiModelProperty
(
"小号头像"
)
private
String
altHeadUrl
;
@ApiModelProperty
(
"小号二维码地址"
)
private
String
altQrcodeUrl
;
@ApiModelProperty
(
"暗号"
)
private
String
cipher
;
public
String
getAltId
()
{
return
altId
;
}
public
void
setAltId
(
String
altId
)
{
this
.
altId
=
altId
;
}
public
String
getAltNickName
()
{
return
altNickName
;
}
public
void
setAltNickName
(
String
altNickName
)
{
this
.
altNickName
=
altNickName
;
}
public
String
getAltHeadUrl
()
{
return
altHeadUrl
;
}
public
void
setAltHeadUrl
(
String
altHeadUrl
)
{
this
.
altHeadUrl
=
altHeadUrl
;
}
public
String
getAltQrcodeUrl
()
{
return
altQrcodeUrl
;
}
public
void
setAltQrcodeUrl
(
String
altQrcodeUrl
)
{
this
.
altQrcodeUrl
=
altQrcodeUrl
;
}
public
String
getCipher
()
{
return
cipher
;
}
public
void
setCipher
(
String
cipher
)
{
this
.
cipher
=
cipher
;
}
@Override
public
String
toString
()
{
return
"OwnAltQrcodeInfoDTO{"
+
"altId='"
+
altId
+
'\''
+
", altNickName='"
+
altNickName
+
'\''
+
", altHeadUrl='"
+
altHeadUrl
+
'\''
+
", altQrcodeUrl='"
+
altQrcodeUrl
+
'\''
+
", cipher='"
+
cipher
+
'\''
+
'}'
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/dto/QrcodeNameAndProIdDTO.java
View file @
ff1648f3
...
...
@@ -18,6 +18,11 @@ public class QrcodeNameAndProIdDTO {
*/
private
Long
productId
;
/**
* 进群方式:1群二维码,2客服机器人
*/
private
Integer
joinGroupType
;
public
Long
getBookGroupId
()
{
return
bookGroupId
;
}
...
...
@@ -42,12 +47,21 @@ public class QrcodeNameAndProIdDTO {
this
.
productId
=
productId
;
}
public
Integer
getJoinGroupType
()
{
return
joinGroupType
;
}
public
void
setJoinGroupType
(
Integer
joinGroupType
)
{
this
.
joinGroupType
=
joinGroupType
;
}
@Override
public
String
toString
()
{
return
"QrcodeNameAndProIdDTO{"
+
"bookGroupId="
+
bookGroupId
+
", groupQrcodeName='"
+
groupQrcodeName
+
'\''
+
", productId="
+
productId
+
", joinGroupType="
+
joinGroupType
+
'}'
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/entity/BookGroup.java
View file @
ff1648f3
...
...
@@ -102,6 +102,11 @@ public class BookGroup extends BaseEntity {
*/
private
Boolean
isShowBookName
;
/**
* 进群方式:1群二维码,2客服机器人
*/
private
Integer
joinGroupType
;
public
Long
getId
()
{
return
id
;
}
...
...
@@ -246,6 +251,14 @@ public class BookGroup extends BaseEntity {
this
.
isShowBookName
=
isShowBookName
;
}
public
Integer
getJoinGroupType
()
{
return
joinGroupType
;
}
public
void
setJoinGroupType
(
Integer
joinGroupType
)
{
this
.
joinGroupType
=
joinGroupType
;
}
@Override
public
String
toString
()
{
return
"BookGroup{"
+
...
...
@@ -267,6 +280,7 @@ public class BookGroup extends BaseEntity {
", updateTime="
+
updateTime
+
", isDelete="
+
isDelete
+
", isShowBookName="
+
isShowBookName
+
", joinGroupType="
+
joinGroupType
+
"} "
+
super
.
toString
();
}
}
\ No newline at end of file
pcloud-service-book/src/main/java/com/pcloud/book/group/entity/JoinGroupCipher.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModelProperty
;
/**
* @Description
* @Author ruansiyuan
* @Date 2019/8/5 15:59
**/
public
class
JoinGroupCipher
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
8724831387632496417L
;
@ApiModelProperty
(
"密码"
)
private
String
cipher
;
@ApiModelProperty
(
"分类id"
)
private
Long
classifyId
;
@ApiModelProperty
(
"群id"
)
private
Long
qrcodeId
;
@ApiModelProperty
(
"创建人"
)
private
Long
wechatUserId
;
@ApiModelProperty
(
"使用人微信id"
)
private
String
wxId
;
@ApiModelProperty
(
"是否使用"
)
private
Boolean
hasUsed
;
@ApiModelProperty
(
"机器人id"
)
private
String
altId
;
public
String
getCipher
()
{
return
cipher
;
}
public
void
setCipher
(
String
cipher
)
{
this
.
cipher
=
cipher
;
}
public
Long
getClassifyId
()
{
return
classifyId
;
}
public
void
setClassifyId
(
Long
classifyId
)
{
this
.
classifyId
=
classifyId
;
}
public
Long
getQrcodeId
()
{
return
qrcodeId
;
}
public
void
setQrcodeId
(
Long
qrcodeId
)
{
this
.
qrcodeId
=
qrcodeId
;
}
public
Long
getWechatUserId
()
{
return
wechatUserId
;
}
public
void
setWechatUserId
(
Long
wechatUserId
)
{
this
.
wechatUserId
=
wechatUserId
;
}
public
String
getWxId
()
{
return
wxId
;
}
public
void
setWxId
(
String
wxId
)
{
this
.
wxId
=
wxId
;
}
public
Boolean
getHasUsed
()
{
return
hasUsed
;
}
public
void
setHasUsed
(
Boolean
hasUsed
)
{
this
.
hasUsed
=
hasUsed
;
}
public
String
getAltId
()
{
return
altId
;
}
public
void
setAltId
(
String
altId
)
{
this
.
altId
=
altId
;
}
@Override
public
String
toString
()
{
return
"JoinGroupCipher{"
+
"cipher='"
+
cipher
+
'\''
+
", classifyId="
+
classifyId
+
", qrcodeId="
+
qrcodeId
+
", wechatUserId="
+
wechatUserId
+
", wxId='"
+
wxId
+
'\''
+
", hasUsed="
+
hasUsed
+
", altId='"
+
altId
+
'\''
+
"} "
+
super
.
toString
();
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/entity/TempletRelevance.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
entity
;
import
com.pcloud.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModelProperty
;
/**
* @Description 分类关联表
* @Author ruansiyuan
* @Date 2019/8/5 15:47
**/
public
class
TempletRelevance
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
5014986282950538055L
;
@ApiModelProperty
(
"分类id"
)
private
Long
templetId
;
@ApiModelProperty
(
"大类id"
)
private
Integer
largeTemplet
;
public
Long
getTempletId
()
{
return
templetId
;
}
public
void
setTempletId
(
Long
templetId
)
{
this
.
templetId
=
templetId
;
}
public
Integer
getLargeTemplet
()
{
return
largeTemplet
;
}
public
void
setLargeTemplet
(
Integer
largeTemplet
)
{
this
.
largeTemplet
=
largeTemplet
;
}
@Override
public
String
toString
()
{
return
"TempletRelevance{"
+
"templetId="
+
templetId
+
", largeTemplet="
+
largeTemplet
+
"} "
+
super
.
toString
();
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/enums/LargTempletEnum.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
group
.
enums
;
public
enum
LargTempletEnum
{
/**
* K12类
*/
K12
(
1
,
"K12类"
),
/**
* 少儿类
*/
CHILD
(
2
,
"少儿类"
),
/**
* 高等/职教
*/
HIGH
(
3
,
"高等/职教"
),
/**
* 大众类
*/
GENERAL
(
4
,
"大众类"
);
public
final
Integer
code
;
public
final
String
name
;
LargTempletEnum
(
Integer
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/facade/BookGroupFacade.java
View file @
ff1648f3
...
...
@@ -3,6 +3,7 @@ package com.pcloud.book.group.facade;
import
com.pcloud.book.group.entity.BookGroupClassify
;
import
org.codehaus.jackson.JsonParseException
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.CookieValue
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -275,4 +276,16 @@ public interface BookGroupFacade {
@RequestHeader
(
"token"
)
String
token
)
throws
BizException
,
PermissionException
,
JsonParseException
;
@ApiOperation
(
"根据分类id获取个人二维码"
)
@GetMapping
(
"getOwnAltQrcodeInfoDTOByClassifyId"
)
ResponseDto
<?>
getOwnAltQrcodeInfoDTOByClassifyId
(
@CookieValue
(
"userInfo"
)
String
userInfo
,
@RequestParam
(
"classifyId"
)
Long
classifyId
)
throws
BizException
,
PermissionException
,
JsonParseException
;
@ApiOperation
(
"获取所有的大类"
)
@GetMapping
(
"getAllLargeTemplet"
)
ResponseDto
<?>
getAllLargeTemplet
(
@RequestHeader
(
"token"
)
String
token
)
throws
BizException
,
PermissionException
,
JsonParseException
;
}
pcloud-service-book/src/main/java/com/pcloud/book/group/facade/impl/BookGroupFacadeImpl.java
View file @
ff1648f3
...
...
@@ -3,6 +3,7 @@ package com.pcloud.book.group.facade.impl;
import
com.pcloud.book.base.exception.BookBizException
;
import
com.pcloud.book.group.biz.BookGroupBiz
;
import
com.pcloud.book.group.biz.BookGroupClassifyBiz
;
import
com.pcloud.book.group.dto.GroupStoreMyPayDto
;
import
com.pcloud.book.group.entity.BookGroup
;
import
com.pcloud.book.group.entity.BookGroupClassify
;
import
com.pcloud.book.group.facade.BookGroupFacade
;
...
...
@@ -19,6 +20,7 @@ import com.pcloud.common.utils.string.StringUtil;
import
org.codehaus.jackson.JsonParseException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.CookieValue
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -394,4 +396,30 @@ public class BookGroupFacadeImpl implements BookGroupFacade {
Long
partyId
=
(
Long
)
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
return
new
ResponseDto
<>(
bookGroupBiz
.
getIsShowBookName
(
partyId
));
}
@ApiOperation
(
"根据分类id获取个人二维码"
)
@GetMapping
(
"getOwnAltQrcodeInfoDTOByClassifyId"
)
@Override
public
ResponseDto
<?>
getOwnAltQrcodeInfoDTOByClassifyId
(
@CookieValue
(
"userInfo"
)
String
userInfo
,
@RequestParam
(
"classifyId"
)
Long
classifyId
)
throws
BizException
,
PermissionException
,
JsonParseException
{
Long
wechatUserId
=
Cookie
.
getId
(
userInfo
,
Cookie
.
_WECHAT_USER_ID
);
if
(
classifyId
==
null
)
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"分类不能为空!"
);
}
return
new
ResponseDto
<>(
bookGroupBiz
.
getOwnAltQrcodeInfoDTOByClassifyId
(
wechatUserId
,
classifyId
));
}
@ApiOperation
(
"获取所有的大类"
)
@GetMapping
(
"getAllLargeTemplet"
)
@Override
public
ResponseDto
<?>
getAllLargeTemplet
(
@RequestHeader
(
"token"
)
String
token
)
throws
BizException
,
PermissionException
,
JsonParseException
{
SessionUtil
.
getVlaue
(
token
,
SessionUtil
.
PARTY_ID
);
return
new
ResponseDto
<>(
bookGroupBiz
.
getAllLargTemplet
());
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/service/impl/BookGroupClassifyServiceImpl.java
View file @
ff1648f3
...
...
@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.math.BigDecimal
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -67,7 +68,7 @@ public class BookGroupClassifyServiceImpl implements BookGroupClassifyService {
@ApiImplicitParam
(
name
=
"query"
,
value
=
"书籍名称"
,
dataType
=
"string"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"proLabelId"
,
value
=
"专业标签id"
,
dataType
=
"long"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"depLabelId"
,
value
=
"深度标签id"
,
dataType
=
"long"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"purLabelId"
,
value
=
"目的标签id"
,
dataType
=
"
stri
ng"
,
required
=
false
,
paramType
=
"query"
)
@ApiImplicitParam
(
name
=
"purLabelId"
,
value
=
"目的标签id"
,
dataType
=
"
lo
ng"
,
required
=
false
,
paramType
=
"query"
)
})
@GetMapping
(
"listQrcodeIdsByLabelQuery"
)
public
ResponseEntity
<
ResponseDto
<
List
<
Long
>>>
listQrcodeIdsByLabelQuery
(
...
...
@@ -85,4 +86,14 @@ public class BookGroupClassifyServiceImpl implements BookGroupClassifyService {
List
<
Long
>
qrcodeIds
=
groupQrcodeBiz
.
filterDeleteId
(
wxGroupIdList
);
return
ResponseHandleUtil
.
toResponse
(
qrcodeIds
);
}
@Override
@GetMapping
(
"getPayPrice"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"qrcodeId"
,
value
=
"qrcodeId"
,
dataType
=
"long"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"wxUserId"
,
value
=
"wxUserId"
,
dataType
=
"string"
,
required
=
true
,
paramType
=
"query"
)
})
public
ResponseEntity
<
ResponseDto
<
BigDecimal
>>
getPayPrice
(
@RequestParam
(
"qrcodeId"
)
Long
qrcodeId
,
@RequestParam
(
"wxUserId"
)
String
wxUserId
)
{
return
ResponseHandleUtil
.
toResponse
(
bookGroupClassifyBiz
.
getPayPrice
(
qrcodeId
,
wxUserId
));
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/service/impl/BookGroupServiceImpl.java
View file @
ff1648f3
...
...
@@ -3,13 +3,14 @@ package com.pcloud.book.group.service.impl;
import
java.util.List
;
import
java.util.Map
;
import
com.pcloud.book.group.dto.PersonalQrcodeDTO
;
import
com.pcloud.book.group.dto.GroupCipherDTO
;
import
com.pcloud.book.group.dto.GroupUseDTO
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
import
com.pcloud.book.group.biz.BookGroupBiz
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
import
com.pcloud.book.group.service.BookGroupService
;
...
...
@@ -86,4 +87,48 @@ public class BookGroupServiceImpl implements BookGroupService {
return
ResponseHandleUtil
.
toResponse
(
bookGroupBiz
.
getBaseInfoBySceneId
(
sceneId
));
}
@Override
@RequestMapping
(
value
=
"updatePersonQrcode"
,
method
=
RequestMethod
.
POST
)
public
void
updatePersonQrcode
(
@RequestBody
PersonalQrcodeDTO
personalQrcodeDTO
)
throws
BizException
{
bookGroupBiz
.
updatePersonQrcode
(
personalQrcodeDTO
);
}
/**
* 获取暗号状态
*/
@ApiOperation
(
"获取暗号状态"
)
@GetMapping
(
"/getCipherState"
)
@Override
public
ResponseEntity
<
ResponseDto
<
Integer
>>
getCipherState
(
String
cipher
)
throws
BizException
{
return
ResponseHandleUtil
.
toResponse
(
bookGroupBiz
.
getCipherState
(
cipher
));
}
/**
* 更新密码状态为已使用
*/
@ApiOperation
(
"更新暗号状态为已使用"
)
@GetMapping
(
"/updateCipherStateToUsed"
)
@Override
public
void
updateCipherStateToUsed
(
String
cipher
,
String
wxId
)
throws
BizException
{
bookGroupBiz
.
updateCipherStateToUsed
(
cipher
,
wxId
);
}
/**
* 获取个人二维码方式群已使用和未使用数量
*/
@ApiOperation
(
"获取个人二维码方式群已使用和未使用数量"
)
@PostMapping
(
"/getGroupUse"
)
@Override
public
ResponseEntity
<
ResponseDto
<
GroupUseDTO
>>
getGroupUse
(
@RequestBody
List
<
String
>
altIds
)
throws
BizException
{
return
ResponseHandleUtil
.
toResponse
(
bookGroupBiz
.
getGroupUse
(
altIds
));
}
@ApiOperation
(
"获取暗号基本信息"
)
@GetMapping
(
"/getJoinGroupCipher"
)
@Override
public
ResponseEntity
<
ResponseDto
<
GroupCipherDTO
>>
getJoinGroupCipher
(
@RequestParam
(
"cipher"
)
String
cipher
)
throws
BizException
{
return
ResponseHandleUtil
.
toResponse
(
bookGroupBiz
.
getJoinGroupCipher
(
cipher
));
}
}
pcloud-service-book/src/main/java/com/pcloud/book/group/service/impl/WeixinQrcodeServiceImpl.java
View file @
ff1648f3
...
...
@@ -88,7 +88,7 @@ public class WeixinQrcodeServiceImpl implements WeixinQrcodeService {
@Override
@GetMapping
(
"getOneQrcode"
)
public
ResponseEntity
<
ResponseDto
<
WeixinQrcodeDTO
>>
getOneQrcode
()
{
return
ResponseHandleUtil
.
toResponse
(
weixinQrcodeBiz
.
getOneQrcode
());
return
ResponseHandleUtil
.
toResponse
(
weixinQrcodeBiz
.
getOneQrcode
(
null
));
}
@Override
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/tools/SendWeixinRequestTools.java
View file @
ff1648f3
...
...
@@ -18,6 +18,7 @@ import com.pcloud.common.utils.string.StringUtil;
import
com.sdk.wxgroup.ChangeNameVO
;
import
com.sdk.wxgroup.QrcodeVO
;
import
com.sdk.wxgroup.SendArticleMessageVO
;
import
com.sdk.wxgroup.SendMessageTypeEnum
;
import
com.sdk.wxgroup.SendPicMessageVO
;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
...
...
@@ -127,8 +128,8 @@ public class SendWeixinRequestTools {
}*/
}
@ParamLog
(
"
修改微信群名称
"
)
public
static
void
sendGuideMessage
(
List
<
ReplyMessageVO
>
replyMessages
,
String
robotId
,
String
weixinGroupId
,
String
ip
)
{
@ParamLog
(
"
发送欢迎语消息
"
)
public
static
void
sendGuideMessage
(
List
<
ReplyMessageVO
>
replyMessages
,
String
robotId
,
String
weixinGroupId
,
String
ip
,
Integer
code
)
{
//JedisClusterUtils.del("BOOK:WEIXINGROUP:GUIDEUSER" + weixinGroupId);
if
(
ListUtils
.
isEmpty
(
replyMessages
))
{
return
;
...
...
@@ -148,37 +149,40 @@ public class SendWeixinRequestTools {
}
}
}
sendMessage
(
sendMessageDTO
,
robotId
,
weixinGroupId
,
ip
);
sendMessage
(
sendMessageDTO
,
robotId
,
weixinGroupId
,
ip
,
code
);
i
++;
}
}
@ParamLog
(
"推送消息"
)
private
static
void
sendMessage
(
SendMessageDTO
sendMessageDTO
,
String
robotId
,
String
weixinGroupId
,
String
ip
)
{
private
static
void
sendMessage
(
SendMessageDTO
sendMessageDTO
,
String
robotId
,
String
weixinGroupId
,
String
ip
,
Integer
code
)
{
if
(
ReplyTypeEnum
.
TEXT
.
value
.
equals
(
sendMessageDTO
.
getReplyType
()))
{
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setContent
(
sendMessageDTO
.
getContent
());
sendTextMessageVO
.
setAltId
(
robotId
);
sendTextMessageVO
.
setGroupId
(
weixinGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendTextMessageVO
.
setIp
(
ip
);
sendTextMessageVO
.
setCode
(
code
);
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
}
else
if
(
ReplyTypeEnum
.
IMAGE
.
value
.
equals
(
sendMessageDTO
.
getReplyType
()))
{
SendPicMessageVO
sendPicMessageVO
=
new
SendPicMessageVO
();
sendPicMessageVO
.
setGroupId
(
weixinGroupId
);
sendPicMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendPicMessageVO
.
setAltId
(
robotId
);
sendPicMessageVO
.
setPicUrl
(
sendMessageDTO
.
getPicUrl
());
sendPicMessageVO
.
setIp
(
ip
);
sendPicMessageVO
.
setCode
(
code
);
WxGroupSDK
.
sendPicMessage
(
sendPicMessageVO
);
}
else
if
(
ReplyTypeEnum
.
APP
.
value
.
equals
(
sendMessageDTO
.
getReplyType
())
||
ReplyTypeEnum
.
LINK
.
value
.
equals
(
sendMessageDTO
.
getReplyType
()))
{
SendArticleMessageVO
sendArticleMessageVO
=
new
SendArticleMessageVO
();
sendArticleMessageVO
.
setAltId
(
robotId
);
sendArticleMessageVO
.
setDescription
(
sendMessageDTO
.
getDescription
());
sendArticleMessageVO
.
setLinkUrl
(
sendMessageDTO
.
getLinkUrl
());
sendArticleMessageVO
.
setGroupId
(
weixinGroupId
);
sendArticleMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendArticleMessageVO
.
setPicUrl
(
sendMessageDTO
.
getPicUrl
());
sendArticleMessageVO
.
setTitle
(
sendMessageDTO
.
getContent
());
sendArticleMessageVO
.
setIp
(
ip
);
sendArticleMessageVO
.
setCode
(
code
);
WxGroupSDK
.
sendArticleMessage
(
sendArticleMessageVO
);
}
}
...
...
@@ -188,7 +192,7 @@ public class SendWeixinRequestTools {
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setContent
(
nickNameStr
);
sendTextMessageVO
.
setAltId
(
robotId
);
sendTextMessageVO
.
setGroupId
(
weixinGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendTextMessageVO
.
setIp
(
ip
);
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
...
...
@@ -198,10 +202,11 @@ public class SendWeixinRequestTools {
if
(
StringUtil
.
isEmpty
(
url
))
{
return
url
;
}
final
String
s
=
"qrcode_id="
+
groupQrcodeId
+
"&classify_id="
+
classifyId
+
(
null
==
bookGroupId
?
""
:
"&book_group_id="
+
bookGroupId
);
if
(
url
.
contains
(
"?"
))
{
url
=
url
+
"&
qrcode_id="
+
groupQrcodeId
+
"&classify_id="
+
classifyId
+
"&book_group_id="
+
bookGroupId
;
url
=
url
+
"&
"
+
s
;
}
else
{
url
=
url
+
"?
qrcode_id="
+
groupQrcodeId
+
"&classify_id="
+
classifyId
+
"&book_group_id="
+
bookGroupId
;
url
=
url
+
"?
"
+
s
;
}
return
url
;
}
...
...
@@ -216,11 +221,11 @@ public class SendWeixinRequestTools {
}
sendTextMessageVO
.
setContent
(
recommendLanguage
);
sendTextMessageVO
.
setAltId
(
robotId
);
sendTextMessageVO
.
setGroupId
(
weixinGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendTextMessageVO
.
setIp
(
ip
);
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
SendPicMessageVO
sendPicMessageVO
=
new
SendPicMessageVO
();
sendPicMessageVO
.
setGroupId
(
weixinGroupId
);
sendPicMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendPicMessageVO
.
setAltId
(
robotId
);
sendPicMessageVO
.
setPicUrl
(
accountSettingDto
.
getQrcodeUrl
());
sendPicMessageVO
.
setIp
(
ip
);
...
...
@@ -228,10 +233,10 @@ public class SendWeixinRequestTools {
}
@ParamLog
(
"推送关键词回复消息"
)
public
static
void
sendKeywordMessage
(
ReplyKeywordDTO
replyKeywordDTO
,
String
robotId
,
String
weixinGroupId
,
String
ip
)
{
public
static
void
sendKeywordMessage
(
ReplyKeywordDTO
replyKeywordDTO
,
String
robotId
,
String
weixinGroupId
,
String
ip
,
Integer
code
)
{
SendMessageDTO
sendMessageDTO
=
new
SendMessageDTO
();
BeanUtils
.
copyProperties
(
replyKeywordDTO
,
sendMessageDTO
);
sendMessage
(
sendMessageDTO
,
robotId
,
weixinGroupId
,
ip
);
sendMessage
(
sendMessageDTO
,
robotId
,
weixinGroupId
,
ip
,
code
);
}
@ParamLog
(
"补充域名"
)
...
...
@@ -269,32 +274,44 @@ public class SendWeixinRequestTools {
}
@ParamLog
(
"欢迎语中推送关键词信息"
)
public
static
void
sendKeywordsInfo
(
List
<
KeywordDTO
>
keywords
,
String
robotId
,
String
weixinGroup
Id
,
String
ip
){
public
static
void
sendKeywordsInfo
(
List
<
KeywordDTO
>
keywords
,
String
robotId
,
String
toWx
Id
,
String
ip
){
if
(
ListUtils
.
isEmpty
(
keywords
))
{
return
;
}
String
content
=
""
;
String
Builder
content
=
new
StringBuilder
()
;
for
(
int
i
=
0
;
i
<
keywords
.
size
();
i
++)
{
KeywordDTO
keywordDTO
=
keywords
.
get
(
i
);
String
keyword
=
"关键词【"
+
keywordDTO
.
getKeywords
()
+
"】\n"
+
" "
+
keywordDTO
.
getGuide
();
if
(
content
.
length
()
+
keyword
.
length
()
>
300
)
{
sendTextMessage
(
content
,
robotId
,
weixinGroup
Id
,
ip
);
content
=
keyword
;
sendTextMessage
ToSelf
(
content
.
toString
(),
robotId
,
toWx
Id
,
ip
);
content
=
new
StringBuilder
(
keyword
)
;
}
else
{
content
=
content
+
keyword
;
content
.
append
(
keyword
)
;
}
if
(
i
!=
keywords
.
size
()
-
1
)
{
content
=
content
+
"\n"
;
content
.
append
(
"\n"
)
;
}
}
sendTextMessage
(
content
,
robotId
,
weixinGroupId
,
ip
);
// 1001282-施总需求,群不推送关键词,个人欢迎语推送关键词
// sendTextMessage(content, robotId, weixinGroupId, ip);
sendTextMessageToSelf
(
content
.
toString
(),
robotId
,
toWxId
,
ip
);
}
private
static
void
sendTextMessageToSelf
(
String
content
,
String
robotId
,
String
toWxId
,
String
ip
){
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setCode
(
SendMessageTypeEnum
.
SELF
.
getCode
());
sendTextMessageVO
.
setWxGroupId
(
toWxId
);
sendTextMessageVO
.
setContent
(
content
);
sendTextMessageVO
.
setAltId
(
robotId
);
sendTextMessageVO
.
setIp
(
ip
);
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
}
public
static
void
sendTextMessage
(
String
content
,
String
robotId
,
String
weixinGroupId
,
String
ip
){
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setContent
(
content
);
sendTextMessageVO
.
setAltId
(
robotId
);
sendTextMessageVO
.
setGroupId
(
weixinGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendTextMessageVO
.
setIp
(
ip
);
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
}
...
...
@@ -303,7 +320,7 @@ public class SendWeixinRequestTools {
// SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
// sendTextMessageVO.setContent("关键词1:a" + "\n" + "换行换行换行" + "\n");
// sendTextMessageVO.setAltId("wxid_qj200bf0key022");
// sendTextMessageVO.setGroupId("14108963419@chatroom");
// sendTextMessageVO.set
Wx
GroupId("14108963419@chatroom");
// WxGroupSDK.sendTextMessage(sendTextMessageVO);
}
...
...
@@ -349,7 +366,7 @@ public class SendWeixinRequestTools {
public
static
void
sendClockKeywordsInfo
(
List
<
BookClockKeywordDTO
>
keywords
,
String
robotId
,
String
weixinGroupId
,
String
ip
)
{
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setAltId
(
robotId
);
sendTextMessageVO
.
setGroupId
(
weixinGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendTextMessageVO
.
setIp
(
ip
);
if
(
ListUtils
.
isEmpty
(
keywords
))
{
return
;
...
...
pcloud-service-book/src/main/java/com/pcloud/book/group/vo/GroupQrcodeBaseInfoVO.java
View file @
ff1648f3
...
...
@@ -5,11 +5,13 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import
java.io.Serializable
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author lily
* @date 2019/5/6 16:08
*/
@Data
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
GroupQrcodeBaseInfoVO
implements
Serializable
{
...
...
@@ -22,36 +24,7 @@ public class GroupQrcodeBaseInfoVO implements Serializable {
@ApiModelProperty
(
"二维码地址"
)
private
String
qrcodeUrl
;
public
Long
getGroupQrcodeId
()
{
return
groupQrcodeId
;
}
public
void
setGroupQrcodeId
(
Long
groupQrcodeId
)
{
this
.
groupQrcodeId
=
groupQrcodeId
;
}
public
String
getGroupName
()
{
return
groupName
;
}
public
void
setGroupName
(
String
groupName
)
{
this
.
groupName
=
groupName
;
}
public
String
getQrcodeUrl
()
{
return
qrcodeUrl
;
}
public
void
setQrcodeUrl
(
String
qrcodeUrl
)
{
this
.
qrcodeUrl
=
qrcodeUrl
;
}
@Override
public
String
toString
()
{
return
"GroupQrcodeBaseInfoVO{"
+
"groupQrcodeId="
+
groupQrcodeId
+
", groupName='"
+
groupName
+
'\''
+
", qrcodeUrl='"
+
qrcodeUrl
+
'\''
+
'}'
;
}
@ApiModelProperty
(
value
=
"二维码地址"
,
hidden
=
true
)
private
String
weixinGroupId
;
}
pcloud-service-book/src/main/java/com/pcloud/book/keywords/biz/BookGuideBiz.java
View file @
ff1648f3
...
...
@@ -5,6 +5,7 @@ import com.pcloud.book.keywords.vo.GuideVO;
import
com.pcloud.book.keywords.vo.ReplyMessageVO
;
import
com.pcloud.book.keywords.vo.SetGuideVO
;
import
com.pcloud.book.keywords.vo.UpdateGuideVO
;
import
com.pcloud.wechatgroup.message.dto.AgreeAddUserDTO
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -14,6 +15,11 @@ import java.util.Map;
* @date 2019/4/23 15:46
*/
public
interface
BookGuideBiz
{
/**
* 同意加好友发送欢迎语
*/
void
sendGuide
(
AgreeAddUserDTO
agreeAddUserDTO
);
/**
* @Author:lili
* @Desr:新增欢迎语
...
...
pcloud-service-book/src/main/java/com/pcloud/book/keywords/biz/BookKeywordBiz.java
View file @
ff1648f3
...
...
@@ -6,6 +6,7 @@ import com.pcloud.book.keywords.dto.ReplyKeywordDTO;
import
com.pcloud.book.keywords.dto.ServiceResourceDTO
;
import
com.pcloud.book.keywords.vo.*
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.sdk.wxgroup.SendMessageTypeEnum
;
import
java.util.List
;
...
...
@@ -70,7 +71,7 @@ public interface BookKeywordBiz {
* @Desr: 回复关键词消息
* @Date:2019/5/5 16:28
*/
void
sendKeywordMessage
(
String
content
,
String
weixinGroupId
,
String
userWxId
,
String
robotId
,
String
ip
);
void
sendKeywordMessage
(
String
content
,
String
weixinGroupId
,
String
userWxId
,
String
robotId
,
String
ip
,
Integer
code
);
/**
* 关键词统计
...
...
pcloud-service-book/src/main/java/com/pcloud/book/keywords/biz/impl/BookGuideBizImpl.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
keywords
.
biz
.
impl
;
import
com.pcloud.book.base.exception.BookBizException
;
import
com.pcloud.book.book.constant.BookConstant
;
import
com.pcloud.book.clock.check.BookClockCheck
;
import
com.pcloud.book.clock.dao.BookClockKeywordDao
;
import
com.pcloud.book.clock.dto.BookClockKeywordDTO
;
...
...
@@ -13,8 +14,11 @@ import com.pcloud.book.group.dao.AppTouchRecordDao;
import
com.pcloud.book.group.dao.BookGroupClassifyDao
;
import
com.pcloud.book.group.dao.BookGroupDao
;
import
com.pcloud.book.group.dao.GroupQrcodeDao
;
import
com.pcloud.book.group.dao.JoinGroupCipherDao
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
import
com.pcloud.book.group.dto.GroupClassifyQrcodeDTO
;
import
com.pcloud.book.group.dto.GroupQrcodeDTO
;
import
com.pcloud.book.group.dto.JoinGroupCipherDTO
;
import
com.pcloud.book.group.dto.PushAddUserMessageDTO
;
import
com.pcloud.book.group.entity.AppTouchRecord
;
import
com.pcloud.book.group.entity.GroupQrcode
;
...
...
@@ -25,19 +29,30 @@ import com.pcloud.book.keywords.biz.BookGuideBiz;
import
com.pcloud.book.keywords.biz.BookKeywordBiz
;
import
com.pcloud.book.keywords.dao.BookGuideDao
;
import
com.pcloud.book.keywords.dao.BookGuideReplyDao
;
import
com.pcloud.book.keywords.dao.KeywordDao
;
import
com.pcloud.book.keywords.dto.GuideDTO
;
import
com.pcloud.book.keywords.dto.KeywordDTO
;
import
com.pcloud.book.keywords.dto.ReplyKeywordDTO
;
import
com.pcloud.book.keywords.entity.BookGuide
;
import
com.pcloud.book.keywords.entity.BookGuideReply
;
import
com.pcloud.book.keywords.entity.Keyword
;
import
com.pcloud.book.keywords.enums.ReplyTypeEnum
;
import
com.pcloud.book.keywords.vo.GuideVO
;
import
com.pcloud.book.keywords.vo.ReplyMessageVO
;
import
com.pcloud.book.keywords.vo.SetGuideVO
;
import
com.pcloud.book.keywords.vo.UpdateGuideVO
;
import
com.pcloud.book.util.properties.BookProps
;
import
com.pcloud.channelcenter.wechat.dto.AccountSettingDto
;
import
com.pcloud.common.core.aspect.ParamLog
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.cache.redis.JedisClusterUtils
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.wechatgroup.message.dto.AgreeAddUserDTO
;
import
com.sdk.wxgroup.AddToGroupVO
;
import
com.sdk.wxgroup.SendGroupInviteVO
;
import
com.sdk.wxgroup.SendMessageTypeEnum
;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -87,6 +102,116 @@ public class BookGuideBizImpl implements BookGuideBiz {
private
GroupQrcodeDao
groupQrcodeDao
;
@Autowired
private
BookGroupClassifyDao
bookGroupClassifyDao
;
@Autowired
private
JoinGroupCipherDao
joinGroupCipherDao
;
@Autowired
private
KeywordDao
keywordDao
;
@ParamLog
(
"同意加好友发送欢迎语"
)
@Override
public
void
sendGuide
(
AgreeAddUserDTO
agreeAddUserDTO
)
{
if
(
null
==
agreeAddUserDTO
||
StringUtil
.
isBlank
(
agreeAddUserDTO
.
getRobotWxId
())
||
StringUtil
.
isBlank
(
agreeAddUserDTO
.
getUserWxId
()))
{
log
.
info
(
"[同意加好友发送欢迎语] 参数为空 agreeAddUserDTO:{}"
,
agreeAddUserDTO
);
return
;
}
String
cipher
=
agreeAddUserDTO
.
getCipher
();
if
(
StringUtil
.
isBlank
(
cipher
))
{
cipher
=
wechatGroupConsr
.
getCipherByRobotAndUserWxId
(
agreeAddUserDTO
.
getRobotWxId
(),
agreeAddUserDTO
.
getUserWxId
());
}
if
(
StringUtil
.
isBlank
(
cipher
))
{
log
.
info
(
"[同意加好友发送欢迎语] 暗号为空 agreeAddUserDTO:{}"
,
agreeAddUserDTO
);
return
;
}
final
JoinGroupCipherDTO
dto
=
joinGroupCipherDao
.
getDTOByCipher
(
cipher
);
//获取群
final
String
wxGroupId
=
bookGroupClassifyBiz
.
getWxGroupIdByClassifyIdAndWechatId
(
dto
.
getClassifyId
(),
dto
.
getWechatUserId
());
if
(
agreeAddUserDTO
.
getFirst
()
!=
null
&&
agreeAddUserDTO
.
getFirst
())
{
// 如果是第一次就只发欢迎文案
SendTextMessageVO
vo
=
new
SendTextMessageVO
();
// vo.setContent("你好,我是本书智能小助手,请回复你的进群暗号,获取本书资源服务,以及入群链接如果忘了进群暗号,请重新扫描书上的二维码,点击入群即可获取");
vo
.
setContent
(
"你好,我是本书智能小助手。请输入关键词获取本书相应的资源服务。"
);
vo
.
setCode
(
SendMessageTypeEnum
.
SELF
.
getCode
());
vo
.
setWxId
(
agreeAddUserDTO
.
getRobotWxId
());
vo
.
setAltId
(
agreeAddUserDTO
.
getRobotWxId
());
vo
.
setWxGroupId
(
agreeAddUserDTO
.
getUserWxId
());
vo
.
setIp
(
agreeAddUserDTO
.
getIp
());
log
.
info
(
"[同意加好友发送欢迎语] : {}"
,
vo
);
WxGroupSDK
.
sendTextMessage
(
vo
);
}
// 如果不是第一次就发关键词
// 根据暗号获取分类id和bookGroupId推送关键词欢迎语
List
<
KeywordDTO
>
keywords
=
bookKeywordBiz
.
listFiveKeyword
(
dto
.
getClassifyId
(),
dto
.
getBookGroupId
());
//发主打资源
sendMainKeyword
(
keywords
,
agreeAddUserDTO
,
dto
,
wxGroupId
);
//发关键词列表
SendWeixinRequestTools
.
sendKeywordsInfo
(
keywords
,
agreeAddUserDTO
.
getRobotWxId
(),
agreeAddUserDTO
.
getUserWxId
(),
agreeAddUserDTO
.
getIp
());
// 拉群
final
Integer
peopleCounts
=
WxGroupSDK
.
getPeopleCounts
(
wxGroupId
,
agreeAddUserDTO
.
getRobotWxId
(),
agreeAddUserDTO
.
getIp
());
// 邀请好友进群有次数限制,目前测试为每天只能拉30-40人就操作频繁,所以在此加判断,超过30人或者群人数超过30人就发送邀请链接
final
String
num
=
JedisClusterUtils
.
get
(
BookConstant
.
WXGROUP_ADD_USER_NUM
+
agreeAddUserDTO
.
getRobotWxId
());
log
.
info
(
"[同意加好友发送欢迎语] 拉群 agreeAddUserDTO:{}, wxGroupId:{}, peopleCounts:{}, num:{}"
,
agreeAddUserDTO
,
wxGroupId
,
peopleCounts
,
num
);
if
(
StringUtil
.
isBlank
(
wxGroupId
))
{
log
.
info
(
"[同意加好友发送欢迎语] 拉群 没有找到群 bookGroupClassifyBiz.getGroupQrcode4ClassifyWechat JoinGroupCipherDTO :{}"
,
dto
);
return
;
}
// 生产环境限制30,其它5和10,全部使用群链接
final
boolean
isPro
=
"pro"
.
equalsIgnoreCase
(
BookProps
.
getSystemEnv
());
if
((!
StringUtil
.
isBlank
(
num
)
&&
Integer
.
parseInt
(
num
)
>=
(
isPro
?
30
:
5
))
||
peopleCounts
>=
(
isPro
?
30
:
10
))
{
SendGroupInviteVO
sendGroupInviteVO
=
new
SendGroupInviteVO
();
sendGroupInviteVO
.
setAltId
(
agreeAddUserDTO
.
getRobotWxId
());
sendGroupInviteVO
.
setWxId
(
agreeAddUserDTO
.
getUserWxId
());
sendGroupInviteVO
.
setWxGroupId
(
wxGroupId
);
WxGroupSDK
.
sendGroupInvite
(
sendGroupInviteVO
);
log
.
info
(
"[同意加好友发送欢迎语] 发送进群链接 sendGroupInviteVO:{}"
,
sendGroupInviteVO
);
// 进群之后更新群qrCodeId
updateQrcodeForCipher
(
wxGroupId
,
cipher
,
agreeAddUserDTO
.
getUserWxId
());
return
;
}
AddToGroupVO
vo1
=
new
AddToGroupVO
();
vo1
.
setWxGroupId
(
wxGroupId
);
vo1
.
setWxId
(
agreeAddUserDTO
.
getUserWxId
());
vo1
.
setAltId
(
agreeAddUserDTO
.
getRobotWxId
());
vo1
.
setIp
(
agreeAddUserDTO
.
getIp
());
log
.
info
(
"[同意加好友发送欢迎语 拉群] AddToGroupVO :{}"
,
vo1
);
WxGroupSDK
.
addToGroup
(
vo1
);
// 进群之后更新群qrCodeId
updateQrcodeForCipher
(
wxGroupId
,
cipher
,
agreeAddUserDTO
.
getUserWxId
());
// 拉一次+1
if
(
StringUtil
.
isBlank
(
num
))
{
JedisClusterUtils
.
getSet
(
BookConstant
.
WXGROUP_ADD_USER_NUM
+
agreeAddUserDTO
.
getRobotWxId
(),
"1"
,
3600
*
24
);
}
else
{
JedisClusterUtils
.
incr
(
BookConstant
.
WXGROUP_ADD_USER_NUM
+
agreeAddUserDTO
.
getRobotWxId
());
}
}
@ParamLog
(
"进群之后更新群qrCodeId"
)
private
void
updateQrcodeForCipher
(
String
wxGroupId
,
String
cipher
,
String
userWxId
){
log
.
info
(
"根据群id查询群信息wxGroupId"
,
wxGroupId
);
GroupQrcodeDTO
groupQrcodeInfo
=
groupQrcodeDao
.
getGroupQrcodeInfo
(
wxGroupId
);
log
.
info
(
"根据群id查询群信息groupQrcodeInfo"
,
groupQrcodeInfo
.
toString
());
log
.
info
(
"更新暗号的群cipher="
+
cipher
+
"wxId="
+
userWxId
+
"qrcodeId="
+
groupQrcodeInfo
.
getId
());
joinGroupCipherDao
.
updateQrcodeId
(
cipher
,
userWxId
,
groupQrcodeInfo
.
getId
());
}
@ParamLog
(
"发送主打资源"
)
private
void
sendMainKeyword
(
List
<
KeywordDTO
>
keywords
,
AgreeAddUserDTO
agreeAddUserDTO
,
JoinGroupCipherDTO
dto
,
String
wxGroupId
)
{
if
(!
ListUtils
.
isEmpty
(
keywords
))
{
KeywordDTO
keywordDTO
=
keywords
.
get
(
0
);
Keyword
keyword
=
keywordDao
.
getById
(
keywordDTO
.
getKeywordId
());
GroupQrcodeDTO
groupQrcodeInfo
=
groupQrcodeDao
.
getGroupQrcodeInfo
(
wxGroupId
);
if
(
keyword
!=
null
&&
groupQrcodeInfo
!=
null
)
{
ReplyKeywordDTO
replyKeywordDTO
=
new
ReplyKeywordDTO
();
BeanUtils
.
copyProperties
(
keyword
,
replyKeywordDTO
);
if
(
ReplyTypeEnum
.
APP
.
value
.
equals
(
replyKeywordDTO
.
getReplyType
())
||
ReplyTypeEnum
.
LINK
.
value
.
equals
(
replyKeywordDTO
.
getReplyType
()))
{
BookGroupDTO
bookGroupDTO
=
bookGroupDao
.
getDTOById
(
dto
.
getBookGroupId
());
AccountSettingDto
accountSettingDto
=
qrcodeSceneConsr
.
getWechatInfo
(
bookGroupDTO
.
getChannelId
());
String
linkUrl
=
SendWeixinRequestTools
.
splitUrlNew
(
accountSettingDto
,
replyKeywordDTO
.
getLinkUrl
(),
dto
.
getBookGroupId
(),
dto
.
getClassifyId
(),
groupQrcodeInfo
.
getId
());
replyKeywordDTO
.
setLinkUrl
(
linkUrl
);
}
SendWeixinRequestTools
.
sendKeywordMessage
(
replyKeywordDTO
,
agreeAddUserDTO
.
getRobotWxId
(),
agreeAddUserDTO
.
getUserWxId
(),
agreeAddUserDTO
.
getIp
(),
SendMessageTypeEnum
.
SELF
.
getCode
());
}
}
}
@Override
@ParamLog
(
"新增欢迎语"
)
...
...
@@ -223,37 +348,12 @@ public class BookGuideBizImpl implements BookGuideBiz {
log
.
info
(
"[关键词消息回复] robotId is null robotId:{},weixinGroupId:{}"
,
robotId
,
weixinGroupId
);
robotId
=
wechatGroupConsr
.
getRobotIdByGroupId
(
weixinGroupId
);
}
//String robotId = "wxid_e6zsl8oohcnl22";
// 判断是否需要发送
// boolean canSend = false;
// // 查看群成员
// GroupInfoVO groupInfoVO = WxGroupSDK.getGroupInfo(weixinGroupId, robotId);
// log.info("[查看群成员] : groupInfoVO:{}",groupInfoVO);
// if (!CollectionUtils.isEmpty(groupInfoVO.getIdList())) {
// // 查看该用户weixinid
// final List<String> nickName = wechatGroupConsr.getWxUserIdsByNickName(pushAddUserMessageDTO.getNickName());
// log.info("[查看该用户weixinid] : nickName:{}",nickName);
// if(!CollectionUtils.isEmpty(nickName)) {
// final Map<String, Boolean> map = Maps.newHashMap();
// for (String s : groupInfoVO.getIdList()) {
// map.put(s, true);
// }
// for (String s : nickName) {
// if (null != map.get(s) && map.get(s)) {
// // 若在群设置true
// canSend = true;
// break;
// }
// }
// }
// }
// 判断是否黑名单
final
Boolean
kickUser
=
wechatGroupConsr
.
isKickUser
(
pushAddUserMessageDTO
.
getNickName
(),
weixinGroupId
);
// log.info("[推送欢迎语消息]:pushAddUserMessageDTO:{},kickUser:{},canSend:{}", pushAddUserMessageDTO, kickUser,canSend);
log
.
info
(
"[推送欢迎语消息]:pushAddUserMessageDTO:{},kickUser:{}"
,
pushAddUserMessageDTO
,
kickUser
);
// 在群,且非黑名单
// canSend = canSend && !kickUser;
if
(
kickUser
)
{
if
(
null
!=
kickUser
&&
kickUser
)
{
log
.
info
(
"[推送欢迎语消息]:不推送"
);
return
;
}
...
...
@@ -265,25 +365,26 @@ public class BookGuideBizImpl implements BookGuideBiz {
}
//获取公众号基本信息
AccountSettingDto
wechatInfo
=
qrcodeSceneConsr
.
getWechatInfo
(
classifyQrcodeInfo
.
getChannelId
());
//获取关键词信息(改成10个了)
List
<
KeywordDTO
>
keywords
=
bookKeywordBiz
.
listFiveKeyword
(
classifyQrcodeInfo
.
getClassifyId
(),
classifyQrcodeInfo
.
getBookGroupId
());
Boolean
isHaveKeywords
=
!
ListUtils
.
isEmpty
(
keywords
);
//获取关键词信息(改成10个了)
刘娜需求 1001282 群不推送关键词
//
List<KeywordDTO> keywords = bookKeywordBiz.listFiveKeyword(classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getBookGroupId());
//
Boolean isHaveKeywords = !ListUtils.isEmpty(keywords);
if
(
ListUtils
.
isEmpty
(
replyMessages
))
{
//获取群名称
GroupQrcodeBaseInfoVO
groupInfo
=
groupQrcodeBiz
.
getBaseById
(
classifyQrcodeInfo
.
getGroupQrcodeId
());
//推送消息
SendWeixinRequestTools
.
sendDefaultMessage
(
groupInfo
==
null
?
""
:
groupInfo
.
getGroupName
(),
robotId
,
weixinGroupId
,
isHaveKeywords
,
pushAddUserMessageDTO
.
getIp
());
//推送消息 刘娜需求 1001282 群不推送关键词
// SendWeixinRequestTools.sendDefaultMessage(groupInfo == null ? "" : groupInfo.getGroupName(), robotId, weixinGroupId, isHaveKeywords, pushAddUserMessageDTO.getIp());
SendWeixinRequestTools
.
sendDefaultMessage
(
groupInfo
==
null
?
""
:
groupInfo
.
getGroupName
(),
robotId
,
weixinGroupId
,
false
,
pushAddUserMessageDTO
.
getIp
());
}
else
{
//处理链接
handleUrl
(
replyMessages
,
wechatInfo
,
classifyQrcodeInfo
);
//推送消息
SendWeixinRequestTools
.
sendGuideMessage
(
replyMessages
,
robotId
,
weixinGroupId
,
pushAddUserMessageDTO
.
getIp
());
SendWeixinRequestTools
.
sendGuideMessage
(
replyMessages
,
robotId
,
weixinGroupId
,
pushAddUserMessageDTO
.
getIp
()
,
SendMessageTypeEnum
.
GROUP
.
getCode
()
);
//新增欢迎语应用触发记录
addGuideAppTouchRecord
(
replyMessages
,
weixinGroupId
,
classifyQrcodeInfo
.
getBookGroupId
(),
classifyQrcodeInfo
.
getClassifyId
());
}
//获取关键词信息(改成10个了)
SendWeixinRequestTools
.
sendKeywordsInfo
(
keywords
,
robotId
,
weixinGroupId
,
pushAddUserMessageDTO
.
getIp
());
//如果设置了群学习报告,加一个群学习报告的关键词
,如果群开启了猜谜语,推送猜谜语关键词
//获取关键词信息(改成10个了)
刘娜需求 1001282 群不推送关键词
//
SendWeixinRequestTools.sendKeywordsInfo(keywords, robotId, weixinGroupId, pushAddUserMessageDTO.getIp());
//如果设置了群学习报告,加一个群学习报告的关键词
pushLearningReport
(
classifyQrcodeInfo
,
robotId
,
weixinGroupId
,
pushAddUserMessageDTO
.
getIp
());
if
(
bookGuide
!=
null
&&
bookGuide
.
getIsRecommend
()
!=
null
&&
bookGuide
.
getIsRecommend
()
==
1
)
{
//推送公众号消息
...
...
pcloud-service-book/src/main/java/com/pcloud/book/keywords/biz/impl/BookKeywordBizImpl.java
View file @
ff1648f3
...
...
@@ -2,6 +2,7 @@ package com.pcloud.book.keywords.biz.impl;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Sets
;
import
com.pcloud.appcenter.app.dto.AppDto
;
import
com.pcloud.book.base.exception.BookBizException
;
...
...
@@ -10,6 +11,7 @@ import com.pcloud.book.consumer.app.AppConsr;
import
com.pcloud.book.consumer.channel.QrcodeSceneConsr
;
import
com.pcloud.book.consumer.resource.ProductConsr
;
import
com.pcloud.book.consumer.wechatgroup.WechatGroupConsr
;
import
com.pcloud.book.group.biz.BookGroupBiz
;
import
com.pcloud.book.group.biz.BookGroupClassifyBiz
;
import
com.pcloud.book.group.dao.AppTouchRecordDao
;
import
com.pcloud.book.group.dao.BookGroupClassifyDao
;
...
...
@@ -17,11 +19,13 @@ import com.pcloud.book.group.dao.BookGroupDao;
import
com.pcloud.book.group.dao.GroupQrcodeDao
;
import
com.pcloud.book.group.dto.BookGroupDTO
;
import
com.pcloud.book.group.dto.GroupClassifyQrcodeDTO
;
import
com.pcloud.book.group.dto.JoinGroupCipherDTO
;
import
com.pcloud.book.group.entity.AppTouchRecord
;
import
com.pcloud.book.group.entity.GroupQrcode
;
import
com.pcloud.book.group.enums.TouchTypeEnum
;
import
com.pcloud.book.group.tools.SendWeixinRequestTools
;
import
com.pcloud.book.group.vo.ClassifyNameVO
;
import
com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO
;
import
com.pcloud.book.keywords.biz.BookKeywordBiz
;
import
com.pcloud.book.keywords.dao.BookKeywordDao
;
import
com.pcloud.book.keywords.dao.BookKeywordRecordDao
;
...
...
@@ -34,7 +38,14 @@ import com.pcloud.book.keywords.entity.BookKeyword;
import
com.pcloud.book.keywords.entity.BookKeywordRecord
;
import
com.pcloud.book.keywords.entity.Keyword
;
import
com.pcloud.book.keywords.enums.ReplyTypeEnum
;
import
com.pcloud.book.keywords.vo.*
;
import
com.pcloud.book.keywords.vo.DeleteKeywordVO
;
import
com.pcloud.book.keywords.vo.KeywordVO
;
import
com.pcloud.book.keywords.vo.ListKeywordParam
;
import
com.pcloud.book.keywords.vo.ListKeywordVO
;
import
com.pcloud.book.keywords.vo.QrWeixinParam
;
import
com.pcloud.book.keywords.vo.SetKeywordVO
;
import
com.pcloud.book.keywords.vo.SetRankVO
;
import
com.pcloud.book.keywords.vo.UpdateKeywordVO
;
import
com.pcloud.channelcenter.base.constants.ChannelEnum
;
import
com.pcloud.channelcenter.qrcode.service.QrcodeSceneService
;
import
com.pcloud.channelcenter.qrcode.vo.MessageBookVO
;
...
...
@@ -53,6 +64,7 @@ import com.pcloud.common.utils.string.StringUtil;
import
com.pcloud.resourcecenter.product.dto.ProductDto
;
import
com.pcloud.resourcecenter.product.dto.ProductTypeDto
;
import
com.pcloud.wechatgroup.group.dto.RobotReplyDTO
;
import
com.sdk.wxgroup.SendMessageTypeEnum
;
import
org.apache.commons.collections.MapUtils
;
import
org.springframework.beans.BeanUtils
;
...
...
@@ -68,6 +80,7 @@ import java.util.Date;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.TreeSet
;
import
java.util.stream.Collectors
;
...
...
@@ -110,6 +123,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
private
BookGroupClassifyDao
bookGroupClassifyDao
;
@Autowired
private
QrcodeSceneService
qrcodeSceneService
;
@Autowired
private
BookGroupBiz
bookGroupBiz
;
@Override
@ParamLog
(
"新增关键词"
)
...
...
@@ -411,11 +426,153 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
@Override
@ParamLog
(
"关键词消息回复"
)
public
void
sendKeywordMessage
(
String
content
,
String
weixinGroupId
,
String
userWxId
,
String
robotId
,
String
ip
)
{
public
void
sendKeywordMessage
(
String
content
,
String
weixinGroupId
,
String
userWxId
,
String
robotId
,
String
ip
,
Integer
code
)
{
// 刘娜需求 1001282 群不推送关键词
if
(
SendMessageTypeEnum
.
GROUP
.
getCode
().
equals
(
code
))
{
this
.
sendKeywordMessageToGroup
(
content
,
weixinGroupId
,
userWxId
,
robotId
,
ip
,
code
);
return
;
}
//个人机器人接收消息的时候,weixinGroupId就是userWxId,也就是用户的id,robotId是接收的机器人的id
//简单过滤非关键词的词
if
(
StringUtil
.
isEmpty
(
content
)
||
content
.
length
()
>
20
)
{
return
;
}
// TODO 根据小号和用户id获取所有相关的分类id,若该关键词存在多本书,则组装成文本加链接一次发送
final
List
<
JoinGroupCipherDTO
>
dtos
=
bookGroupBiz
.
getClassifyIdsByWxIdAndAltId
(
userWxId
,
robotId
);
if
(
CollectionUtils
.
isEmpty
(
dtos
))
{
log
.
info
(
"[关键词消息回复] classifyIds is null"
);
return
;
}
final
Set
<
Long
>
cIds
=
Sets
.
newHashSet
();
final
Set
<
Long
>
bIds
=
Sets
.
newHashSet
();
Map
<
Long
,
Long
>
classifyToBookGroupMap
=
new
HashMap
<>();
Map
<
Long
,
Long
>
classifyToQrcodeMap
=
new
HashMap
<>();
for
(
JoinGroupCipherDTO
dto
:
dtos
)
{
cIds
.
add
(
dto
.
getClassifyId
());
bIds
.
add
(
dto
.
getBookGroupId
());
classifyToBookGroupMap
.
put
(
dto
.
getClassifyId
(),
dto
.
getBookGroupId
());
classifyToQrcodeMap
.
put
(
dto
.
getClassifyId
(),
dto
.
getQrcodeId
());
}
final
List
<
Long
>
classifyIds
=
Lists
.
newArrayList
(
cIds
);
List
<
ReplyKeywordDTO
>
replyKeywordDTOs
=
new
ArrayList
<>();
Map
<
Long
,
Long
>
keywordClassifyIdMap
=
new
HashMap
<>();
List
<
Long
>
keywordIds
=
new
ArrayList
<>();
for
(
Long
classifyId
:
classifyIds
)
{
//获取匹配关键词
ReplyKeywordDTO
replyKeywordDTO
=
bookKeywordDao
.
getKeywordId
(
classifyId
,
classifyToBookGroupMap
.
get
(
classifyId
),
content
);
if
(
replyKeywordDTO
==
null
)
{
continue
;
}
keywordClassifyIdMap
.
put
(
replyKeywordDTO
.
getKeywordId
(),
classifyId
);
//避免一本书下两个分类的关键词重复
if
(!
keywordIds
.
contains
(
replyKeywordDTO
.
getKeywordId
()))
{
replyKeywordDTOs
.
add
(
replyKeywordDTO
);
keywordIds
.
add
(
replyKeywordDTO
.
getKeywordId
());
}
}
final
List
<
GroupClassifyQrcodeDTO
>
qrcodeDTOS
=
bookGroupClassifyBiz
.
listClassifyQrcodeInfo
(
classifyIds
);
if
(
CollectionUtils
.
isEmpty
(
replyKeywordDTOs
))
{
log
.
info
(
"[关键词消息回复] keywordIds is null"
);
return
;
}
if
(
CollectionUtils
.
isEmpty
(
qrcodeDTOS
))
{
log
.
info
(
"[关键词消息回复] qrcodeDTOS is null"
);
return
;
}
final
Map
<
Long
,
GroupClassifyQrcodeDTO
>
classifyMap
=
qrcodeDTOS
.
stream
().
collect
(
Collectors
.
toMap
(
GroupClassifyQrcodeDTO:
:
getClassifyId
,
p
->
p
,
(
v1
,
v2
)
->
v2
));
// 记录循环插入,消息一条发送
for
(
ReplyKeywordDTO
replyKeywordDTO
:
replyKeywordDTOs
)
{
log
.
info
(
"[关键词回复原始数据] : sendKeywordMessage replyKeywordDTO :{}, robotId:{}, altId:{}"
,
replyKeywordDTO
,
robotId
,
userWxId
);
// 处理链接地址
Long
classifyId
=
keywordClassifyIdMap
.
get
(
replyKeywordDTO
.
getKeywordId
());
final
GroupClassifyQrcodeDTO
dto
=
classifyMap
.
get
(
classifyId
);
if
(
null
==
dto
)
{
log
.
info
(
"[关键词消息回复] 分类信息为空 replyKeywordDTO:{}; classifyMap:{}"
,
replyKeywordDTO
,
classifyMap
);
continue
;
}
final
boolean
isApp
=
ReplyTypeEnum
.
APP
.
value
.
equals
(
replyKeywordDTO
.
getReplyType
());
final
boolean
isLink
=
ReplyTypeEnum
.
LINK
.
value
.
equals
(
replyKeywordDTO
.
getReplyType
());
Long
qrcodeId
=
classifyToQrcodeMap
.
get
(
dto
.
getClassifyId
());
GroupQrcodeBaseInfoVO
qrcodeInfo
=
groupQrcodeDao
.
getBaseById
(
qrcodeId
);
if
(
isApp
||
isLink
)
{
Long
channelId
=
dto
.
getChannelId
();
if
(
isApp
)
{
final
AppDto
app
=
appConsr
.
getBaseById
(
replyKeywordDTO
.
getServeId
());
if
(
null
!=
app
)
{
channelId
=
app
.
getChannelId
();
}
}
AccountSettingDto
accountSettingDto
=
qrcodeSceneConsr
.
getWechatInfo
(
channelId
);
String
linkUrl
=
SendWeixinRequestTools
.
splitUrlNew
(
accountSettingDto
,
replyKeywordDTO
.
getLinkUrl
(),
dto
.
getBookGroupId
(),
dto
.
getClassifyId
(),
qrcodeId
);
replyKeywordDTO
.
setLinkUrl
(
linkUrl
);
if
(!
StringUtil
.
isEmpty
(
linkUrl
))
{
replyKeywordDTO
.
setShortLinkUrl
(
UrlUtils
.
getShortUrl4Own
(
linkUrl
));
}
}
String
redisContent
=
JedisClusterUtils
.
getJson
(
"BOOK:KEYWORD:"
+
userWxId
+
"-"
+
replyKeywordDTO
.
getKeywordId
(),
String
.
class
);
// 同一群10秒内不回复同一关键词
if
(
insertBookKeywordRecord
(
qrcodeInfo
.
getWeixinGroupId
(),
userWxId
,
replyKeywordDTO
,
dto
,
redisContent
))
{
return
;
}
//获取推送消息机器人
// 20190704改为收发一体
if
(
StringUtil
.
isBlank
(
robotId
))
{
log
.
info
(
"[关键词消息回复] robotId is null content:{}, robotId:{},weixinGroupId:{}"
,
content
,
robotId
,
qrcodeInfo
.
getWeixinGroupId
());
robotId
=
wechatGroupConsr
.
getRobotIdByGroupId
(
qrcodeInfo
.
getWeixinGroupId
());
}
log
.
info
(
"[关键词回复发送数据] : sendKeywordMessage replyKeywordDTO :{}, robotId:{}, weixinGroupId:{}"
,
replyKeywordDTO
,
robotId
,
qrcodeInfo
.
getWeixinGroupId
());
//新增关键词触发记录
addKeywordAppTouchRecord
(
replyKeywordDTO
,
qrcodeInfo
.
getWeixinGroupId
(),
dto
.
getClassifyId
(),
dto
.
getBookGroupId
());
}
// 单条还是按原来的发送
if
(
replyKeywordDTOs
.
size
()
<=
1
)
{
SendWeixinRequestTools
.
sendKeywordMessage
(
replyKeywordDTOs
.
get
(
0
),
robotId
,
userWxId
,
ip
,
code
);
}
else
{
// 多条时文字,应用,链接组装成一条发送
ReplyKeywordDTO
d
=
new
ReplyKeywordDTO
();
final
StringBuilder
sb
=
new
StringBuilder
();
for
(
ReplyKeywordDTO
dto
:
replyKeywordDTOs
)
{
if
(
ReplyTypeEnum
.
APP
.
value
.
equals
(
dto
.
getReplyType
())
||
ReplyTypeEnum
.
LINK
.
value
.
equals
(
dto
.
getReplyType
()))
{
sb
.
append
(
dto
.
getKeywords
()).
append
(
":"
).
append
(
dto
.
getShortLinkUrl
()).
append
(
"\n"
);
}
else
if
(
ReplyTypeEnum
.
TEXT
.
value
.
equals
(
dto
.
getReplyType
())){
sb
.
append
(
dto
.
getKeywords
()).
append
(
":"
).
append
(
dto
.
getContent
()).
append
(
"\n"
);
}
else
if
(
ReplyTypeEnum
.
IMAGE
.
value
.
equals
(
dto
.
getReplyType
()))
{
SendWeixinRequestTools
.
sendKeywordMessage
(
dto
,
robotId
,
userWxId
,
ip
,
code
);
}
}
d
.
setContent
(
sb
.
toString
());
d
.
setReplyType
(
ReplyTypeEnum
.
TEXT
.
value
);
SendWeixinRequestTools
.
sendKeywordMessage
(
d
,
robotId
,
userWxId
,
ip
,
code
);
}
}
private
boolean
insertBookKeywordRecord
(
String
weixinGroupId
,
String
userWxId
,
ReplyKeywordDTO
replyKeywordDTO
,
GroupClassifyQrcodeDTO
dto
,
String
redisContent
)
{
if
(
redisContent
!=
null
)
{
insertBookKeywordRecord
(
dto
,
replyKeywordDTO
.
getKeywordId
(),
userWxId
,
weixinGroupId
,
false
);
log
.
info
(
"[关键词消息回复] redisContent:{} insertBookKeywordRecord return"
,
redisContent
);
return
true
;
}
else
{
JedisClusterUtils
.
setJson
(
"BOOK:KEYWORD:"
+
weixinGroupId
+
"-"
+
replyKeywordDTO
.
getKeywordId
(),
replyKeywordDTO
.
getKeywordId
(),
10
);
insertBookKeywordRecord
(
dto
,
replyKeywordDTO
.
getKeywordId
(),
userWxId
,
weixinGroupId
,
true
);
}
return
false
;
}
/**
* 原有的推送群关键词改为推送个人关键词
*/
@ParamLog
(
"群关键词消息回复"
)
private
void
sendKeywordMessageToGroup
(
String
content
,
String
weixinGroupId
,
String
userWxId
,
String
robotId
,
String
ip
,
Integer
code
)
{
//简单过滤非关键词的词
if
(
StringUtil
.
isEmpty
(
content
)
||
content
.
length
()
>
20
)
{
return
;
}
// 若非之前的机器人则不回复普通关键词
final
Boolean
groupRobot
=
wechatGroupConsr
.
isGroupRobot
(
robotId
);
log
.
info
(
"[wechatGroupConsr.isGroupRobot] robotId:{} groupRobot:{}"
,
robotId
,
groupRobot
);
if
(!
groupRobot
)
{
return
;
}
//通过群id获取对应基本信息
GroupClassifyQrcodeDTO
classifyQrcodeInfo
=
bookGroupClassifyBiz
.
getClassifyQrcodeInfo
(
weixinGroupId
);
if
(
classifyQrcodeInfo
==
null
)
{
...
...
@@ -436,20 +593,25 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
}
log
.
info
(
"[关键词回复原始数据] : sendKeywordMessage replyKeywordDTO :{}, robotId:{}, weixinGroupId:{}"
,
replyKeywordDTO
,
robotId
,
weixinGroupId
);
// 处理链接地址
if
(
ReplyTypeEnum
.
APP
.
value
.
equals
(
replyKeywordDTO
.
getReplyType
())
||
ReplyTypeEnum
.
LINK
.
value
.
equals
(
replyKeywordDTO
.
getReplyType
()))
{
AccountSettingDto
accountSettingDto
=
qrcodeSceneConsr
.
getWechatInfo
(
classifyQrcodeInfo
.
getChannelId
());
final
boolean
isApp
=
ReplyTypeEnum
.
APP
.
value
.
equals
(
replyKeywordDTO
.
getReplyType
());
final
boolean
isLink
=
ReplyTypeEnum
.
LINK
.
value
.
equals
(
replyKeywordDTO
.
getReplyType
());
if
(
isApp
||
isLink
)
{
Long
channelId
=
classifyQrcodeInfo
.
getChannelId
();
// 如果是app则取app的channelId
if
(
isApp
)
{
final
AppDto
app
=
appConsr
.
getBaseById
(
replyKeywordDTO
.
getServeId
());
if
(
null
!=
app
)
{
channelId
=
app
.
getChannelId
();
}
}
AccountSettingDto
accountSettingDto
=
qrcodeSceneConsr
.
getWechatInfo
(
channelId
);
String
linkUrl
=
SendWeixinRequestTools
.
splitUrlNew
(
accountSettingDto
,
replyKeywordDTO
.
getLinkUrl
(),
classifyQrcodeInfo
.
getBookGroupId
(),
classifyQrcodeInfo
.
getClassifyId
(),
classifyQrcodeInfo
.
getGroupQrcodeId
());
replyKeywordDTO
.
setLinkUrl
(
linkUrl
);
}
String
redisContent
=
JedisClusterUtils
.
getJson
(
"BOOK:KEYWORD:"
+
weixinGroupId
+
"-"
+
replyKeywordDTO
.
getKeywordId
(),
String
.
class
);
// 同一群10秒内不回复同一关键词
if
(
redisContent
!=
null
)
{
insertBookKeywordRecord
(
classifyQrcodeInfo
,
replyKeywordDTO
.
getKeywordId
(),
userWxId
,
weixinGroupId
,
false
);
log
.
info
(
"[关键词消息回复] redisContent:{} insertBookKeywordRecord return"
,
redisContent
);
if
(
insertBookKeywordRecord
(
weixinGroupId
,
userWxId
,
replyKeywordDTO
,
classifyQrcodeInfo
,
redisContent
))
{
return
;
}
else
{
JedisClusterUtils
.
setJson
(
"BOOK:KEYWORD:"
+
weixinGroupId
+
"-"
+
replyKeywordDTO
.
getKeywordId
(),
replyKeywordDTO
.
getKeywordId
(),
10
);
insertBookKeywordRecord
(
classifyQrcodeInfo
,
replyKeywordDTO
.
getKeywordId
(),
userWxId
,
weixinGroupId
,
true
);
}
//获取推送消息机器人
// 20190704改为收发一体
...
...
@@ -458,7 +620,7 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
robotId
=
wechatGroupConsr
.
getRobotIdByGroupId
(
weixinGroupId
);
}
log
.
info
(
"[关键词回复发送数据] : sendKeywordMessage replyKeywordDTO :{}, robotId:{}, weixinGroupId:{}"
,
replyKeywordDTO
,
robotId
,
weixinGroupId
);
SendWeixinRequestTools
.
sendKeywordMessage
(
replyKeywordDTO
,
robotId
,
weixinGroupId
,
ip
);
SendWeixinRequestTools
.
sendKeywordMessage
(
replyKeywordDTO
,
robotId
,
weixinGroupId
,
ip
,
code
);
//新增关键词触发记录
addKeywordAppTouchRecord
(
replyKeywordDTO
,
weixinGroupId
,
classifyQrcodeInfo
.
getClassifyId
(),
classifyQrcodeInfo
.
getBookGroupId
());
//第一推送关键词消息埋点
...
...
@@ -506,6 +668,12 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
bookKeywordRecord
.
setUserWxId
(
userWxId
);
bookKeywordRecord
.
setWeixinGroupId
(
weixinGroupId
);
bookKeywordRecord
.
setSend
(
isSend
);
if
(
bookKeywordRecord
.
getGroupQrcodeId
()
==
null
)
{
GroupQrcode
groupQr
=
groupQrcodeDao
.
getGroupQrcodeByGroupId
(
weixinGroupId
);
if
(
groupQr
!=
null
){
bookKeywordRecord
.
setGroupQrcodeId
(
groupQr
.
getId
());
}
}
bookKeywordRecordDao
.
insert
(
bookKeywordRecord
);
}
...
...
pcloud-service-book/src/main/java/com/pcloud/book/keywords/dao/BookKeywordDao.java
View file @
ff1648f3
...
...
@@ -52,6 +52,11 @@ public interface BookKeywordDao extends BaseDao<BookKeyword> {
ReplyKeywordDTO
getKeywordId
(
Long
classifyId
,
Long
bookGroupId
,
String
content
);
/**
* 根据分类ids和群ids批量获取关键词
*/
List
<
ReplyKeywordDTO
>
getKeywordIds
(
List
<
Long
>
classifyIds
,
List
<
Long
>
bookGroupIds
,
String
content
);
/**
* @Author:lili
* @Desr:校验关键词
* @Date:2019/5/6 14:47
...
...
pcloud-service-book/src/main/java/com/pcloud/book/keywords/dao/impl/BookKeywordDaoImpl.java
View file @
ff1648f3
package
com
.
pcloud
.
book
.
keywords
.
dao
.
impl
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.pcloud.book.group.vo.SyncKeyworsVO
;
...
...
@@ -12,10 +13,14 @@ import com.pcloud.book.keywords.vo.ListKeywordVO;
import
com.pcloud.common.core.dao.BaseDaoImpl
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collector
;
import
java.util.stream.Collectors
;
/**
* @author lily
...
...
@@ -62,6 +67,18 @@ public class BookKeywordDaoImpl extends BaseDaoImpl<BookKeyword> implements Book
}
@Override
public
List
<
ReplyKeywordDTO
>
getKeywordIds
(
List
<
Long
>
classifyIds
,
List
<
Long
>
bookGroupIds
,
String
content
)
{
if
(
CollectionUtils
.
isEmpty
(
classifyIds
)
||
CollectionUtils
.
isEmpty
(
bookGroupIds
)
||
StringUtils
.
isEmpty
(
content
))
{
return
Lists
.
newArrayList
();
}
Map
<
String
,
Object
>
paramMap
=
Maps
.
newHashMap
();
paramMap
.
put
(
"classifyId"
,
classifyIds
.
stream
().
map
(
Object:
:
toString
).
collect
(
Collectors
.
joining
(
","
)));
paramMap
.
put
(
"bookGroupId"
,
bookGroupIds
.
stream
().
map
(
Object:
:
toString
).
collect
(
Collectors
.
joining
(
","
)));
paramMap
.
put
(
"content"
,
content
);
return
this
.
getSqlSession
().
selectList
(
this
.
getStatement
(
"getKeywordIds"
),
paramMap
);
}
@Override
public
Boolean
checkKeyword
(
String
keywords
,
Long
classifyId
,
Long
bookGroupId
,
Long
keywordId
)
{
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"classifyId"
,
classifyId
);
...
...
pcloud-service-book/src/main/java/com/pcloud/book/keywords/dto/ReplyKeywordDTO.java
View file @
ff1648f3
...
...
@@ -27,6 +27,12 @@ public class ReplyKeywordDTO implements Serializable {
@ApiModelProperty
(
"仓库关键词id"
)
private
Long
warehouseId
;
@ApiModelProperty
(
"分类id"
)
private
Long
classifyId
;
@ApiModelProperty
(
"群id"
)
private
Long
bookGroupId
;
@ApiModelProperty
(
"内容"
)
private
String
content
;
...
...
@@ -42,4 +48,10 @@ public class ReplyKeywordDTO implements Serializable {
@ApiModelProperty
(
"短链接地址"
)
private
String
shortLinkUrl
;
@ApiModelProperty
(
"应用/作品id"
)
private
Long
serveId
;
@ApiModelProperty
(
"应用/作品"
)
private
String
serveType
;
}
pcloud-service-book/src/main/java/com/pcloud/book/keywords/facade/impl/BookGuideFacadeImpl.java
View file @
ff1648f3
...
...
@@ -6,12 +6,15 @@ import com.pcloud.book.keywords.vo.GuideVO;
import
com.pcloud.book.keywords.vo.ReplyMessageVO
;
import
com.pcloud.book.keywords.vo.SetGuideVO
;
import
com.pcloud.book.keywords.vo.UpdateGuideVO
;
import
com.pcloud.common.core.constant.MQTopicProducer
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.exceptions.BizException
;
import
com.pcloud.common.permission.PermissionException
;
import
com.pcloud.common.utils.ResponseHandleUtil
;
import
com.pcloud.common.utils.SessionUtil
;
import
com.pcloud.wechatgroup.message.dto.AgreeAddUserDTO
;
import
org.springframework.amqp.core.AmqpTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.GetMapping
;
...
...
@@ -26,16 +29,34 @@ import org.springframework.web.bind.annotation.RestController;
import
java.util.List
;
import
java.util.Map
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @author lily
* @date 2019/4/23 15:24
*/
@Slf4j
@RestController
(
"bookGuideFacade"
)
@RequestMapping
(
"bookGuide"
)
public
class
BookGuideFacadeImpl
implements
BookGuideFacade
{
@Autowired
private
BookGuideBiz
bookGuidBiz
;
@Autowired
private
AmqpTemplate
amqpTemplate
;
@PostMapping
(
"test"
)
public
void
test
()
{
final
AgreeAddUserDTO
agreeAddUserDTO
=
new
AgreeAddUserDTO
();
agreeAddUserDTO
.
setNickName
(
"大威"
);
agreeAddUserDTO
.
setRobotWxId
(
"wxid_arjobo1bbk2i22"
);
// 当消息为个人消息时,wechatGroupId为发送人id
agreeAddUserDTO
.
setUserWxId
(
"p867263500"
);
agreeAddUserDTO
.
setIp
(
"http://192.168.92.122:8081"
);
log
.
info
(
"[processSelfMessage] start convertAndSend agreeAddUserDTO:{}"
,
agreeAddUserDTO
);
// 发送topic book处理后续欢迎语,关键词和拉群操作
amqpTemplate
.
convertAndSend
(
MQTopicProducer
.
EXCHAGE
,
MQTopicProducer
.
WX_AGREE_ADD_USER
,
agreeAddUserDTO
);
}
@Override
@PostMapping
(
"insertGuide"
)
...
...
pcloud-service-book/src/main/java/com/pcloud/book/mq/config/MQTopicConumer.java
View file @
ff1648f3
...
...
@@ -70,4 +70,9 @@ public class MQTopicConumer {
*/
public
static
final
String
WXGROUP_LEARNING_REPORT
=
PREFIX
+
MQTopicProducer
.
WXGROUP_LEARNING_REPORT
;
/**
* 微信群同意添加好友成功
*/
public
static
final
String
WX_AGREE_ADD_USER
=
PREFIX
+
MQTopicProducer
.
WX_AGREE_ADD_USER
;
}
pcloud-service-book/src/main/java/com/pcloud/book/mq/topic/UpdateWXGroupNameListener.java
View file @
ff1648f3
...
...
@@ -51,8 +51,8 @@ public class UpdateWXGroupNameListener {
}
String
groupName
=
groupQrcode
.
getGroupName
();
// 如果数据库微信群名称超过16,就截断,然后重新设置数据库的名称,因为wxgroup那边设置的时候截断了
if
(
groupName
.
length
()
>
1
6
)
{
groupName
=
groupName
.
substring
(
0
,
1
6
);
if
(
groupName
.
length
()
>
1
5
)
{
groupName
=
groupName
.
substring
(
0
,
1
5
);
groupQrcodeDao
.
updateGroupName
(
groupQrcode
.
getId
(),
groupName
);
}
if
(!
groupNameDTO
.
getNewGroupName
().
equals
(
groupName
))
{
...
...
@@ -67,7 +67,7 @@ public class UpdateWXGroupNameListener {
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setContent
(
"@"
+
groupNameDTO
.
getNickName
()+
",为方便群友入群分享好的助学方法,请不要随意修改群名。如再修改,会将您移出群聊。谢谢配合。"
);
sendTextMessageVO
.
setAltId
(
altId
);
sendTextMessageVO
.
setGroupId
(
wechatGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
wechatGroupId
);
LOGGER
.
info
(
"发送警告文本消息"
+
sendTextMessageVO
.
toString
());
sendTextMessageVO
.
setIp
(
findIp
(
wechatGroupId
));
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
...
...
pcloud-service-book/src/main/java/com/pcloud/book/mq/topic/WXGroupLearningReportListener.java
View file @
ff1648f3
...
...
@@ -25,6 +25,7 @@ import com.pcloud.wechatgroup.message.dto.GroupLearningReportDTO;
import
com.sdk.wxgroup.SendPicMessageVO
;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.rabbit.annotation.RabbitHandler
;
...
...
@@ -63,8 +64,9 @@ public class WXGroupLearningReportListener {
try
{
if
(
groupLearningReportDTO
==
null
||
groupLearningReportDTO
.
getWechatGroupId
()
==
null
||
groupLearningReportDTO
.
getWechatUserId
()
==
null
)
||
groupLearningReportDTO
.
getWechatUserId
()
==
null
)
{
return
;
}
String
wechatUserId
=
groupLearningReportDTO
.
getWechatUserId
();
String
wechatGroupId
=
groupLearningReportDTO
.
getWechatGroupId
();
//新增触发记录
...
...
@@ -102,7 +104,7 @@ public class WXGroupLearningReportListener {
return
;
}
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setGroupId
(
wechatGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
wechatGroupId
);
sendTextMessageVO
.
setAltId
(
alt
);
sendTextMessageVO
.
setContent
(
"个人专属学习报告,及群成员元气排行榜。点击获取"
+
resultUrl
);
sendTextMessageVO
.
setIp
(
findIp
(
wechatGroupId
));
...
...
@@ -115,7 +117,7 @@ public class WXGroupLearningReportListener {
}
SendPicMessageVO
sendPicMessageVO
=
new
SendPicMessageVO
();
sendPicMessageVO
.
setPicUrl
(
imageUrl
);
sendPicMessageVO
.
setGroupId
(
wechatGroupId
);
sendPicMessageVO
.
set
Wx
GroupId
(
wechatGroupId
);
sendPicMessageVO
.
setAltId
(
alt
);
sendPicMessageVO
.
setIp
(
findIp
(
wechatGroupId
));
LOGGER
.
info
(
"发送分享图消息开始"
+
sendPicMessageVO
.
toString
());
...
...
pcloud-service-book/src/main/java/com/pcloud/book/mq/topic/WxAgreeAddUserListener.java
0 → 100644
View file @
ff1648f3
package
com
.
pcloud
.
book
.
mq
.
topic
;
import
com.pcloud.book.keywords.biz.BookGuideBiz
;
import
com.pcloud.book.mq.config.MQTopicConumer
;
import
com.pcloud.common.core.aspect.ParamLog
;
import
com.pcloud.common.exceptions.BizException
;
import
com.pcloud.wechatgroup.message.dto.AgreeAddUserDTO
;
import
org.springframework.amqp.rabbit.annotation.RabbitHandler
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @author lily
* @date 2019/5/6 11:01
*/
@Slf4j
@Component
public
class
WxAgreeAddUserListener
{
@Resource
private
BookGuideBiz
bookGuideBiz
;
/**
* 接收微信用户进群消息
*/
@ParamLog
(
"同意加好友发送欢迎语"
)
@RabbitListener
(
queues
=
MQTopicConumer
.
WX_AGREE_ADD_USER
)
public
void
onMessage
(
AgreeAddUserDTO
agreeAddUserDTO
)
throws
BizException
{
try
{
bookGuideBiz
.
sendGuide
(
agreeAddUserDTO
);
}
catch
(
Exception
e
)
{
log
.
error
(
"同意加好友发送欢迎语"
+
e
.
getMessage
(),
e
);
}
}
}
pcloud-service-book/src/main/java/com/pcloud/book/mq/topic/WxGroupSendTextListener.java
View file @
ff1648f3
...
...
@@ -12,6 +12,7 @@ import com.pcloud.common.exceptions.BizException;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.wechatgroup.message.dto.SendTextDTO
;
import
com.sdk.wxgroup.SendMessageTypeEnum
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
...
...
@@ -57,11 +58,11 @@ public class WxGroupSendTextListener {
List
<
String
>
allRobotWxIds
=
wechatGroupConsr
.
listAllRobotWxId
();
if
(!
ListUtils
.
isEmpty
(
allRobotWxIds
)
&&
!
allRobotWxIds
.
contains
(
wechatUserId
)
&&
!
StringUtil
.
isEmpty
(
sendTextDTO
.
getTextContent
()))
{
BookClockInfoDTO
bookClockInfoDTO
=
bookClockCheck
.
checkKeywordIsClock
(
sendTextDTO
.
getTextContent
().
trim
(),
sendTextDTO
.
getWechatGroupId
());
if
(
null
!=
bookClockInfoDTO
){
if
(
null
!=
bookClockInfoDTO
&&
SendMessageTypeEnum
.
GROUP
.
getCode
().
equals
(
sendTextDTO
.
getCode
())
){
bookClockKeywordBiz
.
sendKeywordMessage
(
bookClockInfoDTO
,
wechatUserId
,
sendTextDTO
.
getWechatGroupId
(),
sendTextDTO
.
getWxId
(),
sendTextDTO
.
getIp
());
}
else
{
}
else
{
final
long
l
=
System
.
currentTimeMillis
();
bookKeywordBiz
.
sendKeywordMessage
(
sendTextDTO
.
getTextContent
().
trim
(),
sendTextDTO
.
getWechatGroupId
(),
wechatUserId
,
sendTextDTO
.
getWxId
(),
sendTextDTO
.
getIp
());
bookKeywordBiz
.
sendKeywordMessage
(
sendTextDTO
.
getTextContent
().
trim
(),
sendTextDTO
.
getWechatGroupId
(),
wechatUserId
,
sendTextDTO
.
getWxId
(),
sendTextDTO
.
getIp
()
,
sendTextDTO
.
getCode
()
);
log
.
info
(
"[接收用户发送文本消息] 总耗时:{}ms "
,
System
.
currentTimeMillis
()
-
l
);
}
//猜谜语
...
...
pcloud-service-book/src/main/java/com/pcloud/book/push/biz/impl/PushBizImpl.java
View file @
ff1648f3
...
...
@@ -320,7 +320,7 @@ public class PushBizImpl implements PushBiz {
Integer
itemType
=
pushItem
.
getItemType
();
if
(
ItemTypeEnum
.
TEXT
.
value
.
equals
(
itemType
))
{
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setGroupId
(
groupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
groupId
);
sendTextMessageVO
.
setAltId
(
altId
);
sendTextMessageVO
.
setContent
(
pushItem
.
getTextContent
());
sendTextMessageVO
.
setPushGroupRecordId
(
pushGroupRecordId
);
...
...
@@ -331,7 +331,7 @@ public class PushBizImpl implements PushBiz {
SendArticleMessageVO
sendArticleMessageVO
=
new
SendArticleMessageVO
();
sendArticleMessageVO
.
setAltId
(
altId
);
sendArticleMessageVO
.
setDescription
(
pushItem
.
getLinkDescription
());
sendArticleMessageVO
.
setGroupId
(
groupId
);
sendArticleMessageVO
.
set
Wx
GroupId
(
groupId
);
String
url
=
pushItem
.
getLinkUrl
();
if
(
url
.
contains
(
"?"
))
{
url
=
url
+
"&"
+
otherUrl
;
...
...
@@ -356,10 +356,11 @@ public class PushBizImpl implements PushBiz {
AppDto
appDto
=
appConsr
.
getBaseById
(
pushItem
.
getAppId
());
if
(
appDto
!=
null
)
{
accountSettingDto
=
qrcodeSceneConsr
.
getWechatInfo
(
appDto
.
getChannelId
());
SendArticleMessageVO
sendArticleMessageVO
=
new
SendArticleMessageVO
();
sendArticleMessageVO
.
setAltId
(
altId
);
sendArticleMessageVO
.
setDescription
(
appDto
.
getTypeName
());
sendArticleMessageVO
.
setGroupId
(
groupId
);
sendArticleMessageVO
.
set
Wx
GroupId
(
groupId
);
// 处理链接地址
String
endUrl
=
pushItem
.
getAppUrl
()
+
"&"
+
otherUrl
;
String
linkUrl
=
SendWeixinRequestTools
.
splitUrl
(
accountSettingDto
,
endUrl
);
...
...
@@ -381,7 +382,7 @@ public class PushBizImpl implements PushBiz {
if
(
productDto
.
getProductTypeDto
()
!=
null
)
{
sendArticleMessageVO
.
setDescription
(
productDto
.
getProductTypeDto
().
getTypeName
());
}
sendArticleMessageVO
.
setGroupId
(
groupId
);
sendArticleMessageVO
.
set
Wx
GroupId
(
groupId
);
// 处理链接地址
String
endUrl
=
pushItem
.
getProductUrl
()
+
"&"
+
otherUrl
;
String
linkUrl
=
SendWeixinRequestTools
.
splitUrl
(
accountSettingDto
,
endUrl
);
...
...
@@ -399,7 +400,7 @@ public class PushBizImpl implements PushBiz {
if
(
ItemTypeEnum
.
IMAGE
.
value
.
equals
(
itemType
))
{
SendPicMessageVO
sendPicMessageVO
=
new
SendPicMessageVO
();
sendPicMessageVO
.
setAltId
(
altId
);
sendPicMessageVO
.
setGroupId
(
groupId
);
sendPicMessageVO
.
set
Wx
GroupId
(
groupId
);
sendPicMessageVO
.
setPicUrl
(
pushItem
.
getImageUrl
());
sendPicMessageVO
.
setPushGroupRecordId
(
pushGroupRecordId
);
sendPicMessageVO
.
setIp
(
findIp
(
groupId
));
...
...
@@ -980,7 +981,7 @@ public class PushBizImpl implements PushBiz {
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setContent
(
content
);
sendTextMessageVO
.
setAltId
(
robotId
);
sendTextMessageVO
.
setGroupId
(
weixinGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
weixinGroupId
);
sendTextMessageVO
.
setIp
(
findIp
(
weixinGroupId
));
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
LOGGER
.
info
(
"发送早晚报"
+
sendTextMessageVO
.
toString
());
...
...
pcloud-service-book/src/main/java/com/pcloud/book/riddle/biz/impl/RiddleRecordBizImpl.java
View file @
ff1648f3
...
...
@@ -29,6 +29,7 @@ import com.pcloud.facade.quartz.entity.ScheduleJob;
import
com.pcloud.facade.quartz.service.ScheduleService
;
import
com.pcloud.wechatgroup.group.dto.GroupUserDTO
;
import
com.pcloud.wechatgroup.message.dto.SendTextDTO
;
import
com.sdk.wxgroup.SendMessageTypeEnum
;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
...
...
@@ -84,6 +85,9 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
if
(
null
==
sendTextDTO
||
StringUtil
.
isEmpty
(
sendTextDTO
.
getTextContent
()))
{
return
;
}
if
(!
SendMessageTypeEnum
.
GROUP
.
getCode
().
equals
(
sendTextDTO
.
getCode
()))
{
//非群消息不处理
return
;
}
String
textContent
=
sendTextDTO
.
getTextContent
().
trim
();
String
wxGroupId
=
sendTextDTO
.
getWechatGroupId
();
String
wxUserId
=
sendTextDTO
.
getWechatUserId
();
...
...
@@ -186,7 +190,7 @@ public class RiddleRecordBizImpl implements RiddleRecordBiz {
public
void
sendWeixinTextMessage
(
String
wxId
,
String
wxGroupId
,
String
content
,
String
ip
,
String
wxUserId
)
{
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setAltId
(
wxId
);
sendTextMessageVO
.
setGroupId
(
wxGroupId
);
sendTextMessageVO
.
set
Wx
GroupId
(
wxGroupId
);
if
(!
StringUtil
.
isEmpty
(
wxUserId
))
{
sendTextMessageVO
.
setAtId
(
wxUserId
);
GroupUserDTO
groupUser
=
wechatGroupConsr
.
getWxUserInfoByWxUserId
(
wxUserId
);
...
...
pcloud-service-book/src/main/java/com/pcloud/book/util/properties/BookProps.java
View file @
ff1648f3
...
...
@@ -34,8 +34,7 @@ public class BookProps {
*/
private
static
String
jisuAppKey
;
@Value
(
"group.luck.url"
)
private
String
groupLuckUrl
;
private
static
String
systemEnv
;
public
static
String
getJisuAppKey
()
{
return
jisuAppKey
;
...
...
@@ -73,11 +72,13 @@ public class BookProps {
BookProps
.
appCode
=
appCode
;
}
public
String
getGroupLuckUrl
()
{
return
groupLuckUrl
;
public
static
String
getSystemEnv
()
{
return
systemEnv
;
}
public
void
setGroupLuckUrl
(
String
groupLuckUrl
)
{
this
.
groupLuckUrl
=
groupLuckUrl
;
@Value
(
"${system.env}"
)
public
void
setSystemEnv
(
String
systemEnv
)
{
BookProps
.
systemEnv
=
systemEnv
;
}
}
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsBanMapper.xml
0 → 100644
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.adnews.dao.impl.AdNewsBanDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.adnews.entity.AdNewsBan"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"adviser_id"
property=
"adviserId"
jdbcType=
"BIGINT"
/>
<result
column=
"ad_news_id"
property=
"adNewsId"
jdbcType=
"BIGINT"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, adviser_id, ad_news_id, create_time, update_time
</sql>
<select
id=
"getById"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Long"
>
select
<include
refid=
"Base_Column_List"
/>
from ad_news_choose
where id = #{id,jdbcType=BIGINT}
</select>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.adnews.entity.AdNewsBan"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into ad_news_ban
(adviser_id,
ad_news_id,
create_time)
values(
#{adviserId,jdbcType=BIGINT},
#{adNewsId,jdbcType=BIGINT},
NOW())
</insert>
<!--根据id删除-->
<delete
id=
"deleteByAdNewsId"
parameterType=
"map"
>
DELETE FROM ad_news_ban
where ad_news_id=#{adNewsId} and adviser_id=#{partyId}
</delete>
</mapper>
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsChooseMapper.xml
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "
http://mybatis.org/dtd/
mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.adnews.dao.impl.AdNewsChooseDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.adnews.entity.AdNewsChoose"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
...
...
@@ -8,7 +8,6 @@
<result
column=
"is_delete"
property=
"isDelete"
jdbcType=
"BOOLEAN"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"create_user"
property=
"createUser"
jdbcType=
"BIGINT"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"update_user"
property=
"updateUser"
jdbcType=
"BIGINT"
/>
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
...
...
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsClickRecordMapper.xml
0 → 100644
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.adnews.dao.impl.AdNewsClickRecordDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.adnews.entity.AdNewsClickRecord"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"message_statistic_id"
property=
"messageStatisticId"
jdbcType=
"BIGINT"
/>
<result
column=
"group_record_id"
property=
"groupRecordId"
jdbcType=
"BIGINT"
/>
<result
column=
"wechat_user_id"
property=
"wechatUserId"
jdbcType=
"BIGINT"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, message_statistic_id, group_record_id, wechat_user_id, create_time
</sql>
<select
id=
"getById"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Long"
>
select
<include
refid=
"Base_Column_List"
/>
from ad_news_click_record
where id = #{id,jdbcType=BIGINT}
</select>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.adnews.entity.AdNewsClickRecord"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into ad_news_click_record
(message_statistic_id,
group_record_id,
wechat_user_id,
create_time)
values(
#{messageStatisticId,jdbcType=BIGINT},
#{groupRecordId,jdbcType=BIGINT},
#{wechatUserId,jdbcType=BIGINT},
NOW())
</insert>
</mapper>
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsGroupMapper.xml
View file @
ff1648f3
...
...
@@ -107,8 +107,19 @@
</update>
<!--根据早晚报设置id查询-->
<select
id=
"getListByAdNewsSetId"
parameterType=
"Long"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from ad_news_group
where is_delete=0 and ad_news_set_id=#{adNewsSetId}
<select
id=
"getListByAdNewsSetId"
parameterType=
"Long"
resultType=
"com.pcloud.book.adnews.entity.AdNewsGroup"
>
select
a.id,
a.classify_id classifyId,
a.book_group_id bookGroupId,
a.ad_news_set_id adNewsSetId,
a.is_delete isDelete,
a.create_user createUser,
a.create_time createTime,
a.update_user updateUser,
a.update_time updateTime,
(select classify from book_group_classify b where b.id=a.classify_id) classify
from ad_news_group a
where a.is_delete=0 and a.ad_news_set_id=#{adNewsSetId}
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsGroupRecordMapper.xml
View file @
ff1648f3
...
...
@@ -3,6 +3,7 @@
<mapper
namespace=
"com.pcloud.book.adnews.dao.impl.AdNewsGroupRecordDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.adnews.entity.AdNewsGroupRecord"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"message_statistic_id"
property=
"messageStatisticId"
jdbcType=
"BIGINT"
/>
<result
column=
"qrcode_id"
property=
"qrcodeId"
jdbcType=
"BIGINT"
/>
<result
column=
"classify_id"
property=
"classifyId"
jdbcType=
"BIGINT"
/>
<result
column=
"book_group_id"
property=
"bookGroupId"
jdbcType=
"BIGINT"
/>
...
...
@@ -12,10 +13,12 @@
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"update_user"
property=
"updateUser"
jdbcType=
"BIGINT"
/>
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"custom_content"
property=
"customContent"
jdbcType=
"VARCHAR"
/>
<result
column=
"content_type"
property=
"contentType"
jdbcType=
"BIGINT"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id,
qrcode_id, classify_id, book_group_id, ad_news_id, ad_news_set_id, create_user, create_time, update_user, update_tim
e
id,
message_statistic_id,qrcode_id, classify_id, book_group_id, ad_news_id, ad_news_set_id, create_user, create_time, update_user, update_time, custom_content,content_typ
e
</sql>
<select
id=
"getById"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Long"
>
...
...
@@ -25,9 +28,27 @@
where id = #{id,jdbcType=BIGINT}
</select>
<select
id=
"getAdNewsGroupRecord"
resultType=
"com.pcloud.book.adnews.vo.AdNewsGroupRecordVO"
parameterType=
"java.lang.Long"
>
SELECT
a.id,
a.ad_news_id adNewsId,
c.wechat_name wechatName,
b.title,
b.short_url shortUrl,
a.custom_content customContent,
a.content_type contentType
FROM
ad_news_group_record a
LEFT JOIN ad_news b ON a.ad_news_id=b.id
LEFT JOIN ad_news_wechat c ON b.news_from=c.news_from
WHERE a.message_statistic_id=#{messageStatisticId,jdbcType=BIGINT}
AND a.create_user=#{partyId,jdbcType=BIGINT}
</select>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.adnews.entity.AdNewsGroupRecord"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into ad_news_group_record
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
message_statistic_id,
qrcode_id,
classify_id,
book_group_id,
...
...
@@ -36,9 +57,12 @@
create_user,
create_time,
update_user,
update_time
update_time,
custom_content,
content_type
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
#{messageStatisticId,jdbcType=BIGINT},
#{qrcodeId,jdbcType=BIGINT},
#{classifyId,jdbcType=BIGINT},
#{bookGroupId,jdbcType=BIGINT},
...
...
@@ -48,12 +72,17 @@
NOW(),
#{updateUser,jdbcType=BIGINT},
NOW(),
#{customContent,jdbcType=VARCHAR},
#{contentType,jdbcType=INTEGER}
</trim>
</insert>
<update
id=
"update"
parameterType=
"com.pcloud.book.adnews.entity.AdNewsGroupRecord"
>
update ad_news_group_record
<set>
<if
test=
"messageStatisticId != null"
>
message_statistic_id = #{messageStatisticId,jdbcType=BIGINT},
</if>
<if
test=
"qrcodeId != null"
>
qrcode_id = #{qrcodeId,jdbcType=BIGINT},
</if>
...
...
@@ -72,14 +101,21 @@
<if
test=
"updateUser != null"
>
update_user = #{updateUser,jdbcType=VARCHAR},
</if>
<if
test=
"customContent != null"
>
custom_content = #{customContent,jdbcType=VARCHAR},
</if>
<if
test=
"contentType != null"
>
content_type = #{contentType,jdbcType=INTEGER},
</if>
update_time=now()
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<!--批量新增-->
<insert
id=
"batchInsert"
useGeneratedKeys=
"true"
parameterType=
"java.util.List"
>
<insert
id=
"batchInsert"
useGeneratedKeys=
"true"
keyProperty=
"id"
parameterType=
"java.util.List"
>
insert into ad_news_group_record (
message_statistic_id,
qrcode_id,
classify_id,
book_group_id,
...
...
@@ -88,11 +124,14 @@
create_user,
create_time,
update_user,
update_time
update_time,
custom_content,
content_type
)
values
<foreach
collection=
"list"
item=
"item"
index=
"index"
separator=
","
>
(
#{item.messageStatisticId,jdbcType=BIGINT},
#{item.qrcodeId,jdbcType=BIGINT},
#{item.classifyId,jdbcType=BIGINT},
#{item.bookGroupId,jdbcType=BIGINT},
...
...
@@ -101,7 +140,9 @@
#{item.createUser,jdbcType=BIGINT},
NOW(),
#{item.updateUser,jdbcType=BIGINT},
NOW()
NOW(),
#{item.customContent,jdbcType=VARCHAR},
#{item.contentType,jdbcType=INTEGER}
)
</foreach>
</insert>
...
...
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsMapper.xml
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "
http://mybatis.org/dtd/
mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.adnews.dao.impl.AdNewsDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.adnews.entity.AdNews"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
...
...
@@ -104,45 +104,72 @@
</insert>
<!--查找要发送的新闻-->
<!--
1、ad_news_ban 排除掉禁止发送的
2、ad_news_group_record 排除掉已发送的
-->
<select
id=
"getNewsToSendBySetIdAndAdviser"
parameterType=
"map"
resultMap=
"BaseResultMap"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM
ad_news t
WHERE
t.id IN (
SELECT
t1.ad_news_id
FROM
ad_news_choose t1
WHERE
t1.is_delete=0
and t1.adviser_id =#{adviserId}
)
AND t.id NOT IN (
SELECT
t2.ad_news_id
a.id, a.type, a.news_from, a.title, a.publisher, a.url, a.short_url, a.news_date, a.create_time
FROM
ad_news_group_record t2
ad_news a
INNER JOIN ad_news_wechat b ON a.news_from = b.news_from AND b.is_delete = 0
INNER JOIN ad_news_wechat_choose c ON c.ad_news_wechat_id = b.id AND c.is_delete = 0 AND c.adviser_id = #{adviserId}
WHERE
t2.ad_news_set_id =#{adNewsSetId}
)
NOT EXISTS ( SELECT 1 FROM ad_news_ban e WHERE a.id = e.ad_news_id AND e.adviser_id = c.adviser_id )
AND NOT EXISTS (SELECT 1 from ad_news_group_record f WHERE f.ad_news_id=a.id and f.ad_news_set_id=#{adNewsSetId}
)
ORDER BY
t.create_time
DESC
a.id
DESC
LIMIT #{top}
</select>
<!--获取素材库列表-->
<select
id=
"getAdNewsList"
parameterType=
"map"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from ad_news
where id not in (
select distinct ad_news_id from ad_news_choose
where adviser_id = #{partyId}
)
<select
id=
"getAdNewsList"
parameterType=
"map"
resultType=
"com.pcloud.book.adnews.entity.AdNews"
>
SELECT
a.id id
,a.type type
,a.news_from newsFrom
,b.wechat_name wechatName
,a.title title
,a.publisher publisher
,a.url url
,a.short_url shortUrl
,a.news_date newsDate
,a.create_time createTime
,IFNULL((SELECT 1 FROM ad_news_group_record WHERE ad_news_id=a.id and create_user=#{partyId} LIMIT 1),0) hasUsed
,IFNULL((SELECT 1 FROM ad_news_ban WHERE ad_news_id=a.id and adviser_id=#{partyId} LIMIT 1),0) hasBan
FROM
ad_news a
INNER JOIN ad_news_wechat b on a.news_from=b.news_from and b.is_delete=0
<if
test=
"adNewsWechatIds != null and adNewsWechatIds.size()>0"
>
AND b.id IN
<foreach
collection=
"adNewsWechatIds"
item=
"item"
index=
"i"
separator=
","
open=
"("
close=
")"
>
${item}
</foreach>
</if>
INNER JOIN ad_news_wechat_choose c ON b.id=c.ad_news_wechat_id and c.create_user=#{partyId} and c.is_delete=0
where 1=1
<if
test=
"title!=null"
>
and title like concat('%', #{title},'%')
AND a.title like concat('%', #{title},'%')
</if>
<if
test=
"beginTime!=null"
>
AND a.news_date
<![CDATA[>=]]>
#{beginTime}
</if>
<if
test=
"endTime!=null"
>
AND a.news_date
<![CDATA[<=]]>
#{endTime}
</if>
<if
test=
"hasBan==0"
>
AND NOT EXISTS (SELECT 1 FROM ad_news_ban WHERE ad_news_id=a.id and adviser_id=#{partyId} LIMIT 1)
</if>
<if
test=
"hasBan==1"
>
AND EXISTS (SELECT 1 FROM ad_news_ban WHERE ad_news_id=a.id and adviser_id=#{partyId} LIMIT 1)
</if>
<if
test=
"hasUsed==0"
>
AND NOT EXISTS (SELECT 1 FROM ad_news_group_record WHERE ad_news_id=a.id and create_user=#{partyId} LIMIT 1)
</if>
<if
test=
"hasUsed==1"
>
AND EXISTS (SELECT 1 FROM ad_news_group_record WHERE ad_news_id=a.id and create_user=#{partyId} LIMIT 1)
</if>
order by create_time desc
</select>
<!--获取编辑选择的素材-->
...
...
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsMessageStatisticMapper.xml
0 → 100644
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.adnews.dao.impl.AdNewsMessageStatisticDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.adnews.entity.AdNewsMessageStatistic"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"qrcode_id"
property=
"qrcodeId"
jdbcType=
"BIGINT"
/>
<result
column=
"classify_id"
property=
"classifyId"
jdbcType=
"BIGINT"
/>
<result
column=
"book_group_id"
property=
"bookGroupId"
jdbcType=
"BIGINT"
/>
<result
column=
"ad_news_set_id"
property=
"adNewsSetId"
jdbcType=
"BIGINT"
/>
<result
column=
"content_from"
property=
"contentFrom"
jdbcType=
"INTEGER"
/>
<result
column=
"message_count"
property=
"messageCount"
jdbcType=
"INTEGER"
/>
<result
column=
"create_user"
property=
"createUser"
jdbcType=
"BIGINT"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, qrcode_id, classify_id, book_group_id, ad_news_set_id, content_from, message_count, create_user, create_time
</sql>
<select
id=
"getById"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Long"
>
select
<include
refid=
"Base_Column_List"
/>
from ad_news_group_record
where id = #{id,jdbcType=BIGINT}
</select>
<select
id=
"getAdNewsMessageStatistic"
resultType=
"com.pcloud.book.adnews.vo.AdNewsMessageStatisticVO"
parameterType=
"map"
>
SELECT
DISTINCT
a.id,
d.group_name groupName,
c.classify classify,
b.group_qrcode_name groupQrcodeName,
e.BOOK_NAME bookName,
b.pro_label_id proLabelId,
b.dep_label_id depLabelId,
b.pur_label_id purLabelId,
a.message_count messageCount,
a.create_time createTime,
a.content_from contentFrom,
(SELECT COUNT(1) FROM ad_news_click_record x WHERE x.message_statistic_id=a.id) clickCount,
(SELECT COUNT(DISTINCT wechat_user_id) FROM ad_news_click_record x WHERE x.message_statistic_id=a.id) userCount
FROM
ad_news_message_statistic a
INNER JOIN book_group b ON a.book_group_id = b.id
INNER JOIN book_group_classify c ON a.classify_id = c.id
INNER JOIN book_group_qrcode d ON a.qrcode_id = d.id
INNER JOIN book e ON b.book_id = e.BOOK_ID
WHERE
a.create_user = #{partyId}
<if
test=
"title!=null"
>
AND (
d.group_name like concat('%', #{title}, '%')
OR c.classify like concat('%', #{title}, '%')
OR b.group_qrcode_name like concat('%', #{title}, '%')
OR e.BOOK_NAME like concat('%', #{title}, '%')
)
</if>
<if
test=
"beginTime!=null"
>
AND a.create_time
<![CDATA[>=]]>
#{beginTime}
</if>
<if
test=
"endTime!=null"
>
AND a.create_time
<![CDATA[<=]]>
#{endTime}
</if>
<if
test=
"proLabelId!=null"
>
AND b.pro_label_id=#{proLabelId}
</if>
<if
test=
"depLabelId!=null"
>
AND b.dep_label_id=#{depLabelId}
</if>
<if
test=
"purLabelId!=null"
>
AND b.pur_label_id=#{purLabelId}
</if>
ORDER BY
a.id DESC
</select>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.adnews.entity.AdNewsMessageStatistic"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into ad_news_message_statistic
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
qrcode_id,
classify_id,
book_group_id,
ad_news_set_id,
content_from,
message_count,
create_user,
create_time
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
#{qrcodeId,jdbcType=BIGINT},
#{classifyId,jdbcType=BIGINT},
#{bookGroupId,jdbcType=BIGINT},
#{adNewsSetId,jdbcType=BIGINT},
#{contentFrom,jdbcType=INTEGER},
#{messageCount,jdbcType=INTEGER},
#{createUser,jdbcType=BIGINT},
NOW()
</trim>
</insert>
<!--批量新增-->
<insert
id=
"batchInsert"
useGeneratedKeys=
"true"
keyProperty=
"id"
parameterType=
"java.util.List"
>
insert into ad_news_message_statistic (
qrcode_id,
classify_id,
book_group_id,
ad_news_set_id,
content_from,
message_count,
create_user,
create_time
)
values
<foreach
collection=
"list"
item=
"item"
index=
"index"
separator=
","
>
(
#{item.qrcodeId,jdbcType=BIGINT},
#{item.classifyId,jdbcType=BIGINT},
#{item.bookGroupId,jdbcType=BIGINT},
#{item.adNewsSetId,jdbcType=BIGINT},
#{item.contentFrom,jdbcType=INTEGER},
#{item.messageCount,jdbcType=INTEGER},
#{item.createUser,jdbcType=BIGINT},
NOW()
)
</foreach>
</insert>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsSetMapper.xml
View file @
ff1648f3
...
...
@@ -16,11 +16,15 @@
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"update_user"
property=
"updateUser"
jdbcType=
"BIGINT"
/>
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"content_from"
property=
"contentFrom"
jdbcType=
"INTEGER"
/>
<result
column=
"morning_content"
property=
"morningContent"
jdbcType=
"VARCHAR"
/>
<result
column=
"evening_content"
property=
"eveningContent"
jdbcType=
"VARCHAR"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, morning_time, evening_time, has_morning_open, has_evening_open, send_count, start_content,
end_content, has_start_content, has_end_content, create_user, create_time, update_user, update_time
,content_from,morning_content,evening_content
</sql>
<select
id=
"getById"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Long"
>
...
...
@@ -45,7 +49,10 @@
create_user,
create_time,
update_user,
update_time
update_time,
content_from,
morning_content,
evening_content
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
#{morningTime,jdbcType=VARCHAR},
...
...
@@ -61,6 +68,9 @@
NOW(),
#{updateUser,jdbcType=BIGINT},
NOW(),
#{contentFrom,jdbcType=BIGINT},
#{morningContent,jdbcType=VARCHAR},
#{eveningContent,jdbcType=VARCHAR},
</trim>
</insert>
...
...
@@ -97,7 +107,16 @@
<if
test=
"updateUser != null"
>
update_user = #{updateUser,jdbcType=BIGINT},
</if>
update_time = NOW(),
<if
test=
"contentFrom != null"
>
content_from = #{contentFrom,jdbcType=BIGINT},
</if>
<if
test=
"morningContent != null"
>
morning_content = #{morningContent,jdbcType=VARCHAR},
</if>
<if
test=
"eveningContent != null"
>
evening_content = #{eveningContent,jdbcType=VARCHAR},
</if>
update_time = NOW()
</set>
where id = #{id,jdbcType=BIGINT}
</update>
...
...
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsWechatChooseMapper.xml
0 → 100644
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.adnews.dao.impl.AdNewsWechatChooseDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.adnews.entity.AdNewsWechatChoose"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"adviser_id"
property=
"adviserId"
jdbcType=
"BIGINT"
/>
<result
column=
"ad_news_wechat_id"
property=
"adNewsWechatId"
jdbcType=
"BIGINT"
/>
<result
column=
"is_delete"
property=
"isDelete"
jdbcType=
"BOOLEAN"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"create_user"
property=
"createUser"
jdbcType=
"BIGINT"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"update_user"
property=
"updateUser"
jdbcType=
"BIGINT"
/>
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, adviser_id, ad_news_wechat_id, is_delete, create_time, create_user, update_time, update_user
</sql>
<select
id=
"getById"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Long"
>
select
<include
refid=
"Base_Column_List"
/>
from ad_news_wechat_choose
where id = #{id,jdbcType=BIGINT}
</select>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.adnews.entity.AdNewsWechatChoose"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into ad_news_wechat_choose
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
adviser_id,
ad_news_wechat_id,
is_delete,
create_user,
create_time,
update_user,
update_time
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
#{adviserId,jdbcType=BIGINT},
#{adNewsWechatId,jdbcType=BIGINT},
0,
#{createUser,jdbcType=BIGINT},
NOW(),
#{updateUser,jdbcType=BIGINT},
NOW(),
</trim>
</insert>
<update
id=
"update"
parameterType=
"com.pcloud.book.adnews.entity.AdNewsWechatChoose"
>
update ad_news_wechat_choose
<set>
<if
test=
"adviserId != null"
>
adviser_id = #{adviserId,jdbcType=BIGINT},
</if>
<if
test=
"adNewsWechatId != null"
>
ad_news_wechat_id = #{adNewsWechatId,jdbcType=BIGINT},
</if>
<if
test=
"isDelete != null"
>
is_delete = #{isDelete,jdbcType=BOOLEAN},
</if>
<if
test=
"updateUser != null"
>
update_user = #{updateUser,jdbcType=VARCHAR},
</if>
update_time=now()
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<!--批量新增-->
<insert
id=
"batchInsert"
useGeneratedKeys=
"true"
parameterType=
"java.util.List"
>
insert into ad_news_wechat_choose (
adviser_id,
ad_news_wechat_id,
is_delete,
create_user,
create_time,
update_user,
update_time
)
values
<foreach
collection=
"list"
item=
"item"
index=
"index"
separator=
","
>
(
#{item.adviserId,jdbcType=BIGINT},
#{item.adNewsWechatId,jdbcType=BIGINT},
0,
#{item.createUser,jdbcType=BIGINT},
NOW(),
#{item.updateUser,jdbcType=BIGINT},
NOW()
)
</foreach>
</insert>
<!--根据id删除-->
<update
id=
"deleteAdNewsWechatChooseById"
parameterType=
"map"
>
update ad_news_wechat_choose set
is_delete=1,
update_user=#{partyId},
update_time=now()
where ad_news_wechat_id=#{adNewsWechatId}
</update>
<!--根据编辑id删除-->
<update
id=
"deleteAdNewsWechatChooseByPartyId"
parameterType=
"map"
>
update ad_news_wechat_choose set
is_delete=1,
update_user=#{partyId},
update_time=now()
where adviser_id=#{partyId}
</update>
<!--根据条件获取数量-->
<select
id=
"getCountByAdNewsWechatIdsAndPartyId"
parameterType=
"map"
resultType=
"Integer"
>
select count(1) from ad_news_wechat_choose where
is_delete=0
and adviser_id=#{partyId}
and ad_news_wechat_id in
<foreach
collection=
"adNewsWechatIds"
item=
"item"
index=
"index"
separator=
","
open=
"("
close=
")"
>
#{item}
</foreach>
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/adnews/AdNewsWechatMapper.xml
0 → 100644
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.adnews.dao.impl.AdNewsWechatDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.adnews.entity.AdNewsWechat"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"news_from"
property=
"newsFrom"
jdbcType=
"VARCHAR"
/>
<result
column=
"wechat_name"
property=
"wechatName"
jdbcType=
"VARCHAR"
/>
<result
column=
"adviser_id"
property=
"adviserId"
jdbcType=
"BIGINT"
/>
<result
column=
"is_delete"
property=
"isDelete"
jdbcType=
"BOOLEAN"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, news_from, wechat_name, adviser_id, is_delete, create_time, update_time
</sql>
<select
id=
"getById"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Long"
>
select
<include
refid=
"Base_Column_List"
/>
from ad_news_wechat
where id = #{id,jdbcType=BIGINT}
</select>
<!--获取公众号列表-->
<select
id=
"getAdNewsWechatList"
parameterType=
"map"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from ad_news_wechat
where
news_from IS NOT NULL
order by id desc
</select>
<!--获取编辑已选中的公众号列表-->
<select
id=
"getAdNewsWechatChooseList"
parameterType=
"map"
resultMap=
"BaseResultMap"
>
SELECT
a.id,
a.news_from,
a.wechat_name,
a.adviser_id,
a.is_delete,
a.create_time,
a.update_time
FROM
ad_news_wechat a
INNER JOIN ad_news_wechat_choose b ON b.ad_news_wechat_id = a.id
AND b.is_delete = 0
AND b.adviser_id = #{partyId}
WHERE
a.`news_from` IS NOT NULL
</select>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.adnews.entity.AdNewsWechat"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into ad_news_wechat
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
news_from, wechat_name, adviser_id, is_delete, create_time
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
#{newsFrom,jdbcType=VARCHAR},
#{wechatName,jdbcType=VARCHAR},
#{adviserId,jdbcType=BIGINT},
#{isDelete,jdbcType=BOOLEAN},
NOW()
</trim>
</insert>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/group/BookGroupClassify.Mapper.xml
View file @
ff1648f3
...
...
@@ -159,7 +159,7 @@
product_id productId,
product_spec_id productSpecId,
change_number changeNumber,
create_user
create_user
createUser
from
book_group_classify
where
...
...
@@ -310,10 +310,31 @@
q.id groupQrcodeId,
c.has_open_learning_report hasOpenLearningReport,
q.weixin_qrcode_id weixinQrcodeId,
q.qrcode_url qrCodeUrl
q.qrcode_url qrCodeUrl,
g.join_group_type joinGroupType
FROM
book_group_classify c
JOIN book_group_qrcode q ON c.id = q.classify_id
JOIN book_group g ON c.book_group_id = g.id
WHERE q.weixin_group_id = #{_parameter}
LIMIT 1
</select>
<select
id=
"listClassifyQrcodeInfo"
resultType=
"GroupClassifyQrcodeDTO"
parameterType=
"list"
>
select
c.id classifyId,
c.create_user adviserId,
c.book_id bookId,
c.channel_id channelId,
c.book_group_id bookGroupId,
c.price price,
c.has_open_learning_report hasOpenLearningReport
from
book_group_classify c join book_group_qrcode q on c.id = q.classify_id
and q.weixin_group_id = #{_parameter} limit 1
book_group_classify c
where c.id in
<foreach
collection=
"list"
open=
"("
separator=
","
close=
")"
item=
"item"
>
#{item}
</foreach>
</select>
...
...
pcloud-service-book/src/main/resources/mapper/group/BookGroupMapper.xml
View file @
ff1648f3
...
...
@@ -20,6 +20,7 @@
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"is_delete"
property=
"isDelete"
jdbcType=
"BIT"
/>
<result
column=
"is_show_book_name"
property=
"isShowBookName"
jdbcType=
"BOOLEAN"
/>
<result
column=
"join_group_type"
property=
"joinGroupType"
jdbcType=
"INTEGER"
/>
</resultMap>
<resultMap
id=
"BookGroupDTO"
type=
"com.pcloud.book.group.dto.BookGroupDTO"
>
...
...
@@ -45,13 +46,14 @@
<result
column=
"BOOK_NAME"
property=
"bookName"
jdbcType=
"VARCHAR"
/>
<result
column=
"book_clock_info_id"
property=
"bookClockInfoId"
jdbcType=
"BIGINT"
/>
<result
column=
"is_show_book_name"
property=
"isShowBookName"
jdbcType=
"BOOLEAN"
/>
<result
column=
"join_group_type"
property=
"joinGroupType"
jdbcType=
"INTEGER"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, book_id, channel_id, scene_id, group_qrcode_url, group_qrcode_name, pro_label_id, dep_label_id,
pur_label_id, join_title, join_slogan, personal_qrcode_url, product_id, create_user,
create_time,
update_time, is_delete, is_show_book_name
update_time, is_delete, is_show_book_name
,join_group_type
</sql>
<select
id=
"getById"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Long"
>
...
...
@@ -86,6 +88,7 @@
and book_id = #{bookId,jdbcType=BIGINT}
and channel_id = #{channelId,jdbcType=BIGINT}
and create_user = #{adviserId,jdbcType=BIGINT}
ORDER BY create_time ASC limit 1
</select>
<select
id=
"getBookGroupCount"
resultType=
"Integer"
parameterType=
"Long"
>
...
...
@@ -223,6 +226,9 @@
<if
test=
"sceneId != null and sceneId != 0"
>
scene_id = #{sceneId},
</if>
<if
test=
"joinGroupType != null"
>
join_group_type = #{joinGroupType},
</if>
update_time = NOW(),
</set>
where id = #{id,jdbcType=BIGINT}
...
...
@@ -231,6 +237,7 @@
<select
id=
"getQrcodeNameAndProId"
resultType=
"QrcodeNameAndProIdDTO"
parameterType=
"java.lang.Long"
>
select
group_qrcode_name groupQrcodeName,
join_group_type joinGroupType,
product_id productId
from book_group
where id = #{_parameter,jdbcType=BIGINT}
...
...
@@ -293,6 +300,10 @@
where agent_id = #{_parameter}
</select>
<update
id=
"updatePersonQrcode"
parameterType=
"map"
>
update book_group set personal_qrcode_url = #{newQrcodeUrl} where personal_qrcode_url = #{oldQrcodeUrl}
</update>
<!--获取社群码基本信息(包括书籍信息,及BookClockInfoId)-->
<select
id=
"getBookInfoByIdsWithBookClockInfoId"
parameterType=
"map"
resultMap=
"BookGroupDTO"
>
SELECT
...
...
pcloud-service-book/src/main/resources/mapper/group/GroupQrcode.Mapper.xml
View file @
ff1648f3
...
...
@@ -177,7 +177,7 @@
<select
id=
"getBaseById"
parameterType=
"Long"
resultType=
"GroupQrcodeBaseInfoVO"
>
select
id groupQrcodeId, group_name groupName,qrcode_url qrcodeUrl
id groupQrcodeId, group_name groupName,qrcode_url qrcodeUrl
, weixin_group_id as weixinGroupId
from
book_group_qrcode
where
...
...
pcloud-service-book/src/main/resources/mapper/group/JoinGroupCipher.xml
0 → 100644
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.group.dao.impl.JoinGroupCipherDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.group.entity.JoinGroupCipher"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"cipher"
property=
"cipher"
jdbcType=
"VARCHAR"
/>
<result
column=
"classify_id"
property=
"classifyId"
jdbcType=
"BIGINT"
/>
<result
column=
"qrcode_id"
property=
"qrcodeId"
jdbcType=
"BIGINT"
/>
<result
column=
"wechat_user_id"
property=
"wechatUserId"
jdbcType=
"BIGINT"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"wx_id"
property=
"wxId"
jdbcType=
"VARCHAR"
/>
<result
column=
"has_used"
property=
"hasUsed"
jdbcType=
"BOOLEAN"
/>
<result
column=
"alt_id"
property=
"altId"
jdbcType=
"VARCHAR"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, cipher, classify_id, qrcode_id, create_time, wechat_user_id, update_time, wx_id, has_used, alt_id
</sql>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.group.entity.JoinGroupCipher"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into join_group_cipher
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
cipher,
classify_id,
qrcode_id,
create_time,
wechat_user_id,
has_used,
alt_id
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
#{cipher,jdbcType=VARCHAR},
#{classifyId,jdbcType=BIGINT},
#{qrcodeId,jdbcType=BIGINT},
now(),
#{wechatUserId,jdbcType=BIGINT},
0,
#{altId,jdbcType=VARCHAR}
</trim>
</insert>
<!--获取基本信息-->
<select
id=
"getByWechatUserId"
parameterType=
"map"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from join_group_cipher
where wechat_user_id=#{wechatUserId} and
classify_id=#{classifyId}
</select>
<!--根据暗号获取-->
<select
id=
"getByCipher"
parameterType=
"String"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from join_group_cipher
where cipher=#{cipher} limit 1
</select>
<!--根据暗号获取包含bookGroupId-->
<select
id=
"getDTOByCipher"
parameterType=
"String"
resultType=
"com.pcloud.book.group.dto.JoinGroupCipherDTO"
>
select
a.id, cipher, a.classify_id as classifyId, a.qrcode_id qrcodeId, a.wechat_user_id as wechatUserId, a.wx_id as wxId,
a.has_used as hasUsed, b.book_group_id as bookGroupId
from join_group_cipher a left join book_group_classify b on a.classify_id = b.id
where a.cipher=#{cipher} limit 1
</select>
<!--更新暗号状态为已使用-->
<update
id=
"updateCipherStateToUsed"
parameterType=
"map"
>
update join_group_cipher set
has_used=1,
wx_id=#{wxId},
update_time=now()
where cipher=#{cipher}
</update>
<!--根据微信id和机器人id获取分类集合-->
<select
id=
"getClassifyIdsByWxIdAndAltId"
parameterType=
"map"
resultType=
"com.pcloud.book.group.dto.JoinGroupCipherDTO"
>
select a.classify_id as classifyId, a.qrcode_id qrcodeId, b.book_group_id as bookGroupId from join_group_cipher a
left join book_group_classify b on a.classify_id = b.id where
a.has_used=1
and a.alt_id=#{altId}
and a.wx_id=#{wxId}
</select>
<!--更新二维码-->
<update
id=
"updateQrcodeId"
parameterType=
"map"
>
update join_group_cipher set
qrcode_id=#{qrcodeId}
where cipher=#{cipher}
and wx_id=#{wxId}
</update>
<!--获取用户支付金额-->
<select
id=
"getPayPrice"
parameterType=
"map"
resultType=
"decimal"
>
SELECT
price
FROM
join_group_cipher c
LEFT JOIN book_classify_buy_record r ON c.classify_id = r.classify_id
AND c.wechat_user_id = r.wechat_user_id
WHERE
c.qrcode_id = #{qrcodeId}
AND c.wx_id = #{wxId}
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/group/TempletRelevance.xml
0 → 100644
View file @
ff1648f3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper
namespace=
"com.pcloud.book.group.dao.impl.TempletRelevanceDaoImpl"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.group.entity.TempletRelevance"
>
<id
column=
"id"
property=
"id"
jdbcType=
"BIGINT"
/>
<result
column=
"templet_id"
property=
"templetId"
jdbcType=
"BIGINT"
/>
<result
column=
"large_templet"
property=
"largeTemplet"
jdbcType=
"INTEGER"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, templet_id, large_templet
</sql>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.group.entity.TempletRelevance"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into templet_relevance
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
templet_id,
large_templet
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
#{templetId,jdbcType=BIGINT},
#{largeTemplet,jdbcType=INTEGER}
</trim>
</insert>
<!--根据模板id查询大类id-->
<select
id=
"getByTempletId"
parameterType=
"Long"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from templet_relevance
where templet_id=#{templetId} order by id desc limit 1
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/group/WeixinQrcode.Mapper.xml
View file @
ff1648f3
...
...
@@ -32,10 +32,16 @@
VALUES (#{qrcodeUrl,jdbcType=VARCHAR},#{weixinGroupId,jdbcType=VARCHAR}, #{robotId,jdbcType=BIGINT},#{robotWxId,jdbcType=VARCHAR},#{updateState},#{createUser}, NOW(),now(), #{generation})
</insert>
<select
id=
"getOneWechatGroup"
resultType =
"WeixinQrcodeDTO"
>
<select
id=
"getOneWechatGroup"
resultType =
"WeixinQrcodeDTO"
parameterType=
"map"
>
SELECT id, qrcode_url qrcodeUrl, weixin_group_id weixinGroupId, robot_id robotId, robot_wx_id robotWxId
FROM weixin_qrcode
WHERE use_state = 0 AND update_state in (0,1,3) and weixin_group_id != ''
<if
test=
"generation!=null"
>
and generation=#{generation}
</if>
<if
test=
"generation==null"
>
and generation in (1,2)
</if>
LIMIT 1
</select>
...
...
@@ -275,4 +281,12 @@
where generation = #{_parameter}
</select>
<!--根据状态获取群数量-->
<select
id=
"countByState"
parameterType=
"map"
resultType=
"Integer"
>
select count(1) from weixin_qrcode t where t.robot_wx_id in
<foreach
collection=
"altIds"
item=
"item"
index=
"index"
separator=
","
open=
"("
close=
")"
>
#{item}
</foreach>
and use_state=#{state}
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/keywords/BookKeyword.Mapper.xml
View file @
ff1648f3
...
...
@@ -163,7 +163,9 @@
k.pic_url picUrl,
bk.is_warehouse as isWarehouse,
bk.warehouse_id as warehouseId,
k.reply_type replyType
k.reply_type replyType,
k.serve_id as serveId,
k.serve_type as serveType
FROM
book_keyword bk
JOIN
...
...
@@ -177,6 +179,33 @@
order by set_type desc, matching_rule desc, bk.id desc limit 1
</select>
<select
id=
"getKeywordIds"
resultType=
"ReplyKeywordDTO"
parameterType=
"map"
>
SELECT
k.id keywordId,
k.keywords,
k.reply_type replyType,
k.content,
k.description,
k.link_url linkUrl,
k.pic_url picUrl,
bk.is_warehouse as isWarehouse,
bk.warehouse_id as warehouseId,
bk.classify_id as classifyId,
bk.book_group_id as bookGroupId,
k.reply_type replyType
FROM
book_keyword bk
JOIN
keyword k ON bk.keyword_id = k.id
WHERE
bk.is_delete = 0 AND k.is_delete = 0
AND classify_id in (0, ${classifyId})
AND book_group_id in (${bookGroupId})
AND ((k.keywords = #{content} and matching_rule = 1 ) or (k.keywords like
concat('%',#{content},'%') and matching_rule = 0))
order by set_type desc, matching_rule desc, bk.id desc
</select>
<select
id=
"checkKeyword"
resultType=
"Boolean"
parameterType=
"map"
>
SELECT
count(1)
...
...
pcloud-service-book/src/test/test/BookKeywordWarehouseBizTest.java
0 → 100644
View file @
ff1648f3
import
com.pcloud.book.BookApplication
;
import
com.pcloud.book.adnews.biz.AdNewsBiz
;
import
com.pcloud.book.book.biz.BookKeywordWarehouseBiz
;
import
com.pcloud.book.book.constant.BookConstant
;
import
com.pcloud.book.book.vo.BookKeywordDetailVO
;
import
com.pcloud.book.book.vo.BookKeywordProductVO
;
import
com.pcloud.book.book.vo.KeywordWearhouseLabelVO
;
import
com.pcloud.book.book.vo.request.AddBookKeywordRequestVO
;
import
com.pcloud.book.book.vo.request.CheckKeywordRequestVO
;
import
com.pcloud.book.book.vo.request.EditBookKeywordRequestVO
;
import
com.pcloud.book.book.vo.request.QueryBookKeywordWarehouseRequestVO
;
import
com.pcloud.book.book.vo.response.BookKeywordResponseVO
;
import
com.pcloud.common.page.PageBeanNew
;
import
org.assertj.core.util.Lists
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.List
;
import
javax.annotation.Resource
;
import
lombok.extern.slf4j.Slf4j
;
@Slf4j
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringBootTest
(
classes
=
{
BookApplication
.
class
,
BookKeywordWarehouseBizTest
.
class
})
public
class
BookKeywordWarehouseBizTest
{
@Resource
private
BookKeywordWarehouseBiz
bookKeywordWarehouseBiz
;
@Resource
private
AdNewsBiz
adNewsBiz
;
@Test
public
void
testQuartzAdNewsBiz
(){
adNewsBiz
.
sendAdNews
((
2L
));
}
@Test
public
void
addBookKeyword
()
{
AddBookKeywordRequestVO
vo
=
new
AddBookKeywordRequestVO
();
vo
.
setUserId
(
1L
);
vo
.
setKeyword
(
"语文1"
);
vo
.
setGuide
(
"12341234"
);
vo
.
setMatchingRule
(
0
);
vo
.
setScope
(
0
);
vo
.
setAuditStatus
(
1
);
List
<
BookKeywordDetailVO
>
details
=
Lists
.
newArrayList
();
for
(
Integer
i
=
1
;
i
<
3
;
i
++)
{
BookKeywordDetailVO
v
=
new
BookKeywordDetailVO
();
final
List
<
KeywordWearhouseLabelVO
>
objects
=
Lists
.
newArrayList
();
for
(
Integer
j
=
3
;
j
<
6
;
j
++)
{
KeywordWearhouseLabelVO
v1
=
new
KeywordWearhouseLabelVO
();
v1
.
setProfessionalLabelId
(
6L
);
v1
.
setDepthLabelId
(
j
.
longValue
());
v1
.
setPurposeLabelId
(
j
.
longValue
());
objects
.
add
(
v1
);
}
v
.
setGroupId
(
1
);
v
.
setProductId
(
1L
);
v
.
setProductType
(
"APP"
);
v
.
setDescription
(
"111"
);
v
.
setLinkUrl
(
"www.baidu.com"
);
v
.
setPicUrl
(
"www.baidu.com"
);
details
.
add
(
v
);
}
BookKeywordDetailVO
v
=
new
BookKeywordDetailVO
();
final
List
<
KeywordWearhouseLabelVO
>
objects
=
Lists
.
newArrayList
();
KeywordWearhouseLabelVO
v1
=
new
KeywordWearhouseLabelVO
();
v1
.
setProfessionalLabelId
(
6L
);
v1
.
setDepthLabelId
(
8L
);
v1
.
setPurposeLabelId
(
9L
);
objects
.
add
(
v1
);
v
.
setLabels
(
Collections
.
singletonList
(
v1
));
v
.
setGroupId
(
2
);
v
.
setProductId
(
1L
);
v
.
setProductType
(
"APP"
);
v
.
setDescription
(
"111"
);
v
.
setLinkUrl
(
"www.baidu.com"
);
v
.
setPicUrl
(
"www.baidu.com"
);
details
.
add
(
v
);
vo
.
setDetails
(
details
);
this
.
bookKeywordWarehouseBiz
.
addBookKeyword
(
vo
,
null
);
}
@Test
public
void
editBookKeyword
()
{
EditBookKeywordRequestVO
vo
=
new
EditBookKeywordRequestVO
();
vo
.
setUserId
(
3L
);
vo
.
setKeywordId
(
1L
);
vo
.
setKeyword
(
"数学"
);
vo
.
setGuide
(
"数学之美"
);
vo
.
setMatchingRule
(
0
);
vo
.
setScope
(
0
);
vo
.
setEditorId
(
1L
);
List
<
BookKeywordDetailVO
>
details
=
Lists
.
newArrayList
();
for
(
Integer
i
=
0
;
i
<
3
;
i
++)
{
BookKeywordDetailVO
v
=
new
BookKeywordDetailVO
();
final
List
<
KeywordWearhouseLabelVO
>
objects
=
Lists
.
newArrayList
();
for
(
Integer
j
=
3
;
j
<
6
;
j
++)
{
KeywordWearhouseLabelVO
v1
=
new
KeywordWearhouseLabelVO
();
v1
.
setProfessionalLabelId
(
6L
);
v1
.
setDepthLabelId
(
j
.
longValue
());
v1
.
setPurposeLabelId
(
j
.
longValue
());
objects
.
add
(
v1
);
}
v
.
setGroupId
(
1
);
v
.
setProductId
(
3L
);
v
.
setProductType
(
"APP"
);
v
.
setDescription
(
"333"
);
v
.
setLinkUrl
(
"www.baidu3.com"
);
v
.
setPicUrl
(
"www.baidu3.com"
);
details
.
add
(
v
);
}
BookKeywordDetailVO
v
=
new
BookKeywordDetailVO
();
KeywordWearhouseLabelVO
v1
=
new
KeywordWearhouseLabelVO
();
v1
.
setProfessionalLabelId
(
6L
);
v1
.
setDepthLabelId
(
8L
);
v1
.
setPurposeLabelId
(
9L
);
v
.
setLabels
(
Collections
.
singletonList
(
v1
));
v
.
setGroupId
(
2
);
v
.
setProductId
(
4L
);
v
.
setProductType
(
"APP"
);
v
.
setDescription
(
"444"
);
v
.
setLinkUrl
(
"www.baidu4.com"
);
v
.
setPicUrl
(
"www.baidu4.com"
);
details
.
add
(
v
);
vo
.
setDetails
(
details
);
this
.
bookKeywordWarehouseBiz
.
editBookKeyword
(
vo
);
}
@Test
public
void
deleteBookKeyword
()
{
this
.
bookKeywordWarehouseBiz
.
deleteBookKeyword
(
1L
,
1L
);
}
@Test
public
void
listBookKeywordWarehouse
()
{
QueryBookKeywordWarehouseRequestVO
vo
=
new
QueryBookKeywordWarehouseRequestVO
();
vo
.
setCurrentPage
(
0
);
vo
.
setNumPerPage
(
10
);
vo
.
setKeyword
(
"1234123414"
);
final
PageBeanNew
<
BookKeywordResponseVO
>
warehouse
=
this
.
bookKeywordWarehouseBiz
.
listBookKeywordWarehouse
(
vo
);
for
(
BookKeywordResponseVO
responseVO
:
warehouse
.
getRecordList
())
{
System
.
out
.
println
(
responseVO
);
}
}
@Test
public
void
useKeyword
()
{
this
.
bookKeywordWarehouseBiz
.
useKeyword
(
1L
,
1L
);
}
@Test
public
void
oftenKeyword
()
{
final
PageBeanNew
<
BookKeywordProductVO
>
oftenKeyword
=
this
.
bookKeywordWarehouseBiz
.
oftenKeyword
(
0
,
10
,
0L
,
1L
,
1L
,
0L
);
for
(
BookKeywordProductVO
responseVO
:
oftenKeyword
.
getRecordList
())
{
System
.
out
.
println
(
responseVO
);
}
}
@Test
public
void
hotKeyword
()
{
final
PageBeanNew
<
BookKeywordProductVO
>
oftenKeyword
=
this
.
bookKeywordWarehouseBiz
.
hotKeyword
(
0
,
10
,
47L
,
50L
,
""
,
1L
,
0L
);
for
(
BookKeywordProductVO
responseVO
:
oftenKeyword
.
getRecordList
())
{
System
.
out
.
println
(
responseVO
);
}
}
@Test
public
void
auditKeyword
()
{
this
.
bookKeywordWarehouseBiz
.
auditKeyword
(
1L
,
3L
,
BookConstant
.
BookKeywordAuditEnum
.
PASS_THE_AUDIT
);
}
@Test
public
void
checkKeyword
()
{
CheckKeywordRequestVO
vo
=
new
CheckKeywordRequestVO
();
final
List
<
Long
>
longs
=
this
.
bookKeywordWarehouseBiz
.
checkKeyword
(
vo
);
System
.
out
.
println
(
longs
);
}
}
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