lizijie
2021-12-28 d620e65b30db7bc43db71d26fbce36548819eebc
screen-manage/src/main/java/com/moral/api/service/impl/UnitConversionServiceImpl.java
@@ -1,9 +1,11 @@
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;
@@ -13,13 +15,17 @@
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.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;
@@ -43,27 +49,47 @@
    UnitConversionMapper unitConversionMapper;
    @Autowired
    SysDictDataService sysDictDataService;
    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    SensorService sensorService;
    @Override
    @Transactional
    public UnitConversionDTO insertUnitConversion(UnitConversionInsertForm form) {
        //创建返回对象
        UnitConversionDTO dto  = new UnitConversionDTO();
        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);
        UnitConversion existConversion = unitConversionMapper.selectOne(existWrapper);
        if(!ObjectUtils.isEmpty(existConversion)){
            dto.setCode(ResponseCodeEnum.UNIT_CONVERSION_EXIST.getCode());
            dto.setMsg(ResponseCodeEnum.UNIT_CONVERSION_EXIST.getMsg());
            return dto;
        QueryWrapper<UnitConversion> 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<UnitConversion> 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());
@@ -85,8 +111,8 @@
        //组装查询条件
        Page<UnitConversion> queryPage = new Page<>(page, size);
        NullFilterWrapper<UnitConversion> wrapper = new NullFilterWrapper<>();
        wrapper.eq("original_unit_key",originalUnitKey);
        wrapper.eq("target_unit_key",targetUnitKey);
        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))
@@ -141,6 +167,10 @@
        oldUnitConversion = unitConversionMapper.selectOne(oldWrapper);
        //更新
        unitConversionMapper.updateById(unitConversion);
        //刷新缓存
        refreshCache();
        //操作插入日志
        updateLog(oldUnitConversion,form.getFormula());
        //封装返回结果
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
@@ -148,6 +178,7 @@
    }
    @Override
    @Transactional
    public UnitConversionDTO deleteUnitConversion(UnitConversionDeleteForm form) {
        //创建返回对象
        UnitConversionDTO dto = new UnitConversionDTO();
@@ -162,12 +193,129 @@
        oldUnitConversion = unitConversionMapper.selectOne(oldWrapper);
        //执行逻辑删除
        UpdateWrapper deleteWrapper = new UpdateWrapper();
        deleteWrapper.set("is_delete",Constants.DELETE);
        deleteWrapper.eq("id",id);
        unitConversionMapper.update(null,deleteWrapper);
        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(){
        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);
    }
}