Selaa lähdekoodia

feat(完善微信身份认证功能接口,增加针对冰箱的项目负责人检索,增加首页中南跳转标识显示与否的配置标识): 完善微信身份认证功能接口,增加针对冰箱的项目负责人检索,增加首页中南跳转标识显示与否的配置标识

1.完善微信身份认证功能接口,
2.增加冰箱负责人字段,增加针对冰箱的项目负责人检索,
3.增加首页中南跳转标识显示与否的配置标识
zjian 3 viikkoa sitten
vanhempi
commit
e94a0125ca
16 muutettua tiedostoa jossa 201 lisäystä ja 10 poistoa
  1. 4 0
      snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java
  2. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/alarmuser/service/AlarmUserService.java
  3. 33 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/alarmuser/service/impl/AlarmUserServiceImpl.java
  4. 3 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/bi/service/BiService.java
  5. 7 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java
  6. 7 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddParam.java
  7. 7 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddWithRoomParam.java
  8. 7 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditParam.java
  9. 7 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditWithRoomParam.java
  10. 6 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetPageParam.java
  11. 3 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java
  12. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/impl/MonitorTargetRegionServiceImpl.java
  13. 15 1
      snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/config/service/impl/DevConfigServiceImpl.java
  14. 5 2
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java
  15. 77 3
      snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/controller/WxMpController.java
  16. 2 0
      snowy-web-app/src/main/resources/_sql/zhangjian_20251125_update.sql

+ 4 - 0
snowy-plugin/snowy-plugin-auth/src/main/java/vip/xiaonuo/auth/modular/login/service/impl/AuthServiceImpl.java

@@ -239,6 +239,10 @@ public class AuthServiceImpl implements AuthService {
         // 根据账号获取用户信息,根据B端或C端判断
         if (SaClientTypeEnum.B.getValue().equals(type)) {
             SaBaseLoginUser saBaseLoginUser = loginUserApi.getUserByAccount(account);
+            //兼容手机号登陆 如果输入手机号 则用手机号取第一位用户
+            if(saBaseLoginUser==null){
+                saBaseLoginUser = loginUserApi.getUserByPhone(account);
+            }
             if (ObjectUtil.isEmpty(saBaseLoginUser)) {
                 throw new CommonException(AuthExceptionEnum.ACCOUNT_ERROR.getValue());
             }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/alarmuser/service/AlarmUserService.java

@@ -20,6 +20,8 @@ import vip.xiaonuo.coldchain.modular.alarmuser.param.AlarmUserAddParam;
 import vip.xiaonuo.coldchain.modular.alarmuser.param.AlarmUserEditParam;
 import vip.xiaonuo.coldchain.modular.alarmuser.param.AlarmUserIdParam;
 import vip.xiaonuo.coldchain.modular.alarmuser.param.AlarmUserPageParam;
+import vip.xiaonuo.coldchain.modular.push.entity.WeChatUser;
+import vip.xiaonuo.sys.modular.user.entity.SysUser;
 
 import java.util.List;
 
@@ -104,4 +106,19 @@ public interface AlarmUserService extends IService<AlarmUser> {
      * 根据openId获取用户信息
      */
     List<AlarmUser> getByOpenId(String openId);
+
+    /**
+     * 创建sys用户
+     *
+     * @param alarmUser 报警用户
+     * @param orgId     组织ID
+     * @param name      名字
+     * @return {@link SysUser }
+     */
+    SysUser createSysUser(AlarmUser alarmUser, String orgId, String name);
+
+    /**
+     * 关注微信号,如果openid不存在则创建用户 兼容微信昵称
+     */
+    AlarmUser subscribe(WeChatUser weChatUser, String orgId, String name, String phone);
 }

+ 33 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/alarmuser/service/impl/AlarmUserServiceImpl.java

@@ -57,7 +57,6 @@ import vip.xiaonuo.dev.api.DevConfigApi;
 import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
 import vip.xiaonuo.sys.modular.user.entity.SysUser;
 import vip.xiaonuo.sys.modular.user.enums.SysUserStatusEnum;
-import vip.xiaonuo.sys.modular.user.mapper.SysUserMapper;
 import vip.xiaonuo.sys.modular.user.service.SysUserService;
 import vip.xiaonuo.sys.modular.user.service.impl.SysUserServiceImpl;
 
@@ -314,6 +313,7 @@ public class AlarmUserServiceImpl extends ServiceImpl<AlarmUserMapper, AlarmUser
         update(alarmUser, new LambdaUpdateWrapper<>(AlarmUser.class).eq(AlarmUser::getOpenId, openid));
     }
 
+    @Override
     public List<AlarmUser> getByOpenId(String openId) {
         LambdaQueryWrapper<AlarmUser> queryWrapper = new LambdaQueryWrapper<>(AlarmUser.class)
                 .eq(AlarmUser::getOpenId, openId)
@@ -325,7 +325,8 @@ public class AlarmUserServiceImpl extends ServiceImpl<AlarmUserMapper, AlarmUser
     /**
      * 新增系统用户
      */
-    private SysUser createSysUser(AlarmUser alarmUser, String orgId, String name) {
+    @Override
+    public SysUser createSysUser(AlarmUser alarmUser, String orgId, String name) {
         //创建系统用户
         SysUser sysUser;
         if (alarmUser == null) {
@@ -345,7 +346,8 @@ public class AlarmUserServiceImpl extends ServiceImpl<AlarmUserMapper, AlarmUser
         sysUser.setSortCode(99);
         // 设置状态
         sysUser.setUserStatus(SysUserStatusEnum.ENABLE.getValue());
-        //
+        //设置手机号
+        sysUser.setPhone(CommonCryptogramUtil.doSm4CbcEncrypt(sysUser.getPhone()));
         String account = PinyinUtil.getPinyin(sysUser.getName()).replaceAll("\\s", "");
         List<SysUser> userLikeAccount = sysUserService.getUserLikeAccount(account);
         if (!userLikeAccount.isEmpty()) {
@@ -360,6 +362,34 @@ public class AlarmUserServiceImpl extends ServiceImpl<AlarmUserMapper, AlarmUser
         return sysUser;
     }
 
+    @Override
+    public AlarmUser subscribe(WeChatUser weChatUser, String orgId, String name,String phone) {
+        log.info("用户关注公众号 openid={}", weChatUser.getOpenid());
+
+        List<AlarmUser> users = getByOpenId(weChatUser.getOpenid());
+        if (users.isEmpty()) {
+            //创建用户
+            AlarmUser alarmUser = new AlarmUser();
+            alarmUser.setOpenId(weChatUser.getOpenid());
+            alarmUser.setSubscribed(AlarmUserEnum.SUBSCRIBE.getValue());
+            alarmUser.setPhone(phone);
+            SysUser sysUser = createSysUser(alarmUser, orgId, name);
+
+            alarmUser.setUserId(sysUser.getId());
+            alarmUser.setNickName(weChatUser.getNickname());
+            alarmUser.setCreateOrg(orgId);
+            alarmUser.setId(IdWorker.getIdStr());
+            save(alarmUser);
+            return alarmUser;
+        }
+
+        //更新用户关注标志
+        AlarmUser alarmUser = new AlarmUser();
+        alarmUser.setSubscribed(AlarmUserEnum.SUBSCRIBE.getValue());
+        update(alarmUser, new LambdaUpdateWrapper<>(AlarmUser.class).eq(AlarmUser::getOpenId, weChatUser.getOpenid()));
+        return users.get(0);
+    }
+
     private List<AlarmUser> getAlarmByOpenId(String openId) {
         LambdaQueryWrapper<AlarmUser> queryWrapper = new LambdaQueryWrapper<>(AlarmUser.class)
                 .eq(AlarmUser::getOpenId, openId)

+ 3 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/bi/service/BiService.java

@@ -91,6 +91,9 @@ public class BiService {
         if (StrUtil.isNotBlank(monitorTargetPageParam.getName())) {
             queryWrapper.lambda().like(MonitorTarget::getName, monitorTargetPageParam.getName());
         }
+        if (StrUtil.isNotBlank(monitorTargetPageParam.getLeaders())) {
+            queryWrapper.lambda().like(MonitorTarget::getLeaders, monitorTargetPageParam.getLeaders());
+        }
         if (StrUtil.isNotBlank(monitorTargetPageParam.getRoomId())) {
             queryWrapper.lambda().eq(MonitorTarget::getRoomId, monitorTargetPageParam.getRoomId());
         }

+ 7 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java

@@ -129,4 +129,11 @@ public class MonitorTarget extends OrgEntity {
     @Schema(description = "延迟信息")
     @TableField(exist = false)
     private DelayInfo delayInfo;
+
+    /**
+     * 负责人
+     */
+    @TableField(value = "leaders", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "负责人")
+    private List<SensorAlarmUser> leaders = Lists.newArrayList();
 }

+ 7 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddParam.java

@@ -81,4 +81,11 @@ public class MonitorTargetAddParam {
     @Schema(description = "是否启用预警通知,0=启用,1=禁用")
     private String enabled;
 
+    /**
+     * 负责人
+     */
+    @TableField(value = "leaders", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "负责人")
+    private List<SensorAlarmUser> leaders = Lists.newArrayList();
+
 }

+ 7 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddWithRoomParam.java

@@ -88,4 +88,11 @@ public class MonitorTargetAddWithRoomParam {
     @Schema(description = "是否启用预警通知,0=启用,1=禁用")
     private String enabled;
 
+    /**
+     * 负责人
+     */
+    @TableField(value = "leaders", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "负责人")
+    private List<SensorAlarmUser> leaders = Lists.newArrayList();
+
 }

+ 7 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditParam.java

@@ -101,4 +101,11 @@ public class MonitorTargetEditParam {
      */
     @Schema(description = "是否启用预警通知,0=启用,1=禁用")
     private String enabled;
+
+    /**
+     * 负责人
+     */
+    @TableField(value = "leaders", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "负责人")
+    private List<SensorAlarmUser> leaders = Lists.newArrayList();
 }

+ 7 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditWithRoomParam.java

@@ -108,4 +108,11 @@ public class MonitorTargetEditWithRoomParam {
      */
     @Schema(description = "是否启用预警通知,0=启用,1=禁用")
     private String enabled;
+
+    /**
+     * 负责人
+     */
+    @TableField(value = "leaders", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "负责人")
+    private List<SensorAlarmUser> leaders = Lists.newArrayList();
 }

+ 6 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetPageParam.java

@@ -94,6 +94,12 @@ public class MonitorTargetPageParam {
 
     private String type;
 
+    /**
+     * 负责人
+     */
+    @Schema(description = "负责人")
+    private String leaders;
+
     // 计算分页偏移量
     public int getOffset() {
         return (current - 1) * size;  // 当前页 - 1 乘以每页条数

+ 3 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java

@@ -101,6 +101,9 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
             List<String> list = regionList.stream().map(MonitorTargetRegion::getMonitorTargetId).toList();
             queryWrapper.lambda().in(MonitorTarget::getId, list);
         }
+        if (StrUtil.isNotBlank(monitorTargetPageParam.getLeaders())) {
+            queryWrapper.lambda().like(MonitorTarget::getLeaders, monitorTargetPageParam.getLeaders());
+        }
         if (ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
             queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/impl/MonitorTargetRegionServiceImpl.java

@@ -239,7 +239,7 @@ public class MonitorTargetRegionServiceImpl extends ServiceImpl<MonitorTargetReg
         queryWrapper.eq(MonitorTargetRegion::getDeviceCode, deviceCode)
                 .eq(MonitorTargetRegion::getSensorRoute, sensorNo)
                 .eq(MonitorTargetRegion::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
-        MonitorTargetRegion monitorTargetRegion = getOne(queryWrapper);
+        MonitorTargetRegion monitorTargetRegion = getOne(queryWrapper,false);
         if (Objects.isNull(monitorTargetRegion)) {
             log.info("未找到设备编号 [{}] 和传感器编号 [{}] 对应的监控目标区域。", deviceCode, sensorNo);
             return null;

+ 15 - 1
snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/config/service/impl/DevConfigServiceImpl.java

@@ -40,6 +40,7 @@ import vip.xiaonuo.dev.modular.config.param.*;
 import vip.xiaonuo.dev.modular.config.service.DevConfigService;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -98,8 +99,21 @@ public class DevConfigServiceImpl extends ServiceImpl<DevConfigMapper, DevConfig
     public List<DevConfig> sysBaseList() {
         DevConfigListParam devConfigListParam = new DevConfigListParam();
         devConfigListParam.setCategory(DevConfigCategoryEnum.SYS_BASE.getValue());
-        return this.list(devConfigListParam).stream().filter(devConfig -> !devConfig.getConfigKey()
+        List<DevConfig> devConfigs = this.list(devConfigListParam).stream().filter(devConfig -> !devConfig.getConfigKey()
                 .equals(SNOWY_SYS_DEFAULT_PASSWORD_KEY)).collect(Collectors.toList());
+        List<DevConfig> thirdOauthConfigs =
+                 this.list(new LambdaQueryWrapper<DevConfig>()
+                        .eq(DevConfig::getCategory,DevConfigCategoryEnum.THIRD_OAUTH.getValue()));
+        DevConfig devConfig = new DevConfig();
+        devConfig.setCategory(DevConfigCategoryEnum.THIRD_OAUTH.getValue());
+        devConfig.setConfigKey("oauth");
+        devConfig.setConfigValue("false");
+        if(CollectionUtil.isNotEmpty(thirdOauthConfigs)){
+            Optional<DevConfig> blankOauthConfig = thirdOauthConfigs.stream().filter(c -> StrUtil.isBlank(c.getConfigValue())).findFirst();
+            devConfig.setConfigValue(Convert.toStr(blankOauthConfig.isEmpty()));
+        }
+        devConfigs.add(devConfig);
+        return devConfigs;
     }
 
     @Override

+ 5 - 2
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/user/service/impl/SysUserServiceImpl.java

@@ -187,7 +187,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Override
     public SysLoginUser getUserByAccount(String account) {
-        SysUser sysUser = this.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getAccount, account));
+        SysUser sysUser = this.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getAccount, account),false);
         if (ObjectUtil.isNotEmpty(sysUser)) {
             transService.transOne(sysUser);
             return BeanUtil.copyProperties(sysUser, SysLoginUser.class);
@@ -197,7 +197,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Override
     public SysLoginUser getUserByPhone(String phone) {
-        SysUser sysUser = this.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(phone)));
+        SysUser sysUser = this.getOne(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getPhone, phone).or()
+                .eq(SysUser::getPhone, CommonCryptogramUtil.doSm4CbcEncrypt(phone)),false);
         if (ObjectUtil.isNotEmpty(sysUser)) {
             transService.transOne(sysUser);
             return BeanUtil.copyProperties(sysUser, SysLoginUser.class);
@@ -1607,4 +1609,5 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
         return list(queryWrapper);
     }
+
 }

+ 77 - 3
snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/controller/WxMpController.java

@@ -3,6 +3,9 @@ package vip.xiaonuo.weixin.gongzhong.controller;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
@@ -13,10 +16,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
 import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
 import org.springframework.web.bind.annotation.*;
 import vip.xiaonuo.coldchain.modular.alarmuser.entity.AlarmUser;
+import vip.xiaonuo.coldchain.modular.alarmuser.enums.AlarmUserEnum;
 import vip.xiaonuo.coldchain.modular.alarmuser.service.AlarmUserService;
 import vip.xiaonuo.coldchain.modular.push.entity.WeChatUser;
 import vip.xiaonuo.coldchain.modular.push.utils.PushUtil;
+import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.dev.modular.config.service.DevConfigService;
+import vip.xiaonuo.sys.modular.user.entity.SysUser;
+import vip.xiaonuo.sys.modular.user.service.SysUserService;
 
 import java.util.List;
 import java.util.Objects;
@@ -33,6 +40,8 @@ public class WxMpController {
     private final AlarmUserService alarmUserService;
     private final DevConfigService devConfigService;
 
+    private final SysUserService sysUserService;
+
     @GetMapping("/auth")
     public String check(@RequestParam String signature, @RequestParam String timestamp, @RequestParam String nonce, @RequestParam String echostr) {
         log.info("\n接收到来自微信服务器的认证消息:[{}, {}, {}, {}]", signature, timestamp, nonce, echostr);
@@ -85,9 +94,9 @@ public class WxMpController {
     @SneakyThrows
     @PostMapping("/auth")
     public String wxEventListener(@RequestBody String param,
-                            @RequestParam(required = false) String signature,
-                            @RequestParam(required = false) String timestamp,
-                            @RequestParam(required = false) String nonce) {
+                                  @RequestParam(required = false) String signature,
+                                  @RequestParam(required = false) String timestamp,
+                                  @RequestParam(required = false) String nonce) {
         log.info("\n接收微信事件:[signature=[{}], timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
                 signature, timestamp, nonce, param);
 
@@ -97,4 +106,69 @@ public class WxMpController {
         // 将响应消息转换为xml格式返回
         return outMessage == null ? "" : outMessage.toXml();
     }
+
+
+    /**
+     * 微信公众号实名认证接口
+     *
+     */
+    @SneakyThrows
+    @GetMapping("/auth/check")
+    public CommonResult<AlarmUser> checkAndRegister(@RequestParam(required = false) String code,@RequestParam String name, @RequestParam String phone, @RequestParam String createOrg) {
+        AlarmUser alarmUser=
+                alarmUserService.getOne(new LambdaQueryWrapper<AlarmUser>()
+                        .eq(AlarmUser::getPhone, phone), false);
+        //用户通过微信公众号实名认证
+        if(StrUtil.isNotBlank(code)){
+            log.info("\n接收到来自微信服务器的授权消息:code={}", code);
+            try {
+                WeChatUser weChatUser = PushUtil.getUserInfo(code);
+                log.info("获取微信用户信息:{}", JSONUtil.toJsonStr(weChatUser));
+                List<AlarmUser> userList = alarmUserService.getByOpenId(weChatUser.getOpenid());
+                if (CollUtil.isNotEmpty(userList)) {
+                    //检查用户的组织机构
+                    alarmUser = userList.get(0);
+                    alarmUser.setNickName(weChatUser.getNickname());
+                } else {
+                    //没有用户信息则创建用户
+                    alarmUser = alarmUserService.subscribe(weChatUser,createOrg,name,phone);
+                }
+            }catch (Exception e){
+                log.error("获取微信用户失败!");
+            }
+        }
+        log.info("\n接收实名认证消息:name={},phone={},createOrg={}", name, phone,createOrg);
+        log.info("获取旧用户信息:{}", JSONUtil.toJsonStr(alarmUser));
+        if (alarmUser == null) {
+            //用户没有通过微信公众号认证 创建用户
+            alarmUser = new AlarmUser();
+            alarmUser.setNickName(name);
+            alarmUser.setCreateOrg(createOrg);
+            alarmUser.setPhone(phone);
+            alarmUser.setSubscribed(AlarmUserEnum.UNSUBSCRIBE.getValue());
+            SysUser sysUser = alarmUserService.createSysUser(alarmUser, createOrg, name);
+            alarmUser.setUserId(sysUser.getId());
+            alarmUser.setId(IdWorker.getIdStr());
+            alarmUserService.save(alarmUser);
+        } else {
+            //修改用户 只能修改真实姓名
+            if(StrUtil.isNotBlank(alarmUser.getOpenId())){
+                alarmUserService.update(new LambdaUpdateWrapper<AlarmUser>()
+                        .set(AlarmUser::getNickName, alarmUser.getNickName())
+                        .set(AlarmUser::getPhone, phone)
+                        .eq(AlarmUser::getId, alarmUser.getId()));
+                sysUserService.update(new LambdaUpdateWrapper<SysUser>()
+                        .set(SysUser::getName, name)
+                        .set(SysUser::getPhone, phone)
+                        .eq(SysUser::getId, alarmUser.getUserId()));
+            }else{
+                sysUserService.update(new LambdaUpdateWrapper<SysUser>()
+                        .set(SysUser::getName, name)
+                        .eq(SysUser::getId, alarmUser.getUserId()));
+            }
+
+        }
+        return CommonResult.result(true, alarmUser);
+
+    }
 }

+ 2 - 0
snowy-web-app/src/main/resources/_sql/zhangjian_20251125_update.sql

@@ -0,0 +1,2 @@
+ALTER TABLE `monitor_target`
+    ADD COLUMN `leaders` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '负责人' AFTER `hours`;