package com.fdkankan.agent.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.agent.common.PageInfo; import com.fdkankan.agent.entity.User; import com.fdkankan.agent.mapper.IUserMapper; import com.fdkankan.agent.request.UserParam; import com.fdkankan.agent.response.UserVo; import com.fdkankan.agent.response.UserVoEn; import com.fdkankan.agent.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.time.LocalDateTime; import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; /** *

* 用户信息表 服务实现类 *

* * @author * @since 2022-11-09 */ @Service public class UserServiceImpl extends ServiceImpl implements IUserService { @Autowired private IUserIncrementService userIncrementService; @Autowired private ICameraDetailService cameraDetailService; @Autowired private ISceneService sceneService; @Autowired private ISceneProService sceneProService; @Autowired private IScenePlusService scenePlusService; @Autowired IExcelService excelService; @Override public Boolean checkUserName(String userName) { User user = this.getByUserName(userName); if(user == null ){ return false; } return true; } @Override public User getByUserName(String userName) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getUserName,userName); List list = this.list(wrapper); if(list == null || list.size() <=0){ return null; } return list.get(0); } @Override public List getLikeByUserName(String userName) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.like(User::getUserName,userName); return this.list(wrapper); } @Override public HashMap getByIds(List userIds) { HashMap map = new HashMap<>(); if(userIds.isEmpty()){ return map; } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(User::getId,userIds); List list = this.list(wrapper); list.forEach(entity -> map.put(entity.getId(),entity)); return map; } @Override public PageInfo pageList(UserParam param) { Page page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(), param.getPageSize()), param); List records = page.getRecords(); List userVo = getUserVo(records,param.getAgentId()); Page pageVo = new Page<>(page.getCurrent(),page.getSize()); pageVo.setTotal(page.getTotal()); pageVo.setRecords(userVo); return PageInfo.PageInfo(pageVo); } @Override public void exportUserList(UserParam param, HttpServletRequest req, HttpServletResponse resp) { Page page = this.getBaseMapper().pageList(new Page<>(1,100000), param); List records = page.getRecords(); List userIdList = records.parallelStream().map(User::getId).collect(Collectors.toList()); HashMap incrementCountMap = userIncrementService.getValidCountGroupByUserId(userIdList); List voList = new ArrayList<>(); List voListEn = new ArrayList<>(); for (User user : records) { long incrementCount = incrementCountMap.get(user.getId()) == null ? 0 : incrementCountMap.get(user.getId()); if("en".equals(param.getLang())){ UserVoEn vo = new UserVoEn(); BeanUtils.copyProperties(user,vo); vo.setVip(incrementCount > 0 ? 1: 0); voListEn.add(vo); }else { UserVo vo = new UserVo(); BeanUtils.copyProperties(user,vo); vo.setVip(incrementCount > 0 ? 1: 0); voList.add(vo); } } try { if("en".equals(param.getLang())){ excelService.commonExport(req,resp,new Date().getTime()/1000 +"user",voListEn, UserVoEn.class); }else { excelService.commonExport(req,resp,new Date().getTime()/1000 +"用户管理",voList, UserVo.class); } } catch (Exception e) { throw new RuntimeException(e); } } private List getUserVo(List userList, Integer agentId){ List voList = new ArrayList<>(); if(userList.size() >0){ List userIdList = userList.parallelStream().map(User::getId).collect(Collectors.toList()); HashMap incrementCountMap = userIncrementService.getValidCountGroupByUserId(userIdList); HashMap cameraCountMap = cameraDetailService.getCountGroupByUserId(userIdList,agentId); HashMap sceneCountMap = sceneService.getCountGroupByUserId(userIdList); HashMap sceneProCountMap = sceneProService.getCountGroupByUserId(userIdList,agentId); HashMap scenePlusCountMap = scenePlusService.getCountGroupByUserId(userIdList,agentId); for (User user :userList) { long incrementCount = incrementCountMap.get(user.getId()) == null ? 0 : incrementCountMap.get(user.getId()); long cameraCount = cameraCountMap.get(user.getId()) == null ? 0 : cameraCountMap.get(user.getId()); long sceneCount = sceneCountMap.get(user.getId()) == null ? 0 : sceneCountMap.get(user.getId()); long sceneProCount = sceneProCountMap.get(user.getId()) == null ? 0 : sceneProCountMap.get(user.getId()); long scenePlusCount = scenePlusCountMap.get(user.getId()) == null ? 0 : scenePlusCountMap.get(user.getId()); UserVo vo = new UserVo(); BeanUtils.copyProperties(user,vo); vo.setVip(incrementCount > 0 ? 1: 0); vo.setIncrementCount(incrementCount); vo.setSurDownNum(user.getDownloadNumTotal() - user.getDownloadNum()); vo.setCameraCount(cameraCount); vo.setSceneNum(sceneCount + sceneProCount + scenePlusCount ); voList.add(vo); } } return voList; } @Override public Long countByLastM() { YearMonth lastMonth = YearMonth.now().minusMonths(1); LocalDateTime startDateTime = lastMonth.atDay(1).atStartOfDay(); // 上个月1号 00:00:00 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.isNotNull(User::getAgentKey); wrapper.between(User::getCreateTime, startDateTime, new Date()); return this.count(wrapper); } }