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; } }