package com.basic.security.manager; import android.text.TextUtils; import com.basic.security.base.BaseApplication; import com.basic.security.fragment.FaceDetailFragment; import com.basic.security.fragment.FaceListFragment; import com.basic.security.fragment.GuestModeFragment; import com.basic.security.fragment.OrgFragment; import com.basic.security.fragment.OrgPersonFragment; import com.basic.security.fragment.TreeAdapter; import com.basic.security.fragment.TreeNodeList; import com.basic.security.model.ModelAdapter; import com.basic.security.model.Org; import com.basic.security.utils.Constants; import com.basic.security.utils.SocketUtil; import com.basic.security.utils.ToastUtil; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; public class OrgManager extends BaseManager { public static Map characterOrderMap = new HashMap(); public static boolean initTreeNodeList = false; static { characterOrderMap.put("1", "1"); characterOrderMap.put("2", "2"); characterOrderMap.put("3", "3"); characterOrderMap.put("4", "4"); characterOrderMap.put("5", "5"); characterOrderMap.put("6", "6"); characterOrderMap.put("7", "7"); characterOrderMap.put("8", "8"); characterOrderMap.put("9", "9"); characterOrderMap.put("一", "21"); characterOrderMap.put("二", "22"); characterOrderMap.put("三", "23"); characterOrderMap.put("四", "24"); characterOrderMap.put("五", "25"); characterOrderMap.put("六", "26"); characterOrderMap.put("七", "27"); characterOrderMap.put("八", "28"); characterOrderMap.put("九", "29"); characterOrderMap.put("十", "30"); } public static ModelAdapter buildParentOrg() { String orgSchoolId = // DeviceManager.getDeviceId() + Org.tableName + ""; ModelAdapter org = findById(Org.tableName, orgSchoolId); if (org == null) { org = new ModelAdapter(); org.setString(Org.id, orgSchoolId); org.setString(Org.pid, "0"); org.setString(Org.name, "育英中学"); org.setString(Org.ids, Org.separator + org.getString(Org.id) + Org.separator); org.setTrue(Org.leaf); org.setString(Org.device_id, DeviceManager.getDeviceId()); org.setString(Constants.TABLE, Org.tableName); saveOrg(org); } setIsLeaf(org); return org; } public static ModelAdapter buildParentOrg(String parentOrgName) { String orgSchoolId = // DeviceManager.getDeviceId() + Org.tableName + ""; ModelAdapter org = findById(Org.tableName, orgSchoolId); if (org == null) { org = new ModelAdapter(); org.setString(Org.id, orgSchoolId); org.setString(Org.pid, "0"); org.setString(Org.name, "育英中学"); org.setString(Org.ids, Org.separator + org.getString(Org.id) + Org.separator); org.setTrue(Org.leaf); org.setString(Org.device_id, DeviceManager.getDeviceId()); org.setString(Constants.TABLE, Org.tableName); saveOrg(org); } setIsLeaf(org); return org; } private static void setIsLeaf(ModelAdapter org) { String isLeaf = org.getString(Org.leaf); List children = findList("select * from org where pid='" + org.getString(Org.id) + "'"); if (children.size() > 0 && Constants.TRUE.equals(isLeaf)) { org.setString(Org.leaf, Constants.FALSE); saveOrg(org); } if (children.size() == 0 && Constants.FALSE.equals(isLeaf)) { org.setString(Org.leaf, Constants.TRUE); saveOrg(org); } } private static List getOrgNamesTreeList(String names) { names.split("|||", -1); return new ArrayList<>(); } public static ModelAdapter findByNames(String names) { return findOne("select * from " + Org.tableName + " where names='" + names + "'"); } public static void initTreeNodeList() { initTreeNodeList(null); } public static void initTreeNodeList(TreeAdapter treeAdapter) { BaseApplication.getApplication().executorService.execute( () -> { FaceListFragment.treeAdapter.treeNodeList = findTreeNodeList(); FaceListFragment.treeAdapter.treeNodeList.reCount(); try { FaceDetailFragment.treeAdapter.treeNodeList = FaceListFragment.treeAdapter.treeNodeList.cloneTreeNodeList(); GuestModeFragment.respondentOrgTreeAdapter.treeNodeList = FaceListFragment.treeAdapter.treeNodeList.cloneTreeNodeList(); OrgFragment.treeAdapter.treeNodeList = FaceListFragment.treeAdapter.treeNodeList.cloneTreeNodeList(); OrgPersonFragment.treeAdapter.treeNodeList = FaceListFragment.treeAdapter.treeNodeList.cloneTreeNodeList(); } catch (Exception e) { e.printStackTrace(); } if (treeAdapter != null) { BaseApplication.getApplication().activity.runOnUiThread(treeAdapter::notifyDataSetChanged); } initTreeNodeList = true; } ); } public static TreeNodeList findTreeNodeList() { List allOrgs = new ArrayList<>(); Map> parentIdChildrenMap = new HashMap<>(); addChildren(allOrgs, "0", parentIdChildrenMap, 0); return new TreeNodeList(allOrgs, parentIdChildrenMap); } public static void addChildren(List allOrgs, String parentId, Map> parentIdChildrenMap, int level) { List orgs = findList("select * from org where 1=1 " + " and pid='" + parentId + "'" + " order by name"); sortOrgs(orgs); parentIdChildrenMap.put(parentId, orgs); String padding = ""; if (level > 0) { padding = StringUtils.repeat(" ", level); } level++; for (ModelAdapter org : orgs) { org.setTrue(Org.expand); org.setString(Org.padding, padding); org.setString(Org.level, level + ""); allOrgs.add(org); addChildren(allOrgs, org.getId(), parentIdChildrenMap, level); } } public static void sortOrgs(List orgs) { for (ModelAdapter org : orgs) { org.setString(Org.order, getOrder(org)); } Collections.sort(orgs, (ModelAdapter o1, ModelAdapter o2) -> { return Integer.parseInt(o1.getString(Org.order)) - Integer.parseInt(o2.getString(Org.order)); }); } private static String getOrder(ModelAdapter org) { String orgName = org.getString(Org.name); if (TextUtils.isEmpty(orgName)) { return "-1"; } String firstChar = orgName.charAt(0) + ""; String order = characterOrderMap.get(firstChar); if (order != null) { return order; } return "0"; } public static ModelAdapter addChildOrg(ModelAdapter parentOrg, String orgName) { ModelAdapter childOrg = null; try { List dbOrgs = findList("select * from org where 1=1 " + " and " + Org.pid + "='" + parentOrg.getString(Org.id) + "' and name='" + orgName + "'"); if (dbOrgs.size() == 0) { childOrg = new ModelAdapter(); childOrg.setString(Org.id, UUID.randomUUID().toString()); childOrg.setString(Org.pid, parentOrg.getString(Org.id)); childOrg.setString(Org.name, orgName); childOrg.setString(Org.leaf, Constants.TRUE); childOrg.setString(Org.ids, parentOrg.getString(Org.ids) + childOrg.getString(Org.id) + Org.separator); childOrg.setString(Org.device_id, DeviceManager.getDeviceId()); childOrg.setString(Constants.TABLE, Org.tableName); saveOrg(childOrg); setIsLeaf(parentOrg); } else { childOrg = dbOrgs.get(0); } } catch (Exception e) { e.printStackTrace(); } return childOrg; } public static boolean deleteOrgById(String orgId) { if (!TextUtils.isEmpty(orgId)) { try { List personList = PersonManager.findPersonContainsOrgId(orgId); if (personList.size() > 0) { ToastUtil.show("删除失败,此组织机构下有人员"); return false; } ModelAdapter thisOrg = findById(Org.tableName, orgId); List orgs = findList("select * from " + Org.tableName + " where " + Org.ids + " like '%" + Org.separator + orgId + Org.separator + "%'"); if (orgs.size() > 0) { String parentOrgId = thisOrg.getString(Org.pid); for (ModelAdapter org : orgs) { SocketUtil.rpcCallDeleteOrg(org); deletePhysically(org); ToastUtil.show("删除成功"); } if (!TextUtils.isEmpty(parentOrgId)) { ModelAdapter parentOrg = findById(Org.tableName, parentOrgId); if (parentOrg != null) { setIsLeaf(parentOrg); } } } } catch (Exception e) { e.printStackTrace(); } } return true; } public static void updateOrgName(String orgId, String orgName) { try { ModelAdapter dbOrg = findById(Org.tableName, orgId); List dbSameNameList = findList("select * from org where 1=1 and " + Org.pid + "='" + dbOrg.getString(Org.pid) + "' and id != '" + dbOrg.getString(Org.id) + "' and name='" + orgName + "'"); if (dbSameNameList.size() > 0) { ToastUtil.show("保存失败,同级组织机构不能重名!"); } else { List orgs = findList("select * from " + Org.tableName + " where id='" + orgId + "'"); for (ModelAdapter org : orgs) { if (orgId.equals(org.getString(Org.id))) { org.setString(Org.name, orgName); } saveOrg(org); } ToastUtil.show("保存成功"); } } catch (Exception e) { e.printStackTrace(); } } public static void saveOrg(ModelAdapter org) { SocketUtil.rpcCallSaveOrg(org); save(org); } public static String getOrgFullName(String orgId) { if (!TextUtils.isEmpty(orgId)) { TreeNodeList treeNodeList = GuestModeFragment.respondentOrgTreeAdapter.treeNodeList;//findTreeNodeList(false); return treeNodeList.getFullName(orgId); } return "组织机构"; } public static ModelAdapter findRootOrg() { return findOne("select * from org where pid='0'"); } }