|  |  |  | 
|---|
|  |  |  | 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.User; | 
|---|
|  |  |  | import com.moral.api.entity.Version; | 
|---|
|  |  |  | import com.moral.api.entity.VersionSensorUnit; | 
|---|
|  |  |  | import com.moral.api.entity.*; | 
|---|
|  |  |  | import com.moral.api.mapper.OrganizationUnitAlarmMapper; | 
|---|
|  |  |  | import com.moral.api.mapper.SensorMapper; | 
|---|
|  |  |  | import com.moral.api.mapper.VersionMapper; | 
|---|
|  |  |  | import com.moral.api.mapper.VersionSensorUnitMapper; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.moral.api.pojo.form.version.*; | 
|---|
|  |  |  | import com.moral.api.service.VersionService; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
|---|
|  |  |  | import com.moral.api.util.CacheUtils; | 
|---|
|  |  |  | import com.moral.constant.Constants; | 
|---|
|  |  |  | import com.moral.constant.ResponseCodeEnum; | 
|---|
|  |  |  | import com.moral.util.ConvertUtils; | 
|---|
|  |  |  | 
|---|
|  |  |  | VersionSensorUnitMapper versionSensorUnitMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | SensorMapper sensorMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | OrganizationUnitAlarmMapper organizationUnitAlarmMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public VersionQueryDTO query(VersionQueryForm form) { | 
|---|
|  |  |  | 
|---|
|  |  |  | dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); | 
|---|
|  |  |  | return dto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public VersionDTO update(VersionUpdateForm form) { | 
|---|
|  |  |  | 
|---|
|  |  |  | VersionDTO dto = new VersionDTO(); | 
|---|
|  |  |  | //取参 | 
|---|
|  |  |  | Integer id = form.getId(); | 
|---|
|  |  |  | //查询型号是否被使用,如果被使用则无法删除 | 
|---|
|  |  |  | QueryWrapper<OrganizationUnitAlarm> queryWrapper = new QueryWrapper<>(); | 
|---|
|  |  |  | queryWrapper.eq("is_delete", Constants.NOT_DELETE); | 
|---|
|  |  |  | queryWrapper.eq("version_id", id); | 
|---|
|  |  |  | List<OrganizationUnitAlarm> organizationUnitAlarms = organizationUnitAlarmMapper.selectList(queryWrapper); | 
|---|
|  |  |  | if (!ObjectUtils.isEmpty(organizationUnitAlarms)) { | 
|---|
|  |  |  | dto.setCode(ResponseCodeEnum.VERSION_USED.getCode()); | 
|---|
|  |  |  | dto.setMsg(ResponseCodeEnum.VERSION_USED.getMsg()); | 
|---|
|  |  |  | return dto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询要删除的版本用于记录日志 | 
|---|
|  |  |  | Version oldVersion = versionMapper.selectById(id); | 
|---|
|  |  |  | //执行删除 | 
|---|
|  |  |  | 
|---|
|  |  |  | //取参 | 
|---|
|  |  |  | List<VersionSensorUnit> sensorUnits = form.getSensorUnits(); | 
|---|
|  |  |  | Integer versionId = form.getVersionId(); | 
|---|
|  |  |  | //删除之前分配的单位和因子 | 
|---|
|  |  |  | UpdateWrapper deleteWrapper = new UpdateWrapper(); | 
|---|
|  |  |  | deleteWrapper.eq("version_id", versionId); | 
|---|
|  |  |  | deleteWrapper.set("is_delete", Constants.DELETE); | 
|---|
|  |  |  | versionSensorUnitMapper.update(null, deleteWrapper); | 
|---|
|  |  |  | //将前端传来的id转为code | 
|---|
|  |  |  | for (VersionSensorUnit sensorUnit : sensorUnits) { | 
|---|
|  |  |  | Sensor sensor = sensorMapper.selectById(sensorUnit.getSensorId()); | 
|---|
|  |  |  | sensorUnit.setSensorCode(sensor.getCode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //添加新分配的单位和因子 | 
|---|
|  |  |  | for (VersionSensorUnit sensorUnit : sensorUnits) { | 
|---|
|  |  |  | sensorUnit.setVersionId(versionId); | 
|---|
|  |  |  | //查询之前分配的单位和因子 | 
|---|
|  |  |  | QueryWrapper<VersionSensorUnit> queryOldWrapper = new QueryWrapper<>(); | 
|---|
|  |  |  | queryOldWrapper.eq("version_id", versionId); | 
|---|
|  |  |  | queryOldWrapper.eq("is_delete", Constants.NOT_DELETE); | 
|---|
|  |  |  | List<VersionSensorUnit> oldSensorUnits = versionSensorUnitMapper.selectList(queryOldWrapper); | 
|---|
|  |  |  | //判断出变动的因子(要插入和要删除的) | 
|---|
|  |  |  | List<VersionSensorUnit> insertList = new ArrayList<>(); | 
|---|
|  |  |  | List<VersionSensorUnit> deleteList = new ArrayList<>(); | 
|---|
|  |  |  | sensorUnits.forEach(value -> { | 
|---|
|  |  |  | value.setVersionId(versionId); | 
|---|
|  |  |  | if (!oldSensorUnits.contains(value)) | 
|---|
|  |  |  | insertList.add(value); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | oldSensorUnits.forEach(value -> { | 
|---|
|  |  |  | if (!sensorUnits.contains(value)) | 
|---|
|  |  |  | deleteList.add(value); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | //删除记录 | 
|---|
|  |  |  | if (!ObjectUtils.isEmpty(deleteList)) { | 
|---|
|  |  |  | UpdateWrapper deleteWrapper = new UpdateWrapper(); | 
|---|
|  |  |  | List<Integer> deleteIds = new ArrayList<>(); | 
|---|
|  |  |  | deleteList.forEach(value -> deleteIds.add(value.getId())); | 
|---|
|  |  |  | deleteWrapper.in("id", deleteIds); | 
|---|
|  |  |  | deleteWrapper.set("is_delete", Constants.DELETE); | 
|---|
|  |  |  | versionSensorUnitMapper.update(null, deleteWrapper); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //添加记录 | 
|---|
|  |  |  | for (VersionSensorUnit sensorUnit : insertList) { | 
|---|
|  |  |  | versionSensorUnitMapper.insert(sensorUnit); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //维护组织型号关系表 | 
|---|
|  |  |  | QueryWrapper<OrganizationUnitAlarm> queryOrgUnitAlarmWrapper = new QueryWrapper<>(); | 
|---|
|  |  |  | queryOrgUnitAlarmWrapper.select("distinct organization_id"); | 
|---|
|  |  |  | queryOrgUnitAlarmWrapper.eq("version_id", versionId); | 
|---|
|  |  |  | queryOrgUnitAlarmWrapper.eq("is_delete", Constants.NOT_DELETE); | 
|---|
|  |  |  | List<OrganizationUnitAlarm> organizationUnitAlarms = organizationUnitAlarmMapper.selectList(queryOrgUnitAlarmWrapper); | 
|---|
|  |  |  | List<Integer> organizationIds = new ArrayList<>(); | 
|---|
|  |  |  | organizationUnitAlarms.forEach(value -> organizationIds.add(value.getOrganizationId())); | 
|---|
|  |  |  | for (Integer organizationId : organizationIds) { | 
|---|
|  |  |  | //删除因子 | 
|---|
|  |  |  | for (VersionSensorUnit versionSensorUnit : deleteList) { | 
|---|
|  |  |  | UpdateWrapper deleteOrganizationUnitAlarmWrapper = new UpdateWrapper(); | 
|---|
|  |  |  | deleteOrganizationUnitAlarmWrapper.eq("organization_id", organizationId); | 
|---|
|  |  |  | deleteOrganizationUnitAlarmWrapper.eq("version_id", versionId); | 
|---|
|  |  |  | deleteOrganizationUnitAlarmWrapper.eq("sensor_code", versionSensorUnit.getSensorCode()); | 
|---|
|  |  |  | deleteOrganizationUnitAlarmWrapper.set("is_delete", Constants.DELETE); | 
|---|
|  |  |  | organizationUnitAlarmMapper.update(null, deleteOrganizationUnitAlarmWrapper); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //新增因子 | 
|---|
|  |  |  | for (VersionSensorUnit versionSensorUnit : insertList) { | 
|---|
|  |  |  | OrganizationUnitAlarm organizationUnitAlarm = new OrganizationUnitAlarm(); | 
|---|
|  |  |  | organizationUnitAlarm.setOrganizationId(organizationId); | 
|---|
|  |  |  | organizationUnitAlarm.setVersionId(versionId); | 
|---|
|  |  |  | organizationUnitAlarm.setSensorCode(versionSensorUnit.getSensorCode()); | 
|---|
|  |  |  | organizationUnitAlarm.setUnitKey(versionSensorUnit.getUnitKey()); | 
|---|
|  |  |  | organizationUnitAlarm.setShowUnitKey(versionSensorUnit.getUnitKey()); | 
|---|
|  |  |  | organizationUnitAlarmMapper.insert(organizationUnitAlarm); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //刷新deviceInfo缓存 | 
|---|
|  |  |  | CacheUtils.refreshDeviceAlarmInfo(); | 
|---|
|  |  |  | //封装返回结果 | 
|---|
|  |  |  | dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); | 
|---|
|  |  |  | dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (ObjectUtils.isEmpty(querySensors)) { | 
|---|
|  |  |  | dto.setTotal(0); | 
|---|
|  |  |  | dto.setPages(0); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | dto.setTotal(querySensors.size()); | 
|---|
|  |  |  | double querySize = (double)querySensors.size(); | 
|---|
|  |  |  | double dSize = (double)size; | 
|---|
|  |  |  | dto.setPages((int)Math.ceil(querySize/dSize)); | 
|---|
|  |  |  | double querySize = (double) querySensors.size(); | 
|---|
|  |  |  | double dSize = (double) size; | 
|---|
|  |  |  | dto.setPages((int) Math.ceil(querySize / dSize)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | dto.setSize(size); | 
|---|
|  |  |  | dto.setCurrent(page); | 
|---|
|  |  |  | 
|---|
|  |  |  | return dto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public VersionQueryDTO queryByOrganizationId(Integer organizationId) { | 
|---|
|  |  |  | //创建返回对象 | 
|---|
|  |  |  | VersionQueryDTO dto = new VersionQueryDTO(); | 
|---|
|  |  |  | //查询型号id | 
|---|
|  |  |  | QueryWrapper<OrganizationUnitAlarm> queryVersionIdsWrapper = new QueryWrapper<>(); | 
|---|
|  |  |  | queryVersionIdsWrapper.select("DISTINCT version_id").eq("is_delete", Constants.NOT_DELETE).eq("organization_id", organizationId); | 
|---|
|  |  |  | List<OrganizationUnitAlarm> organizationUnitAlarms = organizationUnitAlarmMapper.selectList(queryVersionIdsWrapper); | 
|---|
|  |  |  | List<Integer> versionIds = new ArrayList<>(); | 
|---|
|  |  |  | for (OrganizationUnitAlarm organizationUnitAlarm : organizationUnitAlarms) { | 
|---|
|  |  |  | versionIds.add(organizationUnitAlarm.getVersionId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //根据型号id查询型号 | 
|---|
|  |  |  | List<Version> versions = new ArrayList<>(); | 
|---|
|  |  |  | if (!ObjectUtils.isEmpty(versionIds)) | 
|---|
|  |  |  | versions = versionMapper.selectBatchIds(versionIds); | 
|---|
|  |  |  | //封装返回对象 | 
|---|
|  |  |  | List<VersionDTO> versionDTOS = new ArrayList<>(); | 
|---|
|  |  |  | versions.forEach(value -> versionDTOS.add(new VersionDTO(value))); | 
|---|
|  |  |  | dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); | 
|---|
|  |  |  | dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); | 
|---|
|  |  |  | dto.setVersionDTOS(versionDTOS); | 
|---|
|  |  |  | return dto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|