工单,数据中心用户查看数据的权限,合同考核每日,以及导出每日和按月
22个文件已修改
1个文件已添加
899 ■■■■■ 已修改文件
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRecord.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResult.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderYWConditionForm.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderYWConditionsForm.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/query/CalculateReportQuery.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java 526 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/ContractResultTask.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/WorkOrderTask.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/utils/MongoUtil.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRecord.java
@@ -47,7 +47,13 @@
    @TableField("which_month")
    private Integer whichMonth;
    @ApiModelProperty("哪日")
    @TableField("which_day")
    private Integer whichDay;
    @ApiModelProperty("发布状态")
    @TableField("status")
    private String status;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResult.java
@@ -48,4 +48,6 @@
    private Integer whichYear;
    private Integer whichMonth;
    private Integer whichDay;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderYWConditionForm.java
@@ -3,6 +3,8 @@
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.util.List;
/**
 * 运维情况表单
 *
ycl-pojo/src/main/java/com/ycl/platform/domain/form/WorkOrderYWConditionsForm.java
New file
@@ -0,0 +1,29 @@
package com.ycl.platform.domain.form;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.util.List;
/**
 * 运维情况表单
 *
 * @author:xp
 * @date:2024/3/6 8:59
 */
@Data
public class WorkOrderYWConditionsForm {
    /**
     * 运维情况
     */
    @NotBlank
    private String ywCondition;
    /**
     * 佐证材料
     */
    private String ywProofMaterials;
    private List<String> workOrderNumbers;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/query/CalculateReportQuery.java
@@ -29,5 +29,7 @@
    private Integer whichYear;
    private Integer whichMonth;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
@@ -57,5 +57,8 @@
     * 单位id
     */
    private Integer unitId;
    private String dept;
}
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java
@@ -46,6 +46,8 @@
    /** 哪月 */
    private Integer whichMonth;
    private Integer whichDay;
    /** 最新一条核算标识 */
    private Boolean latest;
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java
@@ -32,6 +32,7 @@
    private Integer contractId;
    private Integer whichYear;
    private Integer whichMonth;
    /** 运维单位 */
    private String unitName;
    private Integer unitId;
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java
@@ -55,7 +55,10 @@
    private Integer whichYear;
    private Integer whichMonth;
    private Integer whichDay;
    private Integer latestMonth;
    private Integer latestDay;
    public static CalculateReportVO getVoByEntity(@NonNull CalculateReport entity, CalculateReportVO vo) {
        if(vo == null) {
ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
@@ -42,13 +42,14 @@
        return calculateReportService.backfill(form);
    }
    @GetMapping("/{contractId}/{whichYear}")
    @GetMapping("/{contractId}/{whichYear}/{whichMoth}")
    @ApiOperation(value = "详情", notes = "详情")
    @PreAuthorize("@ss.hasPermi('system:calculate:report:detail')")
    public Result detail(@PathVariable("contractId") Integer contractId,@PathVariable("whichYear") Integer whichYear) {
    public Result detail(@PathVariable("contractId") Integer contractId,@PathVariable("whichYear") Integer whichYear,@PathVariable("whichMoth") Integer whichMoth) {
        CalculateReportQuery query = new CalculateReportQuery();
        query.setContractId(contractId);
        query.setWhichYear(whichYear);
        query.setWhichMonth(whichMoth);
        return calculateReportService.detail(query);
    }
@@ -69,8 +70,8 @@
    @PostMapping("/export")
    @ApiOperation(value = "导出", notes = "导出")
    @PreAuthorize("@ss.hasPermi('system:calculate:report:export')")
    public void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response) {
        calculateReportService.export(whichYear,whichMonth,contractId, response);
    public void export(Integer whichYear,Integer whichMonth,Integer whichDay,Integer contractId, HttpServletResponse response) {
        calculateReportService.export(whichYear,whichMonth,whichDay,contractId, response);
    }
}
ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
@@ -84,6 +84,14 @@
        return workOrderService.ywCondition(form);
    }
    @PutMapping("/yw-condition-list")
    @ApiOperation(value = "运维情况", notes = "运维情况")
    public Result ywConditionList(@RequestBody @Validated WorkOrderYWConditionsForm form) {
        System.out.println(form);
//        return workOrderService.ywCondition(form);
        return workOrderService.ywConditionList(form);
    }
    //现在没用
    @PutMapping("/yw-result")
    @ApiOperation(value = "运维结果", notes = "运维结果")
ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java
@@ -42,5 +42,5 @@
     * 导出数据
     * @return 数据
     */
    List<CalculateExport> exportData(Integer whichYear,Integer whichMonth,Integer contractId);
    List<CalculateExport> exportData(Integer whichYear,Integer whichMonth,Integer whichDay,Integer contractId);
}
ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
@@ -92,5 +92,5 @@
     * 导出
     * @param response 响应
     */
    void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response);
    void export(Integer whichYear,Integer whichMonth,Integer whichDay,Integer contractId, HttpServletResponse response);
}
ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
@@ -106,6 +106,7 @@
     */
    Result ywCondition(WorkOrderYWConditionForm form);
    Result ywConditionList(WorkOrderYWConditionsForm form);
    /**
     * 运维结果
     * @param form
@@ -253,4 +254,5 @@
    Result errorAll();
}
ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
@@ -225,9 +225,9 @@
    @Override
    @SneakyThrows
    public void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response) {
    public void export(Integer whichYear,Integer whichMonth,Integer whichDay,Integer contractId, HttpServletResponse response) {
        // 获取数据
        List<CalculateExport> list = baseMapper.exportData(whichYear,whichMonth,contractId);
        List<CalculateExport> list = baseMapper.exportData(whichYear,whichMonth,whichDay,contractId);
        CalculateExport calculateExport = new CalculateExport();
        calculateExport.setRuleName("合计");
        calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).sum());
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -24,9 +24,13 @@
import com.ycl.platform.mapper.YwPointMapper;
import com.ycl.platform.service.*;
import com.ycl.system.Result;
import com.ycl.system.entity.SysDept;
import com.ycl.system.model.LoginUser;
import com.ycl.system.service.ISysConfigService;
import com.ycl.system.service.ISysDeptService;
import com.ycl.utils.DateUtils;
import com.ycl.utils.MongoUtil;
import com.ycl.utils.SecurityUtils;
import com.ycl.utils.StringUtils;
import com.ycl.utils.bean.BeanUtils;
import com.ycl.utils.poi.ExcelUtil;
@@ -80,6 +84,7 @@
    public Map<String,List<DynamicColumnVO>> getDynamicByConditions(DataCenterQuery params,List<DynamicColumnVO> list){
        //TODO 该位置没有过滤账号的部门对应的设备信息,而是更具条件查询的全部
        //获得到对应id,且包含传入字符串 动态列集合
        List<DynamicColumnVO> likeFieldDynamicColumnVOList = list.stream()
                .filter(dynamicColumnVO ->
@@ -95,7 +100,7 @@
        return groupByRefStringIdMap;
    }
    //录像可用
    @Override
    public void recordingAvailabilityExport(HttpServletResponse response,DataCenterQuery params) throws IOException {
@@ -105,8 +110,18 @@
        if (params.getOption() != null) {
            query.addCriteria(Criteria.where("recordStatus").is(params.getOption()));
        }
        SysDept sysDept = getSysDeptByLoginUser();
        if (sysDept !=null){
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query.addCriteria(Criteria.where("no").regex("^" +areaDeptEnum.getCode()));
            }
        }
        MongoUtil.setNoPage(query, params, TIME_FIELD);
        List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
        //翻译行政区域
        resultList.forEach(item -> {
            String areaCode = item.getArealayername().substring(0, 6);
@@ -122,6 +137,7 @@
        if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){
            conditions = true;
            //获得动态列集合中包含了的字符串值的集合 区分大小写
            groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList);
        }else{
            groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId));
@@ -197,10 +213,21 @@
                .doWrite(data); // 写入数据
    }
    //点位在线
    @Override
    public void pointOnlineFaceExport(HttpServletResponse response, DataCenterQuery params) throws IOException {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        if (sysDept !=null){
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //查人脸设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Face + ".*"));
        //下拉框在线情况查询条件
@@ -330,12 +357,34 @@
                .sheet("人脸点位在线率") // 设置sheet名称
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                .doWrite(data); // 写入数据
    }
    } private final ISysDeptService deptService;
    public SysDept getSysDeptByLoginUser(){
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysDept sysDept = null;
        Long deptId =null;
        if (loginUser.getDeptId() != null){
            deptId = loginUser.getDeptId();
            sysDept = deptService.selectDeptById(deptId);
        }
        return sysDept;
    }
    //视频单位在线
    @Override
    public void pointOnlineVideoExport(HttpServletResponse response, DataCenterQuery params) throws IOException {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        if (sysDept !=null){
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        //下拉框在线情况查询条件
@@ -461,11 +510,20 @@
    }
    //车辆点位在线
    @Override
    public void pointOnlineCarExport(HttpServletResponse response, DataCenterQuery params) throws IOException {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        if (sysDept !=null){
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //查车辆设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Car + ".*"));
        //下拉框在线情况查询条件
@@ -643,7 +701,21 @@
    @Override
    public Result videoPointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //此处新增了根据用户权限查询的情况
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        //下拉框在线情况查询条件
@@ -702,6 +774,10 @@
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
        //此处新增了根据用户权限查询的情况
        if (areaDeptEnum != null){
            criteriaList.add(Criteria.where("no").regex("^" +areaDeptEnum.getCode()));
        }
        // 根据dataType动态添加条件
        if (params.getDataType() == 1) {
            criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
@@ -759,7 +835,21 @@
    @Override
    public Result deptVideoPointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //此处新增了根据用户权限查询的情况
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        query.addCriteria(Criteria.where("deptTag").is(Boolean.TRUE));
@@ -797,6 +887,10 @@
        int unknownCount = 0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        //此处新增了根据用户权限查询的情况
        if (areaDeptEnum != null){
            criteriaList.add(Criteria.where("no").regex("^" +areaDeptEnum.getCode()));
        }
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
@@ -858,7 +952,21 @@
    @Override
    public Result videoImportantPointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //此处新增了根据用户权限查询的情况
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        query.addCriteria(Criteria.where("importantTag").is(Boolean.TRUE));
@@ -899,6 +1007,10 @@
        int unknownCount = 0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        //此处新增了根据用户权限查询的情况
        if (areaDeptEnum != null){
            criteriaList.add(Criteria.where("no").regex("^" +areaDeptEnum.getCode()));
        }
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
@@ -958,7 +1070,21 @@
    @Override
    public Result videoImportantPointImageOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //此处新增了根据用户权限查询的情况
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        query.addCriteria(Criteria.where("importantCommandImageTag").is(Boolean.TRUE));
@@ -1000,6 +1126,10 @@
        int unknownCount = 0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        //此处新增了根据用户权限查询的情况
        if (areaDeptEnum != null){
            criteriaList.add(Criteria.where("no").regex("^" +areaDeptEnum.getCode()));
        }
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
@@ -1059,7 +1189,19 @@
    @Override
    public Result videoOneMachineDocumentRegister(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("ip.showValue", "name.showValue", "serialNumber.showValue");
        List<Criteria> andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null);
        SysDept sysDept = getSysDeptByLoginUser();
        List<Criteria> andCriteria;
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept != null) {
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null) {
                andCriteria = MongoUtil.getAndCriteriaDateCenter(areaDeptEnum.getCode(),params, TIME_FIELD, likeFileds, null);
            }else {
                andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null);
        }
        Query query = new Query();
        Criteria and = new Criteria();
        if (params.getOption() != null) {
@@ -1082,12 +1224,23 @@
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_monitor_qualify");
        Document areDocument = null;
        if (areaDeptEnum != null) {
            String areaCodePrefix = areaDeptEnum.getCode();
            areDocument = new Document("deviceNo", new Document("$regex", "^" + areaCodePrefix));
        }
        //总数
        List<Document> dList1 = new ArrayList<>(2);
        if(areDocument != null){
            dList1.add(areDocument);
        }
        setTag(params, dList1);
        Document totalFilter = new Document("$and", dList1);
        //新设备数
        List<Document> dList2 = new ArrayList<>(2);
        if(areDocument != null){
            dList1.add(areDocument);
        }
        setTag(params, dList2);
        dList2.add(new Document("newDevice", Boolean.TRUE));
        Document newFilter = new Document("$and", dList2);
@@ -1143,7 +1296,20 @@
    @Override
    public Result videoOneMachineDocumentQualified(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("ip.showValue", "name.showValue", "serialNumber.showValue");
        List<Criteria> andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null);
        SysDept sysDept = getSysDeptByLoginUser();
        List<Criteria> andCriteria;
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept != null) {
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null) {
                andCriteria = MongoUtil.getAndCriteriaDateCenter(areaDeptEnum.getCode(),params, TIME_FIELD, likeFileds, null);
            }else {
                andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null);
        }
        Query query = new Query();
        Criteria and = new Criteria();
        and.andOperator(andCriteria);
@@ -1195,12 +1361,25 @@
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_monitor_qualify");
        Document areDocument = null;
        if (areaDeptEnum != null) {
            String areaCodePrefix = areaDeptEnum.getCode();
            areDocument = new Document("deviceNo", new Document("$regex", "^" + areaCodePrefix));
        }
        //总数
        List<Document> dList1 = new ArrayList<>(2);
        if (areDocument != null){
            dList1.add(areDocument);
        }
        setTag(params, dList1);
        Document totalFilter = new Document("$and", dList1);
        //list1
        //合格数
        List<Document> dList2 = new ArrayList<>(2);
        if (areDocument != null){
            dList2.add(areDocument);
        }
        dList2.add(new Document("serialNumber.error", Boolean.FALSE));
        dList2.add(new Document("name.error", Boolean.FALSE));
        dList2.add(new Document("civilCode.error", Boolean.FALSE));
@@ -1217,6 +1396,9 @@
        Document qualifyFilter = new Document("$and", dList2);
        //不合格数
        List<Document> dList3 = new ArrayList<>(2);
        if (areDocument != null){
            dList3.add(areDocument);
        }
        setTag(params, dList3);
        List<Document> errorConditions = new ArrayList<>();
        errorConditions.add(new Document("serialNumber.error", new Document("$eq", Boolean.TRUE)));
@@ -1383,9 +1565,21 @@
    @Override
    public Result videoAvailabilityRate(DataCenterQuery params) {
        List<String> noString = tMonitorMapper.getIdListVideo();
        List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
        Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        Query query = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,"createTime",likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
        }
        if (CollectionUtils.isNotEmpty(noString)) { // 防止空集合异常
            query.addCriteria(Criteria.where("no").in(noString));
        }
@@ -1395,7 +1589,6 @@
        }
        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
        MongoUtil.setPage(query, params, "createTime");
        List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
        //查询动态列数据
        //查询动态列数据更具id查询
@@ -1403,8 +1596,8 @@
        //翻译行政区域
        resultList.forEach(item -> {
            String areaCode = item.getArealayername().substring(0, 6);
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
            if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName());
            AreaDeptEnum areaDeptEnumInfo = AreaDeptEnum.fromCode(areaCode);
            if (areaDeptEnumInfo != null) item.setArealayername(areaDeptEnumInfo.getName());
            List<DynamicColumnVO> list = dynamicColumnMapper.getDynamicColumnByTable(TableNameConstants.COLUMN_NAME_VIDEO,item.getId());
            item.setDynamicColumnList(list);
@@ -1415,11 +1608,20 @@
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum");
        List<Integer> status = Arrays.asList(1, 0, -1);
        AreaDeptEnum finalAreaDeptEnum = areaDeptEnum;
        List<String> resultCount = status.stream().map(item -> {
            List<Document> dList = new ArrayList<>(2);
            dList.add(new Document("recordStatus", new Document("$eq", item)));
            if(finalAreaDeptEnum != null){
                dList.add(new Document("$and", Arrays.asList(
                        new Document("no", new Document("$in", noString)),
                        new Document("no", new Document("$regex", "^" + finalAreaDeptEnum.getCode()))
                )));
            }else {
            dList.add(new Document("no", new Document("$in", noString)));
            }
            setTag(params, dList);
            Document filter = new Document("$and", dList);
            // 构建聚合管道
@@ -1446,7 +1648,18 @@
        double finalRecordingMinTime = getSySMinTime();
        List<Document> documentList = new ArrayList<>(2);
        if(finalAreaDeptEnum != null){
            documentList.add(new Document("$and", Arrays.asList(
                    new Document("no", new Document("$in", noString)),
                    new Document("no", new Document("$regex", "^" + finalAreaDeptEnum.getCode()))
            )));
        }else {
        documentList.add(new Document("no", new Document("$in", noString)));
        }
//        documentList.add(new Document("$and", Arrays.asList(
//                new Document("no", new Document("$in", noString)),
//                new Document("no", new Document("$regex", "^" + finalAreaDeptEnum.getCode()))
//        )));
        setTag(params, documentList);
        Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime));
        documentList.add(recording);
@@ -1497,7 +1710,19 @@
    @Override
    public Result deptVideoAvailabilityRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
        Query query = MongoUtil.getQuery(params, "createTime", likeFileds, 1);
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        Query query = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,"createTime",likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
        }
        //下拉框录像情况查询条件
        if (params.getOption() != null) {
            query.addCriteria(Criteria.where("recordStatus").is(params.getOption()));
@@ -1508,18 +1733,25 @@
        //翻译行政区域
        resultList.forEach(item -> {
            String areaCode = item.getArealayername().substring(0, 6);
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
            if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName());
            AreaDeptEnum areaDeptEnumInfo = AreaDeptEnum.fromCode(areaCode);
            if (areaDeptEnumInfo != null) item.setArealayername(areaDeptEnumInfo.getName());
        });
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum");
        List<Integer> status = Arrays.asList(1, 0, -1);
        AreaDeptEnum finalAreaDeptEnum = areaDeptEnum;
        List<String> resultCount = status.stream().map(item -> {
            List<Document> dList = new ArrayList<>(4);
            dList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE)));
            dList.add(new Document("recordStatus", new Document("$eq", item)));
            setTag(params, dList);
            if (finalAreaDeptEnum != null){
                dList.add(new Document("$and", Arrays.asList(
//                    new Document("no", new Document("$in", noString)),
                        new Document("no", new Document("$regex", "^" + finalAreaDeptEnum.getCode()))
                )));
            }
            Document filter = new Document("$and", dList);
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -1549,6 +1781,12 @@
        setTag(params, documentList);
        Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime));
        documentList.add(recording);
        if (finalAreaDeptEnum != null){
            documentList.add(new Document("$and", Arrays.asList(
//                    new Document("no", new Document("$in", noString)),
                    new Document("no", new Document("$regex", "^" + finalAreaDeptEnum.getCode()))
            )));
        }
        Document filter = new Document("$and", documentList);
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
@@ -1605,7 +1843,20 @@
    @Override
    public Result videoImportantPointAvailabilityRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
        Query query = MongoUtil.getQuery(params, "createTime", likeFileds, 3);
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        Query query = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,"createTime",likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
        }
        query.addCriteria(Criteria.where("importantTag").is(Boolean.TRUE));
        //下拉框录像情况查询条件
        if (params.getOption() != null) {
            query.addCriteria(Criteria.where("recordStatus").is(params.getOption()));
@@ -1616,18 +1867,25 @@
        //翻译行政区域
        resultList.forEach(item -> {
            String areaCode = item.getArealayername().substring(0, 6);
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
            if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName());
            AreaDeptEnum areaDeptEnumInfo = AreaDeptEnum.fromCode(areaCode);
            if (areaDeptEnumInfo != null) item.setArealayername(areaDeptEnumInfo.getName());
        });
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum");
        List<Integer> status = Arrays.asList(1, 0, -1);
        AreaDeptEnum finalAreaDeptEnum = areaDeptEnum;
        List<String> resultCount = status.stream().map(item -> {
            List<Document> dList = new ArrayList<>(4);
            dList.add(new Document("importantTag", new Document("$eq", Boolean.TRUE)));
            dList.add(new Document("recordStatus", new Document("$eq", item)));
            setTag(params, dList);
            if (finalAreaDeptEnum != null){
                dList.add(new Document("$and", Arrays.asList(
//                    new Document("no", new Document("$in", noString)),
                        new Document("no", new Document("$regex", "^" + finalAreaDeptEnum.getCode()))
                )));
            }
            Document filter = new Document("$and", dList);
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -1656,6 +1914,12 @@
        setTag(params, documentList);
        Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime));
        documentList.add(recording);
        if (finalAreaDeptEnum != null){
            documentList.add(new Document("$and", Arrays.asList(
//                    new Document("no", new Document("$in", noString)),
                    new Document("no", new Document("$regex", "^" + finalAreaDeptEnum.getCode()))
            )));
        }
        Document filter = new Document("$and", documentList);
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
@@ -1714,12 +1978,32 @@
        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
        List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
        Query nonNetworkQuery;
        Query networkQuery;
        Query videoQuery;
        Query carQuery;
        Query faceQuery;
//        if (areaDeptEnum == null){
            nonNetworkQuery = new Query().addCriteria(Criteria.where("LWSX").is("0"));
            networkQuery = new Query().addCriteria(Criteria.where("LWSX").is("1"));
            videoQuery = new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*1.*"));
            carQuery = new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*2.*"));
            faceQuery = new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*3.*"));
//        }
//        else {
//            nonNetworkQuery = new Query().addCriteria(Criteria.where("LWSX").is("0")).addCriteria(Criteria.where("no").regex("^" + Pattern.quote(areaDeptEnum.getCode())));
//            networkQuery = new Query().addCriteria(Criteria.where("LWSX").is("1")).addCriteria(Criteria.where("no").regex("^" + Pattern.quote(areaDeptEnum.getCode())));
//            videoQuery = new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*1.*")).addCriteria(Criteria.where("no").regex("^" + Pattern.quote(areaDeptEnum.getCode())));
//            carQuery = new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*2.*")).addCriteria(Criteria.where("no").regex("^" + Pattern.quote(areaDeptEnum.getCode())));
//            faceQuery = new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*3.*")).addCriteria(Criteria.where("no").regex("^" + Pattern.quote(areaDeptEnum.getCode())));
//        }
        // 统计数
        long nonNetwork = mongoTemplate.count(new Query().addCriteria(Criteria.where("LWSX").is("0")), RecordMetaDSumResult.class);
        long network = mongoTemplate.count(new Query().addCriteria(Criteria.where("LWSX").is("1")), RecordMetaDSumResult.class);
        long video = mongoTemplate.count(new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*1.*")), RecordMetaDSumResult.class);
        long car = mongoTemplate.count(new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*2.*")), RecordMetaDSumResult.class);
        long face = mongoTemplate.count(new Query().addCriteria(Criteria.where("SXJGNLX").regex(".*3.*")), RecordMetaDSumResult.class);
        long nonNetwork = mongoTemplate.count(nonNetworkQuery, RecordMetaDSumResult.class);
        long network = mongoTemplate.count(networkQuery, RecordMetaDSumResult.class);
        long video = mongoTemplate.count(videoQuery, RecordMetaDSumResult.class);
        long car = mongoTemplate.count(carQuery, RecordMetaDSumResult.class);
        long face = mongoTemplate.count(faceQuery, RecordMetaDSumResult.class);
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(nonNetwork, network, video, car, face));
        map.put("list", resultList);
@@ -1735,11 +2019,25 @@
    @Override
    public Result videoImportantPointLabelingAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceNo", "osdName");
        List<Criteria> andCriteria = MongoUtil.getAndCriteria(params, "checkTime", likeFileds, null);
        SysDept sysDept = getSysDeptByLoginUser();
        List<Criteria> andCriteria;
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept != null) {
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null) {
                andCriteria = MongoUtil.getAndCriteriaDateCenter(areaDeptEnum.getCode(),params, "checkTime", likeFileds, null);
            }else {
                andCriteria = MongoUtil.getAndCriteria(params, "checkTime", likeFileds, null);
            }
        }else {
            andCriteria = MongoUtil.getAndCriteria(params, "checkTime", likeFileds, null);
        }
        Query query = new Query();
        Criteria and = new Criteria();
        and.andOperator(andCriteria);
        query = Query.query(and);
        query.addCriteria(Criteria.where("importantTag").is(Boolean.TRUE));
        //下拉框标注正确查询条件
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
@@ -1781,13 +2079,26 @@
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("osd_check_result");
        // 确保在统计查询中也应用相同的过滤条件
        Document areDocument = null;
        if (areaDeptEnum != null) {
            String areaCodePrefix = areaDeptEnum.getCode();
            areDocument = new Document("deviceNo", new Document("$regex", "^" + areaCodePrefix));
        }
        //总数
        List<Document> dList = new ArrayList<>(2);
        if (areDocument != null){
            dList.add(areDocument);
        }
        dList.add(new Document("importantTag", Boolean.TRUE));
        setTag(params, dList);
        Document osdFilter = new Document("$and", dList);
        //正常数
        List<Document> dList1 = new ArrayList<>(2);
        if (areDocument != null){
            dList1.add(areDocument);
        }
        dList1.add(new Document("importantTag", Boolean.TRUE));
        dList1.add(new Document("osdNameCorrect", new Document("$eq", 1)));
        dList1.add(new Document("osdTimeCorrect", new Document("$eq", 1)));
@@ -1795,9 +2106,13 @@
        dList1.add(new Document("osdCityCorrect", new Document("$eq", 1)));
        dList1.add(new Document("osdPartCorrect", new Document("$eq", 1)));
        setTag(params, dList1);
        Document osdCorrectFilter = new Document("$and", dList1);
        //异常数
        List<Document> dList2 = new ArrayList<>(2);
        if (areDocument != null){
            dList2.add(areDocument);
        }
        setTag(params, dList2);
        Document importantTagCondition = new Document("importantTag", Boolean.TRUE);
        dList2.add(importantTagCondition);
@@ -1809,9 +2124,14 @@
        errorConditions.add(new Document("osdPartCorrect", new Document("$eq", -1)));
        Document errorFilter = new Document("$or", errorConditions);
        dList2.add(errorFilter);
        Document osdErrorFilter = new Document("$and", dList2);
        //未知数
        List<Document> dList3 = new ArrayList<>(2);
        if (areDocument != null){
            dList3.add(areDocument);
        }
        setTag(params, dList3);
        dList3.add(importantTagCondition);
        List<Document> unknownConditions = new ArrayList<>();
@@ -1820,9 +2140,9 @@
        unknownConditions.add(new Document("osdProvinceCorrect", new Document("$eq", 0)));
        unknownConditions.add(new Document("osdCityCorrect", new Document("$eq", 0)));
        unknownConditions.add(new Document("osdPartCorrect", new Document("$eq", 0)));
        // 使用$or逻辑组合剩余的条件
        Document unknownFilter = new Document("$or", unknownConditions);
        dList3.add(unknownFilter);
        Document osdUnknownFilter = new Document("$and", dList3);
        List<Document> lists = Arrays.asList(osdFilter, osdCorrectFilter, osdErrorFilter, osdUnknownFilter);
@@ -1844,18 +2164,6 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getKeyAnnotationAccuracy)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyAnnotationAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(1)).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
@@ -1962,7 +2270,25 @@
    @Override
    public Result videoImportantPointCheckTimeAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceNo", "osdName");
        Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, null);
        SysDept sysDept = getSysDeptByLoginUser();
        List<Criteria> andCriteria;
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept != null) {
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null) {
                andCriteria = MongoUtil.getAndCriteriaDateCenter(areaDeptEnum.getCode(),params, "checkTime", likeFileds, null);
            }else {
                andCriteria = MongoUtil.getAndCriteria(params, "checkTime", likeFileds, null);
            }
        }else {
            andCriteria = MongoUtil.getAndCriteria(params, "checkTime", likeFileds, null);
        }
        Query query = new Query();
        Criteria and = new Criteria();
        and.andOperator(andCriteria);
        query = Query.query(and);
        query.addCriteria(Criteria.where("importantTag").is(Boolean.TRUE));
        //下拉框标注正确查询条件
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
@@ -1977,6 +2303,11 @@
        long total = mongoTemplate.count(query, OsdCheckResult.class);
        MongoUtil.setPage(query, params, "checkTime");
        List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class);
        Document areDocument = null;
        if (areaDeptEnum != null) {
            String areaCodePrefix = areaDeptEnum.getCode();
            areDocument = new Document("deviceNo", new Document("$regex", "^" + areaCodePrefix));
        }
        for (OsdCheckResult osdCheckResult : resultList) {
            OsdCheckResult.getError(osdCheckResult);
@@ -1985,7 +2316,10 @@
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("osd_check_result");
        //总数
        List<Document> dList = new ArrayList<>(2);
        List<Document> dList = new ArrayList<>(3);
        if (areDocument != null){
            dList.add(areDocument);
        }
        dList.add(new Document("importantTag", Boolean.TRUE));
        setTag(params, dList);
        Document osdFilter = new Document("$and", dList);
@@ -1997,10 +2331,16 @@
        dList1.add(new Document("osdProvinceCorrect", new Document("$eq", 1)));
        dList1.add(new Document("osdCityCorrect", new Document("$eq", 1)));
        dList1.add(new Document("osdPartCorrect", new Document("$eq", 1)));
        if (areDocument != null){
            dList1.add(areDocument);
        }
        setTag(params, dList1);
        Document osdCorrectFilter = new Document("$and", dList1);
        //异常数
        List<Document> dList2 = new ArrayList<>(2);
        if (areDocument != null){
            dList2.add(areDocument);
        }
        setTag(params, dList2);
        Document importantTagCondition = new Document("importantTag", Boolean.TRUE);
        dList2.add(importantTagCondition);
@@ -2015,6 +2355,9 @@
        Document osdErrorFilter = new Document("$and", dList2);
        //未知数
        List<Document> dList3 = new ArrayList<>(2);
        if (areDocument != null){
            dList3.add(areDocument);
        }
        setTag(params, dList3);
        dList3.add(importantTagCondition);
        List<Document> unknownConditions = new ArrayList<>();
@@ -2080,7 +2423,20 @@
    @Override
    public Result vehicleViewDockStable(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //加DataType为车辆
        query.addCriteria(Criteria.where("dataType").is(ApiConstants.HK_DataType_CAR));
        if (params.getOption() != null) {
@@ -2098,23 +2454,41 @@
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
        resultList.forEach(item -> item.setResultTypeText(item.getResultTypeText()));
        Document areDocument = null;
        if (areaDeptEnum != null) {
            String areaCodePrefix = areaDeptEnum.getCode();
            areDocument = new Document("deviceNo", new Document("$regex", "^" + areaCodePrefix));
        }
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("hk_snapshot_data_monitor");
        List<Document> dList2 = new ArrayList<>(2);
        if (areDocument != null){
            dList2.add(areDocument);
        }
        dList2.add(new Document("resultType", new Document("$eq", 1)));
        dList2.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        if (areDocument != null){
            dList3.add(areDocument);
        }
        dList3.add(new Document("resultType", new Document("$eq", 2)));
        dList3.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        if (areDocument != null){
            dList4.add(areDocument);
        }
        dList4.add(new Document("resultType", new Document("$eq", 3)));
        dList4.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList4);
        List<Document> dList5 = new ArrayList<>(2);
        if (areDocument != null){
            dList5.add(areDocument);
        }
        dList5.add(new Document("resultType", new Document("$eq", 4)));
        dList5.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList5);
@@ -2184,6 +2558,24 @@
        return Result.ok().data(map).total(total);
    }
    public Query buildQuery(DataCenterQuery params,List<String> likeFileds,String fileName){
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        return query;
    }
    /**
     * 车辆:点位在线率
     *
@@ -2193,7 +2585,20 @@
    @Override
    public Result vehiclePointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        Query query = null;
        SysDept sysDept = getSysDeptByLoginUser();
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept !=null){
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query = MongoUtil.getQueryDataCenter(areaDeptEnum.getCode(),params,TIME_FIELD,likeFileds,null,"no");
            }else{
                query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
            }
        }else {
            query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        }
        //查车辆设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Car + ".*"));
        //下拉框在线情况查询条件
@@ -2249,6 +2654,9 @@
        int unknownCount = 0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        if (areaDeptEnum != null){
            criteriaList.add(Criteria.where("no").regex("^" +areaDeptEnum.getCode()));
        }
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Car + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
@@ -2308,7 +2716,19 @@
    @Override
    public Result vehicleNetDeviceDirectoryConsistency(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("ip.showValue", "name.showValue", "serialNumber.showValue");
        List<Criteria> andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null);
        SysDept sysDept = getSysDeptByLoginUser();
        List<Criteria> andCriteria;
        AreaDeptEnum areaDeptEnum = null;
        if (sysDept != null) {
            areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null) {
                andCriteria = MongoUtil.getAndCriteriaDateCenter(areaDeptEnum.getCode(),params, "checkTime", likeFileds, null);
            }else {
                andCriteria = MongoUtil.getAndCriteria(params, "checkTime", likeFileds, null);
            }
        }else {
            andCriteria = MongoUtil.getAndCriteria(params, "checkTime", likeFileds, null);
        }
        // 1/2/3 视频/车辆/人脸
        Pattern pattern = Pattern.compile(".*2.*");
        andCriteria.add(Criteria.where("sxjgnlx.value").regex(pattern));
@@ -2334,13 +2754,25 @@
        //统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_monitor_qualify");
        Document areDocument = null;
        if (areaDeptEnum != null) {
            String areaCodePrefix = areaDeptEnum.getCode();
            areDocument = new Document("no", new Document("$regex", "^" + areaCodePrefix));
        }
        //总数
        List<Document> dList1 = new ArrayList<>(2);
        if (areDocument != null){
            dList1.add(areDocument);
        }
        setTag(params, dList1);
        dList1.add(new Document("sxjgnlx.value", new Document("$regex", ".*2.*")));
        Document totalFilter = new Document("$and", dList1);
        //新设备数
        List<Document> dList2 = new ArrayList<>(2);
        if (areDocument != null){
            dList2.add(areDocument);
        }
        setTag(params, dList2);
        dList2.add(new Document("sxjgnlx.value", new Document("$regex", ".*2.*")));
        dList2.add(new Document("newDevice", Boolean.TRUE));
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -27,10 +27,12 @@
import com.ycl.platform.wvp.WVPResult;
import com.ycl.system.Result;
import com.ycl.system.domain.SysConfig;
import com.ycl.system.entity.SysDept;
import com.ycl.system.entity.SysDictData;
import com.ycl.system.mapper.SysConfigMapper;
import com.ycl.system.model.LoginUser;
import com.ycl.system.page.PageUtil;
import com.ycl.system.service.ISysDeptService;
import com.ycl.task.DeleteWorkOrderImgTask;
import com.ycl.utils.DateUtils;
import com.ycl.utils.SecurityUtils;
@@ -591,6 +593,37 @@
        return Result.ok("操作成功");
    }
    @Override
    public Result ywConditionList(WorkOrderYWConditionsForm form) {
        List<WorkOrder> workOrderList = new LambdaQueryChainWrapper<>(baseMapper)
                .in(WorkOrder::getWorkOrderNo,form.getWorkOrderNumbers())
                .list();
        System.out.println("--------------");
        System.out.println(workOrderList);
        if (CollectionUtils.isEmpty(workOrderList)) {
            throw new ServiceException("工单不存在");
        }
        // 工单状态
        for (WorkOrder workOrder : workOrderList) {
            workOrder.setStatus(WorkOrderStatusEnum.YW_HANDLE);
            workOrder.setYwHandleTime(LocalDateTime.now());
        }
        baseMapper.updateMany(workOrderList);
        // 添加一条运维情况记录
        for (WorkOrder workOrder : workOrderList) {
            WorkOrderYwConditionRecord workOrderYwConditionRecord = new WorkOrderYwConditionRecord();
            workOrderYwConditionRecord.setWorkOrderNo(workOrder.getWorkOrderNo());
            workOrderYwConditionRecord.setCommitUser(SecurityUtils.getLoginUser().getUserId().intValue());
            workOrderYwConditionRecord.setYwCondition(form.getYwCondition());
            workOrderYwConditionRecord.setYwProofMaterials(form.getYwProofMaterials());
            workOrderYwConditionRecord.setSysMsg(Boolean.FALSE);
            workOrderYwConditionRecordMapper.insert(workOrderYwConditionRecord);
            WorkOrderServiceImpl self = applicationContext.getBean(WorkOrderServiceImpl.class);
            self.getImage(workOrder);
        }
        return Result.ok("操作成功");
    }
    @Async("threadPoolTaskExecutor")
    public void getImage(WorkOrder workOrder) {
        List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
@@ -756,7 +789,7 @@
    private final ISysDeptService deptService;
    /**
     * 分页查询
     *
@@ -765,6 +798,24 @@
     */
    @Override
    public Result page(WorkOrderQuery query) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysDept sysDept = null;
        Long deptId =null;
        if (loginUser.getDeptId() != null){
            deptId = loginUser.getDeptId();
            sysDept = deptService.selectDeptById(deptId);
        }
        //查询指定区数据
        // 登录账号的存在部门 不在部门内就不传值,默认查询全部
        if (sysDept !=null){
            //更具部门id获得对应枚举 部门code
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(Math.toIntExact(sysDept.getDeptId()));
            if (areaDeptEnum != null){
                query.setDept(areaDeptEnum.getCode());
            }
        }
        IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
        if (query.getUnitId() == null) {
            query.setUnitId(SecurityUtils.getUnitId());
ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
@@ -11,11 +11,15 @@
import enumeration.general.CalculateReportStatusEnum;
import enumeration.general.PublishType;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
@@ -26,6 +30,7 @@
 * @since 2024/4/28 下午 4:14
 */
@Slf4j
@Data
@Component("contractResultTask")
public class ContractResultTask {
@@ -37,6 +42,55 @@
    private String startTime;
    private String endTime;
    @Transactional
    public void contractResultTaskByDay(){
        // 查询有效期内的合同
        List<TContract> list = contractService.selectUsingContract();
        String startTime = "2025-06-17 00:00:00";
        String endTime = "2025-06-17 23:59:59";
//        getDayStartAndEnd(startTime,endTime);
        for (TContract tContract : list) {
            // 获得昨天的扣分记录
            List<ContractScore> contractScore = contractScoreService.getDateRangeScoreByContractId(tContract.getId(), startTime, endTime);
            System.out.println("打印昨日扣分记录");
            System.out.println(contractScore);
            if (CollectionUtils.isEmpty(contractScore)){
                log.error("昨日扣分记录列表为空");
                return;
            }
            // 新增考核结果
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DATE, -1);
            ContractResult contractResult = getCheckResult(tContract, contractScore);
            contractResult.setWhichMonth(calendar.get(Calendar.MONTH)+1);
            contractResult.setWhichYear(calendar.get(Calendar.YEAR));
            contractResult.setWhichDay(calendar.get(Calendar.DAY_OF_MONTH));
            checkResultService.save(contractResult);
//            // 新增考核结果记录
//            List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, contractResult);
//            checkResultService.saveBatchRecord(contractResultRecord);
            // 新增核算明细记录
            CalculateRecord calculateRecord = new CalculateRecord();
            //改为直接去查
//            calculateRecord.setScore(contractResult.getScore());
            calculateRecord.setContractId(Integer.parseInt(tContract.getId()+""));
            calculateRecord.setCreateTime(new Date());
            calculateRecord.setUpdateTime(new Date());
            calculateRecord.setStatus(PublishType.UNPUBLISHED.getCode());
            calculateRecord.setWhichYear(calendar.get(Calendar.YEAR));
            calculateRecord.setWhichMonth(calendar.get(Calendar.MONTH)+1);
            calculateRecord.setWhichDay(calendar.get(Calendar.DAY_OF_MONTH));
            System.out.println("新增核算记录");
            System.out.println(calculateRecord);
            calculateRecordMapper.insert(calculateRecord);
        }
    }
    /**
     * 每个月1号执行,统计考核结果
     */
@@ -124,5 +178,19 @@
        this.startTime = firstDay;
        this.endTime = lastDay;
    }
    /**
    * 获取今天的开始时间与结束时间
    * */
    public void getDayStartAndEnd(String startTime,String endTime) {
        LocalDate today = LocalDate.now().minusDays(1);
        LocalDateTime startOfDay = today.atStartOfDay(); // 00:00:00
        LocalDateTime endOfDay = today.atTime(LocalTime.MAX); // 23:59:59.999999999
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        startTime = startOfDay.format(formatter);
        endTime = endOfDay.format(formatter);
    }
}
ycl-server/src/main/java/com/ycl/task/WorkOrderTask.java
@@ -92,6 +92,7 @@
        Date startDate = DateUtils.getDayStart(now);
        Date endDate = DateUtils.getDayEnd(now);
        //获得今日工单
        //不仅获得今日工单 而是获得所有工单
        List<WorkOrderVO> list = workOrderService.distributeList();
        log.error("获得工单:{}",list);
        List<String> workOrderNos = new ArrayList<>();
ycl-server/src/main/java/com/ycl/utils/MongoUtil.java
@@ -102,6 +102,83 @@
        return Query.query(and);
    }
    public static Query getQueryDataCenter(String deptCode, DataCenterQuery params, String timeFiled, List<String> likeFileds, Integer dataAuth,String fieldName) {
        // 关键字模糊查询条件
        List<Criteria> likeList = null;
        if (StringUtils.hasText(params.getKeyword()) && !CollectionUtils.isEmpty(likeFileds)) {
            // 转义特殊字符
            String keyword = Pattern.quote(params.getKeyword());
            likeList = likeFileds.stream()
                    .map(filed -> Criteria.where(filed).regex(".*?" + keyword + ".*"))
                    .collect(Collectors.toList());
        }
        // 将模糊查询字段用OR连接
        Criteria or = null;
        if (!CollectionUtils.isEmpty(likeList)) {
            or = new Criteria();
            or.orOperator(likeList);
        }
        // 数据权限标签条件
        Criteria tag = null;
        if (Objects.nonNull(dataAuth)) {
            switch (dataAuth) {
                case 1: tag = Criteria.where("deptTag").is(Boolean.TRUE); break;
                case 2: tag = Criteria.where("provinceTag").is(Boolean.TRUE); break;
                case 3: tag = Criteria.where("importantTag").is(Boolean.TRUE); break;
                case 4: tag = Criteria.where("importantCommandImageTag").is(Boolean.TRUE); break;
                case 5: tag = Criteria.where("newDevice").is(Boolean.TRUE); break;
                default: break;
            }
        }
        // 时间范围条件
        Criteria time = Criteria.where(timeFiled).gte(params.getStartTime()).lte(params.getEndTime());
        // 数据类型条件
        Criteria dType = null;
        if (params.getDataType().equals(1)) {
            dType = Criteria.where("provinceTag").is(Boolean.TRUE);
        } else if(params.getDataType().equals(2)) {
            dType = Criteria.where("deptTag").is(Boolean.TRUE);
        }
        Criteria noStartsWithDept = null;
        if("no".equals(fieldName)){
            // 新增:no字段以deptCode开头的条件
            if (StringUtils.hasText(deptCode)) {
                // 使用正则表达式匹配开头,并转义特殊字符
                noStartsWithDept = Criteria.where("no").regex("^" + Pattern.quote(deptCode));
            }
        }else if ("deviceNo".equals(fieldName)){
            // 新增:no字段以deptCode开头的条件
            if (StringUtils.hasText(deptCode)) {
                // 使用正则表达式匹配开头,并转义特殊字符
                noStartsWithDept = Criteria.where("deviceNo").regex("^" + Pattern.quote(deptCode));
            }
        }
        // 将所有条件用AND连接
        Criteria and = new Criteria();
        List<Criteria> criteriaList = new ArrayList<>();
        criteriaList.add(time);  // 时间条件必须存在
        // 可选条件
        if (Objects.nonNull(tag)) criteriaList.add(tag);
        if (Objects.nonNull(or)) criteriaList.add(or);
        if (Objects.nonNull(dType)) criteriaList.add(dType);
        if (Objects.nonNull(noStartsWithDept)) criteriaList.add(noStartsWithDept);  // 新增条件
        and.andOperator(criteriaList);
        return Query.query(and);
    }
    /**
     * 构造数据中心搜索的条件
     *
@@ -201,4 +278,80 @@
        return qList;
    }
    public static List<Criteria> getAndCriteriaDateCenter(String deptCode,DataCenterQuery params, String timeFiled, List<String> likeFileds, Integer dataAuth) {
        // 关键字
        List<Criteria> likeList = null;
        if (StringUtils.hasText(params.getKeyword()) && !CollectionUtils.isEmpty(likeFileds)) {
            // 转义
            String keyword = Pattern.quote(params.getKeyword());
            likeList = likeFileds.stream().map(filed -> {
                return Criteria.where(filed).regex(".*?" + keyword + ".*");
            }).collect(Collectors.toList());
        }
        // 将like字段or起来
        Criteria or = null;
        if (! CollectionUtils.isEmpty(likeList)) {
            or = new Criteria();
            or.orOperator(likeList);
        }
        Criteria tag = null;
        // in
        if (Objects.nonNull(dataAuth)) {
            switch (dataAuth) {
                case 1:
                    tag = Criteria.where("deptTag").is(Boolean.TRUE);
                    break;
                case 2:
                    tag = Criteria.where("provinceTag").is(Boolean.TRUE);
                    break;
                case 3:
                    tag = Criteria.where("importantTag").is(Boolean.TRUE);
                    break;
                case 4:
                    tag = Criteria.where("importantCommandImageTag").is(Boolean.TRUE);
                    break;
                case 5:
                    tag = Criteria.where("newDevice").is(Boolean.TRUE);
                    break;
                default:
                    break;
            }
        }
        // 时间
        Criteria time = Criteria.where(timeFiled).gte(params.getStartTime()).lte(params.getEndTime());
        // 数据类型
        Criteria dType = null;
        if (params.getDataType().equals(1)) {
            dType = Criteria.where("provinceTag").is(Boolean.TRUE);
        }else if(params.getDataType().equals(2)){
            dType = Criteria.where("deptTag").is(Boolean.TRUE);
        }
        // 新增:no字段以deptCode开头的条件
        Criteria noStartsWithDept = null;
        if (StringUtils.hasText(deptCode)) {
            // 使用正则表达式匹配开头,并转义特殊字符
            noStartsWithDept = Criteria.where("deviceNo").regex("^" + Pattern.quote(deptCode));
        }
        List<Criteria> qList = new ArrayList<>(4);
        qList.add(time);
        if (Objects.nonNull(tag)) {
            qList.add(tag);
        }
        if (Objects.nonNull(or)) {
            qList.add(or);
        }
        if (Objects.nonNull(dType)) {
            qList.add(dType);
        }
        if (Objects.nonNull(noStartsWithDept)) qList.add(noStartsWithDept);
        // 返回查询
        return qList;
    }
}
ycl-server/src/main/resources/application.yml
@@ -85,6 +85,8 @@
  level:
    org.springframework: warn
    com.ycl : debug
    com.ycl.feign: DEBUG
# security配置
security:
ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
@@ -53,6 +53,8 @@
        tc.name as contractName,
        tcr.which_year,
        tcr.which_month,
        tcr.which_day,
        MAX(tcr.which_day) AS latest_day,
        SUM(tcr.deduct_money) AS deductMoney,
        MAX(tcr.which_month) AS latest_month,
        (
@@ -73,7 +75,7 @@
                AND tcr.status = #{query.status}
            </if>
        </where>
        group by contract_id,which_year
        group by contract_id, which_year,which_month
    </select>
    <resultMap id="DetailResultMap" type="com.ycl.platform.domain.vo.CalculateReportDetailVO">
        <result column="id" property="id"/>
@@ -83,10 +85,11 @@
        <result column="name" property="contractName"/>
        <result column="contract_id" property="contractId"/>
        <result column="which_year" property="whichYear"/>
        <result column="which_month" property="whichMonth"/>
        <result column="status" property="status"/>
        <collection property="ruleList" column="contract_id" ofType="com.ycl.platform.domain.vo.CalculateMoneyRuleVO"
                    select="selectRuleByContractId"/>
        <collection property="recordList" column="{contractId=contract_id, whichYear=which_year,status=status}" ofType="com.ycl.platform.domain.vo.CalculateRecordVO"
        <collection property="recordList" column="{contractId=contract_id, whichYear=which_year,status=status,whichMonth=which_month}" ofType="com.ycl.platform.domain.vo.CalculateRecordVO"
                    select="selectRecordByContractId"/>
    </resultMap>
@@ -107,6 +110,7 @@
        tcr.deduct_money as deductMoney,
        tcr.which_year as whichYear,
        tcr.which_month as whichMonth,
        tcr.which_day as whichDay,
        tcr.status
        FROM
        t_calculate_record tcr
@@ -117,7 +121,7 @@
                   AND MONTH(tcs.create_time) = tcr.which_month
                   AND tcs.auditing_status = 'PASS'
        <where>
            tcr.contract_id = #{contractId} AND tcr.which_year = #{whichYear} AND tcr.deleted = 0
            tcr.contract_id = #{contractId} AND tcr.which_year = #{whichYear} AND tcr.deleted = 0 AND tcr.which_month=#{whichMonth}
            <if test="status!=null">
                AND tcr.status=#{status}
            </if>
@@ -136,12 +140,13 @@
        tcr.create_time,
        tcr.update_time,
        tcr.which_year,
        tcr.which_month,
        #{query.status} as status
        FROM t_calculate_record tcr
        INNER JOIN t_contract tc ON tcr.contract_id = tc.id
        INNER JOIN t_yw_unit tyu ON tyu.id = tc.unit_id
        <where>
            tcr.contract_id = #{query.contractId} AND tcr.which_year = #{query.whichYear}
            tcr.contract_id = #{query.contractId} AND tcr.which_year = #{query.whichYear} AND tcr.which_month = #{query.whichMonth}
        </where>
        limit 1
    </select>
@@ -166,6 +171,9 @@
            <if test="whichYear!=null">
                and tcr.which_year = #{whichYear}
            </if>
            <if test="whichDay!=null">
                and tcr.which_day = #{whichDay}
            </if>
        </where>
        GROUP BY a.id
    </select>
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -88,6 +88,9 @@
        <if test="query.start != null and query.end != null">
            AND wo.create_time BETWEEN #{query.start} AND #{query.end}
        </if>
        <if test="query.dept != null and query.dept != ''">
            AND wo.serial_number LIKE CONCAT(#{query.dept}, '%')
        </if>
        GROUP BY
        wo.id, wo.status, wo.work_order_no, wo.serial_number,wo.create_time, wo.unit_id, wo.yw_people_id,tm.name, wo.yw_handle_time, wo.yw_result, wo.yw_check_result, wo.overtime, wo.deduct,
        u.unit_name,