| | |
| | | import com.mzl.flower.dto.request.customer.UpdateCustomerDTO; |
| | | import com.mzl.flower.dto.request.system.*; |
| | | import com.mzl.flower.dto.response.current.CurrentUserDTO; |
| | | import com.mzl.flower.dto.response.customer.CustomerDTO; |
| | | import com.mzl.flower.dto.response.system.*; |
| | | import com.mzl.flower.entity.customer.Customer; |
| | | import com.mzl.flower.entity.point.CustomerPoint; |
| | | import com.mzl.flower.entity.system.*; |
| | | import com.mzl.flower.enums.TrueOrFalseEnum; |
| | | import com.mzl.flower.mapper.customer.CustomerMapper; |
| | | import com.mzl.flower.mapper.point.CustomerPointMapper; |
| | | import com.mzl.flower.mapper.system.*; |
| | | import com.mzl.flower.service.customer.CustomerService; |
| | |
| | | import org.springframework.util.ObjectUtils; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | |
| | | |
| | | @Autowired |
| | | private CustomerPointMapper customerPointMapper; |
| | | |
| | | @Autowired |
| | | private CustomerMapper customerMapper; |
| | | |
| | | @Autowired |
| | | private StationService stationService; |
| | | |
| | |
| | | RedissonClient redissonClient; |
| | | |
| | | public User findUserByOpenId(String openId, String sessionKey, String unionId |
| | | , String imgUrl, String nickname,String userType){ |
| | | , String imgUrl, String nickname, String userType) { |
| | | List<String> userTypes = new ArrayList<>(); |
| | | userTypes.add(userType); |
| | | List<User> userList = userMapper.getByOpenID(openId,userTypes); |
| | | if(CollectionUtils.isEmpty(userList)){ |
| | | List<User> userList = userMapper.getByOpenID(openId, userTypes); |
| | | if (CollectionUtils.isEmpty(userList)) { |
| | | throw new ValidationException("请注册账号后至\"个人中心-绑定微信\"后再使用微信登录"); |
| | | } |
| | | User user=userList.get(0); |
| | | User user = userList.get(0); |
| | | // user.setNickName(nickname); |
| | | user.setNickName(user.getLoginName()); |
| | | user.setPicture(imgUrl); |
| | |
| | | userMapper.updateById(user); |
| | | UserWechat wechat = wechatMapper.selectOne(new LambdaQueryWrapper<UserWechat>() |
| | | .eq(UserWechat::getOpenId, openId) |
| | | .eq(UserWechat::getUserId,user.getId())); |
| | | if(wechat == null){ |
| | | .eq(UserWechat::getUserId, user.getId())); |
| | | if (wechat == null) { |
| | | throw new ValidationException("请至\"个人中心-绑定微信\"后再使用微信登录"); |
| | | } |
| | | wechat.setOpenId(openId); |
| | |
| | | // 查看微信是否已经绑定过用户 |
| | | |
| | | User user = userMapper.selectById(userId); |
| | | if(ObjectUtils.isEmpty(user)){ |
| | | if (ObjectUtils.isEmpty(user)) { |
| | | throw new ValidationException("当前用户不存在"); |
| | | } |
| | | |
| | | |
| | | List<User> userList=wechatMapper.selectUserByOpenId(openId,user.getType()); |
| | | if(!CollectionUtils.isEmpty(userList)){ |
| | | List<User> userList = wechatMapper.selectUserByOpenId(openId, user.getType()); |
| | | if (!CollectionUtils.isEmpty(userList)) { |
| | | throw new ValidationException("该微信已绑定其他账号"); |
| | | } |
| | | |
| | | UserWechat wechat = wechatMapper.selectOne(new LambdaQueryWrapper<UserWechat>() |
| | | .eq(UserWechat::getUserId,userId)); |
| | | if(wechat == null){ |
| | | .eq(UserWechat::getUserId, userId)); |
| | | if (wechat == null) { |
| | | wechat = new UserWechat(); |
| | | wechat.setId(UUIDGenerator.getUUID()); |
| | | wechat.setUserId(userId); |
| | |
| | | wechat.setSessionKey(sessionKey); |
| | | wechat.setRealName(dto.getRealName()); |
| | | wechatMapper.insert(wechat); |
| | | }else{ |
| | | } else { |
| | | wechat.setOpenId(openId); |
| | | wechat.setUnionId(unionId); |
| | | wechat.setSessionKey(sessionKey); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | public User getUserByThirdId(String thirdId){ |
| | | public User getUserByThirdId(String thirdId) { |
| | | User u = userMapper.selectOne(new QueryWrapper<User>().eq("third_id", thirdId)); |
| | | if(u == null){ |
| | | if (u == null) { |
| | | throw new ValidationException("用户不存在"); |
| | | } |
| | | |
| | |
| | | |
| | | //获取用户信息 |
| | | User user = getUserById(userId); |
| | | if(user == null){ |
| | | if (user == null) { |
| | | throw new ValidationException("用户不存在"); |
| | | } |
| | | result.setLoginName(user.getLoginName()); |
| | |
| | | |
| | | //根据用户角色获取用户菜单 |
| | | List<MenuTreeDTO> menus = null; |
| | | if(Constants.USER_TYPE.admin.name().equals(user.getType())){ |
| | | if (Constants.USER_TYPE.admin.name().equals(user.getType())) { |
| | | if (roleIds.contains(Constants.ROLE_SYS_ADMIN)) { |
| | | menus = menuMapper.selectListOrderBySeq(); |
| | | } else if (roleIds.size() > 0) { |
| | | menus = menuMapper.selectOperationList(roleIds); |
| | | } |
| | | }else if(Constants.USER_TYPE.partner.name().equals(user.getType())){ |
| | | } else if (Constants.USER_TYPE.partner.name().equals(user.getType())) { |
| | | menus = partnerMenuMapper.selectListOrderBySeq(); |
| | | } |
| | | if(menus != null) { |
| | | if (menus != null) { |
| | | for (MenuTreeDTO menu : menus) { |
| | | menu.setPath(menu.getMenuHref()); |
| | | menu.setName(menu.getMenuName()); |
| | |
| | | // result.setMenuList(menuList); |
| | | result.setId(userId); |
| | | |
| | | if(Constants.USER_TYPE.customer.name().equals(user.getType())){ |
| | | if (Constants.USER_TYPE.customer.name().equals(user.getType())) { |
| | | result.setCustomerDTO(customerService.getCurrentCustomer()); |
| | | //查询积分 |
| | | CustomerPoint customerPoint = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>() |
| | | .eq(CustomerPoint::getUserId, userId)); |
| | | if(customerPoint == null){ |
| | | if (customerPoint == null) { |
| | | result.setCurrentPoint(0); |
| | | }else{ |
| | | Integer currentPoint =customerPoint.getTotalPoint()-customerPoint.getUsedPoint()-customerPoint.getExpiredPoint()-customerPoint.getDeductionPoint(); |
| | | result.setCurrentPoint(currentPoint>=0?currentPoint:0); |
| | | } else { |
| | | Integer currentPoint = customerPoint.getTotalPoint() - customerPoint.getUsedPoint() - customerPoint.getExpiredPoint() - customerPoint.getDeductionPoint(); |
| | | result.setCurrentPoint(currentPoint >= 0 ? currentPoint : 0); |
| | | } |
| | | }else if(Constants.USER_TYPE.supplier.name().equals(user.getType())){ |
| | | } else if (Constants.USER_TYPE.supplier.name().equals(user.getType())) { |
| | | result.setSupplierDTO(supplierService.getCurrentSupplier()); |
| | | }else if(Constants.USER_TYPE.partner.name().equals(user.getType())){ |
| | | } else if (Constants.USER_TYPE.partner.name().equals(user.getType())) { |
| | | result.setPartnerDTO(partnerService.getCurrentPartner()); |
| | | }else if (Constants.USER_TYPE.admin.name().equals(user.getType())){ |
| | | } else if (Constants.USER_TYPE.admin.name().equals(user.getType())) { |
| | | result.setMainWarehouse(stationService.getMainWarehouse(user.getId())); |
| | | } |
| | | result.setBindWechat(wechatMapper.selectCount(new LambdaQueryWrapper<UserWechat>() |
| | |
| | | return result; |
| | | } |
| | | |
| | | public User getUserById(String id){ |
| | | public User getUserById(String id) { |
| | | return userMapper.selectById(id); |
| | | } |
| | | |
| | | public User loginUser(String username){ |
| | | public User loginUser(String username) { |
| | | return userMapper.loginUser(username); |
| | | } |
| | | |
| | |
| | | return userMapper.getActiveUser(loginName, userTypes); |
| | | } |
| | | |
| | | public void updateUserInfo(UserInfoDTO dto){ |
| | | public void updateUserInfo(UserInfoDTO dto) { |
| | | String id = SecurityUtils.getUserId(); |
| | | User user = getUserById(id); |
| | | |
| | |
| | | String tel = dto.getTel(); |
| | | if (StringUtils.isEmpty(user.getTel()) || !user.getTel().equals(tel)) { |
| | | User u = findByLoginName(tel, userTypes); |
| | | if(u != null){ |
| | | if (u != null) { |
| | | throw new ValidationException("手机号已存在"); |
| | | } |
| | | user.setTel(dto.getTel()); |
| | |
| | | |
| | | /** |
| | | * 新增用户 |
| | | * |
| | | * @param dto |
| | | * @return |
| | | */ |
| | |
| | | |
| | | String tel = dto.getTel(); |
| | | User u = findByLoginName(tel, userTypes); |
| | | if(u != null){ |
| | | if (u != null) { |
| | | throw new ValidationException("手机号已存在"); |
| | | } |
| | | |
| | | String loginName = dto.getLoginName(); |
| | | u = findByLoginName(loginName, userTypes); |
| | | if(u != null){ |
| | | if (u != null) { |
| | | throw new ValidationException("账号已存在"); |
| | | } |
| | | |
| | |
| | | addRole(dto.getRoleIds(), user.getId()); |
| | | |
| | | //添加或更新员工信息 |
| | | addEmployee(dto.getEmployeeDTO(),user.getId()); |
| | | addEmployee(dto.getEmployeeDTO(), user.getId()); |
| | | return user; |
| | | } |
| | | |
| | |
| | | Employee employee = employeeMapper.selectOne(new LambdaQueryWrapper<Employee>().eq(Employee::getUserId, userId)); |
| | | if (employee == null) { |
| | | employee = new Employee(); |
| | | BeanUtils.copyProperties(dto,employee); |
| | | BeanUtils.copyProperties(dto, employee); |
| | | employee.setUserId(userId); |
| | | employee.create(SecurityUtils.getUserId()); |
| | | employeeMapper.insert(employee); |
| | | }else { |
| | | BeanUtils.copyProperties(dto,employee); |
| | | } else { |
| | | BeanUtils.copyProperties(dto, employee); |
| | | employee.setUserId(userId); |
| | | employee.update(SecurityUtils.getUserId()); |
| | | employeeMapper.updateById(employee); |
| | |
| | | String roleDesc = userMapper.selectUserRoleDesc(id); |
| | | result.setRoleDesc(roleDesc); |
| | | Employee employee = employeeMapper.selectOne(new LambdaQueryWrapper<Employee>().eq(Employee::getUserId, id)); |
| | | if(employee!=null){ |
| | | if (employee != null) { |
| | | EmployeeDTO employeeDTO = new EmployeeDTO(); |
| | | BeanUtils.copyProperties(employee,employeeDTO); |
| | | BeanUtils.copyProperties(employee, employeeDTO); |
| | | result.setEmployeeDTO(employeeDTO); |
| | | } |
| | | } |
| | |
| | | |
| | | /** |
| | | * 更新用户 |
| | | * |
| | | * @param dto |
| | | */ |
| | | public void updateUser(UpdateUserDTO dto) { |
| | |
| | | user.setPassword(passwordEncoder.encode(dto.getPassword())); |
| | | } |
| | | |
| | | BeanUtils.copyProperties(dto, user,"loginName", "tel", "password", "type"); |
| | | BeanUtils.copyProperties(dto, user, "loginName", "tel", "password", "type"); |
| | | user.update(SecurityUtils.getUserId()); |
| | | userMapper.updateById(user); |
| | | |
| | | if(Constants.USER_TYPE.admin.name().equals(user.getType())) { |
| | | if (Constants.USER_TYPE.admin.name().equals(user.getType())) { |
| | | //删除用户的角色信息 |
| | | userRoleMapper.delete(new QueryWrapper<UserRole>().eq("user_id", id)); |
| | | //给用户添加角色 |
| | |
| | | } |
| | | |
| | | //添加或更新员工信息 |
| | | addEmployee(dto.getEmployeeDTO(),user.getId()); |
| | | addEmployee(dto.getEmployeeDTO(), user.getId()); |
| | | } |
| | | |
| | | private void checkAndSetUserLoginInfo(User user, String tel, String loginName){ |
| | | private void checkAndSetUserLoginInfo(User user, String tel, String loginName) { |
| | | List<String> userTypes = new ArrayList<>(); |
| | | userTypes.add(user.getType()); |
| | | |
| | | if (StringUtils.isEmpty(user.getTel()) || !user.getTel().equals(tel)) { |
| | | User u = findByLoginName(tel, userTypes); |
| | | if(u != null){ |
| | | if (u != null) { |
| | | throw new ValidationException("手机号已存在"); |
| | | } |
| | | user.setTel(tel); |
| | | } |
| | | |
| | | if(StringUtils.isNotEmpty(loginName)) { |
| | | if (StringUtils.isNotEmpty(loginName)) { |
| | | if (StringUtils.isEmpty(user.getLoginName()) || !user.getLoginName().equals(loginName)) { |
| | | User u = findByLoginName(loginName, userTypes); |
| | | if (u != null) { |
| | |
| | | } |
| | | } |
| | | |
| | | public void deleteUser(String id){ |
| | | public void deleteUser(String id) { |
| | | User user = getUserById(id); |
| | | user.setDeleted(true); |
| | | user.update(SecurityUtils.getUserId()); |
| | |
| | | userMapper.updateById(user); |
| | | } |
| | | |
| | | public void changePassword(ChangePasswordDTO dto){ |
| | | public void changePassword(ChangePasswordDTO dto) { |
| | | String userId = SecurityUtils.getUserId(); |
| | | User user = getUserById(userId); |
| | | if(StringUtils.isNotBlank(dto.getOldPassword())){ |
| | | if(!passwordEncoder.matches(dto.getOldPassword(), user.getPassword())){ |
| | | if (StringUtils.isNotBlank(dto.getOldPassword())) { |
| | | if (!passwordEncoder.matches(dto.getOldPassword(), user.getPassword())) { |
| | | throw new ValidationException("原密码错误,无权修改"); |
| | | } |
| | | } |
| | |
| | | userMapper.updateById(user); |
| | | } |
| | | |
| | | public void setUserStatus(String id, String status){ |
| | | public void setUserStatus(String id, String status) { |
| | | User user = getUserById(id); |
| | | user.setStatus(status); |
| | | user.update(SecurityUtils.getUserId()); |
| | |
| | | |
| | | |
| | | public List<User> getVipGradeUserList(String getVipGrade) { |
| | | QueryWrapper<User> queryWrapper=new QueryWrapper<>(); |
| | | QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.lambda().eq(User::getDeleted, TrueOrFalseEnum.FALSE.isFlag()) |
| | | .eq(User::getVipGrade,getVipGrade); |
| | | .eq(User::getVipGrade, getVipGrade); |
| | | return userMapper.selectList(queryWrapper); |
| | | } |
| | | |
| | | /** |
| | | * 查看微信是否已经存在用户 |
| | | * |
| | | * @param openId |
| | | * @param sessionKey |
| | | * @param unionId |
| | |
| | | public User getExistUserByOpenId(String openId, String sessionKey, String unionId, String userType) { |
| | | List<String> userTypes = new ArrayList<>(); |
| | | userTypes.add(userType); |
| | | List<User> userList = userMapper.getByOpenID(openId,userTypes); |
| | | if(!CollectionUtils.isEmpty(userList)){ |
| | | List<User> userList = userMapper.getByOpenID(openId, userTypes); |
| | | if (!CollectionUtils.isEmpty(userList)) { |
| | | return userList.get(0); |
| | | } |
| | | return null; |
| | |
| | | |
| | | public void registWxUser(CreateWechatUserDTO dto) { |
| | | String RETISTER_KEY = "%s_%s"; |
| | | RLock lock = redissonClient.getLock(String.format(RETISTER_KEY,dto.getPurePhoneNumber(),dto.getUserType())); |
| | | RLock lock = redissonClient.getLock(String.format(RETISTER_KEY, dto.getPurePhoneNumber(), dto.getUserType())); |
| | | try { |
| | | // 获取锁,最多等待 10 秒,锁自动释放时间 30 秒 |
| | | if (lock.tryLock(10, 30, TimeUnit.SECONDS)) { |
| | | try{ |
| | | try { |
| | | // 其次查找当前loginName是prephonenume的,userType是customer的用户存在不存在 |
| | | if (StringUtils.isEmpty(dto.getPurePhoneNumber()) && StringUtils.isEmpty(dto.getPhoneNumber())) { |
| | | throw new ValidationException("微信获取的电话号码为空!无法注册"); |
| | |
| | | BindWechatDTO wechatDTO = new BindWechatDTO(); |
| | | wechatDTO.setRealName(dto.getPurePhoneNumber()); |
| | | bindWechat(user.getId(), dto.getOpenId(), dto.getUnionId(), dto.getSessionKey(), wechatDTO); |
| | | }finally { |
| | | } finally { |
| | | lock.unlock(); |
| | | } |
| | | } |
| | |
| | | userTypes.add(dto.getUserType()); |
| | | User user = findByLoginName(dto.getUsername(), userTypes); |
| | | if (ObjectUtils.isEmpty(user)) { |
| | | //验证邀请码 |
| | | if (StringUtils.isNotEmpty(dto.getIntevailCode()) && customerService.checkCode(dto.getIntevailCode())) { |
| | | throw new ValidationException("无效邀请码"); |
| | | } |
| | | // 是新用户,需要注册 |
| | | user = new User(); |
| | | user.setId(UUIDGenerator.getUUID()); |
| | |
| | | // 注册商户信息 |
| | | UpdateCustomerDTO updateCustomerDTO = new UpdateCustomerDTO(); |
| | | updateCustomerDTO.setUserId(user.getId()); |
| | | updateCustomerDTO.setRegesterCode(dto.getIntevailCode()); |
| | | //有效邀请码注册成功后赠送1天会员 |
| | | if (!customerService.checkCode(dto.getIntevailCode())) { |
| | | updateCustomerDTO.setIsMember(true); |
| | | updateCustomerDTO.setMemberOvertime(LocalDateTime.now().plusDays(1)); |
| | | } |
| | | if (StringUtils.isNotBlank(dto.getUsername())) { |
| | | updateCustomerDTO.setName("智信-" + dto.getUsername().substring(dto.getUsername().length() - 4)); |
| | | |
| | |
| | | updateCustomerDTO.setCover("https://hmy-flower.oss-cn-shanghai.aliyuncs.com/8f/8f205ea4618b4ce48d5bd204ae73f075tmp_f0c47a66148245dc17d74563c5939e764273ba583619664d.jpg"); |
| | | customerService.addOrUpdateCustomer(updateCustomerDTO); |
| | | |
| | | //邀请会员权益 |
| | | intervialUser(dto.getIntevailCode()); |
| | | return user; |
| | | } |
| | | } finally { |
| | |
| | | return null; |
| | | } |
| | | |
| | | //邀请成功增加用户权益 |
| | | private void intervialUser(String code) { |
| | | //按照该邀请码下已有邀请人数做相应的会员有效期增加 |
| | | Integer InvitatCount = customerMapper.getInvitatCountByCode(code); |
| | | //根据邀请码查找对应的邀请人员 |
| | | //1人-3天,3人-15天,5人-30天 |
| | | Customer customerByCode = customerMapper.findCustomerByInvitationCode(code); |
| | | if (!ObjectUtils.isEmpty(customerByCode)) { |
| | | LocalDateTime memberOvertime = customerByCode.getMemberOvertime(); |
| | | if (!customerByCode.getIsMember()) { |
| | | memberOvertime = LocalDateTime.now(); |
| | | } |
| | | switch (InvitatCount) { |
| | | case 1: |
| | | memberOvertime = memberOvertime.plusDays(3); |
| | | break; |
| | | case 3: |
| | | memberOvertime = memberOvertime.plusDays(15); |
| | | break; |
| | | case 5: |
| | | memberOvertime = memberOvertime.plusDays(30); |
| | | break; |
| | | } |
| | | customerByCode.setIsMember(true); |
| | | customerByCode.setMemberOvertime(memberOvertime); |
| | | customerService.updateMemberInfo(customerByCode); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |