diff --git a/admin/pom.xml b/admin/pom.xml
index 2c8d604..6e042bc 100644
--- a/admin/pom.xml
+++ b/admin/pom.xml
@@ -25,7 +25,7 @@
com.baiye
- marketing-platform-starter-websocket
+ admin-websocket
${revision}
diff --git a/admin/src/main/java/com/baiye/Task/AccountTask.java b/admin/src/main/java/com/baiye/Task/AccountTask.java
new file mode 100644
index 0000000..35002f3
--- /dev/null
+++ b/admin/src/main/java/com/baiye/Task/AccountTask.java
@@ -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 arrayList = Lists.newArrayList();
+ List 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 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);
+ }
+ }
+
+ }
+}
diff --git a/admin/src/main/java/com/baiye/constant/WeChatRequestConstants.java b/admin/src/main/java/com/baiye/constant/WeChatRequestConstants.java
index ab9a31f..0b77805 100644
--- a/admin/src/main/java/com/baiye/constant/WeChatRequestConstants.java
+++ b/admin/src/main/java/com/baiye/constant/WeChatRequestConstants.java
@@ -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/";
/**
diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/LoginEquipmentController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/LoginEquipmentController.java
index da819f6..62576eb 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/controller/LoginEquipmentController.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/controller/LoginEquipmentController.java
@@ -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;
diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/WeChatController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/WeChatController.java
index 3530de9..bb5bb6d 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/controller/WeChatController.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/controller/WeChatController.java
@@ -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> getDateBy(Integer queryType) {
return R.ok(wechatFriendService.statisticsFriendByType(queryType));
}
- @GetMapping("/query/user/statistics")
- @Operation(summary = "总统计用户数量")
- public R getDateBy(List userIdList) {
- return R.ok(wechatFriendService.statisticsFriendByUserId(userIdList));
+ @PostMapping("/query/user/statistics")
+ @Operation(summary = "统计用户加粉数量")
+ public R> getDateBy(@RequestBody WeChatStatisticsDTO statisticsDTO) {
+ return R.ok(wechatFriendService.statisticsFriendByUserId(statisticsDTO));
}
+ @GetMapping("/query/account/statistics")
+ @Operation(summary = "统计账号信息数量")
+ public R accountStatistics() {
+ return R.ok(weChatService.statisticsAccountByUserId(SecurityUtils.getCurrentUserId()));
+ }
+
+
+ @GetMapping("/update/remark")
+ @Operation(summary = "修改备注")
+ public R accountStatistics(String wxId, String remark) {
+ return R.ok(weChatService.updateRemarkByWechatId(wxId, remark));
+ }
+
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/PushCodeDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/PushCodeDTO.java
index 9ca7fda..3edfb2f 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/dto/PushCodeDTO.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/dto/PushCodeDTO.java
@@ -9,7 +9,7 @@ import lombok.Data;
@Data
public class PushCodeDTO {
- private String robotId;
+ private Integer robotId;
private String wxId;
diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAccountDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAccountDTO.java
new file mode 100644
index 0000000..e216871
--- /dev/null
+++ b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAccountDTO.java
@@ -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;
+
+
+}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAddFriendDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAddFriendDTO.java
index 862030f..0dfda76 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAddFriendDTO.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAddFriendDTO.java
@@ -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;
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatFriendDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatFriendDTO.java
index 19f01bf..6eca382 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatFriendDTO.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatFriendDTO.java
@@ -33,7 +33,7 @@ public class WeChatFriendDTO {
@Schema(title = "微信ID")
- private String alias;
+ private String friendId;
@Schema(title = "头像")
private String bigHeadImgUrl;
diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatStatisticsDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatStatisticsDTO.java
new file mode 100644
index 0000000..634d886
--- /dev/null
+++ b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatStatisticsDTO.java
@@ -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 weChatIdList;
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date startTime;
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime;
+
+
+}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/LoginEquipment.java b/admin/src/main/java/com/baiye/modules/distribute/entity/LoginEquipment.java
index f8a8f88..1b0aca8 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/entity/LoginEquipment.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/entity/LoginEquipment.java
@@ -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;
diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatAccount.java b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatAccount.java
index d72ac2f..5224517 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatAccount.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatAccount.java
@@ -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;
diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatEquipment.java b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatEquipment.java
index c930d33..cdac5fd 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatEquipment.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatEquipment.java
@@ -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;
+
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatFriedRecord.java b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatFriedRecord.java
index 593b39c..b0ed566 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatFriedRecord.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatFriedRecord.java
@@ -44,7 +44,7 @@ public class WeChatFriedRecord implements Serializable {
@Schema(title = "微信ID")
- private String alias;
+ private String friendId;
@Schema(title = "头像")
private String bigHeadImgUrl;
diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/LoginEquipmentMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/LoginEquipmentMapper.java
index 23310dd..34dd561 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/mapper/LoginEquipmentMapper.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/LoginEquipmentMapper.java
@@ -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 {
-
default PageResult queryPage(PageParam pageParam, AccountQo qo) {
IPage page = this.prodPage(pageParam);
@@ -33,13 +34,25 @@ public interface LoginEquipmentMapper extends ExtendMapper {
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 selectByPage(IPage 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 {
* @param wxId
* @return
*/
- List queryByDate(@Param("dayNum") Integer dayNum,@Param("userId") Long currentUserId, @Param("wxId") String wxId);
+ List queryByDate(@Param("dayNum") Integer dayNum, @Param("userId") Long currentUserId, @Param("wxId") String wxId);
+
+ /**
+ * 用户ID查询
+ *
+ * @param currentUserId
+ * @return
+ */
+ List 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 findEquipmentByAccountId(@Param("wxId") String wxId);
+
+ /**
+ * 时间查询设备
+ *
+ * @param date
+ * @return
+ */
+ default List selectListByTime(DateTime date) {
+ return this.selectList(WrappersX.lambdaQueryX(LoginEquipment.class).gt(LoginEquipment::getExpirationTime, date));
+ }
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/PayOrderMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/PayOrderMapper.java
index 8cd4063..0327015 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/mapper/PayOrderMapper.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/PayOrderMapper.java
@@ -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;
diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatAccountMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatAccountMapper.java
index b4c8676..0dbc2c2 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatAccountMapper.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatAccountMapper.java
@@ -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 {
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 voPage = page.convert(WeChatAccountConverter.INSTANCE::entityToVo);
return new PageResult<>(voPage.getRecords(), voPage.getTotal());
}
+
+ /**
+ * ID查询信息
+ *
+ * @param currentUserId
+ * @return
+ */
+ default List queryByUserId(Long currentUserId) {
+ LambdaQueryWrapperX 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 wrapper = Wrappers.lambdaUpdate()
+ .set(WeChatAccount::getRemark, remark)
+ .eq(WeChatAccount::getWxId, wxId)
+ .eq(WeChatAccount::getDeleted, DefaultNumberConstants.ZERO_NUMBER);
+ return SqlHelper.retBool(this.update(null, wrapper));
+ }
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatEquipmentMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatEquipmentMapper.java
new file mode 100644
index 0000000..0d11b1f
--- /dev/null
+++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatEquipmentMapper.java
@@ -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 {
+
+
+
+
+}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatFriendMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatFriendMapper.java
index 4340286..5db5262 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatFriendMapper.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatFriendMapper.java
@@ -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 {
/**
* 用户数据查询
- * @param userIdList
+ *
+ * @param weChatIdList
+ * @param dayNum
+ * @param currentUserId
+ * @param startTime
+ * @param endTime
+ * @return
+ */
+ List queryByUserList(@Param("weChatIdList") List 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 queryByUserList(@Param("userIdList") List userIdList);
+ List findEquipmentByAccountId(Long id);
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/qo/AccountQo.java b/admin/src/main/java/com/baiye/modules/distribute/qo/AccountQo.java
index e1565f6..09fbb8c 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/qo/AccountQo.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/qo/AccountQo.java
@@ -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;
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/LoginEquipmentService.java b/admin/src/main/java/com/baiye/modules/distribute/service/LoginEquipmentService.java
index de4a206..348f41d 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/service/LoginEquipmentService.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/service/LoginEquipmentService.java
@@ -49,4 +49,26 @@ public interface LoginEquipmentService extends ExtendService {
* @return
*/
LoginEquipment queryByRobotId(Integer robotId);
+
+ /**
+ * 用户查询账号
+ * @param currentUserId
+ * @return
+ */
+ List queryByUserId(Long currentUserId);
+
+ /**
+ * 判断免费设备有多少
+ * @param currentUserId
+ * @param number
+ * @return
+ */
+ Long countFreeEquipment(Long currentUserId, Integer number);
+
+
+ /**
+ * 查询已经过期的设备
+ * @return
+ */
+ List findExpiredAccount();
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/WeChatService.java b/admin/src/main/java/com/baiye/modules/distribute/service/WeChatService.java
index 1eb81f9..31eda54 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/service/WeChatService.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/service/WeChatService.java
@@ -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 {
/**
* 登录微信账号
+ *
* @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 {
* @return
*/
WeChatAccount findByWxId(String robotWxId);
+
+ /**
+ * 统计账号信息
+ * @param currentUserId
+ * @return
+ */
+ AccountStatisticsVO statisticsAccountByUserId(Long currentUserId);
+
+
+
+ Boolean updateRemarkByWechatId(String wxId, String remark);
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/WechatFriendService.java b/admin/src/main/java/com/baiye/modules/distribute/service/WechatFriendService.java
index 1b24471..f77ed1e 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/service/WechatFriendService.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/service/WechatFriendService.java
@@ -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 {
* 添加好友
*
* @param weChatFriendDTO
- * @param userId
*/
- void addFriendByResponse(WeChatFriendDTO weChatFriendDTO, Long userId);
+ void addFriendByResponse(WeChatFriendDTO weChatFriendDTO);
/**
* 根据类型查询数据
@@ -30,10 +30,20 @@ public interface WechatFriendService extends ExtendService {
*/
List statisticsFriendByType(Integer queryType);
+
+
+ /**
+ * 用户统计数量
+ * @param currentUserId
+ * @return
+ */
+ Long queryByUserId(Long currentUserId);
+
/**
* 统计数据
- * @param userIdList
+ *
+ * @param statisticsDTO
* @return
*/
- AddFriendVo statisticsFriendByUserId(List userIdList);
+ PageResult statisticsFriendByUserId(WeChatStatisticsDTO statisticsDTO);
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/AliPayServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/AliPayServiceImpl.java
index d2c60f6..4ba5ef6 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/AliPayServiceImpl.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/AliPayServiceImpl.java
@@ -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 aliPayPc(AliPayPcDTO aliPayPcDTO) {
Map 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 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 DefaultNumberConstants.ONE_NUMBER
+ ? DefaultNumberConstants.ZERO_NUMBER : DefaultNumberConstants.ONE_NUMBER);
return this.save(order);
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/LoginEquipmentServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/LoginEquipmentServiceImpl.java
index 87bbe80..ed04d1e 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/LoginEquipmentServiceImpl.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/LoginEquipmentServiceImpl.java
@@ -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 implements
LoginEquipmentService {
+ private final WeChatProperties weChatProperties;
+
@Override
public PageResult queryPage(PageParam pageParam, AccountQo qo) {
+ Map map = Maps.newHashMap();
qo.setUserId(SecurityUtils.getCurrentUserId());
- return baseMapper.queryPage(pageParam, qo);
+ PageResult 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 queryByUserId(Long currentUserId) {
+ return baseMapper.queryByUserId(currentUserId);
+ }
+
+ @Override
+ public Long countFreeEquipment(Long currentUserId, Integer number) {
+ return baseMapper.countFreeEquipment(currentUserId, number);
+ }
+
+ @Override
+ public List findExpiredAccount() {
+ return baseMapper.selectListByTime(DateUtil.date());
+ }
+
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WeChatServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WeChatServiceImpl.java
index 18732cf..d2ae443 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WeChatServiceImpl.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WeChatServiceImpl.java
@@ -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 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 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 beanToMap = BeanUtil.beanToMap(pushCodeDTO);
String pushQrCodeResult = HttpUtil.get
(weChatProperties.getGatewayHost().concat(WeChatRequestConstants.GET_PUSH_LOGIN)
@@ -151,22 +174,25 @@ public class WeChatServiceImpl extends ExtendServiceImpl weChatAddFriendVos =
- loginEquipmentService.queryByDate(DefaultNumberConstants.MINUS_FIFTEEN_NUMBER, SecurityUtils.getCurrentUserId(), vo.getWxId());
+ loginEquipmentService.queryByDate(DefaultNumberConstants.FIFTEEN_NUMBER, SecurityUtils.getCurrentUserId(), vo.getWxId());
// 转为map
Map> map = weChatAddFriendVos.stream().collect
(Collectors.groupingBy(WeChatAddFriendVo::getDayStr));
@@ -228,7 +254,7 @@ public class WeChatServiceImpl extends ExtendServiceImpl 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 onlineList = Lists.newArrayList();
+ AccountStatisticsVO vo = new AccountStatisticsVO();
+ List weChatAccounts = loginEquipmentService.queryByUserId(currentUserId);
+
+ Long friendNum = wechatFriendService.queryByUserId(currentUserId);
+ Integer abnormalNum = DefaultNumberConstants.ZERO_NUMBER;
+ Integer onlineNum = DefaultNumberConstants.ZERO_NUMBER;
+ Map 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);
+ }
+
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatCallbackServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatCallbackServiceImpl.java
index 3726cbe..5993de4 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatCallbackServiceImpl.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatCallbackServiceImpl.java
@@ -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);
}
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatFriendServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatFriendServiceImpl.java
index dd7c711..002ef78 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatFriendServiceImpl.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatFriendServiceImpl.java
@@ -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
implements WechatFriendService {
- @Override
- public void addFriendByResponse(WeChatFriendDTO weChatFriendDTO, Long userId) {
- List 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 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 userIdList) {
- List weChatAddFriendVos = baseMapper.queryByUserList(userIdList);
- return new AddFriendVo();
+ public PageResult statisticsFriendByUserId(WeChatStatisticsDTO statisticsDTO) {
+ Date endTime = statisticsDTO.getEndTime();
+ Date startTime = statisticsDTO.getStartTime();
+ List weChatIdList = statisticsDTO.getWeChatIdList();
+ List addFriendVos = Lists.newArrayList();
+ Long dayNum = DateUtil.betweenDay(startTime, endTime, Boolean.TRUE);
+ AddFriendVo addFriendVo = new AddFriendVo();
+ List weChatAddFriendVos = baseMapper.queryByUserList(weChatIdList, dayNum, SecurityUtils.getCurrentUserId(), startTime, endTime);
+
+ // 转为map
+ Map> map = weChatAddFriendVos.stream().collect
+ (Collectors.groupingBy(WeChatAddFriendVo::getDayStr));
+ Integer newFriendsInitiativeNum = DefaultNumberConstants.ZERO_NUMBER;
+ Integer newPassiveNum = DefaultNumberConstants.ZERO_NUMBER;
+ List 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 voList = map.get(dateTime);
+ Map 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);
}
+
}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/vo/AccountStatisticsVO.java b/admin/src/main/java/com/baiye/modules/distribute/vo/AccountStatisticsVO.java
new file mode 100644
index 0000000..2037309
--- /dev/null
+++ b/admin/src/main/java/com/baiye/modules/distribute/vo/AccountStatisticsVO.java
@@ -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;
+
+
+
+}
diff --git a/admin/src/main/java/com/baiye/modules/distribute/vo/AddFriendVo.java b/admin/src/main/java/com/baiye/modules/distribute/vo/AddFriendVo.java
index e97fcd6..b05d706 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/vo/AddFriendVo.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/vo/AddFriendVo.java
@@ -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 list;
+ private Integer newFriendsInitiativeNum;
+
/**
* list
*/
diff --git a/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAccountVO.java b/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAccountVO.java
index 00d1393..d5740dd 100644
--- a/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAccountVO.java
+++ b/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAccountVO.java
@@ -73,7 +73,7 @@ public class WeChatAccountVO {
private String deviceNumber;
@Schema(title = "过期时间")
- private LocalDateTime expirationTime;
+ private Date expirationTime;
}
diff --git a/admin/src/main/resources/application-prod.yml b/admin/src/main/resources/application-prod.yml
index 7bafbad..a2e3e95 100644
--- a/admin/src/main/resources/application-prod.yml
+++ b/admin/src/main/resources/application-prod.yml
@@ -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:
diff --git a/admin/src/main/resources/application.yml b/admin/src/main/resources/application.yml
index 26120d0..e05ade0 100644
--- a/admin/src/main/resources/application.yml
+++ b/admin/src/main/resources/application.yml
@@ -6,6 +6,9 @@ spring:
name: @artifactId@
profiles:
active: dev
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
# 天爱图形验证码
diff --git a/admin/src/main/resources/mapper/LoginEquipmentMapper.xml b/admin/src/main/resources/mapper/LoginEquipmentMapper.xml
index d086267..94ebddb 100644
--- a/admin/src/main/resources/mapper/LoginEquipmentMapper.xml
+++ b/admin/src/main/resources/mapper/LoginEquipmentMapper.xml
@@ -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 @@
AND wa.username LIKE concat('%',#{username,jdbcType=VARCHAR},'%')
+
+ AND wa.wx_id LIKE concat('%',#{wxId,jdbcType=VARCHAR},'%')
+
and wa.create_time >= #{startTime,jdbcType=TIMESTAMP}
@@ -38,6 +43,7 @@
and wa.create_time <= #{endTime,jdbcType=TIMESTAMP}
+ order by le.id desc
+
+
+
diff --git a/admin/src/main/resources/mapper/WeChatFriendMapper.xml b/admin/src/main/resources/mapper/WeChatFriendMapper.xml
index 78bc914..414333d 100644
--- a/admin/src/main/resources/mapper/WeChatFriendMapper.xml
+++ b/admin/src/main/resources/mapper/WeChatFriendMapper.xml
@@ -16,19 +16,21 @@
diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/constant/enums/ResponseCode.java b/marketing-platform-common/common-core/src/main/java/com/baiye/constant/enums/ResponseCode.java
index 2cfa4a5..93bd4cd 100644
--- a/marketing-platform-common/common-core/src/main/java/com/baiye/constant/enums/ResponseCode.java
+++ b/marketing-platform-common/common-core/src/main/java/com/baiye/constant/enums/ResponseCode.java
@@ -65,7 +65,7 @@ public enum ResponseCode {
/**
* 支付宝支付失败
*/
- ALI_PAY_ERROR("1016", "支付宝支付失败"),
+ ALI_PAY_ERROR("1016", "创建订单失败"),
/**
* 支付宝支付回调失败
diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/StatisticsEnum.java b/marketing-platform-common/common-core/src/main/java/com/baiye/enums/StatisticsEnum.java
index fbef78d..2c6fcb5 100644
--- a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/StatisticsEnum.java
+++ b/marketing-platform-common/common-core/src/main/java/com/baiye/enums/StatisticsEnum.java
@@ -27,7 +27,7 @@ public enum StatisticsEnum {
/**
* 三十日
*/
- THIRTY_DAYS(30, 2);
+ THIRTY_DAYS(3, 30);
diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/validation/EmptyCurlyToDefaultMessageInterpolator.java b/marketing-platform-common/common-core/src/main/java/com/baiye/validation/EmptyCurlyToDefaultMessageInterpolator.java
index 3a9818d..553cb81 100644
--- a/marketing-platform-common/common-core/src/main/java/com/baiye/validation/EmptyCurlyToDefaultMessageInterpolator.java
+++ b/marketing-platform-common/common-core/src/main/java/com/baiye/validation/EmptyCurlyToDefaultMessageInterpolator.java
@@ -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);
+ }
}
diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/validation/constraints/OneOfClasses.java b/marketing-platform-common/common-core/src/main/java/com/baiye/validation/constraints/OneOfClasses.java
index 70fcf46..ba5f9fc 100644
--- a/marketing-platform-common/common-core/src/main/java/com/baiye/validation/constraints/OneOfClasses.java
+++ b/marketing-platform-common/common-core/src/main/java/com/baiye/validation/constraints/OneOfClasses.java
@@ -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();
- }
+ }
}
diff --git a/marketing-platform-starters/marketing-platform-starter-websocket/pom.xml b/marketing-platform-starters/marketing-platform-starter-websocket/pom.xml
index 11073b3..d303696 100644
--- a/marketing-platform-starters/marketing-platform-starter-websocket/pom.xml
+++ b/marketing-platform-starters/marketing-platform-starter-websocket/pom.xml
@@ -45,5 +45,7 @@
spring-data-redis
true
+
+