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.dto.unitConversion.UnitConversionDTO; import com.moral.api.pojo.dto.unitConversion.UnitConversionQueryDTO; import com.moral.api.pojo.form.unitConversion.UnitConversionDeleteForm; 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; import java.util.ArrayList; import java.util.List; import java.util.Map; /** *

* 单位转换表 服务实现类 *

* * @author moral * @since 2021-05-11 */ @Service public class UnitConversionServiceImpl extends ServiceImpl implements UnitConversionService { @Autowired UnitConversionMapper unitConversionMapper; @Autowired SysDictDataService sysDictDataService; @Autowired RedisTemplate redisTemplate; @Autowired SensorService sensorService; @Override @Transactional public UnitConversionDTO insertUnitConversion(UnitConversionInsertForm form) { //创建返回对象 UnitConversionDTO dto = new UnitConversionDTO(); //取参 UnitConversion unitConversion = form.formConvertEntity(); //判断原单位和目标单位计算公式是否已经存在于数据库 QueryWrapper existWrapper = new QueryWrapper(); existWrapper.eq("original_unit_key", unitConversion.getOriginalUnitKey()); existWrapper.eq("target_unit_key", unitConversion.getTargetUnitKey()); existWrapper.eq("is_delete", Constants.NOT_DELETE); List unitConversions = unitConversionMapper.selectList(existWrapper); if (ObjectUtils.isEmpty(unitConversion.getSensorCode())) { if (!ObjectUtils.isEmpty(unitConversions)) { dto.setCode(ResponseCodeEnum.UNIT_CONVERSION_EXIST.getCode()); dto.setMsg(ResponseCodeEnum.UNIT_CONVERSION_EXIST.getMsg()); return dto; } } if (!ObjectUtils.isEmpty(unitConversion.getSensorCode())) { for (UnitConversion conversion : unitConversions) { if (ObjectUtils.isEmpty(conversion.getSensorCode())||conversion.getSensorCode().equals(unitConversion.getSensorCode())) { dto.setCode(ResponseCodeEnum.UNIT_CONVERSION_EXIST.getCode()); dto.setMsg(ResponseCodeEnum.UNIT_CONVERSION_EXIST.getMsg()); return dto; } } } //插入数据 unitConversionMapper.insert(unitConversion); //刷新缓存 refreshCache(); //插入日志 insertLog(unitConversion); //封装返回数据 dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } @Override public UnitConversionQueryDTO queryUnitConversion(UnitConversionQueryForm form) { //创建返回对象 UnitConversionQueryDTO dto = new UnitConversionQueryDTO(); //取参 Integer page = form.getPage(); Integer size = form.getSize(); String order = form.getOrder(); String orderType = form.getOrderType(); Integer isDelete = form.getIsDelete(); Integer originalUnitKey = form.getOriginalUnitKey(); Integer targetUnitKey = form.getTargetUnitKey(); //组装查询条件 Page queryPage = new Page<>(page, size); NullFilterWrapper wrapper = new NullFilterWrapper<>(); wrapper.eq("original_unit_key", originalUnitKey); wrapper.eq("target_unit_key", targetUnitKey); //排序顺序条件构造 if (!ObjectUtils.isEmpty(order) && !ObjectUtils.isEmpty(orderType)) { if (orderType.equals(Constants.ORDER_ASC)) wrapper.orderByAsc(ConvertUtils.toLine(order)); else wrapper.orderByDesc(ConvertUtils.toLine(order)); } //逻辑删除条件构造 if (!ObjectUtils.isEmpty(isDelete)) wrapper.eq("is_delete", isDelete); else wrapper.eq("is_delete", Constants.NOT_DELETE); //查询结果 Page resultPage = unitConversionMapper.selectPage(queryPage, wrapper); List records = resultPage.getRecords(); //查询每条数据对应的原单位对象和目标单位对象 Map dictDatas = sysDictDataService.getDictDatasByType(Constants.SYSTEM_DICT_TYPE_UNIT); List dtos = new ArrayList<>(); for (UnitConversion record : records) { UnitConversionDTO unitConversionDTO = new UnitConversionDTO(); SysDictData originalUnit = dictDatas.get(record.getOriginalUnitKey()); SysDictData targetUnit = dictDatas.get(record.getTargetUnitKey()); unitConversionDTO.setUnitConversion(record); unitConversionDTO.setOriginalUnit(originalUnit); unitConversionDTO.setTargetUnit(targetUnit); dtos.add(unitConversionDTO); } //封装返回对象 dto.setUnitConversionDTOs(dtos); dto.setCurrent(resultPage.getCurrent()); dto.setPages(resultPage.getPages()); dto.setSize(resultPage.getSize()); dto.setTotal(resultPage.getTotal()); dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } @Override @Transactional public UnitConversionDTO updateUnitConversion(UnitConversionUpdateForm form) { //创建返回对象 UnitConversionDTO dto = new UnitConversionDTO(); //取参 UnitConversion unitConversion = form.formConvertEntity(); //查找要更新的公式 用于插入日志 QueryWrapper oldWrapper = new QueryWrapper<>(); UnitConversion oldUnitConversion = new UnitConversion(); oldUnitConversion.setId(unitConversion.getId()); oldUnitConversion.setIsDelete(Constants.NOT_DELETE); oldWrapper.setEntity(oldUnitConversion); oldUnitConversion = unitConversionMapper.selectOne(oldWrapper); //更新 unitConversionMapper.updateById(unitConversion); //刷新缓存 refreshCache(); //操作插入日志 updateLog(oldUnitConversion,form.getFormula()); //封装返回结果 dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); return dto; } @Override @Transactional public UnitConversionDTO deleteUnitConversion(UnitConversionDeleteForm form) { //创建返回对象 UnitConversionDTO dto = new UnitConversionDTO(); //取参 Integer id = form.getId(); //查询要删除的公式用于插入日志 QueryWrapper oldWrapper = new QueryWrapper<>(); UnitConversion oldUnitConversion = new UnitConversion(); oldUnitConversion.setId(id); oldUnitConversion.setIsDelete(Constants.NOT_DELETE); oldWrapper.setEntity(oldUnitConversion); oldUnitConversion = unitConversionMapper.selectOne(oldWrapper); //执行逻辑删除 UpdateWrapper deleteWrapper = new UpdateWrapper(); 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 queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_delete",Constants.NOT_DELETE); List 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 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 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 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); } }