package com.gk.hotwork.Service.ServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gk.hotwork.Domain.*; import com.gk.hotwork.Domain.Exception.BusinessException; import com.gk.hotwork.Domain.Utils.*; import com.gk.hotwork.Domain.Vo.AccountUserVo; import com.gk.hotwork.Domain.Vo.RegisterVo; import com.gk.hotwork.Domain.Vo.UserVo; import com.gk.hotwork.Mapper.UserInfoMapper; import com.gk.hotwork.Service.*; import org.apache.catalina.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; @Service("UserService") public class UserServiceImpl extends ServiceImpl implements UserService { @Autowired private UserInfoMapper userInfoMapper; @Autowired private RoleService roleService; @Autowired private UserFaceService userFaceService; @Autowired private UserRolesService userRolesService; @Autowired private CompanyService companyService; @Autowired private DepartmentService departmentService; @Value("${locationUrl}") private String url; @Value("${locationUsername}") private String username; @Value("${locationPassword}") private String password; @Value("${slice.size}") private Integer sliceSize; @Override public void selectUserDataGrid(PageInfo pageInfo) { Page page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize()); List orderItems = new ArrayList<>(); OrderItem orderItem = new OrderItem(); if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) { orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending")); orderItem.setColumn(pageInfo.getSort()); }else { orderItem.setAsc(false); orderItem.setColumn("createddate"); } orderItems.add(orderItem); page.setOrders(orderItems); List list = userInfoMapper.selectUserDataGrid(page,pageInfo.getCondition()); for (UserVo userVo : list) { List roleInfoList = roleService.selectRoleByUser(userVo.getId()); userVo.setRoles(roleInfoList); UserFace userFace = userFaceService.selectByUserId(userVo.getId()); if (userFace != null) userVo.setCode(userFace.getCode()); } pageInfo.setResult(list); pageInfo.setTotalCount(page.getTotal()); } @Override public UserInfo selectByUser(String username) { UserInfo userInfo = new UserInfo(); userInfo.setUsername(username); userInfo.setStatus((byte)1); QueryWrapper wrapper = new QueryWrapper<> (userInfo); return userInfoMapper.selectOne(wrapper); } @Override public List selectUserInfo(Long id, String username) { return userInfoMapper.selectUserInfo(id,username); } @Override public boolean checkUserById(String userId) { if (StringUtils.isBlank(userId)){ return false; } UserInfo userInfo = userInfoMapper.selectById(userId); return userInfo != null; } @Override public UserVo selectUserVoByName(String examtype,String username) { return userInfoMapper.selectUserVoByName(examtype,username); } @Override public void deleteById(Long id) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(UserInfo::getStatus, (byte) 0) .eq(UserInfo::getId, id); this.update(updateWrapper); } @Override public void recoverOneById(Long id) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(UserInfo::getStatus, (byte) 1) .eq(UserInfo::getId, id); this.update(updateWrapper); } @Override public UserInfo selectByRealName(Long id,String realname) { return userInfoMapper.selectByRealName(id,realname); } @Override public UserInfo getByRealName(String realname, String depName) { return userInfoMapper.getByRealName(realname, depName); } @Override public UserInfo selectByIdCard(Long id,String idcard) { return userInfoMapper.selectByIdCard(id, idcard); } @Override public List selectNotUpload() { return userInfoMapper.selectNotUpload(); } @Override public List selectAll(HashMap condition) { return userInfoMapper.selectAll(condition); } @Override public List selectByCompany(String company) { LambdaQueryWrapperwrapper = new LambdaQueryWrapper<>(); wrapper.eq(UserInfo::getCompany,company); return baseMapper.selectList(wrapper); } @Override public Msg saveEmployee(String realname, String empNo, String deviceNo) throws Exception { Map params = new HashMap<>(); params.put("username", username); params.put("password", password); params.put("empName", realname); params.put("empNo", empNo); params.put("deviceNo", deviceNo); String path = url + "/open/information/saveEmployee.do"; return LocationUtils.net(params,path); } @Override public Msg setCardValid(String isValid, String cardId) throws Exception { Map params = new HashMap<>(); params.put("username", username); params.put("password", password); params.put("id", cardId); params.put("isvalid", isValid); String path = url + "/open/information/updEmployeeState.do"; return LocationUtils.net(params,path); } @Override public Msg delEmployee(String cardId) throws Exception { Map params = new HashMap<>(); params.put("username", username); params.put("password", password); params.put("id", cardId); String path = url + "/open/information/delEmployee.do"; return LocationUtils.net(params,path); } @Override public Msg getRealGps() throws Exception { Map params = new HashMap<>(); params.put("username", username); params.put("password", password); String path = url + "/open/information/getRealGps.do"; return LocationUtils.net(params,path); } @Override public UserInfo selectUserByCard(String deviceNo, String empNo, String name) { UserInfo userInfo = new UserInfo(); userInfo.setDeviceNo(deviceNo); userInfo.setEmpNo(empNo); userInfo.setRealname(name); userInfo.setStatus((byte)1); QueryWrapper wrapper = new QueryWrapper<> (userInfo); return userInfoMapper.selectOne(wrapper); } @Override public List getGps(String username) { LambdaQueryWrapperwrapper = new LambdaQueryWrapper<>(); UserInfo userInfo = new UserInfo(); userInfo.setStatus((byte)1); wrapper.ne(UserInfo::getDeviceNo, ""); wrapper.eq(UserInfo::getStatus,(byte)1); if (StringUtils.isNotBlank(username)){ wrapper.eq(UserInfo::getRealname,username); } return userInfoMapper.selectList(wrapper); } /** * @Description: 所有用户大小 * @date 2021/12/27 10:48 */ @Override public int selectUserSize() { return userInfoMapper.selectCount( new LambdaQueryWrapper<>() ); } @Override public UserInfo getByDeviceNo(String uid) { if (StringUtils.isBlank(uid)) throw new BusinessException("接收设备uid为空"); return userInfoMapper.selectOne( new LambdaQueryWrapper() .eq(UserInfo::getDeviceNo,uid) .eq(UserInfo::getStatus,1)); } @Override public IPage selectUserPageInDepartment(Page page, Map filter, UserInfo user) { List userVos = userInfoMapper.selectUserDataGrid(page, filter); page.setRecords(userVos); return page; } @Override public List getUserList() { return userInfoMapper.getUserList(); } @Override public UserInfo examForegroundLogin(String username, String password) { if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) { throw new BusinessException("账号密码不能为空"); } if (username.length() != 11) throw new BusinessException("请输入11位手机号"); UserInfo userInfo = this.selectByUser(username); if (userInfo == null) throw new BusinessException("账号不存在"); if (!MD5Utils.encode(password).equals(userInfo.getPassword())) throw new BusinessException("密码不正确"); if (userInfo.getDepartment() != null) { DepartmentInfo de = departmentService.getById(userInfo.getDepartment()); if (de != null) { userInfo.setDepartmentname(de.getDepartment()); } } userInfo.setPassword(null); return userInfo; } @Override public Integer selectCountForExam(String name, String idno, String tel, String department,String company) { Map params = new HashMap<>(); params.put("name", name); params.put("idno", idno); params.put("tel", tel); params.put("department", department); params.put("company", company); return userInfoMapper.selectCountForExam(params); } @Override public List selectPageForExam(String name, String idno, String tel, String department, String company, Integer first, Integer pageSize) { Map params = new HashMap<>(); params.put("name", name); params.put("idno", idno); params.put("tel", tel); params.put("department", department); params.put("company", company); params.put("first", first); params.put("pageSize", pageSize); return userInfoMapper.selectPageForExam(params); } @Override @Transactional public void register(RegisterVo registerVo) { if (StringUtils.isBlank(registerVo.getRealname())) throw new BusinessException("用户姓名不能为空"); if (StringUtils.isBlank(registerVo.getUsername()) ||registerVo.getUsername().length() != 11) throw new BusinessException("手机号不为11"); if (StringUtils.isBlank(registerVo.getPassword())) throw new BusinessException("密码不能为空"); if (StringUtils.isBlank(registerVo.getCompany())) throw new BusinessException("单位不能为空"); if (registerVo.getCompanyid() == null) throw new BusinessException("单位参数不能为空"); CompanyInfo company = companyService.getById(registerVo.getCompanyid()); if (company == null) throw new BusinessException("单位不存在"); if (StringUtils.isBlank(registerVo.getIdcard())|| !IdCardUtil.strongVerifyIdNumber(registerVo.getIdcard())) throw new BusinessException("身份证非法规则"); if (this.phoneIsOccupied(registerVo.getRealname())) throw new BusinessException("手机号已经被占用"); if (this.idCardIsOccupied(registerVo.getIdcard())) throw new BusinessException("身份证已经被占用"); int count = userInfoMapper.selectCount(new LambdaQueryWrapper<>()); int slice = (count + 1) % sliceSize; UserInfo userInfo = new UserInfo(); userInfo.setRealname(registerVo.getRealname()); userInfo.setPassword(MD5Utils.encode(registerVo.getPassword())); userInfo.setUsername(registerVo.getUsername()); userInfo.setIdcard(registerVo.getIdcard()); userInfo.setJob(registerVo.getJob()); userInfo.setIsdel((byte) 0); userInfo.setStatus(((byte) 1)); userInfo.setCreatedby(userInfo.getRealname()); userInfo.setCompany(company.getCompany()); userInfo.setCompanyid(company.getId()); userInfo.setDepartment(registerVo.getDepartment()); userInfo.setCreateddate(new Date()); userInfo.setType(3); userInfo.setSlice(slice == 0 ? sliceSize + "" : slice + ""); this.save(userInfo); //默认普通员工角色 UserRolesInfo ur = new UserRolesInfo(); ur.setUserid(userInfo.getId()); RoleInfo role = roleService.getOne(new LambdaQueryWrapper().eq(RoleInfo::getName, "员工")); if (role == null) throw new BusinessException("请查询角色是否存在员工"); ur.setRoleid(role.getId()); userRolesService.save(ur); } @Override public void pwdChange(String username, String password, String phone) { if (StringUtils.isBlank(username)) throw new BusinessException("用户姓名不能为空"); if (StringUtils.isBlank(password)) throw new BusinessException("密码不能为空"); if (StringUtils.isBlank(phone)) throw new BusinessException("手机号不能为空"); if (phone.length() != 11) throw new BusinessException("手机号不为11位"); UserInfo userInfo = this.selectByUser(phone); if (userInfo == null) throw new BusinessException("用户不存在"); if (username.equals(userInfo.getRealname())) { userInfo.setLastmodifiedby(username); userInfo.setLastmodifieddate(new Date()); userInfo.setPassword(MD5Utils.encode(password)); this.updateById(userInfo); }else{ throw new BusinessException("用户信息不匹配"); } } @Override public AccountUserVo getAccount(String username, String department) { if (StringUtils.isBlank(username)) throw new BusinessException("用户姓名不能为空"); AccountUserVo accountUserVo = userInfoMapper.getAccountByUsername(username); if (accountUserVo == null){ if (StringUtils.isBlank(department)){ accountUserVo = userInfoMapper.getAccountByUsername("admin"); }else { accountUserVo = userInfoMapper.getAccountByDepartment(department); } } return accountUserVo; } /** * @Description: 手机号是否被占用 * @date 2022/5/11 9:38 */ @Override public boolean phoneIsOccupied(String phone) { if (StringUtils.isBlank(phone)) throw new BusinessException("手机号为空"); Integer count = userInfoMapper.selectCount(new LambdaQueryWrapper() .eq(UserInfo::getUsername, phone).eq(UserInfo::getStatus, 1)); return count > 0; } /** * @Description: 身份证是否被占用 * @date 2022/5/11 9:40 */ @Override public boolean idCardIsOccupied(String idCard) { if (StringUtils.isBlank(idCard)) throw new BusinessException("身份证号为空"); Integer count = userInfoMapper.selectCount(new LambdaQueryWrapper() .eq(UserInfo::getIdcard, idCard).eq(UserInfo::getStatus, 1)); return count > 0; } /** * @Description: 考试后台登录 * @date 2022/5/12 9:34 */ @Override public UserInfo examBackgroundLogin(String username, String password) { if (StringUtils.isBlank(username)) throw new BusinessException("用户姓名不能为空"); if (StringUtils.isBlank(password)) throw new BusinessException("密码不能为空"); //查找admin type = 1 的用户信息 UserInfo admin = userInfoMapper.selectOne( new LambdaQueryWrapper() .eq(UserInfo::getUsername, username) .eq(UserInfo::getType, 1) .eq(UserInfo::getStatus, 1)); if (admin == null) throw new BusinessException("账户不存在"); if (!MD5Utils.encode(password).equals(admin.getPassword())) throw new BusinessException("密码输入错误"); return admin; } /** 查询by姓名 */ @Override public UserInfo getUserByRealName(String trim) { return userInfoMapper.getUserByRealName(trim); } /** 查询by姓名 and dep */ @Override public UserInfo getUserByRealNameAndDep(String name, Long dep) { return userInfoMapper.getUserByRealNameAndDep(name, dep); } /** 查询by Id */ @Override public UserInfo getByUserId(Long userId) { return userInfoMapper.getByUserId(userId); } }