企业微信添加好友功能

master
bynt 2 years ago
parent 986d0a264e
commit 94ba838fa1

@ -113,6 +113,11 @@
<artifactId>java-jwt</artifactId>
</dependency>
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
</dependency>
</dependencies>

@ -11,6 +11,11 @@ public class DefaultNumberConstants {
private DefaultNumberConstants() {
}
/**
* -3
*/
public static final int MINUS_THREE_NUMBER = -3;
/**
* -2
*/
@ -86,7 +91,6 @@ public class DefaultNumberConstants {
public static final int FOURTEEN_NUMBER = 14;
/**
* 15
*/
@ -120,11 +124,19 @@ public class DefaultNumberConstants {
* 100
*/
public static final double ONE_HUNDRED = 100;
/**
* 200
*/
public static final int TWO_HUNDRED = 200;
/**
* 201
*/
public static final int TWO_HUNDRED_ONE = 201;
/**
* 1005
*/

@ -1,6 +1,5 @@
package com.baiye.http;
import cn.hutool.http.HttpStatus;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Getter;

@ -0,0 +1,19 @@
package com.baiye.http;
import lombok.Data;
import java.io.Serializable;
/**
* @author Enzo
* @date : 2022/6/27
*/
@Data
public class WeChatParseResponse implements Serializable {
private static final long serialVersionUID = -4823173492909135229L;
private Integer status;
private String desc;
}

@ -10,7 +10,7 @@ import javax.persistence.Converter;
@Converter
public class JpaConverterAes implements AttributeConverter<Object, String> {
private final String secret = "ad-platform";
private final String secret = "by-we-chat";
@Override
public String convertToDatabaseColumn(Object obj) {

@ -0,0 +1,25 @@
package com.baiye.util;
import cn.hutool.extra.emoji.EmojiUtil;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
/**
* @author Enzo
* @date : 2022-7-1
*/
@Converter
public class JpaConverterUnicode implements AttributeConverter<Object, String> {
@Override
public String convertToDatabaseColumn(Object obj) {
return EmojiUtil.toAlias(obj.toString());
}
@Override
public Object convertToEntityAttribute(String s) {
return EmojiUtil.toUnicode(s);
}
}

@ -0,0 +1,51 @@
package com.baiye.model.dto;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.util.JpaConverterAes;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* @author Enzo
* @date : 2022/7/1
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class AddWeChatFriendRecordDTO implements Serializable {
private static final long serialVersionUID = 7818011288635567258L;
@ApiModelProperty("添加类型 1企业微信 2个人微信")
private Integer type;
@ApiModelProperty("登录用户id")
private Long userId;
@ApiModelProperty("线索id")
private Long clueId;
@ApiModelProperty("添加状态 0已添加 1已通过")
private Integer status;
@ApiModelProperty("机器人微信")
private String robotWeChat;
@ApiModelProperty("用户微信")
private String userWechat;
@ApiModelProperty("添加时间")
private Date addFriendTime;
}

@ -108,4 +108,14 @@ public class ClueDto implements Serializable {
@ApiModelProperty(value = "线索最新通话时间")
private Date newestCallTime;
@ApiModelProperty(value = "添加微信类型")
private Integer addWeChatType;
@ApiModelProperty(value = "添加微信时间")
private Date addWeChatTime;
@ApiModelProperty(value = "添加微信状态 -2已添加未通过 -1未添加 0已添加 1已通过 ")
private Integer addWeChatStatus;
}

@ -0,0 +1,17 @@
package com.baiye.model.dto;
import lombok.Data;
import java.util.Date;
/**
* @author Enzo
* @date : 2022/7/4
*/
@Data
public class TemplateUserDTO {
private Date endTime;
private Integer status;
private Boolean weChatFlag;
}

@ -81,5 +81,7 @@ public class UserDto extends BaseDTO implements Serializable {
private Boolean isReview;
private Integer onlineStatus;
private Boolean addWeChatFlag;
}

@ -1,19 +0,0 @@
package com.baiye.model.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author Enzo
* @date : 2022/6/24
*/
@Data
public class WeChatQrCodeDTO implements Serializable {
private static final long serialVersionUID = 5388401222056549488L;
private String wechat;
private String uuid;
}

@ -0,0 +1,30 @@
package com.baiye.model.dto.wechat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @author Enzo
* @date : 2022/6/27
*/
@Data
public class WeChatFriendDTO {
@NotNull
@ApiModelProperty(value = "添加类型 0-手机号 1-微信号")
private Integer type;
@ApiModelProperty(value = "微信号 type为1时传递")
private String tagetWxId;
@NotBlank
@ApiModelProperty(value = "线索id")
private String clueId;
@ApiModelProperty(value = "发送内容")
private String sendContent;
}

@ -0,0 +1,22 @@
package com.baiye.model.dto.wechat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author Enzo
* @date : 2022/6/24
*/
@Data
public class WeChatQrCodeDTO implements Serializable {
private static final long serialVersionUID = 5388401222056549488L;
@ApiModelProperty(value = "微信id,当传递此参数将登录在最近登录的设备上")
private String wechat;
@ApiModelProperty(value = "随机id传递此参数当二维码还没作废的时返回之前没用的二维码地址")
private String uuid;
}

@ -0,0 +1,60 @@
package com.baiye.model.dto.wechat;
import lombok.Data;
import java.io.Serializable;
/**
* @author Enzo
* @date : 2022/6/28
*/
@Data
public class WeChatUserLoginDTO implements Serializable {
private static final long serialVersionUID = -3405251435086857475L;
private String flag;
private Integer loginType;
private Boolean newDevice;
private String qrCodeKey;
private Boolean newWxLogin;
private String cusQrUuId;
private String wxid;
private String serverid;
private Boolean second;
private String token;
private Integer protoVer;
private String randomid;
private String wxdat;
private String softwareId;
private Integer sourceType;
private String qrCodeUrl;
private String host;
private String nickname;
private Integer strategy;
private String usercode;
private String account;
private String smallHeadImgUrl;
}

@ -120,6 +120,28 @@ public enum ResponseCode {
*
*/
FAILED_GET_QR_CODE("1028", "获取二维码失败"),
/**
*
*
*/
FAILED_GET_TEMPLATE("1029", "获取模板失败,请先配置发送模板"),
/**
*
*
*/
TEMPLATE_CHANGE_ERROR("1031", "发送消息至少配置一条!"),
/**
*
*/
FAILED_ADD_FRIEND("1032","添加好友失败!"),
/**
* 线
*/
ACCOUNT_NOT_LOGGED_OR_NOT_ONLINE("1030", "当前账户未登录或不在线"),
/**
*
*

@ -151,7 +151,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers( "/api/report/turnOn").permitAll()
.antMatchers( "/api/users/info/findById").permitAll()
.antMatchers( "/api/users/info/findIsReview").permitAll()
.antMatchers( "/api/wechat/**").permitAll()
.antMatchers( "/wechat/**").permitAll()
// 支付回调
.antMatchers( "/pay/aliPay/pay-notify").permitAll()
// 自定义匿名访问所有url放行允许匿名和带Token访问细腻化到每个 Request 类型

@ -0,0 +1,70 @@
package com.baiye.modules.system.domain;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.model.base.BaseEntity;
import com.baiye.util.JpaConverterAes;
import com.baiye.util.JpaConverterUnicode;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* @author Enzo
* @date : 2022/7/1
*/
@Getter
@Setter
@Entity
@Table(name = "tb_we_chat_friend_record")
@EntityListeners(AuditingEntityListener.class)
public class AddWeChatFriendRecord extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3045806596975568412L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ApiModelProperty("添加类型 1企业微信 2个人微信")
@Column(name = "type")
private Integer type;
@ApiModelProperty("登录用户id")
@Column(name = "user_Id")
private Long userId;
@ApiModelProperty("线索id")
@Column(name = "clue_id")
private Long clueId;
@ApiModelProperty("添加状态 0已添加 1已通过")
@Column(name = "status")
private Integer status = DefaultNumberConstants.ZERO_NUMBER;
@ApiModelProperty("机器人微信")
@Column(name = "robot_we_chat")
@Convert(converter = JpaConverterAes.class)
private String robotWeChat;
@ApiModelProperty("用户微信")
@Column(name = "user_we_chat")
@Convert(converter = JpaConverterAes.class)
private String userWechat;
@ApiModelProperty("发送内容")
@Convert(converter = JpaConverterUnicode.class)
@Column(name = "send_content")
private String sendContent;
@ApiModelProperty("好友通过时间")
@Column(name = "add_friend_time")
private Date addFriendTime;
}

@ -79,4 +79,8 @@ public class PayCombo implements Serializable {
@LastModifiedDate
private Date updateTime;
@Column(name = "we_chat_flag")
@ApiModelProperty(value = "微信添加权限")
private Boolean weChatFlag;
}

@ -121,6 +121,9 @@ public class User extends BaseEntity implements Serializable {
@Transient
private Long templateId;
@Transient
private String greetMessage;
@Override
public boolean equals(Object o) {
if (this == o) {

@ -7,6 +7,7 @@ import lombok.Setter;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
/**
* @author Enzo
@ -26,4 +27,42 @@ public class WeChatUser extends BaseEntity {
@ApiModelProperty(value = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Long userId;
@Column(name = "login_type")
@ApiModelProperty(value = "登录类型")
private Integer loginType;
@Column(name = "nickname")
@ApiModelProperty(value = "昵称")
private String nickname;
@Column(name = "login_date")
@ApiModelProperty(value = "登录时间")
private Date loginDate;
@Column(name = "small_head_img_url")
@ApiModelProperty(value = "头像")
private String smallHeadImgUrl;
@Column(name = "wx_id")
@ApiModelProperty(value = "微信号")
private String wxId;
@Column(name = "token")
@ApiModelProperty(value = "token")
private String token;
@Column(name = "random_id")
@ApiModelProperty(value = "随机id")
private String randomId;
}

@ -0,0 +1,70 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.domain;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.model.base.BaseEntity;
import com.baiye.util.JpaConverterUnicode;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @website https://el-admin.vip
* @description /
* @author Enzo
* @date 2022-07-01
**/
@Entity
@Data
@Table(name="tb_wechat_send_message")
public class WechatSendMessage extends BaseEntity implements Serializable {
private static final long serialVersionUID = -8886964419423069607L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@ApiModelProperty(value = "id")
private Long id;
@Column(name = "status")
@ApiModelProperty(value = "状态值")
private Integer status = DefaultNumberConstants.ONE_NUMBER;
@Column(name = "user_id")
@ApiModelProperty(value = "用户")
private Long userId;
@Column(name = "great_message")
@ApiModelProperty(value = "发送消息")
@Convert(converter = JpaConverterUnicode.class)
private String greatMessage;
@Column(name = "is_default")
@ApiModelProperty(value = "是否默认")
private Integer isDefault;
public void copy(WechatSendMessage source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

@ -0,0 +1,45 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.repository;
import com.baiye.modules.system.domain.AddWeChatFriendRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
/**
* @website https://el-admin.vip
* @author Enzo
* @date 2022-07-01
**/
public interface AddWeChatFriendRecordRepository extends JpaRepository<AddWeChatFriendRecord, Long>, JpaSpecificationExecutor<AddWeChatFriendRecord> {
/**
* 线id
* @param clueId
* @return
*/
AddWeChatFriendRecord findByClueId(Long clueId);
/**
*
* @param num
* @return
*/
List<AddWeChatFriendRecord> findByStatus(Integer num);
}

@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public interface PayComboUserRepository extends JpaRepository<PayComboUser, Long>, JpaSpecificationExecutor<PayComboUser> {
@ -30,4 +31,21 @@ public interface PayComboUserRepository extends JpaRepository<PayComboUser, Long
*/
@Query(value = "select * from tb_pay_combo_user where DATE_FORMAT( begin_time, '%Y-%m-%d') < ?1 AND DATE_FORMAT( end_time, '%Y-%m-%d') > ?1 ", nativeQuery = true)
List<PayComboUser> findByDay(String day);
/**
* id
* @param id
* @return
*/
@Query(value = "SELECT " +
" t.end_time," +
" c.`status`," +
" c.we_chat_flag " +
"FROM " +
" tb_pay_combo_user t," +
" tb_pay_combo c " +
" WHERE " +
" t.pay_combo_id = c.combo_id " +
" AND t.user_id = ?1", nativeQuery = true)
List<Map<String, Object>> findTemplateDTOByUserId(Long id);
}

@ -23,7 +23,15 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
* @author Zheng Jie
* @date 2018-11-22
*/
public interface WeChatRepository extends JpaRepository<WeChatUser, Long>, JpaSpecificationExecutor<WeChatUser> {
public interface WeChatUserRepository extends JpaRepository<WeChatUser, Long>, JpaSpecificationExecutor<WeChatUser> {
/**
* id
* @param userId
* @return
*/
WeChatUser findByUserId(Long userId);
}

@ -0,0 +1,68 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.repository;
import com.baiye.modules.system.domain.WechatSendMessage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
/**
* @website https://el-admin.vip
* @author Enzo
* @date 2022-07-01
**/
public interface WechatSendMessageRepository extends JpaRepository<WechatSendMessage, Long>, JpaSpecificationExecutor<WechatSendMessage> {
/**
* id
* @param userId
* @return
*/
@Query(value = "from WechatSendMessage where status = 1 and userId = ?1 order by isDefault desc")
List<WechatSendMessage> findByUserId(Long userId);
/**
*
* @param num
* @return
*/
WechatSendMessage findByIsDefault(Integer num);
/**
*
* @param changeValue
* @param originalValue
*/
@Modifying
@Query(value = "UPDATE WechatSendMessage m set m.isDefault = ?1 where m.isDefault = ?2")
void updateDefaultByDefault(Integer changeValue,Integer originalValue);
/**
*
* @param changeValue
* @param id
*/
@Modifying
@Query(value = "UPDATE WechatSendMessage m set m.isDefault = ?1 where m.id = ?2")
void updateDefaultById(Integer changeValue,Long id );
}

@ -0,0 +1,30 @@
package com.baiye.modules.system.rest;
import com.baiye.modules.system.service.AddWeChatFriendRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Enzo
* @date : 2022/7/1
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "系统代理商管理")
@RequestMapping("/api/addFriendRecord")
public class AddWeChatFriendController {
private final AddWeChatFriendRecordService addWeChatFriendRecordService;
@ApiOperation("查找记录")
@GetMapping("/findByClueId")
public ResponseEntity<Object> query(@RequestParam("clueId") Long clueId) {
return new ResponseEntity<>(addWeChatFriendRecordService.findByClueId(clueId), HttpStatus.OK);
}
}

@ -1,20 +1,26 @@
package com.baiye.modules.system.rest;
import cn.hutool.json.JSONUtil;
import com.baiye.http.WeChatResponse;
import com.baiye.modules.system.service.WeChatUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpRequest;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.Map;
/**
* @author Enzo
* @date : 2022/6/24
*/
@Slf4j
@RestController
@Api(tags = "微信回调")
@RequestMapping("/wechat")
@ -25,7 +31,7 @@ public class WeChatCallbackController {
/**
*
* @param weChatResponse
*
* @return
*/
@PostMapping(value = "/callback")
@ -33,4 +39,10 @@ public class WeChatCallbackController {
weChatUserService.analyticalData(weChatResponse);
return new ResponseEntity<>(HttpStatus.OK);
}
@ApiOperation("是否在线")
@PostMapping("/test")
public void callbackTest(@RequestBody String body) {
log.info("======================= the response json as {} ================== ", JSONUtil.toJsonStr(body));
}
}

@ -1,19 +1,25 @@
package com.baiye.modules.system.rest;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.http.CommonResponse;
import com.baiye.model.dto.wechat.WeChatFriendDTO;
import com.baiye.model.enums.ResponseCode;
import com.baiye.modules.system.service.WeChatUserService;
import com.baiye.util.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author Enzo
* @date : 2022/6/23
*/
@Slf4j
@RestController
@Api(tags = "微信相关接口")
@RequestMapping("/api/wechat")
@ -23,13 +29,33 @@ public class WechatController {
private final WeChatUserService weChatUserService;
@ApiOperation("获取二维码")
@PostMapping("/getQrCode")
public CommonResponse<String> read(String wechatId) {
@GetMapping("/getQrCode")
public CommonResponse<String> getQrCode(String wechatId) {
return CommonResponse.createBySuccess
(weChatUserService.getQrCode(wechatId));
}
@ApiOperation("添加好友")
@PostMapping("/addFriend")
public CommonResponse<String> addFriend
(@Validated @RequestBody WeChatFriendDTO weChatFriendDTO) {
return CommonResponse.createBySuccess
(weChatUserService.addFriend(weChatFriendDTO));
}
@ApiOperation("是否在线")
@GetMapping("/onlineStatus")
public CommonResponse<Integer> onlineStatus() {
Integer byWechat =
weChatUserService.isOnlineByWechat(SecurityUtils.getCurrentUserId());
return CommonResponse.createBySuccess(byWechat);
}

@ -0,0 +1,106 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.rest;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.modules.system.domain.WechatSendMessage;
import com.baiye.modules.system.service.WechatSendMessageService;
import com.baiye.modules.system.service.dto.WechatSendMessageDto;
import com.baiye.modules.system.service.dto.WechatSendMessageQueryCriteria;
import com.baiye.util.SecurityUtils;
import com.google.common.collect.ImmutableMap;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author Enzo
* @website https://el-admin.vip
* @date 2022-07-01
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "WechatSendMessageController管理")
@RequestMapping("/api/wechatSendMessage")
public class WechatSendMessageController {
private final WechatSendMessageService wechatSendMessageService;
@ApiOperation("导出数据")
@GetMapping(value = "/download")
public void exportWechatSendMessage(HttpServletResponse response, WechatSendMessageQueryCriteria criteria) throws IOException {
wechatSendMessageService.download(wechatSendMessageService.queryAll(criteria), response);
}
@GetMapping
@ApiOperation("查询WechatSendMessage")
public ResponseEntity<Object> queryWechatSendMessage(WechatSendMessageQueryCriteria criteria, Pageable pageable) {
return new ResponseEntity<>(wechatSendMessageService.queryAll(criteria, pageable), HttpStatus.OK);
}
@GetMapping("/list")
@ApiOperation("查询WechatSendMessage")
public ResponseEntity<Object> listAll() {
List<WechatSendMessageDto> wechatSendMessageDtos =
wechatSendMessageService.querySendMessageByUserId(SecurityUtils.getCurrentUserId());
Map<String, Object> map =
ImmutableMap.of("data", wechatSendMessageDtos,
"status", DefaultNumberConstants.ZERO_NUMBER);
return new ResponseEntity<>(map, HttpStatus.OK);
}
@PostMapping
@ApiOperation("新增WechatSendMessageController")
public ResponseEntity<Object> createWechatSendMessage
(@Validated @RequestBody WechatSendMessage resources) {
return new ResponseEntity<>(wechatSendMessageService.create(resources), HttpStatus.CREATED);
}
@PutMapping
@ApiOperation("修改WechatSendMessage")
public ResponseEntity<Object> updateWechatSendMessage(@Validated @RequestBody WechatSendMessage resources) {
wechatSendMessageService.update(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@GetMapping("/changeIsDefault")
@ApiOperation("修改WechatSendMessage")
public ResponseEntity<Object> updateWechatSendMessage(Long id,Integer isDefault) {
wechatSendMessageService.changeStatus(id, isDefault);
return new ResponseEntity<>(HttpStatus.OK);
}
@DeleteMapping
@ApiOperation("删除WechatSendMessage")
public ResponseEntity<Object> deleteWechatSendMessage(@RequestBody Long[] ids) {
wechatSendMessageService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
}

@ -0,0 +1,39 @@
package com.baiye.modules.system.service;
import com.baiye.model.dto.AddWeChatFriendRecordDTO;
import com.baiye.modules.system.domain.AddWeChatFriendRecord;
import java.util.List;
/**
* @author Enzo
* @date : 2022/7/1
*/
public interface AddWeChatFriendRecordService {
/**
* id
* @param id
* @return
*/
AddWeChatFriendRecordDTO findByClueId(Long id);
/**
*
* @param num
* @return
*/
List<AddWeChatFriendRecord> findByStatus(Integer num);
/**
*
* @param friendRecord
* @return
*/
Boolean whetherFriends(AddWeChatFriendRecord friendRecord);
/**
*
* @param friendRecord
*/
void save(AddWeChatFriendRecord friendRecord);
}

@ -31,4 +31,6 @@ public interface PayComboService {
PayCombo findTemplateById(Long templateId);
Object query(PayComboQueryCriteria payComboQueryCriteria);
}

@ -21,4 +21,11 @@ public interface PayTemplateUserService {
* @return
*/
PayComboUser queryUserByUserId(Long id);
/**
* id
* @param id
* @return
*/
Boolean findAddWeChatFlagByUserId(Long id);
}

@ -1,6 +1,7 @@
package com.baiye.modules.system.service;
import com.baiye.http.WeChatResponse;
import com.baiye.model.dto.wechat.WeChatFriendDTO;
/**
* @author Enzo
@ -19,6 +20,20 @@ public interface WeChatUserService {
*
* @param weChatResponse
*/
void analyticalData(WeChatResponse weChatResponse);
/**
*
* @param weChatFriendDTO
* @return
*/
String addFriend(WeChatFriendDTO weChatFriendDTO);
/**
* 线
* @param currentUser
* @return
*/
Integer isOnlineByWechat(Long currentUser);
}

@ -0,0 +1,99 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.service;
import com.baiye.modules.system.domain.WechatSendMessage;
import com.baiye.modules.system.service.dto.WechatSendMessageDto;
import com.baiye.modules.system.service.dto.WechatSendMessageQueryCriteria;
import org.springframework.data.domain.Pageable;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @website https://el-admin.vip
* @description
* @author Enzo
* @date 2022-07-01
**/
public interface WechatSendMessageService {
/**
*
* @param criteria
* @param pageable
* @return Map<String,Object>
*/
Map<String,Object> queryAll(WechatSendMessageQueryCriteria criteria, Pageable pageable);
/**
*
* @param criteria
* @return List<WechatSendMessageDto>
*/
List<WechatSendMessageDto> queryAll(WechatSendMessageQueryCriteria criteria);
/**
* ID
* @param id ID
* @return WechatSendMessageDto
*/
WechatSendMessageDto findById(Long id);
/**
*
* @param resources /
* @return WechatSendMessageDto
*/
WechatSendMessageDto create(WechatSendMessage resources);
/**
*
* @param resources /
*/
void update(WechatSendMessage resources);
/**
*
* @param ids /
*/
void deleteAll(Long[] ids);
/**
*
* @param all
* @param response /
* @throws IOException /
*/
void download(List<WechatSendMessageDto> all, HttpServletResponse response) throws IOException;
/**
* 使
* @param currentUserId
* @return
*/
List<WechatSendMessageDto> querySendMessageByUserId(Long currentUserId);
/**
*
*
* @param id
* @param isDefault
*/
void changeStatus(Long id, Integer isDefault);
}

@ -0,0 +1,57 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* @website https://el-admin.vip
* @description /
* @author Enzo
* @date 2022-07-01
**/
@Data
public class WechatSendMessageDto implements Serializable {
private Long id;
/** 状态值 */
private Integer status;
/** 用户 */
private Long userId;
/** 发送消息 */
private String greatMessage;
/** 是否默认 */
private Integer isDefault;
/** 创建者 */
private String createBy;
/** 更新者 */
private String updateBy;
/** 创建日期 */
private Timestamp createTime;
/** 更新时间 */
private Timestamp updateTime;
}

@ -0,0 +1,27 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.service.dto;
import lombok.Data;
/**
* @website https://el-admin.vip
* @author Enzo
* @date 2022-07-01
**/
@Data
public class WechatSendMessageQueryCriteria{
}

@ -0,0 +1,73 @@
package com.baiye.modules.system.service.impl;
import cn.hutool.http.HttpStatus;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.baiye.config.properties.WeChatProperties;
import com.baiye.constant.WeChatRequestConstants;
import com.baiye.http.CommonResponse;
import com.baiye.http.WeChatResponse;
import com.baiye.model.enums.ResponseCode;
import com.baiye.modules.system.domain.AddWeChatFriendRecord;
import com.baiye.modules.system.repository.AddWeChatFriendRecordRepository;
import com.baiye.modules.system.service.AddWeChatFriendRecordService;
import com.baiye.model.dto.AddWeChatFriendRecordDTO;
import com.baiye.modules.system.service.mapstruct.AddWeChatFriendRecordMapper;
import com.google.common.collect.ImmutableMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @author Enzo
* @date : 2022/7/1
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AddWeChatWeChatFriendRecordServiceImpl implements AddWeChatFriendRecordService {
private final AddWeChatFriendRecordRepository addWeChatFriendRecordRepository;
private final AddWeChatFriendRecordMapper addWeChatFriendRecordMapper;
private final WeChatProperties weChatProperties;
@Override
public AddWeChatFriendRecordDTO findByClueId(Long clueId) {
AddWeChatFriendRecord addWechatFriendRecord = addWeChatFriendRecordRepository.findByClueId(clueId);
return addWeChatFriendRecordMapper.toDto(addWechatFriendRecord);
}
@Override
public List<AddWeChatFriendRecord> findByStatus(Integer num) {
return addWeChatFriendRecordRepository.findByStatus(num);
}
@Override
public Boolean whetherFriends(AddWeChatFriendRecord friendRecord) {
Map<String, Object> map =
ImmutableMap.of("wechat", friendRecord.getRobotWeChat(),
"targetWx", friendRecord.getUserWechat(), "type", 1);
// 发送请求
String friendsInfo = HttpUtil.post
(weChatProperties.getGatewayHost().
concat(WeChatRequestConstants.WE_CHAT_FRIEND_INFORMATION), map);
if (friendsInfo.contains(ResponseCode.SUCCESS.getDesc())) {
WeChatResponse weChatResponse =
JSONUtil.toBean(friendsInfo, WeChatResponse.class);
if (weChatResponse.getStatus() == HttpStatus.HTTP_OK) {
return Boolean.TRUE;
}
}
return Boolean.FALSE;
}
@Override
public void save(AddWeChatFriendRecord friendRecord) {
addWeChatFriendRecordRepository.save(friendRecord);
}
}

@ -119,4 +119,6 @@ public class PayComboServiceImpl implements PayComboService {
return payComboMapper.toDto(payComboRepository.findAll((root, criteriaQuery, criteriaBuilder) ->
QueryHelp.getPredicate(root, payComboQueryCriteria, criteriaBuilder)));
}
}

@ -1,10 +1,15 @@
package com.baiye.modules.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.model.dto.AddWeChatFriendRecordDTO;
import com.baiye.model.dto.TemplateUserDTO;
import com.baiye.modules.system.domain.PayCombo;
import com.baiye.modules.system.domain.PayComboUser;
import com.baiye.modules.system.domain.User;
import com.baiye.modules.system.repository.PayComboRepository;
import com.baiye.modules.system.repository.PayComboUserRepository;
import com.baiye.modules.system.repository.UserRepository;
@ -16,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author yqy
@ -57,6 +63,7 @@ public class PayTemplateUserServiceImpl implements PayTemplateUserService {
payComboUserOne.setBeginTime(createTime);
payComboUserOne.setEndTime(newDate);
}
payComboUserOne.setPayComboId(payTemplateId);
userRepository.updateExpirationTimeById(newDate, userId);
return payComboUserRepository.save(payComboUserOne).getId() != null;
} else {
@ -76,4 +83,23 @@ public class PayTemplateUserServiceImpl implements PayTemplateUserService {
public PayComboUser queryUserByUserId(Long id) {
return payComboUserRepository.findTemplateByUserId(id);
}
@Override
public Boolean findAddWeChatFlagByUserId(Long id) {
List<Map<String, Object>> templateDTOByUserId = payComboUserRepository.findTemplateDTOByUserId(id);
if (CollUtil.isNotEmpty(templateDTOByUserId)) {
List<TemplateUserDTO> weChatFriendRecordList =
Convert.toList(TemplateUserDTO.class, templateDTOByUserId);
for (TemplateUserDTO recordDTO : weChatFriendRecordList) {
if (recordDTO.getStatus() == DefaultNumberConstants.ZERO_NUMBER &&
recordDTO.getWeChatFlag() != null && recordDTO.getWeChatFlag()) {
if (recordDTO.getEndTime() != null &&
recordDTO.getEndTime().after(DateUtil.date())) {
return Boolean.TRUE;
}
}
}
}
return Boolean.FALSE;
}
}

@ -45,6 +45,7 @@ import com.baiye.service.UserCacheClean;
import com.baiye.util.*;
import com.google.common.collect.ImmutableMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
@ -64,6 +65,7 @@ import java.util.*;
* @author Zheng Jie
* @date 2018-11-23
*/
@Slf4j
@Service
@RequiredArgsConstructor
@CacheConfig(cacheNames = "user")
@ -77,12 +79,14 @@ public class UserServiceImpl implements UserService {
private final CompanyService companyService;
private final UserCacheClean userCacheClean;
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final WeChatUserService weChatUserService;
private final OnlineUserService onlineUserService;
private final OrganizeRepository organizeRepository;
private final PayComboService payComboService;
private final PayComboLogService payComboLogService;
private final PayTemplateUserService payTemplateUserService;
private final OrganizeUserRepository organizeUserRepository;
@ -335,6 +339,8 @@ public class UserServiceImpl implements UserService {
return userRepository.save(resources);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(User resources) throws Exception {
@ -450,6 +456,10 @@ public class UserServiceImpl implements UserService {
Organize organize = organizeRepository.findOrganizeById(organizeUser.getOrganizeId());
convert.setOrganizeName(organize.getOrganizeName());
}
Boolean addWeChatFlag = payTemplateUserService.findAddWeChatFlagByUserId(convert.getId());
convert.setAddWeChatFlag(addWeChatFlag);
convert.setOnlineStatus(weChatUserService.isOnlineByWechat(convert.getId()));
for (Role role : roles) {
if (role.getId() == DefaultNumberConstants.EIGHT_NUMBER) {
convert.setIsManager(Boolean.TRUE);

@ -1,39 +1,80 @@
package com.baiye.modules.system.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baiye.config.properties.WeChatProperties;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.WeChatRequestConstants;
import com.baiye.exception.BadRequestException;
import com.baiye.feign.SourceClueClient;
import com.baiye.http.WeChatParseResponse;
import com.baiye.http.WeChatResponse;
import com.baiye.model.dto.wechat.WeChatFriendDTO;
import com.baiye.model.dto.wechat.WeChatUserLoginDTO;
import com.baiye.model.enums.ResponseCode;
import com.baiye.modules.system.repository.WeChatRepository;
import com.baiye.modules.system.domain.AddWeChatFriendRecord;
import com.baiye.modules.system.domain.Clue;
import com.baiye.modules.system.domain.WeChatUser;
import com.baiye.modules.system.repository.AddWeChatFriendRecordRepository;
import com.baiye.modules.system.repository.WeChatUserRepository;
import com.baiye.modules.system.service.AddWeChatFriendRecordService;
import com.baiye.modules.system.service.WeChatUserService;
import com.baiye.socket.WebSocketServer;
import com.baiye.util.RedisUtils;
import com.baiye.util.SecurityUtils;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @author Enzo
* @date : 2022/6/23
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class WeChatUserServiceImpl implements WeChatUserService {
private final WeChatRepository weChatRepository;
private final RedisUtils redisUtils;
private final WebSocketServer webSocketServer;
private final SourceClueClient sourceClueClient;
private final WeChatProperties weChatProperties;
private final WeChatUserRepository weChatUserRepository;
private final AddWeChatFriendRecordService addWeChatFriendRecordService;
private final AddWeChatFriendRecordRepository addWeChatFriendRecordRepository;
@Override
public String getQrCode(String wechatId) {
String uuid = IdUtil.randomUUID();
log.info("============== uuid as {} ================", uuid);
Map<String, Object> getQrCodeMap =
ImmutableMap.of("uuid", IdUtil.randomUUID());
ImmutableMap.of("uuid", uuid);
// 保存
redisUtils.set(uuid, SecurityUtils.getCurrentUserId(),
DefaultNumberConstants.THREE_NUMBER,
TimeUnit.MINUTES);
if (StringUtils.isNotBlank(wechatId)) {
getQrCodeMap.put("wechat", wechatId);
}
@ -48,8 +89,120 @@ public class WeChatUserServiceImpl implements WeChatUserService {
throw new BadRequestException(ResponseCode.FAILED_GET_QR_CODE.getDesc());
}
@Override
public String addFriend(WeChatFriendDTO weChatFriendDTO) {
Long currentUserId = SecurityUtils.getCurrentUserId();
WeChatUser byUserId = weChatUserRepository.findByUserId(currentUserId);
if (ObjectUtil.isNull(byUserId)) {
throw new BadRequestException(ResponseCode.ACCOUNT_NOT_LOGGED_OR_NOT_ONLINE.getDesc());
}
AddWeChatFriendRecord wechatFriendRecord = new AddWeChatFriendRecord();
String tagetWxId = weChatFriendDTO.getTagetWxId();
// 拼接参数
Map<String, Object> map = Maps.newHashMap();
map.put("wechat", byUserId.getWxId());
map.put("tagetWxId", weChatFriendDTO.getTagetWxId());
map.put("helloContent", weChatFriendDTO.getSendContent());
map.put("type", weChatFriendDTO.getType());
if (weChatFriendDTO.getType() == DefaultNumberConstants.ZERO_NUMBER
&& StringUtils.isBlank(weChatFriendDTO.getTagetWxId())) {
Clue body = sourceClueClient.queryDetails
(Long.parseLong(weChatFriendDTO.getClueId())).getBody();
tagetWxId = body.getNid();
map.put("tagetWxId", body.getNid());
}
String addedFriendResult = HttpUtil.post
(weChatProperties.getGatewayHost().
concat(WeChatRequestConstants.WE_CHAT_ADD_FRIEND), map);
wechatFriendRecord.setUserId(currentUserId);
wechatFriendRecord.setUserWechat(tagetWxId);
wechatFriendRecord.setRobotWeChat(byUserId.getWxId());
wechatFriendRecord.setType(DefaultNumberConstants.ONE_NUMBER);
wechatFriendRecord.setSendContent(weChatFriendDTO.getSendContent());
wechatFriendRecord.setClueId(Long.parseLong(weChatFriendDTO.getClueId()));
log.info("======== response as {} ==============", JSONUtil.toJsonStr(addedFriendResult));
if (addedFriendResult.contains(ResponseCode.SUCCESS.getDesc())) {
WeChatResponse weChatResponse =
JSONUtil.toBean(addedFriendResult, WeChatResponse.class);
if (weChatResponse.getStatus() == HttpStatus.HTTP_OK) {
addWeChatFriendRecordRepository.save(wechatFriendRecord);
return ResponseCode.SUCCESS.getDesc();
}
throw new BadRequestException(StringUtils.isNotBlank(weChatResponse.getMsg())
? weChatResponse.getMsg() : ResponseCode.FAILED_ADD_FRIEND.getDesc());
}
return ResponseCode.FAILURE.getDesc();
}
@Override
public Integer isOnlineByWechat(Long currentUserId) {
WeChatUser byUserId = weChatUserRepository.findByUserId(currentUserId);
if (ObjectUtil.isNotNull(byUserId) && StringUtils.isNotBlank(byUserId.getWxId())) {
Map<String, Object> map =
ImmutableMap.of("wechat", byUserId.getWxId(),
"loginType", byUserId.getLoginType(),
"needDetailInfo", Boolean.FALSE);
String getQrCodeResult = HttpUtil.get
(weChatProperties.getGatewayHost().
concat(WeChatRequestConstants.WE_CHAT_STATUS), map);
if (getQrCodeResult.contains(ResponseCode.SUCCESS.getDesc())) {
WeChatResponse weChatResponse =
JSONUtil.toBean(getQrCodeResult, WeChatResponse.class);
return JSONUtil.toBean
(JSONUtil.toJsonStr
(weChatResponse.getData()),
WeChatParseResponse.class).getStatus();
}
}
return DefaultNumberConstants.MINUS_ONE_NUMBER;
}
@Override
public void analyticalData(WeChatResponse weChatResponse) {
// 处理登录请求
if (weChatResponse.getStatus() ==
DefaultNumberConstants.TWO_HUNDRED_ONE) {
WeChatUserLoginDTO userLoginDTO =
JSONUtil.toBean(JSONUtil.toJsonStr(weChatResponse.getData()), WeChatUserLoginDTO.class);
String cusQrUuId = userLoginDTO.getCusQrUuId();
// 查询用户id
Long currentUserId = Long.parseLong(redisUtils.get(cusQrUuId).toString());
// 清除信息
redisUtils.del(cusQrUuId);
if (StringUtils.isBlank(cusQrUuId)) {
return;
}
WeChatUser byUserId = weChatUserRepository.findByUserId(currentUserId);
if (ObjectUtil.isNull(byUserId)) {
byUserId = new WeChatUser();
saveWeChatUser(userLoginDTO, currentUserId, byUserId);
return;
}
saveWeChatUser(userLoginDTO, currentUserId, byUserId);
}
}
private void saveWeChatUser(WeChatUserLoginDTO userLoginDTO, Long currentUserId, WeChatUser byUserId) {
byUserId.setLoginDate(DateUtil.date());
byUserId.setRandomId(userLoginDTO.getRandomid());
byUserId.setToken(userLoginDTO.getToken());
byUserId.setWxId(userLoginDTO.getWxid());
byUserId.setLoginType(userLoginDTO.getLoginType());
byUserId.setNickname(userLoginDTO.getNickname());
byUserId.setUserId(currentUserId);
extracted(currentUserId);
weChatUserRepository.save(byUserId);
}
private void extracted(Long currentUserId) {
JSONObject jsonObject = new JSONObject();
jsonObject.putOpt("message", "扫码登录成功");
jsonObject.putOpt("type", "qrCodeSuccess");
jsonObject.putOpt("code", DefaultNumberConstants.TWO_HUNDRED);
webSocketServer.sendMessage(JSONUtil.toJsonStr(jsonObject), currentUserId);
}
}

@ -0,0 +1,136 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.service.impl;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.exception.BadRequestException;
import com.baiye.model.enums.ResponseCode;
import com.baiye.modules.system.domain.WechatSendMessage;
import com.baiye.modules.system.repository.WechatSendMessageRepository;
import com.baiye.modules.system.service.WechatSendMessageService;
import com.baiye.modules.system.service.dto.WechatSendMessageDto;
import com.baiye.modules.system.service.dto.WechatSendMessageQueryCriteria;
import com.baiye.modules.system.service.mapstruct.WechatSendMessageMapper;
import com.baiye.util.*;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author Enzo
* @website https://el-admin.vip
* @description
* @date 2022-07-01
**/
@Service
@RequiredArgsConstructor
public class WechatSendMessageServiceImpl implements WechatSendMessageService {
private final WechatSendMessageRepository wechatSendMessageRepository;
private final WechatSendMessageMapper wechatSendMessageMapper;
@Override
public Map<String, Object> queryAll(WechatSendMessageQueryCriteria criteria, Pageable pageable) {
Page<WechatSendMessage> page = wechatSendMessageRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable);
return PageUtil.toPage(page.map(wechatSendMessageMapper::toDto));
}
@Override
public List<WechatSendMessageDto> queryAll(WechatSendMessageQueryCriteria criteria) {
return wechatSendMessageMapper.toDto(wechatSendMessageRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder)));
}
@Override
@Transactional(rollbackFor = Exception.class)
public WechatSendMessageDto findById(Long id) {
WechatSendMessage wechatSendMessage = wechatSendMessageRepository.findById(id).orElseGet(WechatSendMessage::new);
ValidationUtil.isNull(wechatSendMessage.getId(), "WechatSendMessage", "id", id);
return wechatSendMessageMapper.toDto(wechatSendMessage);
}
@Override
@Transactional(rollbackFor = Exception.class)
public WechatSendMessageDto create(WechatSendMessage resources) {
resources.setUserId(SecurityUtils.getCurrentUserId());
return wechatSendMessageMapper.toDto(wechatSendMessageRepository.save(resources));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(WechatSendMessage resources) {
WechatSendMessage wechatSendMessage = wechatSendMessageRepository.findById
(resources.getId()).orElseGet(WechatSendMessage::new);
ValidationUtil.isNull(wechatSendMessage.getId(), "WechatSendMessage", "id", resources.getId());
wechatSendMessage.copy(resources);
wechatSendMessageRepository.save(wechatSendMessage);
}
@Override
public void deleteAll(Long[] ids) {
for (Long id : ids) {
wechatSendMessageRepository.deleteById(id);
}
}
@Override
public void download(List<WechatSendMessageDto> all, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (WechatSendMessageDto wechatSendMessage : all) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("状态值", wechatSendMessage.getStatus());
map.put("用户", wechatSendMessage.getUserId());
map.put("发送消息", wechatSendMessage.getGreatMessage());
map.put("是否默认", wechatSendMessage.getIsDefault());
map.put("创建者", wechatSendMessage.getCreateBy());
map.put("更新者", wechatSendMessage.getUpdateBy());
map.put("创建日期", wechatSendMessage.getCreateTime());
map.put("更新时间", wechatSendMessage.getUpdateTime());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
public List<WechatSendMessageDto> querySendMessageByUserId(Long currentUserId) {
return wechatSendMessageMapper.toDto(wechatSendMessageRepository.findByUserId(currentUserId));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void changeStatus(Long id, Integer isDefault) {
WechatSendMessage byIsDefault =
wechatSendMessageRepository.findByIsDefault(DefaultNumberConstants.ONE_NUMBER);
if (byIsDefault != null &&
isDefault == DefaultNumberConstants.ZERO_NUMBER &&
byIsDefault.getId().equals(id)) {
throw new BadRequestException(ResponseCode.TEMPLATE_CHANGE_ERROR.getDesc());
}
wechatSendMessageRepository.updateDefaultByDefault
(DefaultNumberConstants.ZERO_NUMBER, DefaultNumberConstants.ONE_NUMBER);
wechatSendMessageRepository.updateDefaultById
(DefaultNumberConstants.ONE_NUMBER, id);
}
}

@ -0,0 +1,30 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.service.mapstruct;
import com.baiye.model.base.BaseMapper;
import com.baiye.modules.system.domain.AddWeChatFriendRecord;
import com.baiye.model.dto.AddWeChatFriendRecordDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author Zheng Jie
* @date 2019-03-25
*/
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface AddWeChatFriendRecordMapper extends BaseMapper<AddWeChatFriendRecordDTO, AddWeChatFriendRecord> {
}

@ -0,0 +1,32 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.baiye.modules.system.service.mapstruct;
import com.baiye.model.base.BaseMapper;
import com.baiye.modules.system.domain.WechatSendMessage;
import com.baiye.modules.system.service.dto.WechatSendMessageDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @website https://el-admin.vip
* @author Enzo
* @date 2022-07-01
**/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface WechatSendMessageMapper extends BaseMapper<WechatSendMessageDto, WechatSendMessage> {
}

@ -35,7 +35,6 @@ import java.util.concurrent.atomic.AtomicInteger;
public class WebSocketServer {
private Long onlineId;
@PostConstruct
public void init() {
log.info("websocket 加载");
@ -232,7 +231,6 @@ public class WebSocketServer {
if (queryString != null &&
StringUtils.isNotBlank(StringUtils.substring(queryString, DefaultNumberConstants.FOURTEEN_NUMBER))) {
String substring = queryString.substring(DefaultNumberConstants.FOURTEEN_NUMBER);
log.info("=================== the sub string as {} ===================", substring);
return UserTokenManager.getUserId(substring);
}
return null;

@ -0,0 +1,58 @@
package com.baiye.timed;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.modules.system.domain.AddWeChatFriendRecord;
import com.baiye.modules.system.domain.User;
import com.baiye.modules.system.service.AddWeChatFriendRecordService;
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.stream.Collectors;
/**
* @author Enzo
* @date : 2022/7/4
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class WeChatAddFriendSync {
private final AddWeChatFriendRecordService addWeChatFriendRecordService;
/**
*
*/
// @Scheduled(cron = "0 */5 * * * ?")
@Scheduled(cron = "0 0/5 * * * ?")
public void checkUserBalance() {
List<AddWeChatFriendRecord> addWeChatFriendRecords =
addWeChatFriendRecordService.findByStatus(DefaultNumberConstants.ZERO_NUMBER);
if (CollUtil.isNotEmpty(addWeChatFriendRecords)) {
for (AddWeChatFriendRecord friendRecord : addWeChatFriendRecords) {
Boolean aBoolean = addWeChatFriendRecordService.whetherFriends(friendRecord);
if (Boolean.TRUE.equals(aBoolean)){
friendRecord.setStatus(DefaultNumberConstants.ONE_NUMBER);
friendRecord.setAddFriendTime(DateUtil.date());
addWeChatFriendRecordService.save(friendRecord);
continue;
}
// 偏移三天
DateTime dateTime = DateUtil.offsetDay(DateUtil.date(),
DefaultNumberConstants.MINUS_THREE_NUMBER);
if (dateTime.after(friendRecord.getAddFriendTime())) {
friendRecord.setStatus(DefaultNumberConstants.MINUS_TWO_NUMBER);
addWeChatFriendRecordService.save(friendRecord);
}
}
}
}
}

@ -1,6 +1,8 @@
package com.baiye;
import com.baiye.model.dto.wechat.WeChatFriendDTO;
import com.baiye.modules.system.service.AliPayService;
import com.baiye.modules.system.service.WeChatUserService;
import com.baiye.modules.system.service.dto.AliPayPcDTO;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@ -23,6 +25,9 @@ public class PayTest {
@Resource
private AliPayService aliPayService;
@Resource
private WeChatUserService weChatUserService;
@Test
@Transactional(rollbackFor = Exception.class)
public void getSetting() {
@ -30,6 +35,14 @@ public class PayTest {
aliPayPcDTO.setAmount(10.0);
aliPayService.aliPayPc(aliPayPcDTO);
}
@Test
@Transactional(rollbackFor = Exception.class)
public void addFriend() {
WeChatFriendDTO weChatFriendDTO = new WeChatFriendDTO();
weChatFriendDTO.setType(1);
weChatFriendDTO.setTagetWxId("15168138353");
weChatUserService.addFriend(weChatFriendDTO);
}
}

@ -234,6 +234,11 @@
<version>${alipay.version}</version>
</dependency>
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>${emoji.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

@ -2,7 +2,6 @@ package com.baiye.feign;
import com.baiye.feign.fallback.OrganizeClientFallback;
import com.baiye.model.dto.ClueDto;
import com.baiye.model.dto.OrganizeQueryCriteria;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;

@ -0,0 +1,30 @@
package com.baiye.feign;
import com.baiye.feign.fallback.OrganizeClientFallback;
import com.baiye.model.dto.AddWeChatFriendRecordDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author Enzo
* @date 2022-7-1
*
*/
@FeignClient(value = "ad-platform-management",fallback = OrganizeClientFallback.class)
public interface WeChatAddFriendClient {
String PAY_PREFIX = "/api/addFriendRecord";
/**
*
* @param clueId
* @return
*/
@GetMapping(PAY_PREFIX + "/findByClueId")
ResponseEntity<AddWeChatFriendRecordDTO> findByClueId(@RequestParam("clueId") Long clueId);
}

@ -2,7 +2,6 @@ package com.baiye.feign.fallback;
import com.baiye.feign.OrganizeClient;
import com.baiye.model.dto.ClueDto;
import com.baiye.model.dto.OrganizeQueryCriteria;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;

@ -0,0 +1,23 @@
package com.baiye.feign.fallback;
import com.baiye.feign.WeChatAddFriendClient;
import com.baiye.model.dto.AddWeChatFriendRecordDTO;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* @author Enzo
* @date 2022-7-1
*/
@Component
public class WeChatAddFriendClientFallback implements WeChatAddFriendClient {
@Override
public ResponseEntity<AddWeChatFriendRecordDTO> findByClueId(Long clueId) {
return null;
}
}

@ -2,15 +2,13 @@ package com.baiye.module.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.exception.BadRequestException;
import com.baiye.feign.OrganizeClient;
import com.baiye.feign.ReportClient;
import com.baiye.feign.TaskClient;
import com.baiye.feign.UserClient;
import com.baiye.feign.*;
import com.baiye.model.dto.*;
import com.baiye.model.entity.BaseClue;
import com.baiye.model.vo.ResSourceLabel;
@ -54,6 +52,10 @@ public class ClueServiceImpl implements ClueService {
private final UserClient userClient;
private final ConductRecordRepository conductRecordRepository;
private final WeChatAddFriendClient weChatAddFriendClient;
private static SimpleDateFormat timeOne = new SimpleDateFormat("yyyyMMddHHmmssSSS");
@Override
@ -217,6 +219,13 @@ public class ClueServiceImpl implements ClueService {
if (CollUtil.isEmpty(baseLabel)) {
clueDto.setBaseLabel(new ArrayList<>());
}
AddWeChatFriendRecordDTO recordDTO = weChatAddFriendClient.findByClueId(clueDto.getId()).getBody();
clueDto.setAddWeChatStatus(DefaultNumberConstants.MINUS_ONE_NUMBER);
if (recordDTO != null) {
clueDto.setAddWeChatType(recordDTO.getType());
clueDto.setAddWeChatStatus(recordDTO.getStatus());
clueDto.setAddWeChatTime(recordDTO.getAddFriendTime());
}
}
}
return clueDtoList;

Loading…
Cancel
Save