package com.gkhy.safePlatform.emergency.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gkhy.safePlatform.account.rpc.apimodel.AccountDepartmentService; import com.gkhy.safePlatform.account.rpc.apimodel.model.resp.DepInfoRPCRespDTO; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.exception.BusinessException; import com.gkhy.safePlatform.commons.query.PageQuery; import com.gkhy.safePlatform.commons.utils.BeanCopyUtils; import com.gkhy.safePlatform.commons.utils.StringUtils; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.commons.vo.SearchResultVO; import com.gkhy.safePlatform.emergency.entity.*; import com.gkhy.safePlatform.emergency.enums.EmergencyResultCodes; import com.gkhy.safePlatform.emergency.excepiton.EmergencyException; import com.gkhy.safePlatform.emergency.model.dto.resp.*; import com.gkhy.safePlatform.emergency.query.EmergencyDrillExecuteCountQuery; import com.gkhy.safePlatform.emergency.query.EmergencySuppliesCountQuery; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteNumRPCReq; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteTimeRPCReq; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.EmergencyExecuteNumRPCResp; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.EmergencyExecuteTimeRPCResp; import com.gkhy.safePlatform.emergency.service.EmergencyCountService; import com.gkhy.safePlatform.emergency.service.baseService.EmergencyDrillExecuteInfoService; import com.gkhy.safePlatform.emergency.service.baseService.EmergencySuppliesInfoService; import com.gkhy.safePlatform.emergency.utils.TimeUtils; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import sun.security.pkcs11.wrapper.CK_SSL3_KEY_MAT_OUT; import java.text.SimpleDateFormat; import java.util.*; @Service("emergencyCountService") public class EmergencyCountServiceImpl implements EmergencyCountService { @Autowired private EmergencyDrillExecuteInfoService emergencyDrillExecuteInfoService; @DubboReference(check = false) private AccountDepartmentService accountDepartmentService; @Autowired private EmergencySuppliesInfoService emergencySuppliesInfoService; @Override public SearchResultVO getTimeByDeptId(EmergencyExecuteTimeRPCReq query) { EmergencyExecuteTimeRPCResp emergencyExecuteTimeRPCResp = new EmergencyExecuteTimeRPCResp(); // 获取id对应的部门 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); emergencyExecuteTimeRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); emergencyExecuteTimeRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); emergencyExecuteTimeRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); getSingleTimeData(emergencyExecuteTimeRPCResp); return new SearchResultVO<>( false, null, null, null, 1L, emergencyExecuteTimeRPCResp, ResultCodes.OK ); } @Override public SearchResultVO> getTimeByDeptIds(EmergencyExecuteTimeRPCReq query) { List list = new ArrayList<>(); // 获取该部门及其子部门的所有信息 List depList = getDepListInfoByDepId(query.getDeptId()); for (DepInfoRPCRespDTO depInfoRPCRespDTO : depList){ EmergencyExecuteTimeRPCResp emergencyExecuteTimeRPCResp = new EmergencyExecuteTimeRPCResp(); emergencyExecuteTimeRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); emergencyExecuteTimeRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); emergencyExecuteTimeRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); getSingleTimeData(emergencyExecuteTimeRPCResp); list.add(emergencyExecuteTimeRPCResp); } return new SearchResultVO<>( false, null, null, null, (long) list.size(), list, ResultCodes.OK ); } private void getSingleTimeData(EmergencyExecuteTimeRPCResp emergencyExecuteTimeRPCResp){ // 查询该部门最后一次演练时间 String lastTime = emergencyDrillExecuteInfoService.selectEmergencyDrillExecuteIntervalTimeByDeptId(emergencyExecuteTimeRPCResp.getDeptId()); if (StringUtils.isNotBlank(lastTime)){ emergencyExecuteTimeRPCResp.setLastTime(lastTime); emergencyExecuteTimeRPCResp.setDays(TimeUtils.differentDays(lastTime, TimeUtils.formatDate(new Date()))); } } @Override public SearchResultVO getNumByDeptId(EmergencyExecuteNumRPCReq query) { if (query.getYear()==null){ throw new EmergencyException(EmergencyResultCodes.YEAR_NULL); } EmergencyExecuteNumRPCResp emergencyExecuteNumRPCResp = new EmergencyExecuteNumRPCResp(); // 获取id对应的部门 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); emergencyExecuteNumRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); emergencyExecuteNumRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); emergencyExecuteNumRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); getSingleNumData(emergencyExecuteNumRPCResp,query); return new SearchResultVO<>( false, null, null, null, 1L, emergencyExecuteNumRPCResp, ResultCodes.OK ); } @Override public SearchResultVO> getNumByDeptIds(EmergencyExecuteNumRPCReq query) { List list = new ArrayList<>(); // 获取该部门及其子部门的所有信息 List deptList = getDepListInfoByDepId(query.getDeptId()); for (DepInfoRPCRespDTO depInfoRPCRespDTO : deptList){ EmergencyExecuteNumRPCResp emergencyExecuteNumRPCResp = new EmergencyExecuteNumRPCResp(); emergencyExecuteNumRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); emergencyExecuteNumRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); emergencyExecuteNumRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); getSingleNumData(emergencyExecuteNumRPCResp,query); list.add(emergencyExecuteNumRPCResp); } return new SearchResultVO<>( false, null, null, null, (long) list.size(), list, ResultCodes.OK ); } private void getSingleNumData(EmergencyExecuteNumRPCResp emergencyExecuteNumRPCResp,EmergencyExecuteNumRPCReq query){ List deptIds = new ArrayList<>(); deptIds.add(emergencyExecuteNumRPCResp.getDeptId()); List> mapList = new ArrayList<>(); List emergencyDrillExecuteCountDataList = new ArrayList<>(); String startTime ; String endTime ; if (query.getMonth()==null){ // 查该年度12个月份的 startTime = TimeUtils.getYearFirst(query.getYear()); endTime = TimeUtils.getYearLast(query.getYear()); emergencyDrillExecuteCountDataList= emergencyDrillExecuteInfoService.selectByMonthAndDept(startTime, endTime, deptIds); }else{ // 查该年度指定月份的 startTime = TimeUtils.getMonthFirst(query.getYear(),query.getMonth()); endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth()); emergencyDrillExecuteCountDataList= emergencyDrillExecuteInfoService.selectByDayAndDept(startTime, endTime, deptIds); } if (!emergencyDrillExecuteCountDataList.isEmpty()){ for (EmergencyDrillExecuteCountData emergencyDrillExecuteCountData : emergencyDrillExecuteCountDataList){ Map map = new HashMap<>(); map.put("name",emergencyDrillExecuteCountData.getName()); map.put("num",emergencyDrillExecuteCountData.getNum().toString()); mapList.add(map); } } emergencyExecuteNumRPCResp.setData(mapList); } private DepInfoRPCRespDTO getDepInfoByDepId(Long deptId) { DepInfoRPCRespDTO dep = new DepInfoRPCRespDTO(); ResultVO rpcResult = accountDepartmentService.getDepInfoByDepId(deptId); if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcResult.getData() != null) { dep = (DepInfoRPCRespDTO) rpcResult.getData(); } } else { throw new BusinessException(ResultCodes.CLIENT_DEP_NOT_EXIST); } return dep; } private List getDepListInfoByDepId(Long deptId){ List depList = new ArrayList<>(); ResultVO> rpcResult = accountDepartmentService.listDepAndSubDepByDepId(deptId); if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcResult.getData() != null) { depList = (List)rpcResult.getData(); } } else { throw new BusinessException(ResultCodes.CLIENT_DEP_NOT_EXIST); } return depList; } @Override public ResultVO countEmergencyDrillExecute(EmergencyDrillExecuteCountQuery query) { EmergencyDrillExecuteCountRespDTO emergencyDrillExecuteCountRespDTO = new EmergencyDrillExecuteCountRespDTO(); // 根据最新的应急演练实施的创建时间与当前时间 获取间隔天数 Integer days = emergencyDrillExecuteInfoService.selectEmergencyDrillExecuteIntervalTime(); emergencyDrillExecuteCountRespDTO.setDays(days); // 根据时间类型(年/月),部门id 获取统计结果 List list = new ArrayList<>(); // 获取部门id集合 List deptIds = new ArrayList<>(); deptIds.add(query.getDeptId()); /* ResultVO> rpcResult = accountDepartmentService.listDepAndSubDepIds(query.getDeptId()); if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcResult.getData() != null) { deptIds = (List) rpcResult.getData(); } } else { throw new BusinessException(ResultCodes.CLIENT_DEP_NOT_EXIST); }*/ // 获取时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); Date date = new Date(); int year = Integer.parseInt(sdf.format(date)); if (query.getType() == 1) { // 月 String startTime = TimeUtils.getYearFirst(year); String endTime = TimeUtils.getYearLast(year); list = emergencyDrillExecuteInfoService.selectByMonthAndDept(startTime, endTime, deptIds); } if (query.getType() == 2) { // 年 String startTime = TimeUtils.getYearFirst(year - 10); String endTime = TimeUtils.getYearLast(year); list = emergencyDrillExecuteInfoService.selectByYearAndDept(startTime, endTime, deptIds); } if (!CollectionUtils.isEmpty(list)) { List dataList = BeanCopyUtils.copyBeanList(list, EmergencyDrillExecuteCountDataRespDTO.class); emergencyDrillExecuteCountRespDTO.setDataList(dataList); } else { emergencyDrillExecuteCountRespDTO.setDataList(new ArrayList<>()); } return new ResultVO<>(ResultCodes.OK, emergencyDrillExecuteCountRespDTO); } @Override public ResultVO> countEmergencySupplies(PageQuery pageQuery) { List respList = new ArrayList<>(); Long pageIndex = pageQuery.getPageIndex(); Long pageSize = pageQuery.getPageSize(); Page page = new Page<>(pageIndex, pageSize); List emergencySuppliesInfoDetailDOList = emergencySuppliesInfoService.countEmergencySupplies(page, pageQuery.getSearchParams()); if (!CollectionUtils.isEmpty(emergencySuppliesInfoDetailDOList)) { for (EmergencySuppliesInfoDetailDO emergencySuppliesInfoDetailDO : emergencySuppliesInfoDetailDOList) { EmergencySuppliesCountRespDTO emergencySuppliesCountRespDTO = new EmergencySuppliesCountRespDTO(); // 名称+数量 emergencySuppliesCountRespDTO.setName(emergencySuppliesInfoDetailDO.getName()); emergencySuppliesCountRespDTO.setTotalNum(emergencySuppliesInfoDetailDO.getCount()); // // 保质期内数量 // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化一下 // Date produceDate = emergencySuppliesInfoDetailDO.getProductionDate(); // Integer usePeriod = emergencySuppliesInfoDetailDO.getUsePeriod(); // // String[] arr = sdf.format(produceDate).split("-"); // // Calendar calendar = Calendar.getInstance();//获取对日期操作的类对象 // calendar.clear(); // calendar.set(Calendar.YEAR, Integer.parseInt(arr[0])); // calendar.set(Calendar.MONTH, Integer.parseInt(arr[1])); // calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(arr[2])); // // calendar.set(Calendar.DAY_OF_YEAR,calendar.get(Calendar.DAY_OF_YEAR) +usePeriod); // // Date qualityD = calendar.getTime(); // String time= sdf.format(calendar.getTime()); // System.out.println(time); respList.add(emergencySuppliesCountRespDTO); } } return new SearchResultVO<>( true, pageIndex, pageSize, page.getPages(), page.getTotal(), respList, ResultCodes.OK ); } }