Index: ssts-web/src/main/java/com/forgon/disinfectsystem/systemexamination/action/OrgUnitExaminationAction.java =================================================================== diff -u --- ssts-web/src/main/java/com/forgon/disinfectsystem/systemexamination/action/OrgUnitExaminationAction.java (revision 0) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/systemexamination/action/OrgUnitExaminationAction.java (revision 28916) @@ -0,0 +1,341 @@ +package com.forgon.disinfectsystem.systemexamination.action; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.directory.model.OrgUnit; +import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.DepartmentAppTemplate; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.disinfectsystem.entity.departmentGroupOption.DepartmentGroupOption; +import com.forgon.disinfectsystem.entity.goodsdepartshareconfig.GoodsDepartShareConfig; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceDepartment; +import com.forgon.disinfectsystem.entity.printRecyclingApplicationConfig.PrintConfig; +import com.forgon.disinfectsystem.entity.recycledepartmentgroup.DepartmentGroup; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.SqlUtils; + +/** + * 检查系统参数设置中的科室编码及名称的正确性 + * @author ZhouPeiMian + * @since 2020-09-05 + */ +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "OrgUnitExaminationAction") +public class OrgUnitExaminationAction { + + private ObjectDao objectDao; + + /** + * 科室不存在 + */ + public static final String ORGUNITNOTEXIST = "1"; + + /** + * 科室被停用 + */ + public static final String ORGUNITDISABLE = "2"; + + /** + * 科室名称不一致 + */ + public static final String ORGUNITNAMEDIF = "3"; + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + + /** + * 检查是否存在通过冗余字段记录科室的编码和名称的情况,所记录的科室编码和科室名称是否存在问题,包括如下情况: + *(1)科室编码在组织机构中不存在,即与组织机构中的任何科室的科室编码都不相同 + *(2)该科室编码的科室存在,但科室已经被停用了 + *(3)该科室编码的科室存在,科室没有被停用,但科室名称与组织机构的科室名称不相同 + */ + public void orgUnitExamination(){ + JSONObject data = new JSONObject(); + //申领科室设置 + JSONArray applicationDepartArray = new JSONArray(); + applicationDepartArray = supplyRoomConfigExamination(SupplyRoomConfig.SUPPLYROOM_TYPE_APPLY); + //结算科室设置 + JSONArray settleAccountsDepartArray = new JSONArray(); + settleAccountsDepartArray = supplyRoomConfigExamination(SupplyRoomConfig.SUPPLYROOM_TYPE_SETTLEACCOUNT); + //打印发货计划设置 + JSONArray printConfigArray = new JSONArray(); + printConfigArray = configExamination(PrintConfig.class.getSimpleName()); + //科室申领模板 + JSONArray departmentAppTemplateArray = new JSONArray(); + departmentAppTemplateArray = departmentAppTemplateExamination(); + //回收科室分组设置 + JSONArray recycleDepartmentGroupArray = new JSONArray(); + recycleDepartmentGroupArray = configExamination(DepartmentGroup.class.getSimpleName()); + //审核科室分组设置 + JSONArray reviewDepartmentGroupArray = new JSONArray(); + reviewDepartmentGroupArray = configExamination(DepartmentGroupOption.class.getSimpleName()); + //物品科室共用配置 + JSONArray goodsDepartShareConfigArray = new JSONArray(); + goodsDepartShareConfigArray = configExamination(GoodsDepartShareConfig.class.getSimpleName()); + //发货科室分组设置(原来的名字叫做【科室发货计划设置】) + JSONArray invoiceDepartArray = new JSONArray(); + invoiceDepartArray = configExamination(InvoiceDepartment.class.getSimpleName()); + + data.put("applicationDepartArray", applicationDepartArray); + data.put("settleAccountsDepartArray", settleAccountsDepartArray); + data.put("printConfigArray", printConfigArray); + data.put("departmentAppTemplateArray", departmentAppTemplateArray); + + data.put("recycleDepartmentGroupArray", recycleDepartmentGroupArray); + data.put("reviewDepartmentGroupArray", reviewDepartmentGroupArray); + data.put("goodsDepartShareConfigArray", goodsDepartShareConfigArray); + data.put("invoiceDepartArray", invoiceDepartArray); + + JSONObject result = JSONUtil.buildJsonObject(true, data); + StrutsResponseUtils.output(true, result); + } + + /** + * 科室申领模板(科室申领模板只保存了科室编码,不存在科室名称不一致情况;而且科室不存在的情况只能查到科室编码) + * @return + */ + @SuppressWarnings("unchecked") + private JSONArray departmentAppTemplateExamination() { + JSONArray departmentAppTemplateArray = new JSONArray(); + List departmentAppTemplateList = objectDao.findAllObjects(DepartmentAppTemplate.class.getSimpleName()); + if(CollectionUtils.isEmpty(departmentAppTemplateList)){ + return departmentAppTemplateArray; + } + for (DepartmentAppTemplate departmentAppTemplate : departmentAppTemplateList) { + String orgUnitCodes = departmentAppTemplate.getOrgUnitCode(); + if(StringUtils.isBlank(orgUnitCodes)){ + continue; + } + Map codeToOrgUnitMap = new HashMap(); + String[] orgUnitCodeArray = orgUnitCodes.split(","); + List orgUnitCodeList = Arrays.asList(orgUnitCodeArray); + String orgUnitHql = String.format(" from %s po where %s", OrgUnit.class.getSimpleName(), + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.orgUnitCoding", orgUnitCodeList)); + List orgUnitList = objectDao.findByHql(orgUnitHql); + if(CollectionUtils.isNotEmpty(orgUnitList)){ + for (OrgUnit orgUnit : orgUnitList) { + codeToOrgUnitMap.put(orgUnit.getOrgUnitCoding(), orgUnit); + } + } + for (String orgUnitCode : orgUnitCodeList) { + JSONObject departmentAppTemplateJason = null; + OrgUnit orgUnit = codeToOrgUnitMap.get(orgUnitCode); + if(orgUnit == null){ + // 科室申领模板只保存了科室编码,所以科室不存在的情况只能查到科室编码 + departmentAppTemplateJason = new JSONObject(); + departmentAppTemplateJason.put("orgUnitCode", orgUnitCode); + departmentAppTemplateJason.put("orgUnitname", ""); + departmentAppTemplateJason.put("problemType", OrgUnitExaminationAction.ORGUNITNOTEXIST); + }else if(orgUnit.getStatus() != null && orgUnit.getStatus().intValue() == OrgUnit.STATUS_DISABLED.intValue()){ + departmentAppTemplateJason = new JSONObject(); + departmentAppTemplateJason.put("orgUnitCode", orgUnitCode); + departmentAppTemplateJason.put("orgUnitname", orgUnit.getName()); + departmentAppTemplateJason.put("problemType", OrgUnitExaminationAction.ORGUNITDISABLE); + } + if(departmentAppTemplateJason != null){ + departmentAppTemplateJason.put("configName", departmentAppTemplate.getTitle()); + departmentAppTemplateArray.add(departmentAppTemplateJason); + } + } + } + return departmentAppTemplateArray; + } + + /** + * 打印发货计划设置、回收科室分组设置、审核科室分组设置、物品科室共用配置、发货科室分组设置(原来的名字叫做【科室发货计划设置】) + * (departCodes和departNames没有确定的关联关系,所以根据departNames判断时,只要名称不一致的就判断科室不存在) + * @return + */ + @SuppressWarnings("unchecked") + private JSONArray configExamination(String className) { + JSONArray configArray = new JSONArray(); + List objects = new ArrayList(); + if(StringUtils.isBlank(className)){ + return configArray; + } + if(PrintConfig.class.getSimpleName().equals(className)){ + objects = objectDao.findAllObjects(PrintConfig.class.getSimpleName()); + }else if(DepartmentGroup.class.getSimpleName().equals(className)){ + objects = objectDao.findAllObjects(DepartmentGroup.class.getSimpleName()); + }else if(DepartmentGroupOption.class.getSimpleName().equals(className)){ + objects = objectDao.findAllObjects(DepartmentGroupOption.class.getSimpleName()); + }else if(GoodsDepartShareConfig.class.getSimpleName().equals(className)){ + objects = objectDao.findAllObjects(GoodsDepartShareConfig.class.getSimpleName()); + }else if(InvoiceDepartment.class.getSimpleName().equals(className)){ + objects = objectDao.findAllObjects(InvoiceDepartment.class.getSimpleName()); + }else{ + return configArray; + } + if(CollectionUtils.isEmpty(objects)){ + return configArray; + } + for (Object object : objects) { + String departCodes = ""; + String departNames = ""; + String configName = ""; + if(PrintConfig.class.getSimpleName().equals(className)){ + PrintConfig printConfig = (PrintConfig) object; + departCodes = printConfig.getDepartCodes(); + departNames = printConfig.getDepartNames(); + configName = printConfig.getShift(); + }else if(DepartmentGroup.class.getSimpleName().equals(className)){ + DepartmentGroup config = (DepartmentGroup) object; + departCodes = config.getDepartCodes(); + departNames = config.getDepartNames(); + configName = config.getName(); + }else if(DepartmentGroupOption.class.getSimpleName().equals(className)){ + DepartmentGroupOption config = (DepartmentGroupOption) object; + departCodes = config.getDepartCodes(); + departNames = config.getDepartNames(); + configName = config.getName(); + }else if(InvoiceDepartment.class.getSimpleName().equals(className)){ + InvoiceDepartment config = (InvoiceDepartment) object; + departCodes = config.getDepartCodes(); + departNames = config.getDepartNames(); + configName = config.getShift(); + }else if(GoodsDepartShareConfig.class.getSimpleName().equals(className)){ + GoodsDepartShareConfig config = (GoodsDepartShareConfig) object; + departCodes = config.getDepartCodes(); + departNames = config.getDepartNames(); + configName = config.getName(); + } else { + continue; + } + + if(StringUtils.isBlank(departNames) && StringUtils.isBlank(departCodes)){ + continue; + } + if((StringUtils.isNotBlank(departCodes) && StringUtils.isBlank(departNames)) + || (StringUtils.isNotBlank(departNames) && StringUtils.isBlank(departCodes))){ + // 科室编码或者科室名称为空的情况 + JSONObject pintConfigJson = new JSONObject(); + pintConfigJson.put("orgUnitCode", departCodes); + pintConfigJson.put("orgUnitname", departNames); + pintConfigJson.put("problemType", OrgUnitExaminationAction.ORGUNITNOTEXIST); + configArray.add(pintConfigJson); + continue; + } + + Map nameToOrgUnitMap = new HashMap(); + String[] departCodeArray = departCodes.split(";"); + String[] departNameArray = departNames.split(";"); + if(departCodeArray.length != departNameArray.length){ + // 科室编码和科室名称个数不一致的情况 + JSONObject pintConfigJson = new JSONObject(); + pintConfigJson.put("orgUnitCode", departCodes); + pintConfigJson.put("orgUnitname", departNames); + pintConfigJson.put("problemType", OrgUnitExaminationAction.ORGUNITNOTEXIST); + configArray.add(pintConfigJson); + continue; + } + List departCodeList = Arrays.asList(departCodeArray); + String orgUnitHql = String.format(" from %s po where %s", OrgUnit.class.getSimpleName(), + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.orgUnitCoding", departCodeList)); + List orgUnitList = objectDao.findByHql(orgUnitHql); + if(CollectionUtils.isNotEmpty(orgUnitList)){ + for (OrgUnit orgUnit : orgUnitList) { + nameToOrgUnitMap.put(orgUnit.getName(), orgUnit); + } + } + List departNameList = Arrays.asList(departNameArray); + + for (String departName : departNameList) { + JSONObject pintConfigJson = null; + OrgUnit orgUnit = nameToOrgUnitMap.get(departName); + if(orgUnit == null){ + // 名称不一致就判断科室不存在 + pintConfigJson = new JSONObject(); + pintConfigJson.put("orgUnitCode", ""); + pintConfigJson.put("orgUnitname", departName); + pintConfigJson.put("problemType", OrgUnitExaminationAction.ORGUNITNOTEXIST); + } else if(orgUnit.getStatus() != null && orgUnit.getStatus().intValue() == OrgUnit.STATUS_DISABLED.intValue()) { + // 科室被停用 + pintConfigJson = new JSONObject(); + pintConfigJson.put("orgUnitCode", orgUnit.getOrgUnitCoding()); + pintConfigJson.put("orgUnitname", departName); + pintConfigJson.put("problemType", OrgUnitExaminationAction.ORGUNITDISABLE); + } + if(pintConfigJson != null){ + pintConfigJson.put("configName", configName); + configArray.add(pintConfigJson); + } + } + + } + return configArray; + } + + + /** + * 申领科室设置、结算科室设置 + * @return + */ + @SuppressWarnings("unchecked") + private JSONArray supplyRoomConfigExamination(int supplyRoomType) { + JSONArray result = new JSONArray(); + List supplyRoomConfigList = (List) objectDao.findByProperty(SupplyRoomConfig.class.getSimpleName(), "supplyRoomType", String.valueOf(supplyRoomType)); + if(CollectionUtils.isEmpty(supplyRoomConfigList)){ + return result; + } + List orgUnitCodeList = new ArrayList(); + for (SupplyRoomConfig supplyRoomConfig : supplyRoomConfigList) { + orgUnitCodeList.add(supplyRoomConfig.getOrgUnitCoding()); + } + Map codeToOrgMap = new HashMap(); + String orgUnitHql = String.format(" from %s po where %s", OrgUnit.class.getSimpleName(), + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.orgUnitCoding", orgUnitCodeList)); + List orgUnitList = objectDao.findByHql(orgUnitHql); + if(CollectionUtils.isNotEmpty(orgUnitList)){ + for (OrgUnit orgUnit : orgUnitList) { + codeToOrgMap.put(orgUnit.getOrgUnitCoding(), orgUnit); + } + } + for (SupplyRoomConfig supplyRoomConfig : supplyRoomConfigList) { + JSONObject applicationDepartJson = null; + OrgUnit orgUnit = codeToOrgMap.get(supplyRoomConfig.getOrgUnitCoding()); + if(orgUnit == null){ + applicationDepartJson = new JSONObject(); + applicationDepartJson.put("orgUnitCode", supplyRoomConfig.getOrgUnitCoding()); + applicationDepartJson.put("orgUnitname", supplyRoomConfig.getOrgUnitName()); + applicationDepartJson.put("problemType", OrgUnitExaminationAction.ORGUNITNOTEXIST); + applicationDepartJson.put("configName", ""); + result.add(applicationDepartJson); + }else{ + if(!StringUtils.equals(orgUnit.getName(), supplyRoomConfig.getOrgUnitName())){ + applicationDepartJson = new JSONObject(); + applicationDepartJson.put("orgUnitCode", supplyRoomConfig.getOrgUnitCoding()); + applicationDepartJson.put("orgUnitname", supplyRoomConfig.getOrgUnitName()); + applicationDepartJson.put("problemType", OrgUnitExaminationAction.ORGUNITNAMEDIF); + applicationDepartJson.put("configName", ""); + result.add(applicationDepartJson); + } + if(orgUnit.getStatus() != null && orgUnit.getStatus().intValue() == OrgUnit.STATUS_DISABLED.intValue()){ + applicationDepartJson = new JSONObject(); + applicationDepartJson.put("orgUnitCode", supplyRoomConfig.getOrgUnitCoding()); + applicationDepartJson.put("orgUnitname", supplyRoomConfig.getOrgUnitName()); + applicationDepartJson.put("problemType", OrgUnitExaminationAction.ORGUNITDISABLE); + applicationDepartJson.put("configName", ""); + result.add(applicationDepartJson); + } + } + } + return result; + } + +}