Commit 1cbcb00f by zhuyajie

个人号共读活动

parent cac7a5f7
package com.pcloud.book.reading.constant;
/**
* @描述:共读活动
* @作者:zhuyajie
* @创建时间:15:46 2020/1/15
* @版本:1.0
*/
public class ReadingActivityConstant {
/**
* 定时器类型名称
*/
public static final String JOB_GROUP = "readingActivity";
/**
* 邀请语-定时器方法名
*/
public static final String JOB_NAME_INVITE = "sendInvite";
/**
* 开场语-定时器方法名
*/
public static final String JOB_NAME_START = "sendStart";
/**
* 结束语-定时器方法名
*/
public static final String JOB_NAME_END = "sendEnd";
/**
* 打卡每日提醒-定时器方法名
*/
public static final String JOB_NAME_CLOCK_REMIND = "sendClockRemind";
}
package com.pcloud.book.reading.dto;
import com.pcloud.common.dto.BaseDto;
import lombok.Data;
/**
* @描述:分配群的参数
* @作者:zhuyajie
* @创建时间:13:53 2020/1/20
* @版本:1.0
*/
@Data
public class AssignGroupDTO extends BaseDto{
/**
* 群id
*/
private String wxGroupId;
/**
* 群主小号
*/
private String masterId;
}
package com.pcloud.book.reading.service;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* @描述:共读活动
* @作者:zhuyajie
* @创建时间:15:45 2020/1/15
* @版本:1.0
*/
@FeignClient(value = "pcloud-service-book", qualifier = "readingActivityServiceCloud", path = "book/v1.0/readingActivityService")
@Api(description = "共读活动内部服务")
public interface ReadingActivityService {
@ApiOperation(value = "定时任务发邀请语", httpMethod = "POST")
@PostMapping("/sendInviteMsg")
public void sendInviteMsg(@RequestBody @ApiParam Map<String, Object> map);
@ApiOperation(value = "定时任务发开场语", httpMethod = "POST")
@PostMapping("/sendStartMsg")
public void sendStartMsg(@RequestBody @ApiParam Map<String, Object> map);
@ApiOperation(value = "定时任务发结束语", httpMethod = "POST")
@PostMapping("/sendEndMsg")
public void sendEndMsg(@RequestBody @ApiParam Map<String, Object> map);
@ApiOperation(value = "定时任务发打卡每日提醒", httpMethod = "POST")
@PostMapping("/sendClockRemind")
public void sendClockRemind(@RequestBody @ApiParam Map<String, Object> map);
}
...@@ -285,6 +285,16 @@ ...@@ -285,6 +285,16 @@
<skip>true</skip> <skip>true</skip>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
</project> </project>
...@@ -5,6 +5,7 @@ import com.pcloud.book.advertising.entity.AdvertisingBrand; ...@@ -5,6 +5,7 @@ import com.pcloud.book.advertising.entity.AdvertisingBrand;
import com.pcloud.common.core.dao.BaseDao; import com.pcloud.common.core.dao.BaseDao;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @描述:广告品牌方 * @描述:广告品牌方
...@@ -67,4 +68,9 @@ public interface AdvertisingBrandDao extends BaseDao<AdvertisingBrand> { ...@@ -67,4 +68,9 @@ public interface AdvertisingBrandDao extends BaseDao<AdvertisingBrand> {
* @return * @return
*/ */
AdvertisingBrand getLoginInfo(String loginName); AdvertisingBrand getLoginInfo(String loginName);
/**
* 根据id集合获取
*/
Map<Long,AdvertisingBrand> getMapByIds(List<Long> brandIds);
} }
...@@ -61,4 +61,11 @@ public class AdvertisingBrandDaoImpl extends BaseDaoImpl<AdvertisingBrand> imple ...@@ -61,4 +61,11 @@ public class AdvertisingBrandDaoImpl extends BaseDaoImpl<AdvertisingBrand> imple
map.put("loginName", loginName); map.put("loginName", loginName);
return getSessionTemplate().selectOne(getStatement("getLoginInfo"), map); return getSessionTemplate().selectOne(getStatement("getLoginInfo"), map);
} }
@Override
public Map<Long,AdvertisingBrand> getMapByIds(List<Long> brandIds) {
Map<String, Object> map = new HashMap<>();
map.put("brandIds", brandIds);
return getSessionTemplate().selectMap(getStatement("getMapByIds"), map,"id");
}
} }
...@@ -587,7 +587,7 @@ public interface BookBiz { ...@@ -587,7 +587,7 @@ public interface BookBiz {
* @param adviserId * @param adviserId
* @return * @return
*/ */
PageBeanNew<AdviserBookInfoDTO> getListPage4SelfBookGroup(Integer currentPage, Integer numPerPage, String name,Long adviserId); PageBeanNew<AdviserBookInfoDTO> getListPage4SelfBookGroup(Integer currentPage, Integer numPerPage, String name,Long adviserId, Long graLabelId, Long subLabelId, Long verLabelId, Long areaLabelId);
/** /**
* 获取书籍标签 * 获取书籍标签
......
...@@ -1778,7 +1778,7 @@ public class BookBizImpl implements BookBiz { ...@@ -1778,7 +1778,7 @@ public class BookBizImpl implements BookBiz {
} }
@Override @Override
public PageBeanNew<AdviserBookInfoDTO> getListPage4SelfBookGroup(Integer currentPage, Integer numPerPage, String name,Long adviserId) { public PageBeanNew<AdviserBookInfoDTO> getListPage4SelfBookGroup(Integer currentPage, Integer numPerPage, String name,Long adviserId, Long graLabelId, Long subLabelId, Long verLabelId, Long areaLabelId) {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
if (!StringUtil.isEmpty(name)) { if (!StringUtil.isEmpty(name)) {
paramMap.put("name", name); paramMap.put("name", name);
...@@ -1787,6 +1787,10 @@ public class BookBizImpl implements BookBiz { ...@@ -1787,6 +1787,10 @@ public class BookBizImpl implements BookBiz {
paramMap.put("adviserId", adviserId); paramMap.put("adviserId", adviserId);
} }
paramMap.put("joinGroupTypes", Arrays.asList(JoinGroupTypeEnum.ROBOT.getCode(),JoinGroupTypeEnum.AI_ROBOT.getCode())); paramMap.put("joinGroupTypes", Arrays.asList(JoinGroupTypeEnum.ROBOT.getCode(),JoinGroupTypeEnum.AI_ROBOT.getCode()));
paramMap.put("graLabelId",graLabelId);
paramMap.put("subLabelId",subLabelId);
paramMap.put("verLabelId",verLabelId);
paramMap.put("areaLabelId",areaLabelId);
PageBeanNew<AdviserBookInfoDTO> pageBean = bookDao.listPageNew(new PageParam(currentPage, numPerPage), paramMap, "getListPage4BookGroup"); PageBeanNew<AdviserBookInfoDTO> pageBean = bookDao.listPageNew(new PageParam(currentPage, numPerPage), paramMap, "getListPage4BookGroup");
if (null == pageBean || ListUtils.isEmpty(pageBean.getRecordList())) { if (null == pageBean || ListUtils.isEmpty(pageBean.getRecordList())) {
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>()); return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
......
...@@ -610,6 +610,10 @@ public interface BookFacade { ...@@ -610,6 +610,10 @@ public interface BookFacade {
public ResponseDto<PageBeanNew<AdviserBookInfoDTO>> getListPage4SelfBookGroup( public ResponseDto<PageBeanNew<AdviserBookInfoDTO>> getListPage4SelfBookGroup(
@RequestHeader("token") String token, @RequestHeader("token") String token,
@RequestParam(value = "name", required = false) String name, @RequestParam(value = "name", required = false) String name,
@RequestParam(value = "graLabelId", required = false) Long graLabelId,
@RequestParam(value = "subLabelId", required = false) Long subLabelId,
@RequestParam(value = "verLabelId", required = false) Long verLabelId,
@RequestParam(value = "areaLabelId", required = false) Long areaLabelId,
@RequestParam(value = "currentPage", required = false) Integer currentPage, @RequestParam(value = "currentPage", required = false) Integer currentPage,
@RequestParam(value = "numPerPage", required = false) Integer numPerPage) @RequestParam(value = "numPerPage", required = false) Integer numPerPage)
throws BizException, PermissionException; throws BizException, PermissionException;
......
...@@ -824,6 +824,10 @@ public class BookFacadeImpl implements BookFacade { ...@@ -824,6 +824,10 @@ public class BookFacadeImpl implements BookFacade {
public ResponseDto<PageBeanNew<AdviserBookInfoDTO>> getListPage4SelfBookGroup( public ResponseDto<PageBeanNew<AdviserBookInfoDTO>> getListPage4SelfBookGroup(
@RequestHeader("token") String token, @RequestHeader("token") String token,
@RequestParam(value = "name", required = false) String name, @RequestParam(value = "name", required = false) String name,
@RequestParam(value = "graLabelId", required = false) Long graLabelId,
@RequestParam(value = "subLabelId", required = false) Long subLabelId,
@RequestParam(value = "verLabelId", required = false) Long verLabelId,
@RequestParam(value = "areaLabelId", required = false) Long areaLabelId,
@RequestParam(value = "currentPage", required = false) Integer currentPage, @RequestParam(value = "currentPage", required = false) Integer currentPage,
@RequestParam(value = "numPerPage", required = false) Integer numPerPage) @RequestParam(value = "numPerPage", required = false) Integer numPerPage)
throws BizException, PermissionException { throws BizException, PermissionException {
...@@ -831,7 +835,7 @@ public class BookFacadeImpl implements BookFacade { ...@@ -831,7 +835,7 @@ public class BookFacadeImpl implements BookFacade {
if (currentPage == null || numPerPage == null || currentPage < 0 || numPerPage < 0) { if (currentPage == null || numPerPage == null || currentPage < 0 || numPerPage < 0) {
throw BookBizException.PAGE_PARAM_DELETION; throw BookBizException.PAGE_PARAM_DELETION;
} }
PageBeanNew<AdviserBookInfoDTO> pageBean = bookBiz.getListPage4SelfBookGroup(currentPage, numPerPage, name,null); PageBeanNew<AdviserBookInfoDTO> pageBean = bookBiz.getListPage4SelfBookGroup(currentPage, numPerPage, name,null, graLabelId, subLabelId, verLabelId, areaLabelId);
return new ResponseDto<>(null == pageBean ? new PageBeanNew<>() : pageBean); return new ResponseDto<>(null == pageBean ? new PageBeanNew<>() : pageBean);
} }
...@@ -847,7 +851,7 @@ public class BookFacadeImpl implements BookFacade { ...@@ -847,7 +851,7 @@ public class BookFacadeImpl implements BookFacade {
if (currentPage == null || numPerPage == null || currentPage < 0 || numPerPage < 0) { if (currentPage == null || numPerPage == null || currentPage < 0 || numPerPage < 0) {
throw BookBizException.PAGE_PARAM_DELETION; throw BookBizException.PAGE_PARAM_DELETION;
} }
PageBeanNew<AdviserBookInfoDTO> pageBean = bookBiz.getListPage4SelfBookGroup(currentPage, numPerPage, name,adviserId); PageBeanNew<AdviserBookInfoDTO> pageBean = bookBiz.getListPage4SelfBookGroup(currentPage, numPerPage, name,adviserId,null,null,null,null);
return new ResponseDto<>(null == pageBean ? new PageBeanNew<>() : pageBean); return new ResponseDto<>(null == pageBean ? new PageBeanNew<>() : pageBean);
} }
......
...@@ -597,4 +597,15 @@ public class WechatGroupConsr { ...@@ -597,4 +597,15 @@ public class WechatGroupConsr {
} }
return map; return map;
} }
@ParamLog("根据小号类型获取小号id")
public List<String> getSelfRobotByRobotType(Integer robotType) {
List<String> ids = new ArrayList<>();
try {
ids = ResponseHandleUtil.parseList(selfRobotService.getSelfRobotByRobotType(robotType),String.class);
}catch (Exception e){
log.error("[selfRobotService.getSelfRobotByRobotType]调用失败" + e.getMessage(), e);
}
return ids;
}
} }
...@@ -759,4 +759,11 @@ public interface BookGroupBiz { ...@@ -759,4 +759,11 @@ public interface BookGroupBiz {
* @return * @return
*/ */
SelfRobotBookGroupDTO getSelfRobotBookGroupInfoByUser(String wxUserId, Long bookGroupId); SelfRobotBookGroupDTO getSelfRobotBookGroupInfoByUser(String wxUserId, Long bookGroupId);
/**
* 共读活动-好友列表
* @param userSelectParamDTO
* @return
*/
PageBeanNew<UserBookInfoVO> listUser4ReadingActivity(UserSelectParamDTO userSelectParamDTO);
} }
...@@ -25,6 +25,10 @@ import java.util.Map; ...@@ -25,6 +25,10 @@ import java.util.Map;
public interface GroupQrcodeBiz { public interface GroupQrcodeBiz {
/** /**
* 获取群人数
*/
Map<String, Integer> getGroupUserNum(List<String> wxGroups);
/**
* 根据Server获取相关的群id * 根据Server获取相关的群id
* @param serverId * @param serverId
* @return * @return
......
...@@ -104,6 +104,7 @@ import com.pcloud.book.keywords.dao.BookKeywordDao; ...@@ -104,6 +104,7 @@ import com.pcloud.book.keywords.dao.BookKeywordDao;
import com.pcloud.book.keywords.dto.KeywordDTO; import com.pcloud.book.keywords.dto.KeywordDTO;
import com.pcloud.book.keywords.enums.ReplyTypeEnum; import com.pcloud.book.keywords.enums.ReplyTypeEnum;
import com.pcloud.book.keywords.vo.ListKeywordVO; import com.pcloud.book.keywords.vo.ListKeywordVO;
import com.pcloud.book.reading.dao.ReadingUserDao;
import com.pcloud.book.util.common.ThreadPoolUtils; import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.base.constants.ChannelConstants; import com.pcloud.channelcenter.base.constants.ChannelConstants;
import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO; import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO;
...@@ -311,6 +312,8 @@ public class BookGroupBizImpl implements BookGroupBiz { ...@@ -311,6 +312,8 @@ public class BookGroupBizImpl implements BookGroupBiz {
private BookGroupFriendGuideDao bookGroupFriendGuideDao; private BookGroupFriendGuideDao bookGroupFriendGuideDao;
@Autowired @Autowired
private ResourceConsr resourceConsr; private ResourceConsr resourceConsr;
@Autowired
private ReadingUserDao readingUserDao;
private static final ThreadPoolExecutor PLATFORM_STATISTICS_EXPORT_THREAD = new ThreadPoolExecutor(2, 2, private static final ThreadPoolExecutor PLATFORM_STATISTICS_EXPORT_THREAD = new ThreadPoolExecutor(2, 2,
0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),
...@@ -4331,4 +4334,33 @@ public class BookGroupBizImpl implements BookGroupBiz { ...@@ -4331,4 +4334,33 @@ public class BookGroupBizImpl implements BookGroupBiz {
} }
return dto; return dto;
} }
@Override
public PageBeanNew<UserBookInfoVO> listUser4ReadingActivity(UserSelectParamDTO userSelectParamDTO) {
Integer currentPage = userSelectParamDTO.getCurrentPage();
Integer numPerPage = userSelectParamDTO.getNumPerPage();
Map<String, Object> map = new HashMap<>();
//用户昵称id模糊查询
if (!StringUtil.isEmpty(userSelectParamDTO.getUserQuery())) {
List<String> wxUserIds = wechatGroupConsr.getByUserQuery(userSelectParamDTO.getUserQuery());
if (!ListUtils.isEmpty(wxUserIds)) {
map.put("wxUserIds", wxUserIds);
} else {
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
}
}
map.put("bookIds", userSelectParamDTO.getBookIds());
map.put("robotId", userSelectParamDTO.getRobotId());
map.put("invitedFilter", userSelectParamDTO.getInvitedFilter());
List<UserBookInfoVO> countlist = bookGroupCipherUserDao.listUser4ReadingActivity(map);
if (ListUtils.isEmpty(countlist)) {
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>());
}
map.put("pageNum", currentPage * numPerPage);
map.put("numPerPage", numPerPage);
List<UserBookInfoVO> list = bookGroupCipherUserDao.listUser4ReadingActivity(map);
//填充用户信息、扫码书刊信息,小号信息
groupSet.setUserBookInfo4ReadingActivity(list);
return new PageBeanNew<>(currentPage, numPerPage, countlist.size(), list);
}
} }
...@@ -122,6 +122,17 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz { ...@@ -122,6 +122,17 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
private AmqpTemplate amqpTemplate; private AmqpTemplate amqpTemplate;
@Override
public Map<String, Integer> getGroupUserNum(List<String> wxGroups) {
if (CollectionUtils.isEmpty(wxGroups)) {
return Maps.newHashMap();
}
List<GroupQrcode> groupUserNum = groupQrcodeDao.getGroupUserNum(wxGroups);
if (CollectionUtils.isEmpty(groupUserNum)) {
return Maps.newHashMap();
}
return groupUserNum.stream().collect(Collectors.toMap(GroupQrcode::getWeixinGroupId, GroupQrcode::getUserNumber));
}
/** /**
* 自动更新群人数线程是否开始执行 * 自动更新群人数线程是否开始执行
......
...@@ -15,4 +15,32 @@ public class BookBusinessConstants { ...@@ -15,4 +15,32 @@ public class BookBusinessConstants {
*/ */
public static final Map<String, AutoUpdateGroupNumDTO> GROUP_NUM_DTO_MAP = new ConcurrentHashMap<>(128); public static final Map<String, AutoUpdateGroupNumDTO> GROUP_NUM_DTO_MAP = new ConcurrentHashMap<>(128);
/**
* 收款状态
*/
public enum CollectionStatus {
/**
* 代收款
*/
COLLECTION(1),
/**
* 收款中
*/
RECEIVING(2),
/**
* 收款成功
*/
COLLECTION_SUCCESSFUL(3);
private Integer code;
CollectionStatus(Integer code) {
this.code = code;
}
public Integer getCode() {
return code;
}
}
} }
...@@ -174,4 +174,26 @@ public interface BookGroupCipherUserDao extends BaseDao<BookGroupCipherUser> { ...@@ -174,4 +174,26 @@ public interface BookGroupCipherUserDao extends BaseDao<BookGroupCipherUser> {
* @return * @return
*/ */
SelfRobotBookGroupDTO getSelfRobotBookGroupInfoByUser(String wxUserId, Long bookGroupId); SelfRobotBookGroupDTO getSelfRobotBookGroupInfoByUser(String wxUserId, Long bookGroupId);
/**
* 共读活动好友查询
* @param map
* @return
*/
List<UserBookInfoVO> listUser4ReadingActivity(Map<String, Object> map);
/**
* 扫码书刊及关联的新标签
* @param wxUserId
* @param altId
* @return
*/
List<UserBookInfoItemVO> getScanBookInfoByUserNew(String wxUserId, String altId);
/**
* 获取关联的小号列表
* @param wxUserId
* @return
*/
public List<String> getAltIdListByUserId(String wxUserId);
} }
...@@ -25,6 +25,11 @@ import java.util.Map; ...@@ -25,6 +25,11 @@ import java.util.Map;
*/ */
public interface GroupQrcodeDao extends BaseDao<GroupQrcode> { public interface GroupQrcodeDao extends BaseDao<GroupQrcode> {
/**
* 获取群人数
*/
List<GroupQrcode> getGroupUserNum(List<String> wxGroupIds);
List<GroupQrcodeServerDTO> getWxGroupIdByServerId(List<Long> serverId); List<GroupQrcodeServerDTO> getWxGroupIdByServerId(List<Long> serverId);
Integer updateGroupCount(String wxGroupId, Integer num); Integer updateGroupCount(String wxGroupId, Integer num);
......
...@@ -195,4 +195,22 @@ public class BookGroupCipherUserDaoImpl extends BaseDaoImpl<BookGroupCipherUser> ...@@ -195,4 +195,22 @@ public class BookGroupCipherUserDaoImpl extends BaseDaoImpl<BookGroupCipherUser>
map.put("wxUserId", wxUserId); map.put("wxUserId", wxUserId);
return getSessionTemplate().selectOne(getStatement("getSelfRobotBookGroupInfoByUser"), map); return getSessionTemplate().selectOne(getStatement("getSelfRobotBookGroupInfoByUser"), map);
} }
@Override
public List<UserBookInfoVO> listUser4ReadingActivity(Map<String, Object> map) {
return getSessionTemplate().selectList(getStatement("listUser4ReadingActivity"), map);
}
@Override
public List<UserBookInfoItemVO> getScanBookInfoByUserNew(String wxUserId, String altId) {
Map<String, Object> map = new HashMap<>();
map.put("wxUserId", wxUserId);
map.put("altId", altId);
return getSessionTemplate().selectList(getStatement("getScanBookInfoByUserNew"), map);
}
@Override
public List<String> getAltIdListByUserId(String wxUserId) {
return getSessionTemplate().selectList(getStatement("getAltIdListByUserId"), wxUserId);
}
} }
...@@ -33,6 +33,11 @@ import java.util.Map; ...@@ -33,6 +33,11 @@ import java.util.Map;
public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements GroupQrcodeDao { public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements GroupQrcodeDao {
@Override @Override
public List<GroupQrcode> getGroupUserNum(List<String> list) {
return this.getSqlSession().selectList("getGroupUserNum", list);
}
@Override
public List<GroupQrcodeServerDTO> getWxGroupIdByServerId(List<Long> list) { public List<GroupQrcodeServerDTO> getWxGroupIdByServerId(List<Long> list) {
return this.getSqlSession().selectList(this.getStatement("getWxGroupIdByServerId"), list); return this.getSqlSession().selectList(this.getStatement("getWxGroupIdByServerId"), list);
} }
......
...@@ -48,4 +48,9 @@ public class UserSelectParamDTO { ...@@ -48,4 +48,9 @@ public class UserSelectParamDTO {
* 单本图书id * 单本图书id
*/ */
private Long bookGroupId; private Long bookGroupId;
/**
* 不展示活动已邀请的读者-共读活动
*/
private Boolean invitedFilter;
} }
...@@ -688,4 +688,9 @@ public interface BookGroupFacade { ...@@ -688,4 +688,9 @@ public interface BookGroupFacade {
@CookieValue("userInfo") String userInfo, @CookieValue("userInfo") String userInfo,
@RequestBody WxWechatUserCorrelation wxWechatUserCorrelation @RequestBody WxWechatUserCorrelation wxWechatUserCorrelation
)throws BizException, PermissionException; )throws BizException, PermissionException;
@ApiOperation(value = "共读活动-用户列表查询", httpMethod = "POST")
@PostMapping("listUser4ReadingActivity")
public ResponseDto<PageBeanNew<UserBookInfoVO>> listUser4ReadingActivity(
@RequestHeader("token") String token, @RequestBody @ApiParam UserSelectParamDTO userSelectParamDTO) throws PermissionException;
} }
...@@ -11,7 +11,6 @@ import com.pcloud.book.group.dto.UserSelectParamDTO; ...@@ -11,7 +11,6 @@ import com.pcloud.book.group.dto.UserSelectParamDTO;
import com.pcloud.book.group.entity.BookGroup; import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupClassify; import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.entity.BookGroupServe; import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.entity.WxWechatUserCorrelation; import com.pcloud.book.group.entity.WxWechatUserCorrelation;
import com.pcloud.book.group.enums.JoinGroupTypeEnum; import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.facade.BookGroupFacade; import com.pcloud.book.group.facade.BookGroupFacade;
...@@ -1096,4 +1095,16 @@ public class BookGroupFacadeImpl implements BookGroupFacade { ...@@ -1096,4 +1095,16 @@ public class BookGroupFacadeImpl implements BookGroupFacade {
bookGroupBiz.createWxWechatUserCorrelation(wechatUserId,wxWechatUserCorrelation); bookGroupBiz.createWxWechatUserCorrelation(wechatUserId,wxWechatUserCorrelation);
return new ResponseDto<>(); return new ResponseDto<>();
} }
@ApiOperation(value = "共读活动-用户列表查询", httpMethod = "POST")
@PostMapping("listUser4ReadingActivity")
@Override
public ResponseDto<PageBeanNew<UserBookInfoVO>> listUser4ReadingActivity(@RequestHeader("token") String token, @RequestBody @ApiParam UserSelectParamDTO userSelectParamDTO) throws PermissionException {
SessionUtil.getToken4Redis(token);
if (null == userSelectParamDTO || null == userSelectParamDTO.getCurrentPage() || null == userSelectParamDTO.getNumPerPage()) {
throw new WechatGroupBizException(WechatGroupBizException.PARAM_IS_NULL, "缺少参数");
}
PageBeanNew<UserBookInfoVO> pageBeanNew = bookGroupBiz.listUser4ReadingActivity(userSelectParamDTO);
return new ResponseDto<>(pageBeanNew);
}
} }
...@@ -5,6 +5,8 @@ import com.pcloud.appcenter.app.dto.AppDto; ...@@ -5,6 +5,8 @@ import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.appcenter.assist.dto.AssistTempletDTO; import com.pcloud.appcenter.assist.dto.AssistTempletDTO;
import com.pcloud.appcenter.base.dto.AppPriceCacheDTO; import com.pcloud.appcenter.base.dto.AppPriceCacheDTO;
import com.pcloud.appcenter.cache.service.AppPriceCacheService; import com.pcloud.appcenter.cache.service.AppPriceCacheService;
import com.pcloud.book.book.dao.BookLabelDao;
import com.pcloud.book.book.entity.BookLabel;
import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr; import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr;
import com.pcloud.book.consumer.app.AppConsr; import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.app.AssistTempletConsr; import com.pcloud.book.consumer.app.AssistTempletConsr;
...@@ -25,6 +27,7 @@ import com.pcloud.book.group.dto.CountAndTimeDTO; ...@@ -25,6 +27,7 @@ import com.pcloud.book.group.dto.CountAndTimeDTO;
import com.pcloud.book.group.dto.GroupTopicDTO; import com.pcloud.book.group.dto.GroupTopicDTO;
import com.pcloud.book.group.entity.BookGroupServe; import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.vo.BookGroupAnalysisVO; import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.book.group.vo.RobotBaseInfoVO;
import com.pcloud.book.group.vo.UserBookInfoItemVO; import com.pcloud.book.group.vo.UserBookInfoItemVO;
import com.pcloud.book.group.vo.UserBookInfoVO; import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.keywords.dao.BookKeywordDao; import com.pcloud.book.keywords.dao.BookKeywordDao;
...@@ -57,6 +60,7 @@ import org.springframework.util.CollectionUtils; ...@@ -57,6 +60,7 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -110,6 +114,8 @@ public class GroupSet { ...@@ -110,6 +114,8 @@ public class GroupSet {
private ProductConsr productConsr; private ProductConsr productConsr;
@Autowired @Autowired
private AppPriceCacheService appPriceCacheService; private AppPriceCacheService appPriceCacheService;
@Autowired
private BookLabelDao bookLabelDao;
/** /**
* 群分类删除topic * 群分类删除topic
...@@ -707,4 +713,87 @@ public class GroupSet { ...@@ -707,4 +713,87 @@ public class GroupSet {
} }
} }
} }
/**
* 共读活动好友列表-填充用户信息、扫码书刊信息
* @param list
*/
public void setUserBookInfo4ReadingActivity(List<UserBookInfoVO> list) {
List<String> wxUserIds = list.stream().filter(s -> s.getWxUserId() != null).map(UserBookInfoVO::getWxUserId).distinct().collect(Collectors.toList());
Map<String, GroupUserDTO> userDTOMap = wechatGroupConsr.mapWxUserInfoByWxIdList(wxUserIds);
List<Long> bookLabelIds = new ArrayList<>();
List<String> altIdList = new ArrayList<>();
for (UserBookInfoVO userBookInfoVO : list) {
//用户信息
if (!MapUtils.isEmpty(userDTOMap) && userDTOMap.containsKey(userBookInfoVO.getWxUserId())) {
GroupUserDTO userDTO = userDTOMap.get(userBookInfoVO.getWxUserId());
userBookInfoVO.setHeadPic(userDTO.getHeadPic());
userBookInfoVO.setNickName(userDTO.getNickName());
userBookInfoVO.setSex(userDTO.getSex());
}
//扫码书刊
List<UserBookInfoItemVO> bookList = bookGroupCipherUserDao.getScanBookInfoByUserNew(userBookInfoVO.getWxUserId(), userBookInfoVO.getAltId());
userBookInfoVO.setBookInfoItemVOS(bookList);
List<Long> graLabelIds = bookList.stream().filter(s -> s.getGraLabelId() != null).map(UserBookInfoItemVO::getGraLabelId).distinct().collect(Collectors.toList());
List<Long> subLabelIds = bookList.stream().filter(s -> s.getSubLabelId() != null).map(UserBookInfoItemVO::getSubLabelId).distinct().collect(Collectors.toList());
List<Long> verLabelIds = bookList.stream().filter(s -> s.getVerLabelId() != null).map(UserBookInfoItemVO::getVerLabelId).distinct().collect(Collectors.toList());
List<Long> areaLabelIds = bookList.stream().filter(s -> s.getAreaLabelId() != null).map(UserBookInfoItemVO::getAreaLabelId).distinct().collect(Collectors.toList());
if (!ListUtils.isEmpty(graLabelIds)) {
bookLabelIds.addAll(graLabelIds);
}
if (!ListUtils.isEmpty(subLabelIds)) {
bookLabelIds.addAll(subLabelIds);
}
if (!ListUtils.isEmpty(verLabelIds)) {
bookLabelIds.addAll(verLabelIds);
}
if (!ListUtils.isEmpty(areaLabelIds)) {
bookLabelIds.addAll(areaLabelIds);
}
//小号id
List<RobotBaseInfoVO> robotBaseInfoVOS = new ArrayList<>();
RobotBaseInfoVO robotBaseInfoVO = new RobotBaseInfoVO();
robotBaseInfoVO.setRobotId(userBookInfoVO.getAltId());
robotBaseInfoVOS.add(robotBaseInfoVO);
userBookInfoVO.setRobotBaseInfoVOS(robotBaseInfoVOS);
altIdList.addAll(Arrays.asList(userBookInfoVO.getAltId()));
}
//标签,小号信息
Map<Long, BookLabel> bookLabelMap =new HashMap<>();
if (!ListUtils.isEmpty(bookLabelIds)){
bookLabelMap = bookLabelDao.getMapByIds(bookLabelIds);
}
Map<String, GroupUserDTO> groupUserDTOMap =new HashMap<>();
if (!ListUtils.isEmpty(altIdList)){
groupUserDTOMap = wechatGroupConsr.mapRobotInfoByIdList(altIdList);
}
for (UserBookInfoVO userBookInfoVO: list){
if (!MapUtils.isEmpty(bookLabelMap)){
for (UserBookInfoItemVO bookInfoItemVO : userBookInfoVO.getBookInfoItemVOS()) {
if (null != bookInfoItemVO.getGraLabelId() && bookLabelMap.containsKey(bookInfoItemVO.getGraLabelId())) {
bookInfoItemVO.setGraLabelName(bookLabelMap.get(bookInfoItemVO.getGraLabelId()).getName());
}
if (null != bookInfoItemVO.getSubLabelId() && bookLabelMap.containsKey(bookInfoItemVO.getSubLabelId())) {
bookInfoItemVO.setSubLabelName(bookLabelMap.get(bookInfoItemVO.getSubLabelId()).getName());
}
if (null != bookInfoItemVO.getVerLabelId() && bookLabelMap.containsKey(bookInfoItemVO.getVerLabelId())) {
bookInfoItemVO.setVerLabelName(bookLabelMap.get(bookInfoItemVO.getVerLabelId()).getName());
}
if (null != bookInfoItemVO.getAreaLabelId() && bookLabelMap.containsKey(bookInfoItemVO.getAreaLabelId())) {
bookInfoItemVO.setAreaLabelName(bookLabelMap.get(bookInfoItemVO.getAreaLabelId()).getName());
}
}
}
for (RobotBaseInfoVO robotBaseInfoVO : userBookInfoVO.getRobotBaseInfoVOS()) {
if (!MapUtils.isEmpty(groupUserDTOMap) && groupUserDTOMap.containsKey(robotBaseInfoVO.getRobotId())) {
GroupUserDTO groupUserDTO = groupUserDTOMap.get(robotBaseInfoVO.getRobotId());
robotBaseInfoVO.setNickName(groupUserDTO.getNickName());
robotBaseInfoVO.setHeadPic(groupUserDTO.getHeadPic());
robotBaseInfoVO.setSex(groupUserDTO.getSex());
}
}
}
}
} }
package com.pcloud.book.group.tools;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.wechatgroup.selfrobot.dto.SelfRobotMsgRecord;
import com.pcloud.wechatgroup.selfrobot.service.SelfRobotService;
import com.sdk.wxgroup.SendArticleMessageVO;
import com.sdk.wxgroup.SendGroupInviteVO;
import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.WxGroupSDK;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
/**
* @描述:1v1个人号发送消息
* @作者:zhuyajie
* @创建时间:18:02 2019/11/13
* @版本:1.0
*/
@Slf4j
@Component
public class SendSelfMsgTools {
@Autowired
private SelfRobotService selfRobotService;
private static SendSelfMsgTools sendSelfMsgTools;
/**
* 发送文本消息
*/
public static void sendTextMessage(SendTextMessageVO sendTextMessageVO) {
WxGroupSDK.sendTextMessage(sendTextMessageVO);
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
SelfRobotMsgRecord selfRobotMsgRecord = new SelfRobotMsgRecord();
selfRobotMsgRecord.setMessageType(1);//文本
selfRobotMsgRecord.setTextContent(sendTextMessageVO.getContent());
selfRobotMsgRecord.setWxId(sendTextMessageVO.getAltId());
selfRobotMsgRecord.setWxUserId(sendTextMessageVO.getWxGroupId());
insertMsg(selfRobotMsgRecord);
});
}
/**
* 发送入群邀请链接
*/
public static void sendGroupInvite(SendGroupInviteVO sendGroupInviteVO) {
WxGroupSDK.sendGroupInvite(sendGroupInviteVO);
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
SelfRobotMsgRecord selfRobotMsgRecord = new SelfRobotMsgRecord();
selfRobotMsgRecord.setMessageType(11);//链接
selfRobotMsgRecord.setWxId(sendGroupInviteVO.getAltId());
selfRobotMsgRecord.setWxUserId(sendGroupInviteVO.getWxId());
selfRobotMsgRecord.setTitle("邀请你加入群聊");
insertMsg(selfRobotMsgRecord);
});
}
/**
* 发送链接
* @param sendArticleMessageVO
*/
public static void sendArticleMessage(SendArticleMessageVO sendArticleMessageVO){
WxGroupSDK.sendArticleMessage(sendArticleMessageVO);
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
SelfRobotMsgRecord selfRobotMsgRecord = new SelfRobotMsgRecord();
selfRobotMsgRecord.setMessageType(11);//链接
selfRobotMsgRecord.setWxId(sendArticleMessageVO.getAltId());
selfRobotMsgRecord.setWxUserId(sendArticleMessageVO.getWxGroupId());
selfRobotMsgRecord.setTitle(sendArticleMessageVO.getTitle());
selfRobotMsgRecord.setUrl(sendArticleMessageVO.getLinkUrl());
insertMsg(selfRobotMsgRecord);
});
}
/**
* 发送图片
*/
public static void sendPicMessage(SendPicMessageVO sendPicMessageVO){
WxGroupSDK.sendPicMessage(sendPicMessageVO);
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
SelfRobotMsgRecord selfRobotMsgRecord = new SelfRobotMsgRecord();
selfRobotMsgRecord.setMessageType(2);//图片
selfRobotMsgRecord.setWxId(sendPicMessageVO.getAltId());
selfRobotMsgRecord.setWxUserId(sendPicMessageVO.getWxGroupId());
selfRobotMsgRecord.setResourceUrl(sendPicMessageVO.getPicUrl());
insertMsg(selfRobotMsgRecord);
});
}
/**
* 保存发送记录
*/
public static void insertMsg(SelfRobotMsgRecord selfRobotMsgRecord) {
try {
sendSelfMsgTools.selfRobotService.addSelfRobotMsg(selfRobotMsgRecord);
} catch (Exception e) {
log.error("添加个人号消息记录失败" + e.getMessage(), e);
}
}
@PostConstruct
public void init() {
sendSelfMsgTools = this;
sendSelfMsgTools.selfRobotService = this.selfRobotService;
}
}
package com.pcloud.book.group.vo;
import com.pcloud.common.dto.BaseDto;
import lombok.Data;
/**
* @描述:小号基本信息
* @作者:zhuyajie
* @创建时间:15:58 2020/1/20
* @版本:1.0
*/
@Data
public class RobotBaseInfoVO extends BaseDto{
/**
* 小号id
*/
private String robotId;
/**
* 昵称
*/
private String nickName;
/**
* 头像
*/
private String headPic;
/**
* 性别
*/
private Integer sex;
}
...@@ -45,4 +45,45 @@ public class UserBookInfoItemVO extends BaseDto{ ...@@ -45,4 +45,45 @@ public class UserBookInfoItemVO extends BaseDto{
* 编辑id * 编辑id
*/ */
private Long adviserId; private Long adviserId;
/**
* 年级标签id
*/
private Long graLabelId;
/**
* 科目标签id
*/
private Long subLabelId;
/**
* 版本标签id
*/
private Long verLabelId;
/**
* 地域标签id
*/
private Long areaLabelId;
/**
* 年级标签名称
*/
private String graLabelName;
/**
* 科目标签名称
*/
private String subLabelName;
/**
* 版本标签名称
*/
private String verLabelName;
/**
* 地域标签名称
*/
private String areaLabelName;
} }
...@@ -43,4 +43,8 @@ public class UserBookInfoVO extends BaseDto { ...@@ -43,4 +43,8 @@ public class UserBookInfoVO extends BaseDto {
* 扫码书刊信息 * 扫码书刊信息
*/ */
private List<UserBookInfoItemVO> bookInfoItemVOS; private List<UserBookInfoItemVO> bookInfoItemVOS;
/**
* 关联小号
*/
private List<RobotBaseInfoVO> robotBaseInfoVOS;
} }
...@@ -22,7 +22,6 @@ import com.pcloud.book.group.dto.SendGuideMessageDTO; ...@@ -22,7 +22,6 @@ import com.pcloud.book.group.dto.SendGuideMessageDTO;
import com.pcloud.book.group.entity.*; import com.pcloud.book.group.entity.*;
import com.pcloud.book.group.enums.CipherTypeEnum; import com.pcloud.book.group.enums.CipherTypeEnum;
import com.pcloud.book.group.enums.TouchTypeEnum; import com.pcloud.book.group.enums.TouchTypeEnum;
import com.pcloud.book.group.tools.SendSelfMsgTools;
import com.pcloud.book.group.tools.SendWeixinRequestTools; import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO; import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO;
import com.pcloud.book.keywords.biz.BookGuideBiz; import com.pcloud.book.keywords.biz.BookGuideBiz;
...@@ -191,7 +190,7 @@ public class BookGuideBizImpl implements BookGuideBiz { ...@@ -191,7 +190,7 @@ public class BookGuideBizImpl implements BookGuideBiz {
vo.setAltId(agreeAddUserDTO.getRobotWxId()); vo.setAltId(agreeAddUserDTO.getRobotWxId());
vo.setWxGroupId(agreeAddUserDTO.getUserWxId()); vo.setWxGroupId(agreeAddUserDTO.getUserWxId());
vo.setIp(agreeAddUserDTO.getIp()); vo.setIp(agreeAddUserDTO.getIp());
SendSelfMsgTools.sendTextMessage(vo); WxGroupSDK.sendTextMessage(vo);
return; return;
} }
if (StringUtil.isBlank(cipher)) { if (StringUtil.isBlank(cipher)) {
......
...@@ -37,7 +37,6 @@ import com.pcloud.book.group.enums.JoinGroupTypeEnum; ...@@ -37,7 +37,6 @@ import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.enums.QrcodeStatusEnum; import com.pcloud.book.group.enums.QrcodeStatusEnum;
import com.pcloud.book.group.enums.TouchTypeEnum; import com.pcloud.book.group.enums.TouchTypeEnum;
import com.pcloud.book.group.enums.UpdateStatusEnum; import com.pcloud.book.group.enums.UpdateStatusEnum;
import com.pcloud.book.group.tools.SendSelfMsgTools;
import com.pcloud.book.group.tools.SendWeixinRequestTools; import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.ClassifyNameVO; import com.pcloud.book.group.vo.ClassifyNameVO;
import com.pcloud.book.group.vo.ClassifyVO; import com.pcloud.book.group.vo.ClassifyVO;
...@@ -58,6 +57,7 @@ import com.pcloud.book.keywords.vo.QrWeixinParam; ...@@ -58,6 +57,7 @@ import com.pcloud.book.keywords.vo.QrWeixinParam;
import com.pcloud.book.keywords.vo.SetKeywordVO; import com.pcloud.book.keywords.vo.SetKeywordVO;
import com.pcloud.book.keywords.vo.SetRankVO; import com.pcloud.book.keywords.vo.SetRankVO;
import com.pcloud.book.keywords.vo.UpdateKeywordVO; import com.pcloud.book.keywords.vo.UpdateKeywordVO;
import com.pcloud.book.reading.biz.ReadingActivityBiz;
import com.pcloud.book.util.common.ThreadPoolUtils; import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.base.constants.ChannelEnum; import com.pcloud.channelcenter.base.constants.ChannelEnum;
import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService; import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService;
...@@ -82,14 +82,7 @@ import com.pcloud.resourcecenter.product.dto.ProductDto; ...@@ -82,14 +82,7 @@ import com.pcloud.resourcecenter.product.dto.ProductDto;
import com.pcloud.resourcecenter.product.dto.ProductTypeDto; import com.pcloud.resourcecenter.product.dto.ProductTypeDto;
import com.pcloud.wechatgroup.group.dto.RobotReplyDTO; import com.pcloud.wechatgroup.group.dto.RobotReplyDTO;
import com.pcloud.wechatgroup.message.dto.SendTextDTO; import com.pcloud.wechatgroup.message.dto.SendTextDTO;
import com.sdk.wxgroup.ChangeNameVO; import com.sdk.wxgroup.*;
import com.sdk.wxgroup.SendArticleMessageVO;
import com.sdk.wxgroup.SendFileVO;
import com.sdk.wxgroup.SendGroupInviteVO;
import com.sdk.wxgroup.SendMessageTypeEnum;
import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.WxGroupSDK;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -176,6 +169,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -176,6 +169,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
private String envStr; private String envStr;
@Autowired @Autowired
private SelfRobotKeywordReplyDao selfRobotKeywordReplyDao; private SelfRobotKeywordReplyDao selfRobotKeywordReplyDao;
@Autowired
private ReadingActivityBiz readingActivityBiz;
/** /**
* 字符串切割长度 * 字符串切割长度
*/ */
...@@ -586,7 +581,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -586,7 +581,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
|| (envStr.toUpperCase().equals("UAT") && sendTextDTO.getWxId().equals("wxid_51ff9f099l9a22") && new Long(449L).equals(bookGroupCipherUser.getBookGroupId())) || (envStr.toUpperCase().equals("UAT") && sendTextDTO.getWxId().equals("wxid_51ff9f099l9a22") && new Long(449L).equals(bookGroupCipherUser.getBookGroupId()))
|| (envStr.toUpperCase().equals("PRO") && sendTextDTO.getWxId().equals("wxid_x8i897ryabo722") && new Long(23735L).equals(bookGroupCipherUser.getBookGroupId())))){ || (envStr.toUpperCase().equals("PRO") && sendTextDTO.getWxId().equals("wxid_x8i897ryabo722") && new Long(23735L).equals(bookGroupCipherUser.getBookGroupId())))){
BookGroup bookGroup = bookGroupDao.getByShortBookName(content); BookGroup bookGroup = bookGroupDao.getByShortBookName(content);
if (bookGroup == null) { Boolean isActivityKeyword = readingActivityBiz.isKeyWord(sendTextDTO);
if (bookGroup == null && !isActivityKeyword) {
//既不是关键词也不是识别码 //既不是关键词也不是识别码
String altIdAndWxId = sendTextDTO.getWxId() + "_" + sendTextDTO.getWechatUserId(); String altIdAndWxId = sendTextDTO.getWxId() + "_" + sendTextDTO.getWechatUserId();
Integer send = JedisClusterUtils.hgetJson2Class(REPLY_GUIDE_CACHE, altIdAndWxId, Integer.class); Integer send = JedisClusterUtils.hgetJson2Class(REPLY_GUIDE_CACHE, altIdAndWxId, Integer.class);
...@@ -599,7 +595,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -599,7 +595,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
} }
}else { }else {
BookGroup bookGroup = bookGroupDao.getByShortBookName(content); BookGroup bookGroup = bookGroupDao.getByShortBookName(content);
if (bookGroup == null) { Boolean isActivityKeyword = readingActivityBiz.isKeyWord(sendTextDTO);
if (bookGroup == null && !isActivityKeyword) {
sendText(sendTextDTO, "抱歉呀!小睿不太明白你在说什么。嘿嘿!你的语言太高级了,待小睿深度解析一下,我还在不断学习呢!或者你看看,是不是关键词输错了呢?麻烦你再输一遍正确的关键词?比如回复我背单词。"); sendText(sendTextDTO, "抱歉呀!小睿不太明白你在说什么。嘿嘿!你的语言太高级了,待小睿深度解析一下,我还在不断学习呢!或者你看看,是不是关键词输错了呢?麻烦你再输一遍正确的关键词?比如回复我背单词。");
} }
} }
...@@ -975,7 +972,7 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -975,7 +972,7 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
vo.setAltId(robotId); vo.setAltId(robotId);
vo.setWxGroupId(userWxId); vo.setWxGroupId(userWxId);
vo.setIp(ip); vo.setIp(ip);
SendSelfMsgTools.sendTextMessage(vo); WxGroupSDK.sendTextMessage(vo);
log.info("发送收到暗号后的本书介绍 : {}", vo); log.info("发送收到暗号后的本书介绍 : {}", vo);
} }
...@@ -1044,7 +1041,7 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -1044,7 +1041,7 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
sendGroupInviteVO.setWxId(sendTextDTO.getWechatUserId()); sendGroupInviteVO.setWxId(sendTextDTO.getWechatUserId());
sendGroupInviteVO.setWxGroupId(wxGroupId); sendGroupInviteVO.setWxGroupId(wxGroupId);
sendGroupInviteVO.setIp(sendTextDTO.getIp()); sendGroupInviteVO.setIp(sendTextDTO.getIp());
SendSelfMsgTools.sendGroupInvite(sendGroupInviteVO); WxGroupSDK.sendGroupInvite(sendGroupInviteVO);
log.info("[同意加好友发送欢迎语] 发送进群链接 sendGroupInviteVO:{}", sendGroupInviteVO); log.info("[同意加好友发送欢迎语] 发送进群链接 sendGroupInviteVO:{}", sendGroupInviteVO);
} }
......
...@@ -2,6 +2,7 @@ package com.pcloud.book.mq.topic; ...@@ -2,6 +2,7 @@ package com.pcloud.book.mq.topic;
import com.pcloud.book.group.biz.GroupQrcodeBiz; import com.pcloud.book.group.biz.GroupQrcodeBiz;
import com.pcloud.book.mq.config.MQTopicConumer; import com.pcloud.book.mq.config.MQTopicConumer;
import com.pcloud.book.reading.biz.ReadingActivityBiz;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.wechatgroup.message.dto.AddWXGroupDTO; import com.pcloud.wechatgroup.message.dto.AddWXGroupDTO;
...@@ -21,6 +22,8 @@ public class AddWxGroupListener { ...@@ -21,6 +22,8 @@ public class AddWxGroupListener {
@Autowired @Autowired
private GroupQrcodeBiz groupQrcodeBiz; private GroupQrcodeBiz groupQrcodeBiz;
@Autowired
private ReadingActivityBiz readingActivityBiz;
/** /**
* 接收微信用户进群消息 * 接收微信用户进群消息
...@@ -32,6 +35,7 @@ public class AddWxGroupListener { ...@@ -32,6 +35,7 @@ public class AddWxGroupListener {
if (addWXGroupDTO == null || addWXGroupDTO.getWechatGroupId() == null || addWXGroupDTO.getMemberCount() == null) if (addWXGroupDTO == null || addWXGroupDTO.getWechatGroupId() == null || addWXGroupDTO.getMemberCount() == null)
return; return;
groupQrcodeBiz.addOneUser(addWXGroupDTO.getWechatGroupId(), addWXGroupDTO.getMemberCount(),addWXGroupDTO.getNickName(), addWXGroupDTO.getWxId(), addWXGroupDTO.getIp()); groupQrcodeBiz.addOneUser(addWXGroupDTO.getWechatGroupId(), addWXGroupDTO.getMemberCount(),addWXGroupDTO.getNickName(), addWXGroupDTO.getWxId(), addWXGroupDTO.getIp());
readingActivityBiz.activityUserJoinGroup(addWXGroupDTO);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("接收微信用户进群消息失败" + e.getMessage(), e); LOGGER.error("接收微信用户进群消息失败" + e.getMessage(), e);
} }
......
...@@ -2,10 +2,10 @@ package com.pcloud.book.mq.topic; ...@@ -2,10 +2,10 @@ package com.pcloud.book.mq.topic;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr; import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.biz.BookGroupClassifyBiz; import com.pcloud.book.group.biz.BookGroupClassifyBiz;
import com.pcloud.book.group.biz.GroupQrcodeBiz;
import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO; import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO;
import com.pcloud.book.keywords.biz.BookKeywordBiz; import com.pcloud.book.keywords.biz.BookKeywordBiz;
import com.pcloud.book.mq.config.MQTopicConumer; import com.pcloud.book.mq.config.MQTopicConumer;
import com.pcloud.book.reading.biz.ReadingActivityBiz;
import com.pcloud.book.riddle.biz.RiddleRecordBiz; import com.pcloud.book.riddle.biz.RiddleRecordBiz;
import com.pcloud.book.util.common.ThreadPoolUtils; import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.book.weixinclock.biz.WeixinClockBiz; import com.pcloud.book.weixinclock.biz.WeixinClockBiz;
...@@ -46,9 +46,9 @@ public class WxGroupSendTextListener { ...@@ -46,9 +46,9 @@ public class WxGroupSendTextListener {
@Autowired @Autowired
private WeixinClockBiz weixinClockBiz; private WeixinClockBiz weixinClockBiz;
@Autowired @Autowired
private GroupQrcodeBiz groupQrcodeBiz;
@Autowired
private BookGroupClassifyBiz bookGroupClassifyBiz; private BookGroupClassifyBiz bookGroupClassifyBiz;
@Autowired
private ReadingActivityBiz readingActivityBiz;
/** /**
* 接收微信用户进群消息 * 接收微信用户进群消息
...@@ -73,6 +73,8 @@ public class WxGroupSendTextListener { ...@@ -73,6 +73,8 @@ public class WxGroupSendTextListener {
} }
//猜谜语 //猜谜语
riddleRecordBiz.riddleProcess(sendTextDTO); riddleRecordBiz.riddleProcess(sendTextDTO);
//共读活动
readingActivityBiz.receiveKeyWord(sendTextDTO);
} }
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("接收用户发送文本消息失败" + e.getMessage(), e); LOGGER.error("接收用户发送文本消息失败" + e.getMessage(), e);
......
...@@ -8,7 +8,6 @@ import com.pcloud.book.group.dto.BookGroupDTO; ...@@ -8,7 +8,6 @@ import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.SelfRobotBookGroupDTO; import com.pcloud.book.group.dto.SelfRobotBookGroupDTO;
import com.pcloud.book.group.entity.WeixinQrcodeGeneration; import com.pcloud.book.group.entity.WeixinQrcodeGeneration;
import com.pcloud.book.group.set.GroupSet; import com.pcloud.book.group.set.GroupSet;
import com.pcloud.book.group.tools.SendSelfMsgTools;
import com.pcloud.book.group.vo.UserBookInfoVO; import com.pcloud.book.group.vo.UserBookInfoVO;
import com.pcloud.book.push.biz.SelfPushBiz; import com.pcloud.book.push.biz.SelfPushBiz;
import com.pcloud.book.push.constant.PushConstant; import com.pcloud.book.push.constant.PushConstant;
...@@ -251,7 +250,7 @@ public class SelfPushBizImpl implements SelfPushBiz { ...@@ -251,7 +250,7 @@ public class SelfPushBizImpl implements SelfPushBiz {
sendTextMessageVO.setAltId(altId); sendTextMessageVO.setAltId(altId);
sendTextMessageVO.setWxGroupId(userWxId); sendTextMessageVO.setWxGroupId(userWxId);
sendTextMessageVO.setIp(getIpByRobot(altId)); sendTextMessageVO.setIp(getIpByRobot(altId));
SendSelfMsgTools.sendTextMessage(sendTextMessageVO); WxGroupSDK.sendTextMessage(sendTextMessageVO);
return; return;
} }
if (ItemTypeEnum.LINK.value.equals(itemType)) { if (ItemTypeEnum.LINK.value.equals(itemType)) {
...@@ -265,7 +264,7 @@ public class SelfPushBizImpl implements SelfPushBiz { ...@@ -265,7 +264,7 @@ public class SelfPushBizImpl implements SelfPushBiz {
sendArticleMessageVO.setPicUrl(selfPushItem.getLinkImageUrl()); sendArticleMessageVO.setPicUrl(selfPushItem.getLinkImageUrl());
sendArticleMessageVO.setTitle(selfPushItem.getLinkTitle()); sendArticleMessageVO.setTitle(selfPushItem.getLinkTitle());
sendArticleMessageVO.setIp(getIpByRobot(altId)); sendArticleMessageVO.setIp(getIpByRobot(altId));
SendSelfMsgTools.sendArticleMessage(sendArticleMessageVO); WxGroupSDK.sendArticleMessage(sendArticleMessageVO);
return; return;
} }
if (ItemTypeEnum.APP.value.equals(itemType)) { if (ItemTypeEnum.APP.value.equals(itemType)) {
...@@ -278,7 +277,7 @@ public class SelfPushBizImpl implements SelfPushBiz { ...@@ -278,7 +277,7 @@ public class SelfPushBizImpl implements SelfPushBiz {
sendPicMessageVO.setWxGroupId(userWxId); sendPicMessageVO.setWxGroupId(userWxId);
sendPicMessageVO.setPicUrl(selfPushItem.getImageUrl()); sendPicMessageVO.setPicUrl(selfPushItem.getImageUrl());
sendPicMessageVO.setIp(getIpByRobot(altId)); sendPicMessageVO.setIp(getIpByRobot(altId));
SendSelfMsgTools.sendPicMessage(sendPicMessageVO); WxGroupSDK.sendPicMessage(sendPicMessageVO);
return; return;
} }
} }
......
package com.pcloud.book.reading.biz;
import com.pcloud.book.reading.dto.AssignGroupDTO;
import com.pcloud.book.reading.dto.ReadingActivityAdditionParamDTO;
import com.pcloud.book.reading.dto.ReadingActivityBaseParamDTO;
import com.pcloud.book.reading.dto.ReadingActivityDTO;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.wechatgroup.message.dto.AddWXGroupDTO;
import com.pcloud.wechatgroup.message.dto.SendTextDTO;
import com.sdk.wxgroup.CollectionVO;
import com.sdk.wxgroup.ReceiptMoneyVO;
/**
* @描述:共读活动
* @作者:zhuyajie
* @创建时间:17:43 2020/1/14
* @版本:1.0
*/
public interface ReadingActivityBiz {
/**
* 收到转账
* @param vo 转账信息
*/
void receiveMoney(CollectionVO vo);
/**
* 创建
* @param readingActivityBaseParamDTO
*/
Long add(ReadingActivityBaseParamDTO readingActivityBaseParamDTO);
/**
* 修改
* @param readingActivityBaseParamDTO
*/
void update(ReadingActivityBaseParamDTO readingActivityBaseParamDTO);
/**
* 添加高级设置
* @param readingActivityAdditionParamDTO
*/
void updateAdditionSetting(ReadingActivityAdditionParamDTO readingActivityAdditionParamDTO);
/**
* 定时任务回调-发送消息
* @param methodType
* @param activityId
*/
void sendQuartzMsg(String methodType, Long activityId);
/**
* 接收个人号关键词消息
*/
public void receiveKeyWord(SendTextDTO sendTextDTO);
/**
* 根据小号获取对应wxgroup ip
* @param altId
* @return
*/
String getIP(String altId);
/**
* 根据id查询
* @param id
* @return
*/
ReadingActivityDTO getById(Long id);
/**
* 定时任务回调-打卡每日提醒
* @param activityId
*/
void sendClockRemind(Long activityId);
/**
* 分页查询活动
*/
PageBeanNew<ReadingActivityDTO> getList(Integer currentPage, Integer numPerPage);
/**
* 分配群
* @param assignGroupDTO
*/
void assignGroup(AssignGroupDTO assignGroupDTO);
/**
* 活动用户进群
* @param addWXGroupDTO
*/
void activityUserJoinGroup(AddWXGroupDTO addWXGroupDTO);
/**
* 是否是入群关键词
* @param sendTextDTO
* @return
*/
Boolean isKeyWord(SendTextDTO sendTextDTO);
}
package com.pcloud.book.reading.biz.impl;
import com.pcloud.book.advertising.dao.AdvertisingBrandDao;
import com.pcloud.book.advertising.dto.AdvertisingBrandDTO;
import com.pcloud.book.advertising.entity.AdvertisingBrand;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.convert.ConvertConsr;
import com.pcloud.book.consumer.reader.ReaderConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.biz.GroupQrcodeBiz;
import com.pcloud.book.group.constant.BookBusinessConstants;
import com.pcloud.book.group.dao.BookGroupCipherUserDao;
import com.pcloud.book.group.dao.WeixinQrcodeDao;
import com.pcloud.book.group.dao.WeixinQrcodeGenerationDao;
import com.pcloud.book.group.entity.BookGroupCipherUser;
import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.entity.WeixinQrcode;
import com.pcloud.book.group.entity.WeixinQrcodeGeneration;
import com.pcloud.book.group.tools.QrcodeTools;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.reading.biz.ReadingActivityBiz;
import com.pcloud.book.reading.constant.ReadingActivityConstant;
import com.pcloud.book.reading.dao.*;
import com.pcloud.book.reading.dto.ActivityUserBookDTO;
import com.pcloud.book.reading.dto.ActivityUserCountDTO;
import com.pcloud.book.reading.dto.AssignGroupDTO;
import com.pcloud.book.reading.dto.GroupingUserDTO;
import com.pcloud.book.reading.dto.ReadingActivityAdditionParamDTO;
import com.pcloud.book.reading.dto.ReadingActivityBaseParamDTO;
import com.pcloud.book.reading.dto.ReadingActivityDTO;
import com.pcloud.book.reading.dto.UserBaseDTO;
import com.pcloud.book.reading.entity.*;
import com.pcloud.book.reading.enums.ContentTypeEnum;
import com.pcloud.book.reading.enums.JoinConditionEnum;
import com.pcloud.book.reading.enums.JoinStateEnum;
import com.pcloud.book.reading.enums.JoinTypeEnum;
import com.pcloud.book.util.common.ThreadPoolUtils;
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.QrcodeUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.httpclient.UrlUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.convert.file.entity.FileUploadInfo;
import com.pcloud.facade.quartz.entity.CallBackParam;
import com.pcloud.facade.quartz.entity.ScheduleJob;
import com.pcloud.facade.quartz.service.ScheduleService;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO;
import com.pcloud.wechatgroup.message.dto.AddWXGroupDTO;
import com.pcloud.wechatgroup.message.dto.SendTextDTO;
import com.sdk.wxgroup.*;
import com.sdk.wxgroup.constant.WxGroupSDKConstants;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
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.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
/**
* @描述:共读活动
* @作者:zhuyajie
* @创建时间:17:44 2020/1/14
* @版本:1.0
*/
@Slf4j
@Component("readingActivityBiz")
public class ReadingActivityBizImpl implements ReadingActivityBiz{
@Autowired
private ReadingActivityDao readingActivityDao;
@Autowired
private ReadingInviteDao readingInviteDao;
@Autowired
private ReadingUserDao readingUserDao;
@Autowired
private WechatGroupConsr wechatGroupConsr;
@Autowired
private WeixinQrcodeGenerationDao weixinQrcodeGenerationDao;
@Autowired
private ReadingGroupDao readingGroupDao;
@Autowired
private ScheduleService scheduleService;
@Autowired
private GroupQrcodeBiz groupQrcodeBiz;
@Autowired
private BookGroupCipherUserDao bookGroupCipherUserDao;
@Autowired
private AdvertisingBrandDao advertisingBrandDao;
@Autowired
private BookGroupCollectionDao bookGroupCollectionDao;
@Autowired
private ReadingGroupRobotDao readingGroupRobotDao;
@Autowired
private ReadingGroupCreateDao readingGroupCreateDao;
@Autowired
private ConvertConsr convertConsr;
@Autowired
private ReaderConsr readerConsr;
@Autowired
private WeixinQrcodeDao weixinQrcodeDao;
@Value("${system.env}")
private String envStr;
/**
* 读书活动进群的用户集合
*/
private static final String ACTIVITY_USER_JOIN_GROUP_USERS="BOOK:ACTIVITY_USER_JOIN_GROUP_USERS";
/**
* 读书活动进群的欢迎语
*/
private static final String ACTIVITY_USER_JOIN_GROUP_GUIDE="BOOK:ACTIVITY_USER_JOIN_GROUP_GUIDE";
@ParamLog("[receiveMoney]")
@Transactional(rollbackFor = {Exception.class})
@Override
public void receiveMoney(CollectionVO vo) {
if (Objects.isNull(vo) || StringUtils.isBlank(vo.getTransferId())
|| StringUtils.isBlank(vo.getAltId())
|| StringUtils.isBlank(vo.getWxId())
|| Objects.isNull(vo.getAmount())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "接收转账信息失败,参数为空");
}
BookGroupCollection byTransferId = this.bookGroupCollectionDao.getByTransferId(vo.getTransferId());
ReadingActivity byTheme = readingActivityDao.getByThemeAndJoinCondition(vo.getRemark(),JoinConditionEnum.TRANSFER.value);
// 处理收款消息
if (WxGroupSDKConstants.PaySubTypeEnum.RECEIVE_COLLECTION_MESSAGE.getCode().equals(vo.getPaySubType())) {
this.processReceiveCollectionMessage(vo, byTransferId, byTheme);
}
// 收款成功
if (WxGroupSDKConstants.PaySubTypeEnum.COLLECTION.getCode().equals(vo.getPaySubType())) {
this.processCollection(vo, byTransferId, byTheme);
}
}
/**
* 处理收款消息
*/
@Transactional(rollbackFor = {Exception.class})
public void processReceiveCollectionMessage(CollectionVO vo, BookGroupCollection byTransferId, ReadingActivity byTheme) {
SendTextMessageVO sendText = new SendTextMessageVO();
// 转账说明不正确
if (Objects.isNull(byTheme)) {
sendText.setContent("您的转账说明不对,请填写正确金额和转账说明(活动主题)之后重新转账,此笔转账将会在24小时后自动退回。");
sendText.setAltId(vo.getAltId());
sendText.setWxGroupId(vo.getWxId());
sendText.setIp(getIP(vo.getAltId()));
WxGroupSDK.sendTextMessage(sendText);
return;
}
// 转账金额不正确
if (byTheme.getJoinAmount().compareTo(vo.getAmount()) != 0) {
sendText.setContent("您的转账金额不对,请填写正确金额和转账说明(活动主题)之后重新转账,此笔转账将会在24小时后自动退回。");
sendText.setAltId(vo.getAltId());
sendText.setWxGroupId(vo.getWxId());
sendText.setIp(getIP(vo.getAltId()));
WxGroupSDK.sendTextMessage(sendText);
return;
}
if (Objects.isNull(byTransferId)) {
// 插入收款中记录
BookGroupCollection bookGroupCollection = BookGroupCollection.builder().amount(vo.getAmount())
.collectionRobotId(vo.getAltId()).transferId(vo.getTransferId()).status(BookBusinessConstants.CollectionStatus.RECEIVING.getCode())
.createUser(vo.getWxId()).createTime(new Date()).updateUser(vo.getWxId()).updateTime(new Date()).build();
this.bookGroupCollectionDao.insert(bookGroupCollection);
} else {
log.info("[processReceiveCollectionMessage] byTransferId 已存在 vo:{}; byTransferId:{}", vo, byTransferId);
}
// 收款
ReceiptMoneyVO receiptMoneyVO = new ReceiptMoneyVO();
receiptMoneyVO.setTransferId(vo.getTransferId());
receiptMoneyVO.setAltId(vo.getAltId());
receiptMoneyVO.setWxId(vo.getWxId());
receiptMoneyVO.setIp(getIP(vo.getAltId()));
WxGroupSDK.receiptMoney(receiptMoneyVO);
}
/**
* 收款
*/
@Transactional(rollbackFor = {Exception.class})
public void processCollection(CollectionVO vo, BookGroupCollection byTransferId, ReadingActivity byTheme) {
if (Objects.isNull(byTransferId)) {
// 直接插入收款成功的数据
log.info("[processCollection] 转账记录不存在时收款,直接插入转账成功 vo:{}", vo);
BookGroupCollection bookGroupCollection = BookGroupCollection.builder().amount(vo.getAmount())
.collectionRobotId(vo.getAltId()).transferId(vo.getTransferId()).status(BookBusinessConstants.CollectionStatus.COLLECTION_SUCCESSFUL.getCode())
.createUser(vo.getWxId()).createTime(new Date()).updateUser(vo.getWxId()).updateTime(new Date()).build();
this.bookGroupCollectionDao.insert(bookGroupCollection);
} else {
// 修改收款状态为成功
byTransferId.setStatus(BookBusinessConstants.CollectionStatus.COLLECTION_SUCCESSFUL.getCode());
this.bookGroupCollectionDao.update(byTransferId);
}
//发群规
this.sendWxMsg(SendMessageTypeEnum.SELF.getCode(),byTheme.getRuleType(),vo.getAltId(),vo.getWxId(),byTheme.getRule(),byTheme.getRuleResourceId(),null);
// 发送邀请进群链接
if (JoinTypeEnum.LINK.value.equals(byTheme.getJoinType())) {
List<ReadingGroup> groupList = readingGroupDao.getByActivityId(byTheme.getId());
if (CollectionUtils.isEmpty(groupList)) {
throw new BookBizException(BookBizException.ID_NOT_EXIST, "活动没有可用群");
}
Map<String, Integer> groupUserNum = groupQrcodeBiz.getGroupUserNum(groupList.stream().map(ReadingGroup::getWxGroupId).collect(Collectors.toList()));
String min = null;
Integer num = 500;
for (ReadingGroup group : groupList) {
Integer integer = groupUserNum.get(group.getWxGroupId());
if (integer < num) {
num = integer;
min = group.getWxGroupId();
}
}
SendGroupInviteVO inviteVO = new SendGroupInviteVO();
inviteVO.setWxGroupId(min);
inviteVO.setAltId(vo.getAltId());
inviteVO.setWxId(vo.getWxId());
inviteVO.setIp(getIP(vo.getAltId()));
WxGroupSDK.sendGroupInvite(inviteVO);
}
// 发送群二维码图片
if (JoinTypeEnum.QRCODE.value.equals(byTheme.getJoinType())) {
SendPicMessageVO picMessageVO = new SendPicMessageVO();
picMessageVO.setAltId(vo.getAltId());
picMessageVO.setWxGroupId(vo.getWxId());
picMessageVO.setPicUrl(byTheme.getJoinQrcodePic());
picMessageVO.setIp(getIP(vo.getAltId()));
WxGroupSDK.sendPicMessage(picMessageVO);
}
}
@Override
@ParamLog("创建共读活动")
@Transactional(rollbackFor = Exception.class)
public Long add(ReadingActivityBaseParamDTO readingActivityBaseParamDTO) {
Boolean themeExist = readingActivityDao.themeExist(readingActivityBaseParamDTO.getTheme());
if (themeExist){
throw new BookBizException(BookBizException.PARAM_IS_NULL, "活动主题名称已存在");
}
//活动创建
Date inviteTime = DateUtils.getDateByStr(readingActivityBaseParamDTO.getInviteTime());
Date startTime = null;
Date endTime = null;
if (JoinTypeEnum.LINK.value.equals(readingActivityBaseParamDTO.getJoinType())){
startTime = DateUtils.getDateByStr(readingActivityBaseParamDTO.getStartTime());
endTime = DateUtils.getDateByStr(readingActivityBaseParamDTO.getEndTime());
}
ReadingActivity readingActivity = new ReadingActivity();
BeanUtils.copyProperties(readingActivityBaseParamDTO, readingActivity);
readingActivity.setStartTime(startTime);
readingActivity.setEndTime(endTime);
readingActivity.setClockOpen(false);
readingActivity.setClockResultOpen(false);
readingActivity.setRiddleOpen(false);
readingActivity.setAwardOpen(false);
readingActivityDao.insert(readingActivity);
Long activityId = readingActivity.getId();
//邀请语
List<ReadingInvite> inviteList = readingActivityBaseParamDTO.getInviteList();
inviteList.forEach(readingInvite -> {
readingInvite.setInviteTime(inviteTime);
readingInvite.setActivityId(activityId);
readingInvite.setCreateUser(readingActivityBaseParamDTO.getCreateUser());
});
readingInviteDao.insert(inviteList);
//邀请用户
List<ReadingUser> userList = readingActivityBaseParamDTO.getUserList();
for (ReadingUser readingUser : userList) {
readingUser.setActivityId(activityId);
readingUser.setCreateUser(readingActivityBaseParamDTO.getCreateUser());
if (StringUtil.isEmpty(readingUser.getAltId())) {
BookGroupCipherUser bookGroupCipherUser = bookGroupCipherUserDao.getByWxUserId(readingUser.getWxUserId());
if (null == bookGroupCipherUser) {
continue;
}
readingUser.setAltId(bookGroupCipherUser.getAltId());
}
if (JoinConditionEnum.NO.value.equals(readingActivity.getJoinCondition())) {
readingUser.setJoinState(JoinStateEnum.JOIN.value);
} else {
readingUser.setJoinState(JoinStateEnum.NOT_JOIN.value);
}
}
readingUserDao.insert(userList);
//添加定时任务
this.addQuartz(activityId, readingActivityBaseParamDTO);
//根据人数建群
this.createGroup(userList, readingActivity);
return activityId;
}
@Override
@ParamLog("修改共读活动基本设置")
@Transactional(rollbackFor = Exception.class)
public void update(ReadingActivityBaseParamDTO readingActivityBaseParamDTO) {
Long activityId = readingActivityBaseParamDTO.getId();
ReadingActivity originActivity = readingActivityDao.getById(activityId);
Boolean themeUpdate = false;
if (!readingActivityBaseParamDTO.getTheme().equals(originActivity.getTheme())){//修改了活动主题
themeUpdate = true;
Boolean themeExist = readingActivityDao.themeExist(readingActivityBaseParamDTO.getTheme());
if (themeExist){
throw new BookBizException(BookBizException.PARAM_IS_NULL, "活动主题名称已存在");
}
}
//基本设置更新
Date inviteTime = DateUtils.getDateByStr(readingActivityBaseParamDTO.getInviteTime());
Date startTime = null;
Date endTime = null;
if (JoinTypeEnum.LINK.value.equals(readingActivityBaseParamDTO.getJoinType())){
startTime = DateUtils.getDateByStr(readingActivityBaseParamDTO.getStartTime());
endTime = DateUtils.getDateByStr(readingActivityBaseParamDTO.getEndTime());
}
ReadingActivity readingActivity = new ReadingActivity();
BeanUtils.copyProperties(readingActivityBaseParamDTO, readingActivity);
readingActivity.setStartTime(startTime);
readingActivity.setEndTime(endTime);
readingActivityDao.update(readingActivity);
if (themeUpdate){
//更新群名称
List<ReadingGroup> groupList = readingGroupDao.getAllByActivityId(activityId);
for (ReadingGroup group:groupList){
String suffix = group.getWxGroupName().substring(group.getWxGroupName().length()-3);
String groupNewName = readingActivityBaseParamDTO.getTheme() + suffix;
readingGroupDao.updateGroupName(groupNewName, group.getId());
if (!StringUtil.isEmpty(group.getWxGroupId())){//微信群已创建
String masterId = readingGroupRobotDao.getMasterRobotByWxGroupId(group.getWxGroupId());
SendWeixinRequestTools.changeGroupName(masterId,group.getWxGroupId(),groupNewName,getIP(masterId));
}
}
}
if (JoinTypeEnum.LINK.value.equals(readingActivityBaseParamDTO.getJoinType())){
//删除开场语结束语定时任务
deleteQuartzJob(ReadingActivityConstant.JOB_NAME_START, activityId);
deleteQuartzJob(ReadingActivityConstant.JOB_NAME_END, activityId);
}
//删除邀请设置
readingInviteDao.deleteByActivityId(activityId);
//删除邀请语定时任务
deleteQuartzJob(ReadingActivityConstant.JOB_NAME_INVITE, activityId);
//新增邀请语设置
List<ReadingInvite> inviteList = readingActivityBaseParamDTO.getInviteList();
inviteList.forEach(readingInvite -> {
readingInvite.setInviteTime(inviteTime);
readingInvite.setActivityId(activityId);
readingInvite.setCreateUser(readingActivityBaseParamDTO.getCreateUser());
});
readingInviteDao.insert(inviteList);
//新增开场语结束语邀请语定时任务
addQuartz(activityId, readingActivityBaseParamDTO);
}
@ParamLog("删除定时任务")
private void deleteQuartzJob(String jobName, Long activityId) {
try {
scheduleService.deleteJob(jobName + activityId, ReadingActivityConstant.JOB_GROUP);
} catch (Exception e) {
log.error("删除定时任务失败,jobName=" + jobName + "+activityId+" + activityId);
}
}
@Override
@ParamLog("添加高级配置")
@Transactional(rollbackFor = Exception.class)
public void updateAdditionSetting(ReadingActivityAdditionParamDTO readingActivityAdditionParamDTO) {
if (readingActivityAdditionParamDTO.getClockOpen()) {
//添加打卡每日提醒定时任务
deleteQuartzJob(ReadingActivityConstant.JOB_NAME_CLOCK_REMIND,readingActivityAdditionParamDTO.getId());
addClockRemindQuartz(readingActivityAdditionParamDTO.getId(), readingActivityAdditionParamDTO.getClockRemindTime());
}
ReadingActivity readingActivity = new ReadingActivity();
BeanUtils.copyProperties(readingActivityAdditionParamDTO, readingActivity);
readingActivity.setId(readingActivityAdditionParamDTO.getId());
readingActivityDao.updateAdditionSetting(readingActivity);
}
@ParamLog("添加打卡每日提醒定时任务")
private void addClockRemindQuartz(Long id, String sendtime) {
String cron;
try {
int hour = Integer.parseInt(sendtime.substring(0, 2));
int minute = Integer.parseInt(sendtime.substring(3, 5));
int second = Integer.parseInt(sendtime.substring(6, 8));
cron = second + " " + minute + " " + hour + " * * ?";
} catch (Exception e) {
throw new BookBizException(BookBizException.ERROR, "时间格式错误");
}
ScheduleJob scheduleJob = new ScheduleJob();
scheduleJob.setJobGroup(ReadingActivityConstant.JOB_GROUP);
scheduleJob.setJobName(ReadingActivityConstant.JOB_NAME_CLOCK_REMIND + id);
scheduleJob.setCronExpression(cron);
CallBackParam callBackParam = new CallBackParam();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("activityId", id);
callBackParam.setParamMap(paramMap);
callBackParam.setMethodName("sendClockRemind");
callBackParam.setBeanName("readingActivityService");
Map<String, Object> scheduleMap = new HashMap<>();
scheduleMap.put("scheduleJob", scheduleJob);
scheduleMap.put("callBackParam", callBackParam);
try {
scheduleService.addCronJob(scheduleMap);
} catch (Exception e) {
log.error("【共读活动】设置定时任务失败" + e.getMessage(), e);
}
}
@ParamLog("创建定时任务")
public void addQuartz(Long activityId,ReadingActivityBaseParamDTO readingActivityBaseParamDTO) {
//邀请语定时任务
this.addSendQuartzJob(activityId, DateUtils.getDateByStr(readingActivityBaseParamDTO.getInviteTime()), ReadingActivityConstant.JOB_NAME_INVITE, "sendInviteMsg");
//群链接方式入群
if (JoinTypeEnum.LINK.value.equals(readingActivityBaseParamDTO.getJoinType())) {
//开场语定时任务
this.addSendQuartzJob(activityId, DateUtils.getDateByStr(readingActivityBaseParamDTO.getStartTime()), ReadingActivityConstant.JOB_NAME_START, "sendStartMsg");
//结束语定时任务
this.addSendQuartzJob(activityId, DateUtils.getDateByStr(readingActivityBaseParamDTO.getEndTime()), ReadingActivityConstant.JOB_NAME_END, "sendEndMsg");
}
}
@ParamLog("添加定时任务")
public void addSendQuartzJob(Long activityId, Date sendTime, String jobName, String methodName) {
Map<String, Object> map = new HashMap<>();
map.put("activityId", activityId);
ScheduleJob scheduleJob = new ScheduleJob();
scheduleJob.setJobGroup(ReadingActivityConstant.JOB_GROUP);
scheduleJob.setJobName(jobName + activityId);
Long second = (sendTime.getTime() - System.currentTimeMillis()) / 1000;
scheduleJob.setStartTime(second.intValue());
scheduleJob.setStartTimeFormat("ss");
scheduleJob.setRepeatCount(0);
scheduleJob.setIntervalTime(0);
scheduleJob.setIntervalTimeFormat("dd");
CallBackParam callBackParam = new CallBackParam();
callBackParam.setBeanName("readingActivityService");
callBackParam.setMethodName(methodName);
callBackParam.setParamMap(map);
Map<String, Object> scheduleMap = new HashMap<>();
scheduleMap.put("scheduleJob", scheduleJob);
scheduleMap.put("callBackParam", callBackParam);
try {
scheduleService.addSimpleJob(scheduleMap);
} catch (Exception e) {
log.error("【共读活动】添加定时任务失败" + e.getMessage(), e);
}
}
@ParamLog("创建群")
public void createGroup(List<ReadingUser> userList, ReadingActivity readingActivity) {
if (!JoinTypeEnum.LINK.value.equals(readingActivity.getJoinType())){
return;
}
List<String> robotIdList = userList.stream().filter(s -> s.getAltId() != null).map(ReadingUser::getAltId).distinct().collect(Collectors.toList());
if (ListUtils.isEmpty(robotIdList) || robotIdList.size()<3){
log.info("小号数量小于3个,取其他号补充");
Integer need = 3 - robotIdList.size();//所需数量
if ("pro".equalsIgnoreCase(envStr)){
List<String> altIds = wechatGroupConsr.getSelfRobotByRobotType(null);
altIds.removeAll(robotIdList);
if (need == 1) {
robotIdList.add(altIds.get(0));
}else {
robotIdList.add(altIds.get(0));
robotIdList.add(altIds.get(1));
}
}else {
String alt1="wxid_lw4vjnxjg45d22";//zyj
String alt2="wxid_gsfyy4m3a3w221";//guiq
if (need == 1){
robotIdList.add(alt1);
}else {
robotIdList.add(alt1);
robotIdList.add(alt2);
}
}
}
Integer groupCount = (userList.size()+robotIdList.size())/500 + 1;//每个群最多人数
for (int i=1; i<=groupCount; i++){
//根据小号创建群,初始微信群id为空,创建完后更新wxgroupid
ReadingGroup readingGroup = new ReadingGroup();
readingGroup.setWxGroupId(null);
readingGroup.setActivityId(readingActivity.getId());
readingGroup.setWxGroupName(readingActivity.getTheme() + "-"+ i +"群");
readingGroup.setCreateUser(readingActivity.getCreateUser());
readingGroupDao.insert(readingGroup);
Long groupId = readingGroup.getId();
List<ReadingGroupRobot> readingGroupRobots = new ArrayList<>();
for (String altId : robotIdList) {
ReadingGroupRobot readingGroupRobot = new ReadingGroupRobot();
readingGroupRobot.setWxGroupId(null);
readingGroupRobot.setIsMaster(false);
readingGroupRobot.setAltId(altId);
readingGroupRobot.setGroupId(groupId);
readingGroupRobots.add(readingGroupRobot);
}
readingGroupRobotDao.insert(readingGroupRobots);
String altId = robotIdList.get(0);//群主
robotIdList.remove(0);//成员列表
CreateGroupVO createGroupVO = new CreateGroupVO();
createGroupVO.setMembers(robotIdList);
createGroupVO.setAltId(altId);
createGroupVO.setCode(SendMessageTypeEnum.GROUP.getCode());
createGroupVO.setWxId(altId);
createGroupVO.setIp(getIP(altId));
WxGroupSDK.createGroup(createGroupVO);
log.info("请求建群 createGroupVO:{}", createGroupVO);
}
}
@Override
@ParamLog("共读活动定时任务回调")
public void sendQuartzMsg(String methodType, Long activityId) {
ReadingActivity readingActivity = readingActivityDao.getById(activityId);
if (null == readingActivity) {
return;
}
//给用户发邀请语,群链接/二维码
if ("invite".equals(methodType)) {
sendInviteToUser(activityId);
return;
}
//活动开始
if ("start".equals(methodType)) {
//群链接入群才能发群消息
if (JoinTypeEnum.LINK.value.equals(readingActivity.getJoinType())) {
//开场语
sendToGroup(activityId, readingActivity.getStartSloganType(), readingActivity.getStartSlogan(), readingActivity.getStartResourceId());
}
return;
}
//活动结束
if ("end".equals(methodType)) {
//群链接入群才能发群消息
if (JoinTypeEnum.LINK.value.equals(readingActivity.getJoinType())) {
//结束语
sendToGroup(activityId, readingActivity.getEndSloganType(), readingActivity.getEndSlogan(), readingActivity.getEndResourceId());
//发送打卡成果
sendClockResultToGroup(readingActivity);
try {
Thread.sleep(2*60*1000);
} catch (InterruptedException e) {
log.error("线程休眠2min失败"+e.getMessage());
}
//小号退群
exitGroup(activityId);
}
//给用户发送活动奖励
sendAwardToUser(readingActivity);
return;
}
}
@ParamLog("小号退群")
private void exitGroup(Long activityId) {
List<ReadingGroupRobot> groupRobotList = readingGroupRobotDao.getByActivityId(activityId);
if (ListUtils.isEmpty(groupRobotList)) {
log.error("没有可用的群");
return;
}
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> {
for (ReadingGroupRobot groupRobot : groupRobotList) {
String wxGroupId = groupRobot.getWxGroupId();
String altId = groupRobot.getAltId();
ExitGroupVO exitGroupVO = new ExitGroupVO();
exitGroupVO.setAltId(altId);
exitGroupVO.setCode(SendMessageTypeEnum.GROUP.getCode());
exitGroupVO.setIp(getIP(altId));
exitGroupVO.setWxGroupId(wxGroupId);
exitGroupVO.setWxId(altId);
WxGroupSDK.exitGroup(exitGroupVO);
log.info("小号退群 exitGroupVO:{}", exitGroupVO);
}
});
}
@ParamLog("给用户发邀请语")
public void sendInviteToUser(Long activityId) {
ReadingActivity readingActivity = readingActivityDao.getById(activityId);
if (null == readingActivity){
return;
}
List<ReadingUser> userList = readingUserDao.getByActivityId(activityId, null);
if (ListUtils.isEmpty(userList)) {
return;
}
List<ReadingInvite> inviteList = readingInviteDao.getByActivityId(activityId);
if (ListUtils.isEmpty(inviteList)) {
return;
}
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> {
for (ReadingUser readingUser : userList) {
String altId = readingUser.getAltId();
String wxUserId = readingUser.getWxUserId();
//邀请语
for (ReadingInvite invite : inviteList) {
sendWxMsg(SendMessageTypeEnum.SELF.getCode(), invite.getInviteType(), altId, wxUserId, invite.getInviteContent(), invite.getInviteResourceId(), null);
}
//无进群条件
if (JoinConditionEnum.NO.value.equals(readingActivity.getJoinCondition())){
//发群规
this.sendWxMsg(SendMessageTypeEnum.SELF.getCode(),readingActivity.getRuleType(), altId, wxUserId,readingActivity.getRule(),readingActivity.getRuleResourceId(),null);
//发群链接/群二维码
sendGroupInviteToUser(altId, wxUserId, readingActivity);
}
//关键词入群
else if (JoinConditionEnum.KEYWORD.value.equals(readingActivity.getJoinCondition())){
String content = "请回复:“" + readingActivity.getJoinKeyword() + "”,我会将入群链接发送给您。";
this.sendWxMsg(SendMessageTypeEnum.SELF.getCode(), ContentTypeEnum.TEXT.value, altId, wxUserId, content,null,null);
}
//转账入群
else if (JoinConditionEnum.TRANSFER.value.equals(readingActivity.getJoinCondition())){
String content = "活动名称:" + readingActivity.getTheme() + "\n活动费用:¥" + readingActivity.getJoinAmount()+
"\n若想参加本次活动,可直接转账给我,转账说明请填写活动名称。当转账金额与活动名称都符合时,我才会接受转账," +
"接受后我将发送入群链接(若人数较多,可能会有延迟)。";
this.sendWxMsg(SendMessageTypeEnum.SELF.getCode(), ContentTypeEnum.TEXT.value, altId, wxUserId, content,null,null);
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
log.error("线程休眠3s失败"+e.getMessage());
}
}
});
}
@ParamLog("发送打卡成果")
public void sendClockResultToGroup(ReadingActivity readingActivity) {
if (!readingActivity.getClockResultOpen()){
return;
}
//todo
String resultLink="";
sendToGroup(readingActivity.getId(),ContentTypeEnum.TEXT.value,resultLink,null);
}
@ParamLog("发送活动奖励")
public void sendAwardToUser(ReadingActivity readingActivity) {
if (!readingActivity.getAwardOpen()) {
return;
}
List<ReadingUser> userList = readingUserDao.getByActivityId(readingActivity.getId(), JoinStateEnum.JOIN.value);
if (ListUtils.isEmpty(userList)) {
return;
}
List<ReadingUser> readingUserList = new ArrayList<>();
readingUserList.addAll(userList);
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> {
for (ReadingUser readingUser : readingUserList) {
String altId = readingUser.getAltId();
String wxUserId = readingUser.getWxUserId();
if (!StringUtil.isEmpty(readingActivity.getAwardText())) {
sendWxMsg(SendMessageTypeEnum.SELF.getCode(), ContentTypeEnum.TEXT.value, altId, wxUserId, readingActivity.getAwardText(), null, null);
}
if (!StringUtil.isEmpty(readingActivity.getAwardPic())) {
sendSelfPic(altId, wxUserId, readingActivity.getAwardPic());
}
}
});
}
@ParamLog("给群发送消息")
public void sendToGroup(Long activityId, Integer contentType, String content, String resourceId) {
List<ReadingGroup> groupList = readingGroupDao.getByActivityId(activityId);
if (ListUtils.isEmpty(groupList)) {
log.error("没有可用的群");
return;
}
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> {
for (ReadingGroup group : groupList) {
String wxGroupId = group.getWxGroupId();
String altId = readingGroupRobotDao.getMasterRobotByWxGroupId(wxGroupId);
if (StringUtil.isEmpty(altId)) {
continue;
}
sendWxMsg(SendMessageTypeEnum.GROUP.getCode(), contentType, altId, null, content, resourceId, wxGroupId);
}
});
}
@ParamLog("发送文本或文件")
public void sendWxMsg(Integer code, Integer type, String altId, String userWxId, String content, String resourceId, String wxGroupId) {
String ip = getIP(altId);
if (ContentTypeEnum.TEXT.value.equals(type)) {
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(content);
sendTextMessageVO.setAltId(altId);
if (SendMessageTypeEnum.SELF.getCode().equals(code)) {
sendTextMessageVO.setWxGroupId(userWxId);
} else if (SendMessageTypeEnum.GROUP.getCode().equals(code)) {
sendTextMessageVO.setWxGroupId(wxGroupId);
}
sendTextMessageVO.setIp(ip);
sendTextMessageVO.setCode(code);
WxGroupSDK.sendTextMessage(sendTextMessageVO);
log.info("发送文本 sendTextMessageVO:{}", sendTextMessageVO);
return;
}
if (ContentTypeEnum.FILE.value.equals(type)) {
SendFileVO sendFileVO = new SendFileVO();
FileUploadInfo fileUploadInfo = convertConsr.getByFileId(resourceId);
if (null == fileUploadInfo) {
log.error("文件路径为空,resourceId"+resourceId);
return;
}
String fileName = fileUploadInfo.getName();
String fileType = fileUploadInfo.getExt();
log.info("fileName="+fileName+"+fileType+"+fileType);
if (!StringUtil.isEmpty(fileType) && fileName.contains(fileType)){//去掉后缀
fileName = fileName.substring(0, fileName.indexOf(fileType)-1);
}
sendFileVO.setFileName(fileName);
sendFileVO.setFileUrl(fileUploadInfo.getUrl());
sendFileVO.setIp(ip);
sendFileVO.setAltId(altId);
if (SendMessageTypeEnum.SELF.getCode().equals(code)) {
sendFileVO.setWxId(userWxId);
} else if (SendMessageTypeEnum.GROUP.getCode().equals(code)) {
sendFileVO.setWxGroupId(wxGroupId);
sendFileVO.setWxId(wxGroupId);
}
sendFileVO.setCode(code);
WxGroupSDK.sendFile(sendFileVO);
log.info("发送文件 sendFileVO:{}", sendFileVO);
return;
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
log.error("线程休眠3s失败"+e.getMessage());
}
}
@Override
@ParamLog("关键词进群校验")
public void receiveKeyWord(SendTextDTO sendTextDTO) {
//个人号收到的消息
if (SendMessageTypeEnum.SELF.getCode().equals(sendTextDTO.getCode())){
String textContent = sendTextDTO.getTextContent().trim();
String wxUserId = sendTextDTO.getWechatUserId();
String wxId = sendTextDTO.getWxId();
//关键词是否正确
ReadingActivity readingActivity = readingActivityDao.getJoinActivityByKeyword(wxId, wxUserId, textContent);
if (null != readingActivity){
List<ReadingInvite> inviteList = readingInviteDao.getByActivityId(readingActivity.getId());
Date inviteTime = new Date();
if (!ListUtils.isEmpty(inviteList)){
inviteTime = inviteList.get(0).getInviteTime();
}
if (inviteTime.after(new Date())){
return;
}
//发群规
this.sendWxMsg(SendMessageTypeEnum.SELF.getCode(),readingActivity.getRuleType(),wxId,wxUserId,readingActivity.getRule(),readingActivity.getRuleResourceId(),null);
//入群链接/群二维码
this.sendGroupInviteToUser(wxId, wxUserId, readingActivity);
}
}
}
@ParamLog("个人号发送进群链接/群二维码")
private void sendGroupInviteToUser(String altId, String userWxId, ReadingActivity readingActivity) {
if (JoinTypeEnum.LINK.value.equals(readingActivity.getJoinType())){
List<ReadingGroup> groupList = readingGroupDao.getByActivityId(readingActivity.getId());
if (CollectionUtils.isEmpty(groupList)) {
log.error("活动没有可用群,activityId=" + readingActivity.getId());
}
Map<String, Integer> groupUserNum = groupQrcodeBiz.getGroupUserNum(groupList.stream().map(ReadingGroup::getWxGroupId).collect(Collectors.toList()));
String min = null;
Integer num = 500;
for (ReadingGroup group : groupList) {
Integer integer = groupUserNum.get(group.getWxGroupId());
if (integer < num) {
num = integer;
min = group.getWxGroupId();
}
}
SendGroupInviteVO sendGroupInviteVO = new SendGroupInviteVO();
sendGroupInviteVO.setAltId(altId);
sendGroupInviteVO.setWxId(userWxId);
sendGroupInviteVO.setWxGroupId(min);
sendGroupInviteVO.setIp(getIP(altId));
WxGroupSDK.sendGroupInvite(sendGroupInviteVO);
log.info("发送进群链接 sendGroupInviteVO:{}", sendGroupInviteVO);
return;
}
if (JoinTypeEnum.QRCODE.value.equals(readingActivity.getJoinType())){
this.sendSelfPic(altId, userWxId, readingActivity.getJoinQrcodePic());
return;
}
}
@ParamLog("个人号发送图片")
private void sendSelfPic(String altId, String userWxId, String pic) {
SendPicMessageVO sendPicMessageVO = new SendPicMessageVO();
sendPicMessageVO.setCode(SendMessageTypeEnum.SELF.getCode());
sendPicMessageVO.setAltId(altId);
sendPicMessageVO.setWxGroupId(userWxId);
sendPicMessageVO.setPicUrl(pic);
sendPicMessageVO.setIp(getIP(altId));
WxGroupSDK.sendPicMessage(sendPicMessageVO);
log.info("发送图片sendPicMessage:"+sendPicMessageVO);
}
/**
* 根据小号获取ip
*/
@Override
public String getIP(String altId) {
String ip = null;
GroupRobotDTO groupRobotDTO = wechatGroupConsr.getGroupRobotByWxId(altId);
if (null != groupRobotDTO) {
WeixinQrcodeGeneration weixinQrcodeGeneration = weixinQrcodeGenerationDao.getByGeneration(groupRobotDTO.getVersion());
if (null != weixinQrcodeGeneration) {
ip = weixinQrcodeGeneration.getWechatGroupIp();
}
}
return ip;
}
@Override
public ReadingActivityDTO getById(Long id) {
ReadingActivity readingActivity = readingActivityDao.getById(id);
if (null == readingActivity) {
return new ReadingActivityDTO();
}
ReadingActivityDTO activityDTO = new ReadingActivityDTO();
BeanUtils.copyProperties(readingActivity, activityDTO);
List<ReadingInvite> inviteList = readingInviteDao.getByActivityId(id);
List<ReadingUser> userList = readingUserDao.getByActivityId(id, null);
AdvertisingBrandDTO advertisingBrandDTO = advertisingBrandDao.getBrandById(readingActivity.getBrandId());
if (null != advertisingBrandDTO) {
activityDTO.setBrandName(advertisingBrandDTO.getBrandName());
}
//填充活动资源
setActivityResource(readingActivity, activityDTO);
//填充邀请资源
setInviteResource(inviteList, activityDTO);
//小号用户分类
setGroupingUser(userList, activityDTO);
activityDTO.setUserList(userList);
//邀请时间
Date inviteTime = inviteList.get(0).getInviteTime();
activityDTO.setInviteTime(inviteTime);
return activityDTO;
}
/**
* 小号用户分类
*/
private void setGroupingUser(List<ReadingUser> userList, ReadingActivityDTO activityDTO) {
List<String> altIds = userList.stream().filter(s -> s.getAltId() != null).map(ReadingUser::getAltId).distinct().collect(Collectors.toList());
if (ListUtils.isEmpty(altIds)) {
return;
}
Map<String, GroupUserDTO> baseInfoDTOMap = wechatGroupConsr.mapRobotInfoByIdList(altIds);
List<GroupingUserDTO> groupingUserDTOList = new ArrayList<>();
for (String altId : altIds) {
GroupingUserDTO groupingUserDTO = new GroupingUserDTO();
groupingUserDTO.setAltId(altId);
if (!MapUtils.isEmpty(baseInfoDTOMap) && baseInfoDTOMap.containsKey(altId)) {
GroupUserDTO baseInfoDTO = baseInfoDTOMap.get(altId);
groupingUserDTO.setAltNickName(baseInfoDTO.getNickName());
groupingUserDTO.setAltHeadPic(baseInfoDTO.getHeadPic());
groupingUserDTO.setAltSex(baseInfoDTO.getSex());
}
//小号对应的各用户
List<String> userIdList = userList.stream().filter(s -> s.getAltId().equals(altId)).map(ReadingUser::getWxUserId).distinct().collect(Collectors.toList());
Map<String, GroupUserDTO> userDTOMap = wechatGroupConsr.mapWxUserInfoByWxIdList(userIdList);
List<UserBaseDTO> userBaseDTOS = new ArrayList<>();
for (String wxUserId : userIdList) {
UserBaseDTO userBaseDTO = new UserBaseDTO();
userBaseDTO.setWxUserId(wxUserId);
if (!MapUtils.isEmpty(userDTOMap) && userDTOMap.containsKey(wxUserId)) {
GroupUserDTO userDTO = userDTOMap.get(wxUserId);
BeanUtils.copyProperties(userDTO, userBaseDTO);
}
userBaseDTOS.add(userBaseDTO);
}
groupingUserDTO.setUserBaseDTOS(userBaseDTOS);
groupingUserDTOList.add(groupingUserDTO);
}
activityDTO.setGroupingUserList(groupingUserDTOList);
}
/**
* 填充邀请资源
*/
private void setInviteResource(List<ReadingInvite> inviteList, ReadingActivityDTO activityDTO) {
for (ReadingInvite invite : inviteList) {
if (ContentTypeEnum.FILE.value.equals(invite.getInviteType())){
FileUploadInfo fileUploadInfo = convertConsr.getByFileId(invite.getInviteResourceId());
if (null == fileUploadInfo) {
continue;
}
invite.setInviteResourceSize(fileUploadInfo.getUploadedSize());
invite.setInviteResourceName(fileUploadInfo.getName());
}
}
activityDTO.setInviteList(inviteList);
}
/**
* 填充活动资源
*/
private void setActivityResource(ReadingActivity readingActivity, ReadingActivityDTO activityDTO) {
if (ContentTypeEnum.FILE.value.equals(readingActivity.getRuleType())) {
FileUploadInfo fileUploadInfo = convertConsr.getByFileId(readingActivity.getRuleResourceId());
if (null != fileUploadInfo){
activityDTO.setRuleResourceSize(fileUploadInfo.getUploadedSize());
activityDTO.setRuleResourceName(fileUploadInfo.getName());
}
}
if (JoinTypeEnum.LINK.value.equals(readingActivity.getJoinType())) {
if (null != readingActivity.getStartSloganType() && ContentTypeEnum.FILE.value.equals(readingActivity.getStartSloganType())) {
FileUploadInfo fileUploadInfo = convertConsr.getByFileId(readingActivity.getStartResourceId());
if (null != fileUploadInfo){
activityDTO.setStartResourceSize(fileUploadInfo.getUploadedSize());
activityDTO.setStartResourceName(fileUploadInfo.getName());
}
}
if (null != readingActivity.getEndSloganType() && ContentTypeEnum.FILE.value.equals(readingActivity.getEndSloganType())) {
FileUploadInfo fileUploadInfo = convertConsr.getByFileId(readingActivity.getEndResourceId());
if (null != fileUploadInfo){
activityDTO.setEndResourceSize(fileUploadInfo.getUploadedSize());
activityDTO.setEndResourceName(fileUploadInfo.getName());
}
}
}
}
@Override
public void sendClockRemind(Long activityId) {
ReadingActivity readingActivity = readingActivityDao.getById(activityId);
if (null == readingActivity) {
return;
}
if (!JoinTypeEnum.LINK.value.equals(readingActivity.getJoinType()) || !readingActivity.getClockOpen()) {
return;
}
Date startTime = readingActivity.getStartTime();
Date endTime = readingActivity.getEndTime();
if (startTime != null && new Date().before(startTime)) {
return;
}
if (endTime != null && new Date().after(endTime)) {
deleteQuartzJob(ReadingActivityConstant.JOB_NAME_CLOCK_REMIND, activityId);
return;
}
String text = readingActivity.getClockRemindContent();
String clockLink = UrlUtils.getShortUrl4Own(readingActivity.getClockLink());
text = text + "/n打卡链接:" + clockLink;
//发送提醒内容+打卡链接
sendToGroup(activityId, ContentTypeEnum.TEXT.value, text, null);
}
@ParamLog("获取活动列表")
@Override
public PageBeanNew<ReadingActivityDTO> getList(Integer currentPage, Integer numPerPage) {
if (currentPage < 0 || numPerPage <= 0) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "分页参数有误!");
}
PageBeanNew<ReadingActivityDTO> page = readingActivityDao.listPageNew(new PageParam(currentPage,numPerPage), new HashMap<>(), "getList");
if (!ListUtils.isEmpty(page.getRecordList())) {
List<Long> brandIds = new ArrayList<>();
List<Long> activityIds = new ArrayList<>();
for (ReadingActivityDTO readingActivityDTO : page.getRecordList()) {
if (!brandIds.contains(readingActivityDTO.getBrandId())) {
brandIds.add(readingActivityDTO.getBrandId());
}
if (!activityIds.contains(readingActivityDTO.getId())) {
activityIds.add(readingActivityDTO.getId());
}
}
Map<Long, AdvertisingBrand> brandMap = advertisingBrandDao.getMapByIds(brandIds);
List<ActivityUserCountDTO> userCountDTOS = readingUserDao.getUserCountsByActivityIds(activityIds);
List<ActivityUserBookDTO> userBookDTOS = readingUserDao.getBooksByActivityIds(activityIds);
Map<Long, List<ActivityUserBookDTO>> userBookDTOSMap = userBookDTOS.stream().collect(Collectors.groupingBy(ActivityUserBookDTO::getActivityId));
Map<Long, Integer> userCountMap = new HashMap<>();
for (ActivityUserCountDTO activityUserCountDTO : userCountDTOS) {
userCountMap.put(activityUserCountDTO.getActivityId(), activityUserCountDTO.getCount());
}
for (ReadingActivityDTO readingActivityDTO : page.getRecordList()) {
AdvertisingBrand advertisingBrand = brandMap.get(readingActivityDTO.getBrandId());
if (advertisingBrand != null) {
readingActivityDTO.setBrandName(advertisingBrand.getBrandName());
}
readingActivityDTO.setUserCount(userCountMap.get(readingActivityDTO.getId()));
readingActivityDTO.setActivityUserBookDTOS(userBookDTOSMap.get(readingActivityDTO.getId()));
}
}
return page;
}
@Override
@ParamLog("建群后进行分配")
@Transactional(rollbackFor = Exception.class)
public void assignGroup(AssignGroupDTO assignGroupDTO) {
String wxGroupId = assignGroupDTO.getWxGroupId();
String masterId = assignGroupDTO.getMasterId();
ReadingGroupCreate groupCreate = new ReadingGroupCreate();
groupCreate.setWxGroupId(wxGroupId);
groupCreate.setMasterId(masterId);
groupCreate.setUseState(0);
readingGroupCreateDao.insert(groupCreate);
ThreadPoolUtils.OTHER_THREAD_POOL.execute(()->{
//群分配给活动
this.assignGroupToActivity(wxGroupId, masterId);
});
}
@ParamLog("群分配给活动")
private void assignGroupToActivity(String wxGroupId, String masterId) {
//最近建的无群id的群
ReadingGroup readingGroup = readingGroupDao.getLatestNullGroup(masterId);
if (null == readingGroup){
return;
}
Long aimGroupId = readingGroup.getId();
List<ReadingGroupRobot> robots = readingGroupRobotDao.getByGroupId(aimGroupId);
//更新wxgroupId
readingGroupRobotDao.updateWxGroupByGroupId(wxGroupId, aimGroupId);
readingGroupRobotDao.setMaster(masterId, aimGroupId);
readingGroupDao.updateWxGroupIdById(wxGroupId, aimGroupId);
readingGroupCreateDao.updateStateByWxGroupId(wxGroupId,1);
//修改群名称
SendWeixinRequestTools.changeGroupName(masterId,wxGroupId,readingGroup.getWxGroupName(),getIP(masterId));
//上传到weixin_qrcode表
String qrcodeUrl ="https://oss.5rs.me/oss/upload/image/png/0055b00c5c504a65951a850d6cf48c08.png";//过期码
WeixinQrcode weixinQrcode = new WeixinQrcode();
weixinQrcode.setCreateUser(0L);
weixinQrcode.setQrcodeUrl(qrcodeUrl);
weixinQrcode.setWeixinGroupId(wxGroupId);
weixinQrcode.setRobotWxId(masterId);
GroupRobotDTO groupRobotDTO = wechatGroupConsr.getGroupRobotByWxId(masterId);
if (groupRobotDTO != null){
weixinQrcode.setRobotId(Long.valueOf(groupRobotDTO.getId()));
}else {
log.error("getGroupRobotByWxId获取小号信息失败=" + masterId);
weixinQrcode.setRobotId(0L);
}
weixinQrcode.setUpdateState(2);
weixinQrcode.setUseState(1);
weixinQrcode.setGeneration(6);
Long qrcodeId = weixinQrcodeDao.insert(weixinQrcode);
//添加到bookGroupQrcode
GroupQrcode groupQrcode = new GroupQrcode();
groupQrcode.setWeixinGroupId(wxGroupId);
groupQrcode.setQrcodeUrl(qrcodeUrl);
groupQrcode.setCreateUser(0L);
groupQrcode.setWeixinQrcodeId(qrcodeId);
groupQrcode.setUserNumber(robots.size());
groupQrcode.setGroupSeq(1);
groupQrcode.setGroupName(readingGroup.getWxGroupName());
groupQrcode.setClassifyId(0L);
groupQrcode.setQrcodeHeadUrl(readerConsr.getNineHeadUrl());
groupQrcodeBiz.insert(groupQrcode);
}
@ParamLog("活动用户进群之后")
@Override
public void activityUserJoinGroup(AddWXGroupDTO addWXGroupDTO) {
String weixinGroupId=addWXGroupDTO.getWechatGroupId();
ReadingGroup readingGroup = readingGroupDao.getByWxGroupId(weixinGroupId);
if (readingGroup!=null){
List<String> nickNames = JedisClusterUtils.getJson(ACTIVITY_USER_JOIN_GROUP_USERS + weixinGroupId, List.class);
if (nickNames == null) {
nickNames = new ArrayList<>();
}
nickNames.add(addWXGroupDTO.getNickName());
log.info("活动用新用户进群"+nickNames);
JedisClusterUtils.setJson(ACTIVITY_USER_JOIN_GROUP_USERS + weixinGroupId, nickNames, 600);
String value = JedisClusterUtils.getJson(ACTIVITY_USER_JOIN_GROUP_GUIDE + weixinGroupId, String.class);
if (StringUtil.isEmpty(value)) {
JedisClusterUtils.setJson(ACTIVITY_USER_JOIN_GROUP_GUIDE + weixinGroupId, weixinGroupId, 10);
String nameStr = "";
int i = 0;
List<String> names = new ArrayList<>();
for (String name : nickNames) {
if (i == 5) {
break;
}
names.add(name);
i++;
}
for (String nickName : names) {
nickNames.remove(nickName);
if (StringUtils.isNotEmpty(nickName)) {
nameStr=nameStr+"@"+nickName+" ";
}
}
JedisClusterUtils.setJson(ACTIVITY_USER_JOIN_GROUP_USERS + weixinGroupId, nickNames, 600);
if (!StringUtil.isEmpty(nameStr)){
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(nameStr+",欢迎加入本群。");
sendTextMessageVO.setAltId(addWXGroupDTO.getWxId());
sendTextMessageVO.setWxGroupId(weixinGroupId);
sendTextMessageVO.setIp(addWXGroupDTO.getIp());
WxGroupSDK.sendTextMessage(sendTextMessageVO);
}
}
}
}
@Override
public Boolean isKeyWord(SendTextDTO sendTextDTO) {
if (!SendMessageTypeEnum.SELF.getCode().equals(sendTextDTO.getCode())) {
return false;
}
String textContent = sendTextDTO.getTextContent().trim();
ReadingActivity readingActivity = readingActivityDao.getJoinActivityByKeyword(sendTextDTO.getWxId(), sendTextDTO.getWechatUserId(), textContent);
if (null == readingActivity){
return false;
}
List<ReadingInvite> inviteList = readingInviteDao.getByActivityId(readingActivity.getId());
Date inviteTime = new Date();
if (!ListUtils.isEmpty(inviteList)){
inviteTime = inviteList.get(0).getInviteTime();
}
//在邀请时间之后
if (inviteTime.before(new Date())){
return true;
}else {
return false;
}
}
}
package com.pcloud.book.reading.check;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.reading.dao.ReadingInviteDao;
import com.pcloud.book.reading.dto.ReadingActivityAdditionParamDTO;
import com.pcloud.book.reading.dto.ReadingActivityBaseParamDTO;
import com.pcloud.book.reading.entity.ReadingInvite;
import com.pcloud.book.reading.enums.ContentTypeEnum;
import com.pcloud.book.reading.enums.JoinConditionEnum;
import com.pcloud.book.reading.enums.JoinTypeEnum;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
/**
* @描述:参数校验
* @作者:zhuyajie
* @创建时间:10:05 2020/1/15
* @版本:1.0
*/
@Component("paramCheck")
@Slf4j
public class ParamCheck {
@Autowired
private ReadingInviteDao readingInviteDao;
public void checkAddParam(ReadingActivityBaseParamDTO readingActivityBaseParamDTO) {
if (null == readingActivityBaseParamDTO) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "参数为空");
}
if (StringUtil.isEmpty(readingActivityBaseParamDTO.getTheme())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "活动主题为空");
}
if (null == readingActivityBaseParamDTO.getBrandId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请选择品牌方");
}
if (null == readingActivityBaseParamDTO.getJoinCondition()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请选择读者入群条件");
}
if (null == readingActivityBaseParamDTO.getJoinType()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请选择入群方式");
}
if (JoinConditionEnum.KEYWORD.value.equals(readingActivityBaseParamDTO.getJoinCondition()) && StringUtil.isEmpty(readingActivityBaseParamDTO.getJoinKeyword())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写入群关键词");
}
if (JoinConditionEnum.TRANSFER.value.equals(readingActivityBaseParamDTO.getJoinCondition()) && null == readingActivityBaseParamDTO.getJoinAmount()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请输入进群转账金额");
}
if (JoinTypeEnum.QRCODE.equals(readingActivityBaseParamDTO.getJoinType()) && StringUtil.isEmpty(readingActivityBaseParamDTO.getJoinQrcodePic())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请上传群二维码");
}
if (null == readingActivityBaseParamDTO.getRuleType()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写群规");
}
if (ContentTypeEnum.TEXT.value.equals(readingActivityBaseParamDTO.getRuleType()) && StringUtil.isEmpty(readingActivityBaseParamDTO.getRule())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写群规内容");
}
if (ContentTypeEnum.FILE.value.equals(readingActivityBaseParamDTO.getRuleType()) && null == readingActivityBaseParamDTO.getRuleResourceId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请上传群规文件");
}
if (ListUtils.isEmpty(readingActivityBaseParamDTO.getUserList())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请选择邀请用户");
}
//群链接方式入群
if (JoinTypeEnum.LINK.value.equals(readingActivityBaseParamDTO.getJoinType())) {
if (null == readingActivityBaseParamDTO.getStartTime()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写开始时间");
}
if (null == readingActivityBaseParamDTO.getEndTime()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写结束时间");
}
if (null == readingActivityBaseParamDTO.getStartSloganType()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写开场语");
}
if (ContentTypeEnum.TEXT.value.equals(readingActivityBaseParamDTO.getStartSloganType()) && StringUtil.isEmpty(readingActivityBaseParamDTO.getStartSlogan())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写开场语内容");
}
if (ContentTypeEnum.FILE.value.equals(readingActivityBaseParamDTO.getStartSloganType()) && null == readingActivityBaseParamDTO.getStartResourceId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请上传开场语文件");
}
if (null == readingActivityBaseParamDTO.getEndSloganType()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写结束语");
}
if (ContentTypeEnum.TEXT.value.equals(readingActivityBaseParamDTO.getEndSloganType()) && StringUtil.isEmpty(readingActivityBaseParamDTO.getEndSlogan())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写结束语内容");
}
if (ContentTypeEnum.FILE.value.equals(readingActivityBaseParamDTO.getEndSloganType()) && null == readingActivityBaseParamDTO.getEndResourceId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请上传结束语文件");
}
if (DateUtils.getDateByStr(readingActivityBaseParamDTO.getEndTime()).before(DateUtils.getDateByStr(readingActivityBaseParamDTO.getStartTime()))) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "结束时间要大于开始时间");
}
}
if (null == readingActivityBaseParamDTO.getInviteTime()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写邀请时间");
}
long diff = DateUtils.getDateDiff(DateUtils.getDateByStr(readingActivityBaseParamDTO.getInviteTime()), new Date());
// if (diff < 1) {
// throw new BookBizException(BookBizException.PARAM_IS_NULL, "邀请时间不能选择当天");
// }
if (ListUtils.isEmpty(readingActivityBaseParamDTO.getInviteList())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写邀请语");
}
if (readingActivityBaseParamDTO.getInviteList().size() > 3) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "邀请语最多3条");
}
for (ReadingInvite readingInvite : readingActivityBaseParamDTO.getInviteList()) {
if (null == readingInvite) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写邀请语");
}
readingInvite.setInviteTime(DateUtils.getDateByStr(readingActivityBaseParamDTO.getInviteTime()));
if (null == readingInvite.getInviteTime() || null == readingInvite.getInviteType()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写邀请语");
}
if (ContentTypeEnum.TEXT.value.equals(readingInvite.getInviteType()) && StringUtil.isEmpty(readingInvite.getInviteContent())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写邀请语内容");
}
if (ContentTypeEnum.FILE.value.equals(readingInvite.getInviteType()) && null == readingInvite.getInviteResourceId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请上传邀请语文件");
}
if (JoinTypeEnum.LINK.value.equals(readingActivityBaseParamDTO.getJoinType()) &&
readingInvite.getInviteTime().after(DateUtils.getDateByStr(readingActivityBaseParamDTO.getStartTime()))) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "开始时间要大于邀请时间");
}
}
if (JoinTypeEnum.QRCODE.value.equals(readingActivityBaseParamDTO.getJoinType()) && readingActivityBaseParamDTO.getUserList().size() > 500) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "选择群二维码入群方式,活动读者最多可以选择500人");
}
}
public void checkAdditionParam(ReadingActivityAdditionParamDTO activityAdditionParamDTO) {
if (null == activityAdditionParamDTO) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "参数为空");
}
if (null == activityAdditionParamDTO.getId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "活动id为空");
}
//打卡
if (null == activityAdditionParamDTO.getClockOpen()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写打卡设置");
}
if (activityAdditionParamDTO.getClockOpen()) {
if (null == activityAdditionParamDTO.getClockResultOpen()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写打卡成果设置");
}
if (StringUtil.isEmpty(activityAdditionParamDTO.getClockRemindTime()) || StringUtil.isEmpty(activityAdditionParamDTO.getClockRemindContent()) || StringUtil.isEmpty(activityAdditionParamDTO.getClockLink())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写打卡设置");
}
//编辑端自定义打卡
if (!activityAdditionParamDTO.getClockLink().contains("clock")) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写正确的打卡链接");
}
String clockLink = activityAdditionParamDTO.getClockLink();
String clockId = clockLink.substring(clockLink.indexOf("/A") + 2, clockLink.indexOf("/custom/sign?"));
if (StringUtil.isEmpty(clockId)) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写正确的打卡链接");
}
activityAdditionParamDTO.setClockServeId(Long.valueOf(clockId));
activityAdditionParamDTO.setClockServeType("APP");
} else {
activityAdditionParamDTO.setClockResultOpen(false);
}
//猜谜
if (null == activityAdditionParamDTO.getRiddleOpen()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写猜谜设置");
}
//奖励
if (null == activityAdditionParamDTO.getAwardOpen()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写奖励设置");
}
if (activityAdditionParamDTO.getAwardOpen()) {
if (StringUtil.isEmpty(activityAdditionParamDTO.getAwardPic()) && StringUtil.isEmpty(activityAdditionParamDTO.getAwardText())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请填写奖励设置");
}
}
}
public void checkUpdateParam(ReadingActivityBaseParamDTO readingActivityBaseParamDTO) {
if (null == readingActivityBaseParamDTO.getId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "活动id为空");
}
List<ReadingInvite> inviteList = readingInviteDao.getByActivityId(readingActivityBaseParamDTO.getId());
if (!ListUtils.isEmpty(inviteList)) {
Date inviteTime = inviteList.get(0).getInviteTime();
if (inviteTime.before(new Date())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "活动邀请已开始,不能修改");
}
}
}
}
package com.pcloud.book.reading.dao;
import com.pcloud.book.reading.entity.BookGroupCollection;
import com.pcloud.common.core.dao.BaseDao;
public interface BookGroupCollectionDao extends BaseDao<BookGroupCollection> {
/**
* 根据TransferId获取转账信息
* @param transferId
* @return
*/
BookGroupCollection getByTransferId(String transferId);
}
\ No newline at end of file
package com.pcloud.book.reading.dao;
import com.pcloud.book.reading.entity.ReadingActivity;
import com.pcloud.common.core.dao.BaseDao;
/**
* @描述:共读活动基本设置
* @作者:zhuyajie
* @创建时间:17:26 2020/1/14
* @版本:1.0
*/
public interface ReadingActivityDao extends BaseDao<ReadingActivity> {
/**
* 更新高级设置
* @param readingActivity
*/
public void updateAdditionSetting(ReadingActivity readingActivity);
/**
* 根据主题获取活动信息
* @param theme
* @return
*/
ReadingActivity getByTheme(String theme);
/**
* @param theme
* @return
*/
Boolean themeExist(String theme);
/**
* 根据活动主题和入群条件获取
* @param theme
* @return
*/
ReadingActivity getByThemeAndJoinCondition(String theme, Integer joinCondition);
/**
* 根据关键词查活动
* @param altId
* @param wxUserId
* @param text
* @return
*/
ReadingActivity getJoinActivityByKeyword(String altId,String wxUserId,String text);
}
package com.pcloud.book.reading.dao;
import com.pcloud.book.reading.entity.ReadingGroupCreate;
import com.pcloud.common.core.dao.BaseDao;
public interface ReadingGroupCreateDao extends BaseDao<ReadingGroupCreate> {
/**
* 更改使用状态
* @param wxGroupId
*/
public void updateStateByWxGroupId(String wxGroupId, Integer useState);
}
package com.pcloud.book.reading.dao;
import com.pcloud.book.reading.entity.ReadingGroup;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
/**
* @描述:活动关联群
* @作者:zhuyajie
* @创建时间:15:30 2020/1/15
* @版本:1.0
*/
public interface ReadingGroupDao extends BaseDao<ReadingGroup> {
/**
* 根据活动id获取群,有微信群
* @param activityId
* @return
*/
public List<ReadingGroup> getByActivityId(Long activityId);
/**
* 根据群id查
* @param wxGroupId
* @return
*/
public ReadingGroup getByWxGroupId(String wxGroupId);
/**
* 更新微信群id
* @param wxGroupId
* @param id
*/
public void updateWxGroupIdById(String wxGroupId, Long id);
/**
* 最近无群id的群
* @return
*/
public ReadingGroup getLatestNullGroup(String altId);
/**
* getAllByActivityId
* @param activityId
* @return
*/
List<ReadingGroup> getAllByActivityId(Long activityId);
/**
* 更新群名称
* @param wxGroupName
* @param id
*/
public void updateGroupName(String wxGroupName, Long id);
}
package com.pcloud.book.reading.dao;
import com.pcloud.book.reading.entity.ReadingGroupRobot;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
/**
* @描述:群小号关联表
* @作者:zhuyajie
* @创建时间:13:42 2020/1/20
* @版本:1.0
*/
public interface ReadingGroupRobotDao extends BaseDao<ReadingGroupRobot> {
/**
* 更新微信群id
* @param wxGroupId
* @param groupId
*/
public void updateWxGroupByGroupId(String wxGroupId, Long groupId);
/**
* 设置群主
* @param altId
* @param groupId
*/
public void setMaster(String altId, Long groupId);
/**
* 获取一个小号
* @param wxGroupId
* @return
*/
String getMasterRobotByWxGroupId(String wxGroupId);
/**
* 根据群成员数量查符合的群
* @param count
* @return
*/
List<Long> getGroupIdsByCount(Integer count);
/**
* 该群是否符合要求
* @param groupId
* @param altIds
* @return
*/
Boolean groupExist(Long groupId, List<String> altIds);
/**
* 根据活动id查询
* @param activityId
* @return
*/
List<ReadingGroupRobot> getByActivityId(Long activityId);
/**
* groupId查询
* @param groupId
* @return
*/
List<ReadingGroupRobot> getByGroupId(Long groupId);
}
package com.pcloud.book.reading.dao;
import com.pcloud.book.reading.entity.ReadingInvite;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
/**
* @描述:邀请语设置
* @作者:zhuyajie
* @创建时间:17:28 2020/1/14
* @版本:1.0
*/
public interface ReadingInviteDao extends BaseDao<ReadingInvite> {
/**
* 根据活动id查询
* @param activityId
* @return
*/
public List<ReadingInvite> getByActivityId(Long activityId);
/**
* 删除
* @param activityId
*/
void deleteByActivityId(Long activityId);
}
package com.pcloud.book.reading.dao;
import com.pcloud.book.reading.dto.ActivityUserBookDTO;
import com.pcloud.book.reading.dto.ActivityUserCountDTO;
import com.pcloud.book.reading.entity.ReadingUser;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
/**
* @描述:共读活动邀请用户
* @作者:zhuyajie
* @创建时间:17:31 2020/1/14
* @版本:1.0
*/
public interface ReadingUserDao extends BaseDao<ReadingUser> {
/**
* 根据活动id查询
* @param activityId
* @return
*/
List<ReadingUser> getByActivityId(Long activityId, Integer joinState);
/**
* 修改用户参加状态
* @param joinState
* @param wxUserId
* @param activityId
*/
public void updateJoinState(Integer joinState, String wxUserId, String activityId);
/**
* 查询活动人数列表
*/
List<ActivityUserCountDTO> getUserCountsByActivityIds(List<Long> activityIds);
/**
* 查用户id
* @param activityIds
* @return
*/
List<String> getWxUserIdByActivityIds(List<Long> activityIds);
/**
* 批量获取活动读者书籍
*/
List<ActivityUserBookDTO> getBooksByActivityIds(List<Long> activityIds);
}
package com.pcloud.book.reading.dao.impl;
import com.pcloud.book.reading.dao.BookGroupCollectionDao;
import com.pcloud.book.reading.entity.BookGroupCollection;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
@Component("bookGroupCollectionDao")
public class BookGroupCollectionDaoImpl extends BaseDaoImpl<BookGroupCollection> implements BookGroupCollectionDao {
@Override
public BookGroupCollection getByTransferId(String transferId) {
return this.getSqlSession().selectOne("getByTransferId", transferId);
}
}
package com.pcloud.book.reading.dao.impl;
import com.pcloud.book.reading.dao.ReadingActivityDao;
import com.pcloud.book.reading.entity.ReadingActivity;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @描述:共读活动基本设置
* @作者:zhuyajie
* @创建时间:17:27 2020/1/14
* @版本:1.0
*/
@Component("readingActivityDao")
public class ReadingActivityDaoImpl extends BaseDaoImpl<ReadingActivity> implements ReadingActivityDao {
@Override
public void updateAdditionSetting(ReadingActivity readingActivity) {
getSessionTemplate().update(getStatement("updateAdditionSetting"), readingActivity);
}
@Override
public ReadingActivity getByTheme(String theme) {
return this.getSqlSession().selectOne("getByTheme", theme);
}
public Boolean themeExist(String theme) {
return getSessionTemplate().selectOne(getStatement("themeExist"), theme);
}
@Override
public ReadingActivity getByThemeAndJoinCondition(String theme, Integer joinCondition) {
Map<String, Object> map = new HashMap<>();
map.put("theme", theme);
map.put("joinCondition", joinCondition);
return this.getSqlSession().selectOne("getByThemeAndJoinCondition", map);
}
@Override
public ReadingActivity getJoinActivityByKeyword(String altId, String wxUserId, String text) {
Map<String, Object> map = new HashMap<>();
map.put("altId", altId);
map.put("wxUserId", wxUserId);
map.put("joinKeyword", text);
return getSessionTemplate().selectOne(getStatement("getJoinActivityByKeyword"), map);
}
}
package com.pcloud.book.reading.dao.impl;
import com.pcloud.book.reading.dao.ReadingGroupCreateDao;
import com.pcloud.book.reading.entity.ReadingGroupCreate;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component("readingGroupCreateDao")
public class ReadingGroupCreateDaoImpl extends BaseDaoImpl<ReadingGroupCreate> implements ReadingGroupCreateDao {
@Override
public void updateStateByWxGroupId(String wxGroupId, Integer useState) {
Map<String, Object>map=new HashMap<>();
map.put("wxGroupId",wxGroupId);
map.put("useState",useState);
getSessionTemplate().update(getStatement("updateStateByWxGroupId"),map);
}
}
package com.pcloud.book.reading.dao.impl;
import com.pcloud.book.reading.dao.ReadingGroupDao;
import com.pcloud.book.reading.entity.ReadingGroup;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @描述:活动关联群
* @作者:zhuyajie
* @创建时间:15:30 2020/1/15
* @版本:1.0
*/
@Component("readingGroupDao")
public class ReadingGroupDaoImpl extends BaseDaoImpl<ReadingGroup> implements ReadingGroupDao {
@Override
public List<ReadingGroup> getByActivityId(Long activityId) {
return getSessionTemplate().selectList(getStatement("getByActivityId"), activityId);
}
@Override
public ReadingGroup getByWxGroupId(String wxGroupId) {
return getSessionTemplate().selectOne(getStatement("getByWxGroupId"), wxGroupId);
}
@Override
public void updateWxGroupIdById(String wxGroupId, Long id) {
Map<String, Object> map = new HashMap<>();
map.put("wxGroupId", wxGroupId);
map.put("id", id);
getSessionTemplate().update(getStatement("updateWxGroupIdById"), map);
}
@Override
public ReadingGroup getLatestNullGroup(String altId) {
return getSessionTemplate().selectOne(getStatement("getLatestNullGroup"), altId);
}
@Override
public List<ReadingGroup> getAllByActivityId(Long activityId) {
return getSessionTemplate().selectList(getStatement("getAllByActivityId"), activityId);
}
@Override
public void updateGroupName(String wxGroupName, Long id) {
Map<String, Object> map = new HashMap<>();
map.put("wxGroupName", wxGroupName);
map.put("id", id);
getSessionTemplate().update(getStatement("updateGroupName"), map);
}
}
package com.pcloud.book.reading.dao.impl;
import com.pcloud.book.reading.dao.ReadingGroupRobotDao;
import com.pcloud.book.reading.entity.ReadingGroupRobot;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @描述:群小号关联表
* @作者:zhuyajie
* @创建时间:13:43 2020/1/20
* @版本:1.0
*/
@Component("readingGroupRobotDao")
public class ReadingGroupRobotDaoImpl extends BaseDaoImpl<ReadingGroupRobot> implements ReadingGroupRobotDao {
@Override
public void updateWxGroupByGroupId(String wxGroupId, Long groupId) {
Map<String, Object> map = new HashMap<>();
map.put("wxGroupId", wxGroupId);
map.put("groupId", groupId);
getSessionTemplate().update(getStatement("updateWxGroupByGroupId"), map);
}
@Override
public void setMaster(String altId, Long groupId) {
Map<String, Object> map = new HashMap<>();
map.put("altId", altId);
map.put("groupId", groupId);
getSessionTemplate().update(getStatement("setMaster"), map);
}
@Override
public String getMasterRobotByWxGroupId(String wxGroupId) {
return getSessionTemplate().selectOne(getStatement("getMasterRobotByWxGroupId"), wxGroupId);
}
@Override
public List<Long> getGroupIdsByCount(Integer count) {
return getSessionTemplate().selectList(getStatement("getGroupIdsByCount"), count);
}
@Override
public Boolean groupExist(Long groupId, List<String> altIds) {
Map<String,Object> map = new HashMap<>();
map.put("groupId",groupId);
map.put("altIds",altIds);
return getSessionTemplate().selectOne(getStatement("groupExist"), map);
}
@Override
public List<ReadingGroupRobot> getByActivityId(Long activityId) {
return getSessionTemplate().selectList(getStatement("getByActivityId"), activityId);
}
@Override
public List<ReadingGroupRobot> getByGroupId(Long groupId) {
return getSessionTemplate().selectList(getStatement("getByGroupId"), groupId);
}
}
package com.pcloud.book.reading.dao.impl;
import com.pcloud.book.reading.dao.ReadingInviteDao;
import com.pcloud.book.reading.entity.ReadingInvite;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @描述:邀请语设置
* @作者:zhuyajie
* @创建时间:17:29 2020/1/14
* @版本:1.0
*/
@Component("readingInviteDao")
public class ReadingInviteDaoImpl extends BaseDaoImpl<ReadingInvite> implements ReadingInviteDao {
@Override
public List<ReadingInvite> getByActivityId(Long activityId) {
return getSessionTemplate().selectList(getStatement("getByActivityId"), activityId);
}
@Override
public void deleteByActivityId(Long activityId) {
getSessionTemplate().delete(getStatement("deleteByActivityId"), activityId);
}
}
package com.pcloud.book.reading.dao.impl;
import com.pcloud.book.reading.dao.ReadingUserDao;
import com.pcloud.book.reading.dto.ActivityUserBookDTO;
import com.pcloud.book.reading.dto.ActivityUserCountDTO;
import com.pcloud.book.reading.entity.ReadingUser;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @描述:共读活动邀请用户
* @作者:zhuyajie
* @创建时间:17:31 2020/1/14
* @版本:1.0
*/
@Component("readingUserDao")
public class ReadingUserDaoImpl extends BaseDaoImpl<ReadingUser> implements ReadingUserDao {
@Override
public List<ReadingUser> getByActivityId(Long activityId, Integer joinState) {
Map<String,Object> map = new HashMap<>();
map.put("activityId",activityId);
map.put("joinState",joinState);
return getSessionTemplate().selectList(getStatement("getByActivityId"),map);
}
@Override
public void updateJoinState(Integer joinState, String wxUserId, String activityId) {
Map<String, Object> map = new HashMap<>();
map.put("activityId", activityId);
map.put("wxUserId", wxUserId);
map.put("joinState", joinState);
getSessionTemplate().update(getStatement("updateJoinState"), map);
}
@Override
public List<ActivityUserCountDTO> getUserCountsByActivityIds(List<Long> activityIds) {
Map<String, Object> map = new HashMap<>();
map.put("activityIds", activityIds);
return getSessionTemplate().selectList(getStatement("getUserCountsByActivityIds"), map);
}
@Override
public List<String> getWxUserIdByActivityIds(List<Long> activityIds) {
Map<String, Object> map = new HashMap<>();
map.put("activityIds", activityIds);
return getSessionTemplate().selectList(getStatement("getWxUserIdByActivityIds"), map);
}
@Override
public List<ActivityUserBookDTO> getBooksByActivityIds(List<Long> activityIds) {
Map<String, Object> map = new HashMap<>();
map.put("activityIds", activityIds);
return getSessionTemplate().selectList(getStatement("getBooksByActivityIds"), map);
}
}
package com.pcloud.book.reading.dto;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
* @Description
* @Author ruansiyuan
* @Date 2020/1/21 14:26
**/
@ApiModel("活动书刊")
@Data
public class ActivityUserBookDTO {
private Long bookId;
private String bookName;
private Long activityId;
}
package com.pcloud.book.reading.dto;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
* @Description
* @Author ruansiyuan
* @Date 2020/1/20 11:01
**/
@Data
@ApiModel("活动和活动人数")
public class ActivityUserCountDTO {
private Long activityId;
private Integer count;
}
package com.pcloud.book.reading.dto;
import com.pcloud.common.dto.BaseDto;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @描述:小号用户分组
* @作者:zhuyajie
* @创建时间:18:02 2020/1/19
* @版本:1.0
*/
@ApiModel("小号用户分组")
@Data
public class GroupingUserDTO extends BaseDto {
@ApiModelProperty("小号id")
private String altId;
@ApiModelProperty("昵称")
private String altNickName;
@ApiModelProperty("头像")
private String altHeadPic;
@ApiModelProperty("性别")
private Integer altSex;
@ApiModelProperty("用户列表")
private List<UserBaseDTO> userBaseDTOS;
}
package com.pcloud.book.reading.dto;
import com.pcloud.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @描述:高级设置
* @作者:zhuyajie
* @创建时间:15:31 2020/1/19
* @版本:1.0
*/
@Data
@ApiModel("高级设置")
public class ReadingActivityAdditionParamDTO extends BaseDto{
@ApiModelProperty("活动id")
private Long id;
@ApiModelProperty("猜谜语开启状态")
private Boolean riddleOpen;
@ApiModelProperty("奖励开启")
private Boolean awardOpen;
@ApiModelProperty("奖励文案")
private String awardText;
@ApiModelProperty("奖励图片地址")
private String awardPic;
@ApiModelProperty("打卡开启")
private Boolean clockOpen;
@ApiModelProperty("打卡每日提醒时间")
private String clockRemindTime;
@ApiModelProperty("打卡提醒内容")
private String clockRemindContent;
@ApiModelProperty("打卡链接")
private String clockLink;
@ApiModelProperty("打卡应用或作品id")
private Long clockServeId;
@ApiModelProperty("打卡应用或作品")
private String clockServeType;
@ApiModelProperty("打卡成果是否发送")
private Boolean clockResultOpen;
}
package com.pcloud.book.reading.dto;
import com.pcloud.book.reading.entity.ReadingInvite;
import com.pcloud.book.reading.entity.ReadingUser;
import com.pcloud.common.dto.BaseDto;
import java.math.BigDecimal;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("共读活动基本设置")
public class ReadingActivityBaseParamDTO extends BaseDto{
@ApiModelProperty("活动id")
private Long id;
@ApiModelProperty("活动主题")
private String theme;
@ApiModelProperty("品牌方id")
private Long brandId;
@ApiModelProperty("入群条件(1无限制2回复关键词3转账)")
private Integer joinCondition;
@ApiModelProperty("入群关键词")
private String joinKeyword;
@ApiModelProperty("入群转账金额")
private BigDecimal joinAmount;
@ApiModelProperty("入群方式(1邀请链接/2群二维码)")
private Integer joinType;
@ApiModelProperty("入群二维码图片")
private String joinQrcodePic;
@ApiModelProperty("群规类型(1文本2文件)")
private Integer ruleType;
@ApiModelProperty("群规")
private String rule;
@ApiModelProperty("群规文件资源id")
private String ruleResourceId;
@ApiModelProperty("活动开始时间")
private String startTime;
@ApiModelProperty("开场语类型(1文本2文件)")
private Integer startSloganType;
@ApiModelProperty("开场语")
private String startSlogan;
@ApiModelProperty("开场语资源id")
private String startResourceId;
@ApiModelProperty("活动结束时间")
private String endTime;
@ApiModelProperty("结束语(1文本2文件)")
private Integer endSloganType;
@ApiModelProperty("结束语")
private String endSlogan;
@ApiModelProperty("结束语资源id")
private String endResourceId;
@ApiModelProperty("邀请时间")
private String inviteTime;
@ApiModelProperty("邀请语设置")
private List<ReadingInvite> inviteList;
@ApiModelProperty("邀请用户")
private List<ReadingUser> userList;
@ApiModelProperty("创建人")
private Long createUser;
}
\ No newline at end of file
package com.pcloud.book.reading.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.book.reading.entity.ReadingInvite;
import com.pcloud.book.reading.entity.ReadingUser;
import com.pcloud.common.dto.BaseDto;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @描述:共读活动
* @作者:zhuyajie
* @创建时间:10:36 2020/1/19
* @版本:1.0
*/
@Data
@ApiModel("共读活动基本设置")
public class ReadingActivityDTO extends BaseDto {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("活动主题")
private String theme;
@ApiModelProperty("品牌方id")
private Long brandId;
@ApiModelProperty("品牌方名称")
private String brandName;
@ApiModelProperty("入群条件(1无限制2回复关键词3转账)")
private Integer joinCondition;
@ApiModelProperty("入群关键词")
private String joinKeyword;
@ApiModelProperty("入群转账金额")
private BigDecimal joinAmount;
@ApiModelProperty("入群方式(1邀请链接/2群二维码)")
private Integer joinType;
@ApiModelProperty("入群二维码图片")
private String joinQrcodePic;
@ApiModelProperty("群规类型(1文本2文件)")
private Integer ruleType;
@ApiModelProperty("群规")
private String rule;
@ApiModelProperty("群规文件资源id")
private String ruleResourceId;
@ApiModelProperty("群规文件资源名称")
private String ruleResourceName;
@ApiModelProperty("群规文件资源大小")
private Long ruleResourceSize;
@ApiModelProperty("活动开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
@ApiModelProperty("开场语类型(1文本2文件)")
private Integer startSloganType;
@ApiModelProperty("开场语")
private String startSlogan;
@ApiModelProperty("开场语资源id")
private String startResourceId;
@ApiModelProperty("开场语资源名称")
private String startResourceName;
@ApiModelProperty("开场语资源大小")
private Long startResourceSize;
@ApiModelProperty("活动结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
@ApiModelProperty("结束语(1文本2文件)")
private Integer endSloganType;
@ApiModelProperty("结束语")
private String endSlogan;
@ApiModelProperty("结束语资源id")
private String endResourceId;
@ApiModelProperty("结束语资源名称")
private String endResourceName;
@ApiModelProperty("结束语资源大小")
private Long endResourceSize;
@ApiModelProperty("猜谜语开启状态")
private Boolean riddleOpen;
@ApiModelProperty("奖励开启")
private Boolean awardOpen;
@ApiModelProperty("奖励文案")
private String awardText;
@ApiModelProperty("奖励图片地址")
private String awardPic;
@ApiModelProperty("打卡开启")
private Boolean clockOpen;
@ApiModelProperty("打卡每日提醒时间")
private String clockRemindTime;
@ApiModelProperty("打卡提醒内容")
private String clockRemindContent;
@ApiModelProperty("打卡链接")
private String clockLink;
@ApiModelProperty("打卡商品或作品id")
private Long clockServeId;
@ApiModelProperty("打卡应用或作品")
private String clockServeType;
@ApiModelProperty("打卡成果是否发送")
private Boolean clockResultOpen;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("创建人")
private Long createUser;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@ApiModelProperty("邀请时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date inviteTime;
@ApiModelProperty("邀请语设置")
private List<ReadingInvite> inviteList;
@ApiModelProperty("邀请用户")
private List<ReadingUser> userList;
@ApiModelProperty("小号用户分组")
private List<GroupingUserDTO> groupingUserList;
@ApiModelProperty("活动用户人数")
private Integer userCount;
@ApiModelProperty("活动用户书籍")
private List<ActivityUserBookDTO> activityUserBookDTOS;
}
package com.pcloud.book.reading.dto;
import com.pcloud.common.dto.BaseDto;
import lombok.Data;
/**
* @描述:用户基本信息
* @作者:zhuyajie
* @创建时间:18:12 2020/1/19
* @版本:1.0
*/
@Data
public class UserBaseDTO extends BaseDto {
/**
* 微信用户ID
*/
private String wxUserId;
/**
* 昵称
*/
private String nickName;
/**
* 头像
*/
private String headPic;
/**
* 性别
*/
private Integer sex;
}
package com.pcloud.book.reading.entity;
import com.pcloud.common.entity.BaseEntity;
import java.math.BigDecimal;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BookGroupCollection extends BaseEntity {
private static final long serialVersionUID = -6375016882263463248L;
private BigDecimal amount;
private Integer status;
private String transferId;
private String collectionRobotId;
private String createUser;
private Date createTime;
private String updateUser;
private Date updateTime;
}
\ No newline at end of file
package com.pcloud.book.reading.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ApiModel("共读活动基本设置")
public class ReadingActivity extends BaseEntity {
@ApiModelProperty("活动主题")
private String theme;
@ApiModelProperty("品牌方id")
private Long brandId;
@ApiModelProperty("入群条件(1无限制2回复关键词3转账)")
private Integer joinCondition;
@ApiModelProperty("入群关键词")
private String joinKeyword;
@ApiModelProperty("入群转账金额")
private BigDecimal joinAmount;
@ApiModelProperty("入群方式(link/qrcode)")
private Integer joinType;
@ApiModelProperty("入群二维码图片")
private String joinQrcodePic;
@ApiModelProperty("群规类型(1文本2文件)")
private Integer ruleType;
@ApiModelProperty("群规")
private String rule;
@ApiModelProperty("群规文件资源id")
private String ruleResourceId;
@ApiModelProperty("活动开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
@ApiModelProperty("开场语类型(1文本2文件)")
private Integer startSloganType;
@ApiModelProperty("开场语")
private String startSlogan;
@ApiModelProperty("开场语资源id")
private String startResourceId;
@ApiModelProperty("活动结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
@ApiModelProperty("结束语(1文本2文件)")
private Integer endSloganType;
@ApiModelProperty("结束语")
private String endSlogan;
@ApiModelProperty("结束语资源id")
private String endResourceId;
@ApiModelProperty("猜谜语开启状态")
private Boolean riddleOpen;
@ApiModelProperty("奖励开启")
private Boolean awardOpen;
@ApiModelProperty("奖励文案")
private String awardText;
@ApiModelProperty("奖励图片地址")
private String awardPic;
@ApiModelProperty("打卡开启")
private Boolean clockOpen;
@ApiModelProperty("打卡每日提醒时间")
private String clockRemindTime;
@ApiModelProperty("打卡提醒内容")
private String clockRemindContent;
@ApiModelProperty("打卡链接")
private String clockLink;
@ApiModelProperty("打卡商品或作品id")
private Long clockServeId;
@ApiModelProperty("打卡应用或作品")
private String clockServeType;
@ApiModelProperty("打卡成果是否发送")
private Boolean clockResultOpen;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("创建人")
private Long createUser;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}
\ No newline at end of file
package com.pcloud.book.reading.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("共读活动关联群")
public class ReadingGroup extends BaseEntity{
@ApiModelProperty("群id")
private String wxGroupId;
@ApiModelProperty("群名称")
private String wxGroupName;
@ApiModelProperty("活动id")
private Long activityId;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("创建人")
private Long createUser;
}
\ No newline at end of file
package com.pcloud.book.reading.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
@ApiModel("共读活动创建好的群")
public class ReadingGroupCreate extends BaseEntity {
@ApiModelProperty("群id")
private String wxGroupId;
@ApiModelProperty("群主id")
private String masterId;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("使用状态")
private Integer useState;
public String getWxGroupId() {
return wxGroupId;
}
public void setWxGroupId(String wxGroupId) {
this.wxGroupId = wxGroupId;
}
public String getMasterId() {
return masterId;
}
public void setMasterId(String masterId) {
this.masterId = masterId;
}
@Override
public Date getCreateTime() {
return createTime;
}
@Override
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Integer getUseState() {
return useState;
}
public void setUseState(Integer useState) {
this.useState = useState;
}
}
package com.pcloud.book.reading.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import lombok.Data;
/**
* 群小号关联表
*/
@Data
public class ReadingGroupRobot extends BaseEntity{
/**
* 群id
*/
private String wxGroupId;
/**
* 小号id
*/
private String altId;
/**
* 群id
*/
private Long groupId;
/**
* 是否群主
*/
private Boolean isMaster;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
\ No newline at end of file
package com.pcloud.book.reading.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("邀请语设置")
public class ReadingInvite extends BaseEntity{
@ApiModelProperty("共读活动id")
private Long activityId;
@ApiModelProperty("邀请时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date inviteTime;
@ApiModelProperty("发送类型(1文本2文件)")
private Integer inviteType;
@ApiModelProperty("邀请语")
private String inviteContent;
@ApiModelProperty("邀请语资源id")
private String inviteResourceId;
@ApiModelProperty("邀请语资源大小")
private Long inviteResourceSize;
@ApiModelProperty("邀请语资源路径名称")
private String inviteResourceName;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("创建人")
private Long createUser;
}
\ No newline at end of file
package com.pcloud.book.reading.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("共读活动用户")
public class ReadingUser extends BaseEntity{
@ApiModelProperty("共读活动id")
private Long activityId;
@ApiModelProperty("用户id")
private String wxUserId;
@ApiModelProperty("小号id")
private String altId;
@ApiModelProperty("参与状态")
private Integer joinState;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("创建人")
private Long createUser;
}
\ No newline at end of file
package com.pcloud.book.reading.enums;
/**
* @描述:发送内容类型
* @作者:zhuyajie
* @创建时间:17:41 2020/1/14
* @版本:1.0
*/
public enum ContentTypeEnum {
/**
* 文本
*/
TEXT(1),
/**
* 文件
*/
FILE(2);
public Integer value;
ContentTypeEnum(Integer value) {
this.value = value;
}
}
package com.pcloud.book.reading.enums;
/**
* @描述:入群条件
* @作者:zhuyajie
* @创建时间:17:33 2020/1/14
* @版本:1.0
*/
public enum JoinConditionEnum {
/**
* 1无限制
*/
NO(1),
/**
* 2回复关键词
*/
KEYWORD(2),
/**
* 3转账
*/
TRANSFER(3);
public Integer value;
JoinConditionEnum(Integer value) {
this.value = value;
}
}
package com.pcloud.book.reading.enums;
/**
* @描述:参加活动状态
* @作者:zhuyajie
* @创建时间:17:46 2020/1/15
* @版本:1.0
*/
public enum JoinStateEnum {
/**
* 未参加
*/
NOT_JOIN(0),
/**
* 参加
*/
JOIN(1);
public Integer value;
JoinStateEnum(Integer value) {
this.value = value;
}
}
package com.pcloud.book.reading.enums;
/**
* @描述:入群方式
* @作者:zhuyajie
* @创建时间:17:39 2020/1/14
* @版本:1.0
*/
public enum JoinTypeEnum {
/**
* 发邀请链接
*/
LINK(1),
/**
* 扫群二维码
*/
QRCODE(2);
public Integer value;
JoinTypeEnum(Integer value) {
this.value = value;
}
}
package com.pcloud.book.reading.facade;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.reading.biz.ReadingActivityBiz;
import com.pcloud.book.reading.check.ParamCheck;
import com.pcloud.book.reading.dto.AssignGroupDTO;
import com.pcloud.book.reading.dto.ReadingActivityAdditionParamDTO;
import com.pcloud.book.reading.dto.ReadingActivityBaseParamDTO;
import com.pcloud.book.reading.dto.ReadingActivityDTO;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import com.sdk.wxgroup.CollectionVO;
import com.pcloud.common.utils.string.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
/**
* @描述:共读活动外部接口
* @作者:zhuyajie
* @创建时间:17:45 2020/1/14
* @版本:1.0
*/
@Api("共读活动")
@RestController("readingActivityFacade")
@RequestMapping("readingActivity")
@Slf4j
public class ReadingActivityFacade {
@Autowired
private ReadingActivityBiz readingActivityBiz;
@Autowired
private ParamCheck paramCheck;
@PostMapping("receiveMoney")
public ResponseDto<Void> receiveMoney(@RequestBody CollectionVO vo) {
readingActivityBiz.receiveMoney(vo);
return new ResponseDto<>();
}
@ApiOperation("创建共读活动")
@PostMapping("add")
public ResponseDto<?> add(@RequestHeader("token") String token, @RequestBody @ApiParam ReadingActivityBaseParamDTO readingActivityBaseParamDTO) throws PermissionException {
Long partyId = (Long) SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
paramCheck.checkAddParam(readingActivityBaseParamDTO);
readingActivityBaseParamDTO.setCreateUser(partyId);
Long id = readingActivityBiz.add(readingActivityBaseParamDTO);
return new ResponseDto<>(id);
}
@ApiOperation("修改共读活动")
@PostMapping("update")
public ResponseDto<?> update(@RequestHeader("token") String token, @RequestBody @ApiParam ReadingActivityBaseParamDTO readingActivityBaseParamDTO) throws PermissionException {
SessionUtil.getToken4Redis(token);
paramCheck.checkAddParam(readingActivityBaseParamDTO);
paramCheck.checkUpdateParam(readingActivityBaseParamDTO);
readingActivityBiz.update(readingActivityBaseParamDTO);
return new ResponseDto<>();
}
@ApiOperation("共读活动高级设置")
@PostMapping("updateAdditionSetting")
public ResponseDto<?> updateAdditionSetting(@RequestHeader("token") String token, @RequestBody @ApiParam ReadingActivityAdditionParamDTO readingActivityAdditionParamDTO) throws PermissionException {
SessionUtil.getToken4Redis(token);
paramCheck.checkAdditionParam(readingActivityAdditionParamDTO);
readingActivityBiz.updateAdditionSetting(readingActivityAdditionParamDTO);
return new ResponseDto<>();
}
@ApiOperation("根据id查询")
@GetMapping("getById")
public ResponseDto<ReadingActivityDTO> getById(@RequestHeader("token") String token, @RequestParam("id") Long id) throws PermissionException {
SessionUtil.getToken4Redis(token);
if (null == id) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "id为空");
}
ReadingActivityDTO activityDTO = readingActivityBiz.getById(id);
return new ResponseDto<>(activityDTO);
}
@ApiOperation("查询列表")
@GetMapping("getList")
public ResponseDto<PageBeanNew<ReadingActivityDTO>> getList(
@RequestHeader("token") String token,
@RequestParam("currentPage") Integer currentPage,
@RequestParam("numPerPage") Integer numPerPage
) throws PermissionException {
SessionUtil.getToken4Redis(token);
PageBeanNew<ReadingActivityDTO> page = readingActivityBiz.getList(currentPage, numPerPage);
return new ResponseDto<>(page);
}
@ApiOperation("分配群")
@PostMapping("assignGroup")
@ParamLog("接收分配群参数")
public ResponseDto<?> assignGroup(@RequestBody @ApiParam AssignGroupDTO assignGroupDTO) {
if (null == assignGroupDTO || StringUtil.isEmpty(assignGroupDTO.getWxGroupId()) || StringUtil.isEmpty(assignGroupDTO.getMasterId())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "参数缺失");
}
readingActivityBiz.assignGroup(assignGroupDTO);
return new ResponseDto<>();
}
}
package com.pcloud.book.reading.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.pcloud.book.reading.biz.ReadingActivityBiz;
import com.pcloud.book.reading.service.ReadingActivityService;
import com.pcloud.common.core.aspect.ParamLog;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* @描述:共读活动
* @作者:zhuyajie
* @创建时间:16:00 2020/1/15
* @版本:1.0
*/
@RestController("readingActivityService")
@RequestMapping("readingActivityService")
public class ReadingActivityServiceImpl implements ReadingActivityService {
@Autowired
private ReadingActivityBiz readingActivityBiz;
@Override
@PostMapping("sendInviteMsg")
@ParamLog("定时任务发邀请语")
public void sendInviteMsg(@RequestBody @ApiParam Map<String, Object> map) {
Long activityId = JSON.parseObject(JSON.toJSONString(map.get("activityId")), new TypeReference<Long>() {
});
if (null == activityId) {
return;
}
readingActivityBiz.sendQuartzMsg("invite", activityId);
}
@Override
@PostMapping("sendStartMsg")
@ParamLog("定时任务发开场语")
public void sendStartMsg(@RequestBody @ApiParam Map<String, Object> map) {
Long activityId = JSON.parseObject(JSON.toJSONString(map.get("activityId")), new TypeReference<Long>() {
});
if (null == activityId) {
return;
}
readingActivityBiz.sendQuartzMsg("start", activityId);
}
@Override
@PostMapping("sendEndMsg")
@ParamLog("定时任务发结束语")
public void sendEndMsg(@RequestBody @ApiParam Map<String, Object> map) {
Long activityId = JSON.parseObject(JSON.toJSONString(map.get("activityId")), new TypeReference<Long>() {
});
if (null == activityId) {
return;
}
readingActivityBiz.sendQuartzMsg("end", activityId);
}
@Override
@ParamLog("定时任务发打卡每日提醒")
@PostMapping("/sendClockRemind")
public void sendClockRemind(@RequestBody @ApiParam Map<String, Object> map) {
Long activityId = JSON.parseObject(JSON.toJSONString(map.get("activityId")), new TypeReference<Long>() {
});
if (null == activityId) {
return;
}
readingActivityBiz.sendClockRemind(activityId);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry
location="D:\maven\repository\mysql\mysql-connector-java\5.1.40\mysql-connector-java-5.1.40.jar"/>
<context id="my" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="false"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://192.168.92.41:3306/book" userId="root"
password="LGSC2016.lgsc"/>
<javaModelGenerator targetPackage="com.pcloud.book"
targetProject="D:\project\RAYS\pcloud-book\pcloud-service-book\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.pcloud.book"
targetProject="D:\project\RAYS\pcloud-book\pcloud-service-book\src\main\java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator targetPackage="com.pcloud.book"
targetProject="D:\project\RAYS\pcloud-book\pcloud-service-book\src\main\java" type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="book_group_collection" domainObjectName="BookGroupCollection"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
\ No newline at end of file
...@@ -139,4 +139,15 @@ ...@@ -139,4 +139,15 @@
LIMIT 1 LIMIT 1
</select> </select>
<!--根据id集合获取列表-->
<select id="getMapByIds" parameterType="map" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> from
advertising_brand
where
is_delete = 0
and id in
<foreach collection="brandIds" item="item" open="(" separator="," close=")">
${item}
</foreach>
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -1864,6 +1864,18 @@ ...@@ -1864,6 +1864,18 @@
<if test="adviserId!=null"> <if test="adviserId!=null">
AND a.ADVISER_ID = #{adviserId} AND a.ADVISER_ID = #{adviserId}
</if> </if>
<if test="graLabelId!=null">
and a.graLabel_id =#{graLabelId}
</if>
<if test="subLabelId!=null">
and a.subLabel_id =#{subLabelId}
</if>
<if test="verLabelId!=null">
and a.verLabel_id =#{verLabelId}
</if>
<if test="areaLabelId!=null">
and a.areaLabel_id =#{areaLabelId}
</if>
ORDER BY ORDER BY
g.create_time DESC g.create_time DESC
</select> </select>
......
...@@ -546,4 +546,85 @@ ...@@ -546,4 +546,85 @@
alt_id alt_id
</select> </select>
<!--只查个人号1.0版本读者-->
<select id="listUser4ReadingActivity" parameterType="map" resultType="com.pcloud.book.group.vo.UserBookInfoVO">
SELECT
s.wx_user_id wxUserId,
s.alt_id altId
FROM
book_group_cipher_user s
JOIN (
SELECT
MAX(u.id) uid
FROM
book_group_cipher_user u
LEFT JOIN book_group g ON u.book_group_id = g.id
WHERE
g.join_group_type = 3
<if test="bookIds != null and bookIds.size>0">
AND g.book_id IN
<foreach collection="bookIds" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="wxUserIds != null and wxUserIds.size>0">
AND u.wx_user_id IN
<foreach collection="wxUserIds" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="robotId != null">
AND u.alt_id = #{robotId}
</if>
<if test="invitedFilter != null and invitedFilter == 1">
AND u.wx_user_id NOT IN
(SELECT DISTINCT wx_user_id FROM reading_user)
</if>
GROUP BY
u.wx_user_id
) AS a ON s.id = a.uid
GROUP BY
s.wx_user_id
ORDER BY
s.create_time DESC,
s.id DESC
<if test="pageNum>=0 and numPerPage>0">
LIMIT #{pageNum}, #{numPerPage}
</if>
</select>
<select id="getScanBookInfoByUserNew" parameterType="map" resultType="com.pcloud.book.group.vo.UserBookInfoItemVO">
SELECT
u.book_group_id bookGroupId,
b.BOOK_NAME bookName,
a.GRA_LABEL_ID graLabelId,
a.SUB_LABEL_ID subLabelId,
a.VER_LABEL_ID verLabelId,
a.AREA_LABEL_ID areaLabelId
FROM
book_group_cipher_user u
LEFT JOIN book_group g ON u.book_group_id = g.id
LEFT JOIN book b ON g.book_id = b.BOOK_ID
LEFT JOIN book_adviser a ON g.book_id = a.BOOK_ID
AND g.create_user = a.ADVISER_ID
AND g.channel_id = a.CHANNEL_ID
WHERE
u.wx_user_id = #{wxUserId}
AND u.alt_id = #{altId}
AND a.GRA_LABEL_ID >0
GROUP BY
u.book_group_id
ORDER BY
g.id DESC
</select>
<select id="getAltIdListByUserId" resultType="string" parameterType="string">
SELECT DISTINCT
alt_id
FROM
book_group_cipher_user
WHERE
wx_user_id = #{wxUserId}
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -26,6 +26,14 @@ ...@@ -26,6 +26,14 @@
create_user,create_time,update_time,is_delete,riddle_open create_user,create_time,update_time,is_delete,riddle_open
</sql> </sql>
<select id="getGroupUserNum" parameterType="string" resultMap="BaseResultMap">
select weixin_group_id, user_number FROM
book_group_qrcode where weixin_group_id in
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
<update id="updateGroupCount" parameterType="map"> <update id="updateGroupCount" parameterType="map">
update book_group_qrcode set user_number = #{userNumber} where weixin_group_id = #{weixinGroupId} update book_group_qrcode set user_number = #{userNumber} where weixin_group_id = #{weixinGroupId}
</update> </update>
......
<?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.reading.dao.impl.BookGroupCollectionDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.reading.entity.BookGroupCollection">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="amount" property="amount" jdbcType="DECIMAL"/>
<result column="status" property="status" jdbcType="BIT"/>
<result column="transfer_id" property="transferId" jdbcType="VARCHAR"/>
<result column="collection_robot_id" property="collectionRobotId" jdbcType="VARCHAR"/>
<result column="create_user" property="createUser" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_user" property="updateUser" jdbcType="VARCHAR"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id, amount, status, transfer_id, collection_robot_id, create_user, create_time, update_user,
update_time
</sql>
<select id="getById" resultMap="BaseResultMap" parameterType="java.lang.Integer">
select
<include refid="Base_Column_List"/>
from book_group_collection
where id = #{id,jdbcType=INTEGER}
</select>
<select id="getByTransferId"
resultType="com.pcloud.book.reading.entity.BookGroupCollection">
select
<include refid="Base_Column_List"/>
from book_group_collection
where transfer_id = #{transferId,jdbcType=VARCHAR}
</select>
<delete id="deleteById" parameterType="java.lang.Integer">
delete from book_group_collection
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.pcloud.book.reading.entity.BookGroupCollection">
insert into book_group_collection (id, amount, status,
transfer_id, collection_robot_id, create_user,
create_time, update_user, update_time
)
values (#{id,jdbcType=INTEGER}, #{amount,jdbcType=DECIMAL}, #{status,jdbcType=BIT},
#{transferId,jdbcType=VARCHAR}, #{collectionRobotId,jdbcType=VARCHAR}, #{createUser,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}
)
</insert>
<update id="update"
parameterType="com.pcloud.book.reading.entity.BookGroupCollection">
update book_group_collection
<set>
<if test="amount != null">
amount = #{amount,jdbcType=DECIMAL},
</if>
<if test="status != null">
status = #{status,jdbcType=BIT},
</if>
<if test="transferId != null">
transfer_id = #{transferId,jdbcType=VARCHAR},
</if>
<if test="collectionRobotId != null">
collection_robot_id = #{collectionRobotId,jdbcType=VARCHAR},
</if>
<if test="createUser != null">
create_user = #{createUser,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateUser != null">
update_user = #{updateUser,jdbcType=VARCHAR},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
\ No newline at end of file
<?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.reading.dao.impl.ReadingActivityDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.reading.entity.ReadingActivity" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="theme" property="theme" jdbcType="VARCHAR" />
<result column="brand_id" property="brandId" jdbcType="BIGINT" />
<result column="join_condition" property="joinCondition" jdbcType="TINYINT" />
<result column="join_keyword" property="joinKeyword" jdbcType="VARCHAR" />
<result column="join_amount" property="joinAmount" jdbcType="DECIMAL" />
<result column="join_type" property="joinType" jdbcType="TINYINT" />
<result column="join_qrcode_pic" property="joinQrcodePic" jdbcType="VARCHAR" />
<result column="rule_type" property="ruleType" jdbcType="TINYINT" />
<result column="rule" property="rule" jdbcType="VARCHAR" />
<result column="rule_resource_id" property="ruleResourceId" jdbcType="VARCHAR" />
<result column="start_time" property="startTime" jdbcType="TIMESTAMP" />
<result column="start_slogan_type" property="startSloganType" jdbcType="TINYINT" />
<result column="start_slogan" property="startSlogan" jdbcType="VARCHAR" />
<result column="start_resource_id" property="startResourceId" jdbcType="VARCHAR" />
<result column="end_time" property="endTime" jdbcType="TIMESTAMP" />
<result column="end_slogan_type" property="endSloganType" jdbcType="TINYINT" />
<result column="end_slogan" property="endSlogan" jdbcType="VARCHAR" />
<result column="end_resource_id" property="endResourceId" jdbcType="VARCHAR" />
<result column="riddle_open" property="riddleOpen" jdbcType="BIT" />
<result column="award_open" property="awardOpen" jdbcType="BIT" />
<result column="award_text" property="awardText" jdbcType="VARCHAR" />
<result column="award_pic" property="awardPic" jdbcType="VARCHAR" />
<result column="clock_open" property="clockOpen" jdbcType="BIT" />
<result column="clock_remind_time" property="clockRemindTime" jdbcType="VARCHAR" />
<result column="clock_remind_content" property="clockRemindContent" jdbcType="VARCHAR" />
<result column="clock_link" property="clockLink" jdbcType="VARCHAR" />
<result column="clock_serve_id" property="clockServeId" jdbcType="BIGINT" />
<result column="clock_serve_type" property="clockServeType" jdbcType="VARCHAR" />
<result column="clock_result_open" property="clockResultOpen" jdbcType="BIT" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<resultMap id="BaseDTOResultMap" type="com.pcloud.book.reading.dto.ReadingActivityDTO" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="theme" property="theme" jdbcType="VARCHAR" />
<result column="brand_id" property="brandId" jdbcType="BIGINT" />
<result column="join_condition" property="joinCondition" jdbcType="TINYINT" />
<result column="join_keyword" property="joinKeyword" jdbcType="VARCHAR" />
<result column="join_amount" property="joinAmount" jdbcType="DECIMAL" />
<result column="join_type" property="joinType" jdbcType="TINYINT" />
<result column="join_qrcode_pic" property="joinQrcodePic" jdbcType="VARCHAR" />
<result column="rule_type" property="ruleType" jdbcType="TINYINT" />
<result column="rule" property="rule" jdbcType="VARCHAR" />
<result column="rule_resource_id" property="ruleResourceId" jdbcType="VARCHAR" />
<result column="start_time" property="startTime" jdbcType="TIMESTAMP" />
<result column="start_slogan_type" property="startSloganType" jdbcType="TINYINT" />
<result column="start_slogan" property="startSlogan" jdbcType="VARCHAR" />
<result column="start_resource_id" property="startResourceId" jdbcType="VARCHAR" />
<result column="end_time" property="endTime" jdbcType="TIMESTAMP" />
<result column="end_slogan_type" property="endSloganType" jdbcType="TINYINT" />
<result column="end_slogan" property="endSlogan" jdbcType="VARCHAR" />
<result column="end_resource_id" property="endResourceId" jdbcType="VARCHAR" />
<result column="riddle_open" property="riddleOpen" jdbcType="BIT" />
<result column="award_open" property="awardOpen" jdbcType="BIT" />
<result column="award_text" property="awardText" jdbcType="VARCHAR" />
<result column="award_pic" property="awardPic" jdbcType="VARCHAR" />
<result column="clock_open" property="clockOpen" jdbcType="BIT" />
<result column="clock_remind_time" property="clockRemindTime" jdbcType="VARCHAR" />
<result column="clock_remind_content" property="clockRemindContent" jdbcType="VARCHAR" />
<result column="clock_link" property="clockLink" jdbcType="VARCHAR" />
<result column="clock_serve_id" property="clockServeId" jdbcType="BIGINT" />
<result column="clock_serve_type" property="clockServeType" jdbcType="VARCHAR" />
<result column="clock_result_open" property="clockResultOpen" jdbcType="BIT" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, theme, brand_id, join_condition, join_keyword, join_amount, join_type, join_qrcode_pic,
rule_type, rule, rule_resource_id, start_time, start_slogan_type, start_slogan, start_resource_id, end_time, end_slogan_type,
end_slogan,end_resource_id, riddle_open, award_open, award_text, award_pic, clock_open, clock_remind_time, clock_remind_content,
clock_link, clock_serve_id, clock_serve_type, clock_result_open, create_time, create_user, update_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.reading.entity.ReadingActivity" useGeneratedKeys="true" keyProperty="id">
insert into reading_activity (theme, brand_id,
join_condition, join_keyword, join_amount,
join_type, join_qrcode_pic, rule_type,
rule, rule_resource_id, start_time, start_slogan_type,
start_slogan, start_resource_id, end_time, end_slogan_type,
end_slogan, end_resource_id, riddle_open, award_open,
award_text, award_pic,
clock_open, clock_remind_time, clock_remind_content,
clock_link, clock_serve_id, clock_serve_type, clock_result_open,
create_time, create_user, update_time
)
values (#{theme,jdbcType=VARCHAR}, #{brandId,jdbcType=BIGINT},
#{joinCondition,jdbcType=TINYINT}, #{joinKeyword,jdbcType=VARCHAR}, #{joinAmount,jdbcType=DECIMAL},
#{joinType,jdbcType=TINYINT}, #{joinQrcodePic,jdbcType=VARCHAR}, #{ruleType,jdbcType=TINYINT},
#{rule,jdbcType=VARCHAR}, #{ruleResourceId}, #{startTime,jdbcType=TIMESTAMP}, #{startSloganType,jdbcType=TINYINT},
#{startSlogan,jdbcType=VARCHAR}, #{startResourceId}, #{endTime,jdbcType=TIMESTAMP}, #{endSloganType,jdbcType=TINYINT},
#{endSlogan,jdbcType=VARCHAR}, #{endResourceId}, #{riddleOpen,jdbcType=BIT}, #{awardOpen,jdbcType=BIT},
#{awardText,jdbcType=VARCHAR}, #{awardPic,jdbcType=VARCHAR},
#{clockOpen,jdbcType=BIT}, #{clockRemindTime,jdbcType=VARCHAR}, #{clockRemindContent,jdbcType=VARCHAR},
#{clockLink,jdbcType=VARCHAR}, #{clockServeId,jdbcType=BIGINT}, #{clockServeType,jdbcType=VARCHAR},
#{clockResultOpen,jdbcType=BIT}, NOW(), #{createUser,jdbcType=BIGINT}, NOW()
)
</insert>
<select id="getByTheme" parameterType="string" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM reading_activity
WHERE theme = #{theme,jdbcType=VARCHAR} order by id desc limit 1
</select>
<select id="getById" parameterType="long" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM reading_activity
WHERE id = #{id}
</select>
<update id="updateAdditionSetting" parameterType="com.pcloud.book.reading.entity.ReadingActivity" >
update reading_activity
set
riddle_open = #{riddleOpen,jdbcType=BIT},
award_open = #{awardOpen,jdbcType=BIT},
award_text = #{awardText,jdbcType=VARCHAR},
award_pic = #{awardPic,jdbcType=VARCHAR},
clock_open = #{clockOpen,jdbcType=BIT},
clock_remind_time = #{clockRemindTime,jdbcType=VARCHAR},
clock_remind_content = #{clockRemindContent,jdbcType=VARCHAR},
clock_link = #{clockLink,jdbcType=VARCHAR},
clock_serve_id = #{clockServeId,jdbcType=BIGINT},
clock_serve_type = #{clockServeType,jdbcType=VARCHAR},
clock_result_open = #{clockResultOpen,jdbcType=BIT},
update_time = NOW()
where id = #{id,jdbcType=BIGINT}
</update>
<!--获取列表-->
<select id="getList" parameterType="map" resultMap="BaseDTOResultMap">
select <include refid="Base_Column_List"/>
from reading_activity
order by create_time desc
</select>
<select id="themeExist" parameterType="string" resultType="boolean">
SELECT
EXISTS (
SELECT
id
FROM
reading_activity
WHERE
theme = #{theme}
)
</select>
<update id="update" parameterType="com.pcloud.book.reading.entity.ReadingActivity" >
update reading_activity
<set >
<if test="theme != null" >
theme = #{theme,jdbcType=VARCHAR},
</if>
<if test="ruleType != null" >
rule_type = #{ruleType,jdbcType=TINYINT},
</if>
<if test="rule != null" >
rule = #{rule,jdbcType=VARCHAR},
</if>
<if test="ruleResourceId != null" >
rule_resource_id = #{ruleResourceId,jdbcType=VARCHAR},
</if>
<if test="startTime != null" >
start_time = #{startTime,jdbcType=TIMESTAMP},
</if>
<if test="startSloganType != null" >
start_slogan_type = #{startSloganType,jdbcType=TINYINT},
</if>
<if test="startSlogan != null" >
start_slogan = #{startSlogan,jdbcType=VARCHAR},
</if>
<if test="startResourceId != null" >
start_resource_id = #{startResourceId,jdbcType=VARCHAR},
</if>
<if test="endTime != null" >
end_time = #{endTime,jdbcType=TIMESTAMP},
</if>
<if test="endSloganType != null" >
end_slogan_type = #{endSloganType,jdbcType=TINYINT},
</if>
<if test="endSlogan != null" >
end_slogan = #{endSlogan,jdbcType=VARCHAR},
</if>
<if test="endResourceId != null" >
end_resource_id = #{endResourceId,jdbcType=VARCHAR},
</if>
update_time = NOW(),
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<select id="getByThemeAndJoinCondition" parameterType="map" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM reading_activity
WHERE theme = #{theme}
and join_condition =#{joinCondition}
order by id desc limit 1
</select>
<select id="getJoinActivityByKeyword" resultMap="BaseResultMap" parameterType="map">
SELECT
<include refid="Base_Column_List"/>
FROM
reading_activity
WHERE
join_condition = 2
AND join_keyword = #{joinKeyword}
AND id IN (
SELECT
activity_id
FROM
reading_user
WHERE
wx_user_id = #{wxUserId}
AND alt_id = #{altId}
)
AND (end_time IS NULL OR end_time > CURRENT_TIME)
ORDER BY
create_time DESC
LIMIT 1
</select>
</mapper>
\ No newline at end of file
<?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.reading.dao.impl.ReadingGroupCreateDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.reading.entity.ReadingGroupCreate" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="wx_group_id" property="wxGroupId" jdbcType="VARCHAR" />
<result column="master_id" property="masterId" jdbcType="VARCHAR" />
<result column="use_state" property="useState" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, wx_group_id, master_id, use_state, create_time, update_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.reading.entity.ReadingGroupCreate" useGeneratedKeys="true" keyProperty="id">
insert into reading_group_create (wx_group_id, master_id,
use_state, create_time
)
values (#{wxGroupId,jdbcType=VARCHAR}, #{masterId,jdbcType=VARCHAR},
#{useState}, NOW()
)
</insert>
<update id="updateStateByWxGroupId" parameterType="map">
UPDATE reading_group_create
SET use_state = #{useState},
update_time = NOW()
WHERE wx_group_id = #{wxGroupId}
</update>
</mapper>
\ No newline at end of file
<?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.reading.dao.impl.ReadingGroupDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.reading.entity.ReadingGroup" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="wx_group_id" property="wxGroupId" jdbcType="VARCHAR" />
<result column="wx_group_name" property="wxGroupName" jdbcType="VARCHAR" />
<result column="activity_id" property="activityId" jdbcType="BIGINT" />
<result column="create_user" property="createUser" 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, wx_group_id, wx_group_name, activity_id, create_user, create_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.reading.entity.ReadingGroup" useGeneratedKeys="true" keyProperty="id">
insert into reading_group (wx_group_id, wx_group_name,
activity_id, create_user, create_time
)
values (#{wxGroupId,jdbcType=VARCHAR}, #{wxGroupName,jdbcType=VARCHAR},
#{activityId,jdbcType=BIGINT}, #{createUser,jdbcType=BIGINT}, NOW()
)
</insert>
<select id="getByActivityId" parameterType="long" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM reading_group
WHERE activity_id = #{activityId}
AND wx_group_id IS NOT NULL
</select>
<select id="getByWxGroupId" parameterType="string" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM reading_group
WHERE wx_group_id = #{wxGroupId}
</select>
<update id="updateWxGroupIdById" parameterType="map">
UPDATE reading_group
SET wx_group_id = #{wxGroupId},
update_time = NOW()
WHERE id = #{id}
</update>
<select id="getById" parameterType="long" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM reading_group
WHERE id = #{id}
</select>
<select id="getLatestNullGroup" resultMap="BaseResultMap" parameterType="string">
SELECT
<include refid="Base_Column_List"/>
FROM
reading_group
WHERE
wx_group_id IS NULL
AND id IN (
SELECT DISTINCT
group_id
FROM
reading_group_robot
WHERE
alt_id = #{altId}
)
ORDER BY
id DESC
LIMIT 1
</select>
<select id="getAllByActivityId" parameterType="long" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM reading_group
WHERE activity_id = #{activityId}
</select>
<update id="updateGroupName" parameterType="map">
UPDATE reading_group
SET wx_group_name = #{wxGroupName}
WHERE
id = #{id}
</update>
</mapper>
\ No newline at end of file
<?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.reading.dao.impl.ReadingGroupRobotDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.reading.entity.ReadingGroupRobot" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="wx_group_id" property="wxGroupId" jdbcType="VARCHAR" />
<result column="alt_id" property="altId" jdbcType="VARCHAR" />
<result column="group_id" property="groupId" jdbcType="BIGINT" />
<result column="is_master" property="isMaster" jdbcType="BIT" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, wx_group_id, alt_id, group_id, is_master, create_time
</sql>
<insert id="batchInsert" useGeneratedKeys="true" parameterType="java.util.List">
insert into reading_group_robot (wx_group_id, alt_id,
group_id, is_master, create_time
)
values
<foreach collection="list" item="item" index="index" separator="," >
( #{item.wxGroupId,jdbcType=VARCHAR}, #{item.altId,jdbcType=VARCHAR},
#{item.groupId}, #{item.isMaster,jdbcType=BIT}, NOW()
)
</foreach>
</insert>
<update id="updateWxGroupByGroupId" parameterType="map">
UPDATE reading_group_robot
SET wx_group_id = #{wxGroupId},
update_time = NOW()
WHERE group_id = #{groupId}
</update>
<update id="setMaster" parameterType="map">
UPDATE reading_group_robot
SET is_master = 1, update_time = NOW()
WHERE group_id = #{groupId}
AND alt_id = #{altId}
</update>
<select id="getMasterRobotByWxGroupId" parameterType="string" resultType="string">
SELECT
alt_id
FROM
reading_group_robot
WHERE
wx_group_id = #{wxGroupId}
AND is_master = 1
LIMIT 1
</select>
<select id="getGroupIdsByCount" parameterType="integer" resultType="long">
SELECT
group_id
FROM
reading_group_robot
WHERE
wx_group_id IS NULL
GROUP BY
group_id
HAVING
COUNT(1) = #{count}
ORDER BY
create_time DESC
</select>
<select id="groupExist" parameterType="map" resultType="boolean">
SELECT EXISTS(
SELECT
id
FROM
reading_group_robot
WHERE
group_id = #{groupId}
AND wx_group_id IS NULL
AND alt_id IN
<foreach collection="altIds" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
)
</select>
<select id="getByActivityId" parameterType="long" resultMap="BaseResultMap">
SELECT
r.id, r.wx_group_id, r.alt_id, r.group_id, r.is_master, r.create_time
FROM
reading_group_robot r
LEFT JOIN reading_group g ON r.group_id = g.id
WHERE
g.activity_id = #{activityId}
AND r.wx_group_id IS NOT NULL
</select>
<select id="getByGroupId" parameterType="long" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM
reading_group_robot
WHERE
group_id = #{groupId}
</select>
</mapper>
\ No newline at end of file
<?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.reading.dao.impl.ReadingInviteDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.reading.entity.ReadingInvite" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="activity_id" property="activityId" jdbcType="BIGINT" />
<result column="invite_time" property="inviteTime" jdbcType="TIMESTAMP" />
<result column="invite_type" property="inviteType" jdbcType="BIT" />
<result column="invite_content" property="inviteContent" jdbcType="VARCHAR" />
<result column="invite_resource_id" property="inviteResourceId" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
</resultMap>
<sql id="Base_Column_List" >
id, activity_id, invite_time, invite_type, invite_content, invite_resource_id, create_time, create_user
</sql>
<insert id="batchInsert" useGeneratedKeys="true" parameterType="java.util.List">
insert into reading_invite (activity_id, invite_time,
invite_type, invite_content, invite_resource_id, create_time,
create_user)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.activityId,jdbcType=BIGINT}, #{item.inviteTime,jdbcType=TIMESTAMP},
#{item.inviteType,jdbcType=BIT}, #{item.inviteContent,jdbcType=VARCHAR}, #{item.inviteResourceId}, NOW(),
#{item.createUser,jdbcType=BIGINT})
</foreach>
</insert>
<select id="getByActivityId" parameterType="long" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM reading_invite
WHERE activity_id = #{activityId}
</select>
<delete id="deleteByActivityId" parameterType="long">
DELETE
FROM reading_invite
WHERE activity_id = #{activityId}
</delete>
</mapper>
\ No newline at end of file
<?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.reading.dao.impl.ReadingUserDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.reading.entity.ReadingUser" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="activity_id" property="activityId" jdbcType="BIGINT" />
<result column="wx_user_id" property="wxUserId" jdbcType="VARCHAR" />
<result column="alt_id" property="altId" jdbcType="VARCHAR" />
<result column="join_state" property="joinState" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
</resultMap>
<sql id="Base_Column_List" >
id, activity_id, wx_user_id, alt_id, join_state, create_time, create_user
</sql>
<insert id="batchInsert" useGeneratedKeys="true" parameterType="java.util.List">
insert into reading_user (activity_id, wx_user_id, alt_id, join_state,
create_time, create_user)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.activityId,jdbcType=BIGINT}, #{item.wxUserId,jdbcType=VARCHAR}, #{item.altId,jdbcType=VARCHAR},0,
NOW(), #{item.createUser,jdbcType=BIGINT})
</foreach>
</insert>
<select id="getByActivityId" resultMap="BaseResultMap" parameterType="map">
SELECT <include refid="Base_Column_List"/>
FROM reading_user
WHERE activity_id = #{activityId}
<if test="joinState != null">
AND join_state = #{joinState}
</if>
</select>
<update id="updateJoinState" parameterType="map">
UPDATE reading_user
SET join_state = #{joinState}
where wx_user_id = #{wxUserId} and activity_id = #{activityId}
</update>
<!--根据活动id集合获取活动人数-->
<select id="getUserCountsByActivityIds" parameterType="map" resultType="com.pcloud.book.reading.dto.ActivityUserCountDTO">
SELECT
t.activity_id activityId,
COUNT(1) `count`
FROM
reading_user t
where activity_id in
<foreach collection="activityIds" item="item" open="(" separator="," close=")">
${item}
</foreach>
GROUP BY
t.activity_id
</select>
<select id="getWxUserIdByActivityIds" parameterType="map" resultType="string">
SELECT DISTINCT
wx_user_id
FROM
reading_user
WHERE
1=1
<if test="activityIds != null and activityIds.size>0">
AND activity_id IN
<foreach collection="activityIds" item="item" open="(" separator="," close=")">
${item}
</foreach>
</if>
</select>
<!--批量获取活动读者书籍-->
<select id="getBooksByActivityIds" parameterType="map" resultType="com.pcloud.book.reading.dto.ActivityUserBookDTO">
SELECT
t.activity_id activityId,
t3.BOOK_ID bookId,
t3.BOOK_NAME bookName
FROM
reading_user t
INNER JOIN book_group_cipher_user t1 ON t.wx_user_id = t1.wx_user_id
INNER JOIN book_group t2 ON t1.book_group_id = t2.id
AND t2.is_delete = 0
INNER JOIN book t3 ON t2.book_id = t3.BOOK_ID
AND t3.IS_DELETE = 0
WHERE
t.activity_id IN
<foreach collection="activityIds" item="item" open="(" separator="," close=")">
${item}
</foreach>
GROUP BY
t.activity_id,
t3.BOOK_ID
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment