BmsSysUserService.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. package com.care.bms.service;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.care.common.entity.*;
  9. import com.care.common.enums.DeviceActiveStatusEnum;
  10. import com.care.common.enums.OlderLiveTypeEnum;
  11. import com.care.common.enums.UserRoleEnum;
  12. import com.care.common.enums.ValidStatusEnum;
  13. import com.care.common.exception.BDException;
  14. import com.care.common.service.*;
  15. import com.care.common.util.DateUtils;
  16. import com.care.common.util.MyBeanUtils;
  17. import com.care.common.vo.PageReqVO;
  18. import com.care.common.vo.UserLogindConvertVO;
  19. import com.care.common.vo.device.DeviceVO;
  20. import com.care.common.vo.sysuser.CareSysUserVO;
  21. import org.apache.commons.codec.digest.DigestUtils;
  22. import org.springframework.beans.BeanUtils;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import javax.annotation.Resource;
  26. import java.util.ArrayList;
  27. import java.util.Date;
  28. import java.util.List;
  29. /**
  30. * 安全管家表(CareSysUser)表服务实现类
  31. *
  32. * @author makejava
  33. * @since 2021-05-21 00:08:38
  34. */
  35. @Service
  36. public class BmsSysUserService{
  37. @Resource
  38. private CareOrganizationService careOrganizationService;
  39. @Resource
  40. private CareStationService careStationService;
  41. @Resource
  42. private CareSysUserService careSysUserService;
  43. @Resource
  44. private CareDeviceService careDeviceService;
  45. @Resource
  46. private CareEventOrderChambService careEventOrderChambService;
  47. @Resource
  48. private CareHouseService careHouseService;
  49. public UserLogindConvertVO getLoginUser(String orgCode, String phone,String password) {
  50. UserLogindConvertVO userLogindConvertVO = null;
  51. /*QueryWrapper<CareOrganization> organizationQueryWrapper = new QueryWrapper<>();
  52. organizationQueryWrapper.lambda().eq(CareOrganization::getOrgCode,orgCode);
  53. CareOrganization org = this.careOrganizationService.getOne(organizationQueryWrapper);
  54. if (org == null){
  55. return null;
  56. }*/
  57. QueryWrapper<CareSysUser> userQueryWrapper = new QueryWrapper<>();
  58. userQueryWrapper.lambda() //.eq(CareSysUser::getOrgId,org.getId())
  59. .eq(CareSysUser::getPhone,phone);
  60. CareSysUser user = this.careSysUserService.getOne(userQueryWrapper);
  61. if (user != null){
  62. CareOrganization org = careOrganizationService.getById(user.getOrgId());
  63. userLogindConvertVO = new UserLogindConvertVO();
  64. BeanUtil.copyProperties(user,userLogindConvertVO);
  65. userLogindConvertVO.setOrgName(org.getName());
  66. userLogindConvertVO.setSystemName(org.getSystemName());
  67. userLogindConvertVO.setLogo(org.getLogo());
  68. String md5Password = DigestUtils.md5Hex(password);
  69. if (!md5Password.equalsIgnoreCase(user.getPassword())) {
  70. throw new BDException("用户名或密码错误");
  71. }
  72. if (ValidStatusEnum.INVALID.getValue().equals(user.getValidStatus())) {
  73. throw new BDException("用户已经禁用");
  74. }
  75. Date servStartDate = user.getServStartDate();
  76. Date servEndDate = user.getServEndDate();
  77. Date now = DateUtils.strToDate(DateUtils.getCurrYyyy_MM_ddDate(),"yyyy-MM-dd");
  78. if(servStartDate != null || servEndDate != null) {
  79. if ( now.before(servStartDate) || now.after(servEndDate)) {
  80. throw new BDException("用户没在有效期");
  81. }
  82. }
  83. }
  84. return userLogindConvertVO;
  85. }
  86. /**
  87. * 查询某服务站下的 安全管家列表
  88. * @param stationId
  89. * @return
  90. */
  91. public List<CareSysUserVO> queryKeeperListByStationId(Long orgId,Long stationId){
  92. List<CareSysUserVO> datas = new ArrayList<>();
  93. QueryWrapper<CareSysUser> userQueryWrapper = new QueryWrapper<>();
  94. userQueryWrapper.lambda().eq(orgId != null,CareSysUser::getOrgId,orgId).eq(CareSysUser::getStationId,stationId)
  95. .eq(CareSysUser::getRole, UserRoleEnum.CHANMB.getValue())
  96. .orderByAsc(CareSysUser::getName);
  97. List<CareSysUser> users = this.careSysUserService.list(userQueryWrapper);
  98. if (users != null){
  99. users.forEach(item -> {
  100. CareSysUserVO vo = new CareSysUserVO();
  101. BeanUtil.copyProperties(item,vo);
  102. datas.add(vo);
  103. });
  104. }
  105. return datas;
  106. }
  107. /**
  108. * 查询安全管家列表
  109. * @param stationId
  110. * @return
  111. */
  112. public IPage<CareSysUserVO> listCareSysUser(String name,String phone, Long stationId,UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
  113. IPage<CareSysUser> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
  114. QueryWrapper<CareSysUser> queryWrapper = new QueryWrapper<>();
  115. queryWrapper.lambda().like(StrUtil.isNotEmpty(name),CareSysUser::getName,name)
  116. .like(StrUtil.isNotEmpty(phone),CareSysUser::getPhone,phone)
  117. .eq(CareSysUser::getOrgId,loginUser.getOrgId())
  118. .eq(loginUser.getStationId()!=null,CareSysUser::getStationId,loginUser.getStationId())
  119. .eq(stationId!=null,CareSysUser::getStationId,stationId)
  120. .eq(CareSysUser::getRole,UserRoleEnum.CHANMB.getValue())
  121. .orderByAsc(CareSysUser::getName);
  122. IPage<CareSysUser> pageRes = this.careSysUserService.page(page, queryWrapper);
  123. IPage<CareSysUserVO> results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal());
  124. if(CollUtil.isNotEmpty(pageRes.getRecords())){
  125. List<CareSysUserVO> list = new ArrayList<>();
  126. pageRes.getRecords().forEach(item -> {
  127. CareSysUserVO resVO = new CareSysUserVO();
  128. BeanUtils.copyProperties(item,resVO);
  129. //服务设备数量
  130. QueryWrapper<CareDevice> queryWrapper1 = new QueryWrapper<>();
  131. queryWrapper1.lambda().eq(CareDevice::getChambId,resVO.getId());
  132. resVO.setDevCount(this.careDeviceService.count(queryWrapper1));
  133. //服务次数
  134. QueryWrapper<CareEventOrderChamb> queryWrapper2 = new QueryWrapper<>();
  135. queryWrapper2.lambda().eq(CareEventOrderChamb::getChambId,resVO.getId()).ne(CareEventOrderChamb::getStatus,"3");
  136. resVO.setServeCount(this.careEventOrderChambService.count(queryWrapper2));
  137. CareStation station = this.careStationService.getById(resVO.getStationId());
  138. if (station!=null){
  139. resVO.setStationName(station.getShortName());
  140. }
  141. list.add(resVO);
  142. });
  143. results.setRecords(list);
  144. }
  145. return results;
  146. }
  147. /**
  148. * 删除管家
  149. * @param id
  150. * @return
  151. */
  152. public boolean deleteById(Long id){
  153. QueryWrapper<CareDevice> queryWrapper = new QueryWrapper<>();
  154. queryWrapper.lambda().eq(CareDevice::getChambId,id);
  155. int cnt = careDeviceService.count(queryWrapper);
  156. if(cnt > 0 ) {
  157. return false;
  158. }
  159. QueryWrapper<CareEventOrderChamb> queryWrapper1 = new QueryWrapper<>();
  160. queryWrapper1.lambda().eq(CareEventOrderChamb::getChambId,id);
  161. int cnt1 = careEventOrderChambService.count(queryWrapper1);
  162. if(cnt1 > 0 ) {
  163. return false;
  164. }
  165. return this.careSysUserService.removeById(id);
  166. }
  167. /**
  168. * 详情
  169. * @param id
  170. * @return
  171. */
  172. public CareSysUserVO getCareSysUserById(Long id,UserLogindConvertVO loginUser){
  173. CareSysUser careSysUser = this.careSysUserService.getById(id);
  174. if (careSysUser!=null){
  175. CareSysUserVO resVO = new CareSysUserVO();
  176. BeanUtil.copyProperties(careSysUser,resVO);
  177. //服务设备数量和列表
  178. QueryWrapper<CareDevice> queryWrapper1 = new QueryWrapper<>();
  179. queryWrapper1.lambda().eq(CareDevice::getChambId,resVO.getId());
  180. List<CareDevice> hasDeviceList = this.careDeviceService.list(queryWrapper1);
  181. if(CollUtil.isNotEmpty(hasDeviceList)){
  182. List<DeviceVO> hasDeviceVOList = new ArrayList<>();
  183. hasDeviceList.forEach(item ->{
  184. DeviceVO deviceVO = new DeviceVO();
  185. BeanUtil.copyProperties(item,deviceVO);
  186. if(deviceVO.getHouseId() != null) {
  187. CareHouse careHouse = careHouseService.getById(deviceVO.getHouseId());
  188. if(careHouse != null) {
  189. deviceVO.setHouseAddr(careHouse.getAddr());
  190. }
  191. }
  192. deviceVO.setActiveStatusName(DeviceActiveStatusEnum.getCodeToName(deviceVO.getActiveStatus()));
  193. hasDeviceVOList.add(deviceVO);
  194. });
  195. resVO.setHasDeviceVOList(hasDeviceVOList);
  196. resVO.setDevCount(hasDeviceVOList.size());
  197. } else {
  198. resVO.setDevCount(0);
  199. }
  200. //服务次数
  201. QueryWrapper<CareEventOrderChamb> queryWrapper2 = new QueryWrapper<>();
  202. queryWrapper2.lambda().eq(CareEventOrderChamb::getChambId,resVO.getId()).ne(CareEventOrderChamb::getStatus,"3");
  203. resVO.setServeCount(this.careEventOrderChambService.count(queryWrapper2));
  204. CareStation station = this.careStationService.getById(resVO.getStationId());
  205. if (station!=null){
  206. resVO.setStationName(station.getShortName());
  207. }
  208. //空闲设备列表
  209. resVO.setFreeDeviceVOList(getFreeDeviceVOList(loginUser));
  210. return resVO;
  211. }
  212. return null;
  213. }
  214. /**
  215. * 获取空闲设备列表
  216. * @return
  217. */
  218. public List<DeviceVO> getFreeDeviceVOList(UserLogindConvertVO loginUser){
  219. QueryWrapper<CareDevice> queryWrapper = new QueryWrapper<>();
  220. queryWrapper.lambda().isNull(CareDevice::getChambId).eq(CareDevice::getOrgId,loginUser.getOrgId());
  221. List<CareDevice> freeDeviceList = this.careDeviceService.list(queryWrapper);
  222. List<DeviceVO> freeDeviceVOList = new ArrayList<>();
  223. if(CollUtil.isNotEmpty(freeDeviceList)){
  224. freeDeviceList.forEach(item ->{
  225. DeviceVO deviceVO = new DeviceVO();
  226. BeanUtil.copyProperties(item,deviceVO);
  227. if (deviceVO.getHouseId() !=null) {
  228. CareHouse careHouse = careHouseService.getById(deviceVO.getHouseId() );
  229. if(careHouse != null) {
  230. deviceVO.setHouseAddr(careHouse.getAddr());
  231. }
  232. }
  233. freeDeviceVOList.add(deviceVO);
  234. });
  235. }
  236. return freeDeviceVOList;
  237. }
  238. /**
  239. * 保存管家
  240. * @param vo
  241. */
  242. @Transactional(rollbackFor = Exception.class)
  243. public int createCareSysUser(CareSysUserVO vo,UserLogindConvertVO loginUser){
  244. QueryWrapper<CareSysUser> queryWrapper = new QueryWrapper<>();
  245. queryWrapper.lambda().eq(CareSysUser::getPhone,vo.getPhone());
  246. if(careSysUserService.count(queryWrapper) > 0){
  247. return 1;
  248. }
  249. //保存管家
  250. CareSysUser careSysUser = new CareSysUser();
  251. BeanUtil.copyProperties(vo,careSysUser);
  252. careSysUser.setCreateTime(new Date());
  253. careSysUser.setRole(UserRoleEnum.CHANMB.getValue());
  254. careSysUser.setOrgId(loginUser.getOrgId());
  255. this.careSysUserService.save(careSysUser);
  256. //更新设备
  257. List<DeviceVO> hasDeviceVOList = vo.getHasDeviceVOList();
  258. if (CollUtil.isNotEmpty(hasDeviceVOList)) {
  259. hasDeviceVOList.forEach(item -> {
  260. CareDevice careDevice = new CareDevice();
  261. BeanUtil.copyProperties(item,careDevice);
  262. careDevice.setChambId(careSysUser.getId());
  263. careDeviceService.updateById(careDevice);
  264. });
  265. }
  266. return 0;
  267. }
  268. /**
  269. * 修改管家
  270. * @param vo
  271. */
  272. @Transactional(rollbackFor = Exception.class)
  273. public void updateCareSysUser(CareSysUserVO vo){
  274. //保存管家
  275. CareSysUser careSysUser = this.careSysUserService.getById(vo.getId());
  276. MyBeanUtils.copyProperties(vo,careSysUser);
  277. careSysUser.setModifyTime(new Date());
  278. this.careSysUserService.updateById(careSysUser);
  279. List<DeviceVO> hasDeviceVOList = vo.getHasDeviceVOList();
  280. //查找原来拥有的设备
  281. QueryWrapper<CareDevice> queryWrapper = new QueryWrapper<>();
  282. queryWrapper.lambda().eq(CareDevice::getChambId,vo.getId());
  283. List<CareDevice> hasDeviceListOld = this.careDeviceService.list(queryWrapper);
  284. if (CollUtil.isNotEmpty(hasDeviceListOld)) {
  285. for(CareDevice careDevice : hasDeviceListOld){
  286. boolean has = false;
  287. for(DeviceVO deviceVO : hasDeviceVOList) {
  288. if(careDevice.getId().equals(deviceVO.getId())){
  289. has = true;
  290. break;
  291. }
  292. }
  293. if(!has) {
  294. //将不再拥有的设备的管家id置空
  295. this.careDeviceService.updateDevChamb(careDevice.getId());
  296. }
  297. }
  298. }
  299. //更新拥有的设备
  300. if (CollUtil.isNotEmpty(hasDeviceVOList)) {
  301. hasDeviceVOList.forEach(item -> {
  302. CareDevice careDevice = new CareDevice();
  303. BeanUtil.copyProperties(item,careDevice);
  304. careDevice.setChambId(careSysUser.getId());
  305. careDeviceService.updateById(careDevice);
  306. });
  307. }
  308. }
  309. }