|  |  |  | 
|---|
|  |  |  | 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.extension.plugins.pagination.Page; | 
|---|
|  |  |  | import com.moral.api.config.mybatis.wrapper.NullFilterWrapper; | 
|---|
|  |  |  | import com.moral.api.entity.Sensor; | 
|---|
|  |  |  | import com.moral.api.entity.SysDictData; | 
|---|
|  |  |  | import com.moral.api.entity.UnitConversion; | 
|---|
|  |  |  | import com.moral.api.mapper.UnitConversionMapper; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.moral.api.pojo.form.unitConversion.UnitConversionInsertForm; | 
|---|
|  |  |  | import com.moral.api.pojo.form.unitConversion.UnitConversionQueryForm; | 
|---|
|  |  |  | import com.moral.api.pojo.form.unitConversion.UnitConversionUpdateForm; | 
|---|
|  |  |  | import com.moral.api.service.SensorService; | 
|---|
|  |  |  | import com.moral.api.service.SysDictDataService; | 
|---|
|  |  |  | import com.moral.api.service.UnitConversionService; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
|---|
|  |  |  | import com.moral.api.util.CacheUtils; | 
|---|
|  |  |  | import com.moral.api.util.LogUtils; | 
|---|
|  |  |  | import com.moral.constant.Constants; | 
|---|
|  |  |  | import com.moral.constant.RedisConstants; | 
|---|
|  |  |  | import com.moral.constant.ResponseCodeEnum; | 
|---|
|  |  |  | import com.moral.util.ConvertUtils; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.data.redis.core.RedisTemplate; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | import org.springframework.util.ObjectUtils; | 
|---|
|  |  |  | 
|---|
|  |  |  | UnitConversionMapper unitConversionMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | SysDictDataService sysDictDataService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | RedisTemplate redisTemplate; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | SensorService sensorService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //插入数据 | 
|---|
|  |  |  | unitConversionMapper.insert(unitConversion); | 
|---|
|  |  |  | //刷新缓存 | 
|---|
|  |  |  | refreshCache(); | 
|---|
|  |  |  | //插入日志 | 
|---|
|  |  |  | insertLog(unitConversion); | 
|---|
|  |  |  | //封装返回数据 | 
|---|
|  |  |  | dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); | 
|---|
|  |  |  | dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); | 
|---|
|  |  |  | 
|---|
|  |  |  | oldUnitConversion = unitConversionMapper.selectOne(oldWrapper); | 
|---|
|  |  |  | //更新 | 
|---|
|  |  |  | unitConversionMapper.updateById(unitConversion); | 
|---|
|  |  |  | //刷新缓存 | 
|---|
|  |  |  | refreshCache(); | 
|---|
|  |  |  | //操作插入日志 | 
|---|
|  |  |  | updateLog(oldUnitConversion,form.getFormula()); | 
|---|
|  |  |  | //封装返回结果 | 
|---|
|  |  |  | dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); | 
|---|
|  |  |  | dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public UnitConversionDTO deleteUnitConversion(UnitConversionDeleteForm form) { | 
|---|
|  |  |  | //创建返回对象 | 
|---|
|  |  |  | UnitConversionDTO dto = new UnitConversionDTO(); | 
|---|
|  |  |  | 
|---|
|  |  |  | deleteWrapper.set("is_delete", Constants.DELETE); | 
|---|
|  |  |  | deleteWrapper.eq("id", id); | 
|---|
|  |  |  | unitConversionMapper.update(null, deleteWrapper); | 
|---|
|  |  |  | //刷新缓存 | 
|---|
|  |  |  | refreshCache(); | 
|---|
|  |  |  | //操作插入日志 | 
|---|
|  |  |  | deleteLog(oldUnitConversion); | 
|---|
|  |  |  | //封装返回对象 | 
|---|
|  |  |  | dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); | 
|---|
|  |  |  | dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); | 
|---|
|  |  |  | return dto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /*刷新缓存*/ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void refreshCache(){ | 
|---|
|  |  |  | //刷新设备缓存 | 
|---|
|  |  |  | CacheUtils.refreshDeviceAlarmInfo(); | 
|---|
|  |  |  | redisTemplate.delete((RedisConstants.UNIT_CONVERSION)); | 
|---|
|  |  |  | QueryWrapper<UnitConversion> queryWrapper = new QueryWrapper<>(); | 
|---|
|  |  |  | queryWrapper.eq("is_delete",Constants.NOT_DELETE); | 
|---|
|  |  |  | List<UnitConversion> unitConversions = unitConversionMapper.selectList(queryWrapper); | 
|---|
|  |  |  | if(!ObjectUtils.isEmpty(unitConversions)) | 
|---|
|  |  |  | redisTemplate.opsForList().leftPushAll(RedisConstants.UNIT_CONVERSION,unitConversions); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @Description: 插入操作插入日志 | 
|---|
|  |  |  | * @Param: [unitConversion] | 
|---|
|  |  |  | * @return: void | 
|---|
|  |  |  | * @Author: 陈凯裕 | 
|---|
|  |  |  | * @Date: 2021/8/26 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void insertLog(UnitConversion unitConversion){ | 
|---|
|  |  |  | //获取单位字典数据 | 
|---|
|  |  |  | Map<String, SysDictData> units = sysDictDataService.getDictDatasByType("unit"); | 
|---|
|  |  |  | String originalUnitKey = unitConversion.getOriginalUnitKey(); | 
|---|
|  |  |  | String targetUnitKey = unitConversion.getTargetUnitKey(); | 
|---|
|  |  |  | SysDictData originalData = units.get(originalUnitKey); | 
|---|
|  |  |  | SysDictData targetData = units.get(targetUnitKey); | 
|---|
|  |  |  | String formula = unitConversion.getFormula(); | 
|---|
|  |  |  | //公式转换格式 | 
|---|
|  |  |  | formula = formula.replace(Constants.FORMULA_PLACEHOLDER, "源单位"); | 
|---|
|  |  |  | formula = "目标单位"+" = "+formula; | 
|---|
|  |  |  | String sensorCode = unitConversion.getSensorCode(); | 
|---|
|  |  |  | StringBuilder content = new StringBuilder(); | 
|---|
|  |  |  | content.append("添加了单位转换数据;"); | 
|---|
|  |  |  | content.append("源单位:"+originalData.getDataValue()+";"); | 
|---|
|  |  |  | content.append("目标单位:"+targetData.getDataValue()+";"); | 
|---|
|  |  |  | content.append("转换公式:"+formula+";"); | 
|---|
|  |  |  | if(sensorCode!=null){ | 
|---|
|  |  |  | Sensor sensor = sensorService.getSensorByCode(sensorCode); | 
|---|
|  |  |  | if(sensor!=null) | 
|---|
|  |  |  | content.append("针对因子:"+sensor.getName()+";"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LogUtils.saveOperationForManage(content.toString(),Constants.INSERT_OPERATE_TYPE); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @Description: 删除操作插入日志 | 
|---|
|  |  |  | * @Param: [unitConversion] | 
|---|
|  |  |  | * @return: void | 
|---|
|  |  |  | * @Author: 陈凯裕 | 
|---|
|  |  |  | * @Date: 2021/8/26 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void deleteLog(UnitConversion unitConversion){ | 
|---|
|  |  |  | //获取单位字典数据 源单位 目标单位名称 | 
|---|
|  |  |  | Map<String, SysDictData> units = sysDictDataService.getDictDatasByType("unit"); | 
|---|
|  |  |  | String originalUnitKey = unitConversion.getOriginalUnitKey(); | 
|---|
|  |  |  | String targetUnitKey = unitConversion.getTargetUnitKey(); | 
|---|
|  |  |  | SysDictData originalData = units.get(originalUnitKey); | 
|---|
|  |  |  | SysDictData targetData = units.get(targetUnitKey); | 
|---|
|  |  |  | //公式转换格式 | 
|---|
|  |  |  | String formula = unitConversion.getFormula(); | 
|---|
|  |  |  | formula = formula.replace(Constants.FORMULA_PLACEHOLDER, "源单位"); | 
|---|
|  |  |  | formula = "目标单位"+" = "+formula; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | StringBuilder content = new StringBuilder("删除了转换公式;"); | 
|---|
|  |  |  | content.append("源单位:"+originalData.getDataValue()+";"); | 
|---|
|  |  |  | content.append("目标单位:"+targetData.getDataValue()+";"); | 
|---|
|  |  |  | content.append("转换公式:"+formula+";"); | 
|---|
|  |  |  | //如果有针对因子则获取针对因子名称 | 
|---|
|  |  |  | String sensorCode = unitConversion.getSensorCode(); | 
|---|
|  |  |  | if(sensorCode!=null){ | 
|---|
|  |  |  | Sensor sensor = sensorService.getSensorByCode(sensorCode); | 
|---|
|  |  |  | if(sensor!=null) | 
|---|
|  |  |  | content.append("针对因子:"+sensor.getName()+";"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LogUtils.saveOperationForManage(content.toString(),Constants.DELETE_OPERATE_TYPE); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @Description: 更新操作插入日志 | 
|---|
|  |  |  | * @Param: [unitConversion] | 
|---|
|  |  |  | * @return: void | 
|---|
|  |  |  | * @Author: 陈凯裕 | 
|---|
|  |  |  | * @Date: 2021/8/26 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void updateLog(UnitConversion oldUnitConversion,String newFormular){ | 
|---|
|  |  |  | StringBuilder content = new StringBuilder("修改了单位转换公式;"); | 
|---|
|  |  |  | //获取单位字典数据 源单位 目标单位名称 | 
|---|
|  |  |  | Map<String, SysDictData> units = sysDictDataService.getDictDatasByType("unit"); | 
|---|
|  |  |  | String originalUnitKey = oldUnitConversion.getOriginalUnitKey(); | 
|---|
|  |  |  | String targetUnitKey = oldUnitConversion.getTargetUnitKey(); | 
|---|
|  |  |  | SysDictData originalData = units.get(originalUnitKey); | 
|---|
|  |  |  | SysDictData targetData = units.get(targetUnitKey); | 
|---|
|  |  |  | //新公式转换格式 | 
|---|
|  |  |  | newFormular = newFormular.replace(Constants.FORMULA_PLACEHOLDER, "源单位"); | 
|---|
|  |  |  | newFormular = "目标单位"+" = "+newFormular; | 
|---|
|  |  |  | //旧公式转换 | 
|---|
|  |  |  | String oldFormula = oldUnitConversion.getFormula(); | 
|---|
|  |  |  | oldFormula = oldFormula.replace(Constants.FORMULA_PLACEHOLDER, "源单位"); | 
|---|
|  |  |  | oldFormula = "目标单位"+" = "+oldFormula; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | content.append("源单位:"+originalData.getDataValue()+";"); | 
|---|
|  |  |  | content.append("目标单位:"+targetData.getDataValue()+";"); | 
|---|
|  |  |  | content.append("转换公式:"+oldFormula+"->"+newFormular+";"); | 
|---|
|  |  |  | //如果有针对因子则获取针对因子名称 | 
|---|
|  |  |  | String sensorCode = oldUnitConversion.getSensorCode(); | 
|---|
|  |  |  | if(sensorCode!=null){ | 
|---|
|  |  |  | Sensor sensor = sensorService.getSensorByCode(sensorCode); | 
|---|
|  |  |  | if(sensor!=null) | 
|---|
|  |  |  | content.append("针对因子:"+sensor.getName()+";"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LogUtils.saveOperationForManage(content.toString(),Constants.UPDATE_OPERATE_TYPE); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|