Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r35683 -r35685 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 35683) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 35685) @@ -93,6 +93,7 @@ import com.forgon.disinfectsystem.entity.packing.PackingTask; import com.forgon.disinfectsystem.entity.printRecyclingApplicationConfig.PrintConfig; import com.forgon.disinfectsystem.entity.recycledepartmentgroup.DepartmentGroup; +import com.forgon.disinfectsystem.entity.recycledepartmentgroup.DepartmentGroupWarnUser; import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingBasketSequence; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; @@ -129,6 +130,7 @@ import com.forgon.disinfectsystem.vo.RecyclingApplicationVo; import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.exception.SystemException; +import com.forgon.java_websocket.service.PushRecordManager; import com.forgon.log.enums.ApplicationLogStatusEnum; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; @@ -212,7 +214,13 @@ private OperationManager operationManager; private AdverseEventRecordManager adverseEventRecordManager; + + private PushRecordManager pushRecordManager; + public void setPushRecordManager(PushRecordManager pushRecordManager) { + this.pushRecordManager = pushRecordManager; + } + public void setAdverseEventRecordManager( AdverseEventRecordManager adverseEventRecordManager) { this.adverseEventRecordManager = adverseEventRecordManager; @@ -966,8 +974,126 @@ addPackingTask(application , null, tousseIdAndMap); packingManager.updateSerialNumber(application); } + + //保存提醒信息表的方法(ZSRY-47 PDA端【预回收】页面新增提醒功能) + savePushRecord(application); + } + /** + * 保存提醒信息表的方法(ZSRY-47 PDA端【预回收】页面新增提醒功能) + * @param application + */ + private void savePushRecord(RecyclingApplication application) { + + boolean enableNotifiOfPrepareRecycleFunction = + ConfigUtils.getSystemSetConfigByNameBool("enableNotifiOfPrepareRecycleFunction", false); + boolean limitOneOperationRoomCanOnlyRegistOneUnAuditedUseRecord = + ConfigUtils.getSystemSetConfigByNameBool("limitOneOperationRoomCanOnlyRegistOneUnAuditedUseRecord"); + if(limitOneOperationRoomCanOnlyRegistOneUnAuditedUseRecord + && enableNotifiOfPrepareRecycleFunction){ + + //使用记录转换为申请单时,根据申请单中的“申请科室”,在“回收科室分组功能配置”中查询该申请科室所属的“回收科室分组” + //查询对应的“回收科室分组”中的字段“PDA回收通知人”有哪些人; + //如若这些用户PDA在线,则推送相应的通知给这些用户; + if(application == null || !DatabaseUtil.isPoIdValid(application.getId()) + || application.getUseRecord() == null + || StringUtils.isBlank(application.getDepartCoding())){ + return; + } + + //每种提醒方式对应的提醒人员名单map,key为提醒方式,value为人员ID列表 + Map> noticeTypeUserIDListMap = new HashMap>(); + //用户名称map + Map userFullNameMap = new HashMap(); + + String departGroupSql = " and dg.prepareRecycleType='预回收' " + + " and (dg.departCodes like '" + application.getDepartCoding() + ";%'" + + " or dg.departCodes like '%;" + application.getDepartCoding() + "'" + + " or dg.departCodes like '%;" + application.getDepartCoding() + ";%'" + + " or dg.departCodes like '" + application.getDepartCoding() + "') and dg.warningWays is not null "; + String sql = String.format("select u.id userId, u.fullName, dg.warningWays " + + "from %s dg " + + "join %s dgu on dg.id = dgu.departmentGroupId " + + "join SS_USERS u on dgu.userId = u.id where 1=1 %s order by u.id ", + DepartmentGroup.class.getSimpleName(), + DepartmentGroupWarnUser.class.getSimpleName(), + departGroupSql); + + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long userId = rs.getLong("userId"); + String fullName = rs.getString("fullName"); + String warningWays = rs.getString("warningWays"); + if(!DatabaseUtil.isPoIdValid(userId) || StringUtils.isBlank(fullName) || StringUtils.isBlank(warningWays)){ + continue; + } + userFullNameMap.put(userId, fullName); + String[] warningWayArr = StringTools.split(warningWays, ';'); + if(warningWayArr != null && warningWayArr.length > 0){ + for (String warningWay : warningWayArr) { + List warningUserIDs = noticeTypeUserIDListMap.get(warningWay); + if(warningUserIDs == null){ + warningUserIDs = new ArrayList(); + } + if(warningUserIDs.contains(userId)){ + continue; + } + warningUserIDs.add(userId); + noticeTypeUserIDListMap.put(warningWay, warningUserIDs); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + if(MapUtils.isEmpty(noticeTypeUserIDListMap)){ + return; + } + + //提醒内容:根据特殊感染类型与手术间组装出对应的特殊类型 ZSRY-47 PDA端【预回收】页面新增提醒功能 + String remindContent = application.getRemindContent(); + + for (String noticeType : noticeTypeUserIDListMap.keySet()) { + List userIdList = noticeTypeUserIDListMap.get(noticeType); + //用户id转用户名称 + List userNameList = getUserNameListByID(userIdList, userFullNameMap); + List noticeTypeList = new ArrayList(); + noticeTypeList.add(noticeType); + if(CollectionUtils.isEmpty(userNameList) || CollectionUtils.isEmpty(noticeTypeList)){ + continue; + } + pushRecordManager.save(InvoicePlan.class.getSimpleName(), application.getId(), userNameList, remindContent, noticeTypeList); + } + } + } + + /** + * 用户id转用户名称 + * @param userIdList + * @param userFullNameMap + * @return + */ + private List getUserNameListByID(List userIdList, Map userFullNameMap){ + List userNameList = new ArrayList(); + if(CollectionUtils.isEmpty(userIdList) || MapUtils.isEmpty(userFullNameMap)){ + return userNameList; + } + for (Long userId : userIdList) { + if(DatabaseUtil.isPoIdValid(userId)){ + String userName = userFullNameMap.get(userId); + userNameList.add(userName); + } + } + return userNameList; + } + + /** * 根据包定义,要么生成包实例,要么产生装配任务 * @param application * @param tousseIdAndMap 要生成装配任务的包定义id与申请项的map