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.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;
|
|
/**
|
* <p>
|
* 单位转换表 服务实现类
|
* </p>
|
*
|
* @author moral
|
* @since 2021-05-11
|
*/
|
@Service
|
public class UnitConversionServiceImpl extends ServiceImpl<UnitConversionMapper, UnitConversion> implements UnitConversionService {
|
|
@Autowired
|
UnitConversionMapper unitConversionMapper;
|
@Autowired
|
SysDictDataService sysDictDataService;
|
@Autowired
|
RedisTemplate redisTemplate;
|
@Autowired
|
LogUtils logUtils;
|
@Autowired
|
SensorService sensorService;
|
|
|
@Override
|
@Transactional
|
public UnitConversionDTO insertUnitConversion(UnitConversionInsertForm form) {
|
//创建返回对象
|
UnitConversionDTO dto = new UnitConversionDTO();
|
//取参
|
UnitConversion unitConversion = form.formConvertEntity();
|
//判断原单位和目标单位计算公式是否已经存在于数据库
|
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());
|
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<UnitConversion> queryPage = new Page<>(page, size);
|
NullFilterWrapper<UnitConversion> 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<UnitConversion> resultPage = unitConversionMapper.selectPage(queryPage, wrapper);
|
List<UnitConversion> records = resultPage.getRecords();
|
//查询每条数据对应的原单位对象和目标单位对象
|
Map<String, SysDictData> dictDatas = sysDictDataService.getDictDatasByType(Constants.SYSTEM_DICT_TYPE_UNIT);
|
List<UnitConversionDTO> 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<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();
|
//封装返回结果
|
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();
|
//封装返回对象
|
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);
|
}
|
}
|