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;
}
}