package com.care.bms.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.care.common.entity.*; import com.care.common.enums.UserRoleEnum; import com.care.common.exception.BDException; import com.care.common.service.*; import com.care.common.util.MyBeanUtils; import com.care.common.vo.PageReqVO; import com.care.common.vo.UserLogindConvertVO; import com.care.common.vo.device.DeviceVO; import com.care.common.vo.sysuser.CareSysUserVO; import org.apache.commons.codec.digest.DigestUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 安全管家表(CareSysUser)表服务实现类 * * @author makejava * @since 2021-05-21 00:08:38 */ @Service public class BmsSysUserService{ @Resource private CareOrganizationService careOrganizationService; @Resource private CareStationService careStationService; @Resource private CareSysUserService careSysUserService; @Resource private CareDeviceService careDeviceService; @Resource private CareEventOrderChambService careEventOrderChambService; @Resource private CareHouseService careHouseService; public UserLogindConvertVO getLoginUser(String orgCode, String phone,String password) { UserLogindConvertVO userLogindConvertVO = null; /*QueryWrapper organizationQueryWrapper = new QueryWrapper<>(); organizationQueryWrapper.lambda().eq(CareOrganization::getOrgCode,orgCode); CareOrganization org = this.careOrganizationService.getOne(organizationQueryWrapper); if (org == null){ return null; }*/ QueryWrapper userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.lambda() //.eq(CareSysUser::getOrgId,org.getId()) .eq(CareSysUser::getPhone,phone); CareSysUser user = this.careSysUserService.getOne(userQueryWrapper); if (user != null){ CareOrganization org = careOrganizationService.getById(user.getOrgId()); userLogindConvertVO = new UserLogindConvertVO(); BeanUtil.copyProperties(user,userLogindConvertVO); userLogindConvertVO.setOrgName(org.getName()); userLogindConvertVO.setSystemName(org.getSystemName()); userLogindConvertVO.setLogo(org.getLogo()); String md5Password = DigestUtils.md5Hex(password); if (!md5Password.equalsIgnoreCase(user.getPassword())) { throw new BDException("用户名或密码错误"); } } return userLogindConvertVO; } /** * 查询某服务站下的 安全管家列表 * @param stationId * @return */ public List queryKeeperListByStationId(Long stationId){ List datas = new ArrayList<>(); QueryWrapper userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.lambda().eq(stationId != null,CareSysUser::getStationId,stationId) .eq(CareSysUser::getRole, UserRoleEnum.CHANMB.getValue()) .orderByAsc(CareSysUser::getName); List users = this.careSysUserService.list(userQueryWrapper); if (users != null){ users.forEach(item -> { CareSysUserVO vo = new CareSysUserVO(); BeanUtil.copyProperties(item,vo); datas.add(vo); }); } return datas; } /** * 查询安全管家列表 * @param stationId * @return */ public IPage listCareSysUser(String name,String phone, Long stationId,UserLogindConvertVO loginUser, PageReqVO pageReqVo) { IPage page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize()); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().like(StrUtil.isNotEmpty(name),CareSysUser::getName,name) .like(StrUtil.isNotEmpty(phone),CareSysUser::getPhone,phone) .eq(CareSysUser::getOrgId,loginUser.getOrgId()) .eq(loginUser.getStationId()!=null,CareSysUser::getStationId,loginUser.getStationId()) .eq(stationId!=null,CareSysUser::getStationId,stationId) .eq(CareSysUser::getRole,UserRoleEnum.CHANMB.getValue()) .orderByAsc(CareSysUser::getName); IPage pageRes = this.careSysUserService.page(page, queryWrapper); IPage results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal()); if(CollUtil.isNotEmpty(pageRes.getRecords())){ List list = new ArrayList<>(); pageRes.getRecords().forEach(item -> { CareSysUserVO resVO = new CareSysUserVO(); BeanUtils.copyProperties(item,resVO); //服务设备数量 QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.lambda().eq(CareDevice::getChambId,resVO.getId()); resVO.setDevCount(this.careDeviceService.count(queryWrapper1)); //服务次数 QueryWrapper queryWrapper2 = new QueryWrapper<>(); queryWrapper2.lambda().eq(CareEventOrderChamb::getChambId,resVO.getId()).ne(CareEventOrderChamb::getStatus,"3"); resVO.setServeCount(this.careEventOrderChambService.count(queryWrapper2)); CareStation station = this.careStationService.getById(resVO.getStationId()); if (station!=null){ resVO.setStationName(station.getShortName()); } list.add(resVO); }); results.setRecords(list); } return results; } /** * 删除管家 * @param id * @return */ public boolean deleteById(Long id){ return this.careSysUserService.removeById(id); } /** * 详情 * @param id * @return */ public CareSysUserVO getCareSysUserById(Long id){ CareSysUser careSysUser = this.careSysUserService.getById(id); if (careSysUser!=null){ CareSysUserVO resVO = new CareSysUserVO(); BeanUtil.copyProperties(careSysUser,resVO); //服务设备数量和列表 QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.lambda().eq(CareDevice::getChambId,resVO.getId()); List hasDeviceList = this.careDeviceService.list(queryWrapper1); if(CollUtil.isNotEmpty(hasDeviceList)){ List hasDeviceVOList = new ArrayList<>(); hasDeviceList.forEach(item ->{ DeviceVO deviceVO = new DeviceVO(); BeanUtil.copyProperties(item,deviceVO); deviceVO.setHouseAddr(careHouseService.getById(deviceVO.getHouseId()).getAddr()); hasDeviceVOList.add(deviceVO); }); resVO.setHasDeviceVOList(hasDeviceVOList); resVO.setDevCount(hasDeviceVOList.size()); } else { resVO.setDevCount(0); } //服务次数 QueryWrapper queryWrapper2 = new QueryWrapper<>(); queryWrapper2.lambda().eq(CareEventOrderChamb::getChambId,resVO.getId()).ne(CareEventOrderChamb::getStatus,"3"); resVO.setServeCount(this.careEventOrderChambService.count(queryWrapper2)); CareStation station = this.careStationService.getById(resVO.getStationId()); if (station!=null){ resVO.setStationName(station.getShortName()); } //空闲设备列表 resVO.setFreeDeviceVOList(getFreeDeviceVOList()); return resVO; } return null; } /** * 获取空闲设备列表 * @return */ public List getFreeDeviceVOList(){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().isNull(CareDevice::getChambId); List freeDeviceList = this.careDeviceService.list(queryWrapper); List freeDeviceVOList = new ArrayList<>(); if(CollUtil.isNotEmpty(freeDeviceList)){ freeDeviceList.forEach(item ->{ DeviceVO deviceVO = new DeviceVO(); BeanUtil.copyProperties(item,deviceVO); deviceVO.setHouseAddr(careHouseService.getById(deviceVO.getHouseId()).getAddr()); freeDeviceVOList.add(deviceVO); }); } return freeDeviceVOList; } /** * 保存管家 * @param vo */ @Transactional(rollbackFor = Exception.class) public int createCareSysUser(CareSysUserVO vo,UserLogindConvertVO loginUser){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CareSysUser::getPhone,vo.getPhone()); if(careSysUserService.count(queryWrapper) > 0){ return 1; } //保存管家 CareSysUser careSysUser = new CareSysUser(); BeanUtil.copyProperties(vo,careSysUser); careSysUser.setCreateTime(new Date()); careSysUser.setRole(UserRoleEnum.CHANMB.getValue()); careSysUser.setStationId(loginUser.getStationId()); careSysUser.setOrgId(loginUser.getOrgId()); this.careSysUserService.save(careSysUser); //更新设备 List hasDeviceVOList = vo.getHasDeviceVOList(); if (CollUtil.isNotEmpty(hasDeviceVOList)) { hasDeviceVOList.forEach(item -> { CareDevice careDevice = new CareDevice(); BeanUtil.copyProperties(item,careDevice); careDevice.setChambId(careSysUser.getId()); careDeviceService.updateById(careDevice); }); } return 0; } /** * 修改管家 * @param vo */ @Transactional(rollbackFor = Exception.class) public void updateCareSysUser(CareSysUserVO vo){ //保存管家 CareSysUser careSysUser = this.careSysUserService.getById(vo.getId()); MyBeanUtils.copyProperties(vo,careSysUser); careSysUser.setModifyTime(new Date()); this.careSysUserService.updateById(careSysUser); List hasDeviceVOList = vo.getHasDeviceVOList(); //查找原来拥有的设备 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(CareDevice::getChambId,vo.getId()); List hasDeviceListOld = this.careDeviceService.list(queryWrapper); if (CollUtil.isNotEmpty(hasDeviceListOld)) { for(CareDevice careDevice : hasDeviceListOld){ boolean has = false; for(DeviceVO deviceVO : hasDeviceVOList) { if(careDevice.getId().equals(deviceVO.getId())){ has = true; break; } } if(!has) { //将不再拥有的设备的管家id置空 this.careDeviceService.updateDevChamb(careDevice.getId()); } } } //更新拥有的设备 if (CollUtil.isNotEmpty(hasDeviceVOList)) { hasDeviceVOList.forEach(item -> { CareDevice careDevice = new CareDevice(); BeanUtil.copyProperties(item,careDevice); careDevice.setChambId(careSysUser.getId()); careDeviceService.updateById(careDevice); }); } } }