123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434 |
- package com.care.bms.service;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.json.JSONArray;
- import cn.hutool.json.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.care.common.entity.*;
- import com.care.common.enums.*;
- import com.care.common.exception.BDException;
- import com.care.common.service.*;
- import com.care.common.util.HttpUtil;
- 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.order.OrderContactorVO;
- import com.care.common.vo.order.OrderOlderVO;
- import com.care.mqtt.service.MqttConnectorPoolService;
- import lombok.Synchronized;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.util.*;
- /**
- * @Author: lilt
- * @Date: 2021/7/14
- * @Desc:
- */
- @Service
- public class DeviceService {
- @Resource
- private CareHouseService careHouseService;
- @Resource
- private CareStationService careStationService;
- @Resource
- private CareDeviceService careDeviceService;
- @Resource
- private CareOlderService careOlderService;
- @Resource
- private CareHouseContactService careHouseContactService;
- @Resource
- private CareHouseOlderRelService careHouseOlderRelService;
- @Resource
- private CareHouseContactRelService careHouseContactRelService;
- @Resource
- private CareMemberInfoService careMemberInfoService;
- @Resource
- private CareSysUserService careSysUserService;
- @Resource
- private MqttConnectorPoolService mqttConnectorPoolService;
- @Resource
- private CareOrganizationService careOrganizationService;
- // @Value("${mqtt.topic.work.template:#{null}}")
- // private String mqttTopicWorkTemplate;
- // @Value("${mqtt.topic.install.template:#{null}}")
- // private String mqttTopicInstallTemplate;
- @Value("${syn.dev.url:#{null}}")
- private String synDevUrl;
- /**
- * 删除设备
- * @param id
- * @return
- */
- public boolean deleteById(Long id){
- mqttConnectorPoolService.removeOne(this.careDeviceService.getById(id));
- return this.careDeviceService.removeById(id);
- }
- public DeviceVO getDevById(Long id){
- CareDevice dev = this.careDeviceService.getById(id);
- if (dev!=null){
- DeviceVO vo = new DeviceVO();
- BeanUtil.copyProperties(dev,vo);
- vo.setStatusName(DeviceStatusEnum.getCodeToName(vo.getStatus()));
- vo.setActiveStatusName(DeviceActiveStatusEnum.getCodeToName(vo.getActiveStatus()));
- vo.setDevSceneName(DeviceSceneEnum.getCodeToName(vo.getDevScene()));
- CareSysUser careSysUser = this.careSysUserService.getById(vo.getChambId());
- if (careSysUser != null){
- vo.setChambPhone(careSysUser.getPhone());
- vo.setChambName(careSysUser.getName());
- }
- CareStation station = this.careStationService.getById(vo.getStationId());
- if (station!=null){
- vo.setStationName(station.getShortName());
- }
- CareHouse house = this.careHouseService.getById(vo.getHouseId());
- if (house!=null){
- vo.setHouseAddr(house.getAddr());
- vo.setHouseNumber(house.getHouseNumber());
- vo.setLatitude(house.getLatitude());
- vo.setLongitude(house.getLongitude());
- }
- QueryWrapper<CareHouseOlderRel> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CareHouseOlderRel::getHouseId,dev.getHouseId());
- List<CareHouseOlderRel> olderRels = careHouseOlderRelService.list(queryWrapper);
- if(CollUtil.isNotEmpty(olderRels)) {
- List<OrderOlderVO> orderOlderVOList = new ArrayList<>();
- olderRels.forEach(item -> {
- CareOlder older = this.careOlderService.getById(item.getOlderId());
- OrderOlderVO orderOlderVO = new OrderOlderVO();
- BeanUtil.copyProperties(older,orderOlderVO);
- orderOlderVO.setLiveTypeDesc(OlderLiveTypeEnum.getCodeToName(orderOlderVO.getLiveType()));
- orderOlderVOList.add(orderOlderVO);
- });
- vo.setOrderOlderVOList(orderOlderVOList);
- }
- QueryWrapper<CareHouseContactRel> queryWrapper1 = new QueryWrapper<>();
- queryWrapper1.lambda().eq(CareHouseContactRel::getHouseId,dev.getHouseId());
- List<CareHouseContactRel> contactRels = careHouseContactRelService.list(queryWrapper1);
- if(CollUtil.isNotEmpty(contactRels)) {
- List<OrderContactorVO> orderContactorVOList = new ArrayList<>();
- contactRels.forEach(item -> {
- CareHouseContact contact = this.careHouseContactService.getById(item.getContactId());
- OrderContactorVO orderContactorVO = new OrderContactorVO();
- BeanUtil.copyProperties(contact,orderContactorVO);
- orderContactorVO.setRelationTypeDesc(RelationTypeEnum.getCodeToName(orderContactorVO.getRelationType()));
- orderContactorVOList.add(orderContactorVO);
- });
- vo.setOrderContactorVOList(orderContactorVOList);
- }
- return vo;
- }
- return null;
- }
- /**
- * 保存设备 //TODO功能暂时不用
- * @param vo
- */
- @Transactional(rollbackFor = Exception.class)
- @Synchronized
- public void createDevice(DeviceVO vo,UserLogindConvertVO loginUser){
- //生成登陆账号
- if (StrUtil.isEmpty(vo.getDevCode())){
- throw new BDException("设备编号不能为空");
- }else {
- QueryWrapper<CareDevice> queryWrapper = new QueryWrapper();
- queryWrapper.lambda().eq(CareDevice::getDevCode,vo.getDevCode());
- if (this.careDeviceService.count(queryWrapper)>0){
- throw new BDException("设备编号已经存在!");
- }
- }
- //保存设备
- CareDevice device = new CareDevice();
- BeanUtil.copyProperties(vo,device);
- //设备上线
- device.setStatus(DeviceStatusEnum.ONLINE.getValue());
- device.setCreateTime(new Date());
- device.setOrgId(loginUser.getOrgId());
- // String topic = mqttTopicWorkTemplate.replace("XXXXX",device.getDevCode());
- // device.setTopic(topic);
- //
- // String topicInstall = mqttTopicInstallTemplate.replace("XXXXX",device.getDevCode());
- // device.setTopicInstall(topicInstall);
- device.setClientId(UUID.randomUUID().toString());
- device.setClientIdInstall(UUID.randomUUID().toString());
- this.careDeviceService.save(device);
- //保存完后,启动通道
- mqttConnectorPoolService.addOne(device);
- }
- /**
- * 修改设备
- * @param vo
- */
- @Transactional(rollbackFor = Exception.class)
- public void updateDevice(DeviceVO vo) {
- //保存设备
- CareDevice device = this.careDeviceService.getById(vo.getId());
- if (DeviceActiveStatusEnum.ACTIVE.getValue().equals(device.getActiveStatus())) {
- //设备离线
- device.setStatus(DeviceStatusEnum.OFFLINE.getValue());
- mqttConnectorPoolService.removeOne(device);
- }
- MyBeanUtils.copyProperties(vo, device);
- //处理house
- if (device.getHouseId() == null) { //新增
- CareHouse careHouse = new CareHouse();
- careHouse.setAddr(vo.getHouseAddr());
- careHouse.setHouseNumber(vo.getHouseNumber());
- if(StringUtils.isNotEmpty(vo.getHouseNumber())){
- careHouse.setName(vo.getHouseAddr() + vo.getHouseNumber());
- } else {
- careHouse.setName(vo.getHouseAddr());
- }
- careHouse.setLatitude(vo.getLatitude());
- careHouse.setLongitude(vo.getLongitude());
- careHouse.setCreateTime(new Date());
- careHouse.setOrgId(device.getOrgId());
- careHouse.setStationId(device.getStationId());
- this.careHouseService.save(careHouse);
- device.setHouseId(careHouse.getId());
- } else { //修改
- CareHouse careHouse = this.careHouseService.getById(device.getHouseId());
- careHouse.setAddr(vo.getHouseAddr());
- careHouse.setHouseNumber(vo.getHouseNumber());
- if(StringUtils.isNotEmpty(vo.getHouseNumber())){
- careHouse.setName(vo.getHouseAddr() + vo.getHouseNumber());
- } else {
- careHouse.setName(vo.getHouseAddr());
- }
- careHouse.setLatitude(vo.getLatitude());
- careHouse.setLongitude(vo.getLongitude());
- careHouse.setModifyTime(new Date());
- this.careHouseService.updateById(careHouse);
- }
- //关联用户
- //用手机号查找care_member_info表,有的话就关联上,没有的话只保留手机号在设备表
- QueryWrapper<CareMemberInfo> queryWrapper0 = new QueryWrapper<>();
- queryWrapper0.lambda().eq(CareMemberInfo::getPhone,vo.getMemberPhone());
- CareMemberInfo careMemberInfo = this.careMemberInfoService.getOne(queryWrapper0);
- if (careMemberInfo != null) { //关联,
- device.setMemberId(careMemberInfo.getId());
- } else { //todo 置空,null 不生效,暂时置为0
- device.setMemberId(0L);
- }
- //mqtt
- // if(StringUtils.isEmpty(device.getTopic())){
- // String topic = mqttTopicWorkTemplate.replace("XXXXX",device.getDevCode());
- // device.setTopic(topic);
- // }
- // if(StringUtils.isEmpty(device.getTopicInstall())){
- // String topicInstall = mqttTopicInstallTemplate.replace("XXXXX",device.getDevCode());
- // device.setTopicInstall(topicInstall);
- // }
- if(StringUtils.isEmpty(device.getClientId())){
- device.setClientId(UUID.randomUUID().toString());
- }
- if(StringUtils.isEmpty(device.getClientIdInstall())){
- device.setClientIdInstall(UUID.randomUUID().toString());
- }
- device.setModifyTime(new Date());
- this.careDeviceService.updateById(device);
- //被监护人
- List<OrderOlderVO> orderOlderVOList = vo.getOrderOlderVOList();
- List<Long> orderOlderVOIdList = new ArrayList<>();
- if(CollUtil.isNotEmpty(orderOlderVOList)){
- orderOlderVOList.forEach(item -> {
- CareOlder careOlder = new CareOlder();
- BeanUtil.copyProperties(item, careOlder);
- if(careOlder.getId() != null) {//修改
- careOlder.setModifyTime(new Date());
- careOlderService.updateById(careOlder);
- } else { //新增
- careOlder.setOrgId(device.getOrgId());
- careOlder.setStationId(device.getStationId());
- careOlder.setCreateTime(new Date());
- careOlderService.save(careOlder);
- CareHouseOlderRel careHouseOlderRel = new CareHouseOlderRel();
- careHouseOlderRel.setHouseId(device.getHouseId());
- careHouseOlderRel.setOlderId(careOlder.getId());
- careHouseOlderRelService.save(careHouseOlderRel);
- }
- orderOlderVOIdList.add(careOlder.getId());
- });
- }
- //联系人
- List<OrderContactorVO> orderContactorVOList = vo.getOrderContactorVOList();
- List<Long> orderContactorVOIdList = new ArrayList<>();
- if(CollUtil.isNotEmpty(orderContactorVOList)){
- orderContactorVOList.forEach(item -> {
- CareHouseContact careHouseContact = new CareHouseContact();
- BeanUtil.copyProperties(item, careHouseContact);
- if(careHouseContact.getId() != null) {//修改
- careHouseContact.setModifyTime(new Date());
- careHouseContactService.updateById(careHouseContact);
- } else { //新增
- careHouseContact.setOrgId(device.getOrgId());
- careHouseContact.setStationId(device.getStationId());
- careHouseContact.setCreateTime(new Date());
- careHouseContactService.save(careHouseContact);
- CareHouseContactRel careHouseContactRel = new CareHouseContactRel();
- careHouseContactRel.setHouseId(device.getHouseId());
- careHouseContactRel.setContactId(careHouseContact.getId());
- careHouseContactRelService.save(careHouseContactRel);
- }
- orderContactorVOIdList.add(careHouseContact.getId());
- });
- }
- //处理删除部分
- QueryWrapper<CareHouseOlderRel> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(CareHouseOlderRel::getHouseId,device.getHouseId());
- //查询出来数据库里已经有的
- List<CareHouseOlderRel> olderRelsDb = careHouseOlderRelService.list(queryWrapper);
- if(CollUtil.isNotEmpty(olderRelsDb)){
- List<Long> olderIdDels = new ArrayList<>();
- List<Long> olderReIdDels = new ArrayList<>();
- olderRelsDb.forEach(item -> {
- if(!orderOlderVOIdList.contains(item.getOlderId())){
- olderReIdDels.add(item.getId());
- olderIdDels.add(item.getOlderId());
- }
- });
- if(CollUtil.isNotEmpty(olderIdDels)){
- this.careHouseOlderRelService.removeByIds(olderReIdDels);
- this.careOlderService.removeByIds(olderIdDels);
- }
- }
- //处理删除部分
- //查询出来数据库里已经有的
- QueryWrapper<CareHouseContactRel> queryWrapper2 = new QueryWrapper<>();
- queryWrapper2.lambda().eq(CareHouseContactRel::getHouseId,device.getHouseId());
- List<CareHouseContactRel> contactRels = careHouseContactRelService.list(queryWrapper2);
- if(CollUtil.isNotEmpty(contactRels)){
- List<Long> contactIdDels = new ArrayList<>();
- List<Long> contactReIdDels = new ArrayList<>();
- contactRels.forEach(item -> {
- if(!orderContactorVOIdList.contains(item.getContactId())){
- contactReIdDels.add(item.getId());
- contactIdDels.add(item.getContactId());
- }
- });
- if(CollUtil.isNotEmpty(contactIdDels)){
- this.careHouseContactRelService.removeByIds(contactReIdDels);
- this.careHouseContactService.removeByIds(contactIdDels);
- }
- }
- if(DeviceActiveStatusEnum.ACTIVE.getValue().equals(device.getActiveStatus())) {
- //设备上线
- device.setStatus(DeviceStatusEnum.ONLINE.getValue());
- //保存完后,启动通道
- mqttConnectorPoolService.addOne(device);
- }
- }
- /**
- * 列表查询
- * @param loginUser
- * @param pageReqVo
- * @return
- */
- public IPage<DeviceVO> listDevice(Long stationId, String devCode, String activeStatus, String chambName,String status,String houseAddr,Long chambId,Long memberId,Long orgId,UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
- return this.careDeviceService.queryList(pageReqVo,stationId,devCode,activeStatus,chambName,status,houseAddr,chambId,memberId,orgId,loginUser);
- }
- /**
- * 列表查询没有站点的
- * @param loginUser
- * @param pageReqVo
- * @return
- */
- public IPage<DeviceVO> listDeviceNonStation(UserLogindConvertVO loginUser, PageReqVO pageReqVo) {
- return this.careDeviceService.listDeviceNonStation(pageReqVo,loginUser);
- }
- /**
- * 同步设备
- */
- public boolean synDev(String companyId) {
- try {
- if (StringUtils.isEmpty(companyId)){
- return false;
- }
- QueryWrapper<CareOrganization> queryWrapper1 = new QueryWrapper<>();
- queryWrapper1.lambda().eq(CareOrganization::getCompanyId,companyId);
- CareOrganization careOrganization = this.careOrganizationService.getOne(queryWrapper1);
- if (careOrganization == null){
- return false;
- }
- // 通过synDevUrl获取data
- JSONObject jsonObject = HttpUtil.httpGet(synDevUrl + "?companyId=" + companyId);
- int code = jsonObject.getInt("code");
- if (code == 1) {
- JSONArray data = jsonObject.getJSONArray("data");
- Iterator it = data.iterator();
- List<CareDevice> list = new ArrayList<>();
- while (it.hasNext()) {
- JSONObject obj = (JSONObject) it.next();
- if(careOrganization != null) {
- CareDevice careDevice = new CareDevice();
- careDevice.setDevCode(obj.getStr("mdid"));
- careDevice.setOrgId(careOrganization.getId());
- careDevice.setTopic("/companyId/" + careDevice.getDevCode() + "/event");
- careDevice.setTopicInstall("/companyId/" + careDevice.getDevCode() + "/control");
- list.add(careDevice);
- } else {
- continue;
- }
- }
- if (!list.isEmpty()) {
- careDeviceService.synDev(list);
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
- }
|