hejianhao
2026-09-01 540ef65220e05b75c183cd3554aaeb554927600a
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java
@@ -2,28 +2,25 @@
import cn.idev.excel.FastExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tcm.training.admin.common.DateTimes;
import com.tcm.training.admin.common.PageResponse;
import com.tcm.training.admin.common.PhoneMasker;
import com.tcm.training.admin.live.entity.Clinic;
import com.tcm.training.admin.member.entity.AppUser;
import com.tcm.training.admin.live.mapper.ClinicMapper;
import com.tcm.training.admin.member.excel.MemberUserExcelRow;
import com.tcm.training.admin.member.dto.UserBatchClinicUpdateRequest;
import com.tcm.training.admin.member.dto.UserResetPasswordRequest;
import com.tcm.training.admin.member.dto.UserStatusRequest;
import com.tcm.training.admin.member.dto.UserUpdateRequest;
import com.tcm.training.admin.member.entity.AppUser;
import com.tcm.training.admin.member.excel.MemberUserExcelRow;
import com.tcm.training.admin.member.excel.UserExcelRow;
import com.tcm.training.admin.member.mapper.UserMapper;
import com.tcm.training.admin.member.row.UserDetailRow;
import com.tcm.training.admin.member.row.UserListRow;
import com.tcm.training.admin.member.vo.ClinicInUserVO;
import com.tcm.training.admin.member.vo.ClinicOptionVO;
import com.tcm.training.admin.member.vo.UserDetailVO;
import com.tcm.training.admin.member.vo.UserListItemVO;
import com.tcm.training.admin.member.vo.UserStatusVO;
import com.tcm.training.admin.member.vo.WechatBindingVO;
import com.tcm.training.admin.member.vo.*;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -89,7 +86,7 @@
            UserListItemVO item = new UserListItemVO();
            item.setId(row.getId());
            item.setNickname(row.getNickname());
            item.setPhone(PhoneMasker.mask(row.getPhone()));
            item.setPhone(row.getPhone());
            item.setAvatar(row.getAvatar());
            item.setType(row.getType());
            item.setClinicName(row.getClinicName());
@@ -199,15 +196,34 @@
    @Transactional
    public UserDetailVO unbindWechat(Long id) {
        AppUser user = requireUser(id);
        user.setWechatOpenid(null);
        user.setWechatNickname(null);
        user.setWechatAvatar(null);
        user.setWechatBoundAt(null);
        userMapper.updateById(user);
        requireUser(id);
        userMapper.update(null, new LambdaUpdateWrapper<AppUser>()
                .eq(AppUser::getId, id)
                .set(AppUser::getWechatOpenid, null)
                .set(AppUser::getWechatNickname, null)
                .set(AppUser::getWechatAvatar, null)
                .set(AppUser::getWechatBoundAt, null));
        return detail(id);
    }
    @Transactional
    public void batchUpdateClinic(UserBatchClinicUpdateRequest req) {
        Clinic clinic = clinicMapper.selectById(req.getClinicId());
        if (clinic == null || Integer.valueOf(1).equals(clinic.getDeleted())) {
            throw new IllegalArgumentException("诊所不存在");
        }
        Long userCount = userMapper.selectCount(new LambdaQueryWrapper<AppUser>()
                .in(AppUser::getId, req.getUserIds())
                .eq(AppUser::getDeleted, 0));
        if (userCount != req.getUserIds().size()) {
            throw new IllegalArgumentException("部分用户不存在");
        }
        userMapper.update(null, new LambdaUpdateWrapper<AppUser>()
                .in(AppUser::getId, req.getUserIds())
                .eq(AppUser::getDeleted, 0)
                .set(AppUser::getClinicId, req.getClinicId()));
    }
    public List<ClinicOptionVO> listClinicOptions() {
        List<Clinic> clinics = clinicMapper.selectList(new LambdaQueryWrapper<Clinic>()
                .eq(Clinic::getDeleted, 0)