| | |
| | | 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 net.bytebuddy.description.method.ParameterList; |
| | | 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; |
| | |
| | | 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()); |
| | |
| | | //组装查询条件 |
| | | 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)) |
| | |
| | | dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); |
| | | return dto; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public UnitConversionDTO updateUnitConversion(UnitConversionUpdateForm form) { |
| | | //创建返回对象 |
| | | UnitConversionDTO dto = new UnitConversionDTO(); |
| | | //取参 |
| | | UnitConversion unitConversion = form.formConvertEntity(); |
| | | //查找要更新的公式 用于插入日志 |
| | | QueryWrapper<UnitConversion> 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<UnitConversion> 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<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); |
| | | } |
| | | } |