1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179 |
- package com.diagbot.facade;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.diagbot.aggregate.AverageStatisticsAggregate;
- import com.diagbot.aggregate.MrStatisticsAggregate;
- import com.diagbot.aggregate.ResultStatisticsAggregate;
- import com.diagbot.dto.*;
- import com.diagbot.entity.QcCasesEntry;
- import com.diagbot.entity.SysHospitalSet;
- import com.diagbot.exception.CommonErrorCode;
- import com.diagbot.exception.CommonException;
- import com.diagbot.util.*;
- import com.diagbot.vo.*;
- import com.google.common.collect.Lists;
- import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
- import org.apache.ibatis.annotations.Param;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.text.DecimalFormat;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * @Description:
- * @Author:zhaops
- * @time: 2020/4/13 16:45
- */
- @Component
- public class ConsoleFacade {
- @Autowired
- private FilterFacade filterFacade;
- @Autowired
- private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
- @Autowired
- private AverageStatisticsAggregate averageStatisticsAggregate;
- @Autowired
- private MrStatisticsAggregate mrStatisticsAggregate;
- @Autowired
- private ResultStatisticsAggregate resultStatisticsAggregate;
- @Autowired
- private QcresultInfoFacade qcresultInfoFacade;
- @Autowired
- private HomePageFacade homePageFacade;
- @Autowired
- private BehospitalInfoFacade behospitalInfoFacade;
- @Autowired
- private SysHospitalSetFacade sysHospitalSetFacade;
- @Autowired
- private QcCasesEntryFacade qcCasesEntryFacade;
- //region-----------------------聚合接口开始-------------------------------
- /**
- * 病历相关统计
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> mrStatistics(FilterVO filterVO) {
- Map<String, Object> retMap = new LinkedHashMap<>();
- filterFacade.filterVOSet(filterVO);
- try {
- Map<String, Object> invokeParams = new HashMap<>();
- invokeParams.put("filterVO", filterVO);
- retMap
- = dataBeanAggregateQueryFacade.get("setAllMr", invokeParams, Map.class);
- } catch (Exception e) {
- throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
- }
- return retMap;
- }
- /**
- * 缺陷相关统计
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> resultStatistics(FilterVO filterVO) {
- Map<String, Object> retMap = new LinkedHashMap<>();
- filterFacade.filterVOSet(filterVO);
- try {
- Map<String, Object> invokeParams = new HashMap<>();
- invokeParams.put("filterVO", filterVO);
- retMap
- = dataBeanAggregateQueryFacade.get("setAllResult", invokeParams, Map.class);
- } catch (Exception e) {
- throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
- }
- return retMap;
- }
- /**
- * 平局值相关统计
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> averageStatistics(FilterVO filterVO) {
- Map<String, Object> retMap = new LinkedHashMap<>();
- filterFacade.filterVOSet(filterVO);
- try {
- Map<String, Object> invokeParams = new HashMap<>();
- invokeParams.put("filterVO", filterVO);
- retMap
- = dataBeanAggregateQueryFacade.get("setAllAverage", invokeParams, Map.class);
- } catch (Exception e) {
- throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
- }
- return retMap;
- }
- //endregion-----------------------聚合接口结束-------------------------------
- //region-----------------------单独接口开始-------------------------------
- /**
- * 平均住院天数
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> getAverageDayNum(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSet(filterVO);
- List<AverageStatisticsDTO> averageDayNumList = averageStatisticsAggregate.getAverageDayNum(filterVO);
- if (ListUtil.isNotEmpty(averageDayNumList)) {
- retMap.put("平均住院日", averageDayNumList);
- }
- return retMap;
- }
- /**
- * 平均住院费用
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> getAverageFee(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSet(filterVO);
- List<AverageStatisticsDTO> averageFeeList = averageStatisticsAggregate.getAverageFee(filterVO);
- if (ListUtil.isNotEmpty(averageFeeList)) {
- retMap.put("平均住院费用", averageFeeList);
- }
- return retMap;
- }
- /**
- * 质控平均分按科室统计
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> getAverageScore(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSame(filterVO);
- List<AverageStatisticsDTO> averageScoreList = averageStatisticsAggregate.getAverageScore(filterVO);
- AverageStatisticsDTO item = getGlobleAverageTitle(averageScoreList);
- if (item != null) {
- averageScoreList.add(0, item);
- }
- if (ListUtil.isNotEmpty(averageScoreList)) {
- retMap.put("各科室质控平均分", averageScoreList);
- }
- return retMap;
- }
- /**
- * 增加全院记录
- *
- * @param records
- * @return
- */
- public AverageStatisticsDTO getGlobleAverageTitle(List<AverageStatisticsDTO> records) {
- DecimalFormat df = new DecimalFormat("#0.00");
- AverageStatisticsDTO item = new AverageStatisticsDTO();
- if (ListUtil.isEmpty(records)) {
- return null;
- }
- //数量
- Integer num = records
- .stream()
- .map(AverageStatisticsDTO::getNum)
- .reduce(0, Integer::sum);
- //同期数量
- Integer sameNum = records
- .stream()
- .map(AverageStatisticsDTO::getSameNum)
- .reduce(0, Integer::sum);
- Double totleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- Double sameTotleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getSameTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- Double averageValue = 0d;
- if(0 != num){
- averageValue = BigDecimal.valueOf(totleValue)
- .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
- .doubleValue();
- }
- Double lastYearAverageValue = 0d;
- if(0 != sameNum) {
- lastYearAverageValue = BigDecimal.valueOf(sameTotleValue)
- .divide(BigDecimal.valueOf(sameNum), 2, RoundingMode.HALF_UP)
- .doubleValue();
- }
- item.setName("全院");
- item.setNum(num);
- item.setSameNum(sameNum);
- item.setAverageValue(averageValue);
- item.setTotleValue(totleValue);
- item.setSameTotleValue(sameTotleValue);
- item.setLastYearAverageValue(lastYearAverageValue);
- return item;
- }
- /**
- * 各科室质控平均分(首页)-根据内外科系统统计
- *
- * @param filterVO
- * @return
- */
- public List<AverageStatisticsDTO> getAverageScoreByDeptClass(FilterVO filterVO) {
- filterFacade.filterVOSame(filterVO);
- List<AverageStatisticsDTO> retAverageScoreList = Lists.newLinkedList();
- List<AverageStatisticsDTO> averageScoreList = qcresultInfoFacade.getAverageScoreByDeptClass(filterVO);
- Integer limitCount = filterVO.getLimitCount();
- //质控平均分
- if (ListUtil.isNotEmpty(averageScoreList)) {
- retAverageScoreList = averageStatisticsAggregate.getLimitAverageList(averageScoreList, limitCount);
- }
- AverageStatisticsDTO item = getGlobleInOutTitle(retAverageScoreList,filterVO);
- if (item != null) {
- retAverageScoreList.add(0, item);
- }
- return retAverageScoreList;
- }
- /**
- * 增加内外科记录
- *
- * @param records
- * @return
- */
- public AverageStatisticsDTO getGlobleInOutTitle(List<AverageStatisticsDTO> records,FilterVO filterVO) {
- DecimalFormat df = new DecimalFormat("#0.00");
- AverageStatisticsDTO item = new AverageStatisticsDTO();
- if (ListUtil.isEmpty(records)) {
- return null;
- }
- //数量
- Integer num = records
- .stream()
- .map(AverageStatisticsDTO::getNum)
- .reduce(0, Integer::sum);
- //同期数量
- Integer sameNum = records
- .stream()
- .map(AverageStatisticsDTO::getSameNum)
- .reduce(0, Integer::sum);
- Double totleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- Double sameTotleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getSameTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- Double averageValue = 0d;
- if(0 != num){
- averageValue = BigDecimal.valueOf(totleValue)
- .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
- .doubleValue();
- }
- Double lastYearAverageValue = 0d;
- if(0 != sameNum) {
- lastYearAverageValue = BigDecimal.valueOf(sameTotleValue)
- .divide(BigDecimal.valueOf(sameNum), 2, RoundingMode.HALF_UP)
- .doubleValue();
- }
- if("内科".equals(filterVO.getDeptClass())){
- item.setName("内科系统");
- }else{
- item.setName("外科系统");
- }
- item.setNum(num);
- item.setSameNum(sameNum);
- item.setAverageValue(averageValue);
- item.setTotleValue(totleValue);
- item.setSameTotleValue(sameTotleValue);
- item.setLastYearAverageValue(lastYearAverageValue);
- return item;
- }
- /**
- * 各科室甲级病历占比
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> getLevelResultDept(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSet(filterVO);
- List<QcResultPercentDTO> levelResults = mrStatisticsAggregate.getLevelResultDept(filterVO);
- if (ListUtil.isNotEmpty(levelResults)) {
- retMap.put("各科室甲级病历占比", levelResults);
- }
- return retMap;
- }
- /**
- * 出院人数统计
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> leaveHosCount(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSet(filterVO);
- Map<String, Object> leaveHosMap = new HashMap<>();
- try {
- Map<String, Object> invokeParams = new HashMap<>();
- invokeParams.put("filterVO", filterVO);
- leaveHosMap
- = dataBeanAggregateQueryFacade.get("setAllLeaveHos", invokeParams, Map.class);
- } catch (Exception e) {
- throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
- }
- if (leaveHosMap != null) {
- retMap.put("出院人数统计", leaveHosMap);
- }
- return retMap;
- }
- /**
- * 质控病历统计
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> mrCount(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSet(filterVO);
- List<NumDTO> mrCountList = mrStatisticsAggregate.mrCount(filterVO);
- if (ListUtil.isNotEmpty(mrCountList)) {
- retMap.put("病历数统计", mrCountList);
- }
- return retMap;
- }
- /**
- * 各模块缺陷占比排行
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> entryCountGroupByCase(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSet(filterVO);
- List<NumDTO> caseList = resultStatisticsAggregate.entryCountGroupByCase(filterVO);
- if (ListUtil.isNotEmpty(caseList)) {
- retMap.put("各模块缺陷占比排行", caseList);
- }
- return retMap;
- }
- /**
- * 条目缺陷占比
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> entryCountGroupByEntry(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSet(filterVO);
- List<NumDTO> entryList = resultStatisticsAggregate.entryCountGroupByEntry(filterVO);
- if (ListUtil.isNotEmpty(entryList)) {
- retMap.put("条目缺陷占比", entryList);
- }
- return retMap;
- }
- /**
- * 单项否决缺陷占比
- *
- * @param filterVO
- * @return
- */
- public List<EntryNumDTO> entryRejectPercent(FilterVO filterVO) {
- List<EntryNumDTO> retList = Lists.newLinkedList();
- filterFacade.filterVOSet(filterVO);
- Integer limitCount = filterVO.getLimitCount();
- List<EntryNumDTO> numDTOList = qcresultInfoFacade.entryRejectPercent(filterVO);
- if (ListUtil.isNotEmpty(numDTOList)) {
- if (numDTOList.size() <= limitCount) {
- retList = numDTOList;
- } else {
- retList = numDTOList.subList(0, limitCount);
- }
- }
- return retList;
- }
- /**
- * 各科室甲/乙/丙级病历占比
- *
- * @param filterVO
- * @return
- */
- public List<DeptNumDTO> qcResultLevelPercent(FilterVO filterVO) {
- if (StringUtil.isBlank(filterVO.getLevel())) {
- throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入病历等级");
- }
- List<DeptNumDTO> retList = Lists.newLinkedList();
- filterFacade.filterVOSet(filterVO);
- Integer limitCount = filterVO.getLimitCount();
- List<DeptNumDTO> numDTOList = qcresultInfoFacade.qcResultLevelPercent(filterVO);
- if (ListUtil.isNotEmpty(numDTOList)) {
- if (numDTOList.size() <= limitCount) {
- retList = numDTOList;
- } else {
- retList = numDTOList.subList(0, limitCount);
- }
- }
- return retList;
- }
- /**
- * 各科室缺陷占比
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> entryByDept(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- filterFacade.filterVOSet(filterVO);
- List<NumDTO> deptList = resultStatisticsAggregate.entryByDept(filterVO);
- if (ListUtil.isNotEmpty(deptList)) {
- retMap.put("各科室缺陷占比", deptList);
- }
- return retMap;
- }
- //endregion-----------------------单独接口结束-------------------------------
- //region_______________________分页接口开始-------------------------------
- /**
- * 各模块缺陷占比(分页)
- *
- * @param filterPageVO
- * @return
- */
- public IPage<NumDTO> entryCountGroupByCasePage(FilterPageVO filterPageVO) {
- filterFacade.filterPageVOSet(filterPageVO);
- IPage<NumDTO> page = qcresultInfoFacade.entryCountGroupByCasePage(filterPageVO);
- return page;
- }
- /**
- * 缺陷详情(分页)
- *
- * @param filterPageVO
- * @return
- */
- public IPage<EntryNumGroupDTO> entryCountGroupByEntryPage(FilterPageVO filterPageVO) {
- filterFacade.filterPageVOSet(filterPageVO);
- if (filterPageVO.getDeptName().equals("全院")) {
- filterPageVO.setDeptName("");
- }
- IPage<EntryNumGroupDTO> page = qcresultInfoFacade.entryCountGroupByEntryPage(filterPageVO);
- return page;
- }
- /**
- * 按科室统计平均住院天数(分页)
- *
- * @param filterPageByAverageVO
- * @return
- */
- public IPage<AverageStatisticsDTO> getAverageDayNumPage(FilterPageByAverageVO filterPageByAverageVO) {
- filterFacade.filterPageByAverageVOSet(filterPageByAverageVO);
- IPage<AverageStatisticsDTO> page = homePageFacade.getAverageDayNumPage(filterPageByAverageVO);
- return page;
- }
- /**
- * 按科室统计平均住院费用(分页)
- *
- * @param filterPageByAverageVO
- * @return
- */
- public IPage<AverageStatisticsFeeDTO> getAverageFeePage(FilterPageByAverageVO filterPageByAverageVO) {
- filterFacade.filterPageByAverageVOSet(filterPageByAverageVO);
- IPage<AverageStatisticsFeeDTO> page = homePageFacade.getAverageFeePage(filterPageByAverageVO);
- return page;
- }
- /**
- * 各科室质控平均分(分页)
- *
- * @param filterPageVO
- * @return
- */
- public IPage<AverageStatisticsDTO> getAverageScoreByDeptPage(FilterPageVO filterPageVO) {
- filterFacade.filterPageVOSet(filterPageVO);
- IPage<AverageStatisticsDTO> page = qcresultInfoFacade.getAverageScoreByDeptPage(filterPageVO);
- return page;
- }
- /**
- * 各科室缺陷占比排行(分页)
- *
- * @param filterPageVO
- * @return
- */
- public IPage<NumDTO> resultStatisticsByDeptPage(FilterPageVO filterPageVO) {
- filterFacade.filterPageVOSet(filterPageVO);
- IPage<NumDTO> page = behospitalInfoFacade.resultStatisticsByDeptPage(filterPageVO);
- return page;
- }
- /**
- * 各科室甲级病历占比排行(分页)
- *
- * @param filterPageVO
- * @return
- */
- public IPage<QcResultPercentDTO> levelPercentGroupByDeptPage(FilterPageVO filterPageVO) {
- filterFacade.filterPageVOSet(filterPageVO);
- IPage<QcResultPercentDTO> page = qcresultInfoFacade.levelPercentGroupByDeptPage(filterPageVO);
- return page;
- }
- /**
- * 条目缺陷占比(内页)
- *
- * @param filterPageVO
- * @return
- */
- public IPage<EntryNumDTO> entryGroupByEntryInnerPage(FilterPageVO filterPageVO) {
- filterFacade.filterPageVOSet(filterPageVO);
- IPage<EntryNumDTO> page = qcresultInfoFacade.entryGroupByEntryInnerPage(filterPageVO);
- return page;
- }
- //endregion-----------------------分页接口结束-------------------------------
- /**
- * 各科室缺陷占比(组合)
- *
- * @param filterOrderVO
- * @return
- */
- public List<LevelStatisticsDTO> levelStatistics(FilterOrderVO filterOrderVO) {
- filterFacade.filterOrderVOSame(filterOrderVO);
- List<LevelStatisticsDTO> records = behospitalInfoFacade.levelStatistics(filterOrderVO);
- //没有科室过滤时增加全院数据
- if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) {
- LevelStatisticsDTO item = getGlobleTitle(records);
- if (item != null) {
- records.add(0, item);
- }
- }
- if(ListUtil.isNotEmpty(records)){
- for (LevelStatisticsDTO record : records) {
- BigDecimalMethod(record);
- }
- }
- return records;
- }
- /**
- * 各科室缺陷占比(组合)-导出
- *
- * @param filterOrderVO
- * @return
- */
- public List<LevelStatisticsDTO> levelStatisticsStr(FilterOrderVO filterOrderVO) {
- filterFacade.filterOrderVOSame(filterOrderVO);
- List<LevelStatisticsDTO> records = behospitalInfoFacade.levelStatistics(filterOrderVO);
- //没有科室过滤时增加全院数据
- if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) {
- LevelStatisticsDTO item = getGlobleTitle(records);
- if (item != null) {
- records.add(0, item);
- }
- }
- if(ListUtil.isNotEmpty(records)){
- for (LevelStatisticsDTO record : records) {
- BigDecimalStrExport(record);
- }
- }
- return records;
- }
- /**
- * 增加全院记录
- *
- * @param records
- * @return
- */
- public LevelStatisticsDTO getGlobleTitle(List<LevelStatisticsDTO> records) {
- DecimalFormat df = new DecimalFormat("#0.00");
- LevelStatisticsDTO item = new LevelStatisticsDTO();
- if (ListUtil.isEmpty(records)) {
- return null;
- }
- //缺陷总数
- Integer entryNum = records
- .stream()
- .map(LevelStatisticsDTO::getEntryNum)
- .reduce(0, Integer::sum);
- if (entryNum == null || entryNum == 0) {
- return null;
- }
- //同比总数
- Integer sameNum = records
- .stream()
- .map(LevelStatisticsDTO::getSameNum)
- .reduce(0, Integer::sum);
- //质控病历数
- Integer mrNum = records
- .stream()
- .map(LevelStatisticsDTO::getMrNum)
- .reduce(0, Integer::sum);
- //同比病历数
- Integer sameMrNum = records
- .stream()
- .map(LevelStatisticsDTO::getSameMrNum)
- .reduce(0, Integer::sum);
- //质控评分
- Double totleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- //同比质控评分
- Double sameTotleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getSameTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- //质控平均分
- Double averageValue = BigDecimal.valueOf(totleValue)
- .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP)
- .doubleValue();
- Double sameAvgValue = 0d;
- //同比平均分
- if(0d != sameTotleValue){
- sameAvgValue = BigDecimal.valueOf(sameTotleValue)
- .divide(BigDecimal.valueOf(sameMrNum), 2, RoundingMode.HALF_UP)
- .doubleValue();
- }
- //甲级病历数
- Integer firstLevelNum = records
- .stream()
- .map(LevelStatisticsDTO::getFirstLevelNum)
- .reduce(0, Integer::sum);
- //同比甲级病历数
- Integer sameFirstLevelNum = records
- .stream()
- .map(LevelStatisticsDTO::getSameFirstLevelNum)
- .reduce(0, Integer::sum);
- //乙级病历数
- Integer secondLevelNum = records
- .stream()
- .map(LevelStatisticsDTO::getSecondLevelNum)
- .reduce(0, Integer::sum);
- //同比乙级病历数
- Integer sameSecondLevelNum = records
- .stream()
- .map(LevelStatisticsDTO::getSameSecondLevelNum)
- .reduce(0, Integer::sum);
- //丙级病历数
- Integer thirdLevelNum = records
- .stream()
- .map(LevelStatisticsDTO::getThirdLevelNum)
- .reduce(0, Integer::sum);
- //同比丙级病历数
- Integer sameThirdLevelNum = records
- .stream()
- .map(LevelStatisticsDTO::getSameThirdLevelNum)
- .reduce(0, Integer::sum);
- //甲级病历占比
- Double firstLevelPercent = BigDecimal.valueOf(firstLevelNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String firstLevelPercentStr
- = df.format(BigDecimal.valueOf(firstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //同比甲级病历占比
- Double sameFirstLevelPercent = 0d;
- String sameFirstLevelPercentStr = "0.00%";
- if(0 != sameFirstLevelNum ){
- sameFirstLevelPercent = BigDecimal.valueOf(sameFirstLevelNum)
- .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- sameFirstLevelPercentStr
- = df.format(BigDecimal.valueOf(sameFirstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- }
- //乙级病历占比
- Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String secondLevelPercentStr
- = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //同比乙级病历占比
- Double sameSecondLevelPercent = 0d;
- String sameSecondLevelPercentStr = "0.00%";
- if(0 != sameFirstLevelNum ){
- sameSecondLevelPercent = BigDecimal.valueOf(sameSecondLevelNum)
- .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- sameSecondLevelPercentStr
- = df.format(BigDecimal.valueOf(sameSecondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- }
- //丙级病历占比
- Double thirdLevelPercent = BigDecimal.valueOf(thirdLevelNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String thirdLevelPercentStr
- = df.format(BigDecimal.valueOf(thirdLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //同比丙级病历占比
- Double sameThirdLevelPercent = 0d;
- String sameThirdLevelPercentStr = "0.00%";
- if(0 != sameFirstLevelNum ) {
- sameThirdLevelPercent = BigDecimal.valueOf(sameThirdLevelNum)
- .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- sameThirdLevelPercentStr
- = df.format(BigDecimal.valueOf(sameThirdLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- }
- item.setDeptName("全院");
- item.setEntryNum(entryNum);
- item.setSameNum(sameNum);
- item.setMrNum(mrNum);
- item.setSameMrNum(sameMrNum);
- item.setTotleValue(totleValue);
- item.setSameTotleValue(sameTotleValue);
- item.setAverageValue(averageValue);
- item.setSameAvgValue(sameAvgValue);
- item.setFirstLevelNum(firstLevelNum);
- item.setSameFirstLevelNum(sameFirstLevelNum);
- item.setFirstLevelPercent(firstLevelPercent);
- item.setSameFirstLevelPercent(sameFirstLevelPercent);
- item.setFirstLevelPercentStr(firstLevelPercentStr);
- item.setSameFirstLevelPercentStr(sameFirstLevelPercentStr);
- item.setSecondLevelNum(secondLevelNum);
- item.setSameSecondLevelNum(sameSecondLevelNum);
- item.setSecondLevelPercent(secondLevelPercent);
- item.setSameSecondLevelPercent(sameSecondLevelPercent);
- item.setSecondLevelPercentStr(secondLevelPercentStr);
- item.setSameSecondLevelPercentStr(sameSecondLevelPercentStr);
- item.setThirdLevelNum(thirdLevelNum);
- item.setSameThirdLevelNum(sameThirdLevelNum);
- item.setThirdLevelPercent(thirdLevelPercent);
- item.setSameThirdLevelPercent(sameThirdLevelPercent);
- item.setThirdLevelPercentStr(thirdLevelPercentStr);
- item.setSameThirdLevelPercentStr(sameThirdLevelPercentStr);
- return item;
- }
- /**
- * 各科室缺陷占比(组合)-全院-根据内外科系统统计(台州)-导出
- *
- * @param filterOrderVO
- * @return
- */
- public List<LevelStatisticsTZDTO> levelStatisticsByDeptStr_TZ(FilterOrderVO filterOrderVO) {
- filterFacade.filterOrderVOSame(filterOrderVO);
- List<LevelStatisticsTZDTO> records = behospitalInfoFacade.levelStatisticsByDeptClass_TZ(filterOrderVO);
- if( StringUtil.isBlank(filterOrderVO.getDeptName())){
- LevelStatisticsTZDTO item = getGlobleRecords(records,filterOrderVO);
- if (item != null) {
- records.add(0, item);
- }
- }
- if(ListUtil.isNotEmpty(records)){
- for (LevelStatisticsTZDTO record : records) {
- BigDecimalStrExport(record);
- }
- }
- return records;
- }
- /**
- * 各科室缺陷占比(组合)-全院-根据内外科系统统计(台州)
- *
- * @param filterOrderVO
- * @return
- */
- public List<LevelStatisticsTZDTO> levelStatisticsByDeptClass_TZ(FilterOrderVO filterOrderVO) {
- filterFacade.filterOrderVOSame(filterOrderVO);
- List<LevelStatisticsTZDTO> records = behospitalInfoFacade.levelStatisticsByDeptClass_TZ(filterOrderVO);
- if( StringUtil.isBlank(filterOrderVO.getDeptName())){
- LevelStatisticsTZDTO item = getGlobleRecords(records,filterOrderVO);
- if (item != null) {
- records.add(0, item);
- }
- }
- if(ListUtil.isNotEmpty(records)){
- for (LevelStatisticsTZDTO record : records) {
- BigDecimalMethod(record);
- }
- }
- return records;
- }
- /**
- * 增加全院记录
- *
- * @param records
- * @return
- */
- public LevelStatisticsTZDTO getGlobleRecords(List<LevelStatisticsTZDTO> records,FilterOrderVO filterOrderVO) {
- DecimalFormat df = new DecimalFormat("#0.00");
- LevelStatisticsTZDTO item = new LevelStatisticsTZDTO();
- if (ListUtil.isEmpty(records)) {
- return null;
- }
- //缺陷总数
- Integer entryNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getEntryNum)
- .reduce(0, Integer::sum);
- if (entryNum == null || entryNum == 0) {
- return null;
- }
- //同比总数
- Integer sameNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getSameNum)
- .reduce(0, Integer::sum);
- //质控病历数
- Integer mrNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getMrNum)
- .reduce(0, Integer::sum);
- //同比病历数
- Integer sameMrNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getSameMrNum)
- .reduce(0, Integer::sum);
- //质控评分
- Double totleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- //同比质控评分
- Double sameTotleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getSameTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- //质控平均分
- Double averageValue = BigDecimal.valueOf(totleValue)
- .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP)
- .doubleValue();
- Double sameAvgValue = 0d;
- //同比平均分
- if(0d != sameTotleValue){
- sameAvgValue = BigDecimal.valueOf(sameTotleValue)
- .divide(BigDecimal.valueOf(sameMrNum), 2, RoundingMode.HALF_UP)
- .doubleValue();
- }
- //甲级病历数
- Integer firstLevelNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getFirstLevelNum)
- .reduce(0, Integer::sum);
- //同比甲级病历数
- Integer sameFirstLevelNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getSameFirstLevelNum)
- .reduce(0, Integer::sum);
- //乙级病历数
- Integer secondLevelNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getSecondLevelNum)
- .reduce(0, Integer::sum);
- //同比乙级病历数
- Integer sameSecondLevelNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getSameSecondLevelNum)
- .reduce(0, Integer::sum);
- //丙级病历数
- Integer thirdLevelNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getThirdLevelNum)
- .reduce(0, Integer::sum);
- //同比丙级病历数
- Integer sameThirdLevelNum = records
- .stream()
- .map(LevelStatisticsTZDTO::getSameThirdLevelNum)
- .reduce(0, Integer::sum);
- //甲级病历占比
- Double firstLevelPercent = BigDecimal.valueOf(firstLevelNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String firstLevelPercentStr
- = df.format(BigDecimal.valueOf(firstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //同比甲级病历占比
- Double sameFirstLevelPercent = 0d;
- String sameFirstLevelPercentStr = "0.00%";
- if(0 != sameFirstLevelNum ){
- sameFirstLevelPercent = BigDecimal.valueOf(sameFirstLevelNum)
- .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- sameFirstLevelPercentStr
- = df.format(BigDecimal.valueOf(sameFirstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- }
- //乙级病历占比
- Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String secondLevelPercentStr
- = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //同比乙级病历占比
- Double sameSecondLevelPercent = 0d;
- String sameSecondLevelPercentStr = "0.00%";
- if(0 != sameFirstLevelNum ){
- sameSecondLevelPercent = BigDecimal.valueOf(sameSecondLevelNum)
- .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- sameSecondLevelPercentStr
- = df.format(BigDecimal.valueOf(sameSecondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- }
- //丙级病历占比
- Double thirdLevelPercent = BigDecimal.valueOf(thirdLevelNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String thirdLevelPercentStr
- = df.format(BigDecimal.valueOf(thirdLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //同比丙级病历占比
- Double sameThirdLevelPercent = 0d;
- String sameThirdLevelPercentStr = "0.00%";
- if(0 != sameFirstLevelNum ) {
- sameThirdLevelPercent = BigDecimal.valueOf(sameThirdLevelNum)
- .divide(BigDecimal.valueOf(sameMrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- sameThirdLevelPercentStr
- = df.format(BigDecimal.valueOf(sameThirdLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- }
- if (StringUtil.isBlank(filterOrderVO.getDeptClass()) || filterOrderVO.getDeptClass().equals("全院")) {
- item.setDeptName("全院");
- }else if("内科".equals(filterOrderVO.getDeptClass())){
- item.setDeptClassId("01");
- item.setDeptClass("内科");
- item.setDeptName("全部科室");
- }else if("外科".equals(filterOrderVO.getDeptClass())){
- item.setDeptClassId("1030000");
- item.setDeptClass("外科");
- item.setDeptName("全部科室");
- }
- item.setEntryNum(entryNum);
- item.setSameNum(sameNum);
- item.setMrNum(mrNum);
- item.setSameMrNum(sameMrNum);
- item.setTotleValue(totleValue);
- item.setSameTotleValue(sameTotleValue);
- item.setAverageValue(averageValue);
- item.setSameAvgValue(sameAvgValue);
- item.setFirstLevelNum(firstLevelNum);
- item.setSameFirstLevelNum(sameFirstLevelNum);
- item.setFirstLevelPercent(firstLevelPercent);
- item.setSameFirstLevelPercent(sameFirstLevelPercent);
- item.setFirstLevelPercentStr(firstLevelPercentStr);
- item.setSameFirstLevelPercentStr(sameFirstLevelPercentStr);
- item.setSecondLevelNum(secondLevelNum);
- item.setSameSecondLevelNum(sameSecondLevelNum);
- item.setSecondLevelPercent(secondLevelPercent);
- item.setSameSecondLevelPercent(sameSecondLevelPercent);
- item.setSecondLevelPercentStr(secondLevelPercentStr);
- item.setSameSecondLevelPercentStr(sameSecondLevelPercentStr);
- item.setThirdLevelNum(thirdLevelNum);
- item.setSameThirdLevelNum(sameThirdLevelNum);
- item.setThirdLevelPercent(thirdLevelPercent);
- item.setSameThirdLevelPercent(sameThirdLevelPercent);
- item.setThirdLevelPercentStr(thirdLevelPercentStr);
- item.setSameThirdLevelPercentStr(sameThirdLevelPercentStr);
- return item;
- }
- public void BigDecimalStrExport(LevelStatisticsDTO record){
- BigDecimal entrySameBigDecimal = getSubtract(new BigDecimal(record.getEntryNum()), new BigDecimal(record.getSameNum() == null? 0:record.getSameNum()));
- if(entrySameBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setEntryStrNum(record.getEntryNum()+"↑");
- }else if(entrySameBigDecimal.compareTo(BigDecimal.ZERO) <0){
- record.setEntryStrNum(record.getEntryNum()+"↓");
- }
- BigDecimal sameMrNumBigDecimal = getSubtract(new BigDecimal(record.getMrNum()), new BigDecimal(record.getSameMrNum() == null? 0:record.getSameMrNum()));
- if(sameMrNumBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setMrStrNum(record.getMrNum()+"↑");
- }else if(sameMrNumBigDecimal.compareTo(BigDecimal.ZERO) <0){
- record.setMrStrNum(record.getMrNum()+"↓");
- }
- BigDecimal sameAvgValueDecimal = getSubtract(new BigDecimal(record.getAverageValue()), new BigDecimal(record.getSameAvgValue() == null? 0:record.getSameAvgValue()));
- if(sameAvgValueDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setAverageStrValue(record.getAverageValue()+"↑");
- }else if(sameAvgValueDecimal.compareTo(BigDecimal.ZERO) <0){
- record.setAverageStrValue(record.getAverageValue()+"↓");
- }
- BigDecimal SameFirstLevelBigDecimal = getSubtract(new BigDecimal(record.getFirstLevelNum()), new BigDecimal(record.getSameFirstLevelNum() == null? 0:record.getSameFirstLevelNum()));
- if(SameFirstLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setFirstLevelStrNum(record.getFirstLevelNum()+"↑");
- }else if(SameFirstLevelBigDecimal.compareTo(BigDecimal.ZERO) <0){
- record.setFirstLevelStrNum(record.getFirstLevelNum()+"↓");
- }
- BigDecimal SameSecondLevelBigDecimal = getSubtract(new BigDecimal(record.getSecondLevelNum()), new BigDecimal(record.getSameSecondLevelNum() == null? 0:record.getSameSecondLevelNum()));
- if(SameSecondLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setSecondLevelStrNum(record.getSecondLevelNum()+"↑");
- }else if(SameSecondLevelBigDecimal.compareTo(BigDecimal.ZERO) <0){
- record.setSecondLevelStrNum(record.getSecondLevelNum()+"↓");
- }
- BigDecimal SameThirdLevelBigDecimal = getSubtract(new BigDecimal(record.getThirdLevelNum()), new BigDecimal(record.getSameThirdLevelNum() == null? 0:record.getSameThirdLevelNum()));
- if(SameThirdLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setThirdLevelStrNum(record.getThirdLevelNum()+"↑");
- }else if(SameThirdLevelBigDecimal.compareTo(BigDecimal.ZERO) <0){
- record.setThirdLevelStrNum(record.getThirdLevelNum()+"↓");
- }
- BigDecimal SameFirstLevelPeDecimal = getSubtract(new BigDecimal(record.getFirstLevelPercent()), new BigDecimal(record.getSameFirstLevelPercent() == null? 0:record.getSameFirstLevelPercent()));
- if(SameFirstLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setFirstLevelPercentStr(record.getFirstLevelPercentStr()+"↑");
- }else if(SameFirstLevelPeDecimal.compareTo(BigDecimal.ZERO) <0){
- record.setFirstLevelPercentStr(record.getFirstLevelPercentStr()+"↓");
- }
- BigDecimal SameSecondLevelPeDecimal = getSubtract(new BigDecimal(record.getSecondLevelPercent()), new BigDecimal(record.getSameSecondLevelPercent() == null? 0:record.getSameSecondLevelPercent()));
- if(SameSecondLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setSecondLevelPercentStr(record.getSecondLevelPercentStr()+"↑");
- }else if(SameSecondLevelPeDecimal.compareTo(BigDecimal.ZERO)<0){
- record.setSecondLevelPercentStr(record.getSecondLevelPercentStr()+"↓");
- }
- BigDecimal SameThirdLevelPeDecimal = getSubtract(new BigDecimal(record.getThirdLevelPercent()), new BigDecimal(record.getSameThirdLevelPercent() == null? 0:record.getSameThirdLevelPercent()));
- if(SameThirdLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setThirdLevelPercentStr(record.getThirdLevelPercentStr()+"↑");
- }else if(SameThirdLevelPeDecimal.compareTo(BigDecimal.ZERO) <0){
- record.setThirdLevelPercentStr(record.getThirdLevelPercentStr()+"↓");
- }
- };
- public void BigDecimalMethod(LevelStatisticsDTO record){
- BigDecimal entrySameBigDecimal = getSubtract(new BigDecimal(record.getEntryNum()), new BigDecimal(record.getSameNum() == null? 0:record.getSameNum()));
- if(entrySameBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setEntrySameNum(1);
- }else if(entrySameBigDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setEntrySameNum(0);
- }else{
- record.setEntrySameNum(-1);
- }
- BigDecimal sameMrNumBigDecimal = getSubtract(new BigDecimal(record.getMrNum()), new BigDecimal(record.getSameMrNum() == null? 0:record.getSameMrNum()));
- if(sameMrNumBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setMrSameNum(1);
- }else if(sameMrNumBigDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setMrSameNum(0);
- }else{
- record.setMrSameNum(-1);
- }
- BigDecimal sameAvgValueDecimal = getSubtract(new BigDecimal(record.getAverageValue()), new BigDecimal(record.getSameAvgValue() == null? 0:record.getSameAvgValue()));
- if(sameAvgValueDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setAvSameValue(1);
- }else if(sameAvgValueDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setAvSameValue(0);
- }else{
- record.setAvSameValue(-1);
- }
- BigDecimal SameFirstLevelBigDecimal = getSubtract(new BigDecimal(record.getFirstLevelNum()), new BigDecimal(record.getSameFirstLevelNum() == null? 0:record.getSameFirstLevelNum()));
- if(SameFirstLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setFirSameLevelNum(1);
- }else if(SameFirstLevelBigDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setFirSameLevelNum(0);
- }else{
- record.setFirSameLevelNum(-1);
- }
- BigDecimal SameSecondLevelBigDecimal = getSubtract(new BigDecimal(record.getSecondLevelNum()), new BigDecimal(record.getSameSecondLevelNum() == null? 0:record.getSameSecondLevelNum()));
- if(SameSecondLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setSecSameLevelNum(1);
- }else if(SameSecondLevelBigDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setSecSameLevelNum(0);
- }else{
- record.setSecSameLevelNum(-1);
- }
- BigDecimal SameThirdLevelBigDecimal = getSubtract(new BigDecimal(record.getThirdLevelNum()), new BigDecimal(record.getSameThirdLevelNum() == null? 0:record.getSameThirdLevelNum()));
- if(SameThirdLevelBigDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setThiSameLevelNum(1);
- }else if(SameThirdLevelBigDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setThiSameLevelNum(0);
- }else{
- record.setThiSameLevelNum(-1);
- }
- BigDecimal SameFirstLevelPeDecimal = getSubtract(new BigDecimal(record.getFirstLevelPercent()), new BigDecimal(record.getSameFirstLevelPercent() == null? 0:record.getSameFirstLevelPercent()));
- if(SameFirstLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setFirSameLevelPercent(1);
- }else if(SameFirstLevelPeDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setFirSameLevelPercent(0);
- }else{
- record.setFirSameLevelPercent(-1);
- }
- BigDecimal SameSecondLevelPeDecimal = getSubtract(new BigDecimal(record.getSecondLevelPercent()), new BigDecimal(record.getSameSecondLevelPercent() == null? 0:record.getSameSecondLevelPercent()));
- if(SameSecondLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setSecSameLevelPercent(1);
- }else if(SameSecondLevelPeDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setSecSameLevelPercent(0);
- }else{
- record.setSecSameLevelPercent(-1);
- }
- BigDecimal SameThirdLevelPeDecimal = getSubtract(new BigDecimal(record.getThirdLevelPercent()), new BigDecimal(record.getSameThirdLevelPercent() == null? 0:record.getSameThirdLevelPercent()));
- if(SameThirdLevelPeDecimal.compareTo(BigDecimal.ZERO)>0){
- record.setThiSameLevelPercent(1);
- }else if(SameThirdLevelPeDecimal.compareTo(BigDecimal.ZERO) == 0){
- record.setThiSameLevelPercent(0);
- }else{
- record.setThiSameLevelPercent(-1);
- }
- };
- /**
- * 差值计算
- *
- * @param bigDecimalOne
- * @param bigDecimalTwo
- * @return
- */
- private BigDecimal getSubtract(BigDecimal bigDecimalOne, BigDecimal bigDecimalTwo) {
- BigDecimal newBigDecimal = new BigDecimal(0);
- if (null == bigDecimalOne && null != bigDecimalTwo) {
- newBigDecimal = newBigDecimal.subtract(bigDecimalTwo);
- } else if (null != bigDecimalOne && null == bigDecimalTwo) {
- newBigDecimal = bigDecimalOne.subtract(newBigDecimal);
- } else if (null != bigDecimalOne && null != bigDecimalTwo) {
- newBigDecimal = bigDecimalOne.subtract(bigDecimalTwo);
- }
- return newBigDecimal;
- }
- /**
- * 病案首页合格率占比
- *
- * @param filterOrderVO
- * @return
- */
- public List<HomePageNumDTO> homePageLevelStatistics(FilterOrderVO filterOrderVO) {
- filterFacade.filterOrderVOSet(filterOrderVO);
- List<HomePageNumDTO> records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO);
- //没有科室过滤时增加全院数据
- if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) {
- HomePageNumDTO item = getGlobleRecord(records);
- if (item != null) {
- records.add(0, item);
- }
- }
- return records;
- }
- /**
- * 病案首页合格率占比
- *
- * @param filterOrderVO
- * @return
- */
- public List<HomePageNumDTO> homePageLevelLimit(FilterOrderVO filterOrderVO) {
- filterFacade.filterOrderVOSet(filterOrderVO);
- List<HomePageNumDTO> records = behospitalInfoFacade.homePageLevelStatistics(filterOrderVO);
- HomePageNumDTO item = getGlobleRecord(records);
- if (item != null) {
- records.add(0, item);
- }
- records = records
- .stream()
- .limit(filterOrderVO.getLimitCount())
- .collect(Collectors.toList());
- return records;
- }
- /**
- * 增加全院记录
- *
- * @param records
- * @return
- */
- public HomePageNumDTO getGlobleRecord(List<HomePageNumDTO> records) {
- DecimalFormat df = new DecimalFormat("#0.00");
- HomePageNumDTO item = new HomePageNumDTO();
- if (ListUtil.isEmpty(records)) {
- return null;
- }
- //总病历数
- Integer mrNum = records
- .stream()
- .map(HomePageNumDTO::getMrNum)
- .reduce(0, Integer::sum);
- if (mrNum == null || mrNum == 0) {
- return null;
- }
- //总缺陷数
- Integer entryNum = records
- .stream()
- .map(HomePageNumDTO::getEntryNum)
- .reduce(0, Integer::sum);
- //总分
- Double totleValue = records
- .stream()
- .map(i -> BigDecimal.valueOf(i.getTotleValue()))
- .reduce(BigDecimal.ZERO, BigDecimal::add)
- .doubleValue();
- //平均分
- Double averageValue = BigDecimal.valueOf(totleValue)
- .divide(BigDecimal.valueOf(mrNum), 2, RoundingMode.HALF_UP)
- .doubleValue();
- //合格病历总数
- Integer firstLevelNum = records
- .stream()
- .map(HomePageNumDTO::getFirstLevelNum)
- .reduce(0, Integer::sum);
- //合格病历占比
- Double firstLevelPercent = BigDecimal.valueOf(firstLevelNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String firstLevelPercentStr
- = df.format(BigDecimal.valueOf(firstLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //不合格病历数
- Integer secondLevelNum = records
- .stream()
- .map(HomePageNumDTO::getSecondLevelNum)
- .reduce(0, Integer::sum);
- //不合格病历占比
- Double secondLevelPercent = BigDecimal.valueOf(secondLevelNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String secondLevelPercentStr
- = df.format(BigDecimal.valueOf(secondLevelPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //条目缺陷总数(模块下条目*病历数)
- Integer entryTotleNum = records
- .stream()
- .map(HomePageNumDTO::getEntryTotleNum)
- .reduce(0, Integer::sum);
- //空项总数
- Integer emptyNum = records
- .stream()
- .map(HomePageNumDTO::getEmptyNum)
- .reduce(0, Integer::sum);
- Double emptyPercent = BigDecimal.valueOf(entryTotleNum - emptyNum)
- .divide(BigDecimal.valueOf(entryTotleNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String emptyPercentStr
- = df.format(BigDecimal.valueOf(emptyPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //错误项总数
- Integer errorNum = records
- .stream()
- .map(HomePageNumDTO::getErrorNum)
- .reduce(0, Integer::sum);
- Double errorPercent = BigDecimal.valueOf(entryTotleNum - errorNum)
- .divide(BigDecimal.valueOf(entryTotleNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String errorPercentStr
- = df.format(BigDecimal.valueOf(errorPercent).multiply(BigDecimal.valueOf(100))) + "%";
- item.setDeptName("全院");
- item.setEntryNum(entryNum);
- item.setMrNum(mrNum);
- item.setTotleValue(totleValue);
- item.setAverageValue(averageValue);
- item.setFirstLevelNum(firstLevelNum);
- item.setFirstLevelPercent(firstLevelPercent);
- item.setFirstLevelPercentStr(firstLevelPercentStr);
- item.setSecondLevelNum(secondLevelNum);
- item.setSecondLevelPercent(secondLevelPercent);
- item.setSecondLevelPercentStr(secondLevelPercentStr);
- item.setEntryTotleNum(entryTotleNum);
- item.setEmptyNum(emptyNum);
- item.setEmptyPercent(emptyPercent);
- item.setEmptyPercentStr(emptyPercentStr);
- item.setErrorNum(errorNum);
- item.setErrorPercent(errorPercent);
- item.setErrorPercentStr(errorPercentStr);
- return item;
- }
- /**
- * 条目缺陷质控评分页(内页)
- *
- * @param qcResultShortPageVO
- * @return
- */
- public IPage<QcResultShortDTO> qcResultShortPage(QcResultShortPageVO qcResultShortPageVO) {
- filterFacade.qcResultShortPageVOSet(qcResultShortPageVO);
- IPage<QcResultShortDTO> page = behospitalInfoFacade.qcResultShortPage(qcResultShortPageVO);
- return page;
- }
- /**
- * 关键条目缺陷占比统计
- *
- * @param entryStatisticsVO
- * @return
- */
- public List<EntryStatisticsDTO> entryStatistics(EntryStatisticsVO entryStatisticsVO) {
- filterFacade.entryStatisticsVOSet(entryStatisticsVO);
- if (entryStatisticsVO.getDeptName().equals("全院")) {
- entryStatisticsVO.setDeptName("");
- }
- List<EntryStatisticsDTO> records = behospitalInfoFacade.entryStatistics(entryStatisticsVO);
- //增加全院数据
- if (entryStatisticsVO.getDeptName().equals("")) {
- EntryStatisticsDTO record = getEntryGlobleRecord(records);
- if (record != null) {
- records.add(0, record);
- }
- }
- return records;
- }
- /**
- * 关键条目缺陷占比统计增加全院记录
- *
- * @param records
- * @return
- */
- private EntryStatisticsDTO getEntryGlobleRecord(List<EntryStatisticsDTO> records) {
- DecimalFormat df = new DecimalFormat("#0.00");
- if (ListUtil.isEmpty(records)) {
- return null;
- }
- EntryStatisticsDTO record = new EntryStatisticsDTO();
- record.setDeptName("全院");
- //未在24小时内完成会诊
- Integer consultationNum = records
- .stream()
- .map(EntryStatisticsDTO::getConsultationNum)
- .reduce(0, Integer::sum);
- record.setConsultationNum(consultationNum);
- record.setConsultationEntryId(records.get(0).getConsultationEntryId());
- Integer consultationMRNum = records
- .stream()
- .map(EntryStatisticsDTO::getConsultationMRNum)
- .reduce(0, Integer::sum);
- record.setConsultationMRNum(consultationMRNum);
- if (consultationMRNum != null && !consultationMRNum.equals(0)) {
- Double consultationPercent = BigDecimal.valueOf(consultationNum)
- .divide(BigDecimal.valueOf(consultationMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String consultationPercentStr
- = df.format(BigDecimal.valueOf(consultationPercent).multiply(BigDecimal.valueOf(100))) + "%";
- record.setConsultationPercent(consultationPercent);
- record.setConsultationPercentStr(consultationPercentStr);
- }
- //手术记录名称不匹配
- Integer operationNameNum = records
- .stream()
- .map(EntryStatisticsDTO::getOperationNameNum)
- .reduce(0, Integer::sum);
- record.setOperationNameNum(operationNameNum);
- record.setOperationNameEntryId(records.get(0).getOperationNameEntryId());
- Integer operationMRNum = records
- .stream()
- .map(EntryStatisticsDTO::getOperationMRNum)
- .reduce(0, Integer::sum);
- record.setOperationMRNum(operationMRNum);
- if (operationMRNum != null && !operationMRNum.equals(0)) {
- Double operationNamePercent = BigDecimal.valueOf(operationNameNum)
- .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String operationNamePercentStr
- = df.format(BigDecimal.valueOf(operationNamePercent).multiply(BigDecimal.valueOf(100))) + "%";
- record.setOperationNamePercent(operationNamePercent);
- record.setOperationNamePercentStr(operationNamePercentStr);
- }
- //术后首程未在15分钟内完成
- Integer operation15MinuteNum = records
- .stream()
- .map(EntryStatisticsDTO::getOperation15MinuteNum)
- .reduce(0, Integer::sum);
- record.setOperation15MinuteNum(operation15MinuteNum);
- record.setOperation15MinuteEntryId(records.get(0).getOperation15MinuteEntryId());
- if (operationMRNum != null && !operationMRNum.equals(0)) {
- Double operation15MinutePercent = BigDecimal.valueOf(operation15MinuteNum)
- .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String operation15MinutePercentStr
- = df.format(BigDecimal.valueOf(operation15MinutePercent).multiply(BigDecimal.valueOf(100))) + "%";
- record.setOperation15MinutePercent(operation15MinutePercent);
- record.setOperation15MinutePercentStr(operation15MinutePercentStr);
- }
- //病案首页手术时间不匹配
- Integer operationTimeNum = records
- .stream()
- .map(EntryStatisticsDTO::getOperationTimeNum)
- .reduce(0, Integer::sum);
- record.setOperationTimeNum(operationTimeNum);
- record.setOperationTimeEntryId(records.get(0).getOperationTimeEntryId());
- if (operationMRNum != null && !operationMRNum.equals(0)) {
- Double operationTimePercent = BigDecimal.valueOf(operationTimeNum)
- .divide(BigDecimal.valueOf(operationMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String operationTimePercentStr
- = df.format(BigDecimal.valueOf(operationTimePercent).multiply(BigDecimal.valueOf(100))) + "%";
- record.setOperationTimePercent(operationTimePercent);
- record.setOperationTimePercentStr(operationTimePercentStr);
- }
- //未在6小时内书写危机值记录
- Integer crisisNum = records
- .stream()
- .map(EntryStatisticsDTO::getCrisisNum)
- .reduce(0, Integer::sum);
- record.setCrisisNum(crisisNum);
- record.setCrisisEntryId(records.get(0).getCrisisEntryId());
- Integer crisisMRNum = records
- .stream()
- .map(EntryStatisticsDTO::getCrisisMRNum)
- .reduce(0, Integer::sum);
- record.setCrisisMRNum(crisisMRNum);
- if (crisisMRNum != null && !crisisMRNum.equals(0)) {
- Double crisisPercent = BigDecimal.valueOf(crisisNum)
- .divide(BigDecimal.valueOf(crisisMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String crisisPercentStr
- = df.format(BigDecimal.valueOf(crisisPercent).multiply(BigDecimal.valueOf(100))) + "%";
- record.setCrisisPercent(crisisPercent);
- record.setCrisisPercentStr(crisisPercentStr);
- }
- //病人住院超过30天,阶段小节书写
- Integer stageSummaryNum = records
- .stream()
- .map(EntryStatisticsDTO::getStageSummaryNum)
- .reduce(0, Integer::sum);
- record.setStageSummaryNum(stageSummaryNum);
- record.setStageSummaryEntryId(records.get(0).getStageSummaryEntryId());
- Integer stageSummaryMRNum = records
- .stream()
- .map(EntryStatisticsDTO::getStageSummaryMRNum)
- .reduce(0, Integer::sum);
- record.setStageSummaryMRNum(stageSummaryMRNum);
- if (stageSummaryMRNum != null && !stageSummaryMRNum.equals(0)) {
- Double stageSummaryPercent = BigDecimal.valueOf(stageSummaryNum)
- .divide(BigDecimal.valueOf(stageSummaryMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String stageSummaryPercentStr
- = df.format(BigDecimal.valueOf(stageSummaryPercent).multiply(BigDecimal.valueOf(100))) + "%";
- record.setStageSummaryPercent(stageSummaryPercent);
- record.setStageSummaryPercentStr(stageSummaryPercentStr);
- }
- //住院超过31日病人数
- Integer beHosGT31DaysMRNum = records
- .stream()
- .map(EntryStatisticsDTO::getBeHosGT31DaysMRNum)
- .reduce(0, Integer::sum);
- record.setBeHosGT31DaysMRNum(beHosGT31DaysMRNum);
- return record;
- }
- /**
- * 病案首页合格率、完整率、改善率统计
- *
- * @param filterVO
- * @return
- */
- public Map<String, Object> homePageMRCount(FilterVO filterVO) {
- Map<String, Object> retMap = new HashMap<>();
- retMap.put("合格率", null);
- retMap.put("不合格率", null);
- retMap.put("完整率", null);
- retMap.put("改善率", null);
- filterFacade.filterVOSet(filterVO);
- try {
- Map<String, Object> invokeParams = new HashMap<>();
- invokeParams.put("filterVO", filterVO);
- retMap
- = dataBeanAggregateQueryFacade.get("setAllHomePage", invokeParams, Map.class);
- } catch (Exception e) {
- throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
- }
- return retMap;
- }
- /**
- * 离院病人质控评分详情页
- *
- * @param qcResultShortPageVO
- * @return
- */
- public IPage<QcResultShortDTO> leaveHosMRPage(QcResultShortPageVO qcResultShortPageVO) {
- filterFacade.qcResultShortPageVOSet(qcResultShortPageVO);
- IPage<QcResultShortDTO> page = behospitalInfoFacade.leaveHosMRPage(qcResultShortPageVO);
- return page;
- }
- /**
- * 质控核查统计(内页)
- *
- * @param filterOrderVO
- * @return
- */
- public List<HomePageImproveDTO> qcCheckStatistics(FilterOrderVO filterOrderVO) {
- filterFacade.filterOrderVOSet(filterOrderVO);
- List<HomePageImproveDTO> records = behospitalInfoFacade.qcCheckStatistics(filterOrderVO);
- //增加全院数据
- if (StringUtil.isBlank(filterOrderVO.getDeptName()) || filterOrderVO.getDeptName().equals("全院")) {
- HomePageImproveDTO item = getGlobleRecord_improve(records);
- if (item != null) {
- records.add(0, item);
- }
- }
- return records;
- }
- /**
- * 增加全院记录
- *
- * @param records
- * @return
- */
- public HomePageImproveDTO getGlobleRecord_improve(List<HomePageImproveDTO> records) {
- DecimalFormat df = new DecimalFormat("#0.00");
- HomePageImproveDTO item = new HomePageImproveDTO();
- if (ListUtil.isEmpty(records)) {
- return null;
- }
- item.setDeptName("全院");
- //总病历数
- Integer mrNum = records
- .stream()
- .map(HomePageImproveDTO::getMrNum)
- .reduce(0, Integer::sum);
- if (mrNum == null || mrNum == 0) {
- return null;
- }
- item.setMrNum(mrNum);
- //核查病历数
- Integer checkedNum = records
- .stream()
- .map(HomePageImproveDTO::getCheckedNum)
- .reduce(0, Integer::sum);
- item.setCheckedNum(checkedNum);
- if (mrNum != null && !mrNum.equals(0)) {
- //核查病历占比
- Double checkedPercent = BigDecimal.valueOf(checkedNum)
- .divide(BigDecimal.valueOf(mrNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String checkedPercentStr
- = df.format(BigDecimal.valueOf(checkedPercent).multiply(BigDecimal.valueOf(100))) + "%";
- item.setCheckedPercent(checkedPercent);
- item.setCheckedPercentStr(checkedPercentStr);
- }
- //带病案首页的病历数
- Integer homePageMRNum = records
- .stream()
- .map(HomePageImproveDTO::getHomePageMRNum)
- .reduce(0, Integer::sum);
- item.setHomePageMRNum(homePageMRNum);
- if (homePageMRNum == null || homePageMRNum.equals(0)) {
- return item;
- }
- //改善病历数
- Integer improveNum = records
- .stream()
- .map(HomePageImproveDTO::getImproveNum)
- .reduce(0, Integer::sum);
- //改善率
- Double improvePercent = BigDecimal.valueOf(improveNum)
- .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String improvePercentStr
- = df.format(BigDecimal.valueOf(improvePercent).multiply(BigDecimal.valueOf(100))) + "%";
- //改善至合格病历数
- Integer improveToPassNum = records
- .stream()
- .map(HomePageImproveDTO::getImproveToPassNum)
- .reduce(0, Integer::sum);
- //改善至合格占比
- Double improveToPassPercent = BigDecimal.valueOf(improveToPassNum)
- .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String improveToPassPercentStr
- = df.format(BigDecimal.valueOf(improveToPassPercent).multiply(BigDecimal.valueOf(100))) + "%";
- //改善至满分病历数
- Integer improveToFullNum = records
- .stream()
- .map(HomePageImproveDTO::getImproveToFullNum)
- .reduce(0, Integer::sum);
- //改善至满分占比
- Double improveToFullPercent = BigDecimal.valueOf(improveToFullNum)
- .divide(BigDecimal.valueOf(homePageMRNum), 4, RoundingMode.HALF_UP)
- .doubleValue();
- String improveToFullPercentStr
- = df.format(BigDecimal.valueOf(improveToFullPercent).multiply(BigDecimal.valueOf(100))) + "%";
- item.setImproveNum(improveNum);
- item.setImprovePercent(improvePercent);
- item.setImprovePercentStr(improvePercentStr);
- item.setImproveToPassNum(improveToPassNum);
- item.setImproveToPassPercent(improveToPassPercent);
- item.setImproveToPassPercentStr(improveToPassPercentStr);
- item.setImproveToFullNum(improveToFullNum);
- item.setImproveToFullPercent(improveToFullPercent);
- item.setImproveToFullPercentStr(improveToFullPercentStr);
- return item;
- }
- /**
- * 未整改病历统计
- *
- * @param filterUnModifyMRVO
- * @return
- */
- public UnModifyMRDTO unModifyMRStatistics(FilterUnModifyMRVO filterUnModifyMRVO) {
- UnModifyMRDTO unModifyMRDTO = new UnModifyMRDTO();
- List<Object> retList = Lists.newLinkedList();
- filterFacade.filterUnModifyMRVOSet(filterUnModifyMRVO);
- //colums
- QueryWrapper<SysHospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
- hospitalSetQueryWrapper.eq("is_deleted", 'N')
- .eq("hospital_id", filterUnModifyMRVO.getHospitalId())
- .eq("code", "unmodify_mr_entry");
- SysHospitalSet hospitalSet = sysHospitalSetFacade.getOne(hospitalSetQueryWrapper);
- if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getValue())) {
- return unModifyMRDTO;
- }
- //表头生成
- List<String> columnSet = Arrays.asList(hospitalSet.getValue().split(","));
- List<ColumnDTO> columns = Lists.newLinkedList();
- Integer orderNo = 1;
- ColumnDTO columnDeptId = new ColumnDTO();
- columnDeptId.setOrderNo(orderNo);
- columnDeptId.setFieldName("deptId");
- columnDeptId.setColumnName("科室编码");
- columnDeptId.setIsShow(0);
- columns.add(columnDeptId);
- orderNo++;
- ColumnDTO columnDeptName = new ColumnDTO();
- columnDeptName.setOrderNo(orderNo);
- columnDeptName.setFieldName("deptName");
- columnDeptName.setColumnName("科室");
- columnDeptName.setIsShow(1);
- columns.add(columnDeptName);
- orderNo++;
- List<Long> casesEntryIds = Lists.newArrayList();
- for (String valueStr : columnSet) {
- if (StringUtil.isBlank(valueStr)) {
- continue;
- }
- String[] keyValue = valueStr.split("--");
- if (keyValue != null || keyValue.length > 1) {
- casesEntryIds.add(Long.valueOf(keyValue[0]));
- ColumnDTO columnId = new ColumnDTO();
- columnId.setOrderNo(orderNo);
- columnId.setId(Long.valueOf(keyValue[0]));
- columnId.setFieldName("entry_" + keyValue[0] + "_id");
- columnId.setColumnName(keyValue[1] + "id");
- columnId.setIsShow(0);
- columns.add(columnId);
- orderNo++;
- ColumnDTO columnName = new ColumnDTO();
- columnName.setOrderNo(orderNo);
- columnName.setId(Long.valueOf(keyValue[0]));
- columnName.setFieldName("entry_" + keyValue[0] + "_name");
- columnName.setColumnName(keyValue[1] + "name");
- columnName.setIsShow(0);
- columns.add(columnName);
- orderNo++;
- ColumnDTO columnNum = new ColumnDTO();
- columnNum.setOrderNo(orderNo);
- columnNum.setId(Long.valueOf(keyValue[0]));
- columnNum.setFieldName("entry_" + keyValue[0] + "_num");
- columnNum.setColumnName(keyValue[1]);
- columnNum.setIsShow(1);
- columns.add(columnNum);
- orderNo++;
- }
- }
- //条目未维护
- if (ListUtil.isEmpty(casesEntryIds)) {
- return unModifyMRDTO;
- }
- //casesEntryIds
- filterUnModifyMRVO.setCasesEntryIds(casesEntryIds);
- QueryWrapper<QcCasesEntry> qcCasesEntryQueryWrapper = new QueryWrapper<>();
- qcCasesEntryQueryWrapper.eq("is_deleted", "N")
- .in("id", casesEntryIds);
- List<QcCasesEntry> casesEntryList = qcCasesEntryFacade.list(qcCasesEntryQueryWrapper);
- // 实体类中将实体类转化为map形式,其中条目id对应目标条目名称
- Map<Long, String> basCasesEntryMap = EntityUtil.makeMapWithKeyValue(casesEntryList, "id", "name");
- List<UnModifyMRDetailDTO> records = behospitalInfoFacade.unModifyMRStatistics(filterUnModifyMRVO);
- //以科室分组,将符合科室的每条数据以map形式存储
- Map<String, List<UnModifyMRDetailDTO>> deptMap = EntityUtil.makeEntityListMap(records, "deptName");
- //科室对应科室id
- Map<String, String> deptInfoMap = EntityUtil.makeMapWithKeyValue(records, "deptName", "deptId");
- Map<String, Map<Long, UnModifyMRDetailDTO>> deptEntryMap = new LinkedHashMap<>();
- for (Map.Entry<String, List<UnModifyMRDetailDTO>> entry : deptMap.entrySet()) {
- Map<Long, UnModifyMRDetailDTO> entryMap = EntityUtil.makeEntityMap(entry.getValue(), "casesEntryId");
- deptEntryMap.put(entry.getKey(), entryMap);
- }
- try {
- for (Map.Entry<String, Map<Long, UnModifyMRDetailDTO>> entry : deptEntryMap.entrySet()) {
- Object obj = new Object();
- HashMap addMap = new HashMap();
- HashMap addValMap = new HashMap();
- addMap.put("deptName", Class.forName("java.lang.String"));
- addValMap.put("deptName", entry.getKey());
- addMap.put("deptId", Class.forName("java.lang.String"));
- addValMap.put("deptId", deptInfoMap.get(entry.getKey()));
- for (ColumnDTO item : columns) {
- if (item.getFieldName().lastIndexOf("_id") > 0) {
- addMap.put(item.getFieldName(), Class.forName("java.lang.Long"));
- if (item.getId() != null) {
- addValMap.put(item.getFieldName(), item.getId());
- } else {
- addValMap.put(item.getFieldName(), null);
- }
- } else if (item.getFieldName().lastIndexOf("_name") > 0) {
- addMap.put(item.getFieldName(), Class.forName("java.lang.String"));
- if (basCasesEntryMap.containsKey(item.getId())) {
- addValMap.put(item.getFieldName(), basCasesEntryMap.get(item.getId()));
- } else {
- addValMap.put(item.getFieldName(), "");
- }
- } else if (item.getFieldName().lastIndexOf("_num") > 0) {
- addMap.put(item.getFieldName(), Class.forName("java.lang.Integer"));
- if (entry.getValue().containsKey(item.getId())) {
- addValMap.put(item.getFieldName(), entry.getValue().get(item.getId()).getCasesEntryNum());
- } else {
- addValMap.put(item.getFieldName(), 0);
- }
- }
- }
- obj = new ClassUtil().dynamicClass(obj, addMap, addValMap);
- retList.add(obj);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- //排序
- Collections.sort(retList, new Comparator<Object>() {
- @Override
- public int compare(Object o1, Object o2) {
- if (StringUtil.isNotBlank(filterUnModifyMRVO.getAsc())) {
- //升序
- Object o1Val = ObjectUtil.getValueByKey(o1, filterUnModifyMRVO.getAsc());
- Object o2Val = ObjectUtil.getValueByKey(o2, filterUnModifyMRVO.getAsc());
- if (filterUnModifyMRVO.getAsc().lastIndexOf("_num") > 1) {
- return ((Integer) o1Val).compareTo((Integer) o2Val);
- }
- if (filterUnModifyMRVO.getAsc().lastIndexOf("_id") > 1) {
- return ((Long) o1Val).compareTo((Long) o2Val);
- } else {
- return ((String) o1Val).compareTo((String) o2Val);
- }
- } else if (StringUtil.isNotBlank(filterUnModifyMRVO.getDesc())) {
- //降序
- Object o1Val = ObjectUtil.getValueByKey(o1, filterUnModifyMRVO.getDesc());
- Object o2Val = ObjectUtil.getValueByKey(o2, filterUnModifyMRVO.getDesc());
- if (filterUnModifyMRVO.getDesc().lastIndexOf("_num") > 1) {
- return ((Integer) o2Val).compareTo((Integer) o1Val);
- }
- if (filterUnModifyMRVO.getDesc().lastIndexOf("_id") > 1) {
- return ((Long) o2Val).compareTo((Long) o1Val);
- } else {
- return ((String) o2Val).compareTo((String) o1Val);
- }
- } else {
- return 0;
- }
- }
- });
- //增加全院数据
- if (ListUtil.isNotEmpty(retList) &&
- (StringUtil.isBlank(filterUnModifyMRVO.getDeptName())
- || filterUnModifyMRVO.getDeptName().equals("全院"))) {
- try {
- Object globleObj = new Object();
- HashMap addMap = new HashMap();
- HashMap addValMap = new HashMap();
- addMap.put("deptId", Class.forName("java.lang.String"));
- addValMap.put("deptId", "");
- addMap.put("deptName", Class.forName("java.lang.String"));
- addValMap.put("deptName", "全院");
- for (ColumnDTO item : columns) {
- if (item.getFieldName().lastIndexOf("_id") > 0) {
- addMap.put(item.getFieldName(), Class.forName("java.lang.Long"));
- if (item.getId() != null) {
- addValMap.put(item.getFieldName(), item.getId());
- } else {
- addValMap.put(item.getFieldName(), null);
- }
- } else if (item.getFieldName().lastIndexOf("_name") > 0) {
- addMap.put(item.getFieldName(), Class.forName("java.lang.String"));
- if (basCasesEntryMap.containsKey(item.getId())) {
- addValMap.put(item.getFieldName(), basCasesEntryMap.get(item.getId()));
- } else {
- addValMap.put(item.getFieldName(), "");
- }
- } else if (item.getFieldName().lastIndexOf("_num") > 0) {
- addMap.put(item.getFieldName(), Class.forName("java.lang.Integer"));
- Integer entryNum = retList
- .stream()
- .map(i -> ObjectUtil.getValueByKey(i, item.getFieldName()))
- .filter(i -> i != null)
- .map(i -> (Integer) i)
- .reduce(0, Integer::sum);
- addValMap.put(item.getFieldName(), entryNum);
- }
- }
- globleObj = new ClassUtil().dynamicClass(globleObj, addMap, addValMap);
- retList.add(0, globleObj);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- unModifyMRDTO.setColumns(columns);
- unModifyMRDTO.setData(retList);
- return unModifyMRDTO;
- }
- /**
- * 未整改病历质控评分页(内页)
- *
- * @param qcResultShortPageVO
- * @return
- */
- public IPage<QcResultShortDTO> unModifyMRPage(QcResultShortPageVO qcResultShortPageVO) {
- filterFacade.qcResultShortPageVOSet(qcResultShortPageVO);
- return behospitalInfoFacade.unModifyMRPage(qcResultShortPageVO);
- }
- /**
- * 不合格/合格数病历号(内页)
- *
- * @param qcResultPageVO
- * @return
- */
- public IPage<QcResultShortDTO> badLevelPage(QcResultPageVO qcResultPageVO) {
- filterFacade.badLevelPageVOSet(qcResultPageVO);
- return behospitalInfoFacade.badLevelPage(qcResultPageVO);
- }
- /**
- * 31天再入院详情页
- *
- * @param reBeHosPageVO
- * @return
- */
- public IPage<ReBeHosDTO> reHos31DaysPage(ReBeHosPageVO reBeHosPageVO) {
- filterFacade.reBeHosPageVOSet(reBeHosPageVO);
- IPage<ReBeHosMergeDTO> page = behospitalInfoFacade.reHos31DaysPage(reBeHosPageVO);
- List<ReBeHosMergeDTO> records = page.getRecords();
- IPage<ReBeHosDTO> retPage = new Page<>();
- BeanUtil.copyProperties(page, retPage);
- List<ReBeHosDTO> retRecords = Lists.newLinkedList();
- if (ListUtil.isNotEmpty(records)) {
- for (ReBeHosMergeDTO record : records) {
- ReBeHosDTO retRecord = new ReBeHosDTO();
- BeanUtil.copyProperties(record, retRecord);
- List<ReBeHosDetailDTO> details = Lists.newLinkedList();
- ReBeHosDetailDTO detailRecord = new ReBeHosDetailDTO();
- BeanUtil.copyProperties(record, detailRecord);
- details.add(detailRecord);
- ReBeHosDetailDTO lastDetailRecord = new ReBeHosDetailDTO();
- lastDetailRecord.setName(record.getName());
- lastDetailRecord.setBehDeptId(record.getLastBehDeptId());
- lastDetailRecord.setBehDeptName(record.getBehDeptName());
- lastDetailRecord.setBehospitalCode(record.getLastBehospitalCode());
- lastDetailRecord.setBehospitalDate(record.getLastBehospitalDate());
- lastDetailRecord.setLeaveHospitalDate(record.getLastLeaveHospitalDate());
- lastDetailRecord.setLevel(record.getLastLevel());
- lastDetailRecord.setScoreRes(record.getLastScoreRes());
- lastDetailRecord.setBehospitalDayNum(record.getLastBehospitalDayNum());
- lastDetailRecord.setTotleFee(record.getLastTotleFee());
- details.add(lastDetailRecord);
- retRecord.setDetails(details);
- retRecords.add(retRecord);
- }
- }
- retPage.setRecords(retRecords);
- return retPage;
- }
- /**
- * 入院人数统计(首页)
- *
- * @param filterVO
- * @return
- */
- public List<NumDTO> beHosCount(FilterVO filterVO) {
- filterFacade.filterVOSet(filterVO);
- List<NumDTO> records = behospitalInfoFacade.beHosCount(filterVO);
- if (ListUtil.isNotEmpty(records)) {
- NumDTO globleRecord = new NumDTO();
- globleRecord.setName("全院");
- Integer num = records.stream()
- .map(NumDTO::getNum)
- .reduce(0, Integer::sum);
- globleRecord.setNum(num);
- records.add(0, globleRecord);
- }
- if (ListUtil.isNotEmpty(records) && records.size() > filterVO.getLimitCount()) {
- records = records.subList(0, 10);
- }
- return records;
- }
- /**
- * 单条条目缺陷统计(首页)
- *
- * @param filterVO
- * @return
- */
- public List<NumDTO> casesEntryStatisticsById(FilterVO filterVO) {
- filterFacade.filterVOSet(filterVO);
- List<NumDTO> records = behospitalInfoFacade.casesEntryStatisticsById(filterVO);
- if (ListUtil.isNotEmpty(records)) {
- NumDTO globleRecord = new NumDTO();
- globleRecord.setName("全院");
- Integer num = records.stream()
- .map(NumDTO::getNum)
- .reduce(0, Integer::sum);
- globleRecord.setNum(num);
- records.add(0, globleRecord);
- }
- if (ListUtil.isNotEmpty(records) && records.size() > filterVO.getLimitCount()) {
- records = records.subList(0, 10);
- }
- return records;
- }
- /**
- * 病案首页改善率质控评分页(内页)
- *
- * @param qcResultShortPageVO
- * @return
- */
- public IPage<QcResultShortDTO> hmImproveMRPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO) {
- filterFacade.qcResultShortPageVOSet(qcResultShortPageVO);
- return behospitalInfoFacade.hmImproveMRPage(qcResultShortPageVO);
- }
- /**
- * 质控核查质控评分页(内页)
- *
- * @param qcResultShortPageVO
- * @return
- */
- public IPage<QcResultShortDTO> qcCheckMRPage(@Param("qcResultShortPageVO") QcResultShortPageVO qcResultShortPageVO) {
- filterFacade.qcResultShortPageVOSet(qcResultShortPageVO);
- return behospitalInfoFacade.qcCheckMRPage(qcResultShortPageVO);
- }
- /*
- */
- /**
- * 病历稽查表导出(首页)
- *
- * @param filterVO
- * @return
- */
- public List<MedicalCheckExportDTO> medicalCheckExport(@Param("filterVO") FilterMedicalCheckVO filterVO) {
- filterFacade.getMedicalCheckVOSet(filterVO);
- List<MedicalCheckExportDTO> medicalCheck = behospitalInfoFacade.getMedicalCheckExport(filterVO);
- return medicalCheck;
- }
- /**
- * 病历稽查表(首页)
- *
- * @param filterVO
- * @return
- */
- public IPage<MedicalCheckDTO> getMedicalCheck(@Param("filterVO") FilterMedicalCheckVO filterVO) {
- filterFacade.getMedicalCheckVOSet(filterVO);
- //colums
- QueryWrapper<SysHospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
- hospitalSetQueryWrapper.eq("is_deleted", 'N')
- .eq("hospital_id", filterVO.getHospitalId())
- .eq("code", "medical_check_form");
- SysHospitalSet hospitalSet = sysHospitalSetFacade.getOne(hospitalSetQueryWrapper);
- //表头生成
- List<String> columnSet = Arrays.asList(hospitalSet.getValue().split(","));
- //目标条目
- List<Long> casesEntryIds = Lists.newArrayList();
- //遍历第一个条目
- for (String valueStr : columnSet) {
- if (StringUtil.isBlank(valueStr)) {
- continue;
- }
- String[] keyValue = valueStr.split("--");
- if (keyValue != null || keyValue.length > 1) {
- casesEntryIds.add(Long.valueOf(keyValue[0]));
- }
- }
- IPage<MedicalCheckDTO> medicalCheck = behospitalInfoFacade.getMedicalCheck(filterVO,casesEntryIds);
- return medicalCheck;
- }
- /**
- * 病历稽查表(title)
- *
- * @param
- * @return
- */
- public List<ColumnDTO> getMedicalCheckTitle() {
- //病历稽查入参拼接
- String hospitalId = SysUserUtils.getCurrentHospitalID();
- //colums
- QueryWrapper<SysHospitalSet> hospitalSetQueryWrapper = new QueryWrapper<>();
- hospitalSetQueryWrapper.eq("is_deleted", 'N')
- .eq("hospital_id", hospitalId)
- .eq("code", "medical_check_form");
- List<ColumnDTO> columns = Lists.newLinkedList();
- SysHospitalSet hospitalSet = sysHospitalSetFacade.getOne(hospitalSetQueryWrapper);
- if (hospitalSet == null || StringUtil.isBlank(hospitalSet.getValue())) {
- return columns;
- }
- //表头生成
- List<String> columnSet = Arrays.asList(hospitalSet.getValue().split(","));
- Integer orderNo = 1;
- ColumnDTO columnDeptId = new ColumnDTO();
- columnDeptId.setOrderNo(orderNo);
- columnDeptId.setFieldName("deptId");
- columnDeptId.setColumnName("科室编码");
- columnDeptId.setIsShow(0);
- columns.add(columnDeptId);
- orderNo++;
- ColumnDTO columnDeptName = new ColumnDTO();
- columnDeptName.setOrderNo(orderNo);
- columnDeptName.setFieldName("deptName");
- columnDeptName.setColumnName("科室");
- columnDeptName.setIsShow(1);
- columns.add(columnDeptName);
- orderNo++;
- ColumnDTO columnMedicalName = new ColumnDTO();
- columnMedicalName.setOrderNo(orderNo);
- columnMedicalName.setFieldName("doctorName");
- columnMedicalName.setColumnName("医疗组");
- columnMedicalName.setIsShow(1);
- columns.add(columnMedicalName);
- orderNo++;
- for (String valueStr : columnSet) {
- String[] keyValue = valueStr.split("--");
- if (keyValue != null || keyValue.length > 1) {
- ColumnDTO columnNum = new ColumnDTO();
- columnNum.setOrderNo(orderNo);
- columnNum.setId(Long.valueOf(keyValue[0]));
- columnNum.setFieldName("entry_" + keyValue[0] + "_name");
- columnNum.setColumnName(keyValue[1]);
- columnNum.setIsShow(1);
- columns.add(columnNum);
- orderNo++;
- }
- }
- return columns;
- }
- }
|