@@ -0,0 +1,309 @@
package com.njcn.supervision.service.survey.impl ;
import cn.hutool.core.collection.CollectionUtil ;
import cn.hutool.core.util.StrUtil ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper ;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page ;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ;
import com.njcn.bpm.api.BpmProcessFeignClient ;
import com.njcn.bpm.enums.BpmTaskStatusEnum ;
import com.njcn.bpm.pojo.dto.BpmProcessInstanceCreateReqDTO ;
import com.njcn.common.pojo.enums.common.DataStateEnum ;
import com.njcn.common.pojo.exception.BusinessException ;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient ;
import com.njcn.device.biz.pojo.dto.SubGetBase ;
import com.njcn.device.biz.pojo.param.SubstationParam ;
import com.njcn.supervision.enums.FlowStatusEnum ;
import com.njcn.supervision.mapper.survey.SupervisionGeneralSurveyPlanPOMapper ;
import com.njcn.supervision.pojo.param.survey.SupervisionGeneralSurveyPlanParm ;
import com.njcn.supervision.pojo.po.survey.SupervisionGeneralSurveyPlanDetailPO ;
import com.njcn.supervision.pojo.po.survey.SupervisionGeneralSurveyPlanPO ;
import com.njcn.supervision.pojo.vo.survey.DeptSubstationVO ;
import com.njcn.supervision.pojo.vo.survey.SupervisionGeneralSurveyPlanVO ;
import com.njcn.supervision.service.survey.SupervisionGeneralSurveyPlanDetailPOService ;
import com.njcn.supervision.service.survey.SupervisionGeneralSurveyPlanPOService ;
import com.njcn.user.api.DeptFeignClient ;
import com.njcn.user.pojo.vo.PvTerminalTreeVO ;
import com.njcn.web.factory.PageFactory ;
import com.njcn.web.utils.RequestUtil ;
import lombok.RequiredArgsConstructor ;
import org.springframework.beans.BeanUtils ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import java.time.LocalDate ;
import java.util.* ;
import java.util.stream.Collectors ;
/**
*
* Description:
* Date: 2024/5/13 18:35【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class SupervisionGeneralSurveyPlanPOServiceImpl extends ServiceImpl < SupervisionGeneralSurveyPlanPOMapper , SupervisionGeneralSurveyPlanPO > implements SupervisionGeneralSurveyPlanPOService {
/**
* 用户信息建档对应的流程定义 KEY todo 修改成普测的key
*/
public static final String PROCESS_KEY = " harmonic_survey " ;
private final CommTerminalGeneralClient commTerminalGeneralClient ;
private final SupervisionGeneralSurveyPlanDetailPOService supervisionGeneralSurveyPlanDetailPOService ;
private final BpmProcessFeignClient bpmProcessFeignClient ;
private final DeptFeignClient deptFeignClient ;
@Override
@Transactional ( rollbackFor = Exception . class )
public String addDevReport ( SupervisionGeneralSurveyPlanParm supervisionGeneralSurveyPlanParm ) {
//判断工程名称是否有重复的
checkPlanName ( supervisionGeneralSurveyPlanParm , false ) ;
//保存普测计划主表
SupervisionGeneralSurveyPlanPO supervisionGeneralSurveyPlanPO = new SupervisionGeneralSurveyPlanPO ( ) ;
BeanUtils . copyProperties ( supervisionGeneralSurveyPlanParm , supervisionGeneralSurveyPlanPO ) ;
supervisionGeneralSurveyPlanPO . setState ( DataStateEnum . ENABLE . getCode ( ) ) ;
supervisionGeneralSurveyPlanPO . setPlanCreateTime ( LocalDate . now ( ) ) ;
supervisionGeneralSurveyPlanPO . setStatus ( BpmTaskStatusEnum . RUNNING . getStatus ( ) ) ;
this . save ( supervisionGeneralSurveyPlanPO ) ;
String planNo = supervisionGeneralSurveyPlanPO . getPlanNo ( ) ;
//保存普测计划电站表
if ( CollectionUtil . isNotEmpty ( supervisionGeneralSurveyPlanParm . getSubIds ( ) ) ) {
SubstationParam param = new SubstationParam ( ) ;
param . setPowerIds ( supervisionGeneralSurveyPlanParm . getSubIds ( ) ) ;
List < SubGetBase > stationList = commTerminalGeneralClient . tagOrIdGetSub ( param ) . getData ( ) ;
List < SupervisionGeneralSurveyPlanDetailPO > supervisionGeneralSurveyPlanDetailPOS = new ArrayList < > ( ) ;
for ( SubGetBase stat : stationList ) {
SupervisionGeneralSurveyPlanDetailPO supervisionGeneralSurveyPlanDetailPO = new SupervisionGeneralSurveyPlanDetailPO ( ) ;
supervisionGeneralSurveyPlanDetailPO . setPlanNo ( planNo ) ;
supervisionGeneralSurveyPlanDetailPO . setSubId ( stat . getId ( ) ) ;
supervisionGeneralSurveyPlanDetailPO . setSubName ( stat . getName ( ) ) ;
/*目前时间与计划开始时间,结束时间一致*/
supervisionGeneralSurveyPlanDetailPO . setVoltageLevel ( stat . getVoltageLevel ( ) ) ;
List < String > unitChildrenList = stat . getUnitChildrenList ( ) ;
if ( CollectionUtil . isEmpty ( unitChildrenList ) ) {
supervisionGeneralSurveyPlanDetailPO . setMeasurementPointId ( " " ) ;
supervisionGeneralSurveyPlanDetailPO . setIsSurvey ( 0 ) ;
} else {
String subList = unitChildrenList . stream ( ) . map ( String : : valueOf ) . collect ( Collectors . joining ( " , " ) ) ;
supervisionGeneralSurveyPlanDetailPO . setMeasurementPointId ( subList ) ;
supervisionGeneralSurveyPlanDetailPO . setIsSurvey ( 0 ) ;
}
supervisionGeneralSurveyPlanDetailPO . setState ( DataStateEnum . ENABLE . getCode ( ) ) ;
supervisionGeneralSurveyPlanDetailPOS . add ( supervisionGeneralSurveyPlanDetailPO ) ;
}
supervisionGeneralSurveyPlanDetailPOService . saveOrUpdateBatchByMultiId ( supervisionGeneralSurveyPlanDetailPOS , 500 ) ;
// 发起 BPM 流程
Map < String , Object > processInstanceVariables = new HashMap < > ( ) ;
BpmProcessInstanceCreateReqDTO bpmProcessInstanceCreateReqDTO = new BpmProcessInstanceCreateReqDTO ( ) ;
bpmProcessInstanceCreateReqDTO . setProcessDefinitionKey ( PROCESS_KEY ) ;
bpmProcessInstanceCreateReqDTO . setBusinessKey ( planNo ) ;
bpmProcessInstanceCreateReqDTO . setStartUserSelectAssignees ( supervisionGeneralSurveyPlanParm . getStartUserSelectAssignees ( ) ) ;
bpmProcessInstanceCreateReqDTO . setVariables ( processInstanceVariables ) ;
String processInstanceId = bpmProcessFeignClient . createProcessInstance ( supervisionGeneralSurveyPlanPO . getCreateBy ( ) , bpmProcessInstanceCreateReqDTO ) . getData ( ) ;
// 将工作流的编号,更新到流程单中
supervisionGeneralSurveyPlanPO . setProcessInstanceId ( processInstanceId ) ;
this . baseMapper . updateById ( supervisionGeneralSurveyPlanPO ) ;
return planNo ;
} {
throw new BusinessException ( " 请选择电站 " ) ;
}
}
@Override
public boolean auditSurvey ( SupervisionGeneralSurveyPlanParm . SupervisionGeneralSurveyPlanUpdate supervisionGeneralSurveyPlanUpdate ) {
//判断计划名称是否有重复的
checkPlanName ( supervisionGeneralSurveyPlanUpdate , true ) ;
String planNo = supervisionGeneralSurveyPlanUpdate . getPlanNo ( ) ;
SupervisionGeneralSurveyPlanPO byId = this . getById ( planNo ) ;
BeanUtils . copyProperties ( supervisionGeneralSurveyPlanUpdate , byId ) ;
SubstationParam param = new SubstationParam ( ) ;
param . setPowerIds ( supervisionGeneralSurveyPlanUpdate . getSubIds ( ) ) ;
List < SubGetBase > stationList = commTerminalGeneralClient . tagOrIdGetSub ( param ) . getData ( ) ;
List < SupervisionGeneralSurveyPlanDetailPO > supervisionGeneralSurveyPlanDetailPOS = new ArrayList < > ( ) ;
for ( SubGetBase stat : stationList ) {
SupervisionGeneralSurveyPlanDetailPO supervisionGeneralSurveyPlanDetailPO = new SupervisionGeneralSurveyPlanDetailPO ( ) ;
supervisionGeneralSurveyPlanDetailPO . setPlanNo ( planNo ) ;
supervisionGeneralSurveyPlanDetailPO . setSubId ( stat . getId ( ) ) ;
supervisionGeneralSurveyPlanDetailPO . setSubName ( stat . getName ( ) ) ;
/*目前时间与计划开始时间,结束时间一致*/
supervisionGeneralSurveyPlanDetailPO . setVoltageLevel ( stat . getVoltageLevel ( ) ) ;
List < String > unitChildrenList = stat . getUnitChildrenList ( ) ;
if ( CollectionUtil . isEmpty ( unitChildrenList ) ) {
supervisionGeneralSurveyPlanDetailPO . setMeasurementPointId ( " " ) ;
supervisionGeneralSurveyPlanDetailPO . setIsSurvey ( 0 ) ;
} else {
String subList = unitChildrenList . stream ( ) . map ( String : : valueOf ) . collect ( Collectors . joining ( " , " ) ) ;
supervisionGeneralSurveyPlanDetailPO . setMeasurementPointId ( subList ) ;
supervisionGeneralSurveyPlanDetailPO . setIsSurvey ( 1 ) ;
}
supervisionGeneralSurveyPlanDetailPO . setState ( DataStateEnum . ENABLE . getCode ( ) ) ;
supervisionGeneralSurveyPlanDetailPOS . add ( supervisionGeneralSurveyPlanDetailPO ) ;
}
//清除原有的
supervisionGeneralSurveyPlanDetailPOService . remove ( new QueryWrapper < SupervisionGeneralSurveyPlanDetailPO > ( ) . lambda ( ) . eq ( SupervisionGeneralSurveyPlanDetailPO : : getPlanNo , planNo ) ) ;
supervisionGeneralSurveyPlanDetailPOService . saveOrUpdateBatchByMultiId ( supervisionGeneralSurveyPlanDetailPOS , 500 ) ;
return true ;
}
@Override
@Transactional ( rollbackFor = Exception . class )
public Boolean removeSurvey ( List < String > ids ) {
this . lambdaUpdate ( ) . set ( SupervisionGeneralSurveyPlanPO : : getState , 0 ) . in ( SupervisionGeneralSurveyPlanPO : : getPlanNo , ids ) . update ( ) ;
supervisionGeneralSurveyPlanDetailPOService . remove ( new QueryWrapper < SupervisionGeneralSurveyPlanDetailPO > ( ) .
lambda ( ) . in ( SupervisionGeneralSurveyPlanDetailPO : : getPlanNo , ids ) ) ;
return true ;
}
@Override
public Page < SupervisionGeneralSurveyPlanVO > getSurvey ( SupervisionGeneralSurveyPlanParm . GeneralSurveyPlanQueryParam generalSurveyPlanQueryParam ) {
String userIndex = RequestUtil . getUserIndex ( ) ;
QueryWrapper < SupervisionGeneralSurveyPlanVO > queryWrapper = new QueryWrapper < > ( ) ;
queryWrapper . in ( " supervision_general_survey_plan.create_by " , CollectionUtil . newArrayList ( userIndex ) )
. eq ( " supervision_general_survey_plan.state " , DataStateEnum . ENABLE . getCode ( ) ) ;
/*获取直接下属子单位*/
List < String > data = deptFeignClient . getDepSonIdtByDeptId ( generalSurveyPlanQueryParam . getOrgNo ( ) ) . getData ( ) ;
if ( Objects . nonNull ( generalSurveyPlanQueryParam ) ) {
if ( StrUtil . isNotBlank ( generalSurveyPlanQueryParam . getOrgNo ( ) ) ) {
//查询所有区域下的数据
queryWrapper . in ( " supervision_general_survey_plan.org_no " , data ) ;
}
}
queryWrapper . orderByDesc ( " supervision_general_survey_plan.create_time " ) ;
Page < SupervisionGeneralSurveyPlanVO > page = this . baseMapper . page ( new Page < > ( PageFactory . getPageNum ( generalSurveyPlanQueryParam ) , PageFactory . getPageSize ( generalSurveyPlanQueryParam ) ) , queryWrapper ) ;
page . getRecords ( ) . stream ( ) . forEach ( temp - > {
temp . setOrgName ( ( deptFeignClient . getDeptById ( temp . getOrgNo ( ) ) . getData ( ) . getName ( ) ) ) ;
} ) ;
return page ;
}
@Override
public SupervisionGeneralSurveyPlanVO querySurveyDetail ( String id ) {
SupervisionGeneralSurveyPlanVO supervisionGeneralSurveyPlanVO = new SupervisionGeneralSurveyPlanVO ( ) ;
SupervisionGeneralSurveyPlanPO byId = this . getById ( id ) ;
BeanUtils . copyProperties ( byId , supervisionGeneralSurveyPlanVO ) ;
//获取普测下电站详情
List < SupervisionGeneralSurveyPlanDetailPO > list = supervisionGeneralSurveyPlanDetailPOService . lambdaQuery ( ) . eq ( SupervisionGeneralSurveyPlanDetailPO : : getPlanNo , id ) . list ( ) ;
supervisionGeneralSurveyPlanVO . setSupervisionGeneralSurveyPlanDetailPOS ( list ) ;
return supervisionGeneralSurveyPlanVO ;
}
@Override
public List < DeptSubstationVO > initDetpStataionTree ( String orgId ) {
List < PvTerminalTreeVO > data = deptFeignClient . allDeptList ( ) . getData ( ) ;
List < DeptSubstationVO > deptSubstationVOList = data . stream ( ) . map ( temp - > {
DeptSubstationVO deptSubstationVO = new DeptSubstationVO ( ) ;
BeanUtils . copyProperties ( temp , deptSubstationVO ) ;
deptSubstationVO . setDisabled ( true ) ;
deptSubstationVO . setFlag ( true ) ;
SubstationParam param = new SubstationParam ( ) ;
param . setOrgIds ( Arrays . asList ( temp . getCode ( ) ) ) ;
List < SubGetBase > list1 = commTerminalGeneralClient . tagOrIdGetSub ( param ) . getData ( ) ;
List < DeptSubstationVO > children = deptSubstationVO . getChildren ( ) ;
List < DeptSubstationVO > collect = list1 . stream ( ) . map ( statationStat - > {
DeptSubstationVO deptSubstationVO1 = new DeptSubstationVO ( ) ;
deptSubstationVO1 . setId ( statationStat . getId ( ) ) ;
deptSubstationVO1 . setPid ( temp . getId ( ) ) ;
deptSubstationVO1 . setName ( statationStat . getName ( ) ) ;
// if (finalSubIds.contains(statationStat.getId())) {
// deptSubstationVO1.setDisabled(true);
// }
deptSubstationVO1 . setFlag ( true ) ;
return deptSubstationVO1 ;
} ) . collect ( Collectors . toList ( ) ) ;
children . addAll ( collect ) ;
return deptSubstationVO ;
} ) . collect ( Collectors . toList ( ) ) ;
// 遍历两次data来组装带有children关联性的对象, 如果找到子级就删除result的数据
List < DeptSubstationVO > result = new ArrayList < > ( deptSubstationVOList ) ;
for ( DeptSubstationVO pv : deptSubstationVOList ) {
for ( DeptSubstationVO pv2 : deptSubstationVOList ) {
/*如果本级id与数据的父id相同, 就说明是子父级关系*/
if ( pv . getId ( ) . equals ( pv2 . getPid ( ) ) ) {
pv . getChildren ( ) . add ( pv2 ) ;
result . remove ( pv2 ) ;
}
}
}
result = recursion ( result . get ( 0 ) , orgId ) ;
return result ;
}
@Override
public void updateStatus ( String businessKey , Integer status ) {
this . lambdaUpdate ( ) . set ( SupervisionGeneralSurveyPlanPO : : getStatus , status ) . eq ( SupervisionGeneralSurveyPlanPO : : getPlanNo , businessKey ) . update ( ) ;
}
public List < DeptSubstationVO > recursion ( DeptSubstationVO result , String orgdid ) {
List < DeptSubstationVO > deptSubstationVOList = new ArrayList < > ( ) ;
if ( Objects . equals ( result . getId ( ) , orgdid ) ) {
deptSubstationVOList . add ( result ) ;
return deptSubstationVOList ;
} else {
for ( DeptSubstationVO deptSubstationVO : result . getChildren ( ) ) {
List < DeptSubstationVO > recursion = recursion ( deptSubstationVO , orgdid ) ;
if ( recursion . size ( ) > 0 ) {
return recursion ;
}
}
}
return deptSubstationVOList ;
}
/**
* @Description: 校验计划名称是否存在
* @Param: * @param userReportParam 用户申请数据
* * @param isExcludeSelf 是否排除自己,一般新增不排除,更新时需要排除自己
* @return: void
* @Author: clam
* @Date: 2024/5/13
*/
private void checkPlanName ( SupervisionGeneralSurveyPlanParm supervisionGeneralSurveyPlanParm , boolean isExcludeSelf ) {
LambdaQueryWrapper < SupervisionGeneralSurveyPlanPO > userReportPOLambdaQueryWrapper = new LambdaQueryWrapper < > ( ) ;
userReportPOLambdaQueryWrapper
. eq ( SupervisionGeneralSurveyPlanPO : : getPlanName , supervisionGeneralSurveyPlanParm . getPlanName ( ) )
. eq ( SupervisionGeneralSurveyPlanPO : : getState , DataStateEnum . ENABLE . getCode ( ) ) ;
//更新的时候,需排除当前记录
if ( isExcludeSelf ) {
if ( supervisionGeneralSurveyPlanParm instanceof SupervisionGeneralSurveyPlanParm . SupervisionGeneralSurveyPlanUpdate ) {
userReportPOLambdaQueryWrapper . ne ( SupervisionGeneralSurveyPlanPO : : getPlanNo , ( ( SupervisionGeneralSurveyPlanParm . SupervisionGeneralSurveyPlanUpdate ) supervisionGeneralSurveyPlanParm ) . getPlanNo ( ) ) ;
}
}
List < SupervisionGeneralSurveyPlanPO > list = this . baseMapper . selectList ( userReportPOLambdaQueryWrapper ) ;
if ( CollectionUtil . isNotEmpty ( list ) ) {
//过滤已取消的申请
list = list . stream ( )
. filter ( temp - > ! temp . getStatus ( ) . equals ( FlowStatusEnum . CANCEL . getCode ( ) ) )
. collect ( Collectors . toList ( ) ) ;
//如果还存在,则说明有人申请过了
if ( CollectionUtil . isNotEmpty ( list ) ) {
throw new BusinessException ( supervisionGeneralSurveyPlanParm . getPlanName ( ) . concat ( " ,该计划已被 " ) . concat ( list . get ( 0 ) . getCreateBy ( ) ) . concat ( " 申请 " ) ) ;
}
}
}
}