TAlarmCleanController.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package com.szwl.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.szwl.constant.ResponseCodesEnum;
  5. import com.szwl.model.bo.R;
  6. import com.szwl.model.bo.ResponseModel;
  7. import com.szwl.model.entity.TAdmin;
  8. import com.szwl.model.entity.TAlarmClean;
  9. import com.szwl.model.entity.TEquipment;
  10. import com.szwl.model.param.AlarmCleanParam;
  11. import com.szwl.model.utils.YunPianSms;
  12. import com.szwl.service.TAdminService;
  13. import com.szwl.service.TAlarmCleanService;
  14. import com.szwl.service.TEquipmentService;
  15. import com.szwl.util.IDGenerator;
  16. import io.swagger.annotations.ApiModelProperty;
  17. import io.swagger.annotations.ApiOperation;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.web.bind.annotation.*;
  21. import java.util.Date;
  22. import java.util.Objects;
  23. import java.util.concurrent.TimeUnit;
  24. /**
  25. * <p>
  26. * 前端控制器
  27. * </p>
  28. *
  29. * @author wuhs
  30. * @since 2024-04-26
  31. */
  32. @RestController
  33. @RequestMapping("/tAlarmClean")
  34. public class TAlarmCleanController {
  35. @Autowired
  36. TAlarmCleanService alarmCleanService;
  37. @Autowired
  38. TEquipmentService equipmentService;
  39. @Autowired
  40. TAdminService adminService;
  41. /**
  42. * 超过7d,且做糖大于等于15个,发送提醒,重置时间和数量
  43. * 超过7d, 但做糖小于15个,不发提醒,仅重置时间
  44. * 不超过7d,做糖量大于等于200,发提醒,重置时间和数量
  45. * 国内发短信,海外发邮件
  46. */
  47. @ApiOperation("清洗提醒")
  48. @PostMapping("/alarmClean")
  49. public ResponseModel<TAlarmClean> alarmClean(@RequestBody AlarmCleanParam params) {
  50. String clientId = params.getClientId();
  51. Integer makeCandyNum = params.getMakeCandyNum();
  52. String isOversea = params.getIsOversea();
  53. // 根据 clientId 查找清洗提醒信息
  54. LambdaQueryWrapper<TAlarmClean> queryWrapper = Wrappers.lambdaQuery();
  55. queryWrapper.eq(TAlarmClean::getClientId, clientId);
  56. TAlarmClean alarmClean = alarmCleanService.getOne(queryWrapper);
  57. Integer candyNum = null;
  58. // 首次调用
  59. if (Objects.isNull(alarmClean)) {
  60. TAlarmClean tAlarmClean = new TAlarmClean();
  61. LambdaQueryWrapper<TEquipment> qw = Wrappers.lambdaQuery();
  62. qw.eq(TEquipment::getClientId, clientId);
  63. TEquipment equipment = equipmentService.getOne(qw);
  64. Long equipmentId = equipment.getId();
  65. Long adminId = equipment.getAdminId();
  66. LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
  67. wrapper.eq(TAdmin::getId, adminId);
  68. TAdmin admin = adminService.getOne(wrapper);
  69. String phone = admin.getPhone();
  70. String email = admin.getEmail();
  71. tAlarmClean.setId(IDGenerator.commonID());
  72. tAlarmClean.setClientId(clientId);
  73. tAlarmClean.setEquipmentId(equipmentId);
  74. tAlarmClean.setAdminId(adminId);
  75. tAlarmClean.setPhone(phone);
  76. tAlarmClean.setEmail(email);
  77. tAlarmClean.setIsOversea(isOversea);
  78. tAlarmClean.setLastSendTime(new Date());
  79. tAlarmClean.setCandyNum(makeCandyNum);
  80. alarmCleanService.save(tAlarmClean);
  81. } else {
  82. candyNum = alarmClean.getCandyNum();
  83. candyNum += makeCandyNum;
  84. alarmClean.setCandyNum(candyNum);
  85. alarmCleanService.saveOrUpdate(alarmClean);
  86. }
  87. LambdaQueryWrapper<TAlarmClean> wrapper = Wrappers.lambdaQuery();
  88. wrapper.eq(TAlarmClean::getClientId, clientId);
  89. TAlarmClean alarmCleanOne = alarmCleanService.getOne(wrapper);
  90. Date lastSendTime = alarmCleanOne.getLastSendTime();
  91. Integer candyNumNow = alarmCleanOne.getCandyNum();
  92. switch (isOversea) {
  93. case "0": { // 国内
  94. String phone = alarmCleanOne.getPhone();
  95. if (StringUtils.isEmpty(phone)) {
  96. return R.fail(ResponseCodesEnum.A0100, "手机号不存在");
  97. }
  98. if (moreThan7d(lastSendTime)) { // 超过7d
  99. if (candyNumNow >= 15) { // 做糖>=15个
  100. // 发送短信
  101. alarmCleanService.sendNote(phone, clientId);
  102. // 重置时间
  103. alarmCleanOne.setLastSendTime(new Date());
  104. // 清零
  105. alarmCleanOne.setCandyNum(0);
  106. } else {
  107. // 仅重置时间
  108. alarmCleanOne.setLastSendTime(new Date());
  109. }
  110. alarmCleanService.saveOrUpdate(alarmCleanOne);
  111. } else { // 不超过7d
  112. if (candyNumNow >= 200) { // 做糖>=200个
  113. // 发送短信
  114. alarmCleanService.sendNote(phone, clientId);
  115. // 重置时间
  116. alarmClean.setLastSendTime(new Date());
  117. // 清零
  118. alarmClean.setCandyNum(0);
  119. alarmCleanService.saveOrUpdate(alarmCleanOne);
  120. }
  121. }
  122. break;
  123. }
  124. case "1": { // 海外
  125. String email = alarmCleanOne.getEmail();
  126. if (StringUtils.isEmpty(email)) {
  127. return R.fail(ResponseCodesEnum.A0001, "邮箱地址不存在");
  128. }
  129. if (moreThan7d(lastSendTime)) {
  130. if (candyNumNow >= 15) {
  131. // 发送邮件
  132. alarmCleanService.sendEmail(email, clientId);
  133. // 重置时间
  134. alarmCleanOne.setLastSendTime(new Date());
  135. // 清零
  136. alarmCleanOne.setCandyNum(0);
  137. } else {
  138. // 仅重置时间
  139. alarmCleanOne.setLastSendTime(new Date());
  140. }
  141. alarmCleanService.saveOrUpdate(alarmCleanOne);
  142. } else { // 不超过7d
  143. if (candyNumNow >= 200) { // 做糖>=200个
  144. // 发送邮件
  145. alarmCleanService.sendEmail(email, clientId);
  146. // 重置时间
  147. alarmCleanOne.setLastSendTime(new Date());
  148. // 清零
  149. alarmCleanOne.setCandyNum(0);
  150. alarmCleanService.saveOrUpdate(alarmCleanOne);
  151. }
  152. }
  153. break;
  154. }
  155. default:
  156. return R.fail(ResponseCodesEnum.A0001, "地区参数有误" + isOversea);
  157. }
  158. return R.ok();
  159. }
  160. /**
  161. * 是否超过7天
  162. */
  163. public Boolean moreThan7d (Date lastSendTime) {
  164. Date now = new Date();
  165. // 计算两个日期之间的时间差,单位为毫秒
  166. long timeDifference = now.getTime() - lastSendTime.getTime();
  167. // 将时间差转换为小时
  168. long hoursDifference = TimeUnit.HOURS.convert(timeDifference, TimeUnit.MILLISECONDS);
  169. // 判断时间差是否大于168小时(7天)
  170. return hoursDifference >= 168;
  171. }
  172. }