DeviceInfoService.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package com.zswl.dataservice.service.mqtt;
  2. import com.zswl.dataservice.dao.iot.IotTemplateDao;
  3. import com.zswl.dataservice.dao.mqtt.DeviceInfoDao;
  4. import com.zswl.dataservice.dao.mqtt.ProjectInfoDao;
  5. import com.zswl.dataservice.dataConfig.ResultMessage;
  6. import com.zswl.dataservice.domain.iot.IotTemplate;
  7. import com.zswl.dataservice.domain.mqtt.DeviceInfo;
  8. import com.zswl.dataservice.domain.mqtt.ProjectInfo;
  9. import com.zswl.dataservice.model.iot.IotMainModel;
  10. import com.zswl.dataservice.model.mqtt.*;
  11. import com.zswl.dataservice.service.iot.IotServiceImpl;
  12. import com.zswl.dataservice.service.sync.DeviceSyncFullCardService;
  13. import com.zswl.dataservice.type.FunctionType;
  14. import com.zswl.dataservice.utils.bean.BeanUtils;
  15. import com.zswl.dataservice.utils.mqtt.type.LogsLevel;
  16. import com.zswl.dataservice.utils.mqtt.type.OnLineState;
  17. import com.zswl.dataservice.utils.page.PageEntityUtil;
  18. import com.zswl.dataservice.utils.result.ResultContent;
  19. import org.apache.commons.lang3.ObjectUtils;
  20. import org.apache.commons.lang3.StringUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.data.domain.Page;
  23. import org.springframework.data.domain.Pageable;
  24. import org.springframework.stereotype.Service;
  25. import java.util.ArrayList;
  26. import java.util.List;
  27. /**
  28. * @author TRX
  29. * @date 2024/5/14
  30. */
  31. @Service
  32. public class DeviceInfoService {
  33. @Autowired
  34. DeviceInfoDao deviceInfoDao;
  35. @Autowired
  36. OperationLogsService operationLogsService;
  37. @Autowired
  38. IotTemplateDao iotTemplateDao;
  39. @Autowired
  40. IotServiceImpl iotService;
  41. @Autowired
  42. ProjectInfoDao projectInfoDao;
  43. @Autowired
  44. ProjectInfoService projectInfoService;
  45. @Autowired
  46. DeviceSyncFullCardService deviceSyncFullCardService;
  47. /**
  48. * 添加-编辑设备 (基础信息)
  49. *
  50. * @param param
  51. * @return
  52. */
  53. public ResultContent<DeviceInfo> addDeviceInfo(DeviceInfoAddParam param) {
  54. DeviceInfo deviceInfo = new DeviceInfo();
  55. DeviceInfo temp = deviceInfoDao.findTopByDeviceId(param.getDeviceId());
  56. if (ObjectUtils.isNotEmpty(temp)) {
  57. deviceInfo = temp;
  58. param.setId(null);
  59. } else {
  60. deviceInfo.setActivityTime(System.currentTimeMillis());
  61. }
  62. BeanUtils.copyProperties(param, deviceInfo, "id");
  63. deviceInfo.setLastOnlineTime(System.currentTimeMillis());
  64. deviceInfo.setOnLineState(OnLineState.OnLine);
  65. // 项目
  66. if (StringUtils.isNotEmpty(param.getProjectInfoCode())) {
  67. ProjectInfo projectInfo = projectInfoDao.findTopByCode(param.getProjectInfoCode());
  68. deviceInfo.setProjectInfo(projectInfo);
  69. deviceInfo.setProjectInfoCode(projectInfo.getCode());
  70. }
  71. deviceInfo.setLastOnlineTime(System.currentTimeMillis());
  72. deviceInfoDao.save(deviceInfo);
  73. operationLogsService.addLogs(String.format("添加了设备;%s", deviceInfo.getDeviceName()), LogsLevel.Middle, deviceInfo);
  74. return ResultContent.buildSuccess(deviceInfo);
  75. }
  76. /**
  77. * 设备列表
  78. *
  79. * @param pageable
  80. * @param param
  81. * @return
  82. */
  83. public ResultContent<Page<DeviceInfoModel>> pageDevice(Pageable pageable, DeviceInfoSearchParam param) {
  84. Page<DeviceInfo> page = deviceInfoDao.page(pageable, param);
  85. return ResultContent.buildSuccess(PageEntityUtil.toPageModel(page, this::toModel));
  86. }
  87. /**
  88. * @return
  89. */
  90. public ResultContent updateRemark(DeviceInfoUpdateRemark param) {
  91. DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId());
  92. if (ObjectUtils.isEmpty(deviceInfo)) {
  93. return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
  94. }
  95. deviceInfo.setRemark(param.getRemark());
  96. deviceInfoDao.save(deviceInfo);
  97. return ResultContent.buildSuccess();
  98. }
  99. /**
  100. * 编辑设备关联的模版
  101. *
  102. * @param param
  103. * @return
  104. */
  105. public ResultContent updateIopTemplate(DeviceInfoUpdateRemark param) {
  106. DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId());
  107. if (ObjectUtils.isEmpty(deviceInfo)) {
  108. return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
  109. }
  110. IotTemplate iotTemplate = iotTemplateDao.findTopById(param.getIotTemplateId());
  111. if (ObjectUtils.isEmpty(iotTemplate)) {
  112. return ResultContent.buildFail(String.format("模版ID不存在:", param.getId()));
  113. }
  114. deviceInfo.setIotTemplate(iotTemplate);
  115. deviceInfoDao.save(deviceInfo);
  116. return ResultContent.buildSuccess();
  117. }
  118. /**
  119. * 编辑设备关联的项目信息
  120. *
  121. * @param param
  122. * @return
  123. */
  124. public ResultContent updateProject(DeviceInfoUpdateRemark param) {
  125. DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId());
  126. if (ObjectUtils.isEmpty(deviceInfo)) {
  127. return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
  128. }
  129. ProjectInfo projectInfo = projectInfoDao.findTopByCode(param.getProjectCode());
  130. if (ObjectUtils.isEmpty(projectInfo)) {
  131. return ResultContent.buildFail(String.format("项目不存在:", param.getId()));
  132. }
  133. deviceInfo.setProjectInfoCode(projectInfo.getCode());
  134. deviceInfo.setProjectInfo(projectInfo);
  135. deviceInfoDao.save(deviceInfo);
  136. return ResultContent.buildSuccess();
  137. }
  138. /**
  139. * 编辑设备关联的模版
  140. *
  141. * @param param
  142. * @return
  143. */
  144. public ResultContent updateIsReportLogs(DeviceInfoUpdateRemark param) {
  145. DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId());
  146. if (ObjectUtils.isEmpty(deviceInfo)) {
  147. return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
  148. }
  149. deviceInfo.setIsReportLogs(param.getIsReportLogs());
  150. deviceInfoDao.save(deviceInfo);
  151. return ResultContent.buildSuccess();
  152. }
  153. /**
  154. * 改变设备状态
  155. *
  156. * @param param
  157. * @return
  158. */
  159. public ResultContent updateDeviceState(DeviceInfoUpdateRemark param) {
  160. DeviceInfo deviceInfo = deviceInfoDao.findTopById(param.getId());
  161. if (ObjectUtils.isEmpty(deviceInfo)) {
  162. return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
  163. }
  164. deviceInfo.setState(param.getState());
  165. deviceInfoDao.save(deviceInfo);
  166. deviceSyncFullCardService.noticeSyncDeviceOnlineStateChange(deviceInfo.getDeviceId());
  167. return ResultContent.buildSuccess();
  168. }
  169. /**
  170. * 测试设备的连接时间
  171. *
  172. * @param id
  173. * @return
  174. */
  175. public ResultContent<Long> testDevice(String id) {
  176. Long time = 0L;
  177. return ResultContent.buildSuccess(time);
  178. }
  179. /**
  180. * 得到设备关联的物模型定义
  181. *
  182. * @param deviceId
  183. * @return
  184. */
  185. public ResultContent<List<IotMainModel>> getDeviceIotMain(String deviceId, FunctionType functionType) {
  186. DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
  187. if (ObjectUtils.isEmpty(deviceInfo)) {
  188. return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, deviceId));
  189. }
  190. List<IotMainModel> models = new ArrayList<>();
  191. if (deviceInfo.getIotTemplate() != null) {
  192. ResultContent<List<IotMainModel>> resultContent = iotService.getTemplateIotMainList(deviceInfo.getIotTemplate().getId(), functionType);
  193. models = resultContent.getContent();
  194. }
  195. return ResultContent.buildSuccess(models);
  196. }
  197. /**
  198. * 删除设备
  199. *
  200. * @param deviceId
  201. * @return
  202. */
  203. public ResultContent deleteDeviceInfo(String deviceId) {
  204. DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
  205. if (ObjectUtils.isEmpty(deviceInfo)) {
  206. return ResultContent.buildFail(String.format("设备ID不存在:%s", deviceId));
  207. }
  208. deviceInfoDao.delete(deviceInfo);
  209. operationLogsService.addLogs(String.format("删除了设备;%s", deviceInfo.getDeviceName()), LogsLevel.High, deviceInfo);
  210. return ResultContent.buildSuccess();
  211. }
  212. public ResultContent<DeviceInfoModel> getDeviceById(String deviceId) {
  213. DeviceInfoModel model = null;
  214. DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
  215. if (ObjectUtils.isNotEmpty(deviceInfo)) {
  216. model = toModel(deviceInfo);
  217. }
  218. return ResultContent.buildSuccess(model);
  219. }
  220. public DeviceInfoModel toModel(DeviceInfo deviceInfo) {
  221. DeviceInfoModel deviceInfoModel = new DeviceInfoModel();
  222. if (ObjectUtils.isNotEmpty(deviceInfo)) {
  223. BeanUtils.copyProperties(deviceInfo, deviceInfoModel);
  224. deviceInfoModel.setIotTemplate(iotService.toModel(deviceInfo.getIotTemplate()));
  225. deviceInfoModel.setProjectInfo(projectInfoService.toModel(deviceInfo.getProjectInfo()));
  226. }
  227. return deviceInfoModel;
  228. }
  229. }