|
|
@@ -15,12 +15,19 @@ import com.fs.common.service.ISmsService;
|
|
|
import com.fs.common.utils.ServletUtils;
|
|
|
import com.fs.common.utils.ip.IpUtils;
|
|
|
import com.fs.common.utils.sign.Md5Utils;
|
|
|
+import com.fs.company.domain.CompanyUser;
|
|
|
+import com.fs.company.domain.CompanyUserUser;
|
|
|
+import com.fs.company.mapper.CompanyUserMapper;
|
|
|
+import com.fs.company.service.ICompanyUserUserService;
|
|
|
import com.fs.core.config.WxOpenProperties;
|
|
|
import com.fs.his.domain.FsUser;
|
|
|
import com.fs.his.mapper.FsUserMapper;
|
|
|
import com.fs.his.service.IFsUserNewTaskService;
|
|
|
import com.fs.his.service.IFsUserService;
|
|
|
import com.fs.his.vo.FsUserRegisterParam;
|
|
|
+import com.fs.im.dto.OpenImMsgDTO;
|
|
|
+import com.fs.im.dto.OpenImResponseDTO;
|
|
|
+import com.fs.im.service.OpenIMService;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -29,6 +36,7 @@ import org.apache.ibatis.annotations.Param;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
@@ -36,6 +44,7 @@ import org.springframework.web.bind.annotation.*;
|
|
|
import javax.crypto.Cipher;
|
|
|
import javax.crypto.spec.SecretKeySpec;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.Executor;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import static com.fs.his.utils.PhoneUtil.encryptPhone;
|
|
|
@@ -61,6 +70,16 @@ public class AppLoginController2 extends AppBaseController{
|
|
|
|
|
|
@Autowired
|
|
|
private ISmsService smsService;
|
|
|
+ @Autowired
|
|
|
+ private ICompanyUserUserService companyUserUserService;
|
|
|
+ @Autowired
|
|
|
+ private OpenIMService openIMService;
|
|
|
+ @Autowired
|
|
|
+ private CompanyUserMapper companyUserMapper;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("threadPoolTaskExecutor")
|
|
|
+ private Executor threadPoolTaskExecutor;
|
|
|
+
|
|
|
@ApiOperation("注册app用户")
|
|
|
@PostMapping("/register")
|
|
|
@RepeatSubmit
|
|
|
@@ -455,6 +474,9 @@ public class AppLoginController2 extends AppBaseController{
|
|
|
return R.error("密码不正确");
|
|
|
}
|
|
|
|
|
|
+ // 发送消息
|
|
|
+ threadPoolTaskExecutor.execute(() -> sendMessage(user));
|
|
|
+
|
|
|
return generateTokenAndReturn(user);
|
|
|
|
|
|
}
|
|
|
@@ -676,9 +698,97 @@ public class AppLoginController2 extends AppBaseController{
|
|
|
return R.error("验证码错误");
|
|
|
}
|
|
|
updateExistingUserJpushId(user.get(0), map.get("jpushId"));
|
|
|
+
|
|
|
+ // 发送消息
|
|
|
+ FsUser finalUser = user.get(0);
|
|
|
+ threadPoolTaskExecutor.execute(() -> sendMessage(finalUser));
|
|
|
+
|
|
|
return generateTokenAndReturn(user.get(0));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 针对新注册app的用户,如果是通过销售发的链接注册的,用户注册成功之后,销售端自动给客户发送消息提醒,提醒模板:
|
|
|
+ * 尊敬的{调用用户昵称},我是您的专属健康管家,有任何健康问题随时找我,期待陪伴您健康每一天!
|
|
|
+ */
|
|
|
+ private void sendMessage(FsUser user) {
|
|
|
+ try {
|
|
|
+ // 消息模板
|
|
|
+ String messageTemplate = "尊敬的{调用用户昵称},我是您的专属健康管家,有任何健康问题随时找我,期待陪伴您健康每一天!";
|
|
|
+
|
|
|
+ // 查询需要发送消息的销售
|
|
|
+ List<CompanyUserUser> needSendList = companyUserUserService.selectNeedSendByUserId(user.getUserId());
|
|
|
+
|
|
|
+ if (CollectionUtil.isEmpty(needSendList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 替换用户昵称
|
|
|
+ String userNickName = StringUtils.isNotBlank(user.getNickName()) ? user.getNickName() : "用户";
|
|
|
+ String message = messageTemplate.replace("{调用用户昵称}", userNickName);
|
|
|
+
|
|
|
+ // 遍历需要发送消息的销售
|
|
|
+ for (CompanyUserUser companyUserUser : needSendList) {
|
|
|
+ String sendId = "C" + companyUserUser.getCompanyUserId();
|
|
|
+ String recvId = "U" + user.getUserId();
|
|
|
+
|
|
|
+ // 发送文本消息
|
|
|
+ OpenImMsgDTO openImMsgDTO = new OpenImMsgDTO();
|
|
|
+ OpenImMsgDTO.Content content = new OpenImMsgDTO.Content();
|
|
|
+ OpenImMsgDTO.OfflinePushInfo offlinePushInfo = new OpenImMsgDTO.OfflinePushInfo();
|
|
|
+
|
|
|
+ // 设置发送者信息
|
|
|
+ CompanyUser companyUser = companyUserMapper.selectCompanyUserByUserId(companyUserUser.getCompanyUserId());
|
|
|
+ if (companyUser == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(companyUser.getAvatar())) {
|
|
|
+ openImMsgDTO.setSenderNickname(companyUser.getNickName());
|
|
|
+ openImMsgDTO.setSenderFaceURL(companyUser.getAvatar());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置推送信息
|
|
|
+ if (StringUtils.isNotBlank(companyUser.getNickName())) {
|
|
|
+ offlinePushInfo.setTitle(companyUser.getNickName());
|
|
|
+ }
|
|
|
+ offlinePushInfo.setDesc(message);
|
|
|
+ offlinePushInfo.setIOSBadgeCount(true);
|
|
|
+ offlinePushInfo.setIOSPushSound("");
|
|
|
+
|
|
|
+ // 设置基础消息信息
|
|
|
+ openImMsgDTO.setSendID(sendId);
|
|
|
+ openImMsgDTO.setRecvID(recvId);
|
|
|
+ openImMsgDTO.setContentType(101);
|
|
|
+ openImMsgDTO.setSenderPlatformID(5);
|
|
|
+ openImMsgDTO.setSessionType(1);
|
|
|
+
|
|
|
+ // 设置消息内容
|
|
|
+ content.setContent(message);
|
|
|
+ openImMsgDTO.setContent(content);
|
|
|
+
|
|
|
+ // 设置推送信息
|
|
|
+ openImMsgDTO.setOfflinePushInfo(offlinePushInfo);
|
|
|
+
|
|
|
+ // 检查好友关系
|
|
|
+ openIMService.checkAndImportFriend(companyUser.getUserId(), user.getUserId().toString());
|
|
|
+
|
|
|
+ OpenImResponseDTO response = openIMService.openIMSendMsg(openImMsgDTO);
|
|
|
+
|
|
|
+ if (response != null && response.getErrCode() == 0) {
|
|
|
+ // 发送成功,更新isSend状态为1
|
|
|
+ companyUserUser.setIsSend(1);
|
|
|
+ companyUserUserService.updateCompanyUserUser(companyUserUser);
|
|
|
+ log.info("销售{}给用户{}发送欢迎消息成功", companyUserUser.getCompanyUserId(), user.getUserId());
|
|
|
+ } else {
|
|
|
+ log.error("销售{}给用户{}发送欢迎消息失败: {}",
|
|
|
+ companyUserUser.getCompanyUserId(), user.getUserId(),
|
|
|
+ response != null ? response.getErrMsg() : "响应为空");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("发送欢迎消息时发生异常", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@PostMapping("/registerSendCode")
|
|
|
public R registerSendCode(@RequestBody Map<String, String> body){
|
|
|
String phone = body.get("phone");
|