Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/action/signRecordAction.java =================================================================== diff -u -r36155 -r36785 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/action/signRecordAction.java (.../signRecordAction.java) (revision 36155) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/action/signRecordAction.java (.../signRecordAction.java) (revision 36785) @@ -3,7 +3,6 @@ import java.io.IOException; import java.io.PrintWriter; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -12,6 +11,8 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; @@ -20,6 +21,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; import com.forgon.disinfectsystem.signRecord.service.SignRecordManager; import com.forgon.disinfectsystem.signRecord.vo.SignRecordPrintTousseVo; +import com.forgon.disinfectsystem.vo.ForeignTousseSignSummaryVo; import com.forgon.exception.SystemException; import com.forgon.exception.service.ExceptionHandler; import com.forgon.tools.StrutsParamUtils; @@ -169,4 +171,36 @@ StrutsResponseUtils.output(result); } + /** + * 外来器械签收汇总信息BJ309YY-6 + */ + public void foreignTousseSignSummary(){ + JSONObject result = JSONUtil.buildJsonObject(true); + try{ + String beginDate = StrutsParamUtils.getPraramValue("beginDate", ""); + String endDate = StrutsParamUtils.getPraramValue("endDate", ""); + // 当前登陆科室(申请科室) + String departCoding = AcegiHelper.getCurrentOrgUnitCode(); + // 签收记录id + String signRecordIds = StrutsParamUtils.getPraramValue("signRecordIds", ""); + JSONArray data = new JSONArray(); + if(StringUtils.isNotBlank(signRecordIds)){ + // 根据签收记录id汇总 + List foreignTousseSignSummaryVoList = signRecordManager.loadForeignTousseSignSummaryBySignRecordIds(signRecordIds); + if(CollectionUtils.isNotEmpty(foreignTousseSignSummaryVoList)){ + data = JSONArray.fromObject(foreignTousseSignSummaryVoList); + } + }else{ + // 根据签收时间汇总 + List foreignTousseSignSummaryVoList = signRecordManager.loadForeignTousseSignSummaryBySignTime(departCoding, beginDate, endDate); + if(CollectionUtils.isNotEmpty(foreignTousseSignSummaryVoList)){ + data = JSONArray.fromObject(foreignTousseSignSummaryVoList); + } + } + result = JSONUtil.buildJsonObject(true, data); + }catch(Exception e){ + result = JSONUtil.buildJsonObject(false, "查询失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java =================================================================== diff -u -r36399 -r36785 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java (.../SignRecordManager.java) (revision 36399) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java (.../SignRecordManager.java) (revision 36785) @@ -8,6 +8,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; import com.forgon.disinfectsystem.signRecord.vo.SignRecordPrintTousseVo; import com.forgon.disinfectsystem.signRecord.vo.SignRecordVo; +import com.forgon.disinfectsystem.vo.ForeignTousseSignSummaryVo; import com.forgon.tools.hibernate.BasePoManager; public interface SignRecordManager extends BasePoManager { @@ -98,5 +99,21 @@ * @return */ public List> getTousseInstanceBySignRecordIdInvoiceId(Long signRecordId, Long invoiceId, String keyWord); + + /** + * 外来器械签收汇总信息 + * @param departCoding + * @param beginDate + * @param endDate + * @return + */ + public List loadForeignTousseSignSummaryBySignTime(String departCoding, String beginDate, String endDate); + + /** + * 根据签收记录id汇总外来器械签收汇总信息 + * @param signRecordIds + * @return + */ + public List loadForeignTousseSignSummaryBySignRecordIds(String signRecordIds); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ForeignTousseSignSummaryVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ForeignTousseSignSummaryVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/ForeignTousseSignSummaryVo.java (revision 36785) @@ -0,0 +1,86 @@ +package com.forgon.disinfectsystem.vo; + +/** + * 外来器械包签收申请单汇总vo(BJ309YY-6) + */ +public class ForeignTousseSignSummaryVo { + + /** + * 住院号 + */ + private String hospitalNumber; + + /** + * 患者姓名 + */ + private String patient; + + /** + * 病人所属科室 + */ + private String ascriptionDepartment; + + /** + * 医生 + */ + private String doctor; + + /** + * 手术名称 + */ + private String surgery; + + /** + * 数量 + */ + private Integer tousseAmount; + + public String getHospitalNumber() { + return hospitalNumber; + } + + public void setHospitalNumber(String hospitalNumber) { + this.hospitalNumber = hospitalNumber; + } + + public String getPatient() { + return patient; + } + + public void setPatient(String patient) { + this.patient = patient; + } + + public String getAscriptionDepartment() { + return ascriptionDepartment; + } + + public void setAscriptionDepartment(String ascriptionDepartment) { + this.ascriptionDepartment = ascriptionDepartment; + } + + public String getDoctor() { + return doctor; + } + + public void setDoctor(String doctor) { + this.doctor = doctor; + } + + public String getSurgery() { + return surgery; + } + + public void setSurgery(String surgery) { + this.surgery = surgery; + } + + public Integer getTousseAmount() { + return tousseAmount; + } + + public void setTousseAmount(Integer tousseAmount) { + this.tousseAmount = tousseAmount; + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java =================================================================== diff -u -r36681 -r36785 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java (.../SignRecordManagerImpl.java) (revision 36681) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java (.../SignRecordManagerImpl.java) (revision 36785) @@ -11,13 +11,17 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -27,17 +31,20 @@ import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; +import com.forgon.directory.service.OrgUnitManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.basedatamanager.signRecord.SignRecord; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; import com.forgon.disinfectsystem.entity.sterilizationTransition.SterilizationTransitionItem; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.signRecord.vo.SignRecordPrintTousseVo; import com.forgon.disinfectsystem.signRecord.vo.SignRecordVo; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; +import com.forgon.disinfectsystem.vo.ForeignTousseSignSummaryVo; import com.forgon.exception.SystemException; import com.forgon.keyvalue.service.KeyValueManager; import com.forgon.security.model.User; @@ -51,6 +58,7 @@ import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.ForgonDateUtils; +import com.forgon.tools.util.SqlUtils; public class SignRecordManagerImpl extends BasePoManagerImpl implements SignRecordManager { @@ -61,7 +69,13 @@ @Autowired private UserManager userManager; - public void setKeyValueManager(KeyValueManager keyValueManager) { + private OrgUnitManager orgUnitManager; + + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } + + public void setKeyValueManager(KeyValueManager keyValueManager) { this.keyValueManager = keyValueManager; } @@ -876,4 +890,210 @@ user.setBindSignatureImageFileId(imageFileId); objectDao.saveOrUpdate(user); } + + @Override + public List loadForeignTousseSignSummaryBySignTime(String departCoding, String beginDate, String endDate) { + boolean enableSignSummaryOfForeignTousseFunction = + ConfigUtils.getSystemSetConfigByNameBool("enableSignSummaryOfForeignTousseFunction"); + int signModuleVersion = ConfigUtils.getSystemSetConfigByNameInt("signModuleVersion", 1); + if(!enableSignSummaryOfForeignTousseFunction || signModuleVersion != 2){ + throw new SystemException("无操作权限"); + } + if(StringUtils.isBlank(departCoding) + || StringUtils.isBlank(beginDate) + || StringUtils.isBlank(endDate)){ + throw new SystemException("参数异常"); + } + + List foreignTousseSignSummaryVoList = new ArrayList(); + + // 根据签收时间查询 + beginDate = beginDate + " 00:00:00"; + endDate = endDate + " 23:59:59"; + String signDateSql = " and " + dateQueryAdapter.dateAreaSql("sr.signDate", beginDate, endDate); + + String sql = String.format("select fta.hospitalNumber, fta.patient, fta.ascriptionDepartment, fta.doctor, fta.surgery " + + "from %s sr " + + "join %s ti on sr.id = ti.signRecordId " + + "left join %s fta on fta.id = ti.invoicePlanID " + + "where 1=1 " + + "%s " + + "and sr.departCode = '%s'", + SignRecord.class.getSimpleName(), + TousseInstance.class.getSimpleName(), + ForeignTousseApplication.class.getSimpleName(), + signDateSql, + departCoding); + + ResultSet rs = null; + Set ascriptionDepartmentOrgUnitCodeSet = new HashSet(); + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + String hospitalNumber = rs.getString("hospitalNumber"); + String patient = rs.getString("patient"); + String ascriptionDepartment = rs.getString("ascriptionDepartment"); + String doctor = rs.getString("doctor"); + String surgery = rs.getString("surgery"); + + ForeignTousseSignSummaryVo vo = new ForeignTousseSignSummaryVo(); + vo.setHospitalNumber(hospitalNumber); + vo.setPatient(patient); + vo.setAscriptionDepartment(ascriptionDepartment); + vo.setDoctor(doctor); + vo.setSurgery(surgery); + foreignTousseSignSummaryVoList.add(vo); + + ascriptionDepartmentOrgUnitCodeSet.add(ascriptionDepartment); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + //根据患者信息汇总 + foreignTousseSignSummaryVoList = getForeignTousseSignSummaryVoListGroupByPatientInfo(foreignTousseSignSummaryVoList); + + //查询所属科室编码 + foreignTousseSignSummaryVoList = searchAscriptionDepartmentOrgUnitName(foreignTousseSignSummaryVoList, ascriptionDepartmentOrgUnitCodeSet); + + return foreignTousseSignSummaryVoList; + } + + @Override + public List loadForeignTousseSignSummaryBySignRecordIds(String signRecordIds) { + boolean enableSignSummaryOfForeignTousseFunction = + ConfigUtils.getSystemSetConfigByNameBool("enableSignSummaryOfForeignTousseFunction"); + int signModuleVersion = ConfigUtils.getSystemSetConfigByNameInt("signModuleVersion", 1); + if(!enableSignSummaryOfForeignTousseFunction || signModuleVersion != 2){ + throw new SystemException("无操作权限"); + } + if(StringUtils.isBlank(signRecordIds)){ + throw new SystemException("参数异常"); + } + + List foreignTousseSignSummaryVoList = new ArrayList(); + Collection signRecordIdCol = StringTools.toCollectionIgnoreNullAndBlank(signRecordIds, ";"); + if(CollectionUtils.isEmpty(signRecordIdCol)){ + throw new SystemException("参数异常"); + } + + String signRecordIdSql = SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ti.signRecordId", signRecordIdCol); + + String sql = String.format("select fta.hospitalNumber, fta.patient, fta.ascriptionDepartment, fta.doctor, fta.surgery " + + "from %s ti " + + "left join %s fta on fta.id = ti.invoicePlanID " + + "where %s ", + TousseInstance.class.getSimpleName(), + ForeignTousseApplication.class.getSimpleName(), + signRecordIdSql); + + ResultSet rs = null; + Set ascriptionDepartmentOrgUnitCodeSet = new HashSet(); + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + String hospitalNumber = rs.getString("hospitalNumber"); + String patient = rs.getString("patient"); + String ascriptionDepartment = rs.getString("ascriptionDepartment"); + String doctor = rs.getString("doctor"); + String surgery = rs.getString("surgery"); + + ForeignTousseSignSummaryVo vo = new ForeignTousseSignSummaryVo(); + vo.setHospitalNumber(hospitalNumber); + vo.setPatient(patient); + vo.setAscriptionDepartment(ascriptionDepartment); + vo.setDoctor(doctor); + vo.setSurgery(surgery); + foreignTousseSignSummaryVoList.add(vo); + + ascriptionDepartmentOrgUnitCodeSet.add(ascriptionDepartment); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + //根据患者信息汇总 + foreignTousseSignSummaryVoList = getForeignTousseSignSummaryVoListGroupByPatientInfo(foreignTousseSignSummaryVoList); + + //查询所属科室编码 + foreignTousseSignSummaryVoList = searchAscriptionDepartmentOrgUnitName(foreignTousseSignSummaryVoList, ascriptionDepartmentOrgUnitCodeSet); + + return foreignTousseSignSummaryVoList; + } + + /** + * 患者信息相同时,包数量累加 + * @return + */ + private List getForeignTousseSignSummaryVoListGroupByPatientInfo(List foreignTousseSignSummaryVoList) { + List result = new ArrayList(); + if(CollectionUtils.isEmpty(foreignTousseSignSummaryVoList)){ + return foreignTousseSignSummaryVoList; + } + Map voMap = new LinkedHashMap(); + Map voKeyAmountMap = new HashMap(); + for (ForeignTousseSignSummaryVo vo : foreignTousseSignSummaryVoList) { + String key = buildForeignTousseSignSummaryVoKey(vo); + Integer amount = voKeyAmountMap.get(key); + if(amount == null){ + amount = 0; + } + amount = amount + 1; + voKeyAmountMap.put(key, amount); + vo.setTousseAmount(amount); + voMap.put(key, vo); + } + result.addAll(voMap.values()); + return result; + } + + /** + * 患者姓名#住院号#所属科室#手术医生#手术名称作为key + * @param vo + * @return + */ + private String buildForeignTousseSignSummaryVoKey(ForeignTousseSignSummaryVo vo) { + if(vo == null){ + return null; + } + return StringUtils.defaultString(vo.getPatient()) + "#" + + StringUtils.defaultString(vo.getHospitalNumber()) + "#" + + StringUtils.defaultString(vo.getAscriptionDepartment()) + "#" + + StringUtils.defaultString(vo.getDoctor()) + "#" + + StringUtils.defaultString(vo.getSurgery()); + } + + + /** + * 查询所属科室的名称 + * @param foreignTousseSignSummaryVoList + * @param ascriptionDepartmentOrgUnitCodeSet + * @return + */ + List searchAscriptionDepartmentOrgUnitName(List foreignTousseSignSummaryVoList, Set ascriptionDepartmentOrgUnitCodeSet){ + if(CollectionUtils.isEmpty(ascriptionDepartmentOrgUnitCodeSet)){ + return foreignTousseSignSummaryVoList; + } + Map orgUnitCodeAndNameMap = orgUnitManager.getOrgUnitCodeAndNameMapByOrgUnitCodes(ascriptionDepartmentOrgUnitCodeSet); + if(MapUtils.isEmpty(orgUnitCodeAndNameMap)){ + return foreignTousseSignSummaryVoList; + } + for (ForeignTousseSignSummaryVo vo : foreignTousseSignSummaryVoList) { + String ascriptionDepartment = vo.getAscriptionDepartment(); + if(StringUtils.isBlank(ascriptionDepartment)){ + continue; + } + String orgUnitName = orgUnitCodeAndNameMap.get(ascriptionDepartment); + if(StringUtils.isBlank(orgUnitName)){ + continue; + } + vo.setAscriptionDepartment(orgUnitName); + } + return foreignTousseSignSummaryVoList; + } + }