| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- package com.zsElectric.boot.business.service.impl;
- import cn.hutool.core.util.ObjectUtil;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.zsElectric.boot.business.mapper.FirmInfoMapper;
- import com.zsElectric.boot.business.mapper.UserAccountMapper;
- import com.zsElectric.boot.business.mapper.UserFirmMapper;
- import com.zsElectric.boot.business.model.entity.FirmInfo;
- import com.zsElectric.boot.business.model.entity.UserAccount;
- import com.zsElectric.boot.business.model.entity.UserFirm;
- import com.zsElectric.boot.business.model.vo.applet.AppletUserInfoVO;
- import com.zsElectric.boot.security.util.SecurityUtils;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.zsElectric.boot.business.mapper.UserInfoMapper;
- import com.zsElectric.boot.business.service.UserInfoService;
- import com.zsElectric.boot.business.model.entity.UserInfo;
- import com.zsElectric.boot.business.model.form.UserInfoForm;
- import com.zsElectric.boot.business.model.query.UserInfoQuery;
- import com.zsElectric.boot.business.model.vo.UserInfoVO;
- import com.zsElectric.boot.business.converter.UserInfoConverter;
- import java.math.BigDecimal;
- import java.util.Arrays;
- import java.util.List;
- import cn.hutool.core.lang.Assert;
- import cn.hutool.core.util.StrUtil;
- /**
- * 个人用户信息服务实现类
- *
- * @author zsElectric
- * @since 2025-12-12 10:27
- */
- @Service
- @RequiredArgsConstructor
- @Slf4j
- public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements UserInfoService {
- private final UserInfoConverter userInfoConverter;
- private final UserAccountMapper userAccountMapper;
- private final FirmInfoMapper firmInfoMapper;
- private final UserFirmMapper userFirmMapper;
- /**
- * 获取个人用户信息分页列表
- *
- * @param queryParams 查询参数
- * @return {@link IPage<UserInfoVO>} 个人用户信息分页列表
- */
- @Override
- public IPage<UserInfoVO> getUserInfoPage(UserInfoQuery queryParams) {
- Page<UserInfoVO> pageVO = this.baseMapper.getUserInfoPage(
- new Page<>(queryParams.getPageNum(), queryParams.getPageSize()),
- queryParams
- );
- return pageVO;
- }
-
- /**
- * 获取个人用户信息表单数据
- *
- * @param id 个人用户信息ID
- * @return 个人用户信息表单数据
- */
- @Override
- public UserInfoForm getUserInfoFormData(Long id) {
- UserInfo entity = this.getById(id);
- return userInfoConverter.toForm(entity);
- }
-
- /**
- * 新增个人用户信息
- *
- * @param formData 个人用户信息表单对象
- * @return 是否新增成功
- */
- @Override
- public boolean saveUserInfo(UserInfoForm formData) {
- UserInfo entity = userInfoConverter.toEntity(formData);
- return this.save(entity);
- }
-
- /**
- * 更新个人用户信息
- *
- * @param id 个人用户信息ID
- * @param formData 个人用户信息表单对象
- * @return 是否修改成功
- */
- @Override
- public boolean updateUserInfo(Long id,UserInfoForm formData) {
- UserInfo entity = userInfoConverter.toEntity(formData);
- return this.updateById(entity);
- }
-
- /**
- * 删除个人用户信息
- *
- * @param ids 个人用户信息ID,多个以英文逗号(,)分割
- * @return 是否删除成功
- */
- @Override
- public boolean deleteUserInfos(String ids) {
- Assert.isTrue(StrUtil.isNotBlank(ids), "删除的个人用户信息数据为空");
- // 逻辑删除
- List<Long> idList = Arrays.stream(ids.split(","))
- .map(Long::parseLong)
- .toList();
- return this.removeByIds(idList);
- }
- /**
- * 获取当前登录用户信息(小程序用)
- * <p>
- * 根据当前登录用户的userId获取用户信息
- * 注意:小程序登录后,token中的userId就是c_user_info表的ID
- *
- * @return 当前用户信息
- */
- @Override
- public AppletUserInfoVO getAppletUserInfo() {
- // 从 Spring Security 上下文获取当前登录用户的ID 注意:小程序用户token中的userId就是c_user_info表的ID
- Long userId = SecurityUtils.getUserId();
- if(ObjectUtil.isNotNull(userId)) {
- return this.baseMapper.getAppletUserInfo(userId);
- }
- return null;
- }
- @Override
- public Boolean userBinding(Long userId, Long firmId) {
- UserInfo userInfo = this.getById(userId);
- FirmInfo firmInfo = firmInfoMapper.selectById(firmId);
- if (ObjectUtil.isNotNull(userInfo) && ObjectUtil.isNotNull(firmInfo)) {
- //删除用户旧绑定信息
- userFirmMapper.delete(Wrappers.lambdaQuery(UserFirm.class).eq(UserFirm::getUserId, userId));
- UserFirm userFirm = new UserFirm();
- userFirm.setUserId(userId);
- userFirm.setPhone(userInfo.getPhone());
- userFirm.setFirmId(firmId);
- userFirm.setType(1);
- int insert = userFirmMapper.insert(userFirm);
- if(insert > 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }
- log.info("用户不存在或企业不存在");
- return Boolean.FALSE;
- }
- /**
- * 根据openid获取用户信息
- *
- * @param openid 手机号
- * @return 用户信息,不存在返回null
- */
- @Override
- public UserInfo getUserInfoByOpenid(String openid) {
- if (StrUtil.isBlank(openid)) {
- return null;
- }
- return this.getOne(
- new LambdaQueryWrapper<UserInfo>()
- .eq(UserInfo::getOpenid, openid)
- );
- }
- /**
- * 根据手机号注册或更新用户(小程序用)
- * <p>
- * 如果用户不存在则创建,存在则更新openid
- *
- * @param phone 手机号
- * @param openId 微信openid(可为null)
- * @return 用户信息
- */
- @Override
- public UserInfo registerOrUpdateUserByPhone(String phone, String openId) {
- if (StrUtil.isBlank(phone)) {
- log.warn("注册用户失败:手机号为空");
- return null;
- }
- // 查询用户是否已存在
- UserInfo existingUser = getUserInfoByOpenid(openId);
- if (existingUser != null) {
- log.info("用户已存在,ID: {}, 手机号: {},openid: {}", existingUser.getId(), phone,openId);
-
- // 如果提供了phone且与现有phone不同,则更新
- if (StrUtil.isNotBlank(phone) && !openId.equals(existingUser.getOpenid())) {
- log.info("更新用户phone,ID: {}", existingUser.getId());
- existingUser.setPhone(phone);
- this.updateById(existingUser);
- }
-
- return existingUser;
- }
- // 用户不存在,创建新用户
- log.info("创建新用户,手机号: {}, openId: {}", phone, openId);
- UserInfo newUser = new UserInfo();
- newUser.setPhone(phone);
- newUser.setOpenid(openId);
- newUser.setNickName("微信用户_" + phone.substring(phone.length() - 4));
- newUser.setIntegralNum(java.math.BigDecimal.ZERO);
-
- boolean saved = this.save(newUser);
- if (!saved) {
- log.error("保存用户失败,手机号: {}", phone);
- return null;
- }
- log.info("用户创建成功,ID: {}, 手机号: {}", newUser.getId(), phone);
- //创建用户账户
- UserAccount userAccount = new UserAccount();
- userAccount.setUserId(newUser.getId());
- userAccount.setBalance(BigDecimal.ZERO);
- userAccountMapper.insert(userAccount);
- return newUser;
- }
- }
|