|
@@ -0,0 +1,195 @@
|
|
|
+package com.szwl.controller;
|
|
|
+
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.szwl.constant.ResponseCodesEnum;
|
|
|
+import com.szwl.model.bo.R;
|
|
|
+import com.szwl.model.bo.ResponseModel;
|
|
|
+import com.szwl.model.entity.TAdmin;
|
|
|
+import com.szwl.model.entity.TAlarmClean;
|
|
|
+import com.szwl.model.entity.TEquipment;
|
|
|
+import com.szwl.model.param.AlarmCleanParam;
|
|
|
+import com.szwl.model.utils.YunPianSms;
|
|
|
+import com.szwl.service.TAdminService;
|
|
|
+import com.szwl.service.TAlarmCleanService;
|
|
|
+import com.szwl.service.TEquipmentService;
|
|
|
+import com.szwl.util.IDGenerator;
|
|
|
+import io.swagger.annotations.ApiModelProperty;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 前端控制器
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author wuhs
|
|
|
+ * @since 2024-04-26
|
|
|
+ */
|
|
|
+@RestController
|
|
|
+@RequestMapping("/tAlarmClean")
|
|
|
+public class TAlarmCleanController {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ TAlarmCleanService alarmCleanService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ TEquipmentService equipmentService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ TAdminService adminService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 超过7d,且做糖大于等于15个,发送提醒,重置时间和数量
|
|
|
+ * 超过7d, 但做糖小于15个,不发提醒,仅重置时间
|
|
|
+ * 不超过7d,做糖量大于等于200,发提醒,重置时间和数量
|
|
|
+ * 国内发短信,海外发邮件
|
|
|
+ */
|
|
|
+ @ApiOperation("清洗提醒")
|
|
|
+ @PostMapping("/alarmClean")
|
|
|
+ public ResponseModel<TAlarmClean> alarmClean(@RequestBody AlarmCleanParam params) {
|
|
|
+ String clientId = params.getClientId();
|
|
|
+ Integer makeCandyNum = params.getMakeCandyNum();
|
|
|
+ String isOversea = params.getIsOversea();
|
|
|
+
|
|
|
+ // 根据 clientId 查找清洗提醒信息
|
|
|
+ LambdaQueryWrapper<TAlarmClean> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(TAlarmClean::getClientId, clientId);
|
|
|
+ TAlarmClean alarmClean = alarmCleanService.getOne(queryWrapper);
|
|
|
+
|
|
|
+ Integer candyNum = null;
|
|
|
+ // 首次调用
|
|
|
+ if (Objects.isNull(alarmClean)) {
|
|
|
+ TAlarmClean tAlarmClean = new TAlarmClean();
|
|
|
+ LambdaQueryWrapper<TEquipment> qw = Wrappers.lambdaQuery();
|
|
|
+ qw.eq(TEquipment::getClientId, clientId);
|
|
|
+ TEquipment equipment = equipmentService.getOne(qw);
|
|
|
+ Long equipmentId = equipment.getId();
|
|
|
+ Long adminId = equipment.getAdminId();
|
|
|
+ LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
|
|
|
+ wrapper.eq(TAdmin::getId, adminId);
|
|
|
+ TAdmin admin = adminService.getOne(wrapper);
|
|
|
+ String phone = admin.getPhone();
|
|
|
+ String email = admin.getEmail();
|
|
|
+
|
|
|
+ tAlarmClean.setId(IDGenerator.commonID());
|
|
|
+ tAlarmClean.setClientId(clientId);
|
|
|
+ tAlarmClean.setEquipmentId(equipmentId);
|
|
|
+ tAlarmClean.setAdminId(adminId);
|
|
|
+ tAlarmClean.setPhone(phone);
|
|
|
+ tAlarmClean.setEmail(email);
|
|
|
+ tAlarmClean.setIsOversea(isOversea);
|
|
|
+ tAlarmClean.setLastSendTime(new Date());
|
|
|
+ tAlarmClean.setCandyNum(makeCandyNum);
|
|
|
+
|
|
|
+ alarmCleanService.save(tAlarmClean);
|
|
|
+ } else {
|
|
|
+ candyNum = alarmClean.getCandyNum();
|
|
|
+ candyNum += makeCandyNum;
|
|
|
+ alarmClean.setCandyNum(candyNum);
|
|
|
+
|
|
|
+ alarmCleanService.saveOrUpdate(alarmClean);
|
|
|
+ }
|
|
|
+
|
|
|
+ LambdaQueryWrapper<TAlarmClean> wrapper = Wrappers.lambdaQuery();
|
|
|
+ wrapper.eq(TAlarmClean::getClientId, clientId);
|
|
|
+ TAlarmClean alarmCleanOne = alarmCleanService.getOne(wrapper);
|
|
|
+ Date lastSendTime = alarmCleanOne.getLastSendTime();
|
|
|
+ Integer candyNumNow = alarmCleanOne.getCandyNum();
|
|
|
+ switch (isOversea) {
|
|
|
+ case "0": { // 国内
|
|
|
+ String phone = alarmCleanOne.getPhone();
|
|
|
+ if (StringUtils.isEmpty(phone)) {
|
|
|
+ return R.fail(ResponseCodesEnum.A0100, "手机号不存在");
|
|
|
+ }
|
|
|
+ if (moreThan7d(lastSendTime)) { // 超过7d
|
|
|
+ if (candyNumNow >= 15) { // 做糖>=15个
|
|
|
+ // 发送短信
|
|
|
+ alarmCleanService.sendNote(phone, clientId);
|
|
|
+ // 重置时间
|
|
|
+ alarmCleanOne.setLastSendTime(new Date());
|
|
|
+ // 清零
|
|
|
+ alarmCleanOne.setCandyNum(0);
|
|
|
+ } else {
|
|
|
+ // 仅重置时间
|
|
|
+ alarmCleanOne.setLastSendTime(new Date());
|
|
|
+ }
|
|
|
+ alarmCleanService.saveOrUpdate(alarmCleanOne);
|
|
|
+ } else { // 不超过7d
|
|
|
+ if (candyNumNow >= 200) { // 做糖>=200个
|
|
|
+ // 发送短信
|
|
|
+ alarmCleanService.sendNote(phone, clientId);
|
|
|
+ // 重置时间
|
|
|
+ alarmClean.setLastSendTime(new Date());
|
|
|
+ // 清零
|
|
|
+ alarmClean.setCandyNum(0);
|
|
|
+ alarmCleanService.saveOrUpdate(alarmCleanOne);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "1": { // 海外
|
|
|
+ String email = alarmCleanOne.getEmail();
|
|
|
+ if (StringUtils.isEmpty(email)) {
|
|
|
+ return R.fail(ResponseCodesEnum.A0001, "邮箱地址不存在");
|
|
|
+ }
|
|
|
+ if (moreThan7d(lastSendTime)) {
|
|
|
+ if (candyNumNow >= 15) {
|
|
|
+ // 发送邮件
|
|
|
+ alarmCleanService.sendEmail(email, clientId);
|
|
|
+ // 重置时间
|
|
|
+ alarmCleanOne.setLastSendTime(new Date());
|
|
|
+ // 清零
|
|
|
+ alarmCleanOne.setCandyNum(0);
|
|
|
+ } else {
|
|
|
+ // 仅重置时间
|
|
|
+ alarmCleanOne.setLastSendTime(new Date());
|
|
|
+ }
|
|
|
+ alarmCleanService.saveOrUpdate(alarmCleanOne);
|
|
|
+ } else { // 不超过7d
|
|
|
+ if (candyNumNow >= 200) { // 做糖>=200个
|
|
|
+ // 发送邮件
|
|
|
+ alarmCleanService.sendEmail(email, clientId);
|
|
|
+ // 重置时间
|
|
|
+ alarmCleanOne.setLastSendTime(new Date());
|
|
|
+ // 清零
|
|
|
+ alarmCleanOne.setCandyNum(0);
|
|
|
+ alarmCleanService.saveOrUpdate(alarmCleanOne);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ return R.fail(ResponseCodesEnum.A0001, "地区参数有误" + isOversea);
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.ok();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否超过7天
|
|
|
+ */
|
|
|
+ public Boolean moreThan7d (Date lastSendTime) {
|
|
|
+
|
|
|
+ Date now = new Date();
|
|
|
+
|
|
|
+ // 计算两个日期之间的时间差,单位为毫秒
|
|
|
+ long timeDifference = now.getTime() - lastSendTime.getTime();
|
|
|
+
|
|
|
+ // 将时间差转换为小时
|
|
|
+ long hoursDifference = TimeUnit.HOURS.convert(timeDifference, TimeUnit.MILLISECONDS);
|
|
|
+
|
|
|
+ // 判断时间差是否大于168小时(7天)
|
|
|
+ return hoursDifference >= 168;
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|