修改代码逻辑

master
bynt 6 months ago
parent f4e601a867
commit b2197404a3

@ -25,7 +25,7 @@
<dependency>
<groupId>com.baiye</groupId>
<artifactId>marketing-platform-starter-websocket</artifactId>
<artifactId>admin-websocket</artifactId>
<version>${revision}</version>
</dependency>

@ -0,0 +1,64 @@
package com.baiye.Task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.WeChatRequestConstants;
import com.baiye.modules.distribute.entity.LoginEquipment;
import com.baiye.modules.distribute.service.LoginEquipmentService;
import com.baiye.system.properties.WeChatProperties;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* @author Enzo
* @date : 2024/4/10
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class AccountTask {
private final WeChatProperties weChatProperties;
private final LoginEquipmentService loginEquipmentService;
/**
* 线
*/
@Scheduled(cron = "0 0 1 * * ? ")
public void updateAccountMassNum() {
List<Integer> arrayList = Lists.newArrayList();
List<LoginEquipment> equipmentList =
loginEquipmentService.findExpiredAccount();
if (CollUtil.isNotEmpty(equipmentList)) {
for (LoginEquipment equipment : equipmentList) {
DateTime dateTime = DateUtil.offsetDay
(equipment.getExpirationTime(), DefaultNumberConstants.FIFTEEN_NUMBER);
if (dateTime.before(DateUtil.date())) {
arrayList.add(equipment.getRobotId());
}
}
if (CollUtil.isNotEmpty(arrayList)) {
Map<String, Object> map = Maps.newHashMap();
map.put("robotIds", arrayList);
String result = HttpUtil.post
(weChatProperties.getGatewayHost().concat(WeChatRequestConstants.ROBOT_LOGOUT)
.concat(weChatProperties.getAppKey()), map);
log.info("========== the response as {} ==========", result);
}
}
}
}

@ -13,6 +13,13 @@ public interface WeChatRequestConstants {
*/
String GET_QR_CODE = "/api/qrCodeLogin/";
/**
* 线
*/
String ROBOT_LOGOUT = "/api/batchLogout/";
/**
@ -27,6 +34,11 @@ public interface WeChatRequestConstants {
*/
String GET_PUSH_LOGIN = "/api/pushLogin/";
/**
*
*/
String GET_ROBOT_TYPE = "/api/syncRobot/";
/**
@ -76,7 +88,7 @@ public interface WeChatRequestConstants {
/**
*
*/
String WE_CHAT_ADD_FRIEND = "/wechat/v1/addfriends";
String WE_CHAT_ADD_FRIEND = "/api/add-now-friend-phone/";
/**

@ -3,10 +3,7 @@ package com.baiye.modules.distribute.controller;
import com.baiye.domain.PageParam;
import com.baiye.domain.PageResult;
import com.baiye.modules.distribute.qo.AccountQo;
import com.baiye.modules.distribute.qo.PayOrderQo;
import com.baiye.modules.distribute.service.LoginEquipmentService;
import com.baiye.modules.distribute.vo.AddFriendVo;
import com.baiye.modules.distribute.vo.PayOrderVO;
import com.baiye.modules.distribute.vo.WeChatAccountVO;
import com.baiye.result.R;
import io.swagger.v3.oas.annotations.Operation;

@ -5,9 +5,11 @@ import com.baiye.domain.PageResult;
import com.baiye.modules.distribute.dto.CreateCodeDTO;
import com.baiye.modules.distribute.dto.PushCodeDTO;
import com.baiye.modules.distribute.dto.WeChatAddFriendDTO;
import com.baiye.modules.distribute.dto.WeChatStatisticsDTO;
import com.baiye.modules.distribute.qo.AccountQo;
import com.baiye.modules.distribute.service.WeChatService;
import com.baiye.modules.distribute.service.WechatFriendService;
import com.baiye.modules.distribute.vo.AccountStatisticsVO;
import com.baiye.modules.distribute.vo.AddFriendVo;
import com.baiye.modules.distribute.vo.StatisticsFriendVO;
import com.baiye.modules.distribute.vo.WeChatAccountVO;
@ -15,10 +17,12 @@ import com.baiye.result.R;
import com.baiye.security.util.SecurityUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
@ -86,18 +90,31 @@ public class WeChatController {
@GetMapping("/query/friend")
@Operation(summary = "统计粉丝记录")
@Operation(summary = "时间统计统计粉丝记录")
public R<List<StatisticsFriendVO>> getDateBy(Integer queryType) {
return R.ok(wechatFriendService.statisticsFriendByType(queryType));
}
@GetMapping("/query/user/statistics")
@Operation(summary = "统计用户数量")
public R<AddFriendVo> getDateBy(List<Long> userIdList) {
return R.ok(wechatFriendService.statisticsFriendByUserId(userIdList));
@PostMapping("/query/user/statistics")
@Operation(summary = "统计用户加粉数量")
public R<PageResult<AddFriendVo>> getDateBy(@RequestBody WeChatStatisticsDTO statisticsDTO) {
return R.ok(wechatFriendService.statisticsFriendByUserId(statisticsDTO));
}
@GetMapping("/query/account/statistics")
@Operation(summary = "统计账号信息数量")
public R<AccountStatisticsVO> accountStatistics() {
return R.ok(weChatService.statisticsAccountByUserId(SecurityUtils.getCurrentUserId()));
}
@GetMapping("/update/remark")
@Operation(summary = "修改备注")
public R<Boolean> accountStatistics(String wxId, String remark) {
return R.ok(weChatService.updateRemarkByWechatId(wxId, remark));
}
}

@ -9,7 +9,7 @@ import lombok.Data;
@Data
public class PushCodeDTO {
private String robotId;
private Integer robotId;
private String wxId;

@ -0,0 +1,29 @@
package com.baiye.modules.distribute.dto;
import lombok.Data;
/**
* @author Enzo
* @date : 2024/4/10
*/
@Data
public class WeChatAccountDTO {
private String account;
private String wxid;
private String nickname;
private String smallHeadImgUrl;
private String pit;
private String wxVersion;
private String province;
private Integer status;
}

@ -1,7 +1,6 @@
package com.baiye.modules.distribute.dto;
import lombok.Data;
import lombok.NonNull;
import lombok.*;
/**
* @author Enzo
@ -11,22 +10,30 @@ import lombok.NonNull;
public class WeChatAddFriendDTO {
@NonNull
private String wechat;
private String robotWxId;
@NonNull
private Integer type;
@NonNull
private String tagetWxId;
private AddFriendDTO addData;
@NonNull
private String helloContent;
/**
*
*/
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
public static class AddFriendDTO {
private String scene;
private String addKey;
private String content;
}
@NonNull
private String appKey;
@NonNull
private String appSecret;
}

@ -33,7 +33,7 @@ public class WeChatFriendDTO {
@Schema(title = "微信ID")
private String alias;
private String friendId;
@Schema(title = "头像")
private String bigHeadImgUrl;

@ -0,0 +1,25 @@
package com.baiye.modules.distribute.dto;
import lombok.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
/**
* @author Enzo
* @date : 2022/6/27
*/
@Data
public class WeChatStatisticsDTO {
private List<String> weChatIdList;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
}

@ -35,6 +35,9 @@ public class LoginEquipment extends BaseEntity {
@Schema(name = "pit")
private String pit;
@Schema(name = "package_type")
private Integer packageType;
@Schema(name = "robot_id")
private Integer robotId;

@ -26,9 +26,9 @@ import java.util.Date;
@TableName(value = "tb_wechat_account")
public class WeChatAccount extends LogicDeletedBaseEntity {
@TableId(type = IdType.AUTO)
@TableId(type = IdType.INPUT)
@Schema(title = "id")
@NotNull(message = "微信ID", groups = {UpdateGroup.class})
@NotNull(message = "id", groups = {UpdateGroup.class})
private Long id;
@Schema(title = "用户id")
@ -61,8 +61,6 @@ public class WeChatAccount extends LogicDeletedBaseEntity {
@Schema(name = "性别")
private Integer sex;
@Schema(name = "拥有者")
private Long ownerId;
@Schema(title = "在线状态")
private Integer status;

@ -1,6 +1,7 @@
package com.baiye.modules.distribute.entity;
import com.baiye.extend.mybatis.plus.alias.TableAlias;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
@ -21,7 +22,7 @@ import java.io.Serializable;
public class WeChatEquipment implements Serializable {
@TableId
@TableId(type = IdType.AUTO)
private Long id;
/**
@ -34,6 +35,7 @@ public class WeChatEquipment implements Serializable {
* Code
*/
@Schema(title = "设备id")
private String equipmentId;
private Long equipmentId;
}

@ -44,7 +44,7 @@ public class WeChatFriedRecord implements Serializable {
@Schema(title = "微信ID")
private String alias;
private String friendId;
@Schema(title = "头像")
private String bigHeadImgUrl;

@ -1,5 +1,7 @@
package com.baiye.modules.distribute.mapper;
import cn.hutool.core.date.DateTime;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.domain.PageParam;
import com.baiye.domain.PageResult;
import com.baiye.extend.mybatis.plus.conditions.query.LambdaQueryWrapperX;
@ -25,7 +27,6 @@ import java.util.List;
public interface LoginEquipmentMapper extends ExtendMapper<LoginEquipment> {
default PageResult<WeChatAccountVO> queryPage(PageParam pageParam, AccountQo qo) {
IPage<WeChatAccountVO> page = this.prodPage(pageParam);
@ -33,13 +34,25 @@ public interface LoginEquipmentMapper extends ExtendMapper<LoginEquipment> {
if (StringUtils.isNotBlank(qo.getStartTime()) && StringUtils.isNotBlank(qo.getEndTime())) {
wrapperX.between(WeChatAccount::getCreateTime, qo.getStartTime(), qo.getEndTime());
}
wrapperX.likeIfPresent(WeChatAccount::getUsername, qo.getUsername()).eqIfPresent(WeChatAccount::getUserId, qo.getUserId());
this.selectByPage(page, qo.getStartTime(), qo.getEndTime(), qo.getUsername(), qo.getUserId());
wrapperX.likeIfPresent(WeChatAccount::getNickname, qo.getNickname()).likeIfPresent
(WeChatAccount::getWxId, qo.getWxId()).eqIfPresent(WeChatAccount::getUserId, qo.getUserId()).likeIfPresent(WeChatAccount::getWxId, qo.getWxId());
this.selectByPage(page, qo.getStartTime(), qo.getEndTime(), qo.getNickname(), qo.getWxId(), qo.getUserId());
return new PageResult<>(page.getRecords(), page.getTotal());
}
/**
*
*
* @param page
* @param startTime
* @param endTime
* @param username
* @param wxId
* @param userId
* @return
*/
IPage<WeChatAccountVO> selectByPage(IPage<WeChatAccountVO> page,
@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("username") String username,@Param("userId") Long userId);
@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("username") String username, @Param("wxId") String wxId, @Param("userId") Long userId);
/**
@ -50,5 +63,46 @@ public interface LoginEquipmentMapper extends ExtendMapper<LoginEquipment> {
* @param wxId
* @return
*/
List<WeChatAddFriendVo> queryByDate(@Param("dayNum") Integer dayNum,@Param("userId") Long currentUserId, @Param("wxId") String wxId);
List<WeChatAddFriendVo> queryByDate(@Param("dayNum") Integer dayNum, @Param("userId") Long currentUserId, @Param("wxId") String wxId);
/**
* ID
*
* @param currentUserId
* @return
*/
List<WeChatAccountVO> queryByUserId(Long currentUserId);
/**
*
*
* @param currentUserId
* @param number
* @return
*/
default Long countFreeEquipment(Long currentUserId, Integer number) {
return this.selectCount
(WrappersX.lambdaQueryX(LoginEquipment.class).eq
(LoginEquipment::getUserId, currentUserId).eq(LoginEquipment::getPackageType, DefaultNumberConstants.TWO_NUMBER));
}
/**
*
*
* @param wxId
* @return
*/
List<WeChatAccountVO> findEquipmentByAccountId(@Param("wxId") String wxId);
/**
*
*
* @param date
* @return
*/
default List<LoginEquipment> selectListByTime(DateTime date) {
return this.selectList(WrappersX.lambdaQueryX(LoginEquipment.class).gt(LoginEquipment::getExpirationTime, date));
}
}

@ -9,9 +9,6 @@ import com.baiye.modules.distribute.converter.PayOrderConverter;
import com.baiye.modules.distribute.entity.PayOrder;
import com.baiye.modules.distribute.qo.PayOrderQo;
import com.baiye.modules.distribute.vo.PayOrderVO;
import com.baiye.notify.converter.UserAnnouncementConverter;
import com.baiye.notify.model.entity.UserAnnouncement;
import com.baiye.notify.model.vo.UserAnnouncementPageVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.apache.ibatis.annotations.Mapper;

@ -11,8 +11,11 @@ import com.baiye.modules.distribute.converter.WeChatAccountConverter;
import com.baiye.modules.distribute.entity.WeChatAccount;
import com.baiye.modules.distribute.qo.AccountQo;
import com.baiye.modules.distribute.vo.WeChatAccountVO;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -52,9 +55,37 @@ public interface WeChatAccountMapper extends ExtendMapper<WeChatAccount> {
if (StringUtils.isNotBlank(qo.getStartTime()) && StringUtils.isNotBlank(qo.getEndTime())) {
wrapperX.between(WeChatAccount::getCreateTime, qo.getStartTime(), qo.getEndTime());
}
wrapperX.likeIfPresent(WeChatAccount::getUsername, qo.getUsername()).eqIfPresent(WeChatAccount::getOwnerId, qo.getUserId()).orderByDesc(WeChatAccount::getId);
wrapperX.likeIfPresent(WeChatAccount::getNickname, qo.getNickname()).likeIfPresent(WeChatAccount::getWxId, qo.getWxId()).
eqIfPresent(WeChatAccount::getUserId, qo.getUserId()).orderByDesc(WeChatAccount::getId);
this.selectPage(page, wrapperX);
IPage<WeChatAccountVO> voPage = page.convert(WeChatAccountConverter.INSTANCE::entityToVo);
return new PageResult<>(voPage.getRecords(), voPage.getTotal());
}
/**
* ID
*
* @param currentUserId
* @return
*/
default List<WeChatAccount> queryByUserId(Long currentUserId) {
LambdaQueryWrapperX<WeChatAccount> wrapperX = WrappersX.lambdaQueryX(WeChatAccount.class);
return this.selectList(wrapperX.eq(WeChatAccount::getUserId, currentUserId));
}
/**
*
*
* @param wxId
* @param remark
* @return
*/
default Boolean updateRemark(String wxId, String remark) {
LambdaUpdateWrapper<WeChatAccount> wrapper = Wrappers.<WeChatAccount>lambdaUpdate()
.set(WeChatAccount::getRemark, remark)
.eq(WeChatAccount::getWxId, wxId)
.eq(WeChatAccount::getDeleted, DefaultNumberConstants.ZERO_NUMBER);
return SqlHelper.retBool(this.update(null, wrapper));
}
}

@ -0,0 +1,17 @@
package com.baiye.modules.distribute.mapper;
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
import com.baiye.modules.distribute.entity.WeChatEquipment;
import org.apache.ibatis.annotations.Mapper;
/**
* @author Enzo
* @date 2024-4-1
*/
@Mapper
public interface WeChatEquipmentMapper extends ExtendMapper<WeChatEquipment> {
}

@ -2,13 +2,14 @@ package com.baiye.modules.distribute.mapper;
import cn.hutool.core.date.DateTime;
import com.baiye.extend.mybatis.plus.mapper.ExtendMapper;
import com.baiye.extend.mybatis.plus.toolkit.WrappersX;
import com.baiye.modules.distribute.entity.WeChatFriedRecord;
import com.baiye.modules.distribute.vo.AddFriendVo;
import com.baiye.modules.distribute.vo.StatisticsFriendVO;
import com.baiye.modules.distribute.vo.WeChatAddFriendVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
@ -30,8 +31,34 @@ public interface WeChatFriendMapper extends ExtendMapper<WeChatFriedRecord> {
/**
*
* @param userIdList
*
* @param weChatIdList
* @param dayNum
* @param currentUserId
* @param startTime
* @param endTime
* @return
*/
List<WeChatAddFriendVo> queryByUserList(@Param("weChatIdList") List<String> weChatIdList,
@Param("dayNum") Long dayNum, @Param("userId") Long currentUserId,
@Param("startTime") Date startTime, @Param("endTime") Date endTime);
/**
* id
*
* @param currentUserId
* @return
*/
default Long queryByUserId(Long currentUserId) {
return this.selectCount(WrappersX.lambdaQueryX(WeChatFriedRecord.class).eq
(WeChatFriedRecord::getUserId, currentUserId));
}
/**
* id
* @param id
* @return
*/
List<WeChatAddFriendVo> queryByUserList(@Param("userIdList") List<Long> userIdList);
List<StatisticsFriendVO> findEquipmentByAccountId(Long id);
}

@ -19,12 +19,12 @@ public class AccountQo {
private String endTime;
@Parameter(description = "用户昵称")
private String username;
private String nickname;
@Schema(title = "用户ID")
private Long userId;
@Schema(title = "微信id")
private Long wxId;
private String wxId;
}

@ -49,4 +49,26 @@ public interface LoginEquipmentService extends ExtendService<LoginEquipment> {
* @return
*/
LoginEquipment queryByRobotId(Integer robotId);
/**
*
* @param currentUserId
* @return
*/
List<WeChatAccountVO> queryByUserId(Long currentUserId);
/**
*
* @param currentUserId
* @param number
* @return
*/
Long countFreeEquipment(Long currentUserId, Integer number);
/**
*
* @return
*/
List<LoginEquipment> findExpiredAccount();
}

@ -9,8 +9,8 @@ import com.baiye.modules.distribute.dto.WeChatAddFriendDTO;
import com.baiye.modules.distribute.dto.WeChatUserLoginDTO;
import com.baiye.modules.distribute.entity.WeChatAccount;
import com.baiye.modules.distribute.qo.AccountQo;
import com.baiye.modules.distribute.vo.AccountStatisticsVO;
import com.baiye.modules.distribute.vo.AddFriendVo;
import com.baiye.modules.distribute.vo.StatisticsFriendVO;
import com.baiye.modules.distribute.vo.WeChatAccountVO;
/**
@ -70,11 +70,14 @@ public interface WeChatService extends ExtendService<WeChatAccount> {
/**
*
*
* @param userLoginDTO
* @param status
* @param userId
* @param id
* @return
*/
Boolean weChatAccountLoginByRespon(WeChatUserLoginDTO userLoginDTO, Integer status);
Boolean weChatAccountLoginByRespon(WeChatUserLoginDTO userLoginDTO, Integer status, Long userId, Long id);
/**
@ -101,4 +104,15 @@ public interface WeChatService extends ExtendService<WeChatAccount> {
* @return
*/
WeChatAccount findByWxId(String robotWxId);
/**
*
* @param currentUserId
* @return
*/
AccountStatisticsVO statisticsAccountByUserId(Long currentUserId);
Boolean updateRemarkByWechatId(String wxId, String remark);
}

@ -1,11 +1,12 @@
package com.baiye.modules.distribute.service;
import com.baiye.domain.PageResult;
import com.baiye.extend.mybatis.plus.service.ExtendService;
import com.baiye.modules.distribute.dto.WeChatFriendDTO;
import com.baiye.modules.distribute.dto.WeChatStatisticsDTO;
import com.baiye.modules.distribute.entity.WeChatFriedRecord;
import com.baiye.modules.distribute.vo.AddFriendVo;
import com.baiye.modules.distribute.vo.StatisticsFriendVO;
import com.baiye.modules.distribute.vo.WeChatAddFriendVo;
import java.util.List;
@ -19,9 +20,8 @@ public interface WechatFriendService extends ExtendService<WeChatFriedRecord> {
*
*
* @param weChatFriendDTO
* @param userId
*/
void addFriendByResponse(WeChatFriendDTO weChatFriendDTO, Long userId);
void addFriendByResponse(WeChatFriendDTO weChatFriendDTO);
/**
*
@ -30,10 +30,20 @@ public interface WechatFriendService extends ExtendService<WeChatFriedRecord> {
*/
List<StatisticsFriendVO> statisticsFriendByType(Integer queryType);
/**
*
* @param currentUserId
* @return
*/
Long queryByUserId(Long currentUserId);
/**
*
* @param userIdList
*
* @param statisticsDTO
* @return
*/
AddFriendVo statisticsFriendByUserId(List<Long> userIdList);
PageResult<AddFriendVo> statisticsFriendByUserId(WeChatStatisticsDTO statisticsDTO);
}

@ -6,6 +6,7 @@ import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.util.ResponseChecker;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
@ -18,6 +19,7 @@ import com.baiye.modules.distribute.dto.AliPayPcDTO;
import com.baiye.modules.distribute.entity.PayOrder;
import com.baiye.modules.distribute.mapper.PayOrderMapper;
import com.baiye.modules.distribute.service.AliPayService;
import com.baiye.modules.distribute.service.LoginEquipmentService;
import com.baiye.modules.distribute.service.WeChatService;
import com.baiye.security.util.SecurityUtils;
import com.baiye.system.properties.AliPayProperties;
@ -59,6 +61,9 @@ public class AliPayServiceImpl extends ExtendServiceImpl<PayOrderMapper, PayOrde
private final WeChatService weChatService;
private final LoginEquipmentService loginEquipmentService;
@Override
@Transactional(rollbackFor = Exception.class)
public String pcNotifyResponse(HttpServletRequest request) {
@ -82,12 +87,12 @@ public class AliPayServiceImpl extends ExtendServiceImpl<PayOrderMapper, PayOrde
order.setPayTime(DateUtil.date());
order.setStatus(DefaultNumberConstants.ONE_NUMBER);
if (Boolean.TRUE.equals(order.getIsRenew())){
if (Boolean.TRUE.equals(order.getIsRenew())) {
// 创建设备
weChatService.createEquipment(order.getNum(), order.getPayType(), order.getUserId());
}
if (Boolean.TRUE.equals(order.getIsRenew())){
// 设备设备
if (Boolean.TRUE.equals(order.getIsRenew())) {
// 续费操作设备
weChatService.equipmentRenewal(order.getRobotId(), order.getPayType());
}
@ -120,16 +125,16 @@ public class AliPayServiceImpl extends ExtendServiceImpl<PayOrderMapper, PayOrde
}
@Override
@Transactional(rollbackFor = Exception.class)
public Map<String, Object> aliPayPc(AliPayPcDTO aliPayPcDTO) {
Map<String, Object> map = Maps.newHashMap();
Long userId = SecurityUtils.getCurrentUserId();
BigDecimal amount = new BigDecimal(DefaultNumberConstants.ZERO_NUMBER);
Integer num = aliPayPcDTO.getNum();
Integer robotId = aliPayPcDTO.getRobotId();
Boolean isRenew = aliPayPcDTO.getIsRenew();
Integer packageType = aliPayPcDTO.getPackageType();
if (packageType == DefaultNumberConstants.ONE_NUMBER) {
amount = new BigDecimal(DefaultNumberConstants.THIRTY);
}
// 结算金额
if (packageType == DefaultNumberConstants.TWO_NUMBER) {
// 九折
amount = NumberUtil.mul(NumberUtil.mul
@ -140,18 +145,33 @@ public class AliPayServiceImpl extends ExtendServiceImpl<PayOrderMapper, PayOrde
amount = NumberUtil.mul(NumberUtil.mul
(String.valueOf(DefaultNumberConstants.THIRTY), String.valueOf(DefaultNumberConstants.TWELVE_NUMBER)), 0.8);
}
// amount = NumberUtil.mul(amount, num);
amount = new BigDecimal("0.01");
amount = NumberUtil.mul(amount, num);
// amount = new BigDecimal("0.01");
// 雪花算法id
String orderNo = String.valueOf(IdUtil.getSnowflake(workerId, datacenterId).nextId());
// 创建订单
savePayOrder(num, isRenew, robotId, packageType, amount, orderNo);
if (packageType == DefaultNumberConstants.ONE_NUMBER) {
if (num > DefaultNumberConstants.THREE_NUMBER) {
throw new BadRequestException("至多创建三台免费设备!");
}
Long countFreeEquipment = loginEquipmentService.countFreeEquipment(userId, DefaultNumberConstants.ONE_NUMBER);
if (ObjectUtil.isNotNull(countFreeEquipment)
&& countFreeEquipment + num >= DefaultNumberConstants.THREE_NUMBER) {
throw new BadRequestException("至多创建三台免费设备!");
}
// 创建设备
weChatService.createEquipment(num, packageType, userId);
map.put("orderNo", orderNo);
return map;
}
// 查询记录
try {
// 雪花算法id
String orderNo = String.valueOf(IdUtil.getSnowflake(workerId, datacenterId).nextId());
// 生成返回对象
AlipayTradePagePayResponse response = Factory.Payment.Page().pay(PayConstants.PAY_TITLE + orderNo, orderNo, String.valueOf(amount), aliPay.getReturnUrl());
if (ResponseChecker.success(response)) {
boolean result = savePayOrder(num, isRenew, robotId, packageType, amount, orderNo);
log.info("============= the save order result {} =============", result);
map.put("payUrl", response.getBody());
map.put("orderNo", orderNo);
return map;
@ -172,7 +192,8 @@ public class AliPayServiceImpl extends ExtendServiceImpl<PayOrderMapper, PayOrde
order.setOrderNo(orderNo);
order.setPayType(packageType);
order.setUserId(SecurityUtils.getCurrentUserId());
order.setStatus(DefaultNumberConstants.ZERO_NUMBER);
order.setStatus(packageType > DefaultNumberConstants.ONE_NUMBER
? DefaultNumberConstants.ZERO_NUMBER : DefaultNumberConstants.ONE_NUMBER);
return this.save(order);
}

@ -1,21 +1,33 @@
package com.baiye.modules.distribute.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.WeChatRequestConstants;
import com.baiye.domain.PageParam;
import com.baiye.domain.PageResult;
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.baiye.extend.mybatis.plus.toolkit.WrappersX;
import com.baiye.modules.distribute.dto.WeChatAccountDTO;
import com.baiye.modules.distribute.entity.LoginEquipment;
import com.baiye.modules.distribute.mapper.LoginEquipmentMapper;
import com.baiye.modules.distribute.qo.AccountQo;
import com.baiye.modules.distribute.service.LoginEquipmentService;
import com.baiye.modules.distribute.vo.WeChatAccountVO;
import com.baiye.modules.distribute.vo.WeChatAddFriendVo;
import com.baiye.result.WeChatResponse;
import com.baiye.security.util.SecurityUtils;
import com.baiye.system.properties.WeChatProperties;
import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @author Enzo
@ -23,14 +35,31 @@ import java.util.List;
*/
@Service
@RequiredArgsConstructor
public class LoginEquipmentServiceImpl extends ExtendServiceImpl<LoginEquipmentMapper, LoginEquipment> implements
LoginEquipmentService {
private final WeChatProperties weChatProperties;
@Override
public PageResult<WeChatAccountVO> queryPage(PageParam pageParam, AccountQo qo) {
Map<String, Object> map = Maps.newHashMap();
qo.setUserId(SecurityUtils.getCurrentUserId());
return baseMapper.queryPage(pageParam, qo);
PageResult<WeChatAccountVO> queryPage = baseMapper.queryPage(pageParam, qo);
queryPage.getRecords().forEach(accountVO -> {
map.put("robotId", accountVO.getRobotId());
String robotResult = HttpUtil.get
(weChatProperties.getGatewayHost().concat(WeChatRequestConstants.GET_ROBOT_TYPE)
.concat(weChatProperties.getAppKey()), map);
WeChatResponse weChatResponse = JSONUtil.toBean(robotResult, WeChatResponse.class);
if (weChatResponse.getStatus() == HttpStatus.HTTP_OK) {
WeChatAccountDTO dto = BeanUtil.toBean(weChatResponse.getData(), WeChatAccountDTO.class);
if (ObjectUtil.isNotNull(dto)) {
accountVO.setCityInfo(dto.getProvince());
accountVO.setStatus(dto.getStatus());
}
}
});
return queryPage;
}
@Override
@ -50,7 +79,7 @@ public class LoginEquipmentServiceImpl extends ExtendServiceImpl<LoginEquipmentM
@Override
public LoginEquipment queryByRobotId(Integer robotId) {
LoginEquipment loginEquipment = baseMapper.selectOne
LoginEquipment loginEquipment = baseMapper.selectOne
(WrappersX.lambdaQueryX(LoginEquipment.class).eq(LoginEquipment::getRobotId, robotId));
if (ObjectUtil.isNotNull(loginEquipment) && ObjectUtil.isNotNull(loginEquipment.getUserId())) {
return loginEquipment;
@ -58,5 +87,20 @@ public class LoginEquipmentServiceImpl extends ExtendServiceImpl<LoginEquipmentM
return new LoginEquipment();
}
@Override
public List<WeChatAccountVO> queryByUserId(Long currentUserId) {
return baseMapper.queryByUserId(currentUserId);
}
@Override
public Long countFreeEquipment(Long currentUserId, Integer number) {
return baseMapper.countFreeEquipment(currentUserId, number);
}
@Override
public List<LoginEquipment> findExpiredAccount() {
return baseMapper.selectListByTime(DateUtil.date());
}
}

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import cn.hutool.http.HttpUtil;
@ -21,13 +22,15 @@ import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.baiye.modules.distribute.dto.*;
import com.baiye.modules.distribute.entity.LoginEquipment;
import com.baiye.modules.distribute.entity.WeChatAccount;
import com.baiye.modules.distribute.entity.WeChatEquipment;
import com.baiye.modules.distribute.mapper.WeChatAccountMapper;
import com.baiye.modules.distribute.mapper.WeChatEquipmentMapper;
import com.baiye.modules.distribute.qo.AccountQo;
import com.baiye.modules.distribute.service.LoginEquipmentService;
import com.baiye.modules.distribute.service.WeChatService;
import com.baiye.modules.distribute.service.WechatFriendService;
import com.baiye.modules.distribute.vo.AccountStatisticsVO;
import com.baiye.modules.distribute.vo.AddFriendVo;
import com.baiye.modules.distribute.vo.StatisticsFriendVO;
import com.baiye.modules.distribute.vo.WeChatAccountVO;
import com.baiye.modules.distribute.vo.WeChatAddFriendVo;
import com.baiye.result.WeChatResponse;
@ -35,11 +38,14 @@ import com.baiye.security.util.SecurityUtils;
import com.baiye.system.properties.WeChatProperties;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -54,12 +60,20 @@ import java.util.stream.Collectors;
public class WeChatServiceImpl extends ExtendServiceImpl<WeChatAccountMapper, WeChatAccount> implements WeChatService {
@Value("${snowflake.workerId}")
private int workerId;
@Value("${snowflake.datacenterId}")
private int datacenterId;
private final WeChatProperties weChatProperties;
private final WechatFriendService wechatFriendService;
private final LoginEquipmentService loginEquipmentService;
private final WeChatEquipmentMapper weChatEquipmentMapper;
@Override
public String createQrCode(CreateCodeDTO createCodeDTO) {
@ -106,14 +120,16 @@ public class WeChatServiceImpl extends ExtendServiceImpl<WeChatAccountMapper, We
Integer dayNum = PackageEnum.find(packageType);
if (dayNum > DefaultNumberConstants.ZERO_NUMBER) {
EquipmentDTO dto = BeanUtil.toBean(weChatResponse.getData(), EquipmentDTO.class);
DateTime dateTime = DateUtil.offsetDay(DateUtil.date(), dayNum);
DateTime dateTime = DateUtil.endOfDay(DateUtil.offsetDay(DateUtil.date(), dayNum));
for (EquipmentDTO.RoBotDTO botDTO : dto.getData()) {
// 创建账号
LoginEquipment equipment = new LoginEquipment();
equipment.setUserId(userId);
equipment.setExpirationTime(dateTime);
equipment.setRobotId(botDTO.getRobotId());
equipment.setDeviceNumber(botDTO.getRobotAccount());
equipment.setPit(botDTO.getRobotAccount());
equipment.setPackageType(DefaultNumberConstants.ONE_NUMBER);
// equipment.setDeviceNumber(botDTO.getRobotAccount());
loginEquipmentService.save(equipment);
}
}
@ -125,6 +141,13 @@ public class WeChatServiceImpl extends ExtendServiceImpl<WeChatAccountMapper, We
@Override
public String pushCode(PushCodeDTO pushCodeDTO) {
LoginEquipment loginEquipment = loginEquipmentService.queryByRobotId(pushCodeDTO.getRobotId());
if (ObjectUtil.isNotNull(loginEquipment) && ObjectUtil.isNotNull(loginEquipment.getExpirationTime())) {
if (loginEquipment.getExpirationTime().before(DateUtil.date())) {
throw new BadRequestException("当前设备已过期请续费后使用!");
}
}
Map<String, Object> beanToMap = BeanUtil.beanToMap(pushCodeDTO);
String pushQrCodeResult = HttpUtil.get
(weChatProperties.getGatewayHost().concat(WeChatRequestConstants.GET_PUSH_LOGIN)
@ -151,22 +174,25 @@ public class WeChatServiceImpl extends ExtendServiceImpl<WeChatAccountMapper, We
}
@Override
public Boolean weChatAccountLoginByRespon(WeChatUserLoginDTO userLoginDTO, Integer status) {
LoginEquipment loginEquipment = loginEquipmentService.queryByRobot(userLoginDTO.getPit());
if (ObjectUtil.isNotNull(loginEquipment) && ObjectUtil.isNotNull(loginEquipment.getId())) {
WeChatAccount byWxId = this.baseMapper.findByWxId(userLoginDTO.getWxId());
if (ObjectUtil.isNotNull(byWxId) && ObjectUtil.isNotNull(byWxId.getId())) {
byWxId = new WeChatAccount();
BeanUtil.copyProperties(userLoginDTO, byWxId);
byWxId.setHeaderUrl(userLoginDTO.getBigHeadImgUrl());
byWxId.setUserId(loginEquipment.getUserId());
return this.save(byWxId);
}
byWxId.setStatus(status == WechatCallbackConstant.LOGIN_SUCCESS ?
DefaultNumberConstants.ONE_NUMBER : DefaultNumberConstants.MINUS_ONE_NUMBER);
return this.updateById(byWxId);
public Boolean weChatAccountLoginByRespon(WeChatUserLoginDTO userLoginDTO, Integer status, Long userId, Long id) {
WeChatAccount byWxId = this.baseMapper.findByWxId(userLoginDTO.getWxId());
if (ObjectUtil.isNull(byWxId) || ObjectUtil.isNull(byWxId.getId())) {
Long saveId = IdUtil.getSnowflake(workerId, datacenterId).nextId();
WeChatEquipment equipment = new WeChatEquipment();
byWxId = new WeChatAccount();
BeanUtil.copyProperties(userLoginDTO, byWxId);
byWxId.setHeaderUrl(userLoginDTO.getBigHeadImgUrl());
byWxId.setId(saveId);
byWxId.setUserId(userId);
equipment.setEquipmentId(id);
equipment.setAccountId(saveId);
weChatEquipmentMapper.insert(equipment);
return this.save(byWxId);
}
return Boolean.FALSE;
BeanUtil.copyProperties(userLoginDTO, byWxId);
byWxId.setStatus(status == WechatCallbackConstant.LOGIN_SUCCESS ?
DefaultNumberConstants.ONE_NUMBER : DefaultNumberConstants.MINUS_ONE_NUMBER);
return this.updateById(byWxId);
}
@ -180,7 +206,7 @@ public class WeChatServiceImpl extends ExtendServiceImpl<WeChatAccountMapper, We
BeanUtil.copyProperties(vo, addFriendVo);
// 查询数据天数据
List<WeChatAddFriendVo> weChatAddFriendVos =
loginEquipmentService.queryByDate(DefaultNumberConstants.MINUS_FIFTEEN_NUMBER, SecurityUtils.getCurrentUserId(), vo.getWxId());
loginEquipmentService.queryByDate(DefaultNumberConstants.FIFTEEN_NUMBER, SecurityUtils.getCurrentUserId(), vo.getWxId());
// 转为map
Map<String, List<WeChatAddFriendVo>> map = weChatAddFriendVos.stream().collect
(Collectors.groupingBy(WeChatAddFriendVo::getDayStr));
@ -228,7 +254,7 @@ public class WeChatServiceImpl extends ExtendServiceImpl<WeChatAccountMapper, We
if (dayNum > DefaultNumberConstants.ZERO_NUMBER) {
LoginEquipment loginEquipment = loginEquipmentService.queryByRobotId(robotId);
if (ObjectUtil.isNotNull(loginEquipment) && ObjectUtil.isNotNull(loginEquipment.getId())) {
DateTime dateTime = DateUtil.offsetDay(loginEquipment.getExpirationTime(), dayNum);
DateTime dateTime = DateUtil.endOfDay(DateUtil.offsetDay(loginEquipment.getExpirationTime(), dayNum));
loginEquipment.setExpirationTime(dateTime);
return loginEquipmentService.updateById(loginEquipment);
}
@ -242,4 +268,42 @@ public class WeChatServiceImpl extends ExtendServiceImpl<WeChatAccountMapper, We
}
@Override
public AccountStatisticsVO statisticsAccountByUserId(Long currentUserId) {
List<String> onlineList = Lists.newArrayList();
AccountStatisticsVO vo = new AccountStatisticsVO();
List<WeChatAccountVO> weChatAccounts = loginEquipmentService.queryByUserId(currentUserId);
Long friendNum = wechatFriendService.queryByUserId(currentUserId);
Integer abnormalNum = DefaultNumberConstants.ZERO_NUMBER;
Integer onlineNum = DefaultNumberConstants.ZERO_NUMBER;
Map<String, Object> map = Maps.newHashMap();
for (WeChatAccountVO weChatAccount : weChatAccounts) {
map.put("robotId", weChatAccount.getRobotId());
String robotResult = HttpUtil.get
(weChatProperties.getGatewayHost().concat(WeChatRequestConstants.GET_ROBOT_TYPE)
.concat(weChatProperties.getAppKey()), map);
WeChatResponse weChatResponse = JSONUtil.toBean(robotResult, WeChatResponse.class);
if (weChatResponse.getStatus() == HttpStatus.HTTP_OK) {
WeChatAccountDTO dto = BeanUtil.toBean(weChatResponse.getData(), WeChatAccountDTO.class);
if (ObjectUtil.isNotNull(dto) &&
dto.getStatus() == DefaultNumberConstants.ONE_NUMBER
&& !onlineList.contains(dto.getPit())) {
onlineList.add(dto.getPit());
onlineNum += DefaultNumberConstants.ONE_NUMBER;
}
}
}
vo.setFriendNum(friendNum);
vo.setOnlineNum(onlineNum);
vo.setAbnormalNum(abnormalNum);
vo.setAccountNum(weChatAccounts.size());
return vo;
}
@Override
public Boolean updateRemarkByWechatId(String wxId, String remark) {
return this.baseMapper.updateRemark(wxId, remark);
}
}

@ -61,28 +61,31 @@ public class WechatCallbackServiceImpl implements WechatCallbackService {
}
}
private void viaFriendRequest(WeChatResponse weChatResponse) {
WeChatFriendDTO weChatFriendDTO =
JSONUtil.toBean(JSONUtil.toJsonStr(weChatResponse.getData()), WeChatFriendDTO.class);
WeChatAccount byWxId = weChatService.findByWxId(weChatFriendDTO.getRobotWxId());
if (ObjectUtil.isNotNull(byWxId) && ObjectUtil.isNotNull(byWxId.getId())) {
wechatFriendService.addFriendByResponse(weChatFriendDTO, byWxId.getUserId());
}
}
public void wechatLogin(WeChatResponse weChatResponse) {
WeChatUserLoginDTO userLoginDTO =
JSONUtil.toBean(JSONUtil.toJsonStr(weChatResponse.getData()), WeChatUserLoginDTO.class);
weChatService.weChatAccountLoginByRespon(userLoginDTO, weChatResponse.getStatus());
LoginEquipment robot = loginEquipmentService.queryByRobot(userLoginDTO.getPit());
AnnouncementNotifyInfo notifyInfo = new AnnouncementNotifyInfo();
notifyInfo.setTitle("新消息通知");
notifyInfo.setMessageKey(String.valueOf(robot.getId()));
notifyInfo.setContent("您有一条新线索请及时查收!");
notifyInfo.setCreateTime(LocalDateTime.now());
notifyInfo.setMessageType(DefaultNumberConstants.ONE_NUMBER);
// 发送消息
publisher.publishEvent(new StationNotifyPushEvent(notifyInfo, Collections.singletonList(robot.getUserId())));
if (ObjectUtil.isNotNull(robot) && ObjectUtil.isNotNull(robot.getUserId())) {
weChatService.weChatAccountLoginByRespon(userLoginDTO, weChatResponse.getStatus(), robot.getUserId(), robot.getId());
AnnouncementNotifyInfo notifyInfo = new AnnouncementNotifyInfo();
notifyInfo.setTitle("新消息通知");
notifyInfo.setMessageKey(String.valueOf(robot.getRobotId()));
notifyInfo.setContent("用户".concat(userLoginDTO.getNickname()).concat("登录成功"));
notifyInfo.setCreateTime(LocalDateTime.now());
notifyInfo.setMessageType(DefaultNumberConstants.ONE_NUMBER);
log.info("============ send message {} ==============", JSONUtil.toJsonStr(notifyInfo));
// 发送消息
publisher.publishEvent(new StationNotifyPushEvent(notifyInfo, Collections.singletonList(robot.getUserId())));
}
}
private void viaFriendRequest(WeChatResponse weChatResponse) {
WeChatFriendDTO weChatFriendDTO =
JSONUtil.toBean(JSONUtil.toJsonStr(weChatResponse.getData()), WeChatFriendDTO.class);
wechatFriendService.addFriendByResponse(weChatFriendDTO);
}
}

@ -4,16 +4,21 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.domain.PageResult;
import com.baiye.enums.StatisticsEnum;
import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import com.baiye.extend.mybatis.plus.toolkit.WrappersX;
import com.baiye.modules.distribute.dto.WeChatFriendDTO;
import com.baiye.modules.distribute.dto.WeChatStatisticsDTO;
import com.baiye.modules.distribute.entity.WeChatFriedRecord;
import com.baiye.modules.distribute.mapper.LoginEquipmentMapper;
import com.baiye.modules.distribute.mapper.WeChatFriendMapper;
import com.baiye.modules.distribute.service.WechatFriendService;
import com.baiye.modules.distribute.vo.AddFriendVo;
import com.baiye.modules.distribute.vo.StatisticsFriendVO;
import com.baiye.modules.distribute.vo.WeChatAccountVO;
import com.baiye.modules.distribute.vo.WeChatAddFriendVo;
import com.baiye.security.util.SecurityUtils;
import com.google.common.collect.Lists;
@ -21,7 +26,10 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Enzo
@ -34,17 +42,27 @@ public class WechatFriendServiceImpl extends ExtendServiceImpl
<WeChatFriendMapper, WeChatFriedRecord> implements WechatFriendService {
@Override
public void addFriendByResponse(WeChatFriendDTO weChatFriendDTO, Long userId) {
List<WeChatFriedRecord> weChatFriedRecords =
this.baseMapper.selectList(WrappersX.lambdaQueryX(WeChatFriedRecord.class).eq
(WeChatFriedRecord::getRobotWxId, weChatFriendDTO.getRobotWxId()).eq(WeChatFriedRecord::getAlias, weChatFriendDTO.getAlias()));
if (CollUtil.isEmpty(weChatFriedRecords)) {
WeChatFriedRecord weChatFriedRecord = new WeChatFriedRecord();
BeanUtil.copyProperties(weChatFriendDTO, weChatFriedRecord);
weChatFriedRecord.setUserId(userId);
this.baseMapper.insert(weChatFriedRecord);
private final LoginEquipmentMapper loginEquipmentMapper;
@Override
public void addFriendByResponse(WeChatFriendDTO weChatFriendDTO) {
List<WeChatAccountVO> voList = loginEquipmentMapper.findEquipmentByAccountId(weChatFriendDTO.getRobotWxId());
if (CollUtil.isNotEmpty(voList)) {
for (WeChatAccountVO vo : voList) {
if (ObjectUtil.isNotNull(vo.getExpirationTime()) && vo.getExpirationTime().after(DateUtil.date())) {
Long count = this.baseMapper.selectCount(WrappersX.lambdaQueryX(WeChatFriedRecord.class).eq
(WeChatFriedRecord::getRobotWxId, weChatFriendDTO.getRobotWxId()).eq(WeChatFriedRecord::getFriendId, weChatFriendDTO.getFriendId()));
if (count == DefaultNumberConstants.ZERO_NUMBER &&
vo.getWxId().equals(weChatFriendDTO.getRobotWxId())) {
WeChatFriedRecord weChatFriedRecord = new WeChatFriedRecord();
BeanUtil.copyProperties(weChatFriendDTO, weChatFriedRecord);
weChatFriedRecord.setUserId(vo.getUserId());
this.baseMapper.insert(weChatFriedRecord);
}
}
}
}
}
@ -60,9 +78,57 @@ public class WechatFriendServiceImpl extends ExtendServiceImpl
}
@Override
public AddFriendVo statisticsFriendByUserId(List<Long> userIdList) {
List<WeChatAddFriendVo> weChatAddFriendVos = baseMapper.queryByUserList(userIdList);
return new AddFriendVo();
public PageResult<AddFriendVo> statisticsFriendByUserId(WeChatStatisticsDTO statisticsDTO) {
Date endTime = statisticsDTO.getEndTime();
Date startTime = statisticsDTO.getStartTime();
List<String> weChatIdList = statisticsDTO.getWeChatIdList();
List<AddFriendVo> addFriendVos = Lists.newArrayList();
Long dayNum = DateUtil.betweenDay(startTime, endTime, Boolean.TRUE);
AddFriendVo addFriendVo = new AddFriendVo();
List<WeChatAddFriendVo> weChatAddFriendVos = baseMapper.queryByUserList(weChatIdList, dayNum, SecurityUtils.getCurrentUserId(), startTime, endTime);
// 转为map
Map<String, List<WeChatAddFriendVo>> map = weChatAddFriendVos.stream().collect
(Collectors.groupingBy(WeChatAddFriendVo::getDayStr));
Integer newFriendsInitiativeNum = DefaultNumberConstants.ZERO_NUMBER;
Integer newPassiveNum = DefaultNumberConstants.ZERO_NUMBER;
List<AddFriendVo.FriendDTO> newArrayList = Lists.newArrayList();
for (int i = 0; i <= dayNum; i++) {
// 时间格式
String dateTime = DateUtil.format(DateUtil.offsetDay(startTime, i), "MM-dd");
AddFriendVo.FriendDTO dto = new AddFriendVo.FriendDTO();
dto.setDayStr(dateTime);
if (map.containsKey(dateTime)) {
List<WeChatAddFriendVo> voList = map.get(dateTime);
Map<Integer, WeChatAddFriendVo> voMap =
voList.stream().collect(Collectors.toMap
(WeChatAddFriendVo::getAddFriendType, chatAddFriendVo -> chatAddFriendVo));
if (voMap.get(DefaultNumberConstants.ONE_NUMBER) != null) {
WeChatAddFriendVo weChatAddFriendVo = voMap.get(DefaultNumberConstants.ONE_NUMBER);
Integer num = weChatAddFriendVo.getNum();
newFriendsInitiativeNum += num;
dto.setNewDayFriendsInitiativeNum(num);
}
if (voMap.get(DefaultNumberConstants.TWO_NUMBER) != null) {
WeChatAddFriendVo weChatAddFriendVo = voMap.get(DefaultNumberConstants.TWO_NUMBER);
Integer num = weChatAddFriendVo.getNum();
newPassiveNum += num;
dto.setNewDayPassiveNum(num);
}
}
newArrayList.add(dto);
addFriendVo.setList(newArrayList);
}
addFriendVo.setNewFriendsInitiativeNum(newFriendsInitiativeNum);
addFriendVo.setNewPassiveNum(newPassiveNum);
addFriendVos.add(addFriendVo);
return new PageResult<>(addFriendVos, addFriendVos.size());
}
@Override
public Long queryByUserId(Long currentUserId) {
return this.baseMapper.queryByUserId(currentUserId);
}
}

@ -0,0 +1,22 @@
package com.baiye.modules.distribute.vo;
import lombok.Data;
/**
* @author Enzo
* @date : 2024/4/7
*/
@Data
public class AccountStatisticsVO {
private Integer accountNum;
private Long friendNum;
private Integer onlineNum;
private Integer abnormalNum;
}

@ -12,24 +12,24 @@ import java.util.List;
@Data
public class AddFriendVo {
private String wxId;
private Integer robotId;
private String username;
private String robotWxId;
private String nickname;
private String robotWxNick;
private String headerUrl;
private Integer newFriendsInitiativeNum;
private Integer newPassiveNum;
private List<FriendDTO> list;
private Integer newFriendsInitiativeNum;
/**
* list
*/

@ -73,7 +73,7 @@ public class WeChatAccountVO {
private String deviceNumber;
@Schema(title = "过期时间")
private LocalDateTime expirationTime;
private Date expirationTime;
}

@ -2,10 +2,10 @@ spring:
datasource:
url: jdbc:mysql://localhost:3306/marketing-platform?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: root
password: 7f2vvawx
password: CK8KyUngFSY
redis:
host: localhost
password: ''
password:
port: 6379
@ -28,8 +28,8 @@ alipay:
# 填支付宝公钥,注意不是生成的应用公钥
aliPayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyvegkGCrz1i5/K7VzQxvoZm4G73pSPNu9R5ET8YonIuDVoHkHaYvQQizLdRkTyBsYIik8FXsSDmVsw5MLMQ7OAlZ97nQBkz5TxOX6Px766nUpSVoWXoAz6cpIlWnwgir4t1ph88Ph56l+qmqW3gUj/U6MIuzjxBJlijTMHl96its95Nd4cEFx4j+sFuRYob6D0kcemC7xEFuty7bdupda51Z56GYI1YjuUTryTlFOHZbOSThc2ZMzNC1gPG25bn2Lx6sDuPByk4KW4rQ2v7mSfeUuZZRdjtVSC0WV2M2Cv5L8eLFvZRgNYnXrUJYhnRpT+OBAvJZXaWU2nv/bNe/UQIDAQAB
# 回调地址
notifyUrl: https://baiyee.vip/pay/aliPay/pay-notify
notifyUrl: https://count.byffp.top/pay/aliPay/pay-notify
# 支付宝成功支付跳转页面
returnUrl: https://baiyee.vip/dashboard
returnUrl: https://count.byffp.top/dashboard
# 可设置AES密钥调用AES加解密相关接口时需要可选
encryptKey:

@ -6,6 +6,9 @@ spring:
name: @artifactId@
profiles:
active: dev
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
# 天爱图形验证码

@ -14,6 +14,8 @@
wa.remark,
wa.create_time,
wa.update_time,
wa.user_id,
le.id,
le.robot_id,
le.device_number,
le.expiration_time
@ -31,6 +33,9 @@
<if test="username != null">
AND wa.username LIKE concat('%',#{username,jdbcType=VARCHAR},'%')
</if>
<if test="wxId != null">
AND wa.wx_id LIKE concat('%',#{wxId,jdbcType=VARCHAR},'%')
</if>
<if test="startTime != null">
and wa.create_time &gt;= #{startTime,jdbcType=TIMESTAMP}
</if>
@ -38,6 +43,7 @@
<if test="endTime != null">
and wa.create_time &lt;= #{endTime,jdbcType=TIMESTAMP}
</if>
order by le.id desc
</select>
<select id="queryByDate" resultType="com.baiye.modules.distribute.vo.WeChatAddFriendVo">
@ -49,4 +55,23 @@
GROUP BY dayStr, add_friend_type
ORDER BY dayStr
</select>
<select id="queryByUserId" resultType="com.baiye.modules.distribute.vo.WeChatAccountVO">
SELECT
<include refid="Base_Alias_Column_List"/>
FROM
tb_login_equipment le left join
tb_wechat_equipment we on we.equipment_id = le.id
LEFT join tb_wechat_account wa on wa.id = we.account_id
where le.user_id = #{userId}
</select>
<select id="findEquipmentByAccountId" resultType="com.baiye.modules.distribute.vo.WeChatAccountVO">
SELECT
<include refid="Base_Alias_Column_List"/>
FROM
tb_login_equipment le left join
tb_wechat_equipment we on we.equipment_id = le.id
LEFT join tb_wechat_account wa on wa.id = we.account_id
where wa.wx_id = #{wxId}
</select>
</mapper>

@ -16,19 +16,21 @@
</select>
<select id="queryByUserList" resultType="com.baiye.modules.distribute.vo.WeChatAddFriendVo">
SELECT DATE_FORMAT(create_time, '%m-%d') dayStr
, count(1) as num
, count(1) as num
, add_friend_type
FROM tb_wechat_friend
WHERE DATE_SUB(CURDATE(), INTERVAL #{dayNum} DAY) &lt;= date (create_time) and robot_wx_id = #{wxId} and user_id = #{userId}
GROUP BY dayStr, add_friend_type
ORDER BY dayStr
<if test="userIdList != null and userIdList.size() > 0">
user_id in
<foreach collection="userIdList" open="(" separator="," close=")" item="item">
WHERE DATE_SUB(CURDATE(), INTERVAL #{dayNum} DAY) &lt;= date (create_time)
and create_time &lt;= #{endTime}
and create_time &gt;= #{startTime}
and user_id = #{userId}
<if test="weChatIdList != null and weChatIdList.size() > 0">
and robot_wx_id in
<foreach collection="weChatIdList" open="(" separator="," close=")" item="item">
#{item}
</foreach>
</if>
GROUP BY dayStr, add_friend_type
ORDER BY dayStr
</select>
</mapper>

@ -65,7 +65,7 @@ public enum ResponseCode {
/**
*
*/
ALI_PAY_ERROR("1016", "支付宝支付失败"),
ALI_PAY_ERROR("1016", "创建订单失败"),
/**
*

@ -27,7 +27,7 @@ public enum StatisticsEnum {
/**
*
*/
THIRTY_DAYS(30, 2);
THIRTY_DAYS(3, 30);

@ -16,44 +16,43 @@ import java.util.Locale;
*/
public class EmptyCurlyToDefaultMessageInterpolator extends ResourceBundleMessageInterpolator {
private static final String EMPTY_CURLY_BRACES = "{}";
public EmptyCurlyToDefaultMessageInterpolator() {
}
public EmptyCurlyToDefaultMessageInterpolator(ResourceBundleLocator userResourceBundleLocator) {
super(userResourceBundleLocator);
}
@Override
public String interpolate(String message, Context context, Locale locale) {
// 如果包含花括号占位符
if (message.contains(EMPTY_CURLY_BRACES)) {
// 获取注解类型
Class<? extends Annotation> annotationType = context.getConstraintDescriptor()
.getAnnotation()
.annotationType();
Method messageMethod;
try {
messageMethod = annotationType.getDeclaredMethod("message");
}
catch (NoSuchMethodException e) {
return super.interpolate(message, context, locale);
}
// 找到对应 message 的默认值,将 {} 替换为默认值
if (messageMethod.getDefaultValue() != null) {
Object defaultValue = messageMethod.getDefaultValue();
if (defaultValue instanceof String) {
String defaultMessage = (String) defaultValue;
message = message.replace(EMPTY_CURLY_BRACES, defaultMessage);
}
}
}
return super.interpolate(message, context, locale);
}
private static final String EMPTY_CURLY_BRACES = "{}";
public EmptyCurlyToDefaultMessageInterpolator() {
}
public EmptyCurlyToDefaultMessageInterpolator(ResourceBundleLocator userResourceBundleLocator) {
super(userResourceBundleLocator);
}
@Override
public String interpolate(String message, Context context, Locale locale) {
// 如果包含花括号占位符
if (message.contains(EMPTY_CURLY_BRACES)) {
// 获取注解类型
Class<? extends Annotation> annotationType = context.getConstraintDescriptor()
.getAnnotation()
.annotationType();
Method messageMethod;
try {
messageMethod = annotationType.getDeclaredMethod("message");
} catch (NoSuchMethodException e) {
return super.interpolate(message, context, locale);
}
// 找到对应 message 的默认值,将 {} 替换为默认值
if (messageMethod.getDefaultValue() != null) {
Object defaultValue = messageMethod.getDefaultValue();
if (defaultValue instanceof String) {
String defaultMessage = (String) defaultValue;
message = message.replace(EMPTY_CURLY_BRACES, defaultMessage);
}
}
}
return super.interpolate(message, context, locale);
}
}

@ -16,33 +16,33 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
* @author housl
* @version 1.0
*/
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Target({METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Repeatable(OneOfClasses.List.class)
@Documented
@Constraint(validatedBy = { EnumValueValidatorOfClass.class })
@Constraint(validatedBy = {EnumValueValidatorOfClass.class})
public @interface OneOfClasses {
String message() default "value must match one of the values in the list: {value}";
String message() default "value must match one of the values in the list: {value}";
Class<?>[] value();
Class<?>[] value();
/**
* null,
*/
boolean allowNull() default false;
/**
* null,
*/
boolean allowNull() default false;
Class<?>[] groups() default {};
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
Class<? extends Payload>[] payload() default {};
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@interface List {
OneOfClasses[] value();
OneOfClasses[] value();
}
}
}

@ -45,5 +45,7 @@
<artifactId>spring-data-redis</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>

Loading…
Cancel
Save