TEquipmentServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. package com.szwl.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.szwl.feign.bean.SyncOldFeign;
  5. import com.szwl.model.bo.R;
  6. import com.szwl.model.entity.TAdmin;
  7. import com.szwl.model.entity.TEquipment;
  8. import com.szwl.mapper.TEquipmentMapper;
  9. import com.szwl.model.entity.TWechat;
  10. import com.szwl.model.query.StatisticsParam;
  11. import com.szwl.model.utils.PushUtils;
  12. import com.szwl.service.TAdminService;
  13. import com.szwl.service.TEquipmentService;
  14. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  15. import com.szwl.service.TWechatService;
  16. import com.szwl.util.WechatSendUtil;
  17. import org.apache.commons.lang.StringUtils;
  18. import org.springframework.amqp.core.AmqpTemplate;
  19. import org.springframework.amqp.core.MessageProperties;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import javax.annotation.Resource;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.Optional;
  26. import java.util.stream.Collectors;
  27. /**
  28. * <p>
  29. * 服务实现类
  30. * </p>
  31. *
  32. * @author wuhs
  33. * @since 2023-10-25
  34. */
  35. @Service
  36. public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipment> implements TEquipmentService {
  37. @Autowired
  38. private AmqpTemplate amqpTemplate;
  39. @Resource
  40. TEquipmentMapper tEquipmentMapper;
  41. @Autowired
  42. TAdminService adminService;
  43. @Resource
  44. SyncOldFeign syncOldFeign;
  45. @Resource
  46. TEquipmentService equipmentService;
  47. @Resource
  48. TWechatService wechatService;
  49. @Override
  50. public String sentMessage(String clientId, String json) {
  51. LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
  52. query.eq(TEquipment::getClientId,clientId);
  53. List<TEquipment> equipmentList = tEquipmentMapper.selectList(query);
  54. if(equipmentList.size()==0){
  55. return "该设备不存在";
  56. }
  57. TEquipment equipment = equipmentList.get(0);
  58. if (equipment == null) {
  59. return "该设备不存在";
  60. }
  61. String channel = equipment.getChannel();
  62. String equimentType = equipment.getEquimentType();
  63. if(StringUtils.isEmpty(channel)||channel.equals("1")||StringUtils.isEmpty(equimentType)){
  64. //用个推
  65. PushUtils.push(equipment.getGtClientId(), "", "", json);
  66. }
  67. if(StringUtils.isNotEmpty(channel)&&channel.equals("2")&&StringUtils.isNotEmpty(equimentType)){
  68. //用Mq
  69. //1 创建消息
  70. MessageProperties messageProperties = new MessageProperties();
  71. messageProperties.setContentType("text/plain");
  72. org.springframework.amqp.core.Message message = new org.springframework.amqp.core.Message(json.getBytes(), messageProperties);
  73. amqpTemplate.send(equimentType, clientId, message);
  74. }
  75. return "success";
  76. }
  77. @Override
  78. public String findMachineTotalNum(StatisticsParam param) {
  79. return tEquipmentMapper.findMachineTotalNum(param);
  80. }
  81. @Override
  82. public String findMachineUseNum(StatisticsParam param) {
  83. return tEquipmentMapper.findMachineUseNum(param);
  84. }
  85. @Override
  86. public Optional<String> syncOneEquipmentByClientId(String clientId) {
  87. if (StringUtils.isNotEmpty(clientId)) {
  88. TEquipment oldEquipment = R.getDataIfSuccess(syncOldFeign.getEquipmentByClientId(clientId));
  89. Long id = oldEquipment.getId();
  90. Date createDate = oldEquipment.getCreateDate();
  91. Date modifyDate = oldEquipment.getModifyDate();
  92. Long adminId = oldEquipment.getAdminId();
  93. String adminLevel = oldEquipment.getAdminLevel();
  94. String adminPwd = oldEquipment.getAdminPwd();
  95. Long areaId = oldEquipment.getAreaId();
  96. String cabinetHd = oldEquipment.getCabinetHd();
  97. String cabinetTm = oldEquipment.getCabinetTm();
  98. // String clientId = oldEquipment.getClientId();
  99. String contactName = oldEquipment.getContactName();
  100. String contactPhone = oldEquipment.getContactPhone();
  101. String operationalPhone = oldEquipment.getOperationalPhone();
  102. String operationalName = oldEquipment.getOperationalName();
  103. String furnaceSp = oldEquipment.getFurnaceSp();
  104. String furnaceTm = oldEquipment.getFurnaceTm();
  105. String guestPwd = oldEquipment.getGuestPwd();
  106. Boolean isNetWork = oldEquipment.getIsNetWork();
  107. Boolean isUsing = oldEquipment.getIsUsing();
  108. Date lastUpdateTime = oldEquipment.getLastUpdateTime();
  109. Double latitude = oldEquipment.getLatitude();
  110. Double longitude = oldEquipment.getLongitude();
  111. String managerId = oldEquipment.getManagerId();
  112. String selfName = oldEquipment.getSelfName();
  113. String channel = oldEquipment.getChannel();
  114. String name = oldEquipment.getName();
  115. String netWorkingMode = oldEquipment.getNetWorkingMode();
  116. String operator = oldEquipment.getOperator();
  117. Integer payType = oldEquipment.getPayType();
  118. Integer productTotal = oldEquipment.getProductTotal();
  119. String simNo = oldEquipment.getSimNo();
  120. String sn = oldEquipment.getSn();
  121. String adminUserName = oldEquipment.getAdminUserName();
  122. Long agencyId = oldEquipment.getAgencyId();
  123. Long merchantId = oldEquipment.getMerchantId();
  124. String companyPhone = oldEquipment.getCompanyPhone();
  125. Long personageId = oldEquipment.getPersonageId();
  126. Integer type = oldEquipment.getType();
  127. String fullName = oldEquipment.getFullName();
  128. Date pushUpdateTime = oldEquipment.getPushUpdateTime();
  129. Long timeRuleId = oldEquipment.getTimeRuleId();
  130. String gtClientId = oldEquipment.getGtClientId();
  131. Integer eqeStatus = oldEquipment.getEqeStatus();
  132. Boolean isBlocked = oldEquipment.getIsBlocked();
  133. String messageReceiver = oldEquipment.getMessageReceiver();
  134. Boolean isSleep = oldEquipment.getIsSleep();
  135. String advancedParameters = oldEquipment.getAdvancedParameters();
  136. String volume = oldEquipment.getVolume();
  137. String commonParameters = oldEquipment.getCommonParameters();
  138. String network = oldEquipment.getNetwork();
  139. String offTime = oldEquipment.getOffTime();
  140. String bootTime = oldEquipment.getBootTime();
  141. String plcVersion = oldEquipment.getPlcVersion();
  142. String equipmentType = oldEquipment.getEquimentType();
  143. Date endDate = oldEquipment.getEndDate();
  144. String flowers = oldEquipment.getFlowers();
  145. String machineType = oldEquipment.getMachineType();
  146. // String apkVersion = oldEquipment.getApkVersion(); // 旧系统没有
  147. // String couponStatus = oldEquipment.getCouponStatus(); // 旧系统没有
  148. String paymentType = oldEquipment.getPaymentType();
  149. String companyType = oldEquipment.getCompanyType();
  150. TEquipment equipment = new TEquipment();
  151. equipment.setId(id);
  152. equipment.setCreateDate(createDate);
  153. equipment.setModifyDate(modifyDate);
  154. equipment.setAdminId(adminId);
  155. equipment.setAdminLevel(adminLevel);
  156. equipment.setAdminPwd(adminPwd);
  157. equipment.setAreaId(areaId);
  158. equipment.setCabinetHd(cabinetHd);
  159. equipment.setCabinetTm(cabinetTm);
  160. equipment.setClientId(clientId);
  161. equipment.setContactName(contactName);
  162. equipment.setContactPhone(contactPhone);
  163. equipment.setOperationalPhone(operationalPhone);
  164. equipment.setOperationalName(operationalName);
  165. equipment.setFurnaceSp(furnaceSp);
  166. equipment.setFurnaceTm(furnaceTm);
  167. equipment.setGuestPwd(guestPwd);
  168. equipment.setIsNetWork(isNetWork);
  169. equipment.setIsUsing(isUsing);
  170. equipment.setLastUpdateTime(lastUpdateTime);
  171. equipment.setLatitude(latitude);
  172. equipment.setLongitude(longitude);
  173. equipment.setManagerId(managerId);
  174. equipment.setSelfName(selfName);
  175. equipment.setChannel(channel);
  176. equipment.setName(name);
  177. equipment.setNetWorkingMode(netWorkingMode);
  178. equipment.setOperator(operator);
  179. equipment.setPayType(payType);
  180. equipment.setProductTotal(productTotal);
  181. equipment.setSimNo(simNo);
  182. equipment.setSn(sn);
  183. equipment.setAdminUserName(adminUserName);
  184. equipment.setAgencyId(agencyId);
  185. equipment.setMerchantId(merchantId);
  186. equipment.setCompanyPhone(companyPhone);
  187. equipment.setPersonageId(personageId);
  188. equipment.setType(type);
  189. equipment.setFullName(fullName);
  190. equipment.setPushUpdateTime(pushUpdateTime);
  191. equipment.setTimeRuleId(timeRuleId);
  192. equipment.setGtClientId(gtClientId);
  193. equipment.setEqeStatus(eqeStatus);
  194. equipment.setIsBlocked(isBlocked);
  195. equipment.setMessageReceiver(messageReceiver);
  196. equipment.setIsSleep(isSleep);
  197. equipment.setAdvancedParameters(advancedParameters);
  198. equipment.setVolume(volume);
  199. equipment.setCommonParameters(commonParameters);
  200. equipment.setNetwork(network);
  201. equipment.setOffTime(offTime);
  202. equipment.setBootTime(bootTime);
  203. equipment.setPlcVersion(plcVersion);
  204. equipment.setEquimentType(equipmentType);
  205. equipment.setEndDate(endDate);
  206. equipment.setFlowers(flowers);
  207. equipment.setMachineType(machineType);
  208. // equipment.setApkVersion();
  209. // equipment.setCouponStatus();
  210. equipment.setCompanyType(companyType);
  211. equipment.setPaymentType(paymentType);
  212. equipmentService.save(equipment);
  213. return Optional.of("success");
  214. } else {
  215. return Optional.empty();
  216. }
  217. }
  218. @Override
  219. public int getForeignEquipmentCount(String area) {
  220. switch (area) {
  221. case "0":
  222. // 统计国内
  223. List<Long> domesticAdminIdList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "0").list().stream().map(TAdmin::getId).collect(Collectors.toList());
  224. return equipmentService.lambdaQuery().in(TEquipment::getAdminId, domesticAdminIdList).count();
  225. case "1":
  226. // 统计海外
  227. List<Long> overseasAdminIdList = adminService.lambdaQuery().eq(TAdmin::getIfForeign, "1").list().stream().map(TAdmin::getId).collect(Collectors.toList());
  228. return equipmentService.lambdaQuery().in(TEquipment::getAdminId, overseasAdminIdList).count();
  229. case "2":
  230. // 统计全球
  231. return equipmentService.list().size();
  232. default:
  233. return 0;
  234. }
  235. }
  236. @Override
  237. public void checkEquipmentStatus() {
  238. LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
  239. query.eq(TEquipment::getEqeStatus, 1);
  240. List<TEquipment> equipmentList = equipmentService.list(query);
  241. if (equipmentList.size() > 0) {
  242. // 获取当前时间,并检查设备状态是否过期
  243. long nowTime = System.currentTimeMillis();
  244. for (TEquipment equipment : equipmentList) {
  245. if (equipment.getModifyDate() != null) {
  246. // 如果设备的最后刷新时间超过480秒前,则清除设备状态信息,更改为关机状态
  247. long updateTime = equipment.getModifyDate().getTime();
  248. if (nowTime > updateTime && (nowTime - updateTime) > 480000) {
  249. equipment.setCabinetTm("");
  250. equipment.setCabinetHd("");
  251. equipment.setFurnaceTm("");
  252. equipment.setFurnaceSp("");
  253. equipment.setEqeStatus(0);
  254. equipmentService.updateById(equipment);
  255. // 说明机器没有上传信号,判断为网络不好或者关机,发送信号通知客户 查机器归属国内还是国外
  256. TAdmin admin = adminService.getById(equipment.getAdminId());
  257. String ifForeign = admin.getIfForeign();
  258. // 查询是申泽还是七云的
  259. String companyType = admin.getCompanyType();
  260. LambdaQueryWrapper<TWechat> wechatQuery = Wrappers.lambdaQuery();
  261. wechatQuery.eq(TWechat::getAdminId, equipment.getAdminId());
  262. TWechat wechat = wechatService.getOne(wechatQuery);
  263. if(wechat != null) {
  264. // 有绑定微信的话发公众号
  265. String openId = wechat.getOpenId();
  266. wechatService.sendNoworkMessage(openId,equipment.getClientId(),equipment.getName(), ifForeign, companyType);
  267. if (ifForeign.equals("1")) {
  268. // 国外再发邮件
  269. String messageReceiver = equipment.getMessageReceiver();
  270. if(StringUtils.isNotEmpty(messageReceiver)) {
  271. String[] split = messageReceiver.split(",");
  272. for (String s : split) {
  273. WechatSendUtil.sentEmail(s,equipment.getName());
  274. }
  275. } else {
  276. if(StringUtils.isNotEmpty(admin.getEmail())){
  277. WechatSendUtil.sentEmail(admin.getEmail(),equipment.getName());
  278. }
  279. }
  280. }
  281. } else {
  282. // 0或空:国内,1:国外
  283. if (ifForeign.equals("0") || ifForeign.equals("")) {
  284. //TODO 国内发短信
  285. } else {
  286. // 国外发送邮件
  287. String messageReceiver = equipment.getMessageReceiver();
  288. if(StringUtils.isNotEmpty(messageReceiver)) {
  289. String[] split = messageReceiver.split(",");
  290. for (String s : split) {
  291. WechatSendUtil.sentEmail(s,equipment.getName());
  292. }
  293. } else {
  294. if(StringUtils.isNotEmpty(admin.getEmail())){
  295. WechatSendUtil.sentEmail(admin.getEmail(),equipment.getName());
  296. }
  297. }
  298. }
  299. }
  300. }
  301. }
  302. }
  303. }
  304. }
  305. /**
  306. * 根据经度获取时区
  307. * @param currentLon
  308. * @return
  309. */
  310. public static int lateTimeZone(double currentLon) {
  311. int timeZone ;
  312. int shangValue = (int)(currentLon / 15);
  313. double yushuValue = Math.abs(currentLon % 15);
  314. if (yushuValue <= 7.5) {
  315. timeZone = shangValue;
  316. } else {
  317. timeZone = shangValue +(currentLon > 0 ? 1 :-1);
  318. }
  319. return timeZone;
  320. }
  321. }