TEquipmentServiceImpl.java 18 KB

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