package com.szwl.controller;
import cn.com.crbank.ommo.bean.ResultMessage;
import com.alibaba.fastjson.JSONObject;
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.TAlarmClock;
import com.szwl.model.entity.TAlarmClockItem;
import com.szwl.model.entity.TEquipment;
import com.szwl.model.utils.PushUtils;
import com.szwl.service.TAlarmClockItemService;
import com.szwl.service.TAlarmClockService;
import com.szwl.service.TEquipmentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
*
* 闹钟列表 前端控制器
*
*
* @author wuhs
* @since 2022-06-02
*/
@Api(value = "/tAlarmClock", tags = {"闹钟"})
@RestController
@RequestMapping("/tAlarmClock")
public class TAlarmClockController {
@Autowired
TAlarmClockService tAlarmClockService;
@Autowired
TAlarmClockItemService tAlarmClockItemService;
@Autowired
TEquipmentService tEquipmentService;
@ApiOperation(value = "查询闹钟列表信息")
@GetMapping("/list")
public ResponseEntity> list(String adminId){
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClock::getAdminId,Long.valueOf(adminId));
List alarmClockList = tAlarmClockService.list(query);
if(alarmClockList.size()==0){
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(false).setData(null).setMessage("尚未设置闹钟"));
}
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(true).setData(alarmClockList).setMessage("SUCCESS"));
}
@ApiOperation(value = "添加闹钟")
@PostMapping("/add")
public ResponseEntity> add(@RequestBody TAlarmClock alarmClock){
if(alarmClock==null|| StringUtils.isEmpty(alarmClock.getWeek())||StringUtils.isEmpty(alarmClock.getEquipmentIds())){
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(false).setData(null).setMessage("数据为空"));
}
Date date = new Date();
alarmClock.setCreateDate(date);
alarmClock.setModifyDate(date);
alarmClock.setEquipmentIds(alarmClock.getEquipmentIds()+",");
alarmClock.setWeek(alarmClock.getWeek()+",");
alarmClock.setHour(alarmClock.getHour()+":00");
tAlarmClockService.save(alarmClock);
// sentMessageToEquiment(alarmClock.getType(),alarmClock.getEquipmentIds(),alarmClock.getAdminId());
//避免返回大量数据
// alarmClock.setEquipmentIds(null);
Long alarmClockItemId = alarmClock.getId();
String equipmentIds = alarmClock.getEquipmentIds();
String[] eids = equipmentIds.split(",");
for (int i = 0;i < eids.length;i++){
TAlarmClockItem alarmClockItem = new TAlarmClockItem();
alarmClockItem.setAdminId(alarmClock.getAdminId());
alarmClockItem.setEquipmentId(Long.valueOf(eids[i]));
alarmClockItem.setClockId(alarmClockItemId);
alarmClockItem.setHour(alarmClock.getHour());
alarmClockItem.setWeek(alarmClock.getWeek());
alarmClockItem.setStatus(alarmClock.getStatus());
alarmClockItem.setType(alarmClock.getType());
// alarmClockItem.setIsCirculate(alarmClocka1.getIsCirculate());
alarmClockItem.setModifyDate(alarmClock.getModifyDate());
alarmClockItem.setCreateDate(alarmClock.getCreateDate());
tAlarmClockItemService.save(alarmClockItem);
}
for (int i = 0;i < eids.length;i++){
TEquipment equipment = tEquipmentService.getById(Long.valueOf(eids[i]));
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getEquipmentId,Long.valueOf(eids[i]));
query.eq(TAlarmClockItem::getType,alarmClock.getType());
query.eq(TAlarmClockItem::getStatus,"1");
List tAlarmClockItems = tAlarmClockItemService.list(query);
Map map = new HashMap<>();
List list = new ArrayList<>();
if(tAlarmClockItems.size()>0){
for(TAlarmClockItem alarmClockItem:tAlarmClockItems){
list.add(alarmClockItem.getWeek()+":"+alarmClockItem.getHour());
}
JSONObject kindData = new JSONObject();
kindData.put("type" ,alarmClock.getType());
kindData.put("data" , list);
tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("alarmClock", kindData.toString()).toString());
// PushUtils.push(equipment.getGtClientId(), "", "", PushUtils.buildJson("alarmClock", kindData.toString()).toString());
}
}
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(true).setData(alarmClock).setMessage("SUCCESS"));
}
@ApiOperation(value = "闹钟详情")
@PostMapping("/selectOne")
public ResponseEntity> selectOne(@RequestBody TAlarmClock alarmClock){
if(alarmClock.getId()==null){
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(false).setData(null).setMessage("数据为空"));
}
TAlarmClock tAlarmClock = tAlarmClockService.getById(alarmClock.getId());
tAlarmClock.setWeek(tAlarmClock.getWeek().substring(0,tAlarmClock.getWeek().length()-1));
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(true).setData(tAlarmClock).setMessage("SUCCESS"));
}
@ApiOperation(value = "修改闹钟")
@PostMapping("/updata")
public ResponseEntity> updata(@RequestBody TAlarmClock alarmClock){
if(alarmClock==null||StringUtils.isEmpty(alarmClock.getHour())){
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(false).setData(null).setMessage("数据为空"));
}
if(StringUtils.isEmpty(alarmClock.getEquipmentIds())){
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(false).setData(null).setMessage("机器为空"));
}
if(StringUtils.isEmpty(alarmClock.getWeek())){
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(false).setData(null).setMessage("星期为空"));
}
//要确认修改了什么状态,机器的增减情况
TAlarmClock oldAlarmClock = tAlarmClockService.getById(alarmClock.getId());
oldAlarmClock.setName(alarmClock.getName());
tAlarmClockService.updateById(oldAlarmClock);
//是否启用状态 0:未开启,1:已开启
if(!oldAlarmClock.getStatus().equals(alarmClock.getStatus())){
//修改了状态
//是否改变了闹钟的类型
if(!oldAlarmClock.getType().equals(alarmClock.getType())){
//修改了类型
//1,修改原有类型的闹钟及删除其对应的单个机器的数据,再重新创建。要把改变前和改变后的机器都通知一遍,要注意分类型推送
//修改类型
oldAlarmClock.setStatus(alarmClock.getStatus());
String oldAlarmClockType = oldAlarmClock.getType();
oldAlarmClock.setType(alarmClock.getType());
String oldEquipmentIds = oldAlarmClock.getEquipmentIds();
oldAlarmClock.setEquipmentIds(alarmClock.getEquipmentIds()+",");
oldAlarmClock.setModifyDate(new Date());
oldAlarmClock.setHour(alarmClock.getHour()+":00");
oldAlarmClock.setWeek(alarmClock.getWeek()+",");
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//旧类型通知
sentMessageToEquiment(oldAlarmClockType,oldEquipmentIds,oldAlarmClock.getAdminId());
//新类型通知
sentMessageToEquiment(alarmClock.getType(),alarmClock.getEquipmentIds(),alarmClock.getAdminId());
}else{
//没有修改了类型 判断机器有没有做改变
String oldEquipmentIds = oldAlarmClock.getEquipmentIds();
String nowEquipmentIds = alarmClock.getEquipmentIds()+",";
Boolean b = changIds(oldEquipmentIds,nowEquipmentIds);
//b=true 机器改变 b=false 机器没有改变
if(b){
//b=true 机器改变
//修改t_alarm_clock的机器ids及删除其对应的单个机器的数据,再重新创建。要把改变前和改变后的机器都通知一遍
//修改类型t_alarm_clock的机器ids
oldAlarmClock.setStatus(alarmClock.getStatus());
oldAlarmClock.setEquipmentIds(oldAlarmClock.getEquipmentIds());
oldAlarmClock.setModifyDate(new Date());
oldAlarmClock.setHour(alarmClock.getHour()+":00");
oldAlarmClock.setWeek(alarmClock.getWeek()+",");
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//旧机器通知
sentMessageToEquiment(alarmClock.getType(),oldEquipmentIds,oldAlarmClock.getAdminId());
//新机器通知
sentMessageToEquiment(alarmClock.getType(),nowEquipmentIds,alarmClock.getAdminId());
}else{
//b=false 机器没有改变 修改了状态 没有修改了类型
//判断星期有没有改变
Boolean aBoolean = changIds(oldAlarmClock.getWeek(), alarmClock.getWeek()+",");
if(aBoolean){
//week星期有改变
//修改t_alarm_clock的机器week及删除其对应的单个机器的数据,再重新创建。要把机器通知一遍
oldAlarmClock.setStatus(alarmClock.getStatus());
oldAlarmClock.setModifyDate(new Date());
oldAlarmClock.setHour(alarmClock.getHour()+":00");
oldAlarmClock.setWeek(alarmClock.getWeek()+",");
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
// TAlarmClockItemExample itemExample = new TAlarmClockItemExample();
// TAlarmClockItemExample.Criteria criteria = itemExample.createCriteria();
// criteria.andClockIdEqualTo(oldAlarmClock.getId());
// tAlarmClockItemService.deleteByOption(itemExample);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//机器通知
sentMessageToEquiment(alarmClock.getType(),oldEquipmentIds,oldAlarmClock.getAdminId());
}else {
//week星期没有改变 修改了状态 没有修改了类型
//判断时间有没有改变
if(!oldAlarmClock.getHour().equals(alarmClock.getHour()+":00")){
//有改变
//修改t_alarm_clock的机器hour及删除其对应的单个机器的数据,再重新创建。要把机器通知一遍
oldAlarmClock.setStatus(alarmClock.getStatus());
oldAlarmClock.setModifyDate(new Date());
oldAlarmClock.setHour(alarmClock.getHour()+":00");
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
// TAlarmClockItemExample itemExample = new TAlarmClockItemExample();
// TAlarmClockItemExample.Criteria criteria = itemExample.createCriteria();
// criteria.andClockIdEqualTo(oldAlarmClock.getId());
// tAlarmClockItemService.deleteByOption(itemExample);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//机器通知
sentMessageToEquiment(alarmClock.getType(),oldEquipmentIds,oldAlarmClock.getAdminId());
}else{
//没改变
oldAlarmClock.setStatus(alarmClock.getStatus());
oldAlarmClock.setModifyDate(new Date());
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
// TAlarmClockItemExample itemExample = new TAlarmClockItemExample();
// TAlarmClockItemExample.Criteria criteria = itemExample.createCriteria();
// criteria.andClockIdEqualTo(oldAlarmClock.getId());
// tAlarmClockItemService.deleteByOption(itemExample);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//机器通知
sentMessageToEquiment(alarmClock.getType(),oldEquipmentIds,oldAlarmClock.getAdminId());
}
}
}
}
}else{
//没有修改状态
//是否改变了闹钟的类型
if(!oldAlarmClock.getType().equals(alarmClock.getType())){
//修改了类型
//1,修改原有类型的闹钟及删除其对应的单个机器的数据,再重新创建。要把改变前和改变后的机器都通知一遍,要注意分类型推送
//修改类型
oldAlarmClock.setStatus(alarmClock.getStatus());
String oldAlarmClockType = oldAlarmClock.getType();
oldAlarmClock.setType(alarmClock.getType());
String oldEquipmentIds = oldAlarmClock.getEquipmentIds();
oldAlarmClock.setEquipmentIds(alarmClock.getEquipmentIds()+",");
oldAlarmClock.setModifyDate(new Date());
oldAlarmClock.setHour(alarmClock.getHour()+":00");
oldAlarmClock.setWeek(alarmClock.getWeek()+",");
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
// TAlarmClockItemExample itemExample = new TAlarmClockItemExample();
// TAlarmClockItemExample.Criteria criteria = itemExample.createCriteria();
// criteria.andClockIdEqualTo(oldAlarmClock.getId());
// tAlarmClockItemService.deleteByOption(itemExample);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//旧类型通知
sentMessageToEquiment(oldAlarmClockType,oldEquipmentIds,oldAlarmClock.getAdminId());
//新类型通知
sentMessageToEquiment(alarmClock.getType(),alarmClock.getEquipmentIds(),alarmClock.getAdminId());
}else{
//没有修改类型 判断机器有没有做改变
String oldEquipmentIds = oldAlarmClock.getEquipmentIds();
String nowEquipmentIds = alarmClock.getEquipmentIds()+",";
Boolean b = changIds(oldEquipmentIds,nowEquipmentIds);
//b=true 机器改变 b=false 机器没有改变
if(b){
//b=true 机器改变
//修改t_alarm_clock的机器ids及删除其对应的单个机器的数据,再重新创建。要把改变前和改变后的机器都通知一遍
//修改类型t_alarm_clock的机器ids
oldAlarmClock.setEquipmentIds(alarmClock.getEquipmentIds()+",");
oldAlarmClock.setModifyDate(new Date());
oldAlarmClock.setHour(alarmClock.getHour()+":00");
oldAlarmClock.setWeek(alarmClock.getWeek()+",");
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
// TAlarmClockItemExample itemExample = new TAlarmClockItemExample();
// TAlarmClockItemExample.Criteria criteria = itemExample.createCriteria();
// criteria.andClockIdEqualTo(oldAlarmClock.getId());
// tAlarmClockItemService.deleteByOption(itemExample);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//旧机器通知
sentMessageToEquiment(alarmClock.getType(),oldEquipmentIds,oldAlarmClock.getAdminId());
//新机器通知
sentMessageToEquiment(alarmClock.getType(),nowEquipmentIds,alarmClock.getAdminId());
}else{
//b=false 机器没有改变 没有修改状态 没有修改类型
//判断星期有没有改变
Boolean aBoolean = changIds(oldAlarmClock.getWeek(), alarmClock.getWeek()+",");
if(aBoolean){
//week星期有改变
//修改t_alarm_clock的机器week及删除其对应的单个机器的数据,再重新创建。要把机器通知一遍
oldAlarmClock.setStatus(alarmClock.getStatus());
oldAlarmClock.setModifyDate(new Date());
oldAlarmClock.setHour(alarmClock.getHour()+":00");
oldAlarmClock.setWeek(alarmClock.getWeek()+",");
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
// TAlarmClockItemExample itemExample = new TAlarmClockItemExample();
// TAlarmClockItemExample.Criteria criteria = itemExample.createCriteria();
// criteria.andClockIdEqualTo(oldAlarmClock.getId());
// tAlarmClockItemService.deleteByOption(itemExample);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//机器通知
sentMessageToEquiment(alarmClock.getType(),oldEquipmentIds,oldAlarmClock.getAdminId());
}else {
//week星期没有改变 修改了状态 没有修改了类型
//判断时间有没有改变
if(!oldAlarmClock.getHour().equals(alarmClock.getHour()+":00")){
//有改变
//修改t_alarm_clock的机器hour及删除其对应的单个机器的数据,再重新创建。要把机器通知一遍
oldAlarmClock.setStatus(alarmClock.getStatus());
oldAlarmClock.setModifyDate(new Date());
oldAlarmClock.setHour(alarmClock.getHour()+":00");
tAlarmClockService.updateById(oldAlarmClock);
//删除其对应的单个机器的数据
// TAlarmClockItemExample itemExample = new TAlarmClockItemExample();
// TAlarmClockItemExample.Criteria criteria = itemExample.createCriteria();
// criteria.andClockIdEqualTo(oldAlarmClock.getId());
// tAlarmClockItemService.deleteByOption(itemExample);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,oldAlarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(list.size()>0){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
//新增其对应的单个机器的数据
addItemList(oldAlarmClock);
//机器通知
sentMessageToEquiment(alarmClock.getType(),oldEquipmentIds,oldAlarmClock.getAdminId());
}
}
}
}
}
return ResponseEntity.status(HttpStatus.OK)
.body(new ResultMessage().setCode(true).setData(null).setMessage("SUCCESS"));
}
//机器及星期是否改变
private Boolean changIds(String oldEquipmentIds, String nowEquipmentIds) {
Boolean b = true;
String[] olds = oldEquipmentIds.split(",");
Long[] a = new Long[olds.length];
for(int i=0;i delete(@RequestBody TAlarmClock alarmClock){
if(alarmClock.getId()==null){
return R.fail(ResponseCodesEnum.A0001);
}
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getClockId,alarmClock.getId());
List list = tAlarmClockItemService.list(query);
if(!list.isEmpty()){
for(TAlarmClockItem tAlarmClockItem:list){
tAlarmClockItemService.removeById(tAlarmClockItem.getId());
}
}
tAlarmClockService.removeById(alarmClock.getId());
return R.ok();
}
// 添加对应单个机器的列表
private void addItemList(TAlarmClock alarmClock) {
Long alarmClockItemId = alarmClock.getId();
String equipmentIds = alarmClock.getEquipmentIds();
String[] eids = equipmentIds.split(",");
for (int i = 0;i < eids.length;i++){
TAlarmClockItem alarmClockItem = new TAlarmClockItem();
alarmClockItem.setAdminId(alarmClock.getAdminId());
alarmClockItem.setEquipmentId(Long.valueOf(eids[i]));
alarmClockItem.setClockId(alarmClockItemId);
alarmClockItem.setHour(alarmClock.getHour());
alarmClockItem.setWeek(alarmClock.getWeek());
alarmClockItem.setStatus(alarmClock.getStatus());
alarmClockItem.setType(alarmClock.getType());
alarmClockItem.setModifyDate(new Date());
alarmClockItem.setCreateDate(new Date());
tAlarmClockItemService.save(alarmClockItem);
}
}
// type 0:炉头开启,1:炉头关闭,2:开始休眠,3:结束休眠
private void sentMessageToEquiment(String type,String ids,Long adminId) {
String[] eids = ids.split(",");
if(eids.length>0){
for (int i = 0;i < eids.length;i++){
TEquipment equipment = tEquipmentService.getById(Long.valueOf(eids[i]));
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TAlarmClockItem::getEquipmentId,Long.valueOf(eids[i]));
query.eq(TAlarmClockItem::getType,type);
query.eq(TAlarmClockItem::getAdminId,adminId);
query.eq(TAlarmClockItem::getStatus,"1");
List tAlarmClockItems = tAlarmClockItemService.list(query);
JSONObject kindData = new JSONObject();
kindData.put("type" ,type);
List list = new ArrayList<>();
if(tAlarmClockItems.size()>0){
for(TAlarmClockItem alarmClockItem:tAlarmClockItems){
list.add(alarmClockItem.getWeek()+":"+alarmClockItem.getHour());
}
}
kindData.put("data" , list);
tEquipmentService.sentMessage(equipment.getClientId(),PushUtils.buildJson("alarmClock", kindData.toString()).toString());
}
}
}
}