diff --git a/platform-dal/src/main/java/com/lyms/platform/query/AntExChuQuery.java b/platform-dal/src/main/java/com/lyms/platform/query/AntExChuQuery.java index 9235b69..c4df282 100644 --- a/platform-dal/src/main/java/com/lyms/platform/query/AntExChuQuery.java +++ b/platform-dal/src/main/java/com/lyms/platform/query/AntExChuQuery.java @@ -29,7 +29,34 @@ public class AntExChuQuery extends BaseQuery implements IConvertToNativeQuery { //大于修改时间 private Date gteModified; private Date gteCreated; + private List pids; private String pid; + private Date checkTimeStart; + private Date checkTimeEnd; + + public List getPids() { + return pids; + } + + public void setPids(List pids) { + this.pids = pids; + } + + public Date getCheckTimeStart() { + return checkTimeStart; + } + + public void setCheckTimeStart(Date checkTimeStart) { + this.checkTimeStart = checkTimeStart; + } + + public Date getCheckTimeEnd() { + return checkTimeEnd; + } + + public void setCheckTimeEnd(Date checkTimeEnd) { + this.checkTimeEnd = checkTimeEnd; + } //医院id private List hospitalList; @@ -144,6 +171,9 @@ public class AntExChuQuery extends BaseQuery implements IConvertToNativeQuery { if (null != pid) { condition = condition.and("pid", pid, MongoOper.IS); } + if(CollectionUtils.isNotEmpty(pids)){ + condition = condition.and("pid", pids, MongoOper.IN); + } if(CollectionUtils.isNotEmpty(hospitalList)){ condition = condition.and("hospitalId", hospitalList, MongoOper.IN); } diff --git a/platform-dal/src/main/java/com/lyms/platform/query/AntExQuery.java b/platform-dal/src/main/java/com/lyms/platform/query/AntExQuery.java index 630b740..786e456 100644 --- a/platform-dal/src/main/java/com/lyms/platform/query/AntExQuery.java +++ b/platform-dal/src/main/java/com/lyms/platform/query/AntExQuery.java @@ -5,9 +5,11 @@ import com.lyms.platform.common.dao.BaseQuery; import com.lyms.platform.common.dao.operator.MongoCondition; import com.lyms.platform.common.dao.operator.MongoOper; import com.lyms.platform.common.dao.operator.MongoQuery; +import org.apache.commons.collections.CollectionUtils; import org.springframework.data.mongodb.core.query.Criteria; import java.util.Date; +import java.util.List; /** * 产前检查查询 @@ -19,6 +21,7 @@ public class AntExQuery extends BaseQuery implements IConvertToNativeQuery { private Integer yn; private String id; private String pid; + private List pids; //创建时间 private Date start; @@ -33,6 +36,14 @@ public class AntExQuery extends BaseQuery implements IConvertToNativeQuery { private Date gteCreated; + public List getPids() { + return pids; + } + + public void setPids(List pids) { + this.pids = pids; + } + public Date getGteCreated() { return gteCreated; } @@ -109,6 +120,9 @@ public class AntExQuery extends BaseQuery implements IConvertToNativeQuery { if(null!=pid){ condition= condition.and("pid",pid, MongoOper.IS); } + if(CollectionUtils.isNotEmpty(pids)){ + condition = condition.and("pid", pids, MongoOper.IN); + } if(null!=yn){ condition= condition.and("yn",yn, MongoOper.IS); } diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/Test.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/Test.java index 742ed5e..ee4c7a1 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/Test.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/Test.java @@ -1,5 +1,7 @@ package com.lyms.platform.operate.web; +import java.text.DecimalFormat; + /** * Created by Administrator on 2016/8/22 0022. */ @@ -12,11 +14,15 @@ public class Test { // List arrayList = new ArrayList<>(); // arrayList.add(3,"aaa"); // System.out.println(arrayList.size()); - String[] strs = new String[4]; - strs[0] = "111"; - strs[2] = "111"; - strs[3] = "111"; - strs[1] = "111"; + // String[] strs = new String[4]; + // strs[0] = "111"; + // strs[2] = "111"; + // strs[3] = "111"; + // strs[1] = "111"; + DecimalFormat df = new DecimalFormat("0.0");//格式化小数,不足的补0 + String num = df.format((float)56/96*100);//返回的是String类型的 + + System.out.println(num); // ConfirmedEnums [] strs = ConfirmedEnums.values(); // String vas = ConfirmedEnums.getTitle(1); diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AntexDoctorStatistController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AntexDoctorStatistController.java new file mode 100644 index 0000000..dd3a0a6 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/AntexDoctorStatistController.java @@ -0,0 +1,255 @@ +package com.lyms.platform.operate.web.controller; + +import com.lyms.hospitalapi.pojo.ReportModel; +import com.lyms.platform.biz.service.AntenatalExaminationService; +import com.lyms.platform.biz.service.YunBookbuildingService; +import com.lyms.platform.common.annotation.TokenRequired; +import com.lyms.platform.common.base.BaseController; +import com.lyms.platform.common.base.LoginContext; +import com.lyms.platform.common.result.BaseObjectResponse; +import com.lyms.platform.common.utils.BeanUtils; +import com.lyms.platform.operate.web.facade.AutoMatchFacade; +import com.lyms.platform.operate.web.result.AntextDoctorPatient; +import com.lyms.platform.operate.web.result.AntextDoctorResult; +import com.lyms.platform.permission.model.Users; +import com.lyms.platform.permission.service.UsersService; +import com.lyms.platform.pojo.AntExChuModel; +import com.lyms.platform.pojo.AntenatalExaminationModel; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.query.AntExChuQuery; +import com.lyms.platform.query.AntExQuery; +import com.lyms.platform.query.PatientsQuery; +import org.apache.commons.collections.map.HashedMap; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import java.text.DecimalFormat; +import java.util.*; + +/** + * @auther yangfei + * @createTime 2017年07月05日 14时55分 + * @discription 产检医生统计 + */ +@Controller +public class AntexDoctorStatistController extends BaseController { + + @Autowired + private AntenatalExaminationService antExService; + @Autowired + private AutoMatchFacade autoMatchFacade; + @Autowired + private YunBookbuildingService yunBookbuildingService; + @Autowired + private UsersService usersService; + + /** + * 产检医生统计 + * + * @param startDate 建档开始时间 + * @param endDate 建档结束时间 + * @param childBirth 统计范围 1=孕妇 3=产妇 不传=全部 + * @return + */ + @RequestMapping(method = RequestMethod.GET,value = "/getDoctorStatic") + @ResponseBody + @TokenRequired + public BaseObjectResponse getDoctorStatic(Date startDate,Date endDate,int childBirth ,HttpServletRequest request){ + BaseObjectResponse rest = new BaseObjectResponse(); + + LoginContext loginState = (LoginContext) request.getAttribute("loginContext"); + //根据当前登录人获取医院id + String hospital = autoMatchFacade.getHospitalId(loginState.getId()); + PatientsQuery patientsQuery = new PatientsQuery(); + //医院id + patientsQuery.setHospitalId(hospital); + if(startDate!=null){ + //建档开始时间 + patientsQuery.setBookbuildingDateStart(startDate); + } + if(endDate!=null){ + //建档结束时间 + patientsQuery.setBookbuildingDateEnd(endDate); + } + //有效 + patientsQuery.setYn(1); + if(childBirth!=0){ + patientsQuery.setType(childBirth); + } + //获取患者集合 + List patientss = yunBookbuildingService.queryPregnantWithQuery(patientsQuery); + //患者id + List pIds = new ArrayList<>(); + for(Patients ps : patientss){ + pIds.add(ps.getId()); + } + //根据patientId集合查询产检表、产检复查表,获取医生id、patientId列表 + AntExChuQuery antExChuQuery = new AntExChuQuery(); + //患者集合 + antExChuQuery.setPids(pIds); + antExChuQuery.setYn(1); + antExChuQuery.setHospitalId(hospital); + //初诊集合列表 + List antExChuModels = antExService.queryAntExChu(antExChuQuery); + AntExQuery antExQuery = new AntExQuery(); + antExQuery.setHospitalId(hospital); + antExQuery.setPids(pIds); + antExQuery.setYn(1); + //复诊集合列表 + List antenatalExaminationModels = antExService.queryAntenatalExamination(antExQuery.convertToQuery()); + + List antextDoctorPatient = new ArrayList<>(); + for(AntExChuModel ac : antExChuModels){ + AntextDoctorPatient adp = new AntextDoctorPatient(); + adp.setDoctorId(ac.getProdDoctor()); + adp.setpId(ac.getPid()); + antextDoctorPatient.add(adp); + } + for(AntenatalExaminationModel aec : antenatalExaminationModels){ + AntextDoctorPatient adp = new AntextDoctorPatient(); + adp.setDoctorId(aec.getCheckDoctor()); + adp.setpId(aec.getPid()); + antextDoctorPatient.add(adp); + } + Map adr1 = new HashMap<>(); + //医生ID+患者ID 用与医生对于产检人数 + 总人数:患者ID + Map dpm = new HashMap<>(); + + //产检总人数 + int allCount = 0; + //产检总人次 + int allCjrc = 0; + //产检两次及以上 + int allDoub = 0; + //产检五次及以上; + int allFive = 0; + + for(AntextDoctorPatient adp : antextDoctorPatient){ + if(!dpm.containsKey(adp.getpId())){ + allCount++; + dpm.put(adp.getpId(),1); + }else{ + Integer cjrc = dpm.get(adp.getpId()); + cjrc++; + if(cjrc == 2){ + allDoub++; + } + if(cjrc == 5){ + allFive++; + } + dpm.put(adp.getpId(),cjrc); + } + allCjrc++; + + if(adr1.containsKey(adp.getDoctorId())){ + AntextDoctorResult adr = adr1.get(adp.getDoctorId()); + if(!dpm.containsKey(adp.getDoctorId()+adp.getpId())){//如果不存在,产检人数加1 + adr.setInspectPeople(adr.getInspectPeople()+1); + dpm.put(adp.getDoctorId()+adp.getpId(),1); + }else{//如果存在,则检测测试加一 + Integer num = dpm.get(adp.getDoctorId()+adp.getpId()); + ++num; + if(num == 2){ + adr.setTwice(adr.getTwice()+1); + }else if(num==5){ + adr.setFiveTimes(adr.getFiveTimes()+1); + } + dpm.put(adp.getDoctorId()+adp.getpId(),num); + } + adr.setInspectTime(adr.getInspectTime()+1); + }else{ + AntextDoctorResult adr = new AntextDoctorResult(); + adr.setDoctorId(adp.getDoctorId()); + adr.setInspectPeople(1); + adr.setInspectTime(1); + adr.setTwice(0); + adr.setFiveTimes(0); + adr.setTwiceProportion(""); + adr.setFiveTimeProportion(""); + adr1.put(adp.getDoctorId(),adr); + dpm.put(adp.getDoctorId()+adp.getpId(),1); + } + } + + List> gridList = new ArrayList<>(); + //存总计 + gridList.add(new HashedMap()); + //表表图数据 + List doctorInfo = new ArrayList<>(); + + for(Map.Entry adr : adr1.entrySet()){ + // System.out.println(adr.getValue().toString()); + AntextDoctorResult ar = adr.getValue(); + + if(StringUtils.isNotEmpty(ar.getDoctorId())){ + Users users = usersService.getUsers(Integer.parseInt(ar.getDoctorId())); + if(users!=null){ + ar.setDoctorName(users.getName()); + }else{ + ar.setDoctorName("产检医生"); + } + }else{ + ar.setDoctorName("产检医生"); + } + if(ar.getTwice()>0){ + DecimalFormat df = new DecimalFormat("0.0");//格式化小数,不足的补0 + ar.setTwiceProportion(df.format((float)ar.getTwice()/ar.getInspectPeople()*100)+"%"); + } + if(ar.getFiveTimes()>0){ + DecimalFormat df = new DecimalFormat("0.0");//格式化小数,不足的补0 + ar.setFiveTimeProportion(df.format((float)ar.getFiveTimes()/ar.getInspectPeople()*100)+"%"); + } + gridList.add(BeanUtils.objectToObjectMap(ar)); + + //柱状图图标数据 + List doctorList = new ArrayList<>(); + Map doctorMap = new HashMap<>(); + doctorList.add(ar.getInspectPeople()); + doctorList.add(ar.getTwice()); + doctorList.add(ar.getFiveTimes()); + doctorMap.put("name", ar.getDoctorName()); + doctorMap.put("type", "bar"); + doctorMap.put("data", doctorList); + doctorInfo.add(doctorMap); + + System.out.println(ar.toString()); + } + + DecimalFormat df = new DecimalFormat("0.0");//格式化小数,不足的补0 + String allDoubBl = ""; + String allFiveBl = ""; + + if(allDoub>0){ + //两次比例 + allDoubBl = df.format((float)allDoub/allCount*100)+"%"; + } + if(allFive>0){ + //五次比例 + allFiveBl = df.format((float)allFive/allCount*100)+"%"; + } + + System.out.println("总人数:"+allCount+",总人次:"+allCjrc+",总2次以上:"+allDoub+",总5次以上:"+allFive+",总两次比例:"+allDoubBl+",总五次比例:"+allFiveBl); + + //填充总计数据 + Map allMap = gridList.get(0); + allMap.put("doctorName","总计"); + allMap.put("inspectTime",allCjrc); + allMap.put("inspectPeople",allCount); + allMap.put("twice",allDoub); + allMap.put("twiceProportion",allDoubBl); + allMap.put("fiveTimes",allFive); + allMap.put("fiveTimeProportion",allFiveBl); + + ReportModel reportModel = new ReportModel(); + reportModel.setDoctorInfo(doctorInfo); /** 医生数据详情 */ + reportModel.setGrid(gridList); /** 表格数据 */ + reportModel.setxAxis(Arrays.asList("产检人数", "两次(含)以上人数", "五次(含)以上人数")); + rest.setData(reportModel); + return rest; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/FollowUpController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/FollowUpController.java index 24659cb..afb6356 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/FollowUpController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/FollowUpController.java @@ -33,7 +33,7 @@ import java.util.*; /** * @auther yangfei * @createTime 2017年05月09日 16时54分 - * @discription 跟踪相关接口 + * @discription 随访相关接口 */ @Controller @RequestMapping("followUp") diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/HighriskChangeHospitalController.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/HighriskChangeHospitalController.java index 66c8fd3..a5a6a61 100644 --- a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/HighriskChangeHospitalController.java +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/controller/HighriskChangeHospitalController.java @@ -34,7 +34,7 @@ import java.util.*; /** * @auther yangfei * @createTime 2017年05月09日 16时54分 - * @discription 跟踪相关接口 + * @discription 听力转诊相关接口 */ @Controller @RequestMapping("highrChangeHosp") @@ -127,7 +127,7 @@ public class HighriskChangeHospitalController extends BaseController { } /** - * 获取听力转诊列表 分页 + * 获取听力转诊详情 * * @param chId 随访记录Id * @param request diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/AntextDoctorPatient.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/AntextDoctorPatient.java new file mode 100644 index 0000000..bd45fe9 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/AntextDoctorPatient.java @@ -0,0 +1,29 @@ +package com.lyms.platform.operate.web.result; + +/** + * @auther yangfei + * @createTime 2017年07月05日 16时58分 + * @discription + */ +public class AntextDoctorPatient { + //医生ID + private String doctorId; + //患者ID + private String pId; + + public String getDoctorId() { + return doctorId; + } + + public void setDoctorId(String doctorId) { + this.doctorId = doctorId; + } + + public String getpId() { + return pId; + } + + public void setpId(String pId) { + this.pId = pId; + } +} diff --git a/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/AntextDoctorResult.java b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/AntextDoctorResult.java new file mode 100644 index 0000000..481d7f2 --- /dev/null +++ b/platform-operate-api/src/main/java/com/lyms/platform/operate/web/result/AntextDoctorResult.java @@ -0,0 +1,90 @@ +package com.lyms.platform.operate.web.result; + +/** + * @auther yangfei + * @createTime 2017年07月05日 17时09分 + * @discription + */ +public class AntextDoctorResult { + //医生ID + public String doctorId; + //医生名称 + public String doctorName; + //产检人次 + public int inspectTime; + //产检人数 + public int inspectPeople; + //两次含,以上人数 + public int twice; + //两次含以上比例 + public String twiceProportion; + //五次含,以上人数 + public int fiveTimes; + //五次含以上比例 + public String fiveTimeProportion; + + public String getDoctorId() { + return doctorId; + } + + public void setDoctorId(String doctorId) { + this.doctorId = doctorId; + } + + public String getDoctorName() { + return doctorName; + } + + public void setDoctorName(String doctorName) { + this.doctorName = doctorName; + } + + public int getInspectTime() { + return inspectTime; + } + + public void setInspectTime(int inspectTime) { + this.inspectTime = inspectTime; + } + + public int getInspectPeople() { + return inspectPeople; + } + + public void setInspectPeople(int inspectPeople) { + this.inspectPeople = inspectPeople; + } + + public int getTwice() { + return twice; + } + + public void setTwice(int twice) { + this.twice = twice; + } + + public String getTwiceProportion() { + return twiceProportion; + } + + public void setTwiceProportion(String twiceProportion) { + this.twiceProportion = twiceProportion; + } + + public int getFiveTimes() { + return fiveTimes; + } + + public void setFiveTimes(int fiveTimes) { + this.fiveTimes = fiveTimes; + } + + public String getFiveTimeProportion() { + return fiveTimeProportion; + } + + public void setFiveTimeProportion(String fiveTimeProportion) { + this.fiveTimeProportion = fiveTimeProportion; + } + +}