package target;
|
|
import foundation.dao.DataPackage;
|
import foundation.data.meta.field.FieldsRuntime;
|
import foundation.data.object.DataObject;
|
import foundation.util.Util;
|
|
public enum TargetType {
|
Implant("so_implant", "md_target_hospital", "hospital", "implant", "植入指标"),
|
Dealer("so_order", "md_target_dealer_hospital", "department", "dealer", "商采指标"),
|
Unknown("", "", "", "", "");
|
|
private String achieveName;
|
private String tableName;
|
private String positionConnect;
|
private String positionTable;
|
private String joinSql;
|
private String code;
|
private String name;
|
private String qtyField;
|
private String amtField;
|
private DataObject document;
|
private DataObject documentDetail;
|
|
private TargetType(String achieveName, String tableName, String positionConnect, String code, String name) {
|
this.achieveName = achieveName;
|
this.tableName = tableName;
|
this.positionConnect = positionConnect;
|
this.code = code;
|
this.name = name;
|
|
loadDocument();
|
loadPositioJoin();
|
}
|
|
public void loadPackage() throws Exception {
|
DataPackage dataPackage = DataPackage.getInstance(achieveName);
|
document = dataPackage.getMasterDataObject();
|
documentDetail = dataPackage.getDetailDataObject();
|
}
|
|
public void loadPositioJoin() {
|
if ("hospital".equalsIgnoreCase(positionConnect)) {
|
positionTable = "md_position_hospital";
|
joinSql = " positionTable.hospital_id = target.hospital_id ";
|
}
|
else if ("department".equalsIgnoreCase(positionConnect)) {
|
positionTable = "md_position_hospital";
|
joinSql = " positionTable.hospital_id = target.hospital_id and ifnull(positionTable.department,'--') = ifnull(target.department ,'--') ";
|
}
|
else if ("account".equalsIgnoreCase(positionConnect)) {
|
positionTable = "md_org_account_position";
|
joinSql = " target.account_id = positionTable.parent_id ";
|
}
|
}
|
|
public void loadDocument() {
|
if ("so_implant".equalsIgnoreCase(achieveName)) {
|
qtyField = "qty";
|
amtField = "";
|
}
|
else if ("so_order".equalsIgnoreCase(achieveName)) {
|
qtyField = "qty_list";
|
amtField = "amt_after_discount";
|
}
|
}
|
|
public String getAchieveName() {
|
return achieveName;
|
}
|
|
public String getTableName() {
|
return tableName;
|
}
|
|
public String getPositionConnect() {
|
return positionConnect;
|
}
|
|
public String getPositionTable() {
|
return positionTable;
|
}
|
|
public String getJoinSql() {
|
return joinSql;
|
}
|
|
public String getCode() {
|
return code;
|
}
|
|
public String getName() {
|
return name;
|
}
|
|
public String getDocument() {
|
return document.getTableName();
|
}
|
|
public String getDocumentDetail() {
|
return documentDetail.getTableName();
|
}
|
|
public String getQtyField() {
|
if (Util.isEmpty(qtyField)) {
|
return "0";
|
}
|
return "document_detail." + qtyField;
|
}
|
|
public String getAmtField() {
|
if (Util.isEmpty(amtField)) {
|
return "0";
|
}
|
|
return "document_detail." + amtField;
|
}
|
|
public String getDocumentPosition() throws Exception {
|
FieldsRuntime fields = document.getTableFieldMetas();
|
|
if (fields.get("position_id") == null ) {
|
return "sale_position_id";
|
}
|
return "position_id";
|
}
|
|
public static TargetType parse(String targetType) {
|
targetType = targetType.toLowerCase();
|
|
if ("implant".equalsIgnoreCase(targetType)) {
|
return Implant;
|
}
|
else if ("dealer".equalsIgnoreCase(targetType)) {
|
return Dealer;
|
}
|
return Unknown;
|
}
|
|
public static TargetType parseByTableName(String tableName) {
|
tableName = tableName.toLowerCase();
|
|
if ("md_target_hospital".equalsIgnoreCase(tableName)) {
|
return Implant;
|
}
|
else if ("md_target_dealer_hospital".equalsIgnoreCase(tableName)) {
|
return Dealer;
|
}
|
return Unknown;
|
}
|
}
|