yang_shj
1 year ago
52 changed files with 2441 additions and 125 deletions
@ -0,0 +1,17 @@
|
||||
package com.hnac.hzims.scheduled.mapper.equipment; |
||||
|
||||
|
||||
import com.hnac.hzims.equipment.entity.PlanGenerationEntity; |
||||
import org.apache.ibatis.annotations.Param; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface PlanMapper extends UserDataScopeBaseMapper<PlanGenerationEntity> { |
||||
|
||||
// 查询计划发电量
|
||||
List<PlanGenerationEntity> planGeneration(@Param("stationIds") List<String> stationIds, @Param("deptIds") List<String> deptIds, @Param("date") String date); |
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.mapper.operation; |
||||
|
||||
import com.hnac.hzims.operational.access.entity.OperAccessTaskEntity; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface AccessMapper extends UserDataScopeBaseMapper<OperAccessTaskEntity> { |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
package com.hnac.hzims.scheduled.mapper.operation; |
||||
|
||||
import com.hnac.hzims.operational.defect.entity.OperDefectEntity; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface DefectMapper extends UserDataScopeBaseMapper<OperDefectEntity> { |
||||
|
||||
|
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.mapper.operation; |
||||
|
||||
import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface MaintenanceMapper extends UserDataScopeBaseMapper<OperMaintenanceTaskEntity> { |
||||
|
||||
} |
@ -1,8 +1,11 @@
|
||||
package com.hnac.hzims.operational.fill.mapper; |
||||
package com.hnac.hzims.scheduled.mapper.operation; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OtherEntity; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface OtherMapper extends UserDataScopeBaseMapper<OtherEntity> { |
||||
|
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.mapper.operation; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OverDetailsEntity; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface OverDetailsMapper extends UserDataScopeBaseMapper<OverDetailsEntity> { |
||||
|
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.mapper.operation; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OverEntity; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface OverMapper extends UserDataScopeBaseMapper<OverEntity> { |
||||
|
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.mapper.operation; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.SolveEntity; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface SolveMapper extends UserDataScopeBaseMapper<SolveEntity> { |
||||
|
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.mapper.ticket; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.hnac.hzims.ticket.allTicket.entity.TicketInfoEvaluateEntity; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface TicketEvaluateMapper extends BaseMapper<TicketInfoEvaluateEntity> { |
||||
|
||||
} |
@ -0,0 +1,13 @@
|
||||
package com.hnac.hzims.scheduled.mapper.ticket; |
||||
|
||||
import com.hnac.hzims.ticket.standardTicket.entity.StandardTicketInfoEntity; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Mapper |
||||
public interface TicketMapper extends UserDataScopeBaseMapper<StandardTicketInfoEntity> { |
||||
|
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.hnac.hzims.scheduled.mapper.ticket; |
||||
|
||||
import com.hnac.hzims.ticket.workTicket.entity.WorkTicketInfoEntity; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Mapper |
||||
public interface WorkTicketMapper extends UserDataScopeBaseMapper<WorkTicketInfoEntity> { |
||||
|
||||
|
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.hnac.hzims.scheduled.service.equipment; |
||||
|
||||
import com.hnac.hzims.equipment.entity.PlanGenerationEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface PlanService extends BaseService<PlanGenerationEntity> { |
||||
|
||||
|
||||
// 查询计划发电量
|
||||
List<PlanGenerationEntity> planGeneration(List<String> stationIds, List<String> deptIds, String date); |
||||
} |
@ -0,0 +1,33 @@
|
||||
package com.hnac.hzims.scheduled.service.equipment.impl; |
||||
|
||||
import com.hnac.hzims.equipment.entity.PlanGenerationEntity; |
||||
import com.hnac.hzims.scheduled.mapper.equipment.PlanMapper; |
||||
import com.hnac.hzims.scheduled.service.equipment.PlanService; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@Slf4j |
||||
@AllArgsConstructor |
||||
public class PlanServiceImpl extends BaseServiceImpl<PlanMapper, PlanGenerationEntity> implements PlanService { |
||||
|
||||
|
||||
/** |
||||
* 查询计划发电量 |
||||
* @param stationIds |
||||
* @param deptIds |
||||
* @param date |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public List<PlanGenerationEntity> planGeneration(List<String> stationIds, List<String> deptIds, String date) { |
||||
return this.baseMapper.planGeneration(stationIds,deptIds,date); |
||||
} |
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.hnac.hzims.scheduled.service.operation; |
||||
|
||||
import com.hnac.hzims.operational.access.entity.OperAccessTaskEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface AccessService extends BaseService<OperAccessTaskEntity> { |
||||
|
||||
double accessCount(List<Long> areas); |
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.hnac.hzims.scheduled.service.operation; |
||||
|
||||
import com.hnac.hzims.operational.defect.entity.OperDefectEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author Lch |
||||
*/ |
||||
public interface DefectService extends BaseService<OperDefectEntity> { |
||||
|
||||
Double defectCount(List<Long> areas); |
||||
} |
@ -0,0 +1,15 @@
|
||||
package com.hnac.hzims.scheduled.service.operation; |
||||
|
||||
import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface MaintenanceService extends BaseService<OperMaintenanceTaskEntity> { |
||||
|
||||
// 查询当年日常维护数量
|
||||
Integer maintenanceCount(List<Long> departList); |
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.service.operation; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OtherEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface OtherService extends BaseService<OtherEntity> { |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
package com.hnac.hzims.scheduled.service.operation; |
||||
|
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OverDetailsEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface OverDetailsService extends BaseService<OverDetailsEntity> { |
||||
|
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.service.operation; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OverEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface OverService extends BaseService<OverEntity> { |
||||
|
||||
} |
@ -0,0 +1,9 @@
|
||||
package com.hnac.hzims.scheduled.service.operation; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface ShowService { |
||||
|
||||
void loadHomeTarget(String param); |
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.service.operation; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.SolveEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface SolveService extends BaseService<SolveEntity> { |
||||
|
||||
} |
@ -0,0 +1,51 @@
|
||||
package com.hnac.hzims.scheduled.service.operation.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.hnac.hzims.operational.access.entity.OperAccessTaskEntity; |
||||
import com.hnac.hzims.scheduled.mapper.operation.AccessMapper; |
||||
import com.hnac.hzims.scheduled.service.operation.AccessService; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springblade.core.tool.utils.CollectionUtil; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import java.time.LocalTime; |
||||
import java.util.List; |
||||
|
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@Slf4j |
||||
@AllArgsConstructor |
||||
public class AccessServiceImpl extends BaseServiceImpl<AccessMapper, OperAccessTaskEntity> implements AccessService { |
||||
|
||||
/** |
||||
* 查询当年检修任务数量 |
||||
* @param areas |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public double accessCount(List<Long> areas) { |
||||
if(CollectionUtil.isEmpty(areas)) { |
||||
return 0; |
||||
} |
||||
LocalDate firstDay = LocalDate.now().withDayOfYear(1); |
||||
LocalDateTime firstDateTime = LocalDateTime.of(firstDay, LocalTime.MIN); |
||||
LocalDateTime now = LocalDateTime.now(); |
||||
//日常维护
|
||||
List<OperAccessTaskEntity> accesss = this.list(new LambdaQueryWrapper<OperAccessTaskEntity>(){{ |
||||
ge(OperAccessTaskEntity::getPlanStartTime,firstDateTime); |
||||
le(OperAccessTaskEntity::getPlanStartTime,now); |
||||
in(OperAccessTaskEntity::getCreateDept,areas); |
||||
}}); |
||||
if(CollectionUtil.isEmpty(accesss)){ |
||||
return 0; |
||||
} |
||||
return accesss.size(); |
||||
} |
||||
} |
@ -0,0 +1,55 @@
|
||||
package com.hnac.hzims.scheduled.service.operation.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.hnac.hzims.operational.defect.entity.OperDefectEntity; |
||||
import com.hnac.hzims.scheduled.mapper.operation.DefectMapper; |
||||
import com.hnac.hzims.scheduled.service.operation.DefectService; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springblade.core.tool.utils.CollectionUtil; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import java.time.LocalTime; |
||||
import java.util.List; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@AllArgsConstructor |
||||
public class DefectServiceImpl extends BaseServiceImpl<DefectMapper, OperDefectEntity> implements DefectService { |
||||
|
||||
/** |
||||
* 获取消缺率 |
||||
* @param areas |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public Double defectCount(List<Long> areas) { |
||||
if(CollectionUtil.isEmpty(areas)) { |
||||
return 100.00; |
||||
} |
||||
LocalDate firstDay = LocalDate.now().withDayOfYear(1); |
||||
LocalDateTime firstDateTime = LocalDateTime.of(firstDay, LocalTime.MIN); |
||||
LocalDateTime now = LocalDateTime.now(); |
||||
List<OperDefectEntity> pTaskList = this.list(new LambdaQueryWrapper<OperDefectEntity>(){{ |
||||
ge(OperDefectEntity::getCreateTime,firstDateTime); |
||||
le(OperDefectEntity::getCreateTime,now); |
||||
in(OperDefectEntity::getCreateDept,areas); |
||||
}}); |
||||
if(CollectionUtil.isEmpty(pTaskList)){ |
||||
return 0.0; |
||||
} |
||||
// 缺陷处理完成数
|
||||
List<OperDefectEntity> finishTask = pTaskList.stream().filter(defect -> "1".equals(defect.getHandleStatus())).collect(Collectors.toList()); |
||||
if(CollectionUtil.isEmpty(finishTask)){ |
||||
return 0.0; |
||||
} |
||||
// 消缺率 = (缺陷数 / 总数) * 100
|
||||
return BigDecimal.valueOf(finishTask.size() / (double) pTaskList.size() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
package com.hnac.hzims.scheduled.service.operation.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity; |
||||
import com.hnac.hzims.scheduled.mapper.operation.MaintenanceMapper; |
||||
import com.hnac.hzims.scheduled.service.operation.MaintenanceService; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springblade.core.tool.utils.CollectionUtil; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import java.time.LocalTime; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@RequiredArgsConstructor |
||||
@Slf4j |
||||
public class MaintenanceServiceImpl extends BaseServiceImpl<MaintenanceMapper, OperMaintenanceTaskEntity> implements MaintenanceService { |
||||
|
||||
/** |
||||
* 获取日常维护数量 |
||||
* @param departList |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public Integer maintenanceCount(List<Long> departList) { |
||||
if(CollectionUtil.isEmpty(departList)){ |
||||
return 0; |
||||
} |
||||
LocalDate firstDay = LocalDate.now().withDayOfYear(1); |
||||
LocalDateTime firstDateTime = LocalDateTime.of(firstDay, LocalTime.MIN); |
||||
LocalDateTime now = LocalDateTime.now(); |
||||
//日常维护
|
||||
List<OperMaintenanceTaskEntity> mTaskList = this.list(new LambdaQueryWrapper<OperMaintenanceTaskEntity>(){{ |
||||
ge(OperMaintenanceTaskEntity::getDisposeTime,firstDateTime); |
||||
le(OperMaintenanceTaskEntity::getDisposeTime,now); |
||||
in(OperMaintenanceTaskEntity::getCreateDept,departList); |
||||
}}); |
||||
if(CollectionUtil.isEmpty(mTaskList)){ |
||||
return 0; |
||||
} |
||||
return mTaskList.size(); |
||||
} |
||||
} |
@ -0,0 +1,19 @@
|
||||
package com.hnac.hzims.scheduled.service.operation.impl; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OtherEntity; |
||||
import com.hnac.hzims.scheduled.mapper.operation.OtherMapper; |
||||
import com.hnac.hzims.scheduled.service.operation.OtherService; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Slf4j |
||||
@Service |
||||
@AllArgsConstructor |
||||
public class OtherServiceImpl extends BaseServiceImpl<OtherMapper, OtherEntity> implements OtherService { |
||||
|
||||
} |
@ -0,0 +1,19 @@
|
||||
package com.hnac.hzims.scheduled.service.operation.impl; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OverDetailsEntity; |
||||
import com.hnac.hzims.scheduled.mapper.operation.OverDetailsMapper; |
||||
import com.hnac.hzims.scheduled.service.operation.OverDetailsService; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Slf4j |
||||
@Service |
||||
@AllArgsConstructor |
||||
public class OverDetailsServiceImpl extends BaseServiceImpl<OverDetailsMapper, OverDetailsEntity> implements OverDetailsService { |
||||
|
||||
} |
@ -0,0 +1,19 @@
|
||||
package com.hnac.hzims.scheduled.service.operation.impl; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.OverEntity; |
||||
import com.hnac.hzims.scheduled.mapper.operation.OverMapper; |
||||
import com.hnac.hzims.scheduled.service.operation.OverService; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Slf4j |
||||
@Service |
||||
@AllArgsConstructor |
||||
public class OverServiceImpl extends BaseServiceImpl<OverMapper, OverEntity> implements OverService { |
||||
|
||||
} |
@ -0,0 +1,480 @@
|
||||
package com.hnac.hzims.scheduled.service.operation.impl; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder; |
||||
import com.hnac.hzims.equipment.entity.PlanGenerationEntity; |
||||
import com.hnac.hzims.operational.fill.entity.*; |
||||
import com.hnac.hzims.operational.main.constant.HomePageConstant; |
||||
import com.hnac.hzims.operational.main.vo.*; |
||||
import com.hnac.hzims.operational.station.entity.StationEntity; |
||||
import com.hnac.hzims.scheduled.service.equipment.PlanService; |
||||
import com.hnac.hzims.scheduled.service.operation.*; |
||||
import com.hnac.hzims.scheduled.service.ticket.TicketService; |
||||
import com.hnac.hzims.ticket.allTicket.vo.DoublePassRateVO; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.core.tool.utils.CollectionUtil; |
||||
import org.springblade.core.tool.utils.DateUtil; |
||||
import org.springblade.core.tool.utils.ObjectUtil; |
||||
import org.springblade.core.tool.utils.StringUtil; |
||||
import org.springblade.system.cache.DictCache; |
||||
import org.springblade.system.entity.Dept; |
||||
import org.springblade.system.feign.ISysClient; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.data.redis.core.RedisTemplate; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.io.BufferedReader; |
||||
import java.io.IOException; |
||||
import java.io.InputStream; |
||||
import java.io.InputStreamReader; |
||||
import java.math.BigDecimal; |
||||
import java.net.HttpURLConnection; |
||||
import java.net.URL; |
||||
import java.nio.charset.StandardCharsets; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import java.time.LocalTime; |
||||
import java.util.Date; |
||||
import java.util.List; |
||||
import java.util.concurrent.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@RequiredArgsConstructor |
||||
@Slf4j |
||||
public class ShowServiceImpl implements ShowService { |
||||
|
||||
private final OverService overService; |
||||
private final PlanService planService; |
||||
private final PowerService powerService; |
||||
private final SolveService solveService; |
||||
private final OtherService otherService; |
||||
private final AccessService accessService; |
||||
private final TicketService ticketService; |
||||
private final DefectService defectService; |
||||
private final StationService stationService; |
||||
private final OverDetailsService detailsService; |
||||
private final MaintenanceService maintenanceService; |
||||
private final RedisTemplate redisTemplate; |
||||
private final ISysClient sysClient; |
||||
|
||||
|
||||
private final static String charge = "hzims:operation:key:charge"; |
||||
private final static String home_target_cache_final = "load:operation:home:target:key"; |
||||
private final static String hydropower_real_cache_final = "hzims:operation:loadhydropowerunit:real:key"; |
||||
private final static String hydropower_target_cache_final = "hzims:operation:loadhydropowerunit:target:key"; |
||||
private final static String photovoltaic_real_cache_final = "hzims:operation:photovoltaic:real:key"; |
||||
private final static String photovoltaic_target_cache_final = "hzims:operation:photovoltaic:target:key"; |
||||
|
||||
@Value("${hzims.operation.homePage.charge.url}") |
||||
public String charge_url; |
||||
|
||||
/** |
||||
* 集团总指标-首页数据 |
||||
*/ |
||||
@Override |
||||
public void loadHomeTarget(String param) { |
||||
List<TargetVo> targets = HomePageConstant.HOME_TYPES.stream().map(type->{ |
||||
if(type == 0) { |
||||
return this.hydropowerTaget(); |
||||
} |
||||
if (type == 1) { |
||||
return this.windTaget(); |
||||
} |
||||
if (type == 2) { |
||||
return this.waterStorageTaget(true); |
||||
} |
||||
if (type == 3) { |
||||
return this.waterStorageTaget(false); |
||||
} |
||||
if (type == 4) { |
||||
return this.networkTaget(); |
||||
} |
||||
if (type == 5) { |
||||
return this.photovoltaicTaget(); |
||||
} |
||||
if (type == 6) { |
||||
return this.affairsTaget(); |
||||
} |
||||
if(type == 7) { |
||||
return this.chargeTarget(); |
||||
} |
||||
return new TargetVo(); |
||||
}).collect(Collectors.toList()); |
||||
redisTemplate.opsForValue().set(home_target_cache_final,targets.stream().filter(( target -> ObjectUtil.isNotEmpty(target.getType()))).collect(Collectors.toList())); |
||||
} |
||||
|
||||
/** |
||||
* 水电站指标 |
||||
* @return |
||||
*/ |
||||
private TargetVo hydropowerTaget() { |
||||
TargetVo target = new TargetVo(); |
||||
target.setType(HomePageConstant.HYDROPOWER); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.HYDROPOWER)); |
||||
// 实时数据
|
||||
List<HydropowerUnitRealVo> reals = (List<HydropowerUnitRealVo>) redisTemplate.opsForValue().get(hydropower_real_cache_final); |
||||
// 指标数据
|
||||
List<HydropowerUnitTargetVo> targets = (List<HydropowerUnitTargetVo>) redisTemplate.opsForValue().get(hydropower_target_cache_final); |
||||
if(CollectionUtil.isNotEmpty(reals)){ |
||||
// 装机容量
|
||||
target.setTaget_one(reals.stream().mapToDouble(HydropowerUnitRealVo::getInstalledCapacity).sum()); |
||||
} |
||||
if(CollectionUtil.isNotEmpty(targets)){ |
||||
// 发电量
|
||||
target.setTaget_two(targets.stream().mapToDouble(HydropowerUnitTargetVo::getPowerYear).sum()); |
||||
} |
||||
// 计划发电量
|
||||
List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery() |
||||
.eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE) |
||||
.eq(StationEntity::getType,HomePageConstant.HYDROPOWER)); |
||||
if(CollectionUtil.isNotEmpty(stations)){ |
||||
List<PlanGenerationEntity> plans = planService.planGeneration(stations.stream().map(StationEntity::getCode).collect(Collectors.toList()), null, DateUtil.format(new Date(), "yyyy")); |
||||
if(CollectionUtil.isNotEmpty(plans)){ |
||||
double plan = plans.stream().mapToDouble(PlanGenerationEntity::getPlanGeneration).sum(); |
||||
if(Math.abs(plan) > 0){ |
||||
target.setTaget_three(BigDecimal.valueOf(target.getTaget_two() / plan * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); |
||||
} |
||||
} |
||||
} |
||||
// 双票合格率
|
||||
R<List<Dept>> result = sysClient.getDeptList(); |
||||
if(result.isSuccess() && CollectionUtil.isNotEmpty(result.getData()) && CollectionUtil.isNotEmpty(stations)){ |
||||
List<Long> areas = result.getData().stream().filter(dept -> stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(dept.getId())).map(Dept::getParentId).collect(Collectors.toList()); |
||||
if(CollectionUtil.isNotEmpty(areas)){ |
||||
LocalDateTime firstDateTime = LocalDateTime.of(LocalDate.now().withDayOfYear(1), LocalTime.MIN); |
||||
DoublePassRateVO pass = ticketService.doublePassRate(areas, firstDateTime, LocalDateTime.now()); |
||||
if(ObjectUtil.isNotEmpty(pass)){ |
||||
target.setTaget_four(Double.valueOf(pass.getDoublePassRate())); |
||||
} |
||||
} |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
/** |
||||
* 风电指标 |
||||
* @return |
||||
*/ |
||||
private TargetVo windTaget() { |
||||
TargetVo target = new TargetVo(); |
||||
target.setType(HomePageConstant.WIND_POWER); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.WIND_POWER)); |
||||
// 填报发电量
|
||||
List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery() |
||||
.eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE) |
||||
.eq(StationEntity::getType,HomePageConstant.WIND_POWER)); |
||||
if(CollectionUtil.isEmpty(stations)){ |
||||
return target; |
||||
} |
||||
QueryWrapper<PowerEntity> queryWrapper = new QueryWrapper<PowerEntity>() {{ |
||||
in("create_dept", stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList())); |
||||
eq("type", HomePageConstant.WIND_POWER_TYPE); |
||||
likeRight("mon", DateUtil.format(new Date(),"yyyy")); |
||||
}}; |
||||
List<PowerEntity> list = powerService.list(queryWrapper); |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return target; |
||||
} |
||||
double plan = list.stream().mapToDouble(PowerEntity::getPlannedPowerMon).sum(); |
||||
double pass = list.stream().mapToDouble(power -> Double.parseDouble(power.getDoubleQualifyRate())).sum(); |
||||
// 装机容量
|
||||
target.setTaget_one(list.stream().map(PowerEntity::getInstalledCapacity).collect(Collectors.toSet()).stream().mapToDouble(Double::valueOf).sum()); |
||||
// 发电量
|
||||
target.setTaget_two(list.stream().mapToDouble(PowerEntity::getPowerMon).sum()); |
||||
if(Math.abs(plan) > 0){ |
||||
// 发电完成率
|
||||
target.setTaget_three(BigDecimal.valueOf(target.getTaget_two() / plan * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); |
||||
} |
||||
// 双票合格率
|
||||
target.setTaget_four(BigDecimal.valueOf(pass / list.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); |
||||
return target; |
||||
} |
||||
|
||||
/** |
||||
* 储能指标 |
||||
* @param flag : true - 水利 false - 储能 |
||||
* @return |
||||
*/ |
||||
private TargetVo waterStorageTaget(boolean flag) { |
||||
TargetVo target = new TargetVo(); |
||||
if(flag){ |
||||
target.setType(HomePageConstant.WATER_CONSERVANCY); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.WATER_CONSERVANCY)); |
||||
}else{ |
||||
target.setType(HomePageConstant.ENERGY_STORAGE); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.ENERGY_STORAGE)); |
||||
} |
||||
// 查询储能站点
|
||||
LambdaQueryWrapper<StationEntity> wrapper = new LambdaQueryWrapper<>(); |
||||
wrapper.eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE); |
||||
if(flag){ |
||||
wrapper.eq(StationEntity::getType,HomePageConstant.WATER_CONSERVANCY); |
||||
}else{ |
||||
wrapper.eq(StationEntity::getType,HomePageConstant.ENERGY_STORAGE); |
||||
} |
||||
List<StationEntity> stations = stationService.list(wrapper); |
||||
if(CollectionUtil.isEmpty(stations)){ |
||||
return target; |
||||
} |
||||
// 获取储能区域级别机构
|
||||
R<List<Dept>> result = sysClient.getDeptList(); |
||||
if(result.isSuccess() && CollectionUtil.isNotEmpty(result.getData()) && CollectionUtil.isNotEmpty(stations)){ |
||||
List<Long> areas = result.getData().stream().filter(dept -> stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(dept.getId())).map(Dept::getParentId).collect(Collectors.toList()); |
||||
if(CollectionUtil.isNotEmpty(areas)){ |
||||
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("storage-taget-pool-%d").build(); |
||||
ScheduledExecutorService exe = new ScheduledThreadPoolExecutor(4, namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); |
||||
// 监控线程执行完后返回结果
|
||||
CountDownLatch countDownLatch = new CountDownLatch(4); |
||||
// 日常维护
|
||||
exe.execute(() -> { |
||||
target.setTaget_one(Double.valueOf(maintenanceService.maintenanceCount(areas))); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 检修任务
|
||||
exe.execute(() -> { |
||||
target.setTaget_two(accessService.accessCount(areas)); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 消缺率
|
||||
exe.execute(() -> { |
||||
target.setTaget_three(defectService.defectCount(areas)); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 双票合格率
|
||||
exe.execute(() -> { |
||||
LocalDate firstDay = LocalDate.now().withDayOfYear(1); |
||||
LocalDateTime firstDateTime = LocalDateTime.of(firstDay, LocalTime.MIN); |
||||
DoublePassRateVO pass = ticketService.doublePassRate(areas, firstDateTime, LocalDateTime.now()); |
||||
if (ObjectUtil.isNotEmpty(pass)) { |
||||
target.setTaget_four(Double.valueOf(pass.getDoublePassRate())); |
||||
} |
||||
countDownLatch.countDown(); |
||||
}); |
||||
try { |
||||
countDownLatch.await(); |
||||
} catch (InterruptedException e) { |
||||
e.printStackTrace(); |
||||
Thread.currentThread().interrupt(); |
||||
} |
||||
exe.shutdown(); |
||||
} |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
/** |
||||
* 配网 |
||||
* @return |
||||
*/ |
||||
private TargetVo networkTaget() { |
||||
TargetVo target = new TargetVo(); |
||||
target.setType(HomePageConstant.DISTRIBUTION_NETWORK); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.DISTRIBUTION_NETWORK)); |
||||
// 线程池
|
||||
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("network-taget-pool-%d").build(); |
||||
ScheduledExecutorService exe = new ScheduledThreadPoolExecutor(3, namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); |
||||
// 监控线程执行完后返回结果
|
||||
CountDownLatch countDownLatch = new CountDownLatch(3); |
||||
// 当月
|
||||
LocalDate firstDay = LocalDate.now().withDayOfYear(1); |
||||
LocalDateTime firstDateTime = LocalDateTime.of(firstDay, LocalTime.MIN); |
||||
// 检修卡
|
||||
exe.execute(()->{ |
||||
List<OverEntity> overs = overService.list(new QueryWrapper<OverEntity>() {{ |
||||
ge("create_time", firstDateTime); |
||||
le("create_time", LocalDateTime.now()); |
||||
}}); |
||||
if(CollectionUtil.isEmpty(overs)){ |
||||
countDownLatch.countDown(); |
||||
return; |
||||
} |
||||
List<OverDetailsEntity> details = detailsService.list(new QueryWrapper<OverDetailsEntity>() {{ |
||||
ge("create_time", firstDateTime); |
||||
le("create_time", LocalDateTime.now()); |
||||
in("over_id",overs.stream().map(OverEntity::getId).collect(Collectors.toList())); |
||||
}}); |
||||
if(CollectionUtil.isEmpty(details)){ |
||||
countDownLatch.countDown(); |
||||
return; |
||||
} |
||||
target.setTaget_one(details.stream().mapToDouble(OverDetailsEntity::getQuantity).sum()); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 消缺
|
||||
exe.execute(()->{ |
||||
List<SolveEntity> solves = solveService.list(new QueryWrapper<SolveEntity>() {{ |
||||
ge("create_time", firstDateTime); |
||||
le("create_time", LocalDateTime.now()); |
||||
}}); |
||||
if(CollectionUtil.isEmpty(solves)){ |
||||
countDownLatch.countDown(); |
||||
return; |
||||
} |
||||
target.setTaget_two(solves.stream().mapToDouble(SolveEntity::getSolveQuantity).sum()); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 其他
|
||||
exe.execute(()->{ |
||||
List<OtherEntity> others = otherService.list(new QueryWrapper<OtherEntity>() {{ |
||||
ge("create_time", firstDateTime); |
||||
le("create_time", LocalDateTime.now()); |
||||
}}); |
||||
if(CollectionUtil.isEmpty(others)){ |
||||
countDownLatch.countDown(); |
||||
return; |
||||
} |
||||
// FA上线率
|
||||
double online = others.stream().mapToDouble(o-> Double.parseDouble(o.getOnlineRate())).sum(); |
||||
if(Math.abs(online) > 0){ |
||||
target.setTaget_three(BigDecimal.valueOf(online / others.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); |
||||
} |
||||
// FA投入条数
|
||||
target.setTaget_four(others.stream().mapToDouble(OtherEntity::getFaQuantity).sum()); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 等待所有线程执行完成
|
||||
try { |
||||
countDownLatch.await(); |
||||
} catch (InterruptedException e) { |
||||
e.printStackTrace(); |
||||
Thread.currentThread().interrupt(); |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
/** |
||||
* 光伏指标 |
||||
* @return |
||||
*/ |
||||
private TargetVo photovoltaicTaget() { |
||||
TargetVo target = new TargetVo(); |
||||
target.setType(HomePageConstant.PHOTOVOLTAIC); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.PHOTOVOLTAIC)); |
||||
// 实时数据
|
||||
List<PhotovoltaicRealVo> reals = (List<PhotovoltaicRealVo>) redisTemplate.opsForValue().get(photovoltaic_real_cache_final); |
||||
// 指标数据
|
||||
List<PhotovoltaicTargetVo> targets = (List<PhotovoltaicTargetVo>) redisTemplate.opsForValue().get(photovoltaic_target_cache_final); |
||||
if(CollectionUtil.isNotEmpty(reals)){ |
||||
// 装机容量
|
||||
target.setTaget_one(reals.stream().mapToDouble(PhotovoltaicRealVo::getCapacity).sum()); |
||||
} |
||||
if(CollectionUtil.isNotEmpty(targets)){ |
||||
// 发电量
|
||||
target.setTaget_two(targets.stream().mapToDouble(PhotovoltaicTargetVo::getGenerationYear).sum()); |
||||
} |
||||
// 计划发电量、双票合格率
|
||||
List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery() |
||||
.eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE) |
||||
.eq(StationEntity::getType,HomePageConstant.PHOTOVOLTAIC)); |
||||
if(CollectionUtil.isNotEmpty(stations)){ |
||||
QueryWrapper<PowerEntity> queryWrapper = new QueryWrapper<PowerEntity>() {{ |
||||
in("create_dept", stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList())); |
||||
eq("type", HomePageConstant.PHOTOVOLTAIC_TYPE); |
||||
likeRight("mon", DateUtil.format(new Date(),"yyyy")); |
||||
}}; |
||||
List<PowerEntity> list = powerService.list(queryWrapper); |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return target; |
||||
} |
||||
double plan = list.stream().mapToDouble(PowerEntity::getPlannedPowerMon).sum(); |
||||
double pass = list.stream().mapToDouble(power -> Double.parseDouble(power.getDoubleQualifyRate())).sum(); |
||||
if(Math.abs(plan) > 0){ |
||||
// 发电完成率
|
||||
target.setTaget_three(BigDecimal.valueOf(target.getTaget_two() / plan * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); |
||||
} |
||||
// 双票合格率
|
||||
target.setTaget_four(BigDecimal.valueOf(pass / list.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
/** |
||||
* 水务指标 |
||||
* @return |
||||
*/ |
||||
private TargetVo affairsTaget() { |
||||
TargetVo target = new TargetVo(); |
||||
target.setType(HomePageConstant.WATER_AFFAIRS); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.WATER_AFFAIRS)); |
||||
// TODO 统计业务数据
|
||||
return target; |
||||
} |
||||
|
||||
/** |
||||
* 充电桩 |
||||
* @return |
||||
*/ |
||||
private TargetVo chargeTarget() { |
||||
TargetVo target = (TargetVo) redisTemplate.opsForValue().get(charge); |
||||
if(ObjectUtil.isNotEmpty(target)){ |
||||
return target; |
||||
} |
||||
target = new TargetVo(); |
||||
try { |
||||
URL serverUrl = new URL(charge_url); |
||||
HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection(); |
||||
conn.setRequestMethod("GET"); |
||||
conn.setRequestProperty("Content-type", "application/json"); |
||||
//必须设置false,否则会自动redirect到重定向后的地址
|
||||
conn.setInstanceFollowRedirects(false); |
||||
conn.connect(); |
||||
String result = responseFormat(conn); |
||||
if (StringUtil.isBlank(result)) { |
||||
return new TargetVo(); |
||||
} |
||||
JSONObject jsonObject = JSONObject.parseObject(result); |
||||
JSONObject data = JSONObject.parseObject(jsonObject.get("data").toString()); |
||||
target.setType(HomePageConstant.CHARGE); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.CHARGE)); |
||||
target.setTaget_one(Double.valueOf(data.get("ordersCount").toString())); |
||||
target.setTaget_two(Double.valueOf(data.get("todayDegree").toString())); |
||||
target.setTaget_three(Double.valueOf(data.get("income").toString())); |
||||
target.setTaget_four(Double.valueOf(data.get("kilowatt").toString())); |
||||
target.setCharge(Integer.valueOf(data.get("stationNum").toString())); |
||||
redisTemplate.opsForValue().set(charge,target); |
||||
redisTemplate.expire(charge,30, TimeUnit.MINUTES); |
||||
} catch (Exception e) { |
||||
target.setType(HomePageConstant.CHARGE); |
||||
target.setTypeName(DictCache.getValue("stationType", HomePageConstant.CHARGE)); |
||||
target.setTaget_one(0.0); |
||||
target.setTaget_two(0.0); |
||||
target.setTaget_three(0.0); |
||||
target.setTaget_four(0.0); |
||||
target.setCharge(0); |
||||
log.error("charge_target_exception: {} ", e.getMessage()); |
||||
} |
||||
return target; |
||||
} |
||||
|
||||
/*** |
||||
* 获取返回的内容 |
||||
* @param connection |
||||
* @return |
||||
*/ |
||||
private String responseFormat(HttpURLConnection connection) { |
||||
StringBuilder stringBuilder = new StringBuilder(); |
||||
//将返回的输入流转换成字符串
|
||||
try ( |
||||
InputStream inputStream = connection.getInputStream(); |
||||
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); |
||||
BufferedReader bufferedReader = new BufferedReader(inputStreamReader) |
||||
) { |
||||
String str; |
||||
while ((str = bufferedReader.readLine()) != null) { |
||||
stringBuilder.append(str); |
||||
} |
||||
} catch (IOException e) { |
||||
return null; |
||||
} |
||||
return stringBuilder.toString(); |
||||
} |
||||
} |
@ -0,0 +1,20 @@
|
||||
package com.hnac.hzims.scheduled.service.operation.impl; |
||||
|
||||
import com.hnac.hzims.operational.fill.entity.SolveEntity; |
||||
import com.hnac.hzims.scheduled.mapper.operation.SolveMapper; |
||||
import com.hnac.hzims.scheduled.service.operation.SolveService; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Slf4j |
||||
@Service |
||||
@AllArgsConstructor |
||||
public class SolveServiceImpl extends BaseServiceImpl<SolveMapper, SolveEntity> implements SolveService { |
||||
|
||||
|
||||
} |
@ -0,0 +1,11 @@
|
||||
package com.hnac.hzims.scheduled.service.ticket; |
||||
|
||||
import com.hnac.hzims.ticket.allTicket.entity.TicketInfoEvaluateEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
/** |
||||
* @author hx |
||||
*/ |
||||
public interface TicketEvaluateService extends BaseService<TicketInfoEvaluateEntity> { |
||||
|
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.hnac.hzims.scheduled.service.ticket; |
||||
|
||||
import com.hnac.hzims.ticket.allTicket.vo.DoublePassRateVO; |
||||
import com.hnac.hzims.ticket.standardTicket.entity.StandardTicketInfoEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
import java.time.LocalDateTime; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
public interface TicketService extends BaseService<StandardTicketInfoEntity> { |
||||
|
||||
DoublePassRateVO doublePassRate(List<Long> areas, LocalDateTime firstDateTime, LocalDateTime now); |
||||
} |
@ -0,0 +1,7 @@
|
||||
package com.hnac.hzims.scheduled.service.ticket; |
||||
|
||||
import com.hnac.hzims.ticket.workTicket.entity.WorkTicketInfoEntity; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
|
||||
public interface WorkTicketService extends BaseService<WorkTicketInfoEntity> { |
||||
} |
@ -0,0 +1,20 @@
|
||||
package com.hnac.hzims.scheduled.service.ticket.impl; |
||||
|
||||
import com.hnac.hzims.scheduled.mapper.ticket.TicketEvaluateMapper; |
||||
import com.hnac.hzims.scheduled.service.ticket.TicketEvaluateService; |
||||
import com.hnac.hzims.ticket.allTicket.entity.TicketInfoEvaluateEntity; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@RequiredArgsConstructor |
||||
@Slf4j |
||||
public class TicketEvaluateServiceImpl extends BaseServiceImpl<TicketEvaluateMapper, TicketInfoEvaluateEntity> implements TicketEvaluateService { |
||||
|
||||
|
||||
} |
@ -0,0 +1,85 @@
|
||||
package com.hnac.hzims.scheduled.service.ticket.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.hnac.hzims.scheduled.mapper.ticket.TicketMapper; |
||||
import com.hnac.hzims.scheduled.service.ticket.TicketEvaluateService; |
||||
import com.hnac.hzims.scheduled.service.ticket.TicketService; |
||||
import com.hnac.hzims.scheduled.service.ticket.WorkTicketService; |
||||
import com.hnac.hzims.ticket.allTicket.entity.TicketInfoEvaluateEntity; |
||||
import com.hnac.hzims.ticket.allTicket.vo.DoublePassRateVO; |
||||
import com.hnac.hzims.ticket.constants.TicketConstants; |
||||
import com.hnac.hzims.ticket.standardTicket.entity.StandardTicketInfoEntity; |
||||
import com.hnac.hzims.ticket.workTicket.entity.WorkTicketInfoEntity; |
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springblade.core.mp.base.BaseServiceImpl; |
||||
import org.springblade.core.tool.utils.CollectionUtil; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.time.LocalDateTime; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@RequiredArgsConstructor |
||||
@Slf4j |
||||
public class TicketServiceImpl extends BaseServiceImpl<TicketMapper, StandardTicketInfoEntity> implements TicketService { |
||||
|
||||
private final WorkTicketService workTicketService; |
||||
private final TicketEvaluateService ticketEvaluateService; |
||||
|
||||
/** |
||||
* 获取双票合格率 |
||||
* @param depatList |
||||
* @param firstDateTime |
||||
* @param now |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public DoublePassRateVO doublePassRate(List<Long> depatList, LocalDateTime firstDateTime, LocalDateTime now) { |
||||
DoublePassRateVO doublePassRateVO = new DoublePassRateVO(); |
||||
// 查询操作票
|
||||
List<StandardTicketInfoEntity> standardList = this.list(new LambdaQueryWrapper<StandardTicketInfoEntity>() {{ |
||||
ge(StandardTicketInfoEntity::getCreateTime, firstDateTime); |
||||
le(StandardTicketInfoEntity::getCreateTime, now); |
||||
in(StandardTicketInfoEntity::getCreateDept, depatList); |
||||
}}); |
||||
// 查询工作票
|
||||
List<WorkTicketInfoEntity> workList = workTicketService.list(new LambdaQueryWrapper<WorkTicketInfoEntity>() {{ |
||||
ge(WorkTicketInfoEntity::getCreateTime, firstDateTime); |
||||
le(WorkTicketInfoEntity::getCreateTime, now); |
||||
in(WorkTicketInfoEntity::getCreateDept, depatList); |
||||
}}); |
||||
if (CollectionUtil.isEmpty(standardList) && CollectionUtil.isEmpty(workList)) { |
||||
doublePassRateVO.setDoubleTicketCount(0); |
||||
doublePassRateVO.setDoubleTicketPassCount(0); |
||||
doublePassRateVO.setDoublePassRate("0"); |
||||
return doublePassRateVO; |
||||
} |
||||
List<Long> standardIdList = new ArrayList<>(); |
||||
standardIdList.addAll(standardList.stream().map(StandardTicketInfoEntity::getId).collect(Collectors.toList())); |
||||
standardIdList.addAll(workList.stream().map(WorkTicketInfoEntity::getId).collect(Collectors.toList())); |
||||
doublePassRateVO.setDoubleTicketCount(standardIdList.size()); |
||||
// 查询合格评价
|
||||
List<TicketInfoEvaluateEntity> evaluateList = ticketEvaluateService.list(new LambdaQueryWrapper<TicketInfoEvaluateEntity>() {{ |
||||
ge(TicketInfoEvaluateEntity::getCreateTime, firstDateTime); |
||||
le(TicketInfoEvaluateEntity::getCreateTime, now); |
||||
in(TicketInfoEvaluateEntity::getTicketId, standardIdList); |
||||
eq(TicketInfoEvaluateEntity::getStatus, TicketConstants.TicketQualifiedEnum.Qualified.getCode()); |
||||
}}); |
||||
if (CollectionUtil.isEmpty(evaluateList)) { |
||||
doublePassRateVO.setDoubleTicketPassCount(0); |
||||
doublePassRateVO.setDoublePassRate("0"); |
||||
return doublePassRateVO; |
||||
} |
||||
double doublePassRate = BigDecimal.valueOf(evaluateList.size() / (double) standardIdList.size() * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
||||
doublePassRateVO.setDoubleTicketPassCount(evaluateList.size()); |
||||
doublePassRateVO.setDoublePassRate(String.valueOf(doublePassRate)); |
||||
return doublePassRateVO; |
||||
} |
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.equipment.PlanMapper"> |
||||
<resultMap id="BaseResultMap" type="com.hnac.hzims.equipment.entity.PlanGenerationEntity"> |
||||
<id column="ID" property="id" jdbcType="BIGINT"/> |
||||
<result column="TENANT_ID" property="tenantId" jdbcType="VARCHAR"/> |
||||
<result column="STATION_ID" property="stationId" jdbcType="VARCHAR"/> |
||||
<result column="DATE_TIME" property="dateTime" jdbcType="VARCHAR"/> |
||||
<result column="PLAN_GENERATION" property="planGeneration" jdbcType="REAL"/> |
||||
<result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP"/> |
||||
<result column="UPDATE_TIME" property="updateTime" jdbcType="TIMESTAMP"/> |
||||
<result column="CREATE_USER" property="createUser" jdbcType="BIGINT"/> |
||||
<result column="UPDATE_USER" property="updateUser" jdbcType="BIGINT"/> |
||||
<result column="IS_DELETED" property="isDeleted" jdbcType="TINYINT"/> |
||||
<result column="STATUS" property="status" jdbcType="TINYINT"/> |
||||
<result column="CREATE_DEPT" property="createDept" jdbcType="BIGINT"/> |
||||
</resultMap> |
||||
|
||||
<select id="selectPlanGenerationByParam" resultType="com.hnac.hzims.equipment.entity.PlanGenerationEntity"> |
||||
select * from hz_ims_plan_generation |
||||
where IS_DELETED = 0 |
||||
<if test="stationIds != null"> |
||||
and STATION_ID in |
||||
<foreach collection="stationIds" item="item" index="index" open="(" close=")" separator=","> |
||||
#{item} |
||||
</foreach> |
||||
</if> |
||||
<if test="deptIds != null"> |
||||
and STATION_DEPT_ID in |
||||
<foreach collection="deptIds" item="item" index="index" open="(" close=")" separator=","> |
||||
#{item} |
||||
</foreach> |
||||
</if> |
||||
<if test="date != null"> |
||||
and DATE_TIME LIKE CONCAT(#{date},'%') |
||||
</if> |
||||
</select> |
||||
</mapper> |
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.AccessMapper"> |
||||
|
||||
</mapper> |
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.DefectMapper"> |
||||
</mapper> |
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.MaintenanceMapper"> |
||||
<resultMap id="oper_maintenance_taskResultMap" type="com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity"> |
||||
<result column="ID" property="id"/> |
||||
<result column="REF_LIBRARY_ID" property="refLibraryId"/> |
||||
<result column="TITLE" property="title"/> |
||||
<result column="PROCESS_INSTANCE_ID_" property="processInstanceId"/> |
||||
<result column="DISPOSER" property="disposer"/> |
||||
<result column="DISPOSE_TIME" property="disposeTime"/> |
||||
<result column="HOURS" property="hours"/> |
||||
<result column="ACT_HOURS" property="actHours"/> |
||||
<result column="CONTENT" property="content"/> |
||||
<result column="WORK_STANDARDS" property="workStandards"/> |
||||
<result column="SAFO" property="safo"/> |
||||
<result column="IS_ANOMALY" property="isAnomaly"/> |
||||
<result column="LEGACY" property="legacy"/> |
||||
<result column="DESCRIPTION" property="description"/> |
||||
<result column="STATUS" property="status"/> |
||||
<result column="CREATE_DEPT" property="createDept"/> |
||||
<result column="IS_DELETED" property="isDeleted"/> |
||||
<result column="CREATE_USER" property="createUser"/> |
||||
<result column="CREATE_TIME" property="createTime"/> |
||||
<result column="UPDATE_USER" property="updateUser"/> |
||||
<result column="UPDATE_TIME" property="updateTime"/> |
||||
</resultMap> |
||||
</mapper> |
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > |
||||
<mapper namespace="com.hnac.hzims.operational.fill.mapper.OtherMapper"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.OtherMapper"> |
||||
<resultMap id="BaseResultMap" type="com.hnac.hzims.operational.fill.entity.OtherEntity"> |
||||
<id column="ID" property="id" jdbcType="BIGINT"/> |
||||
<result column="START_DATE" property="startDate" jdbcType="DATE"/> |
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.OverDetailsMapper"> |
||||
<resultMap id="BaseResultMap" type="com.hnac.hzims.operational.fill.entity.OverDetailsEntity"> |
||||
<id column="ID" property="id" jdbcType="BIGINT"/> |
||||
<result column="OVER_ID" property="overId" jdbcType="BIGINT"/> |
||||
<result column="OVER_CONFIG_ID" property="overConfigId" jdbcType="BIGINT"/> |
||||
<result column="PRICE" property="price" jdbcType="DECIMAL"/> |
||||
<result column="QUANTITY" property="quantity" jdbcType="INTEGER"/> |
||||
<result column="TOTAL_PRICE" property="totalPrice" jdbcType="DECIMAL"/> |
||||
<result column="TENANT_ID" property="tenantId" jdbcType="VARCHAR"/> |
||||
<result column="STATUS" property="status" jdbcType="TINYINT"/> |
||||
<result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP"/> |
||||
<result column="UPDATE_TIME" property="updateTime" jdbcType="TIMESTAMP"/> |
||||
<result column="CREATE_USER" property="createUser" jdbcType="BIGINT"/> |
||||
<result column="UPDATE_USER" property="updateUser" jdbcType="BIGINT"/> |
||||
<result column="IS_DELETED" property="isDeleted" jdbcType="TINYINT"/> |
||||
<result column="CREATE_DEPT" property="createDept" jdbcType="BIGINT"/> |
||||
</resultMap> |
||||
|
||||
<sql id="Base_Column_List"> |
||||
ID, OVER_ID , OVER_CONFIG_ID , PRICE , QUANTITY , TOTAL_PRICE, TENANT_ID, STATUS, CREATE_TIME, UPDATE_TIME, |
||||
CREATE_USER, UPDATE_USER, IS_DELETED, CREATE_DEPT |
||||
</sql> |
||||
|
||||
</mapper> |
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.OverMapper"> |
||||
<resultMap id="BaseResultMap" type="com.hnac.hzims.operational.fill.entity.OverEntity"> |
||||
<id column="ID" property="id" jdbcType="BIGINT"/> |
||||
<result column="START_DATE" property="startDate" jdbcType="DATE"/> |
||||
<result column="END_DATE" property="endDate" jdbcType="DATE"/> |
||||
<result column="TOTAL_PRICE" property="totalPrice" jdbcType="DECIMAL"/> |
||||
<result column="ENCL_PATH" property="enclPath" jdbcType="VARCHAR"/> |
||||
<result column="ENCL_NAME" property="enclName" jdbcType="VARCHAR"/> |
||||
<result column="TENANT_ID" property="tenantId" jdbcType="VARCHAR"/> |
||||
<result column="STATUS" property="status" jdbcType="TINYINT"/> |
||||
<result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP"/> |
||||
<result column="UPDATE_TIME" property="updateTime" jdbcType="TIMESTAMP"/> |
||||
<result column="CREATE_USER" property="createUser" jdbcType="BIGINT"/> |
||||
<result column="UPDATE_USER" property="updateUser" jdbcType="BIGINT"/> |
||||
<result column="IS_DELETED" property="isDeleted" jdbcType="TINYINT"/> |
||||
<result column="CREATE_DEPT" property="createDept" jdbcType="BIGINT"/> |
||||
</resultMap> |
||||
|
||||
<sql id="Base_Column_List"> |
||||
ID, START_DATE , END_DATE , TOTAL_PRICE , ENCL_PATH , ENCL_NAME ,TENANT_ID, STATUS, |
||||
CREATE_TIME, UPDATE_TIME, CREATE_USER, UPDATE_USER, IS_DELETED, CREATE_DEPT |
||||
</sql> |
||||
|
||||
</mapper> |
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.operation.SolveMapper"> |
||||
<resultMap id="BaseResultMap" type="com.hnac.hzims.operational.fill.entity.SolveEntity"> |
||||
<id column="ID" property="id" jdbcType="BIGINT"/> |
||||
<result column="SOLVE_DATE" property="solveDate" jdbcType="DATE"/> |
||||
<result column="SOLVE_QUANTITY" property="solveQuantity" jdbcType="INTEGER"/> |
||||
<result column="SOLVE_SUC_QUANTITY" property="solveSucQuantity" jdbcType="INTEGER"/> |
||||
<result column="TENANT_ID" property="tenantId" jdbcType="VARCHAR"/> |
||||
<result column="STATUS" property="status" jdbcType="TINYINT"/> |
||||
<result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP"/> |
||||
<result column="UPDATE_TIME" property="updateTime" jdbcType="TIMESTAMP"/> |
||||
<result column="CREATE_USER" property="createUser" jdbcType="BIGINT"/> |
||||
<result column="UPDATE_USER" property="updateUser" jdbcType="BIGINT"/> |
||||
<result column="IS_DELETED" property="isDeleted" jdbcType="TINYINT"/> |
||||
<result column="CREATE_DEPT" property="createDept" jdbcType="BIGINT"/> |
||||
</resultMap> |
||||
|
||||
<sql id="Base_Column_List"> |
||||
ID, SOLVE_DATE , SOLVE_QUANTITY , SOLVE_SUC_QUANTITY ,TENANT_ID, STATUS, CREATE_TIME, |
||||
UPDATE_TIME, CREATE_USER, UPDATE_USER, IS_DELETED, CREATE_DEPT |
||||
</sql> |
||||
|
||||
</mapper> |
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.ticket.TicketEvaluateMapper"> |
||||
|
||||
</mapper> |
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.ticket.TicketMapper"> |
||||
|
||||
</mapper> |
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
<mapper namespace="com.hnac.hzims.scheduled.mapper.ticket.WorkTicketMapper"> |
||||
</mapper> |
@ -1,101 +1,13 @@
|
||||
package com.hnac.hzims.operational.defect.service; |
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
import com.hnac.hzims.operational.defect.entity.OperDefectEntity; |
||||
import com.hnac.hzims.operational.defect.entity.OperPhenomenonEntity; |
||||
import com.hnac.hzims.operational.defect.vo.OperDefectVO; |
||||
import com.hnac.hzims.operational.report.vo.DefectReportsVO; |
||||
import com.hnac.hzims.vo.SafeCheckStatisticVO; |
||||
import org.springblade.core.mp.base.BaseService; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.flow.core.entity.BladeFlow; |
||||
|
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.IOException; |
||||
import java.time.LocalDate; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 服务类 |
||||
* |
||||
* @author Chill |
||||
* @author ysj |
||||
*/ |
||||
public interface IOperDefectService extends BaseService<OperDefectEntity> { |
||||
|
||||
/** |
||||
* 开始问题处理流程 |
||||
* 问题处理流程的第一个处理节点人key 必须是 problemUser |
||||
* @param |
||||
*/ |
||||
void startFlow(OperPhenomenonEntity entity, OperDefectEntity defectEntity); |
||||
|
||||
/** |
||||
* 处理问题 |
||||
* @param flow |
||||
* @return |
||||
*/ |
||||
boolean handleProcess(BladeFlow flow); |
||||
|
||||
/** |
||||
* 获取缺陷的统计月报 |
||||
* @param month 格式:"2021-01" |
||||
*/ |
||||
Map<String, Object> getDefectStatistics(String month); |
||||
|
||||
/** |
||||
* 导出缺陷统计月报报表 |
||||
* @param response |
||||
* @param month 格式 "2021-01" |
||||
* @throws IOException |
||||
*/ |
||||
void exportFualtMonthExcel(HttpServletResponse response, String month) throws IOException; |
||||
|
||||
|
||||
List<OperDefectEntity> getDefectList(String emCode,List<String> list); |
||||
|
||||
List<OperDefectEntity> getDefectByEmCodeList(String emCode); |
||||
|
||||
/** |
||||
* 站点月报统计 - 消缺 |
||||
* @param startDate |
||||
* @param endDate |
||||
* @param deptIdList |
||||
* @return |
||||
*/ |
||||
List<DefectReportsVO> getFaultByFaultCode(LocalDate startDate,LocalDate endDate,List<Long> deptIdList); |
||||
|
||||
List<DefectReportsVO> getFaultByFaultCode(Map<String,Object> params); |
||||
|
||||
List<Map<String,Object>> getDefectConclusion(Map<String,Object> params); |
||||
|
||||
/** |
||||
* 缺陷详情 |
||||
* @param defect |
||||
* @return |
||||
*/ |
||||
R<OperDefectVO> detail(OperDefectEntity defect); |
||||
|
||||
/** |
||||
* 获取安全检查消缺项统计 |
||||
* @param startDate 开始时间 |
||||
* @param endDate 结束时间 |
||||
* @param dept 机构ID |
||||
* @param defectType 缺陷类型;1: 重大缺陷 2:一般缺陷 |
||||
* @return SafeCheckStatisticVO 对象 |
||||
*/ |
||||
SafeCheckStatisticVO getDefectCheck(String startDate,String endDate,Long dept,String defectType); |
||||
|
||||
boolean updateDefectInfo(OperDefectEntity entity); |
||||
|
||||
boolean updateDefectHanderState(OperDefectEntity entity); |
||||
|
||||
/** |
||||
* 分页查询 |
||||
* @param operDefectEntityPage |
||||
* @param defect |
||||
* @return |
||||
*/ |
||||
IPage<OperDefectEntity> selectPage(Page<OperDefectEntity> operDefectEntityPage, OperDefectEntity defect); |
||||
} |
||||
|
Loading…
Reference in new issue