TEquipmentServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  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. if(wechat != null) {
  272. // 有绑定微信的话发公众号
  273. String openId = wechat.getOpenId();
  274. wechatService.sendNoworkMessage(openId,equipment.getClientId(),equipment.getName(), ifForeign, companyType);
  275. if (ifForeign.equals("1")) {
  276. // 国外再发邮件
  277. String messageReceiver = equipment.getMessageReceiver();
  278. if(StringUtils.isNotEmpty(messageReceiver)) {
  279. String[] split = messageReceiver.split(",");
  280. for (String s : split) {
  281. WechatSendUtil.sentEmail(s,equipment.getName());
  282. }
  283. } else {
  284. if(StringUtils.isNotEmpty(admin.getEmail())){
  285. WechatSendUtil.sentEmail(admin.getEmail(),equipment.getName());
  286. }
  287. }
  288. }
  289. } else {
  290. // 0或空:国内,1:国外
  291. if (ifForeign.equals("0") || ifForeign.equals("")) {
  292. //TODO 国内发短信
  293. } else {
  294. // 国外发送邮件
  295. String messageReceiver = equipment.getMessageReceiver();
  296. if(StringUtils.isNotEmpty(messageReceiver)) {
  297. String[] split = messageReceiver.split(",");
  298. for (String s : split) {
  299. WechatSendUtil.sentEmail(s,equipment.getName());
  300. }
  301. } else {
  302. if(StringUtils.isNotEmpty(admin.getEmail())){
  303. WechatSendUtil.sentEmail(admin.getEmail(),equipment.getName());
  304. }
  305. }
  306. }
  307. }
  308. }
  309. }
  310. }
  311. }
  312. }
  313. @Override
  314. public void informClient(Long adminId, String deviceId) {
  315. LambdaQueryWrapper<TAdmin> queryWrapper = Wrappers.lambdaQuery();
  316. queryWrapper.eq(TAdmin::getId, adminId);
  317. TAdmin admin = adminService.getOne(queryWrapper);
  318. String ifForeign = admin.getIfForeign();
  319. String phone = admin.getPhone();
  320. String email = admin.getEmail();
  321. switch (ifForeign) {
  322. case "0": { // 国内发短信
  323. if (StringUtils.isEmpty(phone)) {
  324. return;
  325. }
  326. try {
  327. String sms = YunPianSms.sendSms(appid, getInformText(deviceId), phone);
  328. System.out.println("短信已发送:" + sms);
  329. } catch (IOException e) {
  330. throw new RuntimeException(e);
  331. }
  332. break;
  333. }
  334. case "1": { // 海外发邮箱
  335. if (StringUtils.isEmpty(email)) {
  336. return;
  337. }
  338. String subject = "Reset the price of the flowers"; // 邮件标题
  339. String content = getInformContent(deviceId); // 邮件正文
  340. new MailUtil().send(email, subject, content);
  341. break;
  342. }
  343. default:
  344. System.out.println("无效的ifForeign");
  345. break;
  346. }
  347. }
  348. private String getInformContent(String deviceId) {
  349. String content = "";
  350. String str = "Dear customer:<br>" +
  351. "<br>" +
  352. "Your machine number is <" + deviceId + "> cotton candy machine, the number of flowers has been pushed, please reset the price of the flowers!" +
  353. "<br>" +
  354. "<br>" +
  355. "Best Regards.<br>" +
  356. "Sunzee Intelligent";
  357. content = String.format(str);
  358. return content;
  359. }
  360. private String getInformText(String deviceId) {
  361. String sms = "";
  362. if(StringUtils.isNotEmpty(deviceId)){
  363. sms = "【申泽智能】您好,您名下设备编号为" + deviceId + "的机器,花型数量已推送,请重新设置价格!";
  364. }
  365. return sms;
  366. }
  367. /**
  368. * 根据经度获取时区
  369. * @param currentLon
  370. * @return
  371. */
  372. public static int lateTimeZone(double currentLon) {
  373. int timeZone ;
  374. int shangValue = (int)(currentLon / 15);
  375. double yushuValue = Math.abs(currentLon % 15);
  376. if (yushuValue <= 7.5) {
  377. timeZone = shangValue;
  378. } else {
  379. timeZone = shangValue +(currentLon > 0 ? 1 :-1);
  380. }
  381. return timeZone;
  382. }
  383. }