Commit 97fb9777 authored by suhuiguang's avatar suhuiguang

1.装备车辆缓存修改

parent a2bbd1eb
package com.yeejoin.equipmanage.controller; package com.yeejoin.equipmanage.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.yeejoin.equipmanage.common.utils.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -45,63 +7,42 @@ import com.yeejoin.amos.boot.biz.common.dto.OrgMenuDto; ...@@ -45,63 +7,42 @@ import com.yeejoin.amos.boot.biz.common.dto.OrgMenuDto;
import com.yeejoin.amos.component.feign.model.FeignClientResult; import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.equipmanage.common.dto.CarInfoDto; import com.yeejoin.equipmanage.common.dto.CarInfoDto;
import com.yeejoin.equipmanage.common.dto.CarStatusInfoDto; import com.yeejoin.equipmanage.common.dto.CarStatusInfoDto;
import com.yeejoin.equipmanage.common.entity.Car; import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.entity.CarProperty;
import com.yeejoin.equipmanage.common.entity.Equipment;
import com.yeejoin.equipmanage.common.entity.EquipmentCategory;
import com.yeejoin.equipmanage.common.entity.EquipmentDetail;
import com.yeejoin.equipmanage.common.entity.EquipmentIndex;
import com.yeejoin.equipmanage.common.entity.EquipmentOnCar;
import com.yeejoin.equipmanage.common.entity.EquipmentQrcode;
import com.yeejoin.equipmanage.common.entity.ManufacturerInfo;
import com.yeejoin.equipmanage.common.entity.SystemDic;
import com.yeejoin.equipmanage.common.entity.publics.CommonResponse; import com.yeejoin.equipmanage.common.entity.publics.CommonResponse;
import com.yeejoin.equipmanage.common.entity.vo.CarIndexVo; import com.yeejoin.equipmanage.common.entity.vo.CarIndexVo;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentOnCarAppVO; import com.yeejoin.equipmanage.common.entity.vo.EquipmentOnCarAppVO;
import com.yeejoin.equipmanage.common.enums.CarStatusEnum; import com.yeejoin.equipmanage.common.enums.*;
import com.yeejoin.equipmanage.common.enums.IndustryEnum; import com.yeejoin.equipmanage.common.utils.*;
import com.yeejoin.equipmanage.common.enums.OnBoardEquipmentEnum; import com.yeejoin.equipmanage.common.vo.*;
import com.yeejoin.equipmanage.common.enums.SystemDicTypeEum;
import com.yeejoin.equipmanage.common.enums.TrueOrFalseEnum;
import com.yeejoin.equipmanage.common.vo.CarForUE4VO;
import com.yeejoin.equipmanage.common.vo.CarInfosResponse;
import com.yeejoin.equipmanage.common.vo.EquipStateOnCarVo;
import com.yeejoin.equipmanage.common.vo.ExtinguishantLossRequest;
import com.yeejoin.equipmanage.common.vo.ExtinguishantRequeset;
import com.yeejoin.equipmanage.common.vo.LonAndLatEntityVo;
import com.yeejoin.equipmanage.common.vo.OnBoardEquipment;
import com.yeejoin.equipmanage.config.EquipmentIotMqttReceiveConfig; import com.yeejoin.equipmanage.config.EquipmentIotMqttReceiveConfig;
import com.yeejoin.equipmanage.fegin.JcsFeign; import com.yeejoin.equipmanage.fegin.JcsFeign;
import com.yeejoin.equipmanage.mapper.CarInfoMapper; import com.yeejoin.equipmanage.mapper.*;
import com.yeejoin.equipmanage.mapper.CarMapper; import com.yeejoin.equipmanage.service.*;
import com.yeejoin.equipmanage.mapper.CarPropertyMapper;
import com.yeejoin.equipmanage.mapper.EquipmentCategoryMapper;
import com.yeejoin.equipmanage.mapper.EquipmentDetailMapper;
import com.yeejoin.equipmanage.mapper.EquipmentIndexMapper;
import com.yeejoin.equipmanage.mapper.EquipmentMapper;
import com.yeejoin.equipmanage.mapper.EquipmentQrcodeMapper;
import com.yeejoin.equipmanage.mapper.ExtinguishantOnCarMapper;
import com.yeejoin.equipmanage.mapper.ManufacturerInfoMapper;
import com.yeejoin.equipmanage.mapper.SystemDicMapper;
import com.yeejoin.equipmanage.service.ICarInfoService;
import com.yeejoin.equipmanage.service.ICarLonAndLatDataService;
import com.yeejoin.equipmanage.service.ICarPropertyService;
import com.yeejoin.equipmanage.service.ICarService;
import com.yeejoin.equipmanage.service.IEquipmentDetailService;
import com.yeejoin.equipmanage.service.IEquipmentIndexService;
import com.yeejoin.equipmanage.service.IEquipmentOnCarService;
import com.yeejoin.equipmanage.service.IEquipmentQrcodeService;
import com.yeejoin.equipmanage.service.IEquipmentService;
import com.yeejoin.equipmanage.service.ISyncDataService;
import com.yeejoin.equipmanage.service.ISystemDicService;
import com.yeejoin.equipmanage.service.ProductionQRCode;
import com.yeejoin.equipmanage.service.impl.EquipmentSpecificSerivceImpl; import com.yeejoin.equipmanage.service.impl.EquipmentSpecificSerivceImpl;
import com.yeejoin.equipmanage.service.impl.FireFightingSystemServiceImpl; import com.yeejoin.equipmanage.service.impl.FireFightingSystemServiceImpl;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.*;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
/** /**
* 消防车信息 * 消防车信息
...@@ -232,7 +173,7 @@ public class CarController extends AbstractBaseController { ...@@ -232,7 +173,7 @@ public class CarController extends AbstractBaseController {
} }
}); });
} }
Car car2= iCarService.saveOne(car); Car car2 = iCarService.saveOne(car);
CarController controllerProxy = SpringUtils.getBean(CarController.class); CarController controllerProxy = SpringUtils.getBean(CarController.class);
controllerProxy.refreshCount(car.getBizOrgCode()); controllerProxy.refreshCount(car.getBizOrgCode());
return car2; return car2;
...@@ -245,9 +186,10 @@ public class CarController extends AbstractBaseController { ...@@ -245,9 +186,10 @@ public class CarController extends AbstractBaseController {
// 刷新分类树缓存 // 刷新分类树缓存
fireFightingSystemServiceImpl.refreshCarTypeAndCount(bizOrgCode); fireFightingSystemServiceImpl.refreshCarTypeAndCount(bizOrgCode);
} }
@Async @Async
public void refreshCount(List<Car> list) { public void refreshCount(List<Car> list) {
list.forEach(i->{ list.forEach(i -> {
iCarService.refreshStaData(); iCarService.refreshStaData();
try { try {
fireFightingSystemServiceImpl.refreshCarTypeAndCount(i.getBizOrgCode()); fireFightingSystemServiceImpl.refreshCarTypeAndCount(i.getBizOrgCode());
...@@ -314,7 +256,7 @@ public class CarController extends AbstractBaseController { ...@@ -314,7 +256,7 @@ public class CarController extends AbstractBaseController {
// carInstance = iCarService.saveCar(getUserInfo(), carInstance, carInfo, carpList); // carInstance = iCarService.saveCar(getUserInfo(), carInstance, carInfo, carpList);
// saveFile(carInstance);视频图片文件后期统一处理 // saveFile(carInstance);视频图片文件后期统一处理
EquipmentSpecificSerivceImpl.registerMqttTopic(car.getIotCode(), equipmentIotMqttReceiveConfig); EquipmentSpecificSerivceImpl.registerMqttTopic(car.getIotCode(), equipmentIotMqttReceiveConfig);
Car car1= iCarService.updateOneById(car); Car car1 = iCarService.updateOneById(car);
CarController controllerProxy = SpringUtils.getBean(CarController.class); CarController controllerProxy = SpringUtils.getBean(CarController.class);
controllerProxy.refreshCount(car.getBizOrgCode()); controllerProxy.refreshCount(car.getBizOrgCode());
refreshCount(car.getBizOrgCode()); refreshCount(car.getBizOrgCode());
...@@ -1094,7 +1036,7 @@ public class CarController extends AbstractBaseController { ...@@ -1094,7 +1036,7 @@ public class CarController extends AbstractBaseController {
}); });
boolean flag = iCarService.removeOneByIds(idList); boolean flag = iCarService.removeOneByIds(idList);
if(flag) { if (flag) {
CarController controllerProxy = SpringUtils.getBean(CarController.class); CarController controllerProxy = SpringUtils.getBean(CarController.class);
controllerProxy.refreshCount(cars); controllerProxy.refreshCount(cars);
} }
......
...@@ -10,10 +10,14 @@ import java.util.Set; ...@@ -10,10 +10,14 @@ import java.util.Set;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import com.yeejoin.equipmanage.common.enums.SourceTypeEnum;
import com.yeejoin.equipmanage.common.utils.SpringUtils;
import com.yeejoin.equipmanage.service.ISourceStatistics;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -73,6 +77,9 @@ public class EquipmentCategoryController extends AbstractBaseController { ...@@ -73,6 +77,9 @@ public class EquipmentCategoryController extends AbstractBaseController {
@Autowired @Autowired
private RedisUtils redisUtils; private RedisUtils redisUtils;
@Autowired
ISourceStatistics iSourceStatistics;
private static final String equipmentTreeListAll = "equipmentTreeListAll"; private static final String equipmentTreeListAll = "equipmentTreeListAll";
private static final String equipmentTreeListIndustry = "equipmentTreeListIndustry"; private static final String equipmentTreeListIndustry = "equipmentTreeListIndustry";
// 装备redis缓存key前缀 // 装备redis缓存key前缀
...@@ -90,9 +97,17 @@ public class EquipmentCategoryController extends AbstractBaseController { ...@@ -90,9 +97,17 @@ public class EquipmentCategoryController extends AbstractBaseController {
@RequestBody EquipmentCategory equipmentCategory) { @RequestBody EquipmentCategory equipmentCategory) {
EquipmentCategory equipmentCategoryInstance = iEquipmentCategoryService EquipmentCategory equipmentCategoryInstance = iEquipmentCategoryService
.saveEquipmentCategory(equipmentCategory); .saveEquipmentCategory(equipmentCategory);
EquipmentCategoryController controllerProxy = SpringUtils.getBean(EquipmentCategoryController.class);
controllerProxy.refreshAllCount();
return equipmentCategoryInstance; return equipmentCategoryInstance;
} }
@Async
public void refreshAllCount() {
iSourceStatistics.initAllCategoryStatisticsData(SourceTypeEnum.EQUIPMENT);
iSourceStatistics.initAllCategoryStatisticsData(SourceTypeEnum.CAR);
}
/** /**
* 根据id删除 * 根据id删除
* *
...@@ -138,6 +153,8 @@ public class EquipmentCategoryController extends AbstractBaseController { ...@@ -138,6 +153,8 @@ public class EquipmentCategoryController extends AbstractBaseController {
if (removeFlag) { if (removeFlag) {
// 更新缓存 // 更新缓存
SpringContextHolder.publishEvent(new EquipmentTreeListEvent(this, idSet, typeSet)); SpringContextHolder.publishEvent(new EquipmentTreeListEvent(this, idSet, typeSet));
EquipmentCategoryController controllerProxy = SpringUtils.getBean(EquipmentCategoryController.class);
controllerProxy.refreshAllCount();
} }
return CommonResponseUtil.success(removeFlag); return CommonResponseUtil.success(removeFlag);
} }
...@@ -157,6 +174,8 @@ public class EquipmentCategoryController extends AbstractBaseController { ...@@ -157,6 +174,8 @@ public class EquipmentCategoryController extends AbstractBaseController {
.eq("group_code", equipmentCategory.getCode()).set("group_name", equipmentCategory.getName())); .eq("group_code", equipmentCategory.getCode()).set("group_name", equipmentCategory.getName()));
if (updateFlag) { if (updateFlag) {
// 更新缓存 // 更新缓存
EquipmentCategoryController controllerProxy = SpringUtils.getBean(EquipmentCategoryController.class);
controllerProxy.refreshAllCount();
SpringContextHolder.publishEvent(new EquipmentTreeListEvent(this, equipmentCategory)); SpringContextHolder.publishEvent(new EquipmentTreeListEvent(this, equipmentCategory));
} }
return updateFlag; return updateFlag;
......
...@@ -8,6 +8,7 @@ import com.yeejoin.amos.boot.biz.common.dto.OrgMenuDto; ...@@ -8,6 +8,7 @@ import com.yeejoin.amos.boot.biz.common.dto.OrgMenuDto;
import com.yeejoin.equipmanage.common.entity.*; import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentDetailDownloadVO; import com.yeejoin.equipmanage.common.entity.vo.EquipmentDetailDownloadVO;
import com.yeejoin.equipmanage.common.enums.ExcelEnums; import com.yeejoin.equipmanage.common.enums.ExcelEnums;
import com.yeejoin.equipmanage.common.enums.SourceTypeEnum;
import com.yeejoin.equipmanage.common.utils.ExcelUtils; import com.yeejoin.equipmanage.common.utils.ExcelUtils;
import com.yeejoin.equipmanage.common.utils.NameUtils; import com.yeejoin.equipmanage.common.utils.NameUtils;
import com.yeejoin.equipmanage.common.utils.SpringUtils; import com.yeejoin.equipmanage.common.utils.SpringUtils;
...@@ -90,6 +91,9 @@ public class EquipmentDetailController extends AbstractBaseController { ...@@ -90,6 +91,9 @@ public class EquipmentDetailController extends AbstractBaseController {
@Autowired @Autowired
FireFightingSystemServiceImpl fireFightingSystemServiceImpl; FireFightingSystemServiceImpl fireFightingSystemServiceImpl;
@Autowired
ISourceStatistics iSourceStatistics;
/** /**
* 新增 * 新增
* *
...@@ -99,7 +103,7 @@ public class EquipmentDetailController extends AbstractBaseController { ...@@ -99,7 +103,7 @@ public class EquipmentDetailController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增") @ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public EquipmentDetail saveEquipmentDetail(HttpServletRequest request, @RequestBody EquipmentDetail equipmentDetail) { public EquipmentDetail saveEquipmentDetail(HttpServletRequest request, @RequestBody EquipmentDetail equipmentDetail) {
EquipmentDetail detail= iEquipmentDetailService.saveOne(equipmentDetail); EquipmentDetail detail = iEquipmentDetailService.saveOne(equipmentDetail);
return detail; return detail;
} }
...@@ -110,7 +114,6 @@ public class EquipmentDetailController extends AbstractBaseController { ...@@ -110,7 +114,6 @@ public class EquipmentDetailController extends AbstractBaseController {
fireFightingSystemServiceImpl.refreshEquipmentTypeAndCount(bizOrgCode); fireFightingSystemServiceImpl.refreshEquipmentTypeAndCount(bizOrgCode);
} catch (Exception e) { } catch (Exception e) {
} }
} }
/** /**
...@@ -281,19 +284,19 @@ public class EquipmentDetailController extends AbstractBaseController { ...@@ -281,19 +284,19 @@ public class EquipmentDetailController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "DELETE", value = "根据id删除", notes = "根据id删除") @ApiOperation(httpMethod = "DELETE", value = "根据id删除", notes = "根据id删除")
public boolean deleteById(HttpServletRequest request, @PathVariable Long id) { public boolean deleteById(HttpServletRequest request, @PathVariable Long id) {
boolean falg= iEquipmentDetailService.removeOneById(id); boolean falg = iEquipmentDetailService.removeOneById(id);
if(falg) { if (falg) {
equipmentSpecificSerivce.refreshStaData(); equipmentSpecificSerivce.refreshStaData();
} }
return falg ; return falg;
} }
@RequestMapping(value = "/updatequota", method = RequestMethod.PUT) @RequestMapping(value = "/updatequota", method = RequestMethod.PUT)
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "PUT", value = "修改", notes = "修改") @ApiOperation(httpMethod = "PUT", value = "修改", notes = "修改")
public boolean quotaUpdate(HttpServletRequest request, @RequestBody List<EquProperty> e) { public boolean quotaUpdate(HttpServletRequest request, @RequestBody List<EquProperty> e) {
boolean falg= iEquipmentDetailService.quotaUpdate(e); boolean falg = iEquipmentDetailService.quotaUpdate(e);
if(falg) { if (falg) {
equipmentSpecificSerivce.refreshStaData(); equipmentSpecificSerivce.refreshStaData();
} }
return falg; return falg;
...@@ -558,10 +561,16 @@ public class EquipmentDetailController extends AbstractBaseController { ...@@ -558,10 +561,16 @@ public class EquipmentDetailController extends AbstractBaseController {
ExcelDto excelDto = new ExcelDto(excelEnums.getFileName(), excelEnums.getSheetName(), excelEnums.getClassUrl(), excelEnums.getType()); ExcelDto excelDto = new ExcelDto(excelEnums.getFileName(), excelEnums.getSheetName(), excelEnums.getClassUrl(), excelEnums.getType());
excelService.commonUpload(file, excelDto, getSelectedOrgInfo(), getUserInfo()); excelService.commonUpload(file, excelDto, getSelectedOrgInfo(), getUserInfo());
// return iStockService.uploadListByTemplate(equipmentDetailDownloadS, getSelectedOrgInfo(), getUserInfo()); EquipmentDetailController controllerProxy = SpringUtils.getBean(EquipmentDetailController.class);
controllerProxy.refreshAllCount();
return ResponseHelper.buildResponse(null); return ResponseHelper.buildResponse(null);
} }
@Async
public void refreshAllCount() {
iSourceStatistics.initAllCategoryStatisticsData(SourceTypeEnum.EQUIPMENT);
}
/** /**
* 设备信息导入 * 设备信息导入
* *
......
...@@ -6,6 +6,8 @@ import java.util.List; ...@@ -6,6 +6,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.yeejoin.equipmanage.common.utils.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
...@@ -46,6 +48,7 @@ import io.swagger.annotations.ApiOperation; ...@@ -46,6 +48,7 @@ import io.swagger.annotations.ApiOperation;
* @date 2020/10/29 14:26 * @date 2020/10/29 14:26
* @since v2.0 * @since v2.0
*/ */
@Slf4j
@RestController @RestController
@Api(tags = "单个设备管理") @Api(tags = "单个设备管理")
@RequestMapping(value = "/equipSpecific") @RequestMapping(value = "/equipSpecific")
...@@ -63,6 +66,9 @@ public class EquipmentSpecificController extends AbstractBaseController { ...@@ -63,6 +66,9 @@ public class EquipmentSpecificController extends AbstractBaseController {
@Value("${systemctl.sync.switch}") @Value("${systemctl.sync.switch}")
private Boolean syncSwitch; private Boolean syncSwitch;
@Autowired
FireFightingSystemServiceImpl fireFightingSystemServiceImpl;
/** /**
* 补码页面分页 * 补码页面分页
* *
...@@ -247,7 +253,20 @@ public class EquipmentSpecificController extends AbstractBaseController { ...@@ -247,7 +253,20 @@ public class EquipmentSpecificController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation( value = "删除装备相关所有数据", notes = "删除装备相关所有数据") @ApiOperation( value = "删除装备相关所有数据", notes = "删除装备相关所有数据")
public ResponseModel delEquipmentBySpecificId(@RequestParam Long specificId) { public ResponseModel delEquipmentBySpecificId(@RequestParam Long specificId) {
return CommonResponseUtil.success(equipmentSpecificSerivce.delEquipmentBySpecificId(specificId)); EquipmentSpecific equipmentSpecific = equipmentSpecificSerivce.getById(specificId);
Boolean result = equipmentSpecificSerivce.delEquipmentSpecific(specificId);
// 同步刷新,不在异步,原因速度3秒左右
this.refreshCount(equipmentSpecific.getBizOrgCode());
return CommonResponseUtil.success(result);
}
private void refreshCount(String bizOrgCode) {
try {
equipmentSpecificSerivce.refreshStaData();
fireFightingSystemServiceImpl.refreshEquipmentTypeAndCount(bizOrgCode);
} catch (Exception e) {
log.error("刷新装备分类树缓存失败" + e.getMessage());
}
} }
/** /**
......
...@@ -7,9 +7,12 @@ import java.util.List; ...@@ -7,9 +7,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.utils.SpringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
...@@ -33,12 +36,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -33,12 +36,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.dto.OrgMenuDto; import com.yeejoin.amos.boot.biz.common.dto.OrgMenuDto;
import com.yeejoin.amos.feign.morphic.model.ResourceDTO; import com.yeejoin.amos.feign.morphic.model.ResourceDTO;
import com.yeejoin.equipmanage.common.entity.EquProperty;
import com.yeejoin.equipmanage.common.entity.Equipment;
import com.yeejoin.equipmanage.common.entity.EquipmentCategory;
import com.yeejoin.equipmanage.common.entity.EquipmentIndex;
import com.yeejoin.equipmanage.common.entity.FireFightingSystemEntity;
import com.yeejoin.equipmanage.common.entity.ManufacturerInfo;
import com.yeejoin.equipmanage.common.entity.dto.EquipTypeAmountPageDTO; import com.yeejoin.equipmanage.common.entity.dto.EquipTypeAmountPageDTO;
import com.yeejoin.equipmanage.common.entity.vo.EquipCountBySystemVO; import com.yeejoin.equipmanage.common.entity.vo.EquipCountBySystemVO;
import com.yeejoin.equipmanage.common.entity.vo.EquipTypeImgAmountVO; import com.yeejoin.equipmanage.common.entity.vo.EquipTypeImgAmountVO;
...@@ -170,7 +167,21 @@ public class FireFightingSystemController extends AbstractBaseController { ...@@ -170,7 +167,21 @@ public class FireFightingSystemController extends AbstractBaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "DELETE", value = "装备卡片删除") @ApiOperation(httpMethod = "DELETE", value = "装备卡片删除")
public Boolean delEquipmentSpecific(Long id) { public Boolean delEquipmentSpecific(Long id) {
return equipmentSpecificSerivce.delEquipmentSpecific(id); EquipmentSpecific equipmentSpecific = equipmentSpecificSerivce.getById(id);
Boolean result = equipmentSpecificSerivce.delEquipmentSpecific(id);
// 同步刷新,不在异步,原因速度3秒左右
this.refreshCount(equipmentSpecific.getBizOrgCode());
return result;
}
private void refreshCount(String bizOrgCode) {
equipmentSpecificSerivce.refreshStaData();
try {
fireFightingSystemService.refreshEquipmentTypeAndCount(bizOrgCode);
} catch (Exception e) {
log.error("刷新装备分类树缓存失败" + e.getMessage());
}
} }
/** /**
......
package com.yeejoin.equipmanage.controller; package com.yeejoin.equipmanage.controller;
import java.util.List; import com.yeejoin.equipmanage.common.entity.Industry;
import com.yeejoin.equipmanage.service.IIndustryService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import com.yeejoin.equipmanage.common.entity.Industry; import java.util.List;
import com.yeejoin.equipmanage.service.IIndustryService;
import io.swagger.annotations.Api;
@RestController @RestController
@Api(tags = "行业分类Industry") @Api(tags = "行业分类Industry")
...@@ -19,6 +19,7 @@ public class IndustryController { ...@@ -19,6 +19,7 @@ public class IndustryController {
@Autowired @Autowired
IIndustryService industryService; IIndustryService industryService;
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/list") @GetMapping(value = "/list")
public List<Industry> listAll() { public List<Industry> listAll() {
return industryService.list(); return industryService.list();
......
...@@ -222,7 +222,9 @@ public interface IFireFightingSystemService extends IService<FireFightingSystemE ...@@ -222,7 +222,9 @@ public interface IFireFightingSystemService extends IService<FireFightingSystemE
*/ */
Object getCarTypeAndCount(String bizOrgCode) throws Exception; Object getCarTypeAndCount(String bizOrgCode) throws Exception;
public Object refreshEquipmentTypeAndCount(String bizOrgCode) throws Exception; Object refreshEquipmentTypeAndCount(String bizOrgCode) throws Exception;
Object refreshCarTypeAndCount(String bizOrgCode) throws Exception;
public Object refreshCarTypeAndCount(String bizOrgCode) throws Exception;
} }
...@@ -13,4 +13,11 @@ public interface ISourceStatistics { ...@@ -13,4 +13,11 @@ public interface ISourceStatistics {
* @return int 数量 * @return int 数量
*/ */
int equipCategoryStatistics(String bizOrgCode, SourceTypeEnum sourceType, String categoryCode); int equipCategoryStatistics(String bizOrgCode, SourceTypeEnum sourceType, String categoryCode);
/**
* 初始化所有有分类数据(装备、车辆),bizOrgCode + "_" + sourceType.getCode() + "_" + categoryCode
* * 消防装备、消防车辆页面右侧构建分类树,统计装备和车辆数量使用
* * @param sourceType sourceType
*/
void initAllCategoryStatisticsData(SourceTypeEnum sourceType);
} }
...@@ -2,8 +2,10 @@ package com.yeejoin.equipmanage.service.impl; ...@@ -2,8 +2,10 @@ package com.yeejoin.equipmanage.service.impl;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils; import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.equipmanage.common.enums.ConfigPageTopicEnum; import com.yeejoin.equipmanage.common.enums.ConfigPageTopicEnum;
import com.yeejoin.equipmanage.common.enums.SourceTypeEnum;
import com.yeejoin.equipmanage.listener.IntegratePageDataListener; import com.yeejoin.equipmanage.listener.IntegratePageDataListener;
import com.yeejoin.equipmanage.service.IMaintenanceResourceDataService; import com.yeejoin.equipmanage.service.IMaintenanceResourceDataService;
import com.yeejoin.equipmanage.service.ISourceStatistics;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
...@@ -40,14 +42,20 @@ public class ApplicationRunnerImpl implements ApplicationRunner { ...@@ -40,14 +42,20 @@ public class ApplicationRunnerImpl implements ApplicationRunner {
@Value("${redis_equip_type_count}") @Value("${redis_equip_type_count}")
private String equipTypeAndCount; private String equipTypeAndCount;
@Autowired
ISourceStatistics iSourceStatistics;
@Override @Override
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
// 清空装备分类树缓存 // 清空单位装备分类树缓存
redisUtils.getAndDeletePatternKeys(carTypeAndCount + "*"); redisUtils.getAndDeletePatternKeys(carTypeAndCount + "*");
// 清空车辆分类树缓存 // 清空车辆分类树缓存
redisUtils.getAndDeletePatternKeys(equipTypeAndCount + "*"); redisUtils.getAndDeletePatternKeys(equipTypeAndCount + "*");
// 清空单位分类数量统计缓存 // 清空单位分类数量统计缓存
redisUtils.getAndDeletePatternKeys(SourcesStatisticsImpl.PREFIX_CATEGORY_COUNT + "*"); redisUtils.getAndDeletePatternKeys(SourcesStatisticsImpl.PREFIX_CATEGORY_COUNT + "*");
// 刷新单位分类数量统计
iSourceStatistics.initAllCategoryStatisticsData(SourceTypeEnum.EQUIPMENT);
iSourceStatistics.initAllCategoryStatisticsData(SourceTypeEnum.CAR);
maintenanceResourceDataService.subscribeTopic(); maintenanceResourceDataService.subscribeTopic();
emqKeeper.getMqttClient().subscribe(ConfigPageTopicEnum.INTEGRATE.getTopic(), 2, integratePageDataListener); emqKeeper.getMqttClient().subscribe(ConfigPageTopicEnum.INTEGRATE.getTopic(), 2, integratePageDataListener);
} }
......
package com.yeejoin.equipmanage.service.impl; package com.yeejoin.equipmanage.service.impl;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -36,7 +9,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -36,7 +9,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.gson.JsonArray;
import com.yeejoin.amos.boot.biz.common.dto.OrgMenuDto; import com.yeejoin.amos.boot.biz.common.dto.OrgMenuDto;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils; import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.component.feign.model.FeignClientResult; import com.yeejoin.amos.component.feign.model.FeignClientResult;
...@@ -49,49 +21,32 @@ import com.yeejoin.amos.feign.systemctl.Systemctl; ...@@ -49,49 +21,32 @@ import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel; import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import com.yeejoin.equipmanage.common.datasync.entity.FireFightingSystem; import com.yeejoin.equipmanage.common.datasync.entity.FireFightingSystem;
import com.yeejoin.equipmanage.common.dto.OrgUsrDto; import com.yeejoin.equipmanage.common.dto.OrgUsrDto;
import com.yeejoin.equipmanage.common.entity.DynamicFormGroup; import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.entity.DynamicFormInstance;
import com.yeejoin.equipmanage.common.entity.EquipmentCategory;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecific;
import com.yeejoin.equipmanage.common.entity.FireFightingSystemEntity;
import com.yeejoin.equipmanage.common.entity.SourceScene;
import com.yeejoin.equipmanage.common.entity.dto.EquipTypeAmountPageDTO; import com.yeejoin.equipmanage.common.entity.dto.EquipTypeAmountPageDTO;
import com.yeejoin.equipmanage.common.entity.vo.EquipCountBySystemVO; import com.yeejoin.equipmanage.common.entity.vo.*;
import com.yeejoin.equipmanage.common.entity.vo.EquipTypeImgAmountVO; import com.yeejoin.equipmanage.common.enums.*;
import com.yeejoin.equipmanage.common.entity.vo.EquiplistSpecificBySystemVO;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentAlarmBySystemIdOrSourceIdVO;
import com.yeejoin.equipmanage.common.entity.vo.PointTreeVo;
import com.yeejoin.equipmanage.common.enums.EquipmentRiskTypeEnum;
import com.yeejoin.equipmanage.common.enums.EquipmentSpeIndexEnum;
import com.yeejoin.equipmanage.common.enums.SourceTypeEnum;
import com.yeejoin.equipmanage.common.enums.SystemTypeEnum;
import com.yeejoin.equipmanage.common.enums.TrueOrFalseEnum;
import com.yeejoin.equipmanage.common.utils.StringUtil; import com.yeejoin.equipmanage.common.utils.StringUtil;
import com.yeejoin.equipmanage.common.vo.AlarmDataVO; import com.yeejoin.equipmanage.common.vo.*;
import com.yeejoin.equipmanage.common.vo.EquipmentManageVo; import com.yeejoin.equipmanage.mapper.*;
import com.yeejoin.equipmanage.common.vo.FileUploadVo;
import com.yeejoin.equipmanage.common.vo.FireFightingSystem3dVo;
import com.yeejoin.equipmanage.common.vo.FireFightingSystemTreeVo;
import com.yeejoin.equipmanage.common.vo.FireFightingSystemTypeTreeVo;
import com.yeejoin.equipmanage.common.vo.FireFightingSystemVo;
import com.yeejoin.equipmanage.common.vo.SpeIndexVo;
import com.yeejoin.equipmanage.mapper.BuildingMapper;
import com.yeejoin.equipmanage.mapper.EquipmentManageMapper;
import com.yeejoin.equipmanage.mapper.FireFightingSystemMapper;
import com.yeejoin.equipmanage.mapper.FormInstanceMapper;
import com.yeejoin.equipmanage.mapper.SourceSceneMapper;
import com.yeejoin.equipmanage.remote.RemoteSecurityService; import com.yeejoin.equipmanage.remote.RemoteSecurityService;
import com.yeejoin.equipmanage.service.EquipmentManageService; import com.yeejoin.equipmanage.service.*;
import com.yeejoin.equipmanage.service.IEqDynamicFormGroupService; import org.apache.commons.beanutils.BeanUtils;
import com.yeejoin.equipmanage.service.IEqDynamicFormInstanceService; import org.springframework.beans.factory.annotation.Autowired;
import com.yeejoin.equipmanage.service.IEquipmentCategoryService; import org.springframework.beans.factory.annotation.Value;
import com.yeejoin.equipmanage.service.IEquipmentSpecificSerivce; import org.springframework.context.annotation.Lazy;
import com.yeejoin.equipmanage.service.IFireFightingSystemService; import org.springframework.stereotype.Service;
import com.yeejoin.equipmanage.service.IRiskSourceSceneService; import org.springframework.transaction.annotation.Transactional;
import com.yeejoin.equipmanage.service.ISourceSceneService; import org.springframework.util.CollectionUtils;
import com.yeejoin.equipmanage.service.ISourceStatistics; import org.springframework.util.ObjectUtils;
import com.yeejoin.equipmanage.service.ISyncDataService; import org.springframework.util.StringUtils;
import com.yeejoin.equipmanage.service.MqttSendGateway; import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.*;
import java.util.stream.Collectors;
@Service @Service
public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSystemMapper, FireFightingSystemEntity> public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSystemMapper, FireFightingSystemEntity>
...@@ -846,10 +801,10 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -846,10 +801,10 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
String ip = null; String ip = null;
try { try {
nis = NetworkInterface.getNetworkInterfaces(); nis = NetworkInterface.getNetworkInterfaces();
for (; nis.hasMoreElements();) { for (; nis.hasMoreElements(); ) {
NetworkInterface ni = nis.nextElement(); NetworkInterface ni = nis.nextElement();
Enumeration<InetAddress> ias = ni.getInetAddresses(); Enumeration<InetAddress> ias = ni.getInetAddresses();
for (; ias.hasMoreElements();) { for (; ias.hasMoreElements(); ) {
InetAddress ia = ias.nextElement(); InetAddress ia = ias.nextElement();
if (ia instanceof Inet4Address && !ia.getHostAddress().equals("127.0.0.1")) { if (ia instanceof Inet4Address && !ia.getHostAddress().equals("127.0.0.1")) {
ip = ia.getHostAddress(); ip = ia.getHostAddress();
...@@ -1019,6 +974,8 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1019,6 +974,8 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
return refreshEquipmentTypeAndCount(bizOrgCode); return refreshEquipmentTypeAndCount(bizOrgCode);
} }
} }
@Override @Override
public Object refreshEquipmentTypeAndCount(String bizOrgCode) { public Object refreshEquipmentTypeAndCount(String bizOrgCode) {
List<EquipmentCategory> responseList = this.typeList(); List<EquipmentCategory> responseList = this.typeList();
...@@ -1043,6 +1000,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1043,6 +1000,7 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
return refreshCarTypeAndCount(bizOrgCode); return refreshCarTypeAndCount(bizOrgCode);
} }
} }
@Override @Override
public Object refreshCarTypeAndCount(String bizOrgCode) { public Object refreshCarTypeAndCount(String bizOrgCode) {
List<EquipmentCategory> responseList = this.typeList(); List<EquipmentCategory> responseList = this.typeList();
...@@ -1057,8 +1015,6 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste ...@@ -1057,8 +1015,6 @@ public class FireFightingSystemServiceImpl extends ServiceImpl<FireFightingSyste
return list; return list;
} }
public List<EquipmentCategory> typeList() { public List<EquipmentCategory> typeList() {
List<EquipmentCategory> equipmentCategorys = this.iEquipmentCategoryService List<EquipmentCategory> equipmentCategorys = this.iEquipmentCategoryService
.getEquipmentCategoryList(Integer.valueOf(equipmentCategoryLeftTypeCode)); .getEquipmentCategoryList(Integer.valueOf(equipmentCategoryLeftTypeCode));
......
...@@ -19,7 +19,7 @@ public class SourcesStatisticsImpl implements ISourceStatistics { ...@@ -19,7 +19,7 @@ public class SourcesStatisticsImpl implements ISourceStatistics {
@Autowired @Autowired
private RedisUtils redisUtil; private RedisUtils redisUtil;
public static String PREFIX_CATEGORY_COUNT = "CATEGORY_COUNT_"; static String PREFIX_CATEGORY_COUNT = "CATEGORY_COUNT_";
@Override @Override
...@@ -31,6 +31,16 @@ public class SourcesStatisticsImpl implements ISourceStatistics { ...@@ -31,6 +31,16 @@ public class SourcesStatisticsImpl implements ISourceStatistics {
//求和 //求和
return this.sumNumber(keys); return this.sumNumber(keys);
} else { } else {
return 0;
}
}
/**
* 系统初始化时调用刷新缓存
* @param sourceType 缓存类型
*/
@Override
public void initAllCategoryStatisticsData(SourceTypeEnum sourceType) {
//按照类型插入缓存 //按照类型插入缓存
Object bean = SpringContextHelper.getBean(sourceType.getBeanName()); Object bean = SpringContextHelper.getBean(sourceType.getBeanName());
Method[] methods = bean.getClass().getDeclaredMethods(); Method[] methods = bean.getClass().getDeclaredMethods();
...@@ -43,16 +53,6 @@ public class SourcesStatisticsImpl implements ISourceStatistics { ...@@ -43,16 +53,6 @@ public class SourcesStatisticsImpl implements ISourceStatistics {
} }
} }
} }
return this.sumNumberAndInitRedis(bizOrgCode,sourceType,treeCode, keys);
}
}
private int sumNumberAndInitRedis(String bizOrgCode, SourceTypeEnum sourceType, String treeCode, Set<String> keys) {
int result = this.sumNumber(keys);
if(result == 0){
redisUtil.set(buildKey(bizOrgCode,sourceType.getCode(),treeCode),0,86400);
}
return result;
} }
private int sumNumber(Set<String> keys) { private int sumNumber(Set<String> keys) {
...@@ -69,7 +69,4 @@ public class SourcesStatisticsImpl implements ISourceStatistics { ...@@ -69,7 +69,4 @@ public class SourcesStatisticsImpl implements ISourceStatistics {
return PREFIX_CATEGORY_COUNT + bizOrgCode + "*_" + sourceType + "_" + treeCode + "*"; return PREFIX_CATEGORY_COUNT + bizOrgCode + "*_" + sourceType + "_" + treeCode + "*";
} }
private String buildKey(String bizOrgCode, String sourceType, String treeCode) {
return PREFIX_CATEGORY_COUNT + bizOrgCode + "_" + sourceType + "_" + treeCode;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment