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<String, String> 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<ModelAdapter> 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<String> 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<ModelAdapter> allOrgs = new ArrayList<>();
|
Map<String, List<ModelAdapter>> parentIdChildrenMap = new HashMap<>();
|
addChildren(allOrgs, "0", parentIdChildrenMap, 0);
|
return new TreeNodeList(allOrgs, parentIdChildrenMap);
|
}
|
|
public static void addChildren(List<ModelAdapter> allOrgs, String parentId, Map<String, List<ModelAdapter>> parentIdChildrenMap, int level) {
|
List<ModelAdapter> 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<ModelAdapter> 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<ModelAdapter> 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<ModelAdapter> personList = PersonManager.findPersonContainsOrgId(orgId);
|
if (personList.size() > 0) {
|
ToastUtil.show("删除失败,此组织机构下有人员");
|
return false;
|
}
|
ModelAdapter thisOrg = findById(Org.tableName, orgId);
|
List<ModelAdapter> 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<ModelAdapter> 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<ModelAdapter> 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'");
|
}
|
}
|