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; /** *

* 前端控制器 *

* * @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 alarmClean(@RequestBody AlarmCleanParam params) { String clientId = params.getClientId(); Integer makeCandyNum = params.getMakeCandyNum(); String isOversea = params.getIsOversea(); // 根据 clientId 查找清洗提醒信息 LambdaQueryWrapper 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 qw = Wrappers.lambdaQuery(); qw.eq(TEquipment::getClientId, clientId); TEquipment equipment = equipmentService.getOne(qw); Long equipmentId = equipment.getId(); Long adminId = equipment.getAdminId(); LambdaQueryWrapper 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 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; } }