package com.moral.api.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.entity.Device; import com.moral.api.entity.DeviceAdjustValue; import com.moral.api.entity.Sensor; import com.moral.api.entity.SpecialDevice; import com.moral.api.mapper.DeviceAdjustValueMapper; import com.moral.api.mapper.DeviceMapper; import com.moral.api.mapper.SensorMapper; import com.moral.api.mapper.SpecialDeviceMapper; import com.moral.api.pojo.dto.adjust.AdjustDTO; import com.moral.api.pojo.form.adjust.AdjustForm; import com.moral.api.service.DeviceAdjustValueService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.util.LogUtils; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.jdbc.object.UpdatableSqlQuery; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.sql.Time; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** *

* 服务实现类 *

* * @author moral * @since 2021-06-07 */ @Service public class DeviceAdjustValueServiceImpl extends ServiceImpl implements DeviceAdjustValueService { @Autowired(required = false) private DeviceAdjustValueMapper deviceAdjustValueMapper; @Autowired(required = false) private DeviceMapper deviceMapper; @Autowired(required = false) private SpecialDeviceMapper specialDeviceMapper; @Autowired(required = false) private SensorMapper sensorMapper; @Autowired RedisTemplate redisTemplate; @Override @Transactional public Map insertOne(DeviceAdjustValue deviceAdjustValue) { Map resultMap = new HashMap<>(); if (ObjectUtils.isEmpty(deviceAdjustValue.getMac())){ resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } if (ObjectUtils.isEmpty(deviceAdjustValue.getValue())||deviceAdjustValue.getValue().equals("")){ resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } QueryWrapper wrapper_device = new QueryWrapper<>(); wrapper_device.eq("is_delete",Constants.NOT_DELETE); wrapper_device.eq("mac",deviceAdjustValue.getMac()); QueryWrapper wrapper_specialDevice = new QueryWrapper<>(); wrapper_specialDevice.eq("is_delete",Constants.NOT_DELETE); wrapper_specialDevice.eq("mac",deviceAdjustValue.getMac()); if (deviceMapper.selectCount(wrapper_device)==0 && specialDeviceMapper.selectCount(wrapper_specialDevice)==0){ resultMap.put("code",ResponseCodeEnum.DEVICE_IS_NULL.getCode()); resultMap.put("msg",ResponseCodeEnum.DEVICE_IS_NULL.getMsg()); return resultMap; } QueryWrapper wrapper_sensor = new QueryWrapper<>(); wrapper_sensor.eq("is_delete",Constants.NOT_DELETE); wrapper_sensor.eq("code",deviceAdjustValue.getSensorCode()); if (sensorMapper.selectCount(wrapper_sensor)==0){ resultMap.put("code",ResponseCodeEnum.SENSOR_IS_NOT_EXIST.getCode()); resultMap.put("msg",ResponseCodeEnum.SENSOR_IS_NOT_EXIST.getMsg()); return resultMap; } deviceAdjustValueMapper.insert(deviceAdjustValue); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String content = "添加了"+deviceAdjustValue.getMac()+"设备"+deviceAdjustValue.getSensorCode()+"传感器"+deviceAdjustValue.getStartTime()+"到"+deviceAdjustValue.getEndTime()+"的校准信息:"+";"; LogUtils.saveOperationForManage(request,content,Constants.INSERT_OPERATE_TYPE); //刷新缓存 refreshCache(deviceAdjustValue.getMac()); resultMap.put("code", ResponseCodeEnum.SUCCESS.getCode()); resultMap.put("msg", ResponseCodeEnum.SUCCESS.getMsg()); return resultMap; } @Override public Map getDataByCondition(Map map) { Map resultMap = new HashMap<>(); int current = Integer.parseInt(map.get("current").toString()); int size = Integer.parseInt(map.get("size").toString()); Page page = new Page<>(current,size); QueryWrapper wrapper_Condition = new QueryWrapper<>(); wrapper_Condition.eq("is_delete",Constants.NOT_DELETE); if (!ObjectUtils.isEmpty(map.get("mac"))){ wrapper_Condition.eq("mac",map.get("mac")); } if (!ObjectUtils.isEmpty(map.get("sensor_code"))){ wrapper_Condition.eq("sensor_code",map.get("sensor_code")); } if (!ObjectUtils.isEmpty(map.get("orderType"))){ String orderType = map.get("orderType").toString(); if (orderType.equals(Constants.ORDER_ASC)){ wrapper_Condition.orderByAsc("start_time"); }else { wrapper_Condition.orderByDesc("start_time"); } } Page resultPage = deviceAdjustValueMapper.selectPage(page,wrapper_Condition); List deviceAdjustValues = resultPage.getRecords(); List> deviceAdjustValueList = new ArrayList<>(); for (DeviceAdjustValue deviceAdjustValue:deviceAdjustValues) { Map deviceAdjustValueMap = JSON.parseObject(JSON.toJSONString(deviceAdjustValue),Map.class); Time startTime = new Time(Long.valueOf(Long.parseLong(deviceAdjustValueMap.get("startTime").toString()))); deviceAdjustValueMap.put("startTime",new Time(startTime.getTime())); Time endTime = new Time(Long.valueOf(Long.parseLong(deviceAdjustValueMap.get("endTime").toString()))); deviceAdjustValueMap.put("endTime",new Time(endTime.getTime())); deviceAdjustValueList.add(deviceAdjustValueMap); } resultMap.put("deviceAdjustValues",deviceAdjustValueList); int totalNumber = deviceAdjustValueMapper.selectCount(wrapper_Condition); resultMap.put("totalNumber",totalNumber); resultMap.put("current",current); resultMap.put("size",size); int totalPageNumber = totalNumber/size; if(totalNumber%size != 0){ totalPageNumber += 1; } resultMap.put("totalPageNumber",totalPageNumber); return resultMap; } @Override public Map updateOne(Map map) { Map resultMap = new HashMap<>(); if (ObjectUtils.isEmpty(map.get("id"))||map.get("id").equals("")){ resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } DeviceAdjustValue deviceAdjustValueOld = deviceAdjustValueMapper.selectById(Integer.parseInt(map.get("id").toString())); deviceAdjustValueMapper.updateDeviceAdjustValue(map); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String content = "修改了"+deviceAdjustValueOld.getMac()+"设备"+deviceAdjustValueOld.getSensorCode()+"传感器的校准信息:"+";"; for (Object key:map.keySet()) { if (key.toString().equals("start_time")&&map.get(key)!=null){ content = content+"开始时间:"+deviceAdjustValueOld.getStartTime()+"->"+map.get(key)+";"; } if (key.toString().equals("end_time")&&map.get(key)!=null){ content = content+"结束时间:"+deviceAdjustValueOld.getEndTime()+"->"+map.get(key)+";"; } if (key.toString().equals("value")&&map.get(key)!=null){ content = content+"校准公式:"+deviceAdjustValueOld.getValue()+"->"+map.get(key)+";"; } } LogUtils.saveOperationForManage(request,content,Constants.UPDATE_OPERATE_TYPE); //刷新缓存 refreshCache(deviceAdjustValueOld.getMac()); resultMap.put("code",ResponseCodeEnum.SUCCESS.getCode()); resultMap.put("msg",ResponseCodeEnum.SUCCESS.getMsg()); return resultMap; } @Override public Map deleteOne(Map map) { Map resultMap = new HashMap<>(); if (ObjectUtils.isEmpty(map.get("id"))||map.get("id").equals("")){ resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("is_delete",Constants.NOT_DELETE); wrapper.eq("id",map.get("id")); DeviceAdjustValue deviceAdjustValue = deviceAdjustValueMapper.selectOne(wrapper); if (ObjectUtils.isEmpty(deviceAdjustValue)){ resultMap.put("code",ResponseCodeEnum.TARGET_IS_NULL.getCode()); resultMap.put("msg",ResponseCodeEnum.TARGET_IS_NULL.getMsg()); return resultMap; } Map deleteMap = new HashMap<>(); deleteMap.put("id",map.get("id")); deleteMap.put("is_delete",Constants.DELETE); deviceAdjustValueMapper.updateDeviceAdjustValue(deleteMap); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String content = "删除了"+deviceAdjustValue.getMac()+"设备"+deviceAdjustValue.getSensorCode()+"传感器"+deviceAdjustValue.getStartTime()+"到"+deviceAdjustValue.getEndTime()+"的校准信息:"+";"; LogUtils.saveOperationForManage(request,content,Constants.DELETE_OPERATE_TYPE); //刷新缓存 refreshCache(deviceAdjustValue.getMac()); resultMap.put("code",ResponseCodeEnum.SUCCESS.getCode()); resultMap.put("msg",ResponseCodeEnum.SUCCESS.getMsg()); return resultMap; } @Override public Map getTimeSlot(Map map) { Map resultMap = new HashMap<>(); if (ObjectUtils.isEmpty(map.get("sensor_code"))||map.get("sensor_code").equals("")){ resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } if (ObjectUtils.isEmpty(map.get("mac"))||map.get("mac").equals("")){ resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("is_delete",Constants.NOT_DELETE); wrapper.eq("sensor_code",map.get("sensor_code")); wrapper.eq("mac",map.get("mac")); List deviceAdjustValues = deviceAdjustValueMapper.selectList(wrapper); List> timeSlotList = new ArrayList<>(); if (deviceAdjustValues.size()==0){ resultMap.put("timeSlotList",timeSlotList); return resultMap; } for (DeviceAdjustValue deviceAdjustValue:deviceAdjustValues) { Map timeSlotMap = new HashMap(); timeSlotMap.put("id",deviceAdjustValue.getId()); timeSlotMap.put("startTime",deviceAdjustValue.getStartTime()); timeSlotMap.put("endTime",deviceAdjustValue.getEndTime()); timeSlotList.add(timeSlotMap); } resultMap.put("timeSlotList",timeSlotList); return resultMap; } @Override public Map refreshRedis() { Map resultMap = new HashMap<>(); QueryWrapper wrapper_mac = new QueryWrapper<>(); wrapper_mac.eq("is_delete",Constants.NOT_DELETE); wrapper_mac.select("DISTINCT mac"); List deviceAdjustValues = deviceAdjustValueMapper.selectList(wrapper_mac); for (DeviceAdjustValue deviceAdjustValue:deviceAdjustValues) { //刷新缓存 refreshCache(deviceAdjustValue.getMac()); } resultMap.put("code",ResponseCodeEnum.SUCCESS.getCode()); resultMap.put("msg",ResponseCodeEnum.SUCCESS.getMsg()); return resultMap; } /** * 批量修改校准值 * * @param parameters * @return */ @Override public List> getAllAdjust(Map parameters) { ArrayList> rsList = new ArrayList<>(); String code = parameters.get("code").toString(); List adjustDTOS = deviceAdjustValueMapper.selectAllAdjust(parameters); for (AdjustDTO adjustDTO : adjustDTOS) { HashMap map = new HashMap<>(); String value = adjustDTO.getValue(); if (ObjectUtils.isEmpty(value)){ if (code.equals("a99054")){ value ="cel*1"; map.put("cel",1); }else { value ="aqi*0+cel*1"; map.put("aqi",0); map.put("cel",1); } }else { if (code.equals("a99054")&& !value.contains("+")){ String[] split = value.split("\\*"); map.put("cel",Double.parseDouble(split[1])); }else { String[] split = value.split("\\+"); String[] split1 = split[0].toString().split("\\*"); map.put("aqi",Double.parseDouble(split1[1])); String[] split2 = split[1].toString().split("\\*"); map.put("cel",Double.parseDouble(split2[1])); } } map.put("value",value); map.put("name",adjustDTO.getName()); map.put("id",adjustDTO.getId()); map.put("mac",adjustDTO.getMac()); map.put("code",code); rsList.add(map); } return rsList; } /** * 批量修改校准值 * * @param paras * @return */ @Override @Transactional public Map updateAllAdjust(List paras) { Map resultMap = new HashMap<>(); StringBuffer buffer = new StringBuffer(); for (AdjustForm adjustForm : paras) { DeviceAdjustValue deviceAdjustValue = new DeviceAdjustValue(); QueryWrapper wrapper1 = new QueryWrapper<>(); wrapper1.eq("mac",adjustForm.getMac()); wrapper1.eq ("sensor_code",adjustForm.getCode()); Integer integer = deviceAdjustValueMapper.selectCount(wrapper1); if (integer==0){ deviceAdjustValue.setValue(adjustForm.getAgehou()); deviceAdjustValue.setCreateTime(new Date()); deviceAdjustValue.setIsDelete("0"); deviceAdjustValue.setUpdateTime(new Date()); deviceAdjustValue.setSensorCode(adjustForm.getCode()); deviceAdjustValue.setMac(adjustForm.getMac()); deviceAdjustValue.setEndTime(Time.valueOf("23:59:00")); deviceAdjustValue.setStartTime(Time.valueOf("00:00:00")); deviceAdjustValueMapper.insert(deviceAdjustValue); }else { deviceAdjustValue.setValue(adjustForm.getAgehou()); deviceAdjustValue.setUpdateTime(new Date()); deviceAdjustValue.setId(adjustForm.getId()); deviceAdjustValueMapper.updateById(deviceAdjustValue); } buffer.append("mac: "+adjustForm.getMac()).append(", value: "+adjustForm.getAgehou()+"; "); //刷新缓存 refreshCache(adjustForm.getMac()); } resultMap.put("code",ResponseCodeEnum.SUCCESS.getCode()); resultMap.put("msg",ResponseCodeEnum.SUCCESS.getMsg()); //插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); LogUtils.saveOperationForManage(request,"批量修改效准值: "+buffer.toString(),Constants.UPDATE_OPERATE_TYPE); return resultMap; } public void refreshRedisAll(){ refreshRedis(); } private Map getDeviceAdjustValueFromDB(String mac){ QueryWrapper wapper_redis = new QueryWrapper<>(); wapper_redis.eq("mac",mac); wapper_redis.eq("is_delete",Constants.NOT_DELETE); List deviceAdjustValueList = deviceAdjustValueMapper.selectList(wapper_redis); if (deviceAdjustValueList.size()==0){ return null; } Map deviceAdjustValueMap = new HashMap<>(); for (DeviceAdjustValue deviceAdjustValue:deviceAdjustValueList) { String sensor_code = deviceAdjustValue.getSensorCode(); List timeSlotValueList = new ArrayList<>(); for (DeviceAdjustValue deviceAdjustValueIn:deviceAdjustValueList) { if (deviceAdjustValueIn.getSensorCode().equals(sensor_code)){ Map timeSlot_value = new HashMap<>(); timeSlot_value.put("start_time",deviceAdjustValue.getStartTime()); timeSlot_value.put("end_time",deviceAdjustValue.getEndTime()); timeSlot_value.put("value",deviceAdjustValue.getValue()); timeSlotValueList.add(deviceAdjustValueIn); } } deviceAdjustValueMap.put(sensor_code,timeSlotValueList); } return deviceAdjustValueMap; } private void refreshCache(String mac){ Map deviceAdjustValueMap = getDeviceAdjustValueFromDB(mac); refreshCache(deviceAdjustValueMap,mac); } private void refreshCache(Map deviceAdjustValueMap,String mac){ //删除缓存 redisTemplate.delete("adjust_"+mac); //添加缓存 if (!ObjectUtils.isEmpty(deviceAdjustValueMap)){ redisTemplate.opsForHash().putAll("adjust_"+mac,deviceAdjustValueMap); } } }