Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java =================================================================== diff -u -r27831 -r27880 --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java (.../OrgUnitManagerImpl.java) (revision 27831) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java (.../OrgUnitManagerImpl.java) (revision 27880) @@ -511,7 +511,7 @@ } else { //修改科室名称处理 if(!StringUtils.equals(orgUnit.getOldName(), orgUnit.getName())){ - updateOldData(orgUnit.getOrgUnitCoding(), orgUnit.getOldName(), orgUnit.getName()); + updateOldData(orgUnit.getOrgUnitCoding(), orgUnit.getOldName(), orgUnit.getName(), orgUnit.getStatus()); appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_BASEDATA, "U", "组织机构[" + orgUnit.getOldName() + "]修改名称为[" + orgUnit.getName() + "]科室编码为:" + orgUnit.getOrgUnitCoding()); @@ -525,7 +525,7 @@ * @param oldOrgName 修改前的名称 * @param newOrgName 修改后的名称 */ - private void updateOldData(String orgCoding,String oldOrgName,String newOrgName){ + private void updateOldData(String orgCoding,String oldOrgName,String newOrgName, Integer status){ StringBuffer sqls = new StringBuffer(); //invoicePlan(发货计划) @@ -653,6 +653,65 @@ } } } + + // GYEY-748 联动修改科室名称 + String condition = getConditionSql(orgCoding); + String replaceSql = ""; + String tempOldOrgName = oldOrgName; + String tempNewOrgName = newOrgName; + if(status.intValue() == 0){ + tempOldOrgName = oldOrgName + "(已停用)"; + tempNewOrgName = newOrgName + "(已停用)"; + } + if(dbConnection.isOracle()){ + replaceSql += " case when departNames like '" + tempOldOrgName + "'"; + replaceSql += " then to_clob('" + tempNewOrgName + "')"; + replaceSql += " else case when departNames like '" + tempOldOrgName + ";%'"; + replaceSql += " then replace(departNames, '" + tempOldOrgName + ";', '" + tempNewOrgName + ";' )"; + replaceSql += " else case when departNames like '%;" + tempOldOrgName + ";%'"; + replaceSql += " then replace(departNames, ';" + tempOldOrgName + ";', ';" + tempNewOrgName + ";' )"; + replaceSql += " else case when departNames like '%;" + tempOldOrgName + "'"; + replaceSql += " then replace(departNames, ';" + tempOldOrgName + "', ';" + tempNewOrgName + "' )"; + replaceSql += " else to_clob('') end end end end "; + } else if(dbConnection.isSqlServer()){ + replaceSql += " case when departNames like '" + tempOldOrgName + "'"; + replaceSql += " then '" + tempNewOrgName + "'"; + replaceSql += " else case when departNames like '" + tempOldOrgName + ";%'"; + replaceSql += " then replace(cast(departNames as varchar(max)), '" + tempOldOrgName + ";', '" + tempNewOrgName + ";' )"; + replaceSql += " else case when departNames like '%;" + tempOldOrgName + ";%'"; + replaceSql += " then replace(cast(departNames as varchar(max)), ';" + tempOldOrgName + ";', ';" + tempNewOrgName + ";' )"; + replaceSql += " else case when departNames like '%;" + tempOldOrgName + "'"; + replaceSql += " then replace(cast(departNames as varchar(max)), ';" + tempOldOrgName + "', ';" + tempNewOrgName + "' )"; + replaceSql += " else '' end end end end "; + } + if(StringUtils.isNotBlank(replaceSql)){ + List sqlList = new ArrayList(); + // 打印发货计划设置PrintConfig + String updateSql = String.format("update PrintConfig set departNames = %s where %s;", replaceSql, condition); + sqlList.add(updateSql); + + // 打印发货单设置PrintInvoiceConfig + updateSql = String.format("update PrintInvoiceConfig set departNames = %s where %s;", replaceSql, condition); + sqlList.add(updateSql); + + // 回收科室分组设置DepartmentGroup + updateSql = String.format("update DepartmentGroup set departNames = %s where %s;", replaceSql, condition); + sqlList.add(updateSql); + + // 审核科室分组设置DepartmentGroupOption + updateSql = String.format("update DepartmentGroupOption set departNames = %s where %s;", replaceSql, condition); + sqlList.add(updateSql); + + // 物品科室共用配置GoodsDepartShareConfig + updateSql = String.format("update GoodsDepartShareConfig set departNames = %s where %s;", replaceSql, condition); + sqlList.add(updateSql); + + if(CollectionUtils.isNotEmpty(sqlList)){ + for (String sql : sqlList) { + objectDao.excuteSQL(sql); + } + } + } } /** @@ -1930,8 +1989,127 @@ description = StringTools.uniteTwoStringBySemicolon(description, ou.getName() + " (ID:"+ ou.getId() + ", 科室编码:" + ou.getBarcode() + ")", " , "); } objectDao.batchSaveOrUpdate(orgUnitList); + updateRelationDate(orgUnitList, status); appLogManager.saveLog(AcegiHelper.getLoginUser(), "组织机构管理", isDisabled + "科室", description); } } } + + /** + * 当科室停用后,显示科室时加上停用的状态 + * @param orgUnitList + */ + private void updateRelationDate(List orgUnitList, Integer status) { + if(CollectionUtils.isEmpty(orgUnitList)){ + return; + } + List updateSqlList = new ArrayList(); + for (OrgUnit orgUnit : orgUnitList) { + String coding = orgUnit.getOrgUnitCoding(); + String name = orgUnit.getName(); + String replaceSql = getReplaceSql(name, status); + if(StringUtils.isBlank(replaceSql)){ + continue; + } + String condition = getConditionSql(coding); + if(status.intValue() == 1){ + // 旧数据,已经停用的科室没有加上(已停用)标识,已经停用的科室再次启用时,不用再联动修改名称 + condition = "(" + condition + ") and departNames like '%" + name + "(已停用)%'"; + } + // 打印发货计划设置PrintConfig + String updateSql = String.format("update PrintConfig set departNames = %s where %s", replaceSql, condition); + updateSqlList.add(updateSql); + // 打印发货单设置PrintInvoiceConfig + updateSql = String.format("update PrintInvoiceConfig set departNames = %s where %s", replaceSql, condition); + updateSqlList.add(updateSql); + // 回收科室分组设置DepartmentGroup + updateSql = String.format("update DepartmentGroup set departNames = %s where %s", replaceSql, condition); + updateSqlList.add(updateSql); + // 审核科室分组设置DepartmentGroupOption + updateSql = String.format("update DepartmentGroupOption set departNames = %s where %s", replaceSql, condition); + updateSqlList.add(updateSql); + // 供应室服务临床科室配置cssdServiceDepts + updateSql = String.format("update cssdServiceDepts set clinicOrgUnitName = '%s' where clinicOrgUnitCode = '%s'", + (status != null && status.intValue() == 0) ? name + "(已停用)" : name, coding); + updateSqlList.add(updateSql); + updateSql = String.format("update cssdServiceDepts set cssdOrgUnitName = '%s' where cssdOrgUnitCode = '%s'", + (status != null && status.intValue() == 0) ? name + "(已停用)" : name, coding); + updateSqlList.add(updateSql); + } + if(CollectionUtils.isNotEmpty(updateSqlList)){ + for (String sql : updateSqlList) { + objectDao.excuteSQL(sql); + } + } + + } + + /** + * 打印发货计划设置PrintConfig等包含departNames(科室名称1;科室名称2;科室名称3)和departCodes(001;002;003) + * 的表,修改departNames的sql(启用/停用科室后调用) + * @param name 科室名称 + * @param status 停用/启用状态(0/1) + * @return + */ + private String getReplaceSql(String name, Integer status) { + if(StringUtils.isBlank(name) || status == null){ + return ""; + } + StringBuffer repalceSqlSb = new StringBuffer(); + if(dbConnection.isOracle()){ + String oldOrgName = ""; + String newOrgName = ""; + if(status.intValue() == 0){ + oldOrgName = name; + newOrgName = name + "(已停用)"; + } else if(status.intValue() == 1){ + oldOrgName = name + "(已停用)"; + newOrgName = name; + } + repalceSqlSb.append(" case when departNames like '" + oldOrgName + "'"); + repalceSqlSb.append(" then to_clob('" + newOrgName + "')"); + repalceSqlSb.append(" else case when departNames like '" + oldOrgName + ";%'"); + repalceSqlSb.append(" then replace(departNames, '" + oldOrgName + ";', '" + newOrgName + ";' )"); + repalceSqlSb.append(" else case when departNames like '%;" + oldOrgName + ";%'"); + repalceSqlSb.append(" then replace(departNames, ';" + oldOrgName + ";', ';" + newOrgName + ";' )"); + repalceSqlSb.append(" else case when departNames like '%;" + oldOrgName + "'"); + repalceSqlSb.append(" then replace(departNames, ';" + oldOrgName + "', ';" + newOrgName + "' )"); + repalceSqlSb.append(" else to_clob('') end end end end "); + } else if(dbConnection.isSqlServer()){ + String oldOrgName = ""; + String newOrgName = ""; + if(status.intValue() == 0){ + oldOrgName = name; + newOrgName = name + "(已停用)"; + } else if(status.intValue() == 1){ + oldOrgName = name + "(已停用)"; + newOrgName = name; + } + repalceSqlSb.append(" case when departNames like '" + oldOrgName + "'"); + repalceSqlSb.append(" then '" + newOrgName + "'"); + repalceSqlSb.append(" else case when departNames like '" + oldOrgName + ";%'"); + repalceSqlSb.append(" then replace(cast(departNames as varchar(max)), '" + oldOrgName + ";', '" + newOrgName + ";' )"); + repalceSqlSb.append(" else case when departNames like '%;" + oldOrgName + ";%'"); + repalceSqlSb.append(" then replace(cast(departNames as varchar(max)), ';" + oldOrgName + ";', ';" + newOrgName + ";' )"); + repalceSqlSb.append(" else case when departNames like '%;" + oldOrgName + "'"); + repalceSqlSb.append(" then replace(cast(departNames as varchar(max)), ';" + oldOrgName + "', ';" + newOrgName + "' )"); + repalceSqlSb.append(" else '' end end end end "); + } + return repalceSqlSb.toString(); + } + + + /** + * 获取查询条件 + * @param orgUnitCode 科室编码 + * @return + */ + private String getConditionSql(String orgUnitCode){ + String conditionSql = ""; + conditionSql += String.format(" departCodes like '%s' or departCodes like '%s' " + + " or departCodes like '%s' or departCodes like '%s'", orgUnitCode, orgUnitCode + ";%", + "%;" + orgUnitCode + ";%", "%;" + orgUnitCode); + return conditionSql; + } + }