4 Angajamente 627f43becf ... 79f528532b

Autor SHA1 Permisiunea de a trimite mesaje. Dacă este dezactivată, utilizatorul nu va putea trimite nici un fel de mesaj Data
  lihao16 79f528532b fix:二级等保【高危】可上传脚本文件,限制文件上传类型 4 săptămâni în urmă
  lihao16 106819ba5c fix:二级等保【高危】可上传脚本文件,限制文件上传类型 4 săptămâni în urmă
  lihao16 831930f3c8 fix:二级等保【高危】接口权限越权 4 săptămâni în urmă
  lihao16 88a822d20c fix:二级等保【高危】接口权限越权 4 săptămâni în urmă
17 a modificat fișierele cu 314 adăugiri și 138 ștergeri
  1. 1 0
      elevator-admin/src/main/java/com/inspur/idm/media/comm/AdminError.java
  2. 7 0
      elevator-admin/src/main/java/com/inspur/idm/media/controller/RescueConfigController.java
  3. 16 0
      elevator-admin/src/main/java/com/inspur/idm/media/controller/annualcheck/AnnualCheckRecordController.java
  4. 6 0
      elevator-admin/src/main/java/com/inspur/idm/media/controller/device/EleDeviceBlackController.java
  5. 4 0
      elevator-admin/src/main/java/com/inspur/idm/media/controller/report/EstateReportController.java
  6. 4 0
      elevator-admin/src/main/java/com/inspur/idm/media/controller/report/MaintenReportController.java
  7. 4 0
      elevator-admin/src/main/java/com/inspur/idm/media/controller/report/SupervisionReportController.java
  8. 25 0
      elevator-admin/src/main/java/com/inspur/idm/media/service/FileService.java
  9. 14 0
      elevator-admin/src/main/java/com/inspur/idm/media/service/fault/FaultInsureOrderServiceImpl.java
  10. 16 4
      elevator-admin/src/main/java/com/inspur/idm/media/service/fault/FaultRepairInfoServiceImpl.java
  11. 16 3
      elevator-admin/src/main/java/com/inspur/idm/media/service/fault/FaultRepairProcessInfoServiceImpl.java
  12. 21 2
      elevator-admin/src/main/java/com/inspur/idm/media/service/fault/FaultRepairScheduleServiceImpl.java
  13. 17 0
      elevator-admin/src/main/java/com/inspur/idm/media/service/rate/WorkRateServiceImpl.java
  14. 31 8
      elevator-admin/src/main/java/com/inspur/idm/platform/filter/ServiceAuthFilter.java
  15. 5 0
      elevator-admin/src/main/java/com/inspur/idm/sys/controller/AuthRoleController.java
  16. 7 2
      elevator-admin/src/main/java/com/inspur/idm/sys/controller/AuthUserController.java
  17. 120 119
      elevator-admin/src/main/resources/i18n/admin-messages.properties

+ 1 - 0
elevator-admin/src/main/java/com/inspur/idm/media/comm/AdminError.java

@@ -16,6 +16,7 @@ public class AdminError extends AbstractCodeError {
      */
     public static final BaseCodeError MEDIA_CANNOT_SUBMIT = new BaseCodeError("MEDIA_CANNOT_SUBMIT", "media.status_cannot_submit");
     public static final BaseCodeError FILE_UPLOAD_ERROR = new BaseCodeError("FILE_UPLOAD_ERROR", "file.upload_error");
+    public static final BaseCodeError FILE_UPLOAD_ALLOW_ERROR = new BaseCodeError("FILE_UPLOAD_ALLOW_ERROR", "file.upload_allow_error");
     public static final BaseCodeError ELEVATOR_BRAND_EXISTS = new BaseCodeError("ELEVATOR_BRAND_EXISTS", "elevator.brand_exists");
 
     public static final BaseCodeError PART_BRAND_EXISTS = new BaseCodeError("PART_BRAND_EXISTS", "part.brand_exists");

+ 7 - 0
elevator-admin/src/main/java/com/inspur/idm/media/controller/RescueConfigController.java

@@ -3,6 +3,7 @@ package com.inspur.idm.media.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.inspur.idm.media.po.RescueConfig;
 import com.inspur.idm.media.service.rescueconfig.IRescueConfigService;
+import com.inspur.idm.media.util.MyUserUtil;
 import com.inspur.idm.media.vo.rescueconfig.RescueConfigDTO;
 import com.inspur.idm.media.vo.rescueconfig.RescueConfigQuery;
 import com.inspur.idm.media.vo.rescueconfig.RescueConfigVO;
@@ -42,6 +43,9 @@ public class RescueConfigController {
   @GetMapping()
   @PreAuthorize("hasPermission('rescueConfig','list')")
   public BasePageListObj<RescueConfigVO> queryRescueConfigList(RescueConfigQuery query) {
+    if(!(MyUserUtil.isSuperAdmin())) {
+      return new BasePageListObj(null, 0L);
+    }
     IPage<RescueConfigVO> page = rescueConfigService.getRescueConfigVOList(query);
     BasePageListObj<RescueConfigVO> listObj = new BasePageListObj<>(page.getRecords(), page.getTotal());
     listObj.setPageNum(page.getCurrent());
@@ -73,6 +77,9 @@ public class RescueConfigController {
   @GetMapping("{id}")
   @PreAuthorize("hasPermission('rescueConfig','detail')")
   public RescueConfigVO getRescueConfigById(@PathVariable String id) {
+    if(!(MyUserUtil.isSuperAdmin())) {
+      return null;
+    }
     RescueConfigVO vo = rescueConfigService.getRescueConfigById(id);
     return vo;
   }

+ 16 - 0
elevator-admin/src/main/java/com/inspur/idm/media/controller/annualcheck/AnnualCheckRecordController.java

@@ -1,5 +1,6 @@
 package com.inspur.idm.media.controller.annualcheck;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.github.pagehelper.Page;
 import com.inspur.idm.media.comm.AdminError;
 import com.inspur.idm.media.comm.CommConstant;
@@ -25,6 +26,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author xyh
@@ -38,6 +40,9 @@ public class AnnualCheckRecordController {
     @Autowired
     private com.inspur.idm.media.service.annualcheck.AnnualCheckRecordService AnnualCheckRecordService;
 
+    @Autowired
+    private com.inspur.idm.media.dao.annualcheck.AnnualCheckRecordDao AnnualCheckRecordDao;
+
     @ApiOperation("年检记录查询")
     @GetMapping("annualCheckRecord")
     @PreAuthorize("hasPermission('AnnualCheckRecord','list')")
@@ -95,6 +100,17 @@ public class AnnualCheckRecordController {
     @GetMapping("annualCheckRecord/{recordId}/result")
     @PreAuthorize("hasPermission('AnnualCheckRecord','result')")
     public List<AnnualCheckResultVO> getAnnualCheckResult(@PathVariable String recordId) {
+        AnnualCheckRecordQuery query = new AnnualCheckRecordQuery();
+        query.setSyncToAdmin(1);
+        getQuery(query);
+        List<AnnualCheckRecordVO> recordVOList = AnnualCheckRecordDao.selectByQuery(query);
+        if (CollectionUtil.isEmpty(recordVOList)) {
+            return null;
+        }
+        List<String> recordIds = recordVOList.stream().map(AnnualCheckRecordVO::getRecordId).collect(Collectors.toList());
+        if (!recordIds.contains(recordId)) {
+            return null;
+        }
         List<AnnualCheckResultVO> vos = AnnualCheckRecordService.getAnnualCheckResult(recordId);
         //转树形结构
         AnnualCheckRecordService.toTree(vos);

+ 6 - 0
elevator-admin/src/main/java/com/inspur/idm/media/controller/device/EleDeviceBlackController.java

@@ -147,6 +147,9 @@ public class EleDeviceBlackController {
     @GetMapping("eleDeviceBlackConfig")
     @PreAuthorize("hasPermission('eleDeviceBlack','list')")
     public BasePageListObj<EleDeviceBlackConfigVO> queryEleDeviceConfigList(EleDeviceBlackConfigQuery query) {
+        if(!(MyUserUtil.isSuperAdmin())) {
+            return new BasePageListObj(null, 0L);
+        }
         MyUserUtil.addDataAuth(query);
         Page<EleDeviceBlackConfigVO> page = eleDeviceBlackService.getEleDeviceConfigList(query);
         return new BasePageListObj<>(page.getResult(), page.getTotal());
@@ -155,6 +158,9 @@ public class EleDeviceBlackController {
     @ApiOperation("黑匣子运行配置明细")
     @GetMapping("eleDeviceBlackConfig/{deviceId}")
     public BaseObj<EleDeviceBlackConfigVO> getEleDeviceDetail(@PathVariable String deviceId) {
+        if(!(MyUserUtil.isSuperAdmin())) {
+            return new BaseObj<>(null);
+        }
         EleDeviceBlackVO eleDeviceBlackVO = eleDeviceBlackService.getEleDeviceInfoById(deviceId);
         if (eleDeviceBlackVO == null || StringUtils.isBlank(eleDeviceBlackVO.getElevatorId())) {
             throw new CodeException(AdminError.BLACK_NOT_BINDED);

+ 4 - 0
elevator-admin/src/main/java/com/inspur/idm/media/controller/report/EstateReportController.java

@@ -40,6 +40,10 @@ public class EstateReportController {
     @GetMapping("/getEstateReportDetail")
     @PreAuthorize("hasPermission('estateReport','detail')")
     public void getEstateReportDetail(ReportDTO reportDTO, HttpServletResponse response) throws Exception {
+        List<String> roleCode = formatNameService.getUserRoleCode(UserUtils.getCurrentUserId());
+        if(!(MyUserUtil.isSuperAdmin() || roleCode.contains(RoleCode.GOV_EXAMINE.getCode()))){
+            return;
+        }
         if ((reportDTO.getReportType()==0||reportDTO.getReportType()==1)&&StringUtils.isNotBlank(reportDTO.getReportTime())) {
             reportDTO.setReportTimeStart(StringUtils.substringBefore(reportDTO.getReportTime(), "~"));
             if (StringUtils.contains(reportDTO.getReportTime(), "~")) {

+ 4 - 0
elevator-admin/src/main/java/com/inspur/idm/media/controller/report/MaintenReportController.java

@@ -41,6 +41,10 @@ public class MaintenReportController {
     @GetMapping("/getMaintenReportDetail")
     @PreAuthorize("hasPermission('maintenReport','detail')")
     public void getMaintenReportDetail(ReportDTO reportDTO, HttpServletResponse response) throws Exception {
+        List<String> roleCode = formatNameService.getUserRoleCode(UserUtils.getCurrentUserId());
+        if(!(MyUserUtil.isSuperAdmin() || roleCode.contains(RoleCode.GOV_EXAMINE.getCode()))){
+            return;
+        }
         handReportDTO(reportDTO);
         //设置响应格式等
         response.setContentType("application/pdf");

+ 4 - 0
elevator-admin/src/main/java/com/inspur/idm/media/controller/report/SupervisionReportController.java

@@ -48,6 +48,10 @@ public class SupervisionReportController {
     @GetMapping("/getSupervisionReportDetail")
     @PreAuthorize("hasPermission('supervisionReport','detail')")
     public void getSupervisionReportDetail(ReportDTO reportDTO, HttpServletResponse response) throws Exception {
+        List<String> roleCode = formatNameService.getUserRoleCode(UserUtils.getCurrentUserId());
+        if(!(MyUserUtil.isSuperAdmin() || roleCode.contains(RoleCode.GOV_EXAMINE.getCode()))){
+            return;
+        }
         handReportDTO(reportDTO);
         //设置响应格式等
         response.setContentType("application/pdf");

+ 25 - 0
elevator-admin/src/main/java/com/inspur/idm/media/service/FileService.java

@@ -14,6 +14,8 @@ import java.io.File;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Set;
+import java.util.HashSet;
 
 @Service
 @Slf4j
@@ -26,6 +28,25 @@ public class FileService {
     @Autowired
     private PubConfigService pubConfigService;
 
+    private final static Set<String> allowedSuffixSet = new HashSet<String>() {{
+        add(".jpg");
+        add(".jpeg");
+        add(".png");
+        add(".gif");
+        add(".bmp");
+        add(".doc");
+        add(".docx");
+        add(".xls");
+        add(".xlsx");
+        add(".ppt");
+        add(".pptx");
+        add(".pdf");
+        add(".txt");
+        add(".zip");
+        add(".rar");
+        add(".7z");
+    }};
+
     /**
      * 添加合同文件
      * @param file
@@ -70,6 +91,10 @@ public class FileService {
         String fileName = file.getOriginalFilename();
         long fileSize = file.getSize();
         String suffix = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
+        // 检查文件后缀是否在允许范围内
+        if (!allowedSuffixSet.contains(suffix)) {
+            throw new CodeException(AdminError.FILE_UPLOAD_ALLOW_ERROR);
+        }
         String filePath;
         if (CommConstant.FILE_TYPE_CONTRACT.equalsIgnoreCase(type)) {
             filePath = CommConstant.PATH_CONTRACT;

+ 14 - 0
elevator-admin/src/main/java/com/inspur/idm/media/service/fault/FaultInsureOrderServiceImpl.java

@@ -11,6 +11,7 @@ import com.inspur.idm.media.dao.fault.FaultInsureOrderProcessDao;
 import com.inspur.idm.media.po.company.EleCompany;
 import com.inspur.idm.media.po.fault.FaultInsureOrder;
 import com.inspur.idm.media.po.fault.FaultInsureOrderProcess;
+import com.inspur.idm.media.util.MyUserUtil;
 import com.inspur.idm.media.vo.fault.FaultInsureOrderDetailVO;
 import com.inspur.idm.media.vo.fault.FaultInsureOrderQuery;
 import com.inspur.idm.media.vo.fault.FaultInsureOrderVO;
@@ -18,6 +19,7 @@ import com.inspur.idm.platform.comm.BaseCodeError;
 import com.inspur.idm.platform.comm.CodeException;
 import com.inspur.idm.sys.dao.NewAuthUserDao;
 import com.inspur.idm.sys.po.AuthUser;
+import io.jsonwebtoken.lang.Collections;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +27,8 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author zm
@@ -59,6 +63,16 @@ public class FaultInsureOrderServiceImpl implements FaultInsureOrderService {
 
     @Override
     public FaultInsureOrderDetailVO getFaultInsureOrderStatusByIdAndStatus(String insureOrderId, String insureOrderStatus) {
+        FaultInsureOrderQuery query = new FaultInsureOrderQuery();
+        MyUserUtil.addDataAuth(query);
+        List<FaultInsureOrderVO> orderVOList = faultInsureOrderDao.selectByQuery(query);
+        if (Collections.isEmpty(orderVOList)) {
+            return null;
+        }
+        List<String> insureOrderIdList = orderVOList.stream().map(FaultInsureOrderVO::getInsureOrderId).collect(Collectors.toList());
+        if (!insureOrderIdList.contains(insureOrderId)) {
+            return null;
+        }
         FaultInsureOrder po = faultInsureOrderDao.selectByPrimaryKey(insureOrderId);
         if (po == null) {
             return null;

+ 16 - 4
elevator-admin/src/main/java/com/inspur/idm/media/service/fault/FaultRepairInfoServiceImpl.java

@@ -21,10 +21,7 @@ import com.inspur.idm.media.service.rate.PubRateHelper;
 import com.inspur.idm.media.service.rate.RateConstant;
 import com.inspur.idm.media.service.rate.WorkRateDomain;
 import com.inspur.idm.media.util.MyUserUtil;
-import com.inspur.idm.media.vo.fault.FaultRepairInfoDTO;
-import com.inspur.idm.media.vo.fault.FaultRepairInfoQuery;
-import com.inspur.idm.media.vo.fault.FaultRepairInfoVO;
-import com.inspur.idm.media.vo.fault.FaultRepairProcessInfoVO;
+import com.inspur.idm.media.vo.fault.*;
 import com.inspur.idm.media.vo.msg.PubMsgDTO;
 import com.inspur.idm.media.vo.rate.WorkRateAppDTO;
 import com.inspur.idm.media.vo.rate.WorkRateDTO;
@@ -33,6 +30,7 @@ import com.inspur.idm.platform.comm.CodeException;
 import com.inspur.idm.platform.utils.UserUtils;
 import com.inspur.idm.sys.dao.NewAuthUserDao;
 import com.inspur.idm.sys.po.AuthUser;
+import io.jsonwebtoken.lang.Collections;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -42,6 +40,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.stream.Collectors;
 
 import static com.inspur.idm.media.comm.AdminError.*;
 import static com.inspur.idm.platform.comm.BaseCodeError.NOT_EXISTS_ERROR;
@@ -213,6 +213,18 @@ public class FaultRepairInfoServiceImpl implements FaultRepairInfoService {
 
     @Override
     public FaultRepairInfoVO getFaultRepairInfoById(String faultId) {
+
+        FaultInsureOrderQuery query = new FaultInsureOrderQuery();
+        MyUserUtil.addDataAuth(query);
+        List<FaultInsureOrderVO> orderVOList = faultInsureOrderDao.selectByQuery(query);
+        if (Collections.isEmpty(orderVOList)) {
+            return null;
+        }
+        List<String> insureOrderIdList = orderVOList.stream().map(FaultInsureOrderVO::getFaultId).collect(Collectors.toList());
+        if (!insureOrderIdList.contains(faultId)) {
+            return null;
+        }
+
         FaultRepairInfo po = faultRepairInfoDao.selectByPrimaryKey(faultId);
         if(po == null){
             return null;

+ 16 - 3
elevator-admin/src/main/java/com/inspur/idm/media/service/fault/FaultRepairProcessInfoServiceImpl.java

@@ -12,9 +12,8 @@ import com.inspur.idm.media.service.msg.IPubMsgService;
 import com.inspur.idm.media.service.msg.MsgConstant;
 import com.inspur.idm.media.service.msg.PubMsgHelper;
 import com.inspur.idm.media.util.CoordinateTrans;
-import com.inspur.idm.media.vo.fault.FaultRepairInfoVO;
-import com.inspur.idm.media.vo.fault.FaultRepairProcessInfoDTO;
-import com.inspur.idm.media.vo.fault.FaultRepairProcessInfoVO;
+import com.inspur.idm.media.util.MyUserUtil;
+import com.inspur.idm.media.vo.fault.*;
 import com.inspur.idm.media.vo.fault.app.*;
 import com.inspur.idm.media.vo.msg.PubMsgDTO;
 import com.inspur.idm.platform.utils.UserUtils;
@@ -22,6 +21,7 @@ import com.inspur.idm.sys.dao.NewAuthUserDao;
 import com.inspur.idm.sys.po.AuthUser;
 import com.inspur.idm.sys.vo.user.AuthUserQuery;
 import com.inspur.idm.sys.vo.user.AuthUserVO;
+import io.jsonwebtoken.lang.Collections;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.common.utils.CollectionUtils;
 import org.springframework.beans.BeanUtils;
@@ -32,6 +32,7 @@ import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author zy
@@ -88,6 +89,18 @@ public class FaultRepairProcessInfoServiceImpl implements FaultRepairProcessInfo
 
     @Override
     public FaultRepairProcessInfoVO getFaultRepairProcessInfoById(String faultId) {
+
+        FaultInsureOrderQuery query = new FaultInsureOrderQuery();
+        MyUserUtil.addDataAuth(query);
+        List<FaultInsureOrderVO> orderVOList = faultInsureOrderDao.selectByQuery(query);
+        if (Collections.isEmpty(orderVOList)) {
+            return null;
+        }
+        List<String> insureOrderIdList = orderVOList.stream().map(FaultInsureOrderVO::getFaultId).collect(Collectors.toList());
+        if (!insureOrderIdList.contains(faultId)) {
+            return null;
+        }
+
         FaultRepairProcessInfo po = faultRepairProcessInfoDao.selectByPrimaryKey(faultId);
         if(po == null){
             return null;

+ 21 - 2
elevator-admin/src/main/java/com/inspur/idm/media/service/fault/FaultRepairScheduleServiceImpl.java

@@ -16,6 +16,7 @@ import com.inspur.idm.media.po.part.ElePartType;
 import com.inspur.idm.media.service.msg.IPubMsgService;
 import com.inspur.idm.media.service.msg.MsgConstant;
 import com.inspur.idm.media.service.msg.PubMsgHelper;
+import com.inspur.idm.media.util.MyUserUtil;
 import com.inspur.idm.media.vo.fault.*;
 import com.inspur.idm.media.vo.msg.PubMsgDTO;
 import com.inspur.idm.platform.utils.UUIDUtil;
@@ -24,6 +25,7 @@ import com.inspur.idm.sys.dao.NewAuthUserDao;
 import com.inspur.idm.sys.po.AuthUser;
 import com.inspur.idm.sys.vo.user.AuthUserQuery;
 import com.inspur.idm.sys.vo.user.AuthUserVO;
+import io.jsonwebtoken.lang.Collections;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.common.utils.CollectionUtils;
@@ -93,6 +95,9 @@ public class FaultRepairScheduleServiceImpl implements FaultRepairScheduleServic
     @Autowired
     private EleFittingsPriceDao eleFittingsPriceDao;
 
+    @Autowired
+    private FaultInsureOrderDao faultInsureOrderDao;
+
     @Override
     public void deleteFaultRepairScheduleById(String faultId) {
         faultRepairScheduleDao.deleteByPrimaryKey(faultId);
@@ -100,6 +105,18 @@ public class FaultRepairScheduleServiceImpl implements FaultRepairScheduleServic
 
     @Override
     public FaultRepairScheduleVO getFaultRepairScheduleById(String faultId) {
+
+        FaultInsureOrderQuery query = new FaultInsureOrderQuery();
+        MyUserUtil.addDataAuth(query);
+        List<FaultInsureOrderVO> orderVOList = faultInsureOrderDao.selectByQuery(query);
+        if (Collections.isEmpty(orderVOList)) {
+            return null;
+        }
+        List<String> insureOrderIdList = orderVOList.stream().map(FaultInsureOrderVO::getFaultId).collect(Collectors.toList());
+        if (!insureOrderIdList.contains(faultId)) {
+            return null;
+        }
+
         FaultRepairSchedule po = faultRepairScheduleDao.selectByPrimaryKey(faultId);
         if(po == null){
             return null;
@@ -183,8 +200,10 @@ public class FaultRepairScheduleServiceImpl implements FaultRepairScheduleServic
             }
             if (StringUtils.isNotBlank(vo.getInsureAuditUserId())) {
                 AuthUser insureAuditUser = authUserDao.selectByPrimaryKey(vo.getInsureAuditUserId());
-                vo.setInsureUserName(insureAuditUser.getRealName());
-                vo.setInsureUserPhone(insureAuditUser.getPhone());
+                if (insureAuditUser != null) {
+                    vo.setInsureUserName(insureAuditUser.getRealName());
+                    vo.setInsureUserPhone(insureAuditUser.getPhone());
+                }
             }
         }
         return vo;

+ 17 - 0
elevator-admin/src/main/java/com/inspur/idm/media/service/rate/WorkRateServiceImpl.java

@@ -1,5 +1,6 @@
 package com.inspur.idm.media.service.rate;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
 import com.inspur.idm.media.comm.CommConstant;
@@ -9,6 +10,7 @@ import com.inspur.idm.media.po.company.EleCompany;
 import com.inspur.idm.media.po.rate.WorkRate;
 import com.inspur.idm.media.service.FileHelpService;
 import com.inspur.idm.media.service.FormatNameService;
+import com.inspur.idm.media.util.MyUserUtil;
 import com.inspur.idm.media.vo.rate.*;
 import com.inspur.idm.platform.comm.BasePageListObj;
 import com.inspur.idm.platform.utils.UUIDUtil;
@@ -111,6 +113,21 @@ public class WorkRateServiceImpl implements WorkRateService{
                 query.setRateTimeEnd(query.getRateTime());
             }
         }
+        String companyId = query.getCompanyId();
+        if (StringUtils.isBlank(companyId)) {
+            return new Page<>();
+        }
+        CompanyRateQuery rateQuery = new CompanyRateQuery();
+        MyUserUtil.addDataAuth(rateQuery);
+        List<CompanyRateVO> companyRates = workRateDao.selectCompanyRateByQuery(rateQuery);
+        if (CollectionUtil.isEmpty(companyRates)) {
+            return new Page<>();
+        }
+        List<String> companyIds = companyRates.stream().map(CompanyRateVO::getCompanyId).collect(Collectors.toList());
+        if (!companyIds.contains(companyId)) {
+            return new Page<>();
+        }
+
         Page<WorkRateVO> page = PageHelper.startPage(query.getPageNum(), query.getPageSize()).doSelectPage(() -> {
             workRateDao.selectByQuery(query);
         });

+ 31 - 8
elevator-admin/src/main/java/com/inspur/idm/platform/filter/ServiceAuthFilter.java

@@ -5,28 +5,51 @@
 
 package com.inspur.idm.platform.filter;
 
-import com.inspur.idm.platform.comm.BaseCodeError;
+import com.inspur.idm.media.comm.AdminError;
+import com.inspur.idm.media.util.MyUserUtil;
+import com.inspur.idm.platform.comm.BasePageListObj;
 import com.inspur.idm.platform.comm.CodeException;
-import com.inspur.idm.platform.utils.ServerAuthUtils;
-/*import com.inspur.pub.AuthenticateUtil;*/
-import java.io.IOException;
-import java.io.PrintWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.filter.OncePerRequestFilter;
+
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.filter.OncePerRequestFilter;
+import java.io.IOException;
+import java.io.PrintWriter;
 
 public class ServiceAuthFilter extends OncePerRequestFilter {
     private static final Logger log = LoggerFactory.getLogger(ServiceAuthFilter.class);
     private static final long SERVER_START_TIME = System.currentTimeMillis();
 
+    public static final String AUTHORITYS_PATH = "/sys/authoritys";
+
+    public static final String ORGANS_PATH = "/sys/organs";
+
+    public static final String LOGS_PATH = "/sys/logs";
+
+    public static final String CONFIGS_PATH = "/pub/configs";
+
+    public static final String DICTS_PATH = "/sys/dicts-manage";
+
     public ServiceAuthFilter() {
     }
 
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+        if (request.getServletPath().endsWith(AUTHORITYS_PATH) || request.getServletPath().endsWith(ORGANS_PATH)
+                || request.getServletPath().endsWith(LOGS_PATH) || request.getServletPath().endsWith(CONFIGS_PATH)
+                || request.getServletPath().endsWith(DICTS_PATH)) {
+            if(!(MyUserUtil.isSuperAdmin())) {
+                response.setCharacterEncoding("utf-8");
+                response.setContentType("application/json;charset=utf-8");
+                PrintWriter write = response.getWriter();
+                String msg = this.buildMessage(new CodeException(AdminError.REPAIR_NO_PERMISSION, new Object[0]));
+                write.print(msg);
+                write.flush();
+            }
+        }
         filterChain.doFilter(request, response);
 //        String path = request.getServletPath();
 //        if (!"/service/info".equalsIgnoreCase(path) && !"/auth.html".equalsIgnoreCase(path)) {

+ 5 - 0
elevator-admin/src/main/java/com/inspur/idm/sys/controller/AuthRoleController.java

@@ -1,6 +1,8 @@
 package com.inspur.idm.sys.controller;
 
 import com.github.pagehelper.Page;
+import com.inspur.idm.media.comm.RoleCode;
+import com.inspur.idm.media.util.MyUserUtil;
 import com.inspur.idm.platform.aop.ControllerLog;
 import com.inspur.idm.platform.comm.BaseCodeError;
 import com.inspur.idm.platform.comm.BaseObj;
@@ -57,6 +59,9 @@ public class AuthRoleController {
     @GetMapping({"sys/roles"})
     @PreAuthorize("hasPermission('role','management')")
     public BasePageListObj<RoleVO> queryRoleList(RoleQuery query) {
+        if(!(MyUserUtil.isSuperAdmin())) {
+            return new BasePageListObj(null, 0L);
+        }
         return this.queryRoleList((String)null, query);
     }
 

+ 7 - 2
elevator-admin/src/main/java/com/inspur/idm/sys/controller/AuthUserController.java

@@ -8,6 +8,7 @@ package com.inspur.idm.sys.controller;
 import com.github.pagehelper.Page;
 import com.inspur.idm.media.comm.CommConstant;
 import com.inspur.idm.media.service.ElevatorInfoService;
+import com.inspur.idm.media.util.MyUserUtil;
 import com.inspur.idm.media.util.PasswordValidUtil;
 import com.inspur.idm.media.vo.elevator.ElevatorInfoVO;
 import com.inspur.idm.platform.aop.ControllerLog;
@@ -126,8 +127,9 @@ public class AuthUserController {
     @PreAuthorize("hasPermission('user','management')")
     public BasePageListObj<AuthUserVO> queryCompanyUsersList(AuthUserQuery query) {
         if(!authUserService.isSuperAdmin()){
-            String companyId = authUserService.getCurrentUser().getCompanyId();
-            query.setCompanyId(companyId);
+            /*String companyId = authUserService.getCurrentUser().getCompanyId();
+            query.setCompanyId(companyId);*/
+            return new BasePageListObj<>(new ArrayList<>(), 0);
         }
         return this.queryAuthUserList((String)null, query);
     }
@@ -209,6 +211,9 @@ public class AuthUserController {
     @GetMapping({"sys/users/{userId}"})
     @PreAuthorize("hasPermission('user','management')")
     public AuthUserVO getAuthUserById(@PathVariable String userId) {
+        if(!(MyUserUtil.isSuperAdmin())) {
+            return null;
+        }
         return this.getAuthUserById((String)null, userId);
     }
 

+ 120 - 119
elevator-admin/src/main/resources/i18n/admin-messages.properties

@@ -1,127 +1,128 @@
-admin.demo.demo-error=演示异常,异常原因{2}、{1}、{0}
-admin.arg.invalid=参数无效
-media.status_cannot_submit=当前状态不可提交
-file.upload_error=文件上传失败
-elevator.brand_exists=存在对应品牌的电梯,无法删除
-part.brand_exists=存在对应品牌的部件,无法删除
-part.type_part_exists=分类下存在部件,无法删除
-part.type_sub_exists=存在下级分类,无法删除
-building.batch_length_error=批量添加楼栋数据失败,请检查长度是否一致
-floor.length_error=楼层配置无效
-project.cant_enable=一种类型电梯只能启用一种标准
-fittings.cant_audit=当前状态无法审核
-no.param.error=缺少参数:{0}
-exists.in.plan=所选电梯已在其他计划中
-parent.disable=父项目禁用,无法启用
-# 实时监控
-elevator.offline=电梯离线,无法播放
-elevator.not_config_camera=未配置摄像头,无法播放
-camera.disable=摄像头禁用,无法播放
-# 视频下载
-video.is.recording=已开始录制,请稍后重新下载
-#应急救援
-rescue.claim_error=已被接单!
-rescue.cancel_claim_error=非本人接单,无法取消!
-rescue.archive_error=已是归档状态!
-rescue.archive_error_uncomplete=不是救援完成状态,无法归档!
-rescue.not_my_rescue_error=不是我的接单,无法处理!
-rescue.phone_exists=当前小区已存在启用的数据!
-rescue.up_report_exists=故障已上报,无法重复上报!
+admin.demo.demo-error=\u6F14\u793A\u5F02\u5E38\uFF0C\u5F02\u5E38\u539F\u56E0{2}\u3001{1}\u3001{0}
+admin.arg.invalid=\u53C2\u6570\u65E0\u6548
+media.status_cannot_submit=\u5F53\u524D\u72B6\u6001\u4E0D\u53EF\u63D0\u4EA4
+file.upload_error=\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25
+file.upload_allow_error=\u6587\u4EF6\u4E0A\u4F20\u683C\u5F0F\u6821\u9A8C\u5931\u8D25
+elevator.brand_exists=\u5B58\u5728\u5BF9\u5E94\u54C1\u724C\u7684\u7535\u68AF\uFF0C\u65E0\u6CD5\u5220\u9664
+part.brand_exists=\u5B58\u5728\u5BF9\u5E94\u54C1\u724C\u7684\u90E8\u4EF6\uFF0C\u65E0\u6CD5\u5220\u9664
+part.type_part_exists=\u5206\u7C7B\u4E0B\u5B58\u5728\u90E8\u4EF6\uFF0C\u65E0\u6CD5\u5220\u9664
+part.type_sub_exists=\u5B58\u5728\u4E0B\u7EA7\u5206\u7C7B\uFF0C\u65E0\u6CD5\u5220\u9664
+building.batch_length_error=\u6279\u91CF\u6DFB\u52A0\u697C\u680B\u6570\u636E\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u957F\u5EA6\u662F\u5426\u4E00\u81F4
+floor.length_error=\u697C\u5C42\u914D\u7F6E\u65E0\u6548
+project.cant_enable=\u4E00\u79CD\u7C7B\u578B\u7535\u68AF\u53EA\u80FD\u542F\u7528\u4E00\u79CD\u6807\u51C6
+fittings.cant_audit=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u5BA1\u6838
+no.param.error=\u7F3A\u5C11\u53C2\u6570:{0}
+exists.in.plan=\u6240\u9009\u7535\u68AF\u5DF2\u5728\u5176\u4ED6\u8BA1\u5212\u4E2D
+parent.disable=\u7236\u9879\u76EE\u7981\u7528\uFF0C\u65E0\u6CD5\u542F\u7528
+# \u5B9E\u65F6\u76D1\u63A7
+elevator.offline=\u7535\u68AF\u79BB\u7EBF\uFF0C\u65E0\u6CD5\u64AD\u653E
+elevator.not_config_camera=\u672A\u914D\u7F6E\u6444\u50CF\u5934\uFF0C\u65E0\u6CD5\u64AD\u653E
+camera.disable=\u6444\u50CF\u5934\u7981\u7528\uFF0C\u65E0\u6CD5\u64AD\u653E
+# \u89C6\u9891\u4E0B\u8F7D
+video.is.recording=\u5DF2\u5F00\u59CB\u5F55\u5236\uFF0C\u8BF7\u7A0D\u540E\u91CD\u65B0\u4E0B\u8F7D
+#\u5E94\u6025\u6551\u63F4
+rescue.claim_error=\u5DF2\u88AB\u63A5\u5355\uFF01
+rescue.cancel_claim_error=\u975E\u672C\u4EBA\u63A5\u5355\uFF0C\u65E0\u6CD5\u53D6\u6D88\uFF01
+rescue.archive_error=\u5DF2\u662F\u5F52\u6863\u72B6\u6001\uFF01
+rescue.archive_error_uncomplete=\u4E0D\u662F\u6551\u63F4\u5B8C\u6210\u72B6\u6001\uFF0C\u65E0\u6CD5\u5F52\u6863\uFF01
+rescue.not_my_rescue_error=\u4E0D\u662F\u6211\u7684\u63A5\u5355\uFF0C\u65E0\u6CD5\u5904\u7406\uFF01
+rescue.phone_exists=\u5F53\u524D\u5C0F\u533A\u5DF2\u5B58\u5728\u542F\u7528\u7684\u6570\u636E\uFF01
+rescue.up_report_exists=\u6545\u969C\u5DF2\u4E0A\u62A5\uFF0C\u65E0\u6CD5\u91CD\u590D\u4E0A\u62A5\uFF01
 
-# 故障维修
-fault.has_repaired=故障单已经报修,无法重复维修
-fault.cannot_update_unhaldle=故障单已经报修,无法改为未处理状态
-replace.repair_empty=换件列表为空
-repair.cannot_assign=当前状态无法派单
-repair.cannot_accept=当前状态无法接单
-repair.cannot_signin=当前状态无法签到
-repair.cannot_report=当前状态无法提报
-repair.cannot_sign=当前状态无法签字/审核
-repair.cannot_estateconfirm=当前状态物业无法确认
-repair.cannot_insureconfirm=当前状态保险无法确认
-repair.cannot_survey=当前状态保险无法勘察
-repair.cannot_schedule=当前状态保险无法制定维修方案
-repair.status_invalid=当前状态无法进行此操作
-repair.status_cannotcheck=当前状态无法检查
-repair.not_in_scope=不在签到范围内
-repair.no_permission=无此操作权限
-repair.replace_ori_empty=原配件不能为空
-# 零星维护
-sporadict.cannot_confirm=当前状态无法确认
-sporadict.cannot_report=当前状态无法提交
-sporadict.cannot_signin=当前状态无法签到
-# 保险
-insure.elevator_not_insured=该电梯尚未投保
-insure.type_already_exists=保险类型编号{0}已存在
-insure.order_not_exists=出险工单不存在
-insure.order_status_repair=当前正在维修中,无法修改
-insure.order_status_not_repair=当前不在维修中,无法修改
-insure.order_invalid_input=输入值有误,{0}
-insure.order_invalid_status=输入的状态有误,{0}
+# \u6545\u969C\u7EF4\u4FEE
+fault.has_repaired=\u6545\u969C\u5355\u5DF2\u7ECF\u62A5\u4FEE\uFF0C\u65E0\u6CD5\u91CD\u590D\u7EF4\u4FEE
+fault.cannot_update_unhaldle=\u6545\u969C\u5355\u5DF2\u7ECF\u62A5\u4FEE\uFF0C\u65E0\u6CD5\u6539\u4E3A\u672A\u5904\u7406\u72B6\u6001
+replace.repair_empty=\u6362\u4EF6\u5217\u8868\u4E3A\u7A7A
+repair.cannot_assign=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u6D3E\u5355
+repair.cannot_accept=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u63A5\u5355
+repair.cannot_signin=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u7B7E\u5230
+repair.cannot_report=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u63D0\u62A5
+repair.cannot_sign=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u7B7E\u5B57/\u5BA1\u6838
+repair.cannot_estateconfirm=\u5F53\u524D\u72B6\u6001\u7269\u4E1A\u65E0\u6CD5\u786E\u8BA4
+repair.cannot_insureconfirm=\u5F53\u524D\u72B6\u6001\u4FDD\u9669\u65E0\u6CD5\u786E\u8BA4
+repair.cannot_survey=\u5F53\u524D\u72B6\u6001\u4FDD\u9669\u65E0\u6CD5\u52D8\u5BDF
+repair.cannot_schedule=\u5F53\u524D\u72B6\u6001\u4FDD\u9669\u65E0\u6CD5\u5236\u5B9A\u7EF4\u4FEE\u65B9\u6848
+repair.status_invalid=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u8FDB\u884C\u6B64\u64CD\u4F5C
+repair.status_cannotcheck=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u68C0\u67E5
+repair.not_in_scope=\u4E0D\u5728\u7B7E\u5230\u8303\u56F4\u5185
+repair.no_permission=\u65E0\u6B64\u64CD\u4F5C\u6743\u9650
+repair.replace_ori_empty=\u539F\u914D\u4EF6\u4E0D\u80FD\u4E3A\u7A7A
+# \u96F6\u661F\u7EF4\u62A4
+sporadict.cannot_confirm=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u786E\u8BA4
+sporadict.cannot_report=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u63D0\u4EA4
+sporadict.cannot_signin=\u5F53\u524D\u72B6\u6001\u65E0\u6CD5\u7B7E\u5230
+# \u4FDD\u9669
+insure.elevator_not_insured=\u8BE5\u7535\u68AF\u5C1A\u672A\u6295\u4FDD
+insure.type_already_exists=\u4FDD\u9669\u7C7B\u578B\u7F16\u53F7{0}\u5DF2\u5B58\u5728
+insure.order_not_exists=\u51FA\u9669\u5DE5\u5355\u4E0D\u5B58\u5728
+insure.order_status_repair=\u5F53\u524D\u6B63\u5728\u7EF4\u4FEE\u4E2D\uFF0C\u65E0\u6CD5\u4FEE\u6539
+insure.order_status_not_repair=\u5F53\u524D\u4E0D\u5728\u7EF4\u4FEE\u4E2D\uFF0C\u65E0\u6CD5\u4FEE\u6539
+insure.order_invalid_input=\u8F93\u5165\u503C\u6709\u8BEF\uFF0C{0}
+insure.order_invalid_status=\u8F93\u5165\u7684\u72B6\u6001\u6709\u8BEF\uFF0C{0}
 
-user.no_phone=未配置手机号,无法找回密码
-valid.code_expired=验证码无效
-user.phone_exists=手机号已存在
+user.no_phone=\u672A\u914D\u7F6E\u624B\u673A\u53F7\uFF0C\u65E0\u6CD5\u627E\u56DE\u5BC6\u7801
+valid.code_expired=\u9A8C\u8BC1\u7801\u65E0\u6548
+user.phone_exists=\u624B\u673A\u53F7\u5DF2\u5B58\u5728
 
-#巡检
-check.item_not_exist=巡检项目单不存在
-check.item_detail_not_exist=巡检项目明细不存在
-check.task_not_exist=巡检任务不存在
-check.item_type_repet=巡检项目单类型重复
-check.task_repet=巡检任务重复
-check.task_fault_repet=巡检任务报障重复
-check.task_fault_error=巡检任务报障无效,无故障
-check.app_state_signin_error=巡检任务状态错误,不符合签到条件
-check.app_state_upload_error=巡检任务状态错误,不符合上报条件
-check.app_state_finish_error=巡检任务状态错误,不符合归档条件
-check.ele_type_not_exist=电梯类型不存在
-check.task_record_not_exist=巡检任务明细不存在
+#\u5DE1\u68C0
+check.item_not_exist=\u5DE1\u68C0\u9879\u76EE\u5355\u4E0D\u5B58\u5728
+check.item_detail_not_exist=\u5DE1\u68C0\u9879\u76EE\u660E\u7EC6\u4E0D\u5B58\u5728
+check.task_not_exist=\u5DE1\u68C0\u4EFB\u52A1\u4E0D\u5B58\u5728
+check.item_type_repet=\u5DE1\u68C0\u9879\u76EE\u5355\u7C7B\u578B\u91CD\u590D
+check.task_repet=\u5DE1\u68C0\u4EFB\u52A1\u91CD\u590D
+check.task_fault_repet=\u5DE1\u68C0\u4EFB\u52A1\u62A5\u969C\u91CD\u590D
+check.task_fault_error=\u5DE1\u68C0\u4EFB\u52A1\u62A5\u969C\u65E0\u6548\uFF0C\u65E0\u6545\u969C
+check.app_state_signin_error=\u5DE1\u68C0\u4EFB\u52A1\u72B6\u6001\u9519\u8BEF\uFF0C\u4E0D\u7B26\u5408\u7B7E\u5230\u6761\u4EF6
+check.app_state_upload_error=\u5DE1\u68C0\u4EFB\u52A1\u72B6\u6001\u9519\u8BEF\uFF0C\u4E0D\u7B26\u5408\u4E0A\u62A5\u6761\u4EF6
+check.app_state_finish_error=\u5DE1\u68C0\u4EFB\u52A1\u72B6\u6001\u9519\u8BEF\uFF0C\u4E0D\u7B26\u5408\u5F52\u6863\u6761\u4EF6
+check.ele_type_not_exist=\u7535\u68AF\u7C7B\u578B\u4E0D\u5B58\u5728
+check.task_record_not_exist=\u5DE1\u68C0\u4EFB\u52A1\u660E\u7EC6\u4E0D\u5B58\u5728
 
-#维保
-maintenance.no_plan = 未配置维保日历
-mainten.cant.rate=维保工作未完成,无法评价
-#评估
-evaluation.cannot_confirm=当前信息已被确认
+#\u7EF4\u4FDD
+maintenance.no_plan = \u672A\u914D\u7F6E\u7EF4\u4FDD\u65E5\u5386
+mainten.cant.rate=\u7EF4\u4FDD\u5DE5\u4F5C\u672A\u5B8C\u6210\uFF0C\u65E0\u6CD5\u8BC4\u4EF7
+#\u8BC4\u4F30
+evaluation.cannot_confirm=\u5F53\u524D\u4FE1\u606F\u5DF2\u88AB\u786E\u8BA4
 
-#评价
-work_rate.complete_error=评价已存在,无法重复评价!
-work_rate.not_exists_error=评价信息不存在!
-work_rate.not_complete_error=评价信息为空!
-work_rate.state_error_rescue=不是归档状态,无法进行评价!
-repair.cant_rate=非本人确认,无权评价此维修单
-sporadict.cant_rate=非本人确认,无权评价此维护单
-#终端设备管理
-device.elevator_already_bind=该电梯已绑定其他设备
-camera.id_invalid=设备ID不符合GB/T28181规范
-camera.channel_invalid=通道编号不符合GB/T28181规范
-camera.id_channel_blank=编号和通道号不能为空
-screen.id_mac_blank=梯屏编号和MAC地址不能为空
-black.id_mac_blank=黑匣子编号和MAC地址不能为空
-black.not_binded=黑匣子未绑定电梯,无法配置
-black.not_configed=关联电梯未配置楼层信息
-device.mac.exists=黑匣子SN已存在
-screen.mac.exists=梯屏SN已存在
-rescue_config.error_repeat=该小区下存在已启用的困人救援配置!
+#\u8BC4\u4EF7
+work_rate.complete_error=\u8BC4\u4EF7\u5DF2\u5B58\u5728\uFF0C\u65E0\u6CD5\u91CD\u590D\u8BC4\u4EF7\uFF01
+work_rate.not_exists_error=\u8BC4\u4EF7\u4FE1\u606F\u4E0D\u5B58\u5728\uFF01
+work_rate.not_complete_error=\u8BC4\u4EF7\u4FE1\u606F\u4E3A\u7A7A\uFF01
+work_rate.state_error_rescue=\u4E0D\u662F\u5F52\u6863\u72B6\u6001\uFF0C\u65E0\u6CD5\u8FDB\u884C\u8BC4\u4EF7\uFF01
+repair.cant_rate=\u975E\u672C\u4EBA\u786E\u8BA4\uFF0C\u65E0\u6743\u8BC4\u4EF7\u6B64\u7EF4\u4FEE\u5355
+sporadict.cant_rate=\u975E\u672C\u4EBA\u786E\u8BA4\uFF0C\u65E0\u6743\u8BC4\u4EF7\u6B64\u7EF4\u62A4\u5355
+#\u7EC8\u7AEF\u8BBE\u5907\u7BA1\u7406
+device.elevator_already_bind=\u8BE5\u7535\u68AF\u5DF2\u7ED1\u5B9A\u5176\u4ED6\u8BBE\u5907
+camera.id_invalid=\u8BBE\u5907ID\u4E0D\u7B26\u5408GB/T28181\u89C4\u8303
+camera.channel_invalid=\u901A\u9053\u7F16\u53F7\u4E0D\u7B26\u5408GB/T28181\u89C4\u8303
+camera.id_channel_blank=\u7F16\u53F7\u548C\u901A\u9053\u53F7\u4E0D\u80FD\u4E3A\u7A7A
+screen.id_mac_blank=\u68AF\u5C4F\u7F16\u53F7\u548CMAC\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A
+black.id_mac_blank=\u9ED1\u5323\u5B50\u7F16\u53F7\u548CMAC\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A
+black.not_binded=\u9ED1\u5323\u5B50\u672A\u7ED1\u5B9A\u7535\u68AF\uFF0C\u65E0\u6CD5\u914D\u7F6E
+black.not_configed=\u5173\u8054\u7535\u68AF\u672A\u914D\u7F6E\u697C\u5C42\u4FE1\u606F
+device.mac.exists=\u9ED1\u5323\u5B50SN\u5DF2\u5B58\u5728
+screen.mac.exists=\u68AF\u5C4FSN\u5DF2\u5B58\u5728
+rescue_config.error_repeat=\u8BE5\u5C0F\u533A\u4E0B\u5B58\u5728\u5DF2\u542F\u7528\u7684\u56F0\u4EBA\u6551\u63F4\u914D\u7F6E!
 
-#年检
-annual.check.working=年检计划执行中
-annual.check.cant_add_ele=180天内另一年检计划已包含该电梯,无法新增
-annual.check.cant_commit=请完善年检电梯及对应年检人员
-annual.check.cant_audit=只能通过或驳回
-annual.record.cant_edit=已年检或归档记录无法编辑
-annual.record.cant_file=未完成年检无法归档
-annual.record.cant_del=年检中的电梯不允许删除
-annual.project.cant_enable=一种类型电梯只能启用一种年检项目
-#报告导出
-report.company_id_error=该单位非超级管理员或者监管单位
+#\u5E74\u68C0
+annual.check.working=\u5E74\u68C0\u8BA1\u5212\u6267\u884C\u4E2D
+annual.check.cant_add_ele=180\u5929\u5185\u53E6\u4E00\u5E74\u68C0\u8BA1\u5212\u5DF2\u5305\u542B\u8BE5\u7535\u68AF\uFF0C\u65E0\u6CD5\u65B0\u589E
+annual.check.cant_commit=\u8BF7\u5B8C\u5584\u5E74\u68C0\u7535\u68AF\u53CA\u5BF9\u5E94\u5E74\u68C0\u4EBA\u5458
+annual.check.cant_audit=\u53EA\u80FD\u901A\u8FC7\u6216\u9A73\u56DE
+annual.record.cant_edit=\u5DF2\u5E74\u68C0\u6216\u5F52\u6863\u8BB0\u5F55\u65E0\u6CD5\u7F16\u8F91
+annual.record.cant_file=\u672A\u5B8C\u6210\u5E74\u68C0\u65E0\u6CD5\u5F52\u6863
+annual.record.cant_del=\u5E74\u68C0\u4E2D\u7684\u7535\u68AF\u4E0D\u5141\u8BB8\u5220\u9664
+annual.project.cant_enable=\u4E00\u79CD\u7C7B\u578B\u7535\u68AF\u53EA\u80FD\u542F\u7528\u4E00\u79CD\u5E74\u68C0\u9879\u76EE
+#\u62A5\u544A\u5BFC\u51FA
+report.company_id_error=\u8BE5\u5355\u4F4D\u975E\u8D85\u7EA7\u7BA1\u7406\u5458\u6216\u8005\u76D1\u7BA1\u5355\u4F4D
 
-#呼叫
-voice.no_camera=未配置摄像头,无法呼叫
+#\u547C\u53EB
+voice.no_camera=\u672A\u914D\u7F6E\u6444\u50CF\u5934\uFF0C\u65E0\u6CD5\u547C\u53EB
 
-#单位管理
-company.relative.ele=已绑定电梯的单位不可删除
-# 密码强度要求
-password.strength=密码请包含大小写字母、特殊字符和数字4种类型,8-20个字符
-password.contain.username=密码中不允许包含用户名
-password.ordered=密码中不允许包含顺序或逆序字符
-password.duplicated=密码中不允许包含连续超过两个重复字符
+#\u5355\u4F4D\u7BA1\u7406
+company.relative.ele=\u5DF2\u7ED1\u5B9A\u7535\u68AF\u7684\u5355\u4F4D\u4E0D\u53EF\u5220\u9664
+# \u5BC6\u7801\u5F3A\u5EA6\u8981\u6C42
+password.strength=\u5BC6\u7801\u8BF7\u5305\u542B\u5927\u5C0F\u5199\u5B57\u6BCD\u3001\u7279\u6B8A\u5B57\u7B26\u548C\u6570\u5B574\u79CD\u7C7B\u578B\uFF0C8-20\u4E2A\u5B57\u7B26
+password.contain.username=\u5BC6\u7801\u4E2D\u4E0D\u5141\u8BB8\u5305\u542B\u7528\u6237\u540D
+password.ordered=\u5BC6\u7801\u4E2D\u4E0D\u5141\u8BB8\u5305\u542B\u987A\u5E8F\u6216\u9006\u5E8F\u5B57\u7B26
+password.duplicated=\u5BC6\u7801\u4E2D\u4E0D\u5141\u8BB8\u5305\u542B\u8FDE\u7EED\u8D85\u8FC7\u4E24\u4E2A\u91CD\u590D\u5B57\u7B26