package foundation.org;
|
|
import java.util.Date;
|
import java.util.List;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import foundation.capacity.Actor;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.entity.Filter;
|
import foundation.data.object.DataObject;
|
import foundation.data.object.EntitySaver;
|
import foundation.json.IJSONProvider;
|
import foundation.json.IJSONWriter;
|
import foundation.user.User;
|
import foundation.util.EncipherUtil;
|
import foundation.util.MapList;
|
import foundation.util.Util;
|
|
public class Org implements IJSONProvider {
|
|
protected static Logger logger;
|
private String id;
|
private String code;
|
private String name;
|
private String shortName;
|
private boolean master;
|
private Entity entity;
|
private MapList<String, OrgAccount> orgAccounts;
|
|
|
static {
|
logger = LogManager.getLogger(Org.class);
|
}
|
|
private Org() {
|
|
}
|
|
public static Org getInstance(String orgId) throws Exception {
|
if (Util.isEmpty(orgId)) {
|
logger.error("Org不存在:{}", orgId);
|
return null;
|
}
|
|
DataObject dataObject = DataObject.getInstance("md_org");
|
Entity entity = dataObject.getTableEntity(orgId);
|
|
if (entity == null) {
|
logger.error("Org不存在:{}", orgId);
|
return null;
|
}
|
|
//1. 加载公司主数据
|
Org org = new Org();
|
org.load(entity);
|
|
//2. 如果是客户,加载客户的开户数据
|
if (!org.isMaster()) {
|
org.loadOrgAccounts();
|
}
|
|
return org;
|
}
|
|
public void load(Entity entity) throws Exception {
|
id = entity.getString("id");
|
code = entity.getString("code");
|
name = entity.getString("name");
|
shortName = entity.getString("short_name");
|
master = entity.getBoolean("is_master", false);
|
|
this.entity = entity;
|
}
|
|
public void activeAccountFlag() throws Exception {
|
DataObject dataObject = DataObject.getInstance("md_org");
|
EntitySaver saver = dataObject.createEntitySaver(id);
|
saver.set("is_account", "T");
|
saver.update();
|
}
|
|
public User createAccount(AccountMeta accountMeta) throws Exception {
|
//1. 创建管理员帐号(如果已经有了,重新刷新)
|
User admin = createAdminUser();
|
|
//2. 根据帐户类型,授予临时/正式Actor
|
applyActor(accountMeta);
|
|
//3. 返回
|
return admin;
|
}
|
|
public void getCreateAccountDefaultWorks(String accountId, String divisionId, String companyId, String... suffix) throws Exception {
|
//1. 获取默认仓库, 如果仓库已经存在,不再创建
|
DataObject dataObject = DataObject.getInstance("wm_warehouse");
|
Filter filter = new Filter("org_id", id).add("account_id", accountId).add("type_code", "Master");
|
Entity entity = dataObject.getTableEntity(filter);
|
|
if (entity != null) {
|
return;
|
}
|
|
//2.
|
String warehouseName = name;
|
|
if (suffix != null) {
|
int max = suffix.length;
|
|
for (int i = 0; i < max; i++) {
|
String segment = suffix[i];
|
|
if (Util.isEmpty(segment)) {
|
continue;
|
}
|
|
warehouseName = warehouseName + "_" + segment;
|
}
|
}
|
|
entity = dataObject.createTableEntity(true);
|
entity.set("division_id", divisionId);
|
entity.set("company_id", companyId);
|
entity.set("type_code", "Master");
|
entity.set("type_name", "主仓");
|
entity.set("code", code);
|
entity.set("name", warehouseName + "_主仓");
|
entity.set("org_id", id);
|
entity.set("org_code", code);
|
entity.set("org_name", name);
|
entity.set("account_id", accountId);
|
entity.set("is_active", "T");
|
|
dataObject.insertEntity(entity);
|
}
|
|
public void updateAccountOpenDate(String accountId) throws Exception {
|
DataObject dataObject = DataObject.getInstance("md_org_account");
|
EntitySaver saver = dataObject.createEntitySaver(accountId);
|
saver.set("open_date", new Date());
|
saver.update();
|
}
|
|
public User getAdminUser() throws Exception {
|
DataObject dataObject = DataObject.getInstance("sys_user");
|
Filter filter = new Filter("org_id", id);
|
filter.add("name", "admin");
|
Entity entity = dataObject.getTableEntity(filter);
|
|
if (entity == null) {
|
return null;
|
}
|
|
User user = new User();
|
user.load(entity);
|
|
return user;
|
}
|
|
private User createAdminUser() throws Exception {
|
DataObject dataObject = DataObject.getInstance("sys_user");
|
Filter filter = new Filter("org_id", id);
|
filter.add("code", "admin");
|
Entity entity = dataObject.getTableEntity(filter);
|
String password = EncipherUtil.encode(code);
|
|
if (entity == null) {
|
entity = dataObject.createTableEntity(true);
|
entity.set("id", code + ".admin");
|
entity.set("org_id", id);
|
entity.set("code", "admin");
|
entity.set("name", code + ".admin");
|
entity.set("password", password);
|
entity.set("is_active", "T");
|
entity.set("remark", name);
|
|
dataObject.insertEntity(entity);
|
}
|
else {
|
dataObject.updateEntity(entity);
|
}
|
|
User user = new User();
|
user.load(entity);
|
|
return user;
|
}
|
|
private void applyActor(AccountMeta accountMeta) throws Exception {
|
//1. 清除现有公司角色
|
DataObject dataObject = DataObject.getInstance("sys_right_actor_target");
|
Filter filter = new Filter("type_code", Actor.Code_Org).add("org_id", id);
|
dataObject.deleteEntity(filter);
|
|
//2. 插入新角色(开户后可能给该公司分配多个用户角色)
|
Mastership mastership = accountMeta.getMastership();
|
List<String> actors = accountMeta.getActors();
|
|
for (String actorId: actors) {
|
Entity one = dataObject.createTableEntity(true);
|
one.set("type_code", Actor.Code_Org);
|
one.set("actor_id", actorId);
|
one.set("company_id", mastership.getCompanyId());
|
one.set("division_id", mastership.getDivisionId());
|
one.set("org_id", accountMeta.getOrgId());
|
one.set("target_id", accountMeta.getAccountId());
|
|
dataObject.insertEntity(one);
|
}
|
}
|
|
public boolean isFrozen() {
|
try {
|
DataObject dataObject = DataObject.getInstance("md_org");
|
Entity entity = dataObject.getTableEntity(id);
|
return entity.getBoolean("is_frozen", false);
|
}
|
catch (Exception e) {
|
return false;
|
}
|
}
|
|
public void freeze() throws Exception {
|
DataObject dataObject = DataObject.getInstance("md_org");
|
EntitySaver saver = dataObject.createEntitySaver(id);
|
saver.set("is_frozen", true);
|
saver.update();
|
}
|
|
public void unfreeze() throws Exception {
|
DataObject dataObject = DataObject.getInstance("md_org");
|
EntitySaver saver = dataObject.createEntitySaver(id);
|
saver.set("is_frozen", false);
|
saver.update();
|
}
|
|
private void loadOrgAccounts() throws Exception {
|
DataObject dataObject = DataObject.getInstance("md_org_account");
|
Filter filter = new Filter("org_id", id).add("state_code <> 'Input'");
|
EntitySet entitySet = dataObject.getTableEntitySet(filter);
|
|
if (entitySet.isEmpty()) {
|
return;
|
}
|
|
if (orgAccounts == null) {
|
orgAccounts = new MapList<String, OrgAccount>();
|
}
|
else {
|
orgAccounts.clear();
|
}
|
|
for (Entity entity: entitySet) {
|
OrgAccount orgAccount = new OrgAccount();
|
orgAccount.load(entity);
|
|
orgAccounts.add(orgAccount.getId(), orgAccount);
|
}
|
}
|
|
public String getId() {
|
return id;
|
}
|
|
public String getCode() {
|
return code;
|
}
|
|
public String getName() {
|
return name;
|
}
|
|
public String getShortName() {
|
return shortName;
|
}
|
|
public boolean isMaster() {
|
return master;
|
}
|
|
public Entity getEntity() {
|
return entity;
|
}
|
|
public List<OrgAccount> getOrgAccounts() {
|
if (orgAccounts == null) {
|
return null;
|
}
|
return orgAccounts.getItemList();
|
}
|
|
@Override
|
public void writeJSON(IJSONWriter writer) {
|
writer.beginObject("org");
|
writeJSONBody(writer);
|
writer.endObject();
|
}
|
|
public void writeJSONBody(IJSONWriter writer) {
|
writer.write("id", id);
|
writer.write("code", code);
|
writer.write("name", name);
|
}
|
}
|