Browse Source

Merge branch 'master' of shine/esb_chenweifeng into master

esb 9 years ago
parent
commit
96e1b10f1b
46 changed files with 7834 additions and 0 deletions
  1. 96 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterDatasetModel.java
  2. 66 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterDatasetRelationModel.java
  3. 96 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterDictModel.java
  4. 116 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterDictentryModel.java
  5. 146 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterMetadataModel.java
  6. 62 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterSchemeDispatchModel.java
  7. 139 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterSchemeModel.java
  8. 121 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterSchemeVersionModel.java
  9. 115 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/AdapterDictEntryResultDetailModel.java
  10. 133 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/AdapterMetadataResultDetailModel.java
  11. 142 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/ApiMetadataResultDetailModel.java
  12. 132 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/SchemeResultDetailModel.java
  13. 105 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/SchemeVersionResultDetailModel.java
  14. 134 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StandardModel.java
  15. 153 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StandardVersionModel.java
  16. 83 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdCDACatalogModel.java
  17. 48 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdCDADatasetModel.java
  18. 92 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdCDAModel.java
  19. 103 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdDataSetModel.java
  20. 87 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdDatasetCatalogModel.java
  21. 79 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdDictionaryEntryModel.java
  22. 92 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdDictionaryModel.java
  23. 178 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdMetaDataModel.java
  24. 68 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdPublisherModel.java
  25. 78 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/resultModel/StandardResultDetailModel.java
  26. 83 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDatasetRelationService.java
  27. 400 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDatasetService.java
  28. 147 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDictService.java
  29. 296 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDictentryService.java
  30. 351 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterMetadataService.java
  31. 59 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterSchemeDispatchService.java
  32. 256 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterSchemeService.java
  33. 356 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterSchemeVersionService.java
  34. 52 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/bo/AdapterVersion.java
  35. 60 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/bo/StandardVersion.java
  36. 429 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StandardService.java
  37. 334 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StandardVersionService.java
  38. 155 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdCDACatalogService.java
  39. 203 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdCDADatasetService.java
  40. 178 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdCDAService.java
  41. 148 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdDatasetCatalogService.java
  42. 510 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdDatasetService.java
  43. 293 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdDictEntryService.java
  44. 299 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdDictService.java
  45. 358 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdMetadataService.java
  46. 203 0
      Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdPublisherService.java

+ 96 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterDatasetModel.java

@ -0,0 +1,96 @@
package com.yihu.ehr.standard.model.adapter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
 * Created by lingfeng on 2015/9/16.
 */
public class AdapterDatasetModel {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "scheme_id")
    private Integer schemeId;
    @Column(name = "std_dataset_id")
    private Integer stdDatasetId;
    @Column(name = "std_dataset_code")
    private String stdDatasetCode;
    @Column(name = "std_dataset_name")
    private String stdDatasetName;
    @Column(name = "adapter_dataset_id")
    private Integer adapterDatasetId;
    @Column(name = "adapter_dataset_code")
    private String adapterDatasetCode;
    @Column(name = "adapter_dataset_name")
    private String adapterDatasetName;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public Integer getStdDatasetId() {
        return stdDatasetId;
    }
    public void setStdDatasetId(Integer stdDatasetId) {
        this.stdDatasetId = stdDatasetId;
    }
    public String getStdDatasetCode() {
        return stdDatasetCode;
    }
    public void setStdDatasetCode(String stdDatasetCode) {
        this.stdDatasetCode = stdDatasetCode;
    }
    public String getStdDatasetName() {
        return stdDatasetName;
    }
    public void setStdDatasetName(String stdDatasetName) {
        this.stdDatasetName = stdDatasetName;
    }
    public Integer getAdapterDatasetId() {
        return adapterDatasetId;
    }
    public void setAdapterDatasetId(Integer adapterDatasetId) {
        this.adapterDatasetId = adapterDatasetId;
    }
    public String getAdapterDatasetCode() {
        return adapterDatasetCode;
    }
    public void setAdapterDatasetCode(String adapterDatasetCode) {
        this.adapterDatasetCode = adapterDatasetCode;
    }
    public String getAdapterDatasetName() {
        return adapterDatasetName;
    }
    public void setAdapterDatasetName(String adapterDatasetName) {
        this.adapterDatasetName = adapterDatasetName;
    }
}

+ 66 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterDatasetRelationModel.java

@ -0,0 +1,66 @@
package com.yihu.ehr.standard.model.adapter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
 * Created by lingfeng on 2015/9/16.
 */
public class AdapterDatasetRelationModel {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "scheme_id")
    private Integer schemeId;
    @Column(name = "master_dataset_id")
    private Integer masterdatasetId;
    @Column(name = "master_metadata_id")
    private Integer masterMetadataId;
    @Column(name = "foreign_metadata_id")
    private Integer foreignMetadataId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public Integer getMasterdatasetId() {
        return masterdatasetId;
    }
    public void setMasterdatasetId(Integer masterdatasetId) {
        this.masterdatasetId = masterdatasetId;
    }
    public Integer getMasterMetadataId() {
        return masterMetadataId;
    }
    public void setMasterMetadataId(Integer masterMetadataId) {
        this.masterMetadataId = masterMetadataId;
    }
    public Integer getForeignMetadataId() {
        return foreignMetadataId;
    }
    public void setForeignMetadataId(Integer foreignMetadataId) {
        this.foreignMetadataId = foreignMetadataId;
    }
}

+ 96 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterDictModel.java

@ -0,0 +1,96 @@
package com.yihu.ehr.standard.model.adapter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
 * Created by lingfeng on 2015/9/16.
 */
public class AdapterDictModel {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "scheme_id")
    private Integer schemeId;
    @Column(name = "std_dict_id")
    private Integer stdDictId;
    @Column(name = "std_dict_code")
    private String stdDictCode;
    @Column(name = "std_dict_name")
    private String stdDictName;
    @Column(name = "adapter_dict_id")
    private Integer adapterDictId;
    @Column(name = "adapter_dict_code")
    private String adapterDictCode;
    @Column(name = "adapter_dict_name")
    private String adapterDictName;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public Integer getStdDictId() {
        return stdDictId;
    }
    public void setStdDictId(Integer stdDictId) {
        this.stdDictId = stdDictId;
    }
    public String getStdDictCode() {
        return stdDictCode;
    }
    public void setStdDictCode(String stdDictCode) {
        this.stdDictCode = stdDictCode;
    }
    public String getStdDictName() {
        return stdDictName;
    }
    public void setStdDictName(String stdDictName) {
        this.stdDictName = stdDictName;
    }
    public Integer getAdapterDictId() {
        return adapterDictId;
    }
    public void setAdapterDictId(Integer adapterDictId) {
        this.adapterDictId = adapterDictId;
    }
    public String getAdapterDictCode() {
        return adapterDictCode;
    }
    public void setAdapterDictCode(String adapterDictCode) {
        this.adapterDictCode = adapterDictCode;
    }
    public String getAdapterDictName() {
        return adapterDictName;
    }
    public void setAdapterDictName(String adapterDictName) {
        this.adapterDictName = adapterDictName;
    }
}

+ 116 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterDictentryModel.java

@ -0,0 +1,116 @@
package com.yihu.ehr.standard.model.adapter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
 * Created by lingfeng on 2015/9/16.
 */
public class AdapterDictentryModel {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "scheme_id")
    private Integer schemeId;
    @Column(name = "std_dict_id")
    private Integer stdDictId;
    @Column(name = "std_entry_id")
    private Integer stdEntryId;
    @Column(name = "std_entry_code")
    private String stdEntryCode;
    @Column(name = "std_entry_value")
    private String stdEntryValue;
    @Column(name = "adapter_dict_id")
    private Integer adapterDictId;
    @Column(name = "adapter_entry_id")
    private Integer adapterEntryId;
    @Column(name = "adapter_entry_code")
    private String adapterEntryCode;
    @Column(name = "adapter_entry_value")
    private String adapterEntryValue;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public Integer getStdDictId() {
        return stdDictId;
    }
    public void setStdDictId(Integer stdDictId) {
        this.stdDictId = stdDictId;
    }
    public Integer getStdEntryId() {
        return stdEntryId;
    }
    public void setStdEntryId(Integer stdEntryId) {
        this.stdEntryId = stdEntryId;
    }
    public String getStdEntryCode() {
        return stdEntryCode;
    }
    public void setStdEntryCode(String stdEntryCode) {
        this.stdEntryCode = stdEntryCode;
    }
    public String getStdEntryValue() {
        return stdEntryValue;
    }
    public void setStdEntryValue(String stdEntryValue) {
        this.stdEntryValue = stdEntryValue;
    }
    public Integer getAdapterDictId() {
        return adapterDictId;
    }
    public void setAdapterDictId(Integer adapterDictId) {
        this.adapterDictId = adapterDictId;
    }
    public Integer getAdapterEntryId() {
        return adapterEntryId;
    }
    public void setAdapterEntryId(Integer adapterEntryId) {
        this.adapterEntryId = adapterEntryId;
    }
    public String getAdapterEntryCode() {
        return adapterEntryCode;
    }
    public void setAdapterEntryCode(String adapterEntryCode) {
        this.adapterEntryCode = adapterEntryCode;
    }
    public String getAdapterEntryValue() {
        return adapterEntryValue;
    }
    public void setAdapterEntryValue(String adapterEntryValue) {
        this.adapterEntryValue = adapterEntryValue;
    }
}

+ 146 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterMetadataModel.java

@ -0,0 +1,146 @@
package com.yihu.ehr.standard.model.adapter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
 * Created by lingfeng on 2015/9/16.
 */
public class AdapterMetadataModel {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "scheme_id")
    private Integer schemeId;
    @Column(name = "std_dataset_id")
    private Integer stdDatasetId;
    @Column(name = "std_metadata_id")
    private Integer stdMetadataId;
    @Column(name = "std_metadata_code")
    private String stdMetadataCode;
    @Column(name = "std_metadata_name")
    private String stdMetadataName;
    @Column(name = "std_dict_id")
    private Integer stdDictId;
    @Column(name = "adapter_dataset_id")
    private Integer adapterDatasetId;
    @Column(name = "adapter_metadata_id")
    private Integer adapterMetadataId;
    @Column(name = "adapter_metadata_code")
    private String adapterMetadataCode;
    @Column(name = "adapter_metadata_name")
    private String adapterMetadataName;
    @Column(name = "adapter_data_type")
    private Integer adapterDataType;
    @Column(name = "adapter_dict_id")
    private Integer adapterDictId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public Integer getStdDatasetId() {
        return stdDatasetId;
    }
    public void setStdDatasetId(Integer stdDatasetId) {
        this.stdDatasetId = stdDatasetId;
    }
    public Integer getStdMetadataId() {
        return stdMetadataId;
    }
    public void setStdMetadataId(Integer stdMetadataId) {
        this.stdMetadataId = stdMetadataId;
    }
    public String getStdMetadataCode() {
        return stdMetadataCode;
    }
    public void setStdMetadataCode(String stdMetadataCode) {
        this.stdMetadataCode = stdMetadataCode;
    }
    public String getStdMetadataName() {
        return stdMetadataName;
    }
    public void setStdMetadataName(String stdMetadataName) {
        this.stdMetadataName = stdMetadataName;
    }
    public Integer getStdDictId() {
        return stdDictId;
    }
    public void setStdDictId(Integer stdDictId) {
        this.stdDictId = stdDictId;
    }
    public Integer getAdapterDatasetId() {
        return adapterDatasetId;
    }
    public void setAdapterDatasetId(Integer adapterDatasetId) {
        this.adapterDatasetId = adapterDatasetId;
    }
    public Integer getAdapterMetadataId() {
        return adapterMetadataId;
    }
    public void setAdapterMetadataId(Integer adapterMetadataId) {
        this.adapterMetadataId = adapterMetadataId;
    }
    public String getAdapterMetadataCode() {
        return adapterMetadataCode;
    }
    public void setAdapterMetadataCode(String adapterMetadataCode) {
        this.adapterMetadataCode = adapterMetadataCode;
    }
    public String getAdapterMetadataName() {
        return adapterMetadataName;
    }
    public void setAdapterMetadataName(String adapterMetadataName) {
        this.adapterMetadataName = adapterMetadataName;
    }
    public Integer getAdapterDataType() {
        return adapterDataType;
    }
    public void setAdapterDataType(Integer adapterDataType) {
        this.adapterDataType = adapterDataType;
    }
    public Integer getAdapterDictId() {
        return adapterDictId;
    }
    public void setAdapterDictId(Integer adapterDictId) {
        this.adapterDictId = adapterDictId;
    }
}

+ 62 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterSchemeDispatchModel.java

@ -0,0 +1,62 @@
package com.yihu.ehr.standard.model.adapter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.Date;
/**
 * 标准版本模型
 *
 * @Created by lingfeng 2015/12/23.
 */
@Entity
@Table(name = "adapter_scheme_dispatch")
public class AdapterSchemeDispatchModel {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "scheme_id")
    private Integer schemeId;
    @Column(name = "org_code")
    private String orgCode;
    @Column(name = "org_name")
    private String orgName;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public String getOrgCode() {
        return orgCode;
    }
    public void setOrgCode(String orgCode) {
        this.orgCode = orgCode;
    }
    public String getOrgName() {
        return orgName;
    }
    public void setOrgName(String orgName) {
        this.orgName = orgName;
    }
}

+ 139 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterSchemeModel.java

@ -0,0 +1,139 @@
package com.yihu.ehr.standard.model.adapter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
/**
 * 标准版本模型
 *
 * @Created by lingfeng 2015/12/23.
 */
@Entity
@Table(name = "adapter_scheme")
public class AdapterSchemeModel {
    public static final String TABLE_NAME = "ADAPTER_SCHEME";
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "parent_id")
    private Integer parentId;
    @Column(name = "name")
    private String name;
    @Column(name = "type")
    private String type;
    @Column(name = "description")
    private String description;
    @Column(name = "status")
    private Integer status;
    @Column(name = "std_id")
    private Integer stdId;
    @Column(name = "std_version")
    private String stdVersion;
    @Column(name = "adapter_std_id")
    private Integer adapterStdId;
    @Column(name = "adapter_std_version")
    private String adapterStdVersion;
    @Column(name = "adapter_publisher_org_code")
    private String adapterPublisherOrgCode;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getParentId() {
        return parentId;
    }
    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Integer getStdId() {
        return stdId;
    }
    public void setStdId(Integer stdId) {
        this.stdId = stdId;
    }
    public String getStdVersion() {
        return stdVersion;
    }
    public void setStdVersion(String stdVersion) {
        this.stdVersion = stdVersion;
    }
    public Integer getAdapterStdId() {
        return adapterStdId;
    }
    public void setAdapterStdId(Integer adapterStdId) {
        this.adapterStdId = adapterStdId;
    }
    public String getAdapterStdVersion() {
        return adapterStdVersion;
    }
    public void setAdapterStdVersion(String adapterStdVersion) {
        this.adapterStdVersion = adapterStdVersion;
    }
    public String getAdapterPublisherOrgCode() {
        return adapterPublisherOrgCode;
    }
    public void setAdapterPublisherOrgCode(String adapterPublisherOrgCode) {
        this.adapterPublisherOrgCode = adapterPublisherOrgCode;
    }
}

+ 121 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/AdapterSchemeVersionModel.java

@ -0,0 +1,121 @@
package com.yihu.ehr.standard.model.adapter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.Date;
/**
 * 标准版本模型
 *
 * @created lingfeng 2015/12/23.
 */
@Entity
@Table(name = "adapter_scheme_version")
public class AdapterSchemeVersionModel {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "scheme_id")
    private Integer schemeId;
    @Column(name = "name")
    private String name;
    @Column(name = "version")
    private String version;
    @Column(name = "publish_time")
    private Date publishTime;
    @Column(name = "publish_user")
    private String publishUser;
    @Column(name = "base_version")
    private String baseVersion;
    @Column(name = "publish_status")
    private Integer publishStatus;
    @Column(name = "path")
    private String path;
    public AdapterSchemeVersionModel(){
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    public Date getPublishTime() {
        return publishTime;
    }
    public void setPublishTime(Date publishTime) {
        this.publishTime = publishTime;
    }
    public String getBaseVersion() {
        return baseVersion;
    }
    public void setBaseVersion(String baseVersion) {
        this.baseVersion = baseVersion;
    }
    public Integer getPublishStatus() {
        return publishStatus;
    }
    public void setPublishStatus(Integer publishStatus) {
        this.publishStatus = publishStatus;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public String getPublishUser() {
        return publishUser;
    }
    public void setPublishUser(String publishUser) {
        this.publishUser = publishUser;
    }
}

+ 115 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/AdapterDictEntryResultDetailModel.java

@ -0,0 +1,115 @@
package com.yihu.ehr.standard.model.adapter.resultModel;
/**
 * Created by lingfeng on 2015/9/16.
 */
public class AdapterDictEntryResultDetailModel {
    private Integer id;
    private Integer schemeId;
    private Integer stdDictId;
    private Integer stdEntryId;
    private String stdEntryCode;
    private String stdEntryValue;
    private Integer adapterDictId;
    private Integer adapterEntryId;
    private String adapterEntryCode;
    private String adapterEntryValue;
    private String adapterDictCode;
    private String adapterDictName;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public Integer getStdDictId() {
        return stdDictId;
    }
    public void setStdDictId(Integer stdDictId) {
        this.stdDictId = stdDictId;
    }
    public Integer getStdEntryId() {
        return stdEntryId;
    }
    public void setStdEntryId(Integer stdEntryId) {
        this.stdEntryId = stdEntryId;
    }
    public String getStdEntryCode() {
        return stdEntryCode;
    }
    public void setStdEntryCode(String stdEntryCode) {
        this.stdEntryCode = stdEntryCode;
    }
    public String getStdEntryValue() {
        return stdEntryValue;
    }
    public void setStdEntryValue(String stdEntryValue) {
        this.stdEntryValue = stdEntryValue;
    }
    public Integer getAdapterDictId() {
        return adapterDictId;
    }
    public void setAdapterDictId(Integer adapterDictId) {
        this.adapterDictId = adapterDictId;
    }
    public Integer getAdapterEntryId() {
        return adapterEntryId;
    }
    public void setAdapterEntryId(Integer adapterEntryId) {
        this.adapterEntryId = adapterEntryId;
    }
    public String getAdapterEntryCode() {
        return adapterEntryCode;
    }
    public void setAdapterEntryCode(String adapterEntryCode) {
        this.adapterEntryCode = adapterEntryCode;
    }
    public String getAdapterEntryValue() {
        return adapterEntryValue;
    }
    public void setAdapterEntryValue(String adapterEntryValue) {
        this.adapterEntryValue = adapterEntryValue;
    }
    public String getAdapterDictCode() {
        return adapterDictCode;
    }
    public void setAdapterDictCode(String adapterDictCode) {
        this.adapterDictCode = adapterDictCode;
    }
    public String getAdapterDictName() {
        return adapterDictName;
    }
    public void setAdapterDictName(String adapterDictName) {
        this.adapterDictName = adapterDictName;
    }
}

+ 133 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/AdapterMetadataResultDetailModel.java

@ -0,0 +1,133 @@
package com.yihu.ehr.standard.model.adapter.resultModel;
/**
 * Created by lingfeng on 2015/9/16.
 */
public class AdapterMetadataResultDetailModel {
    private Integer id;
    private Integer schemeId;
    private Integer stdDatasetId;
    private Integer stdMetadataId;
    private String stdMetadataCode;
    private String stdMetadataName;
    private Integer stdDictId;
    private Integer adapterDatasetId;
    private Integer adapterMetadataId;
    private String adapterMetadataCode;
    private String adapterMetadataName;
    private Integer adapterDataType;
    private String adapterMetadataType;
    private Integer adapterDictId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public Integer getStdDatasetId() {
        return stdDatasetId;
    }
    public void setStdDatasetId(Integer stdDatasetId) {
        this.stdDatasetId = stdDatasetId;
    }
    public Integer getStdMetadataId() {
        return stdMetadataId;
    }
    public void setStdMetadataId(Integer stdMetadataId) {
        this.stdMetadataId = stdMetadataId;
    }
    public String getStdMetadataCode() {
        return stdMetadataCode;
    }
    public void setStdMetadataCode(String stdMetadataCode) {
        this.stdMetadataCode = stdMetadataCode;
    }
    public String getStdMetadataName() {
        return stdMetadataName;
    }
    public void setStdMetadataName(String stdMetadataName) {
        this.stdMetadataName = stdMetadataName;
    }
    public Integer getStdDictId() {
        return stdDictId;
    }
    public void setStdDictId(Integer stdDictId) {
        this.stdDictId = stdDictId;
    }
    public Integer getAdapterDatasetId() {
        return adapterDatasetId;
    }
    public void setAdapterDatasetId(Integer adapterDatasetId) {
        this.adapterDatasetId = adapterDatasetId;
    }
    public Integer getAdapterMetadataId() {
        return adapterMetadataId;
    }
    public void setAdapterMetadataId(Integer adapterMetadataId) {
        this.adapterMetadataId = adapterMetadataId;
    }
    public String getAdapterMetadataCode() {
        return adapterMetadataCode;
    }
    public void setAdapterMetadataCode(String adapterMetadataCode) {
        this.adapterMetadataCode = adapterMetadataCode;
    }
    public String getAdapterMetadataName() {
        return adapterMetadataName;
    }
    public void setAdapterMetadataName(String adapterMetadataName) {
        this.adapterMetadataName = adapterMetadataName;
    }
    public Integer getAdapterDataType() {
        return adapterDataType;
    }
    public void setAdapterDataType(Integer adapterDataType) {
        this.adapterDataType = adapterDataType;
    }
    public Integer getAdapterDictId() {
        return adapterDictId;
    }
    public void setAdapterDictId(Integer adapterDictId) {
        this.adapterDictId = adapterDictId;
    }
    public String getAdapterMetadataType() {
        return adapterMetadataType;
    }
    public void setAdapterMetadataType(String adapterMetadataType) {
        this.adapterMetadataType = adapterMetadataType;
    }
}

+ 142 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/ApiMetadataResultDetailModel.java

@ -0,0 +1,142 @@
package com.yihu.ehr.standard.model.adapter.resultModel;
/**
 * Created by lingfeng on 2015/9/18.
 */
public class ApiMetadataResultDetailModel {
    private Integer id;
    private Integer schemeId;
    private Integer stdDatasetId;
    private Integer stdMetadataId;
    private String stdMetadataCode;
    private String stdMetadataName;
    private Integer stdDictId;
    private Integer adapterDatasetId;
    private Integer adapterMetadataId;
    private String adapterMetadataCode;
    private String adapterMetadataName;
    private Integer adapterDataType;
    private String adapterDatasetCode;
    private String adapterDatasetName;
    private Integer adapterDictId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public Integer getStdDatasetId() {
        return stdDatasetId;
    }
    public void setStdDatasetId(Integer stdDatasetId) {
        this.stdDatasetId = stdDatasetId;
    }
    public Integer getStdMetadataId() {
        return stdMetadataId;
    }
    public void setStdMetadataId(Integer stdMetadataId) {
        this.stdMetadataId = stdMetadataId;
    }
    public String getStdMetadataCode() {
        return stdMetadataCode;
    }
    public void setStdMetadataCode(String stdMetadataCode) {
        this.stdMetadataCode = stdMetadataCode;
    }
    public String getStdMetadataName() {
        return stdMetadataName;
    }
    public void setStdMetadataName(String stdMetadataName) {
        this.stdMetadataName = stdMetadataName;
    }
    public Integer getStdDictId() {
        return stdDictId;
    }
    public void setStdDictId(Integer stdDictId) {
        this.stdDictId = stdDictId;
    }
    public Integer getAdapterDatasetId() {
        return adapterDatasetId;
    }
    public void setAdapterDatasetId(Integer adapterDatasetId) {
        this.adapterDatasetId = adapterDatasetId;
    }
    public Integer getAdapterMetadataId() {
        return adapterMetadataId;
    }
    public void setAdapterMetadataId(Integer adapterMetadataId) {
        this.adapterMetadataId = adapterMetadataId;
    }
    public String getAdapterMetadataCode() {
        return adapterMetadataCode;
    }
    public void setAdapterMetadataCode(String adapterMetadataCode) {
        this.adapterMetadataCode = adapterMetadataCode;
    }
    public String getAdapterMetadataName() {
        return adapterMetadataName;
    }
    public void setAdapterMetadataName(String adapterMetadataName) {
        this.adapterMetadataName = adapterMetadataName;
    }
    public Integer getAdapterDataType() {
        return adapterDataType;
    }
    public void setAdapterDataType(Integer adapterDataType) {
        this.adapterDataType = adapterDataType;
    }
    public Integer getAdapterDictId() {
        return adapterDictId;
    }
    public void setAdapterDictId(Integer adapterDictId) {
        this.adapterDictId = adapterDictId;
    }
    public String getAdapterDatasetCode() {
        return adapterDatasetCode;
    }
    public void setAdapterDatasetCode(String adapterDatasetCode) {
        this.adapterDatasetCode = adapterDatasetCode;
    }
    public String getAdapterDatasetName() {
        return adapterDatasetName;
    }
    public void setAdapterDatasetName(String adapterDatasetName) {
        this.adapterDatasetName = adapterDatasetName;
    }
}

+ 132 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/SchemeResultDetailModel.java

@ -0,0 +1,132 @@
package com.yihu.ehr.standard.model.adapter.resultModel;
import java.io.Serializable;
public class SchemeResultDetailModel implements Serializable {
    String id;
    String pid;
    String name;
    Integer status;
    String stdName;
    String stdVersionName;
    String stdVersion;
    String publisher;
    String adapterName;
    String adapterVersionName;
    String adapterStdVersion;
    String version;
    Integer type;
    String date;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPid() {
        return pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getStdName() {
        return stdName;
    }
    public void setStdName(String stdName) {
        this.stdName = stdName;
    }
    public String getStdVersionName() {
        return stdVersionName;
    }
    public void setStdVersionName(String stdVersionName) {
        this.stdVersionName = stdVersionName;
    }
    public String getPublisher() {
        return publisher;
    }
    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }
    public String getAdapterName() {
        return adapterName;
    }
    public void setAdapterName(String adapterName) {
        this.adapterName = adapterName;
    }
    public String getAdapterVersionName() {
        return adapterVersionName;
    }
    public void setAdapterVersionName(String adapterVersionName) {
        this.adapterVersionName = adapterVersionName;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    public String getStdVersion() {
        return stdVersion;
    }
    public void setStdVersion(String stdVersion) {
        this.stdVersion = stdVersion;
    }
    public String getAdapterStdVersion() {
        return adapterStdVersion;
    }
    public void setAdapterStdVersion(String adapterStdVersion) {
        this.adapterStdVersion = adapterStdVersion;
    }
}

+ 105 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/adapter/resultModel/SchemeVersionResultDetailModel.java

@ -0,0 +1,105 @@
package com.yihu.ehr.standard.model.adapter.resultModel;
import java.util.Date;
/**
 * 标准版本模型
 *
 * @created lingfeng 2015/12/23.
 */
public class SchemeVersionResultDetailModel {
    private Integer id;
    private Integer schemeId;
    private String name;
    private String schemeName;
    private String version;
    private Date publishTime;
    private String publishUser;
    private String baseVersion;
    private Integer publishStatus;
    private String path;
    public SchemeVersionResultDetailModel(){
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getSchemeId() {
        return schemeId;
    }
    public void setSchemeId(Integer schemeId) {
        this.schemeId = schemeId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSchemeName() {
        return schemeName;
    }
    public void setSchemeName(String schemeName) {
        this.schemeName = schemeName;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    public Date getPublishTime() {
        return publishTime;
    }
    public void setPublishTime(Date publishTime) {
        this.publishTime = publishTime;
    }
    public String getPublishUser() {
        return publishUser;
    }
    public void setPublishUser(String publishUser) {
        this.publishUser = publishUser;
    }
    public String getBaseVersion() {
        return baseVersion;
    }
    public void setBaseVersion(String baseVersion) {
        this.baseVersion = baseVersion;
    }
    public Integer getPublishStatus() {
        return publishStatus;
    }
    public void setPublishStatus(Integer publishStatus) {
        this.publishStatus = publishStatus;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
}

+ 134 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StandardModel.java

@ -0,0 +1,134 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
/**
 * 标准基本信息
 *
 * @created Airhead 2015/12/23.
 */
@Entity
@Table(name = "std_info")
public class StandardModel  implements Serializable {
    public static final String TABLE_NAME = "STD_INFO";
    @Id
    @GenericGenerator(name = "generator", strategy = "")
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name = "code")
    private String code;
    @Column(name = "publisher")
    private String publisher;
    @Column(name = "publisher_org_code")
    private String publisherOrgCode;
    @Column(name = "summary")
    private String summary;
    @Column(name = "ref_standard")
    private String refStandard;
    @Column(name = "ref_standard_version")
    private String refStandardVersion;
    @Column(name = "version_status")
    private Integer versionStatus;
    public StandardModel(){
    }
    public StandardModel(StandardModel standardModel){
        this.id = standardModel.id;
        this.name = standardModel.name;
        this.code = standardModel.code;
        this.publisher = standardModel.publisher;
        this.publisherOrgCode = standardModel.publisherOrgCode;
        this.summary = standardModel.summary;
        this.refStandard = standardModel.refStandard;
        this.refStandardVersion = standardModel.refStandardVersion;
        this.versionStatus = standardModel.versionStatus;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getPublisher() {
        return publisher;
    }
    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }
    public String getPublisherOrgCode() {
        return publisherOrgCode;
    }
    public void setPublisherOrgCode(String publisherOrgCode) {
        this.publisherOrgCode = publisherOrgCode;
    }
    public String getSummary() {
        return summary;
    }
    public void setSummary(String summary) {
        this.summary = summary;
    }
    public String getRefStandard() {
        return refStandard;
    }
    public void setRefStandard(String refStandard) {
        this.refStandard = refStandard;
    }
    public String getRefStandardVersion() {
        return refStandardVersion;
    }
    public void setRefStandardVersion(String refStandardVersion) {
        this.refStandardVersion = refStandardVersion;
    }
    public Integer getVersionStatus() {
        return versionStatus;
    }
    public void setVersionStatus(Integer versionStatus) {
        this.versionStatus = versionStatus;
    }
}

+ 153 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StandardVersionModel.java

@ -0,0 +1,153 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
 * 标准版本模型
 *
 * @created Airhead 2015/12/23.
 */
@Entity
@Table(name = "std_version")
public class StandardVersionModel implements Serializable {
    public static final String TABLE_NAME = "STD_VERSION";
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "version")
    private String version;
    @Column(name = "std_id")
    private Integer standardId;
    @Column(name = "name")
    private String name;
    @Column(name = "publish_time")
    private Date publishTime;
    @Column(name = "publish_user")
    private String publishUser;
    @Column(name = "base_version")
    private String baseVersion;
    @Column(name = "primary_version")
    private String primaryVersion;
    @Column(name = "publish_status")
    private Integer publishStatus;
    @Column(name = "path")
    private String path;
    public StandardVersionModel(){
    }
    public StandardVersionModel(StandardVersionModel standardVersionModel){
        this.id = standardVersionModel.id;
        this.version = standardVersionModel.version;
        this.standardId = standardVersionModel.standardId;
        this.name = standardVersionModel.name;
        this.publishTime = standardVersionModel.publishTime;
        this.publishUser = standardVersionModel.publishUser;
        this.baseVersion = standardVersionModel.baseVersion;
        this.primaryVersion = standardVersionModel.primaryVersion;
        this.publishStatus = standardVersionModel.publishStatus;
        this.path = standardVersionModel.path;
    }
    public static String getTableName() {
        return TABLE_NAME;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    public Integer getStandardId() {
        return standardId;
    }
    public void setStandardId(Integer standardId) {
        this.standardId = standardId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getPublishTime() {
        return publishTime;
    }
    public void setPublishTime(Date publishTime) {
        this.publishTime = publishTime;
    }
    public String getPublishUser() {
        return publishUser;
    }
    public void setPublishUser(String publishUser) {
        this.publishUser = publishUser;
    }
    public String getBaseVersion() {
        return baseVersion;
    }
    public void setBaseVersion(String baseVersion) {
        this.baseVersion = baseVersion;
    }
    public String getPrimaryVersion() {
        return primaryVersion;
    }
    public void setPrimaryVersion(String primaryVersion) {
        this.primaryVersion = primaryVersion;
    }
    public Integer getPublishStatus() {
        return publishStatus;
    }
    public void setPublishStatus(Integer publishStatus) {
        this.publishStatus = publishStatus;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
}

+ 83 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdCDACatalogModel.java

@ -0,0 +1,83 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
/**
 * CDA类型模型
 *
 * @created Airhead 2015/12/23.
 */
@Entity
@Table(name = "std_cda_catalog")
public class StdCDACatalogModel {
    public static String TABLE_NAME="STD_CDA_CATALOG";
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "code")
    private String code;
    @Column(name = "name")
    private String name;
    @Column(name = "parent_id")
    private Integer parentID;
    @Column(name = "sort")
    private String sort;
    @Column(name = "description")
    private String description;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getParentID() {
        return parentID;
    }
    public void setParentID(Integer parentID) {
        this.parentID = parentID;
    }
    public String getSort() {
        return sort;
    }
    public void setSort(String sort) {
        this.sort = sort;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
}

+ 48 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdCDADatasetModel.java

@ -0,0 +1,48 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.Id;
/**
 * CDA与数据集关系模型
 *
 * @created Airhead 2015/12/23.
 */
public class StdCDADatasetModel {
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "cda_id")
    private Integer cdaID;
    @Column(name = "dataset_id")
    private Integer datasetId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getCdaID() {
        return cdaID;
    }
    public void setCdaID(Integer cdaID) {
        this.cdaID = cdaID;
    }
    public Integer getdatasetId() {
        return datasetId;
    }
    public void setdatasetId(Integer datasetId) {
        this.datasetId = datasetId;
    }
}

+ 92 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdCDAModel.java

@ -0,0 +1,92 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.Id;
/**
 * @created Airhead 2015/12/23.
 */
public class StdCDAModel {
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "std_id")
    private Integer standardId;
    @Column(name = "code")
    private String code;
    @Column(name = "name")
    private String name;
    @Column(name = "path")
    private String path;
    @Column(name = "description")
    private String description;
    @Column(name = "catalog_id")
    private Integer catalogID;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getstandardId() {
        return standardId;
    }
    public void setstandardId(Integer standardId) {
        this.standardId = standardId;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public Integer getCatalogID() {
        return catalogID;
    }
    public void setCatalogID(Integer catalogID) {
        this.catalogID = catalogID;
    }
}

+ 103 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdDataSetModel.java

@ -0,0 +1,103 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.Id;
/**
 * Created by wq on 2015/9/16.
 */
public class StdDataSetModel {
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "std_id")
    private Integer standardId;
    @Column(name = "code")
    private String code;
    @Column(name = "name")
    private String name;
    @Column(name = "language")
    private String language;
    @Column(name = "catalog")
    private Integer catalog;
    @Column(name = "summary")
    private String summary;
    @Column(name = "class_model")
    private String classModel;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getstandardId() {
        return standardId;
    }
    public void setstandardId(Integer standardId) {
        this.standardId = standardId;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getLanguage() {
        return language;
    }
    public void setLanguage(String language) {
        this.language = language;
    }
    public Integer getCatalog() {
        return catalog;
    }
    public void setCatalog(Integer catalog) {
        this.catalog = catalog;
    }
    public String getSummary() {
        return summary;
    }
    public void setSummary(String summary) {
        this.summary = summary;
    }
    public String getClassModel() {
        return classModel;
    }
    public void setClassModel(String classModel) {
        this.classModel = classModel;
    }
}

+ 87 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdDatasetCatalogModel.java

@ -0,0 +1,87 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
 * 数据集模型
 *
 * @created Airhead 2015/12/23.
 */
@Entity
@Table(name = "std_dataset_catalog")
public class StdDatasetCatalogModel {
    public static String TABLE_NAME = "STD_DATASET_CATALOG";
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name = "code")
    private String code;
    @Column(name = "parent_id")
    private Integer parentID;
    @Column(name = "sort")
    private String sort;
    @Column(name = "description")
    private String description;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public Integer getParentID() {
        return parentID;
    }
    public void setParentID(Integer parentID) {
        this.parentID = parentID;
    }
    public String getSort() {
        return sort;
    }
    public void setSort(String sort) {
        this.sort = sort;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
}

+ 79 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdDictionaryEntryModel.java

@ -0,0 +1,79 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.Id;
/**
 * @created Airhead 2015/12/23.
 */
public class StdDictionaryEntryModel {
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "std_id")
    private Integer standardId;
    @Column(name = "dict_id")
    private Integer dictId;
    @Column(name = "code")
    private String code;
    @Column(name = "value")
    private String value;
    @Column(name = "description")
    private String description;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getstandardId() {
        return standardId;
    }
    public void setstandardId(Integer standardId) {
        this.standardId = standardId;
    }
    public Integer getDictId() {
        return dictId;
    }
    public void setDictId(Integer dictId) {
        this.dictId = dictId;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
}

+ 92 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdDictionaryModel.java

@ -0,0 +1,92 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.Id;
/**
 * 标准数据字典模型
 *
 * @created Airhead 2015/12/23.
 */
public class StdDictionaryModel {
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "std_id")
    private Integer standardId;
    @Column(name = "code")
    private String code;
    @Column(name = "name")
    private String name;
    @Column(name = "define")
    private String define;
    @Column(name = "description")
    private String description;
    @Column(name = "parent_id")
    private Integer parentId;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getstandardId() {
        return standardId;
    }
    public void setstandardId(Integer standardId) {
        this.standardId = standardId;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDefine() {
        return define;
    }
    public void setDefine(String define) {
        this.define = define;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public Integer getParentId() {
        return parentId;
    }
    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }
}

+ 178 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdMetaDataModel.java

@ -0,0 +1,178 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Column;
import javax.persistence.Id;
/**
 * Created by wq on 2015/9/22.
 */
public class StdMetaDataModel {
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;                    // 数据元ID
    @Column(name = "std_id")
    private Integer standardId;           //标准ID
    @Column(name = "dataset_id")
    private Integer datasetId;             //数据集ID
    @Column(name = "code")
    private String code;           // 内部代码
    @Column(name = "de_code")
    private String deCode;                 // 标准元编码
    @Column(name = "name")
    private String name;                // 名称
    @Column(name = "type")
    private String type;                // 数据元数据类型
    @Column(name = "format")
    private String format;              // 表示格式
    @Column(name = "dict_id")
    private Integer dictId;                //字典ID
    @Column(name = "definition")
    private String definition;          // 标准元定义, 即说明
    @Column(name = "nullable")
    private Integer nullable;           // 是否可为空
    @Column(name = "column_length")
    private String columnLength;         // 数据长度
    @Column(name = "column_type")
    private String columnType;          // 数据类型
    @Column(name = "column_name")
    private String columnName;          // 字段名
    @Column(name = "primary_key")
    private Integer primaryKey;         // 是否为主键
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getStandardId() {
        return standardId;
    }
    public void setStandardId(Integer standardId) {
        this.standardId = standardId;
    }
    public Integer getDatasetId() {
        return datasetId;
    }
    public void setDatasetId(Integer datasetId) {
        this.datasetId = datasetId;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getDeCode() {
        return deCode;
    }
    public void setDeCode(String deCode) {
        this.deCode = deCode;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getFormat() {
        return format;
    }
    public void setFormat(String format) {
        this.format = format;
    }
    public Integer getDictId() {
        return dictId;
    }
    public void setDictId(Integer dictId) {
        this.dictId = dictId;
    }
    public String getDefinition() {
        return definition;
    }
    public void setDefinition(String definition) {
        this.definition = definition;
    }
    public Integer getNullable() {
        return nullable;
    }
    public void setNullable(Integer nullable) {
        this.nullable = nullable;
    }
    public String getColumnLength() {
        return columnLength;
    }
    public void setColumnLength(String columnLength) {
        this.columnLength = columnLength;
    }
    public String getColumnType() {
        return columnType;
    }
    public void setColumnType(String columnType) {
        this.columnType = columnType;
    }
    public String getColumnName() {
        return columnName;
    }
    public void setColumnName(String columnName) {
        this.columnName = columnName;
    }
    public Integer getPrimaryKey() {
        return primaryKey;
    }
    public void setPrimaryKey(Integer primaryKey) {
        this.primaryKey = primaryKey;
    }
}

+ 68 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/StdPublisherModel.java

@ -0,0 +1,68 @@
package com.yihu.ehr.standard.model.standard;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
/**
 * 标准基本信息
 *
 * @created Airhead 2015/12/23.
 */
@Entity
@Table(name = "std_publisher")
public class StdPublisherModel implements Serializable {
    public static final String TABLE_NAME = "STD_PUBLISHER";
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name = "code")
    private String code;
    @Column(name = "description")
    private String description;
    public static String getTableName() {
        return TABLE_NAME;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
}

+ 78 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/model/standard/resultModel/StandardResultDetailModel.java

@ -0,0 +1,78 @@
package com.yihu.ehr.standard.model.standard.resultModel;
import java.io.Serializable;
public class StandardResultDetailModel implements Serializable {
    String id;
    String pid;
    String name;
    String code;
    Integer status;
    String publisher;
    Integer type;
    String date;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPid() {
        return pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPublisher() {
        return publisher;
    }
    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
}

+ 83 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDatasetRelationService.java

@ -0,0 +1,83 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.adapter.AdapterDatasetRelationModel;
import com.yihu.ehr.standard.service.bo.AdapterVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Transactional
@Service("AdapterDatasetRelationService")
public class AdapterDatasetRelationService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterDatasetRelationService";
    public AdapterDatasetRelationService() {
    }
    public void finalize() throws Throwable {
        super.finalize();
    }
    public AdapterDatasetRelationModel add(String adapterVersion, String datasetRelation) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDatasetRelationModel adapterDatasetRelationModel = objectMapper.readValue(datasetRelation, AdapterDatasetRelationModel.class);
            Session session = getCurrentSession();
            String sql = "select max(id) from " + version.getMetaDataTableName();
            Query query = session.createSQLQuery(sql);
            Object object = query.uniqueResult();
            adapterDatasetRelationModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDatasetRelationModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDatasetRelationModel.class);
            sql = sqlCreator.insertData(version.getMetaDataTableName(), jsonNode);
            query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDatasetRelationModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.SaveDatasetRelationFailed);
        }
    }
    public void delete(String adapterVersion, Integer datasetRelationId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) {
                throw new ApiException(ErrorCode.InvalidStdVersion);
            }
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getMetaDataTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", datasetRelationId);
            query.executeUpdate();
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteDataSetRelationFailed);
        }
    }
    public AdapterDatasetRelationModel modify(String adapterVersion, String datasetRelation) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDatasetRelationModel adapterDatasetRelationModel = objectMapper.readValue(datasetRelation, AdapterDatasetRelationModel.class);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDatasetRelationModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDatasetRelationModel.class);
            String sql = sqlCreator.updateDataByTableKey(version.getMetaDataTableName(), jsonNode);
            Query query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDatasetRelationModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateatasetRelationFailed);
        }
    }
}

+ 400 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDatasetService.java

@ -0,0 +1,400 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.constrant.TreeView;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.adapter.AdapterDatasetModel;
import com.yihu.ehr.standard.model.adapter.AdapterMetadataModel;
import com.yihu.ehr.standard.model.standard.StdDataSetModel;
import com.yihu.ehr.standard.model.standard.StdMetaDataModel;
import com.yihu.ehr.standard.service.bo.AdapterVersion;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@Transactional
@Service("AdapterDatasetService")
public class AdapterDatasetService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterDatasetService";
    public AdapterDatasetService() {
    }
    public void finalize() throws Throwable {
        super.finalize();
    }
    public AdapterDatasetModel add(String adapterVersion, String dataset) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDatasetModel adapterDatasetModel = objectMapper.readValue(dataset, AdapterDatasetModel.class);
            adapterDatasetModel.setId(getMaxId(version.getDataSetTableName()));
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDatasetModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
            String sql = sqlCreator.insertData(version.getDataSetTableName(), jsonNode);
            Query query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDatasetModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.SavedatasetFailed);
        }
    }
    public void delete(String adapterVersion, Integer datasetId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) {
                throw new ApiException(ErrorCode.InvalidStdVersion);
            }
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getDataSetTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", datasetId);
            query.executeUpdate();
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteDataSetFailed);
        }
    }
    public AdapterDatasetModel modify(String adapterVersion, String dataset) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper =  new ObjectMapper();
            AdapterDatasetModel adapterDatasetModel = objectMapper.readValue(dataset, AdapterDatasetModel.class);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDatasetModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
            String sql = sqlCreator.updateDataByTableKey(version.getDataSetTableName(), jsonNode);
            Query query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDatasetModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateDatasetFailed);
        }
    }
    public List getDatasetList(Class tClass, String version, String condition, String order, Integer limit, Integer offset) {
        try {
            AdapterVersion adapterVersion = new AdapterVersion(version);
            String tableName = adapterVersion.getDataSetTableName();
            SqlCreator sqlCreator = new SqlCreator(tClass);
            ObjectMapper objectMapper =  new ObjectMapper();
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("stdDatasetName", "stdDatasetCode", name);
            }
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
            String sql = sqlCreator.selectData(tableName);
            Query query = getQuery(sqlCreator, sql);
            if (limit != null) {
                query.setMaxResults(limit);
                if (offset != null) {
                    query.setFirstResult(offset * limit);
                }
            }
            return query.list();
        } catch (Exception e) {
            e.printStackTrace();
            throw new ApiException(ErrorCode.GetDataSetListFailed);
        }
    }
    public Integer getDatasetInt(Class tClass, String version, String condition) {
        try {
            AdapterVersion adapterVersion = new AdapterVersion(version);
            String tableName = adapterVersion.getDataSetTableName();
            SqlCreator sqlCreator = new SqlCreator(tClass);
            ObjectMapper objectMapper =  new ObjectMapper();
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("stdDatasetName", "stdDatasetCode", name);
            }
            String sql = sqlCreator.countData(tableName);
            Query query = getCurrentSession().createSQLQuery(sql);
            for (String key : sqlCreator.getKeyValueMap().keySet()) {
                query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
            }
            Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
            return count;
        } catch (Exception e) {
            e.printStackTrace();
            throw new ApiException(ErrorCode.GetDataSetListFailed);
        }
    }
    public void getAdapterCustomize(String adapterVersion, List<TreeView> treeViewList, List<Integer> hasCheckDatasetIdList, List<Integer> hasCheckMetadataIdList) {
        boolean adapter = false;  //定制是否添加根节点
        //获取所有定制数据集
        AdapterVersion aVersion = new AdapterVersion(adapterVersion);
        List<AdapterDatasetModel> adapterDataSetList = getList(AdapterDatasetModel.class, aVersion.getDataSetTableName(), "", "", null, null, ErrorCode.GetDataSetListFailed);
        List<AdapterMetadataModel> adapterMetaDataList = getList(AdapterMetadataModel.class, aVersion.getMetaDataTableName(), "", "", null, null, ErrorCode.GetMetaDataListFaield);
        List<TreeView> adapterCustomizeList = new ArrayList<>();
        //数据集
        for (AdapterDatasetModel adapterDataset : adapterDataSetList) {
            TreeView parent = new TreeView();
            parent.setId("AD" + adapterDataset.getStdDatasetId());
            parent.setPid("A0");
            parent.setText(adapterDataset.getStdDatasetName());
            parent.setIschecked(true);
            adapterCustomizeList.add(parent);
            adapter = true;
            hasCheckDatasetIdList.add(adapterDataset.getStdDatasetId());
        }
        //数据元
        for (AdapterMetadataModel adapterMetadat : adapterMetaDataList) {
            TreeView child = new TreeView();
            child.setId("AM" + adapterMetadat.getStdMetadataId());
            child.setPid("AD" + adapterMetadat.getStdDatasetId());
            child.setText(adapterMetadat.getStdMetadataName());
            child.setIschecked(true);
            adapterCustomizeList.add(child);
            adapter = true;
            hasCheckMetadataIdList.add(adapterMetadat.getStdMetadataId());
        }
        //根节点
        if (adapter) {
            TreeView adapterRoot = new TreeView();
            adapterRoot.setId("A0");
            adapterRoot.setPid("-1");
            adapterRoot.setText("数据集");
            adapterRoot.setIschecked(true);
            adapterCustomizeList.add(adapterRoot);
        }
        treeViewList.addAll(adapterCustomizeList);
    }
    public void getStdCustomize(String stdVersion, List<TreeView> treeViewList, List<Integer> hasCheckDatasetIdList, List<Integer> hasCheckMetadataIdList) {
        String id;
        boolean check;     //是否勾选
        boolean std = false;      //标准是否添加根节点
        long childCheckCount;
        long datasetCount=0;
        //获取所有标准数据集
        StandardVersion sVersion = new StandardVersion(stdVersion);
        List<StdDataSetModel> dataSetList = getList(StdDataSetModel.class, sVersion.getDataSetTableName(),  "", "", null, null, ErrorCode.GetDataSetListFailed);
        String idListStr = Constants.EMPTY;
        for (StdDataSetModel dataSet : dataSetList) {
            idListStr += dataSet.getId() + Constants.COMMA;
        }
        Map<Integer, List<StdMetaDataModel>> stdDataSetModelMap = new HashMap<>();
        if (!StringUtil.isEmpty(idListStr)) {
            String tableName = sVersion.getMetaDataTableName();
            SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
            String sql = sqlCreator.selectData(tableName);
            Query query = getQuery(sqlCreator, sql);
            List<StdMetaDataModel> stdMetaDataModelList = query.list();
            for (StdMetaDataModel stdMetaDataModel : stdMetaDataModelList) {
                List<StdMetaDataModel> stdMetaDataModels = stdDataSetModelMap.get(stdMetaDataModel.getDatasetId());
                if (stdMetaDataModels == null) {
                    stdMetaDataModels = new ArrayList<>();
                }
                stdMetaDataModels.add(stdMetaDataModel);
                stdDataSetModelMap.put(stdMetaDataModel.getDatasetId(), stdMetaDataModels);
            }
        }
        List<TreeView> stdCustomizeList = new ArrayList<>();
        for (StdDataSetModel dataSet : dataSetList) {
            TreeView parent = new TreeView();
            parent.setId("SD" + dataSet.getId());
            parent.setPid("S0");
            parent.setText(dataSet.getName());
            parent.setIschecked(false);
            std = true;
            childCheckCount = 0;
            List<StdMetaDataModel> metaDataList = stdDataSetModelMap.get(dataSet.getId());
            if (!CollectionUtil.isEmpty(metaDataList)) {
                for (StdMetaDataModel metaData : metaDataList) {
                    id = String.valueOf(metaData.getId());
                    if (hasCheckMetadataIdList.contains(metaData.getId())) {
                        check = true;
                        childCheckCount++;
                    } else {
                        check = false;
                    }
                    TreeView child = new TreeView();
                    child.setId("SM" + id);
                    child.setPid("SD" + dataSet.getId());
                    child.setText(metaData.getName());
                    child.setIschecked(check);
                    stdCustomizeList.add(child);
                }
                std = true;
            }
            if (!CollectionUtil.isEmpty(metaDataList) && metaDataList.size() == childCheckCount && childCheckCount > 0) {
                parent.setIschecked(true);//子节点全选
                datasetCount++;
            } else if (CollectionUtil.isEmpty(metaDataList) && hasCheckDatasetIdList.contains(dataSet.getId())) {
                parent.setIschecked(true);
                datasetCount++;
            }
            stdCustomizeList.add(parent);
        }
        //根节点
        if (std) {
            TreeView stdRoot = new TreeView();
            stdRoot.setId("S0");
            stdRoot.setPid("-1");
            stdRoot.setText("数据集");
            if(datasetCount==dataSetList.size()){
                stdRoot.setIschecked(true);
            }else {
                stdRoot.setIschecked(false);
            }
            stdCustomizeList.add(stdRoot);
        }
        treeViewList.addAll(stdCustomizeList);
    }
    public List<TreeView> getDatasetCustomize(String adapterVersion, String stdVersion) {
        try {
            List<TreeView> treeViewList = new ArrayList<>();
            List<Integer> hasCheckDatasetIdList = new ArrayList<>();
            List<Integer> hasCheckMetadataIdList = new ArrayList<>();
            getAdapterCustomize(adapterVersion, treeViewList, hasCheckDatasetIdList, hasCheckMetadataIdList);
            getStdCustomize(stdVersion, treeViewList, hasCheckDatasetIdList, hasCheckMetadataIdList);
            return treeViewList;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.GetDataSetListFailed);
        }
    }
    public boolean updateCustomize(Integer schemeId, String adapterVersion, String stdVersion, String datasetIdStr,String metaDataIdStr) {
        AdapterVersion aVersion = new AdapterVersion(adapterVersion);
        StandardVersion sVersion = new StandardVersion(stdVersion);
        try {
            String[] datasetIdList = datasetIdStr.split(",");
            String[] metadataIdList = metaDataIdStr.split(",");
            List<Integer> newDatasetIdList = new ArrayList<>();
            List<Integer> newMetadataIdList = new ArrayList<>();
            for (String datasetId : datasetIdList) {
                if(!StringUtil.isStrEmpty(datasetId)){
                    Integer newDatasetId = Integer.parseInt(datasetId);
                    newDatasetIdList.add(newDatasetId);
                }
            }
            for (String metadataId : metadataIdList) {
                if(!StringUtil.isStrEmpty(metadataId)){
                    Integer newMetadataId = Integer.parseInt(metadataId);
                    newMetadataIdList.add(newMetadataId);
                }
            }
            updateDatasetCustomizeData(schemeId, aVersion, sVersion, newDatasetIdList, newMetadataIdList);
            return true;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateDatasetFailed);
        }
    }
    public void updateDatasetCustomizeData(Integer schemeId, AdapterVersion aVersion, StandardVersion sVersion, List<Integer> newDatasetIdList, List<Integer> newMetadataIdList) {
        List<String> insertSqlList = new ArrayList<>();
        insertSqlList.add(Constants.DELETE + Constants.FROM + aVersion.getDataSetTableName());
        insertSqlList.add(Constants.DELETE + Constants.FROM + aVersion.getMetaDataTableName());
        insertSqlList.add(Constants.DELETE + Constants.FROM + aVersion.getDictTableName());
        insertSqlList.add(Constants.DELETE + Constants.FROM + aVersion.getDictEntryTableName());
        List<StdMetaDataModel> metadataList = new ArrayList<StdMetaDataModel>();
        if(newMetadataIdList.size()>0){
            SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
            sqlCreator.inCondition("id", newMetadataIdList);
            String sql = sqlCreator.selectData(sVersion.getMetaDataTableName());
            Query query = getQuery(sqlCreator, sql);
             metadataList = query.list();
        }
        List<Integer> newDictdList = new ArrayList<>();
        for (StdMetaDataModel stdMetaDataModel : metadataList) {
            if (stdMetaDataModel.getDictId() != null && !newDictdList.contains(stdMetaDataModel.getDictId())) {
                newDictdList.add(stdMetaDataModel.getDictId());
            }
        }
        if(newDatasetIdList.size()>0){
            insertSqlList.add(insertData(aVersion.getDataSetTableName(), sVersion.getDataSetTableName(),
                    new String[]{"id,std_dataset_id,std_dataset_code,std_dataset_name"},
                    new String[]{"id,id,code,name"},
                    schemeId,
                    "id",
                    newDatasetIdList));
        }
        if(newMetadataIdList.size()>0){
            insertSqlList.add(insertData(aVersion.getMetaDataTableName(), sVersion.getMetaDataTableName(),
                    new String[]{"id,std_metadata_id,std_metadata_code,std_metadata_name,std_dataset_id,std_dict_id"},
                    new String[]{"id,id,code,name,dataset_id,dict_id"},
                    schemeId,
                    "id",
                    newMetadataIdList));
        }
        if(newDictdList.size()>0){
            insertSqlList.add(insertData(aVersion.getDictTableName(), sVersion.getDictTableName(),
                    new String[] {"id,std_dict_id,std_dict_code,std_dict_name"},
                    new String[] {"id,id,code,name"},
                    schemeId,
                    "id",
                    newDictdList));
            insertSqlList.add(insertData(aVersion.getDictEntryTableName(), sVersion.getDictEntryTableName(),
                    new String[] {"id,std_entry_id,std_entry_code,std_entry_value,std_dict_id"},
                    new String[] {"id,id,code,value,dict_id"},
                    schemeId,
                    "dict_id",
                    newDictdList));
        }
        if(insertSqlList.size()>0){
            insertBatch(insertSqlList);
        }
    }
    private String insertData(String adapterTableName, String stdTableName, String[] item1, String[] item2, Integer schemeId, String item, List<Integer> idList) {
        StringBuffer sql = new StringBuffer();
        String idStr = Constants.EMPTY;
        for (Integer id : idList) {
            idStr += id + Constants.COMMA;
        }
        if (!StringUtil.isEmpty(idStr)) {
            idStr = Constants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) +  Constants.RIGHT_BRACKET;
        }
        sql.append(Constants.INSERT_INTO + adapterTableName + Constants.LEFT_BRACKET);
        for (String it : item1) {
            sql.append(it + Constants.COMMA);
        }
        sql.append("scheme_id" + Constants.RIGHT_BRACKET + Constants.LEFT_BRACKET + Constants.SELECT );
        for (String it : item2) {
            sql.append(it + Constants.COMMA);
        }
        sql.append(schemeId + Constants.FROM + stdTableName + Constants.WHERE + item + Constants.IN + idStr + Constants.RIGHT_BRACKET);
        return sql.toString();
    }
}

+ 147 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDictService.java

@ -0,0 +1,147 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.adapter.AdapterDictModel;
import com.yihu.ehr.standard.service.bo.AdapterVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Iterator;
import java.util.List;
@Transactional
@Service("AdapterDictService")
public class AdapterDictService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterDictService";
    public AdapterDictService() {
    }
    public void finalize() throws Throwable {
        super.finalize();
    }
    public AdapterDictModel add(String adapterVersion, String dict) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDictModel adapterDictModel = objectMapper.readValue(dict, AdapterDictModel.class);
            Session session = getCurrentSession();
            String sql = "select max(id) from " + version.getMetaDataTableName();
            Query query = session.createSQLQuery(sql);
            Object object = query.uniqueResult();
            adapterDictModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDictModel.class);
            sql = sqlCreator.insertData(version.getMetaDataTableName(), jsonNode);
            query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDictModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.SaveDictFailed);
        }
    }
    public void delete(String adapterVersion, Integer dictId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) {
                throw new ApiException(ErrorCode.InvalidStdVersion);
            }
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getMetaDataTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", dictId);
            query.executeUpdate();
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteDictFailed);
        }
    }
    public AdapterDictModel modify(String adapterVersion, String dict) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDictModel adapterDictModel = objectMapper.readValue(dict, AdapterDictModel.class);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDictModel.class);
            String sql = sqlCreator.updateDataByTableKey(version.getMetaDataTableName(), jsonNode);
            Query query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDictModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateDictFailed);
        }
    }
    public List getDictList(Class tClass, String adapterVersion, String condition, String order, Integer limit, Integer offset) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        String tableName = version.getDictTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("stdDictCode", "stdDictName", name);
            }
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.selectData(tableName);
        Query query = getQuery(sqlCreator, sql);
        if (limit != null) {
            query.setMaxResults(limit);
            if (offset != null) {
                query.setFirstResult(offset * limit);
            }
        }
        return query.list();
    }
    public Integer getDictInt(Class tClass, String adapterVersion, String condition) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        String tableName = version.getDictTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("stdDictCode", "stdDictName", name);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.countData(tableName);
        Query query = getCurrentSession().createSQLQuery(sql);
        for (String key : sqlCreator.getKeyValueMap().keySet()) {
            query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
        }
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
}

+ 296 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterDictentryService.java

@ -0,0 +1,296 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.adapter.AdapterDictModel;
import com.yihu.ehr.standard.model.adapter.AdapterDictentryModel;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeModel;
import com.yihu.ehr.standard.model.adapter.resultModel.AdapterDictEntryResultDetailModel;
import com.yihu.ehr.standard.model.standard.StdDictionaryModel;
import com.yihu.ehr.standard.service.bo.AdapterVersion;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
@Transactional
@Service("AdapterDictentryService")
public class AdapterDictentryService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterDictentryService";
    public AdapterDictentryService() {
    }
    public void finalize() throws Throwable {
        super.finalize();
    }
    public AdapterDictentryModel add(String adapterVersion, String dictentry) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDictentryModel adapterDictentryModel = objectMapper.readValue(dictentry, AdapterDictentryModel.class);
            Session session = getCurrentSession();
            String sql = "select max(id) from " + version.getDictEntryTableName();
            Query query = session.createSQLQuery(sql);
            Object object = query.uniqueResult();
            adapterDictentryModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictentryModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDictentryModel.class);
            sql = sqlCreator.insertData(version.getDictEntryTableName(), jsonNode);
            query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDictentryModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.saveDictEntryFailed);
        }
    }
    public void delete(String adapterVersion, Integer dictentryId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) throw new IllegalArgumentException("无效版本");
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getDictEntryTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", dictentryId);
            query.executeUpdate();
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteDictEntryFailed);
        }
    }
    public AdapterDictentryModel modify(String adapterVersion, String dictentry) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterDictentryModel adapterDictentryModel = objectMapper.readValue(dictentry, AdapterDictentryModel.class);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictentryModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterDictentryModel.class);
            String sql = sqlCreator.updateDataByTableKey(version.getDictEntryTableName(), jsonNode);
            Query query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterDictentryModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateDictEntryFailed);
        }
    }
    public List getDictEntryList(Class tClass, String adapterVersion, String condition, String order, Integer limit, Integer offset) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        String tableName = version.getDictEntryTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.equalCondition("stdDictId", jsonNode.get("stdDictId").asInt());
                sqlCreator.likeOrCondition("stdEntryCode", "stdEntryValue", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.selectData(tableName);
        Query query = getQuery(sqlCreator, sql);
        if (limit != null) {
            query.setMaxResults(limit);
            if (offset != null) {
                query.setFirstResult(offset * limit);
            }
        }
        List<AdapterDictentryModel> modelList = query.list();
        List<Integer> idList = new ArrayList<>();
        Map<Integer, StdDictionaryModel> stdDictModelMap = new HashMap<>();
        Integer schemeId = null;
        for (AdapterDictentryModel model : modelList) {
            if (model.getAdapterDictId() != null) {
                schemeId = model.getSchemeId();
                idList.add(model.getAdapterDictId());
            }
        }
        if (!CollectionUtil.isEmpty(idList)) {
            AdapterSchemeModel scheme = getEntity(AdapterSchemeModel.class, schemeId);
            StandardVersion standardVersion = new StandardVersion(scheme.getAdapterStdVersion());
            tableName = standardVersion.getDictTableName();
            sqlCreator = new SqlCreator(StdDictionaryModel.class);
            sqlCreator.inCondition("id", idList);
            sql = sqlCreator.selectData(tableName);
            query = getQuery(sqlCreator, sql);
            List<StdDictionaryModel> stdDictModelList = query.list();
            for (StdDictionaryModel model : stdDictModelList) {
                stdDictModelMap.put(model.getId(), model);
            }
        }
        List<AdapterDictEntryResultDetailModel> detailModelList = new ArrayList<>();
        for (AdapterDictentryModel model : modelList) {
            AdapterDictEntryResultDetailModel detailModel = new AdapterDictEntryResultDetailModel();
            detailModel.setId(model.getId());
            detailModel.setSchemeId(model.getSchemeId());
            detailModel.setAdapterDictId(model.getAdapterDictId());
            detailModel.setAdapterEntryId(model.getAdapterEntryId());
            detailModel.setAdapterEntryCode(model.getAdapterEntryCode());
            detailModel.setAdapterEntryValue(model.getAdapterEntryValue());
            detailModel.setStdDictId(model.getStdDictId());
            detailModel.setStdEntryId(model.getStdEntryId());
            detailModel.setStdEntryCode(model.getStdEntryCode());
            detailModel.setStdEntryValue(model.getStdEntryValue());
            if (stdDictModelMap.get(model.getAdapterDictId()) != null) {
                detailModel.setAdapterDictCode(stdDictModelMap.get(model.getAdapterDictId()).getCode());
                detailModel.setAdapterDictName(stdDictModelMap.get(model.getAdapterDictId()).getName());
            }
            detailModelList.add(detailModel);
        }
        return detailModelList;
    }
    public Integer getDictEntryInt(Class tClass, String adapterVersion, String condition) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        String tableName = version.getDictEntryTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.equalCondition("stdDictId", jsonNode.get("stdDictId").asInt());
                sqlCreator.likeOrCondition("stdEntryCode", "stdEntryValue", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String sql = sqlCreator.countData(tableName);
        Query query = getCurrentSession().createSQLQuery(sql);
        for (String key : sqlCreator.getKeyValueMap().keySet()) {
            query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
        }
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public List<AdapterDictEntryResultDetailModel> updateDictEntrys(String adapterVersion, String list) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            List<AdapterDictEntryResultDetailModel> adapterDictEntryList = Arrays.asList(objectMapper.readValue(list, AdapterDictEntryResultDetailModel[].class));
            List<Integer> idList = new ArrayList<>();
            Map<Integer, AdapterDictEntryResultDetailModel> dictEntryResultMap = new HashMap<>();
            Integer maxId = null;
            for (AdapterDictEntryResultDetailModel dictEntryModel : adapterDictEntryList) {
                AdapterDictentryModel adapterDictentryModel = new AdapterDictentryModel();
                adapterDictentryModel.setId(dictEntryModel.getId());
                adapterDictentryModel.setSchemeId(dictEntryModel.getSchemeId());
                adapterDictentryModel.setAdapterDictId(dictEntryModel.getAdapterDictId());
                adapterDictentryModel.setAdapterEntryId(dictEntryModel.getAdapterEntryId());
                adapterDictentryModel.setAdapterEntryCode(dictEntryModel.getAdapterEntryCode());
                adapterDictentryModel.setAdapterEntryValue(dictEntryModel.getAdapterEntryValue());
                adapterDictentryModel.setStdDictId(dictEntryModel.getStdDictId());
                adapterDictentryModel.setStdEntryId(dictEntryModel.getStdEntryId());
                adapterDictentryModel.setStdEntryCode(dictEntryModel.getStdEntryCode());
                adapterDictentryModel.setStdEntryValue(dictEntryModel.getStdEntryValue());
                idList.add(dictEntryModel.getStdDictId());
                dictEntryResultMap.put(dictEntryModel.getStdDictId(), dictEntryModel);
                SqlCreator sqlCreator = new SqlCreator(AdapterDictentryModel.class);
                String sql;
                if (dictEntryModel.getId() == null) {
                    if (maxId == null) {
                        sql = "select max(id) from " + version.getDictEntryTableName();
                        Query query = getCurrentSession().createSQLQuery(sql);
                        Object object = query.uniqueResult();
                        maxId = object == null ? 1 : Integer.parseInt(object.toString()) + 1;
                    }
                    adapterDictentryModel.setId(maxId++);
                    JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictentryModel));
                    sql = sqlCreator.insertData(version.getDictEntryTableName(), jsonNode);
                } else {
                    JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictentryModel));
                    sql = sqlCreator.updateDataByTableKey(version.getDictEntryTableName(), jsonNode);
                }
                Query query = getExeuteQuery(sqlCreator, sql);
                query.executeUpdate();
            }
            if (!CollectionUtil.isEmpty(idList)) {
                String tableName = version.getDictTableName();
                SqlCreator sqlCreator = new SqlCreator(AdapterDictModel.class);
                sqlCreator.inCondition("stdDictId", idList);
                String sql = sqlCreator.selectData(tableName);
                Query query = getQuery(sqlCreator, sql);
                List<AdapterDictModel> adapterDictModelList = query.list();
                for (AdapterDictModel model : adapterDictModelList) {
                    AdapterDictEntryResultDetailModel dictentryModel = dictEntryResultMap.get(model.getStdDictId());
                    model.setAdapterDictId(dictentryModel.getAdapterDictId());
                    model.setAdapterDictCode(dictentryModel.getAdapterDictCode());
                    model.setAdapterDictName(dictentryModel.getAdapterDictName());
                    JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(model));
                    sqlCreator = new SqlCreator(AdapterDictModel.class);
                    sql = sqlCreator.updateDataByTableKey(version.getDictTableName(), jsonNode);
                    query = getExeuteQuery(sqlCreator, sql);
                    query.executeUpdate();
                }
            }
            return adapterDictEntryList;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.saveDictEntryFailed);
        }
    }
    public void deleteMultiple(String adapterVersion, Integer dictEntryId, Integer stdDictId, Integer adapterDictId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) {
                throw new ApiException(ErrorCode.InvalidStdVersion);
            }
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getDictEntryTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", dictEntryId);
            query.executeUpdate();
            SqlCreator sqlCreator = new SqlCreator(AdapterDictentryModel.class);
            sqlCreator.equalCondition("stdDictId", stdDictId);
            sqlCreator.equalCondition("adapterDictId", adapterDictId);
            sql = sqlCreator.countData(version.getDictEntryTableName());
            query = getExeuteQuery(sqlCreator, sql);
            Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
            if (count == 0) {
                sql = "delete from " + version.getDictTableName() + " where std_dict_id = :stdDictId and adapter_dict_id = :adapterDictId";
                query = session.createSQLQuery(sql);
                query.setInteger("stdDictId", stdDictId);
                query.setInteger("adapterDictId", adapterDictId);
                query.executeUpdate();
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteDictEntryFailed);
        }
    }
}

+ 351 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterMetadataService.java

@ -0,0 +1,351 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.adapter.AdapterDatasetModel;
import com.yihu.ehr.standard.model.adapter.AdapterMetadataModel;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeModel;
import com.yihu.ehr.standard.model.adapter.resultModel.AdapterMetadataResultDetailModel;
import com.yihu.ehr.standard.model.adapter.resultModel.ApiMetadataResultDetailModel;
import com.yihu.ehr.standard.model.standard.StdDataSetModel;
import com.yihu.ehr.standard.model.standard.StdMetaDataModel;
import com.yihu.ehr.standard.service.bo.AdapterVersion;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
@Transactional
@Service("AdapterMetadataService")
public class AdapterMetadataService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterMetadataService";
    public AdapterMetadataService() {
    }
    public void finalize() throws Throwable {
        super.finalize();
    }
    public AdapterMetadataModel add(String adapterVersion, String metadata) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterMetadataModel adapterMetadataModel = objectMapper.readValue(metadata, AdapterMetadataModel.class);
            Session session = getCurrentSession();
            String sql = "select max(id) from " + version.getMetaDataTableName();
            Query query = session.createSQLQuery(sql);
            Object object = query.uniqueResult();
            adapterMetadataModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterMetadataModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterMetadataModel.class);
            sql = sqlCreator.insertData(version.getMetaDataTableName(), jsonNode);
            query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterMetadataModel;
        } catch (Exception e) {
           throw new ApiException(ErrorCode.SaveMetaDataFailed);
        }
    }
    public void delete(String adapterVersion, Integer metadataId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) {
                throw new ApiException(ErrorCode.InvalidStdVersion);
            }
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getMetaDataTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", metadataId);
            query.executeUpdate();
        } catch (Exception e) {
            throw new ApiException(ErrorCode.SaveMetaDataFailed);
        }
    }
    public AdapterMetadataModel modify(String adapterVersion, String metadata) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterMetadataModel adapterMetadataModel = objectMapper.readValue(metadata, AdapterMetadataModel.class);
            JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterMetadataModel));
            SqlCreator sqlCreator = new SqlCreator(AdapterMetadataModel.class);
            String sql = sqlCreator.updateDataByTableKey(version.getMetaDataTableName(), jsonNode);
            Query query = getExeuteQuery(sqlCreator, sql);
            query.executeUpdate();
            return adapterMetadataModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateMetaDataFailed);
        }
    }
    public List getMetadataList(Class tClass, String adapterVersion, String condition, String order, Integer limit, Integer offset) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        String tableName = version.getMetaDataTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.equalCondition("stdDatasetId", jsonNode.get("stdDatasetId").asInt());
                sqlCreator.likeOrCondition("stdMetadataCode", "stdMetadataName", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.selectData(tableName);
        Query query = getQuery(sqlCreator, sql);
        if (limit != null) {
            query.setMaxResults(limit);
            if (offset != null) {
                query.setFirstResult(offset * limit);
            }
        }
        List<AdapterMetadataModel> modelList = query.list();
        List<Integer> idList = new ArrayList<>();
        Map<Integer, StdDataSetModel> stdDatasetModelMap = new HashMap<>();
        Integer schemeId = null;
        for (AdapterMetadataModel model : modelList) {
            if (model.getAdapterDatasetId() != null) {
                schemeId = model.getSchemeId();
                idList.add(model.getAdapterDatasetId());
            }
        }
        if (!CollectionUtil.isEmpty(idList)) {
            AdapterSchemeModel scheme = getEntity(AdapterSchemeModel.class, schemeId);
            StandardVersion standardVersion = new StandardVersion(scheme.getAdapterStdVersion());
            tableName = standardVersion.getDataSetTableName();
            sqlCreator = new SqlCreator(StdDataSetModel.class);
            sqlCreator.inCondition("id", idList);
            sql = sqlCreator.selectData(tableName);
            query = getQuery(sqlCreator, sql);
            List<StdDataSetModel> stdDatasetModelList = query.list();
            for (StdDataSetModel model : stdDatasetModelList) {
                stdDatasetModelMap.put(model.getId(), model);
            }
        }
        List<ApiMetadataResultDetailModel> detailModelList = new ArrayList<>();
        for (AdapterMetadataModel model : modelList) {
            ApiMetadataResultDetailModel detailModel = new ApiMetadataResultDetailModel();
            detailModel.setId(model.getId());
            detailModel.setSchemeId(model.getSchemeId());
            detailModel.setAdapterDatasetId(model.getAdapterDatasetId());
            detailModel.setAdapterDictId(model.getAdapterDictId());
            detailModel.setAdapterDataType(model.getAdapterDataType());
            detailModel.setAdapterMetadataId(model.getAdapterMetadataId());
            detailModel.setAdapterMetadataCode(model.getAdapterMetadataCode());
            detailModel.setAdapterMetadataName(model.getAdapterMetadataName());
            detailModel.setAdapterDictId(model.getAdapterDictId());
            detailModel.setStdDictId(model.getStdDictId());
            detailModel.setStdDatasetId(model.getStdDatasetId());
            detailModel.setStdMetadataId(model.getStdMetadataId());
            detailModel.setStdMetadataCode(model.getStdMetadataCode());
            detailModel.setStdMetadataName(model.getStdMetadataName());
            if (stdDatasetModelMap.get(model.getAdapterDatasetId()) != null) {
                detailModel.setAdapterDatasetCode(stdDatasetModelMap.get(model.getAdapterDatasetId()).getCode());
                detailModel.setAdapterDatasetName(stdDatasetModelMap.get(model.getAdapterDatasetId()).getName());
            }
            detailModelList.add(detailModel);
        }
        return detailModelList;
    }
    public Integer getMetadataCount(Class tClass, String adapterVersion, String condition) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        String tableName = version.getMetaDataTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.equalCondition("stdDatasetId", jsonNode.get("stdDatasetId").asInt());
                sqlCreator.likeOrCondition("stdMetadataCode", "stdMetadataName", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String sql = sqlCreator.countData(tableName);
        Query query = getCurrentSession().createSQLQuery(sql);
        for (String key : sqlCreator.getKeyValueMap().keySet()) {
            query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
        }
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public List getInfoList(String adapterVersion, String condition, String order, Integer limit, Integer offset) {
        AdapterVersion version = new AdapterVersion(adapterVersion);
        List<AdapterMetadataModel> metadataModelList = getList(AdapterMetadataModel.class, version.getMetaDataTableName(), condition, order, limit, offset, ErrorCode.GetMetaDataListFaield);
        List<Integer> idList = new ArrayList<>();
        Map<Integer, StdMetaDataModel> stdMetaDataModelMap = new HashMap<>();
        Integer schemeId = null;
        for (AdapterMetadataModel model : metadataModelList) {
            if (model.getAdapterMetadataId() != null) {
                idList.add(model.getAdapterMetadataId());
                schemeId = model.getSchemeId();
            }
        }
        if (!CollectionUtil.isEmpty(idList)) {
            AdapterSchemeModel scheme = getEntity(AdapterSchemeModel.class, schemeId);
            StandardVersion standardVersion = new StandardVersion(scheme.getAdapterStdVersion());
            String tableName = standardVersion.getMetaDataTableName();
            SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
            sqlCreator.inCondition("id", idList);
            String sql = sqlCreator.selectData(tableName);
            Query query = getQuery(sqlCreator, sql);
            List<StdMetaDataModel> stdMetadataModelList = query.list();
            for (StdMetaDataModel model : stdMetadataModelList) {
                stdMetaDataModelMap.put(model.getId(), model);
            }
        }
        List<AdapterMetadataResultDetailModel> detailModelList = new ArrayList<>();
        for (AdapterMetadataModel model : metadataModelList) {
            AdapterMetadataResultDetailModel detailModel = new AdapterMetadataResultDetailModel();
            detailModel.setId(model.getId());
            detailModel.setSchemeId(model.getSchemeId());
            detailModel.setAdapterDatasetId(model.getAdapterDatasetId());
            detailModel.setAdapterDictId(model.getAdapterDictId());
            detailModel.setAdapterDataType(model.getAdapterDataType());
            detailModel.setAdapterMetadataId(model.getAdapterMetadataId());
            detailModel.setAdapterMetadataCode(model.getAdapterMetadataCode());
            detailModel.setAdapterMetadataName(model.getAdapterMetadataName());
            detailModel.setAdapterDictId(model.getAdapterDictId());
            detailModel.setStdDictId(model.getStdDictId());
            detailModel.setStdDatasetId(model.getStdDatasetId());
            detailModel.setStdMetadataCode(model.getStdMetadataCode());
            detailModel.setStdMetadataName(model.getStdMetadataName());
            if (stdMetaDataModelMap.get(model.getAdapterMetadataId()) != null) {
                detailModel.setAdapterMetadataType(stdMetaDataModelMap.get(model.getAdapterMetadataId()).getColumnType());
            }
            detailModelList.add(detailModel);
        }
        return detailModelList;
    }
    public List<ApiMetadataResultDetailModel> updateMetadatas(String adapterVersion, String list) {
        try {
            AdapterVersion version = new AdapterVersion(adapterVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            List<ApiMetadataResultDetailModel> adapterMetadataList = Arrays.asList(objectMapper.readValue(list, ApiMetadataResultDetailModel[].class));
            List<String> sqlList = new ArrayList<>();
            List<Integer> idList = new ArrayList<>();
            Map<Integer, ApiMetadataResultDetailModel> metadataResultMap = new HashMap<>();
            for (ApiMetadataResultDetailModel metadataModel : adapterMetadataList) {
                AdapterMetadataModel adapterMetadataModel = new AdapterMetadataModel();
                adapterMetadataModel.setId(metadataModel.getId());
                adapterMetadataModel.setSchemeId(metadataModel.getSchemeId());
                adapterMetadataModel.setAdapterDatasetId(metadataModel.getAdapterDatasetId());
                adapterMetadataModel.setAdapterDictId(metadataModel.getAdapterDictId());
                adapterMetadataModel.setAdapterDataType(metadataModel.getAdapterDataType());
                adapterMetadataModel.setAdapterMetadataId(metadataModel.getAdapterMetadataId());
                adapterMetadataModel.setAdapterMetadataCode(metadataModel.getAdapterMetadataCode());
                adapterMetadataModel.setAdapterMetadataName(metadataModel.getAdapterMetadataName());
                adapterMetadataModel.setAdapterDictId(metadataModel.getAdapterDictId());
                adapterMetadataModel.setStdDictId(metadataModel.getStdDictId());
                adapterMetadataModel.setStdMetadataId(metadataModel.getStdMetadataId());
                adapterMetadataModel.setStdDatasetId(metadataModel.getStdDatasetId());
                adapterMetadataModel.setStdMetadataCode(metadataModel.getStdMetadataCode());
                adapterMetadataModel.setStdMetadataName(metadataModel.getStdMetadataName());
                idList.add(metadataModel.getStdDatasetId());
                metadataResultMap.put(metadataModel.getStdDatasetId(), metadataModel);
                JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterMetadataModel));
                SqlCreator sqlCreator = new SqlCreator(AdapterMetadataModel.class);
                String sql = sqlCreator.updateDataByTableKey(version.getMetaDataTableName(), jsonNode);
                sqlList.add(sql);
                Query query = getExeuteQuery(sqlCreator, sql);
                query.executeUpdate();
            }
            if (!CollectionUtil.isEmpty(idList)) {
                String tableName = version.getDataSetTableName();
                SqlCreator sqlCreator = new SqlCreator(AdapterDatasetModel.class);
                sqlCreator.inCondition("stdDatasetId", idList);
                String sql = sqlCreator.selectData(tableName);
                Query query = getQuery(sqlCreator, sql);
                List<AdapterDatasetModel> adapterDatasetModelList = query.list();
                for (AdapterDatasetModel model : adapterDatasetModelList) {
                    ApiMetadataResultDetailModel metadataModel = metadataResultMap.get(model.getStdDatasetId());
                    model.setAdapterDatasetId(metadataModel.getAdapterDatasetId());
                    model.setAdapterDatasetCode(metadataModel.getAdapterDatasetCode());
                    model.setAdapterDatasetName(metadataModel.getAdapterDatasetName());
                    JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(model));
                    sqlCreator = new SqlCreator(AdapterDatasetModel.class);
                    sql = sqlCreator.updateDataByTableKey(version.getDataSetTableName(), jsonNode);
                    sqlList.add(sql);
                    query = getExeuteQuery(sqlCreator, sql);
                    query.executeUpdate();
                }
            }
            return adapterMetadataList;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.SaveMetaDataFailed);
        }
    }
    public void deleteMultiple(String adapterVersion, Integer metadataId, Integer stdDatasetId, Integer adapterDatasetId) {
        try {
            if (adapterVersion == null || adapterVersion.length() == 0) {
                throw new ApiException(ErrorCode.InvalidStdVersion);
            }
            AdapterVersion version = new AdapterVersion(adapterVersion);
            Session session = getCurrentSession();
            String sql = "delete from " + version.getMetaDataTableName() + " where id = :id";
            Query query = session.createSQLQuery(sql);
            query.setInteger("id", metadataId);
            query.executeUpdate();
            SqlCreator sqlCreator = new SqlCreator(AdapterMetadataModel.class);
            sqlCreator.equalCondition("stdDatasetId", stdDatasetId);
            sqlCreator.equalCondition("adapterDatasetId", adapterDatasetId);
            sql = sqlCreator.countData(version.getMetaDataTableName());
            query = getExeuteQuery(sqlCreator, sql);
            Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
            if (count == 0) {
                sql = "delete from " + version.getDataSetTableName() + " where std_dataset_id = :stdDatasetId and adapter_dataset_id = :adapterDatasetId";
                query = session.createSQLQuery(sql);
                query.setInteger("stdDatasetId", stdDatasetId);
                query.setInteger("adapterDatasetId", adapterDatasetId);
                query.executeUpdate();
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteDictEntryFailed);
        }
    }
}

+ 59 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterSchemeDispatchService.java

@ -0,0 +1,59 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeDispatchModel;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * @created lingfeng 2015/12/25.
 */
@Transactional
@Service("AdapterSchemeDispatchService")
public class AdapterSchemeDispatchService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterSchemeDispatchService";
    public AdapterSchemeDispatchModel add(String dispatcher) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterSchemeDispatchModel model = objectMapper.readValue(dispatcher, AdapterSchemeDispatchModel.class);
            saveEntity(model);
            return model;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.SaveSchemeFailed);
        }
    }
    public void delete(Integer dispatchId) {
        try {
            AdapterSchemeDispatchModel model = getEntity(AdapterSchemeDispatchModel.class, dispatchId);
            deleteEntity(model);
        } catch (Exception e) {
            throw new ApiException(ErrorCode.DeleteSchemeFailed);
        }
    }
    public AdapterSchemeDispatchModel update(String dispatcher) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterSchemeDispatchModel model = objectMapper.readValue(dispatcher, AdapterSchemeDispatchModel.class);
            updateEntity(model);
            return model;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateSchemeFailed);
        }
    }
    public AdapterSchemeDispatchModel get(Integer dispatchId) {
        try {
            AdapterSchemeDispatchModel model = getEntity(AdapterSchemeDispatchModel.class, dispatchId);
            return model;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.GetSchemeFailed);
        }
    }
}

+ 256 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterSchemeService.java

@ -0,0 +1,256 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeModel;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeVersionModel;
import com.yihu.ehr.standard.model.adapter.resultModel.SchemeResultDetailModel;
import com.yihu.ehr.standard.model.standard.StandardModel;
import com.yihu.ehr.standard.model.standard.StandardVersionModel;
import org.hibernate.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @created lingfeng 2015/12/25.
 */
@Transactional
@Service("AdapterSchemeService")
public class AdapterSchemeService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterSchemeService";
    public AdapterSchemeModel add(String scheme) {
        Boolean existFlg = false;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterSchemeModel model = objectMapper.readValue(scheme, AdapterSchemeModel.class);
            existFlg = schemeNameValidate(model.getName());
            if (!existFlg) {
                model.setStatus(0);
                saveEntity(model);
            }
            return model;
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistSchemeName);
        } else {
            throw new ApiException(ErrorCode.SaveSchemeFailed);
        }
    }
    public Boolean schemeNameValidate(String name) {
        String sql = "FROM AdapterSchemeModel WHERE name = :name";
        Query query = getCurrentSession().createQuery(sql);
        query.setParameter("name", name);
        List<AdapterSchemeModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public void delete(Integer schemeId) {
        Boolean existFlg = false;
        try {
            AdapterSchemeModel model = getEntity(AdapterSchemeModel.class, schemeId);
            existFlg = existSchemeVersionValid(schemeId);
            if (!existFlg) {
                deleteEntity(model);
                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistSchemeVersion);
        } else {
            throw new ApiException(ErrorCode.DeleteSchemeFailed);
        }
    }
    public Boolean schemeNameValidate(Integer schemeId, String name) {
        String sql = "FROM AdapterSchemeModel WHERE name = :name and id != :schemeId";
        Query query = getCurrentSession().createQuery(sql);
        query.setParameter("name", name);
        query.setParameter("schemeId", schemeId);
        List<AdapterSchemeModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public AdapterSchemeModel update(String scheme) {
        Boolean existFlg = false;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterSchemeModel model = objectMapper.readValue(scheme, AdapterSchemeModel.class);
            existFlg = schemeNameValidate(model.getId(), model.getName());
            if (!existFlg) {
                updateEntity(model);
                return model;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistSchemeName);
        } else {
            throw new ApiException(ErrorCode.UpdateSchemeFailed);
        }
    }
    public AdapterSchemeModel get(Integer schemeId) {
        try {
            AdapterSchemeModel model = getEntity(AdapterSchemeModel.class, schemeId);
            return model;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.GetSchemeFailed);
        }
    }
    public List<SchemeResultDetailModel> getSchemeList(String condition) {
        String name = Constants.EMPTY;
        if (!StringUtil.isEmpty(condition)) {
            ObjectMapper objectMapper = new ObjectMapper();
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                if (jsonNode.get("name") != null) {
                    name = jsonNode.get("name").asText();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String schemeHql = "FROM AdapterSchemeModel";
        Query query = getCurrentSession().createQuery(schemeHql);
        List<AdapterSchemeModel> adapterSchemeModelList = query.list();
        List<Integer> schemeIdList = new ArrayList<>();
        List<Integer> stdIdList = new ArrayList<>();
        List<String> versionList = new ArrayList<>();
        Map<Integer, AdapterSchemeVersionModel> schemeVersionMap = new HashMap<>();
        Map<Integer, StandardModel> stdMap = new HashMap<>();
        Map<String, StandardVersionModel> stdVersionMap = new HashMap<>();
        for (AdapterSchemeModel adapterSchemeModel : adapterSchemeModelList) {
            schemeIdList.add(adapterSchemeModel.getId());
            stdIdList.add(adapterSchemeModel.getStdId());
            stdIdList.add(adapterSchemeModel.getAdapterStdId());
            versionList.add(adapterSchemeModel.getStdVersion());
            versionList.add(adapterSchemeModel.getAdapterStdVersion());
        }
        if (CollectionUtil.isEmpty(schemeIdList)) {
            schemeIdList.add(null);
        }
        if (CollectionUtil.isEmpty(stdIdList)) {
            stdIdList.add(null);
        }
        if (CollectionUtil.isEmpty(versionList)) {
            versionList.add(Constants.EMPTY);
        }
        String adapterVersionHql = "FROM AdapterSchemeVersionModel WHERE schemeId IN :schemeIdList";
        query = getCurrentSession().createQuery(adapterVersionHql);
        query.setParameterList("schemeIdList", schemeIdList);
        List<AdapterSchemeVersionModel> versionModelList = query.list();
        for (AdapterSchemeVersionModel model : versionModelList) {
            schemeVersionMap.put(model.getId(), model);
        }
        String standardHql = "FROM StandardModel WHERE id IN :stdIdList";
        query = getCurrentSession().createQuery(standardHql);
        query.setParameterList("stdIdList", stdIdList);
        List<StandardModel> stdModelList = query.list();
        for (StandardModel model : stdModelList) {
            stdMap.put(model.getId(), model);
        }
        String stdVersionHql = "FROM StandardVersionModel WHERE version IN :versionList";
        query = getCurrentSession().createQuery(stdVersionHql);
        query.setParameterList("versionList", versionList);
        List<StandardVersionModel> stdVersionList = query.list();
        for (StandardVersionModel model : stdVersionList) {
            stdVersionMap.put(model.getVersion(), model);
        }
        List<SchemeResultDetailModel> resultDetailModelList = new ArrayList<>();
        Map<String, SchemeResultDetailModel> resultDetailModelMap = new HashMap<>();
        Map<String, SchemeResultDetailModel> resultDetailModelCheckMap = new HashMap<>();
        Map<String, SchemeResultDetailModel> resultDetailModelAddMap = new HashMap<>();
        for (AdapterSchemeModel schemeModel : adapterSchemeModelList) {
            String id = "scheme" + schemeModel.getId();
            SchemeResultDetailModel resultDetailModel = new SchemeResultDetailModel();
            resultDetailModel.setId(id);
            resultDetailModel.setPid("");
            resultDetailModel.setType(0);
            resultDetailModel.setName(schemeModel.getName());
            resultDetailModel.setStdName(stdMap.get(schemeModel.getStdId()).getName());
            resultDetailModel.setStdVersion(stdVersionMap.get(schemeModel.getStdVersion()).getVersion());
            resultDetailModel.setStdVersionName(stdVersionMap.get(schemeModel.getStdVersion()).getName());
            resultDetailModel.setPublisher(stdMap.get(schemeModel.getAdapterStdId()) == null ? "" : stdMap.get(schemeModel.getAdapterStdId()).getPublisher());
            resultDetailModel.setAdapterName(stdMap.get(schemeModel.getAdapterStdId())==null?"":stdMap.get(schemeModel.getAdapterStdId()).getName());
            if (stdVersionMap.get(schemeModel.getAdapterStdVersion()) != null) {
                resultDetailModel.setAdapterVersionName(stdVersionMap.get(schemeModel.getAdapterStdVersion()).getName());
                resultDetailModel.setAdapterStdVersion(stdVersionMap.get(schemeModel.getAdapterStdVersion()).getVersion());
            }
            if (StringUtil.isEmpty(name) || schemeModel.getName().contains(name)) {
                resultDetailModelCheckMap.put(id, resultDetailModel);
                resultDetailModelAddMap.put(id, resultDetailModel);
                resultDetailModelList.add(resultDetailModel);
            }
            resultDetailModelMap.put(id, resultDetailModel);
        }
        for (AdapterSchemeVersionModel versionModel : versionModelList) {
            String pid = "scheme" + versionModel.getSchemeId();
            String id = "version" + versionModel.getId();
            SchemeResultDetailModel resultDetailModel = new SchemeResultDetailModel();
            resultDetailModel.setId(id);
            resultDetailModel.setPid(pid);
            resultDetailModel.setName(versionModel.getName());
            resultDetailModel.setStatus(versionModel.getPublishStatus());
            resultDetailModel.setDate(StringUtil.toString(versionModel.getPublishTime()));
            resultDetailModel.setVersion(versionModel.getVersion());
            resultDetailModel.setType(1);
            if (resultDetailModelCheckMap.containsKey(pid)) {
                resultDetailModelList.add(resultDetailModel);
            } else if (StringUtil.isEmpty(name) || versionModel.getName().contains(name)) {
                resultDetailModelList.add(resultDetailModel);
                if (!resultDetailModelAddMap.containsKey(pid)) {
                    resultDetailModelAddMap.put(pid, resultDetailModelMap.get(resultDetailModel.getPid()));
                    resultDetailModelList.add(resultDetailModelMap.get(resultDetailModel.getPid()));
                }
            }
        }
        return resultDetailModelList;
    }
    public boolean existSchemeVersionValid(Integer schemeId) {
        String hql="FROM AdapterSchemeVersionModel WHERE schemeId = :schemeId";
        Query query = getCurrentSession().createQuery(hql);
        query.setParameter("schemeId", schemeId);
        List<AdapterSchemeVersionModel> schemeVersionModelList = query.list();
        if (!CollectionUtil.isEmpty(schemeVersionModelList)) {
            return true;
        }
        return false;
    }
}

+ 356 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/adapter/AdapterSchemeVersionService.java

@ -0,0 +1,356 @@
package com.yihu.ehr.standard.service.adapter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeModel;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeVersionModel;
import com.yihu.ehr.standard.model.adapter.resultModel.SchemeVersionResultDetailModel;
import com.yihu.ehr.standard.model.standard.StdMetaDataModel;
import com.yihu.ehr.standard.service.bo.AdapterVersion;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
 * @Created by lingfeng 2015/12/25.
 */
@Transactional
@Service("AdapterSchemeVersionService")
public class AdapterSchemeVersionService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterSchemeVersionService";
    public AdapterSchemeVersionModel add(String version) {
        Boolean existFlg = false;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterSchemeVersionModel versionModel = objectMapper.readValue(version, AdapterSchemeVersionModel.class);
            existFlg = schemeVersionNameValidate(versionModel.getSchemeId(), versionModel.getName());
            if (!existFlg) {
                AdapterVersion adapterVersion = AdapterVersion.generateVersion();
                versionModel.setVersion(adapterVersion.getVersion());
                versionModel.setPublishStatus(0);
                saveEntity(versionModel);
                if (!StringUtil.isEmpty(versionModel.getBaseVersion())) {
                    AdapterSchemeVersionModel baseVersionModel = getByVersion(versionModel.getBaseVersion());
                    AdapterVersion baseVersion = new AdapterVersion(baseVersionModel.getVersion());
                    AdapterVersion newVersion = new AdapterVersion(versionModel.getVersion());
                    buildVersionTables(baseVersion, newVersion);
                } else {
                    buildVersionTables(versionModel);
                }
                return versionModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistSchemeVersionName);
        } else {
            throw new ApiException(ErrorCode.SaveSchemeVersionFailed);
        }
    }
    public Boolean schemeVersionNameValidate(Integer schemeId, String name) {
        String sql = "FROM AdapterSchemeVersionModel WHERE schemeId = :schemeId and name = :name";
        Query query = getCurrentSession().createQuery(sql);
        query.setParameter("schemeId", schemeId);
        query.setParameter("name", name);
        List<AdapterSchemeVersionModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public AdapterSchemeVersionModel update(String version) {
        Boolean existFlg = false;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            AdapterSchemeVersionModel versionModel = objectMapper.readValue(version, AdapterSchemeVersionModel.class);
            existFlg = schemeVersionNameValidate(versionModel.getSchemeId(), versionModel.getId(), versionModel.getName());
            if (!existFlg) {
                updateEntity(versionModel);
                return versionModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistSchemeVersionName);
        } else {
            throw new ApiException(ErrorCode.UpdateSchemeVersionFailed);
        }
    }
    public Boolean schemeVersionNameValidate(Integer schemeId, Integer versionId, String name) {
        String sql = "FROM AdapterSchemeVersionModel WHERE schemeId = :schemeId and name = :name and id != :versionId";
        Query query = getCurrentSession().createQuery(sql);
        query.setParameter("schemeId", schemeId);
        query.setParameter("name", name);
        query.setParameter("versionId", versionId);
        List<AdapterSchemeVersionModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public void delete(Integer versionId) {
        Boolean publishedFlg = false;
        try {
            AdapterSchemeVersionModel versionModel = getEntity(AdapterSchemeVersionModel.class, versionId);
            if (versionModel.getPublishStatus() != null && versionModel.getPublishStatus() == 1) {
                publishedFlg = true;
            } else {
                this.deleteEntity(versionModel);
                deleteVersionTables(new AdapterVersion(versionModel.getVersion()));
                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (publishedFlg) {
            throw new ApiException(ErrorCode.StdVersionHasPublished);
        } else {
            throw new ApiException(ErrorCode.DeleteSchemeVersionFailed);
        }
    }
    public AdapterSchemeVersionModel get(Integer versionId) {
        try {
            AdapterSchemeVersionModel versionModel = getEntity(AdapterSchemeVersionModel.class, versionId);
            return versionModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.GetSchemeVersionFailed);
        }
    }
    public AdapterSchemeVersionModel getByVersion(String version) {
        try {
            String sql = "FROM AdapterSchemeVersionModel WHERE version = :version";
            Query query = getCurrentSession().createQuery(sql);
            query.setParameter("version", version);
            List<AdapterSchemeVersionModel> list = query.list();
            if (CollectionUtil.isEmpty(list)) {
                return null;
            }
            AdapterSchemeVersionModel versionModel = list.get(0);
            return versionModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.GetSchemeVersionFailed);
        }
    }
    public AdapterSchemeVersionModel fork(Integer versionId) {
        try {
            AdapterSchemeVersionModel baseVersionModel = getEntity(AdapterSchemeVersionModel.class, versionId);
            AdapterSchemeVersionModel newVersionModel = new AdapterSchemeVersionModel();
            newVersionModel.setBaseVersion(baseVersionModel.getVersion());
            newVersionModel.setSchemeId(baseVersionModel.getSchemeId());
            newVersionModel.setPublishTime(new Date());
            this.saveEntity(newVersionModel);
            AdapterVersion baseVersion = new AdapterVersion(baseVersionModel.getVersion());
            AdapterVersion newVersion = new AdapterVersion(newVersionModel.getVersion());
            buildVersionTables(baseVersion, newVersion);
            return newVersionModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.SaveSchemeVersionFailed);
        }
    }
    public AdapterSchemeVersionModel publish(Integer versionId, String publisher) {
        try {
            AdapterSchemeVersionModel adapterSchemeVersionModel = getEntity(AdapterSchemeVersionModel.class, versionId);
            //TODO:generate standard version file;
            adapterSchemeVersionModel.setPublishTime(new Date());
            adapterSchemeVersionModel.setPublishUser(publisher);
            adapterSchemeVersionModel.setPublishStatus(1);
            this.updateEntity(adapterSchemeVersionModel);
            return adapterSchemeVersionModel;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.UpdateSchemeVersionFailed);
        }
    }
    private void deleteVersionTables(AdapterVersion version) {
        String[] tables = {version.getDataSetTableName(),
                version.getMetaDataTableName(),
                version.getDictTableName(),
                version.getDictEntryTableName(),
                version.getDatasetRelationTableName()};
        List<String> deleteSqlList = new ArrayList<>();
        for (int i = 0; i < tables.length; ++i) {
            String table = tables[i];
            deleteSqlList.add(Constants.DROP_TABLE + table);
        }
        insertBatch(deleteSqlList);
    }
    private void buildVersionTables(AdapterVersion baseVersion, AdapterVersion newVersion) {
        String[] newTables = {newVersion.getDataSetTableName(),
                newVersion.getMetaDataTableName(),
                newVersion.getDictTableName(),
                newVersion.getDictEntryTableName()};
        String[] baseTables = {baseVersion.getDataSetTableName(),
                baseVersion.getMetaDataTableName(),
                baseVersion.getDictTableName(),
                baseVersion.getDictEntryTableName()};
        Session session = getCurrentSession();
        for (int i = 0; i < baseTables.length; ++i) {
            String baseTable = baseTables[i];
            String newTable = newTables[i];
            Query query = session.createSQLQuery(Constants.CREATE_TABLE + newTable + Constants.LIKE + baseTable);
            query.executeUpdate();
            query = session.createSQLQuery(Constants.INSERT_INTO + newTable + Constants.SELECT + "*" + Constants.FROM + baseTable);
            query.executeUpdate();
        }
    }
    public List<SchemeVersionResultDetailModel> getPublishedList() {
        try {
            Session session = getCurrentSession();
            Criteria criteria = session.createCriteria(AdapterSchemeVersionModel.class);
            criteria.add(Restrictions.eq("publishStatus",1));
            List<AdapterSchemeVersionModel> versionModelList = criteria.list();
            List<Integer> schemeIdList = new ArrayList<>();
            Map<Integer, String> schemeMap = new HashMap<>();
            for (AdapterSchemeVersionModel model : versionModelList) {
                schemeIdList.add(model.getSchemeId());
            }
            if (CollectionUtil.isEmpty(schemeIdList)) {
                schemeIdList.add(null);
            }
            criteria = session.createCriteria(AdapterSchemeModel.class);
            criteria.add(Restrictions.in("id", schemeIdList));
            List<AdapterSchemeModel> schemeList = criteria.list();
            for (AdapterSchemeModel schemeModel : schemeList) {
                schemeMap.put(schemeModel.getId(), schemeModel.getName());
            }
            List<SchemeVersionResultDetailModel> detailModelList = new ArrayList<>();
            for (AdapterSchemeVersionModel model : versionModelList) {
                SchemeVersionResultDetailModel detailModel = new SchemeVersionResultDetailModel();
                detailModel.setId(model.getId());
                detailModel.setName(model.getName());
                detailModel.setSchemeId(model.getSchemeId());
                detailModel.setSchemeName(schemeMap.get(model.getSchemeId()));
                detailModel.setVersion(model.getVersion());
                detailModel.setBaseVersion(model.getBaseVersion());
                detailModel.setPublishStatus(model.getPublishStatus());
                detailModel.setPublishUser(model.getPublishUser());
                detailModel.setPublishTime(model.getPublishTime());
                detailModelList.add(detailModel);
            }
            return detailModelList;
        } catch (Exception e) {
            throw new ApiException(ErrorCode.GetSchemeVersionListFailed);
        }
    }
    private void buildVersionTables(AdapterSchemeVersionModel versionModel) {
        AdapterVersion adapterVersion = new AdapterVersion(versionModel.getVersion());
        AdapterSchemeModel scheme = getEntity(AdapterSchemeModel.class, versionModel.getSchemeId());
        StandardVersion stdVersion = new StandardVersion(scheme.getStdVersion());
        insertBatch(createTable(adapterVersion));
        List<String> sqlList = new ArrayList<>();
        SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
        String sql = sqlCreator.selectData(stdVersion.getMetaDataTableName());
        Query query = getQuery(sqlCreator, sql);
        List<StdMetaDataModel> metadataList = query.list();
        List<Integer> newDictdList = new ArrayList<>();
        for (StdMetaDataModel stdMetaDataModel : metadataList) {
            if (stdMetaDataModel.getDictId() != null && !newDictdList.contains(stdMetaDataModel.getDictId())) {
                newDictdList.add(stdMetaDataModel.getDictId());
            }
        }
        sqlList.add(insertData(adapterVersion.getDataSetTableName(), stdVersion.getDataSetTableName(),
                new String[]{"id,std_dataset_id,std_dataset_code,std_dataset_name"},
                new String[]{"id,id,code,name"},
                scheme.getId(),
                "",
                null));
        sqlList.add(insertData(adapterVersion.getMetaDataTableName(), stdVersion.getMetaDataTableName(),
                new String[]{"id,std_metadata_id,std_metadata_code,std_metadata_name,std_dataset_id,std_dict_id"},
                new String[]{"id,id,code,name,dataset_id,dict_id"},
                scheme.getId(),
                "",
                null));
        sqlList.add(insertData(adapterVersion.getDictTableName(), stdVersion.getDictTableName(),
                new String[] {"id,std_dict_id,std_dict_code,std_dict_name"},
                new String[] {"id,id,code,name"},
                scheme.getId(),
                "id",
                newDictdList));
        sqlList.add(insertData(adapterVersion.getDictEntryTableName(), stdVersion.getDictEntryTableName(),
                new String[] {"id,std_entry_id,std_entry_code,std_entry_value,std_dict_id"},
                new String[] {"id,id,code,value,dict_id"},
                scheme.getId(),
                "dict_id",
                newDictdList));
        insertBatch(sqlList);
    }
    private List<String> createTable(AdapterVersion adapterVersion) {
        List<String> sqlList = new ArrayList<>();
        List<String> adapterTableList = new ArrayList<>();
        adapterTableList.add(adapterVersion.DataSetTablePrefix);
        adapterTableList.add(adapterVersion.MetaDataTablePrefix);
        adapterTableList.add(adapterVersion.DictTablePrefix);
        adapterTableList.add(adapterVersion.DictEntryTablePrefix);
        adapterTableList.add(adapterVersion.DatasetRelationTablePrefix);
        for (String table : adapterTableList){
            String sql = Constants.CREATE_TABLE + table + Constants.UNDERLINE + adapterVersion.getVersion() + Constants.LIKE + table;
            sqlList.add(sql);
        }
        return sqlList;
    }
    private String insertData(String adapterTableName, String stdTableName, String[] item1, String[] item2, Integer schemeId, String item, List<Integer> idList) {
        StringBuffer sql = new StringBuffer();
        String idStr = Constants.EMPTY;
        if (!CollectionUtil.isEmpty(idList)) {
            for (Integer id : idList) {
                idStr += id + Constants.COMMA;
            }
            if (!StringUtil.isEmpty(idStr)) {
                idStr = Constants.LEFT_BRACKET + idStr.substring(0, idStr.length() - 1) +  Constants.RIGHT_BRACKET;
            }
        }
        sql.append(Constants.INSERT_INTO + adapterTableName + Constants.LEFT_BRACKET);
        for (String it : item1) {
            sql.append(it + Constants.COMMA);
        }
        sql.append("scheme_id" + Constants.RIGHT_BRACKET + Constants.LEFT_BRACKET + Constants.SELECT );
        for (String it : item2) {
            sql.append(it + Constants.COMMA);
        }
        sql.append(schemeId + Constants.FROM + stdTableName);
        if (!StringUtil.isEmpty(item)) {
            sql.append(Constants.WHERE + item +Constants.IN + idStr);
        }
        sql.append(Constants.RIGHT_BRACKET);
        return sql.toString();
    }
}

+ 52 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/bo/AdapterVersion.java

@ -0,0 +1,52 @@
package com.yihu.ehr.standard.service.bo;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.util.ObjectVersion;
public class AdapterVersion {
    public static final String FBVersion = "000000000000";
    public final static String DataSetTablePrefix = "adapter_dataset";
    public final static String MetaDataTablePrefix = "adapter_metadata";
    public final static String DictTablePrefix = "adapter_dict";
    public final static String DictEntryTablePrefix = "adapter_dictentry";
    public final static String DatasetRelationTablePrefix = "adapter_dataset_relation";
    private ObjectVersion version;
    public AdapterVersion(String version) {
        this.version = new ObjectVersion(version);
    }
    public static AdapterVersion generateVersion() {
        ObjectVersion objectVersion = new ObjectVersion();
        return new AdapterVersion(objectVersion.toString());
    }
    public String getDataSetTableName() {
        return DataSetTablePrefix + Constants.UNDERLINE + version;
    }
    public String getMetaDataTableName() {
        return MetaDataTablePrefix + Constants.UNDERLINE + version;
    }
    public String getDictTableName() {
        return DictTablePrefix + Constants.UNDERLINE + version;
    }
    public String getDictEntryTableName() {
        return DictEntryTablePrefix + Constants.UNDERLINE + version;
    }
    public String getDatasetRelationTableName() {
        return DatasetRelationTablePrefix + Constants.UNDERLINE + version;
    }
    public String getVersion() {
        return version.toString();
    }
    public void finalize() throws Throwable {
    }
}

+ 60 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/bo/StandardVersion.java

@ -0,0 +1,60 @@
package com.yihu.ehr.standard.service.bo;
import com.yihu.ehr.framework.util.ObjectVersion;
public class StandardVersion {
    public final static String VersionBoundSymbol = "_";
    public final static String DataSetTable = "std_dataset";
    public final static String MetaDataTable = "std_metadata";
    public final static String DictTable = "std_dictionary";
    public final static String DictEntryTable = "std_dictionary_entry";
    public final static String CDADocumentTable = "std_cda_document";
    public final static String CDADatasetTable = "std_cda_dataset";
    private ObjectVersion version;
    public StandardVersion(String version) {
        this.version = new ObjectVersion(version);
    }
    public StandardVersion() {
    }
    public static StandardVersion generateVersion() {
        ObjectVersion objectVersion = new ObjectVersion();
        return new StandardVersion(objectVersion.toString());
    }
    public String getDataSetTableName() {
        return DataSetTable + VersionBoundSymbol + version;
    }
    public String getMetaDataTableName() {
        return MetaDataTable + VersionBoundSymbol + version;
    }
    public String getDictTableName() {
        return DictTable + VersionBoundSymbol + version;
    }
    public String getDictEntryTableName() {
        return DictEntryTable + VersionBoundSymbol + version;
    }
    public String getCDATableName() {
        return CDADocumentTable + VersionBoundSymbol + version;
    }
    public String getCDADatasetTableName() {
        return CDADatasetTable + VersionBoundSymbol + version;
    }
    public String getVersion() {
        return version.toString();
    }
    public void finalize() throws Throwable {
    }
}

+ 429 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StandardService.java

@ -0,0 +1,429 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.standard.StandardModel;
import com.yihu.ehr.standard.model.standard.StandardVersionModel;
import com.yihu.ehr.standard.model.standard.StdPublisherModel;
import com.yihu.ehr.standard.model.standard.resultModel.StandardResultDetailModel;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @created Airhead 2015/12/23.
 */
@Transactional
@Service("StandardService")
public class StandardService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StandardService";
    public List<StandardModel> getList(String condition, String order, Integer limit, Integer offset) {
        try {
            Map queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map orderMap = RequestParamTransformer.parseJsonToMap(order);
            return this.getList(queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardGetListFailed);
    }
    public Object add(String standard) {
        Boolean existCodeFlg = false;
        Boolean existNameFlg = false;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StandardModel standardModel = objectMapper.readValue(standard, StandardModel.class);
            existCodeFlg = standardCodeValidate(standardModel.getCode());
            existNameFlg = standardNameValidate(standardModel.getName());
            if (!existCodeFlg && !existNameFlg) {
                this.add(standardModel);
                return standardModel;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (existCodeFlg) {
            throw new ApiException(ErrorCode.ExistStandardCode);
        } else if (existNameFlg) {
            throw new ApiException(ErrorCode.ExistStandardName);
        } else {
            throw new ApiException(ErrorCode.StandardSaveFailed);
        }
    }
    public Boolean standardCodeValidate(String code) {
        Map<String, String> query = new HashMap<>();
        Map<String, String> order = new HashMap<>();
        query.put("code", code);
        List<StandardModel> list = getList(query, order, 1, 0);
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public Boolean standardNameValidate(String name) {
        Map<String, String> query = new HashMap<>();
        Map<String, String> order = new HashMap<>();
        query.put("name", name);
        List<StandardModel> list = getList(query, order, 1, 0);
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public void delete(Integer standardId) {
        Boolean publishedFlg = false;
        Boolean existFlg = false;
        try {
            StandardModel standardModel = get(standardId);
            if (standardModel == null) {
                return;
            }
            if (standardModel.getVersionStatus().equals(1)) {
                publishedFlg = true;
            }
            existFlg = existStandardVersionValid(standardModel.getId());
            if (!publishedFlg && !existFlg) {
                Session session = getCurrentSession();
                String sql = "delete from " + StandardModel.TABLE_NAME + " where id = :id";
                Query query = session.createSQLQuery(sql);
                query.setLong("id", standardId);
                query.executeUpdate();
                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (publishedFlg) {
            throw new ApiException(ErrorCode.StandardDeletePublished);
        } else if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardVersion);
        } else {
            throw new ApiException(ErrorCode.StandardDeleteFailed);
        }
    }
    public Boolean standardNameValidate(Integer standardId, String name) {
        String sql = "FROM StandardModel WHERE name = :name and id != :standardId";
        Query query = getCurrentSession().createQuery(sql);
        query.setParameter("standardId", standardId);
        query.setParameter("name", name);
        List<StandardModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public Boolean standardCodeValidate(Integer standardId, String code) {
        String sql = "FROM StandardModel WHERE code = :code and id != :standardId";
        Query query = getCurrentSession().createQuery(sql);
        query.setParameter("standardId", standardId);
        query.setParameter("code", code);
        List<StandardModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public StandardModel update(String standard) {
        Boolean existCodeFlg = false;
        Boolean existNameFlg = false;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StandardModel standardModel = objectMapper.readValue(standard, StandardModel.class);
            existCodeFlg = standardCodeValidate(standardModel.getId(), standardModel.getCode());
            existNameFlg = standardNameValidate(standardModel.getId(), standardModel.getName());
            if (!existCodeFlg && !existNameFlg) {
                this.update(standardModel);
            }
            return standardModel;
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (existCodeFlg) {
            throw new ApiException(ErrorCode.ExistStandardCode);
        } else if (existNameFlg) {
            throw new ApiException(ErrorCode.ExistStandardName);
        } else {
            throw new ApiException(ErrorCode.StandardUpdateFailed);
        }
    }
    public StandardModel get(Integer standardId) {
        try {
            SqlCreator sqlCreator = new SqlCreator(StandardModel.class);
            sqlCreator.equalCondition("id", standardId);
            String sql = sqlCreator.selectData(StandardModel.TABLE_NAME);
            Query query = getQuery(sqlCreator, sql);
            return (StandardModel) query.uniqueResult();
        } catch (DataAccessException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardGetFailed);
    }
    public List<Object[]> getSysParamList() {
        String paramSql = "select s.param_value,s.org_id from system_param s where s.param_key = '"+ Constants.STANDARD+"'";
        Query paramQuery = getCurrentSession().createSQLQuery(paramSql);
        List<Object[]> list = paramQuery.list();
        return list;
    }
    public List<StandardResultDetailModel> getStandardListFormat(List<StdPublisherModel> publisherModelList,
                                                                 List<StandardModel> standardModelList,
                                                                 List<StandardVersionModel> versionModelList,
                                                                 Map<String, String> codeToIdMap,
                                                                 String name) {
        List<StandardResultDetailModel> resultDetailModelList = new ArrayList<>();
        Map<String, StandardResultDetailModel> resultDetailModelMap = new HashMap<>();
        Map<String, StandardResultDetailModel> resultDetailModelCheckMap = new HashMap<>();
        Map<String, StandardResultDetailModel> resultDetailModelAddMap = new HashMap<>();
        for (StdPublisherModel publisherModel : publisherModelList) {
            StandardResultDetailModel resultDetailModel = new StandardResultDetailModel();
            String id = "publisher" + publisherModel.getId();
            resultDetailModel.setId(id);
            resultDetailModel.setName(publisherModel.getName());
            resultDetailModel.setType(0);
            resultDetailModel.setCode(publisherModel.getCode());
            codeToIdMap.put(publisherModel.getCode(), id);
            if (StringUtil.isEmpty(name) || publisherModel.getName().contains(name)) {
                resultDetailModelCheckMap.put(id, resultDetailModel);
                resultDetailModelAddMap.put(id, resultDetailModel);
                resultDetailModelList.add(resultDetailModel);
            }
            resultDetailModelMap.put(id, resultDetailModel);
        }
        for (StandardModel standardModel : standardModelList) {
            String pid = codeToIdMap.get(standardModel.getPublisherOrgCode());
            if (StringUtil.isEmpty(pid)) {
                continue;
            }
            String id = "standard" + standardModel.getId();
            StandardResultDetailModel resultDetailModel = new StandardResultDetailModel();
            resultDetailModel.setId(id);
            resultDetailModel.setPid(codeToIdMap.get(standardModel.getPublisherOrgCode()));
            resultDetailModel.setType(1);
            resultDetailModel.setName(standardModel.getName());
            resultDetailModel.setCode(standardModel.getCode());
            if (resultDetailModelCheckMap.containsKey(pid)) {
                resultDetailModelCheckMap.put(id, resultDetailModel);
                resultDetailModelList.add(resultDetailModel);
                resultDetailModelAddMap.put(id, resultDetailModel);
            } else if (StringUtil.isEmpty(name) || standardModel.getName().contains(name)) {
                resultDetailModelCheckMap.put(id, resultDetailModel);
                resultDetailModelList.add(resultDetailModel);
                if (!resultDetailModelAddMap.containsKey(pid)) {
                    resultDetailModelAddMap.put(pid, resultDetailModel);
                    resultDetailModelList.add(resultDetailModelMap.get(pid));
                }
            }
            resultDetailModelMap.put(id, resultDetailModel);
        }
        for (StandardVersionModel versionModel : versionModelList) {
            String pid = "standard" + versionModel.getStandardId();
            String id = "version" + versionModel.getId();
            StandardResultDetailModel resultDetailModel = new StandardResultDetailModel();
            resultDetailModel.setId(id);
            resultDetailModel.setPid(pid);
            resultDetailModel.setPublisher(versionModel.getPublishUser());
            resultDetailModel.setStatus(versionModel.getPublishStatus());
            resultDetailModel.setName(versionModel.getName());
            resultDetailModel.setCode(versionModel.getVersion());
            resultDetailModel.setDate(StringUtil.toString(versionModel.getPublishTime()));
            resultDetailModel.setType(2);
            if (resultDetailModelCheckMap.containsKey(pid)) {
                resultDetailModelList.add(resultDetailModel);
            } else if (StringUtil.isEmpty(name) || versionModel.getName().contains(name)) {
                resultDetailModelList.add(resultDetailModel);
                if (!resultDetailModelAddMap.containsKey(pid)) {
                    resultDetailModelAddMap.put(resultDetailModel.getPid(), resultDetailModelMap.get(resultDetailModel.getPid()));
                    resultDetailModelAddMap.put(resultDetailModelMap.get(resultDetailModel.getPid()).getPid(), resultDetailModelMap.get(resultDetailModelMap.get(resultDetailModel.getPid()).getPid()));
                    resultDetailModelList.add(resultDetailModelMap.get(resultDetailModel.getPid()));
                    resultDetailModelList.add(resultDetailModelMap.get(resultDetailModelMap.get(resultDetailModel.getPid()).getPid()));
                }
            }
        }
        return resultDetailModelList;
    }
    public List<StandardResultDetailModel> getStandardList(String condition) {
        String name = Constants.EMPTY;
        Integer type = null;
        SqlCreator sqlCreator = new SqlCreator(StandardModel.class);
        if (!StringUtil.isEmpty(condition)) {
            ObjectMapper objectMapper = new ObjectMapper();
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                if (jsonNode.get("type") != null) {
                    type = jsonNode.get("type").asInt();
                }
                if (jsonNode.get("name") != null) {
                    name = jsonNode.get("name").asText();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String publisherCode = Constants.EMPTY;
        String publisherHql = Constants.EMPTY;
        if (type != null) {
            List<Object[]> list = getSysParamList();
            String code = StringUtil.toString(list.get(0)[0]);
            publisherCode = StringUtil.toString(list.get(0)[1]);
            if (type == 0) {
                sqlCreator.equalCondition("code", code);
                publisherHql = "FROM StdPublisherModel where code = :publisherCode";
            } else if (type == 1) {
                sqlCreator.neCondition("code", code);
                publisherHql = "FROM StdPublisherModel where code != :publisherCode";
            }
        }
        String sql = sqlCreator.selectData(StandardModel.TABLE_NAME);
        Query sessionQuery = getQuery(sqlCreator, sql);
        List<StandardModel> standardModelList = sessionQuery.list();
        Map<String, String> codeToIdMap = new HashMap<>();
        List<Integer> idList = new ArrayList<>();
        for (StandardModel standardModel : standardModelList) {
            idList.add(standardModel.getId());
        }
        if (CollectionUtil.isEmpty(idList)) {
            idList.add(null);
        }
        Query query = getCurrentSession().createQuery(publisherHql);
        query.setParameter("publisherCode", publisherCode);
        List<StdPublisherModel> publisherModelList = query.list();
        String versionHql = "FROM StandardVersionModel WHERE standardId IN :idList";
        query = getCurrentSession().createQuery(versionHql);
        query.setParameterList("idList", idList);
        List<StandardVersionModel> versionModelList = query.list();
        List<StandardResultDetailModel> resultDetailModelList = getStandardListFormat(publisherModelList,
                                                                                        standardModelList,
                                                                                        versionModelList,
                                                                                        codeToIdMap,
                                                                                        name);
        return resultDetailModelList;
    }
    //TODO:TEST
    public StandardModel fork(Integer standardId) {
        try {
            StandardModel baseStandard = get(standardId);
            StandardModel newStandard = new StandardModel(baseStandard);
            newStandard.setId(null);
            newStandard.setName(baseStandard.getName() + "-副本");
            newStandard.setCode(baseStandard.getCode() + "-副本");
            newStandard.setVersionStatus(0);
            saveEntity(newStandard);
            return newStandard;
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardForkFailed);
    }
    private void update(StandardModel standardModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(standardModel));
        SqlCreator sqlCreator = new SqlCreator(StandardModel.class);
        String sql = sqlCreator.updateDataByTableKey(StandardModel.TABLE_NAME, jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private void add(StandardModel standardModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Session session = getCurrentSession();
        String sql = "select max(id) from " + StandardModel.TABLE_NAME;
        Query query = session.createSQLQuery(sql);
        Object object = query.uniqueResult();
        standardModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(standardModel));
        SqlCreator sqlCreator = new SqlCreator(StandardModel.class);
        sql = sqlCreator.insertData(StandardModel.TABLE_NAME, jsonNode);
        query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private List<StandardModel> getList(Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StandardModel.class);
        for (String key : query.keySet()) {
            if (key.equals("type")) {
                Integer type = Integer.parseInt(query.get(key));
                List<Object[]> list = getSysParamList();
                String code = StringUtil.toString(list.get(0)[0]);
                if (type == 0) {
                    sqlCreator.equalCondition("code", code);
                } else if (type == 1) {
                    sqlCreator.neCondition("code", code);
                }
            } else {
                sqlCreator.equalCondition(key, query.get(key));
            }
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(StandardModel.TABLE_NAME);
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StandardModel>) sessionQuery.list();
    }
    public boolean existStandardVersionValid(Integer standardId) {
        String hql="FROM StandardVersionModel WHERE standardId = :standardId";
        Query query = getCurrentSession().createQuery(hql);
        query.setParameter("standardId", standardId);
        List<StandardVersionModel> standardModelList = query.list();
        if (!CollectionUtil.isEmpty(standardModelList)) {
            return true;
        }
        return false;
    }
}

+ 334 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StandardVersionService.java

@ -0,0 +1,334 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.adapter.AdapterSchemeModel;
import com.yihu.ehr.standard.model.standard.StandardVersionModel;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
/**
 * @created Airhead 2015/12/25.
 */
@Transactional
@Service("StandardVersionService")
public class StandardVersionService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StandardVersionService";
    public List<StandardVersionModel> getList(Integer standardId, String condition, String order, Integer limit, Integer offset) {
        try {
            Map queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map orderMap = RequestParamTransformer.parseJsonToMap(order);
            return this.getList(standardId, queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardVersionGetListFailed);
    }
    public Object add(String version) {
        Boolean existFlg = false;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StandardVersionModel versionModel = objectMapper.readValue(version, StandardVersionModel.class);
            existFlg = versionNameValidate(versionModel.getStandardId(), versionModel.getName());
            if (!existFlg) {
                this.add(versionModel);
                return versionModel;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardVersionName);
        } else {
            throw new ApiException(ErrorCode.StandardVersionSaveFailed);
        }
    }
    public Boolean versionNameValidate(Integer standardId, String versionName) {
            Map<String, String> query = new HashMap<>();
            Map<String, String> order = new HashMap<>();
            query.put("name", versionName);
            List<StandardVersionModel> list = getList(standardId, query, order, 1, 0);
            if (!CollectionUtil.isEmpty(list)) {
                return true;
            }
            return false;
    }
    public Boolean versionNameValidate(Integer standardId, Integer versionId, String versionName) {
        String sql = "FROM StandardVersionModel WHERE name = :name and standardId = :standardId and id != :versionId";
        Query query = getCurrentSession().createQuery(sql);
        query.setParameter("standardId", standardId);
        query.setParameter("name", versionName);
        query.setParameter("versionId", versionId);
        List<StandardVersionModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public void delete(Integer versionId,String version) {
        Boolean existFlg = false;
        Boolean useredFlg = false;
        try {
            StandardVersionModel versionModel = get(versionId);
            if (versionModel.getPublishStatus() == 1) {
                existFlg = true;
            } else {
                String sql = "FROM AdapterSchemeModel WHERE stdVersion = :stdVersion or adapterStdVersion =  :adapterStdVersion";
                Query query = getCurrentSession().createQuery(sql);
                query.setParameter("stdVersion", version);
                query.setParameter("adapterStdVersion", version);
                List<AdapterSchemeModel> list = query.list();
                if (!CollectionUtil.isEmpty(list)) {
                    useredFlg = true;
                }else{
                    this.delete(versionModel);
                    deleteVersionTables(new StandardVersion(versionModel.getVersion()));
                    return;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.StandardVersionDeleteFailed);
        } if(useredFlg){
            throw new ApiException(ErrorCode.StandardVersionUsedDeleteFailed);
        }else {
            throw new ApiException(ErrorCode.StandardVersionDeletePublished);
        }
    }
    public StandardVersionModel update(String version) {
        Boolean existFlg = false;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StandardVersionModel versionModel = objectMapper.readValue(version, StandardVersionModel.class);
            existFlg = versionNameValidate(versionModel.getStandardId(), versionModel.getId(), versionModel.getName());
            if (!existFlg) {
                this.update(versionModel);
                return versionModel;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardVersionName);
        } else {
            throw new ApiException(ErrorCode.StandardVersionUpdateFailed);
        }
    }
    public StandardVersionModel get(Integer versionId) {
        try {
            StandardVersionModel versionModel = this.myGet(versionId);
            return versionModel;
        } catch (DataAccessException e) {
            throw new ApiException(ErrorCode.StandardVersionGetFailed);
        }
    }
    public StandardVersionModel fork(Integer versionId) {
        try {
            return this.myFork(versionId);
        } catch (DataAccessException | IOException e) {
            throw new ApiException(ErrorCode.StandardVersionForkFailed);
        }
    }
    public StandardVersionModel publish(Integer versionId, String publisher) {
        try {
            return this.myPublish(versionId, publisher);
        } catch (DataAccessException e) {
            throw new ApiException(ErrorCode.StandardVersionPublishFailed);
        }
    }
    public StandardVersionModel getLastestVersion(Integer standardId) {
        Map<String, String> query = new HashMap<>();
        Map<String, String> order = new HashMap<>();
        order.put("publisher", Constants.DESC);
        List<StandardVersionModel> list = getList(standardId, query, order, 1, 0);
        if (list != null && list.size() != 0) {
            return list.get(0);
        }
        return null;
    }
    public StandardVersionModel myPublish(Integer versionId, String publisher) {
        StandardVersionModel standardVersionModel = myGet(versionId);
        //TODO:generate standard version file;
        String path = "";
        standardVersionModel.setPath(path);
        standardVersionModel.setPublishTime(new Date());
        standardVersionModel.setPublishUser(publisher);
        standardVersionModel.setPublishStatus(1);
        this.update(standardVersionModel);
        return standardVersionModel;
    }
    private StandardVersionModel myFork(Integer versionId) throws IOException {
        StandardVersionModel baseVersionModel = myGet(versionId);
        StandardVersionModel newVersionModel = new StandardVersionModel();
        newVersionModel.setBaseVersion(baseVersionModel.getVersion());
        newVersionModel.setName(baseVersionModel.getName() + " Copy");
        newVersionModel.setPrimaryVersion(baseVersionModel.getPrimaryVersion());
        newVersionModel.setPublishTime(new Date());
        this.add(newVersionModel);
        StandardVersion baseVersion = new StandardVersion(baseVersionModel.getVersion());
        StandardVersion newVersion = new StandardVersion(newVersionModel.getVersion());
        buildVersionTables(baseVersion, newVersion, baseVersionModel.getStandardId());
        return newVersionModel;
    }
    private StandardVersionModel myGet(Integer versionId) {
        SqlCreator sqlCreator = new SqlCreator(StandardVersionModel.class);
        sqlCreator.equalCondition("id", versionId);
        String sql = sqlCreator.selectData(StandardVersionModel.TABLE_NAME);
        Query query = getQuery(sqlCreator, sql);
        return (StandardVersionModel) query.uniqueResult();
    }
    private void delete(StandardVersionModel standardVersionModel) {
        deleteEntity(standardVersionModel);
    }
    private void update(StandardVersionModel standardVersionModel) {
        try {
            updateEntity(standardVersionModel);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void  add(StandardVersionModel standardVersionModel) {
        StandardVersion standardVersion = StandardVersion.generateVersion();
        standardVersionModel.setVersion(standardVersion.getVersion());
        standardVersionModel.setPublishTime(null);
        standardVersionModel.setPublishStatus(0);
        saveEntity(standardVersionModel);
        String baseVer = standardVersionModel.getBaseVersion();
        StandardVersion baseVersion = StringUtil.isEmpty(baseVer) ? null : new StandardVersion(baseVer);
        StandardVersion newVersion = new StandardVersion(standardVersionModel.getVersion());
        buildVersionTables(baseVersion, newVersion, standardVersionModel.getStandardId());
    }
    private List<StandardVersionModel> getList(Integer standardId, Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StandardVersionModel.class);
        sqlCreator.equalCondition("standardId", standardId);
        sqlCreator.equalCondition("publishStatus", 1);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(StandardVersionModel.TABLE_NAME);
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StandardVersionModel>) sessionQuery.list();
    }
    private void deleteVersionTables(StandardVersion version) {
        String[] tables = {version.getDataSetTableName(),
                version.getMetaDataTableName(),
                version.getDictTableName(),
                version.getDictEntryTableName()
                /*version.getCDATableName(),
               /* version.getCDADatasetTableName()*/};
        List<String> deleteSql = new ArrayList<>();
        for (int i = 0; i < tables.length; ++i) {
            String table = tables[i];
            deleteSql.add(Constants.DROP_TABLE + table);
        }
        insertBatch(deleteSql);
    }
    private void buildVersionTables(StandardVersion baseVersion, StandardVersion newVersion, Integer standardId) {
        String[] newTables = {newVersion.getDataSetTableName(),
                newVersion.getMetaDataTableName(),
                newVersion.getDictTableName(),
                newVersion.getDictEntryTableName()
               /* newVersion.getCDATableName(),
                newVersion.getCDADatasetTableName()*/};
        String[] baseTables;
        if (baseVersion == null) {
            String[] templateTables = {StandardVersion.DataSetTable,
                    StandardVersion.MetaDataTable,
                    StandardVersion.DictTable,
                    StandardVersion.DictEntryTable
                   /* StandardVersion.CDADocumentTable,
                    StandardVersion.CDADatasetTable*/};
            baseTables = templateTables;
        } else {
            String[] templateTables = {baseVersion.getDataSetTableName(),
                    baseVersion.getMetaDataTableName(),
                    baseVersion.getDictTableName(),
                    baseVersion.getDictEntryTableName()
                    /*baseVersion.getCDATableName(),
                    baseVersion.getCDADatasetTableName()*/};
            baseTables = templateTables;
        }
        List<String> createSql = new ArrayList<>();
        List<String> insertSql = new ArrayList<>();
        List<String> updateSql = new ArrayList<>();
        for (int i = 0; i < baseTables.length; ++i) {
            String baseTable = baseTables[i];
            String newTable = newTables[i];
            createSql.add(Constants.CREATE_TABLE + newTable + Constants.LIKE + baseTable);
        }
        for (int i = 0; i < baseTables.length; ++i) {
            String baseTable = baseTables[i];
            String newTable = newTables[i];
            insertSql.add(Constants.INSERT_INTO + newTable + Constants.SELECT + Constants.ASTERISK + Constants.FROM + baseTable);
        }
        for (int i = 0; i < baseTables.length; ++i) {
            String baseTable = baseTables[i];
            String newTable = newTables[i];
            updateSql.add(Constants.UPDATE + newTable + Constants.SET + " STD_ID = " + standardId);
        }
        insertBatch(createSql);
        insertBatch(insertSql);
        insertBatch(updateSql);
    }
}

+ 155 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdCDACatalogService.java

@ -0,0 +1,155 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.NumberUtil;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.standard.StdCDACatalogModel;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
 * @author AndyCai
 * @version 1.0
 * @created 11-12月-2015 15:53:02
 */
@Transactional
@Service("StdCDACatalogService")
public class StdCDACatalogService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdCDACatalogService";
    public StdCDACatalogService() {
    }
    public void finalize() throws Throwable {
    }
    public List<StdCDACatalogModel> getList(String condition, String order, Integer limit, Integer offset) {
        try {
            Map queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map orderMap = RequestParamTransformer.parseJsonToMap(order);
            return this.getList(queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDACatalogGetListFailed);
    }
    public Object add(String catalog) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StdCDACatalogModel standardModel = objectMapper.readValue(catalog, StdCDACatalogModel.class);
            this.add(standardModel);
            return standardModel.getId();
        } catch (IOException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDACatalogSaveFailed);
    }
    public void delete(Integer catalogId) {
        try {
            if (catalogId != null) {
                StdCDACatalogModel stdCdaCatalogModel = get(catalogId);
                deleteEntity(stdCdaCatalogModel);
            }
        } catch (DataAccessException e) {
            throw new ApiException(ErrorCode.StandardCDACatalogDeleteFailed);
        }
    }
    public Object update(String catalog) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StdCDACatalogModel standardModel = objectMapper.readValue(catalog, StdCDACatalogModel.class);
            this.update(standardModel);
            return standardModel;
        } catch (IOException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDACatalogUpdateFailed);
    }
    public StdCDACatalogModel get(Integer catalogId) {
        try {
            Integer id = NumberUtil.toInteger(catalogId);
            if (id != null) {
                SqlCreator sqlCreator = new SqlCreator(StdCDACatalogModel.class);
                sqlCreator.equalCondition("id",catalogId);
                String sql = sqlCreator.selectData(StdCDACatalogModel.TABLE_NAME);
                Query query = getQuery(sqlCreator, sql);
                return (StdCDACatalogModel) query.uniqueResult();
            }
        } catch (DataAccessException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDACatalogGetFailed);
    }
    private void update(StdCDACatalogModel stdCDACatalogModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdCDACatalogModel));
        SqlCreator sqlCreator = new SqlCreator(StdCDACatalogModel.class);
        String sql = sqlCreator.updateDataByTableKey(StdCDACatalogModel.TABLE_NAME, jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private void add(StdCDACatalogModel stdCDACatalogModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Session session = getCurrentSession();
        String sql = "select max(id) from " + StdCDACatalogModel.TABLE_NAME;
        Query query = session.createSQLQuery(sql);
        Object object = query.uniqueResult();
        stdCDACatalogModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdCDACatalogModel));
        SqlCreator sqlCreator = new SqlCreator(StdCDACatalogModel.class);
        sql = sqlCreator.insertData(StdCDACatalogModel.TABLE_NAME, jsonNode);
        query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private List<StdCDACatalogModel> getList(Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdCDACatalogModel.class);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(StdCDACatalogModel.TABLE_NAME);
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdCDACatalogModel>) sessionQuery.list();
    }
}

+ 203 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdCDADatasetService.java

@ -0,0 +1,203 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.BeanTransformer;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.standard.StdCDADatasetModel;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
 * @author AndyCai
 * @version 1.0
 * @created 02-9月-2015 14:00:55
 */
@Transactional
@Service("StdCDADatasetService")
public class StdCDADatasetService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdCDADatasetService";
    public StdCDADatasetService() {
    }
    public void finalize() throws Throwable {
    }
    public List<StdCDADatasetModel> getList(String stdVersion, String condition, String order, Integer limit, Integer offset) {
        try {
            Map queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map orderMap = RequestParamTransformer.parseJsonToMap(order);
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            return this.getList(standardVersion, queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDADatasetGetListFailed);
    }
    public StdCDADatasetModel add(String stdVersion, String cdaDataset) {
        if (stdVersion.equals("{stdVersion}")) {
            throw new ApiException(ErrorCode.StandardCDADatasetMissVersion);
        }
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdCDADatasetModel stdCdaDatasetModel = objectMapper.readValue(cdaDataset, StdCDADatasetModel.class);
            this.add(standardVersion, stdCdaDatasetModel);
            return stdCdaDatasetModel;
        } catch (IOException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDADatasetSaveFailed);
    }
    public void delete(String stdVersion, Integer cdadatasetId) {
        if (StringUtil.isEmpty(stdVersion)) {
            throw new ApiException(ErrorCode.StandardCDADatasetMissVersion);
        }
        if (cdadatasetId == null) {
            throw new ApiException(ErrorCode.StandardCDADatasetMissID);
        }
        try {
            if (cdadatasetId != null) {
                StandardVersion standardVersion = new StandardVersion(stdVersion);
                Session session = getCurrentSession();
                String sql = "delete from " + standardVersion.getCDADatasetTableName() + " where id = :id";
                Query query = session.createSQLQuery(sql);
                query.setInteger("id", cdadatasetId);
                query.executeUpdate();
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.StandardCDADatasetDeleteFailed);
        }
    }
    public StdCDADatasetModel update(String stdVersion, String cdaDataset) {
        if (stdVersion.equals("{stdVersion}")) {
            throw new ApiException(ErrorCode.StandardCDADatasetMissVersion);
        }
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdCDADatasetModel stdCdaDatasetModel = objectMapper.readValue(cdaDataset, StdCDADatasetModel.class);
            this.modify(standardVersion, stdCdaDatasetModel);
            return stdCdaDatasetModel;
        } catch (IOException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDADatasetUpdateFailed);
    }
    public StdCDADatasetModel get(String stdVersion, Integer cdadatasetId) {
        if (StringUtil.isEmpty(stdVersion)) {
            throw new ApiException(ErrorCode.StandardCDADatasetMissVersion);
        }
        if (cdadatasetId == null) {
            throw new ApiException(ErrorCode.StandardCDADatasetMissID);
        }
        try {
            if (cdadatasetId != null) {
                StandardVersion standardVersion = new StandardVersion(stdVersion);
                Session session = getCurrentSession();
                String cdaDatasetTableName = standardVersion.getCDADatasetTableName();
                String sql = "select id, cda_id, dataset_id from " + cdaDatasetTableName + " where id = :id";
                Query query = session.createSQLQuery(sql);
                query.setInteger("id", cdadatasetId);
                query.setResultTransformer(new BeanTransformer<>(StdCDADatasetModel.class));
                return (StdCDADatasetModel) query.uniqueResult();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDADatasetGetFailed);
    }
    private void modify(StandardVersion standardVersion, StdCDADatasetModel stdCdaDatasetModel) {
        Session session = getCurrentSession();
        String cdaDatasetTableName = standardVersion.getCDADatasetTableName();
        String sql = "update " + cdaDatasetTableName +
                "set " +
                "id = :id, " +
                "cda_id = :cda_id, " +
                "dataset_id = :dataset_id " +
                "where id = :id";
        Query query = session.createSQLQuery(sql);
        query.setInteger("id", stdCdaDatasetModel.getId());
        query.setInteger("cda_id", stdCdaDatasetModel.getCdaID());
        query.setInteger("dataset_id", stdCdaDatasetModel.getdatasetId());
        query.executeUpdate();
    }
    private void add(StandardVersion standardVersion, StdCDADatasetModel stdCdaDatasetModel) {
        Session session = getCurrentSession();
        String cdaDatasetTableName = standardVersion.getCDADatasetTableName();
        ObjectMapper objectMapper = new ObjectMapper();
        String sql = "select max(id) from " + cdaDatasetTableName;
        Query query = session.createSQLQuery(sql);
        Object object = query.uniqueResult();
        stdCdaDatasetModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
        sql = "insert into " + cdaDatasetTableName + "(id, cda_id, dataset_id)"
                + "VALUES (:id, :cda_id, :dataset_id)";
        query = session.createSQLQuery(sql);
        query.setInteger("id", stdCdaDatasetModel.getId());
        query.setInteger("cda_id", stdCdaDatasetModel.getCdaID());
        query.setInteger("dataset_id", stdCdaDatasetModel.getdatasetId());
        query.executeUpdate();
    }
    private List<StdCDADatasetModel> getList(StandardVersion standardVersion, Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdCDADatasetModel.class);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(standardVersion.getCDADatasetTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdCDADatasetModel>) sessionQuery.list();
    }
}//end CDADatasetRelationshipManager

+ 178 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdCDAService.java

@ -0,0 +1,178 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.BeanTransformer;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.standard.StdCDAModel;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
 * @author AndyCai
 * @version 1.0
 * @created 01-9月-2015 17:17:50
 */
@Transactional
@Service("StdCDAService")
public class StdCDAService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdCDAService";
    public StdCDAService() {
    }
    public List<StdCDAModel> getList(String stdVersion, String condition, String order, Integer limit, Integer offset) {
        try {
            Map queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map orderMap = RequestParamTransformer.parseJsonToMap(order);
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            return this.getList(standardVersion, queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDAGetListFailed);
    }
    public Object add(String stdVersion, String cda) {
        if (stdVersion.equals("{stdVersion}")) {
            throw new ApiException(ErrorCode.StandardCDAMissVersion);
        }
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdCDAModel stdCdaModel = objectMapper.readValue(cda, StdCDAModel.class);
            this.add(standardVersion, stdCdaModel);
            return stdCdaModel.getId();
        } catch (IOException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDASaveFailed);
    }
    public void delete(String stdVersion, Integer cdaId) {
        if (StringUtil.isEmpty(stdVersion)) {
            throw new ApiException(ErrorCode.StandardCDAMissVersion);
        }
        try {
            if (cdaId != null) {
                StandardVersion standardVersion = new StandardVersion(stdVersion);
                Session session = getCurrentSession();
                String sql = "delete from " + standardVersion.getCDATableName() + " where id = :id";
                Query query = session.createSQLQuery(sql);
                query.setInteger("id", cdaId);
                query.executeUpdate();
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.StandardCDADeleteFailed);
        }
    }
    public Object update(String stdVersion, String cda) {
        if (stdVersion.equals("{stdVersion}")) {
            throw new ApiException(ErrorCode.StandardCDAMissVersion);
        }
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdCDAModel stdCdaModel = objectMapper.readValue(cda, StdCDAModel.class);
            this.modify(standardVersion, stdCdaModel);
            return stdCdaModel;
        } catch (IOException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardCDAUpdateFailed);
    }
    public StdCDAModel get(String stdVersion, Integer cdaId) {
        if (stdVersion.equals("{stdVersion}")) {
            throw new ApiException(ErrorCode.StandardCDAMissVersion);
        }
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            return this.get(standardVersion, cdaId);
        } catch (Exception e) {
        }
        throw new ApiException(ErrorCode.StandardCDAGetFailed);
    }
    private StdCDAModel get(StandardVersion standardVersion, Integer cdaId) {
        Session session = getCurrentSession();
        String cdaTableName = standardVersion.getCDATableName();
        String sql = "select id, std_id, code, name, path, description, catalog_id from " + cdaTableName + " where id = :id";
        Query query = session.createSQLQuery(sql);
        query.setInteger("id", cdaId);
        query.setResultTransformer(new BeanTransformer<>(StdCDAModel.class));
        return (StdCDAModel) query.uniqueResult();
    }
    private void modify(StandardVersion standardVersion, StdCDAModel stdCdaModel) throws IOException {
        String cdaTableName = standardVersion.getCDATableName();
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdCdaModel));
        SqlCreator sqlCreator = new SqlCreator(StdCDAModel.class);
        String sql = sqlCreator.updateDataByTableKey(cdaTableName, jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private void add(StandardVersion standardVersion, StdCDAModel stdCdaModel) throws IOException {
        String cdaTableName = standardVersion.getCDATableName();
        ObjectMapper objectMapper = new ObjectMapper();
        Session session = getCurrentSession();
        String sql = "select max(id) from " + cdaTableName;
        Query query = session.createSQLQuery(sql);
        Object object = query.uniqueResult();
        stdCdaModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdCdaModel));
        SqlCreator sqlCreator = new SqlCreator(StdCDAModel.class);
        sql = sqlCreator.insertData(cdaTableName, jsonNode);
        query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private List<StdCDAModel> getList(StandardVersion standardVersion, Map<String, String> query,  Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdCDAModel.class);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(standardVersion.getCDATableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdCDAModel>) sessionQuery.list();
    }
}//end CDADocumentManager

+ 148 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdDatasetCatalogService.java

@ -0,0 +1,148 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.standard.StdDatasetCatalogModel;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
 * @created Airhead 2015/12/28.
 */
@Transactional
@Service("StdDatasetCatalogService")
public class StdDatasetCatalogService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdDatasetCatalogService";
    public StdDatasetCatalogService() {
    }
    public void finalize() throws Throwable {
    }
    public List<StdDatasetCatalogModel> getList(String condition, String order, Integer limit, Integer offset) {
        try {
            Map queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map orderMap = RequestParamTransformer.parseJsonToMap(order);
            return this.getList(queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDatasetCatalogGetListFailed);
    }
    public Object add(String catalog) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StdDatasetCatalogModel stdDatasetCatalogModel = objectMapper.readValue(catalog, StdDatasetCatalogModel.class);
            this.add(stdDatasetCatalogModel);
            return stdDatasetCatalogModel.getId();
        } catch (IOException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDatasetCatalogSaveFailed);
    }
    public void delete(Integer catalogId) {
        try {
            if (catalogId != null) {
                StdDatasetCatalogModel cdaCatalogModel = get(catalogId);
                deleteEntity(cdaCatalogModel);
            }
        } catch (DataAccessException e) {
            throw new ApiException(ErrorCode.StandardDatasetCatalogDeleteFailed);
        }
    }
    public Object update(String catalog) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StdDatasetCatalogModel stdDatasetCatalogModel = objectMapper.readValue(catalog, StdDatasetCatalogModel.class);
            this.modify(stdDatasetCatalogModel);
            return stdDatasetCatalogModel;
        } catch (IOException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDatasetCatalogUpdateFailed);
    }
    public StdDatasetCatalogModel get(Integer catalogId) {
        if (catalogId == null) {
            throw new ApiException(ErrorCode.StandardDatasetCatalogMissID);
        }
        
        try {
            if (catalogId != null) {
                Session session = getCurrentSession();
                String hql = "FROM StdDatasetCatalogModel where id = ?";
                Query query = session.createQuery(hql);
                query.setParameter(0, catalogId);
                return (StdDatasetCatalogModel) query.uniqueResult();
            }
        } catch (DataAccessException e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDatasetCatalogGetFailed);
    }
    private void modify(StdDatasetCatalogModel stdDatasetCatalogModel) throws IOException {
        updateEntity(stdDatasetCatalogModel);
    }
    private void add(StdDatasetCatalogModel stdDatasetCatalogModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Session session = getCurrentSession();
        String sql = "select max(id) from " + StdDatasetCatalogModel.TABLE_NAME;
        Query query = session.createSQLQuery(sql);
        Object object = query.uniqueResult();
        stdDatasetCatalogModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdDatasetCatalogModel));
        SqlCreator sqlCreator = new SqlCreator(StdDatasetCatalogModel.class);
        sql = sqlCreator.insertData(StdDatasetCatalogModel.TABLE_NAME, jsonNode);
        query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private List<StdDatasetCatalogModel> getList(Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdDatasetCatalogModel.class);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(StdDatasetCatalogModel.TABLE_NAME);
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdDatasetCatalogModel>) sessionQuery.list();
    }
}

+ 510 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdDatasetService.java

@ -0,0 +1,510 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.BeanTransformer;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.Select2;
import com.yihu.ehr.standard.model.standard.StandardVersionModel;
import com.yihu.ehr.standard.model.standard.StdDataSetModel;
import com.yihu.ehr.standard.model.standard.StdDictionaryModel;
import com.yihu.ehr.standard.model.standard.StdMetaDataModel;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import jxl.Sheet;
import jxl.Workbook;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
/**
 * 数据集管理器.
 *
 * @author Sand
 * @version 1.0
 * @created 30-6月-2015 16:19:05
 */
@Transactional
@Service("StdDatasetService")
public class StdDatasetService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdDatasetService";
    public StdDatasetService() {
    }
    public void finalize() throws Throwable {
        super.finalize();
    }
    public List<StdDataSetModel> getList(String stdVersion, String condition, String order, Integer limit, Integer offset) {
        try {
            Map queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map orderMap = RequestParamTransformer.parseJsonToMap(order);
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            return this.getList(standardVersion, queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDatasetGetListFailed);
    }
    public StdDataSetModel add(String stdVersion, String dataset) {
        if (stdVersion.equals("{stdVersion}")) {
            throw new ApiException(ErrorCode.StandardDatasetMissVersion);
        }
        Boolean existFlg = false;
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdDataSetModel stdDataSetModel = objectMapper.readValue(dataset, StdDataSetModel.class);
            existFlg = datasetCodeValidate(standardVersion, stdDataSetModel.getCode());
            if (!existFlg) {
                this.add(standardVersion.getDataSetTableName(), stdDataSetModel);
                return stdDataSetModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardDatasetCode);
        } else {
            throw new ApiException(ErrorCode.StandardDatasetSaveFailed);
        }
    }
    public Boolean datasetCodeValidate(StandardVersion standardVersion, String code) {
        Map<String, String> query = new HashMap<>();
        Map<String, String> order = new HashMap<>();
        query.put("code", code);
        List<StdDataSetModel> list = this.getList(standardVersion, query, order, 1, 0);
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public void delete(String stdVersion, Integer datasetId) {
        if (StringUtil.isEmpty(stdVersion)) {
            throw new ApiException(ErrorCode.StandardDatasetMissVersion);
        }
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            if (datasetId != null) {
                this.delete(standardVersion, datasetId);
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.StandardDatasetDeleteFailed);
        }
    }
    public Boolean datasetCodeValidate(StandardVersion standardVersion, Integer datasetId,  String code) {
        SqlCreator sqlCreator = new SqlCreator(StdDataSetModel.class);
        sqlCreator.equalCondition("code", code);
        sqlCreator.neCondition("id", datasetId);
        String sql = sqlCreator.selectData(standardVersion.getDataSetTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        List<StdDataSetModel> list = sessionQuery.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public Object update(String stdVersion, String dataset) {
        if (StringUtil.isEmpty(stdVersion)) {
            throw new ApiException(ErrorCode.StandardDatasetMissVersion);
        }
        Boolean existFlg = false;
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdDataSetModel stdDataSetModel = objectMapper.readValue(dataset, StdDataSetModel.class);
            existFlg = datasetCodeValidate(standardVersion, stdDataSetModel.getId(), stdDataSetModel.getCode());
            if (!existFlg) {
                this.update(standardVersion, stdDataSetModel);
                return stdDataSetModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardDatasetCode);
        } else {
            throw new ApiException(ErrorCode.StandardDatasetUpdateFailed);
        }
    }
    public StdDataSetModel get(String stdVersion, Integer datasetId) {
        if (StringUtil.isEmpty(stdVersion)) {
            throw new ApiException(ErrorCode.StandardDatasetMissVersion);
        }
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            if (datasetId != null) {
                return this.get(standardVersion, datasetId);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDatasetGetFailed);
    }
    private StdDataSetModel get(StandardVersion standardVersion, Integer datasetId) {
        String dataSetTable = standardVersion.getDataSetTableName();
        SqlCreator sqlCreator = new SqlCreator(StdDataSetModel.class);
        sqlCreator.equalCondition("id", datasetId);
        String sql = sqlCreator.selectData(dataSetTable);
        Query query = getQuery(sqlCreator, sql);
        return (StdDataSetModel) query.uniqueResult();
    }
    private void update(StandardVersion standardVersion, StdDataSetModel stdDataSetModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdDataSetModel));
        SqlCreator sqlCreator = new SqlCreator(StdDataSetModel.class);
        String dataSetTable = standardVersion.getDataSetTableName();
        String sql = sqlCreator.updateDataByTableKey(dataSetTable, jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private void delete(StandardVersion standardVersion, Integer datasetId) {
        Session session = getCurrentSession();
        String sql = "delete from " + standardVersion.getDataSetTableName() + " where id = :id";
        Query query = session.createSQLQuery(sql);
        query.setInteger("id", datasetId);
        query.executeUpdate();
        sql = "delete from " + standardVersion.getMetaDataTableName() + " where dataset_id = :datasetId";
        query = session.createSQLQuery(sql);
        query.setInteger("datasetId", datasetId);
        query.executeUpdate();
    }
    private void add(String dataSetTable, StdDataSetModel stdDataSetModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        stdDataSetModel.setId(getMaxId(dataSetTable));
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdDataSetModel));
        SqlCreator sqlCreator = new SqlCreator(StdDataSetModel.class);
        String sql = sqlCreator.insertData(dataSetTable, jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private List<StdDataSetModel> getList(StandardVersion standardVersion, Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdDataSetModel.class);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(standardVersion.getDataSetTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdDataSetModel>) sessionQuery.list();
    }
    public List getDatasetList(Class tClass, String stdVersion, String condition, String order, Integer limit, Integer offset) {
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            String tableName = standardVersion.getDataSetTableName();
            SqlCreator sqlCreator = new SqlCreator(tClass);
            ObjectMapper objectMapper = new ObjectMapper();
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                if(jsonNode.get("initVal")!=null && !jsonNode.get("initVal").asText().isEmpty()){
                    String initName = jsonNode.get("initVal").asText();
                    sqlCreator.neCondition("code",initName);
                }else if(jsonNode.get("name")!=null && !jsonNode.get("name").asText().isEmpty()){
                    String name = jsonNode.get("name").asText();
                    sqlCreator.likeOrCondition("code", "name", name);
                }
            }
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
            String sql = sqlCreator.selectData(tableName);
            Query query = getQuery(sqlCreator, sql);
            if (limit != null) {
                query.setMaxResults(limit);
                if (offset != null) {
                    query.setFirstResult(offset * limit);
                }
            }
            return query.list();
        } catch (Exception e) {
            e.printStackTrace();
            throw new ApiException(ErrorCode.GetDataSetListFailed);
        }
    }
    public Integer getDatasetInt(Class tClass, String stdVersion, String condition) {
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            String tableName = standardVersion.getDataSetTableName();
            SqlCreator sqlCreator = new SqlCreator(tClass);
            ObjectMapper objectMapper = new ObjectMapper();
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("code", "name", name);
            }
            String sql = sqlCreator.countData(tableName);
            Query query = getCurrentSession().createSQLQuery(sql);
            for (String key : sqlCreator.getKeyValueMap().keySet()) {
                query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
            }
            Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
            return count;
        } catch (Exception e) {
            e.printStackTrace();
            throw new ApiException(ErrorCode.GetDataSetListFailed);
        }
    }
    public List<Select2> getDatasetSelectList(String stdVersion, String condition, String order, Integer limit, Integer offset) {
        List<StdDataSetModel> datasetList = getDatasetList(StdDataSetModel.class, stdVersion, condition, order, limit, offset);
        List<Select2> detailModelList = new ArrayList<>();
        for (StdDataSetModel stdDataSetModel : datasetList) {
            Select2 select2 = new Select2();
            select2.setId(stdDataSetModel.getId() + Constants.COMMA + stdDataSetModel.getCode());
            select2.setText(stdDataSetModel.getName());
            detailModelList.add(select2);
        }
        return detailModelList;
    }
    public List getAllVersionDatasetList() {
        try {
            String hql = "FROM StandardVersionModel WHERE publishTime is not null order by publishTime";
            Query query = getCurrentSession().createQuery(hql);
            List<StandardVersionModel> versionModelList = query.list();
            String sql = Constants.EMPTY;
            BeanTransformer transformer = new BeanTransformer(StdDataSetModel.class);
            for (StandardVersionModel versionModel : versionModelList) {
                SqlCreator sqlCreator = new SqlCreator(StdDataSetModel.class);
                StandardVersion version = new StandardVersion(versionModel.getVersion());
                sql = sql + sqlCreator.selectData(version.getDataSetTableName()) + Constants.UNION;
            }
            if (!StringUtil.isEmpty(sql)) {
                sql = sql.substring(0, sql.length() - Constants.UNION.length());
                SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
                sqlQuery.setResultTransformer(transformer);
                List<StdDataSetModel> modelList = sqlQuery.list();
                List<StdDataSetModel> distinctModelList = new ArrayList<>();
                Map<String, StdDataSetModel> datasetModelMap = new HashMap<>();
                for (StdDataSetModel model : modelList) {
                    datasetModelMap.put(model.getCode(), model);
                }
                for (String key : datasetModelMap.keySet()) {
                    distinctModelList.add(datasetModelMap.get(key));
                }
                return distinctModelList;
            } else {
                return new ArrayList<>();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new ApiException(ErrorCode.GetDataSetListFailed);
        }
    }
    //从excel导入数据集、数据元
    public void importFromExcel(String filePath, String stdVersion){
        String datasetTable;
        String metadataTable;
        String dictTable;
        if (StringUtil.isEmpty(stdVersion)) {
            datasetTable = "std_dataset";
            metadataTable = "std_metadata";
            dictTable = "std_dictionary";
        } else {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            datasetTable = standardVersion.getDataSetTableName();
            metadataTable = standardVersion.getMetaDataTableName();
            dictTable = standardVersion.getDictTableName();
        }
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryModel.class);
        String sql = sqlCreator.selectData(dictTable);
        Query sessionQuery = getQuery(sqlCreator, sql);
        List<StdDictionaryModel> stdDictList = sessionQuery.list();
        Map<String, Integer> stdDictMap = new HashMap<>();
        for (StdDictionaryModel dict : stdDictList) {
            stdDictMap.put(dict.getCode(), dict.getId());
        }
        try {
            InputStream is = new FileInputStream(filePath);
            Workbook rwb = Workbook.getWorkbook(is);
            Sheet[] sheets = rwb.getSheets();
            for (Sheet sheet : sheets) {
                StdDataSetModel stdDataSetModel = new StdDataSetModel();
                //获取数据集信息
                String sheetName = sheet.getName(); //sheet名字
                String dataSetNname = sheet.getCell(1, 0).getContents();//名称
                String dataSetCode = sheet.getCell(1, 1).getContents();//标识
                String reference = sheet.getCell(1, 2).getContents();//参考
                String summary = sheet.getCell(1, 3).getContents();//备注
                //todo:test--测试时备注做区别,方便删除测试,summary变量区别
                //summary="测试excel导入";
                //todo:test--测试时code区别,否则测试不成功,因为code唯一
                //dataSetCode = dataSetCode+"excel";
                if (dataSetNname==null || dataSetNname.equals("")){
                    throw new Exception(sheetName+"数据集名称不能为空,请检查!");
                }
                if (dataSetCode==null || dataSetCode.equals("")){
                    throw new Exception(sheetName +"数据集标识不能为空,请检查!");
                }
                //插入数据集信息
                stdDataSetModel.setCode(dataSetCode);//code唯一
                stdDataSetModel.setName(dataSetNname);
                stdDataSetModel.setstandardId(2);
                //获取数据元信息
                Set<String> set = new HashSet<String>();
                List<StdMetaDataModel> metaDataList = new ArrayList<>();
                int rows = sheet.getRows();
                for (int j = 0; j < rows - 5; j++) {
                    StdMetaDataModel metaData = new StdMetaDataModel();
                    int row = j + 5;
                    String innerCode = sheet.getCell(1, row).getContents();//内部标识
                    String code = sheet.getCell(2, row).getContents();//数据元编码
                    String name = sheet.getCell(3, row).getContents();//数据元名称
                    String definition = sheet.getCell(4, row).getContents();//数据元定义
                    String type = sheet.getCell(5, row).getContents();//数据类型
                    String format = sheet.getCell(6, row).getContents();//表示形式
                    String dictCode = sheet.getCell(7, row).getContents();//术语范围值
                    String columnName = sheet.getCell(8, row).getContents();//列名
                    String columnType = sheet.getCell(9, row).getContents();//列类型
                    String columnLength = sheet.getCell(10, row).getContents();//列长度
                    String primaryKey = sheet.getCell(11, row).getContents();//主键
                    String nullable = sheet.getCell(12, row).getContents();//可为空
                    Integer pk = 0;
                    Integer isNull = 1;
                    if (!StringUtil.isEmpty(primaryKey)) {
                        pk = Integer.parseInt(primaryKey);
                    }
                    if (!StringUtil.isEmpty(nullable)) {
                        isNull = Integer.parseInt(nullable);
                    }
                    //todo:test--测试时备注做区别,方便删除测试,definition变量区别
                    //definition="测试excel导入";
                    //数据元的校验,一个不通过则全部不保存
                    if (innerCode==null || innerCode.equals("")){
                        throw new Exception(sheetName+"第"+(row+1)+"行内部标识不能为空,请检查!");
                    }else{
                        //innerCode要唯一
                        set.add(innerCode);
                        if (set.toArray(new String[set.size()]).length != j+1){
                            //innerCode重复
                            throw new Exception(sheetName+"第"+(row+1)+"行内部标识已存在,请检查!");
                        }
                    }
                    if (StringUtil.isEmpty(code)){
                        throw new Exception(sheetName+"第"+(row+1)+"行数据元编码不能为空,请检查!");
                    }
                    if (StringUtil.isEmpty(name)){
                        throw new Exception(sheetName+"第"+(row+1)+"行数据元名称不能为空,请检查!");
                    }
                    if (StringUtil.isEmpty(columnName)){
                        throw new Exception(sheetName+"第"+(row+1)+"行列名不能为空,请检查!");
                    }
                    if (pk == 1 && isNull == 1){
                        throw new Exception(sheetName+"第"+(row+1)+"行主键不能为空,请检查!");
                    }
                    //数据类型与列类型一致 S、L、N、D、DT、T、BY
                    if ((type.contains("S") && !columnType.contains("VARCHAR")) || (type.equals("D") && !columnType.equals("DATE"))  || (type.equals("DT") && !columnType.equals("DATETIME"))) {
                        throw new Exception(sheetName+"第"+(row+1)+"行数据类型与列类型不匹配,请检查!");
                    }
                    //插入数据元信息
                    metaData.setId(0);//为0内部自增
                    metaData.setCode(innerCode);
                    metaData.setName(name);
                    metaData.setDeCode(code);
                    metaData.setType(type);
                    if (!StringUtil.isEmpty(dictCode)) {
                        metaData.setDictId(stdDictMap.get(dictCode));
                    }
                    metaData.setFormat(format);
                    metaData.setDefinition(definition);
                    metaData.setColumnName(columnName);
                    metaData.setColumnLength(columnLength);
                    metaData.setColumnType(columnType);
                    metaData.setPrimaryKey(0);
                    metaData.setPrimaryKey(pk);
                    metaData.setNullable(isNull);
                    metaDataList.add(metaData);
                    //metaDataManager.saveMetaData(dataSet, metaData);//保存数据元
                }
                //数据集入库
                add(datasetTable, stdDataSetModel);//保存数据集信息
                Integer metaDataMaxId = getMaxId(metadataTable);
                //数据元入库
                if (metaDataList.size()>0){
                    for (StdMetaDataModel metaData : metaDataList) {
                        sqlCreator = new SqlCreator(StdMetaDataModel.class);
                        metaData.setDatasetId(stdDataSetModel.getId());
                        metaData.setId(metaDataMaxId++);
                        metaData.setStandardId(2);
                        ObjectMapper objectMapper = new ObjectMapper();
                        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(metaData));
                        sql = sqlCreator.insertData(metadataTable, jsonNode);
                        Query query = getExeuteQuery(sqlCreator, sql);
                        query.executeUpdate();
                    }
                }
            }
            //关闭
            rwb.close();
            is.close();
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 293 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdDictEntryService.java

@ -0,0 +1,293 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.Select2;
import com.yihu.ehr.standard.model.standard.StdDictionaryEntryModel;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
/**
 * @author Sand
 * @version 1.0
 * @created 16-7月-2015 20:57:06
 */
@Transactional
@Service("StdDictEntryService")
public class StdDictEntryService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdDictEntryService";
    public StdDictEntryService() {
    }
    public void finalize() throws Throwable {
    }
    public List<StdDictionaryEntryModel> getList(String stdVersion,Integer dictId, String condition, String order, Integer limit, Integer offset) {
        try {
            Map queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map orderMap = RequestParamTransformer.parseJsonToMap(order);
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            return this.getList(standardVersion, dictId, queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDictEntryGetListFailed);
    }
    public Object add(String stdVersion, String dictEntry) {
        Boolean existFlg = false;
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdDictionaryEntryModel stdDictionaryEntryModel = objectMapper.readValue(dictEntry, StdDictionaryEntryModel.class);
            existFlg = dictEntryCodeValidate(standardVersion, stdDictionaryEntryModel.getDictId(), stdDictionaryEntryModel.getCode());
            if (!existFlg) {
                this.add(standardVersion, stdDictionaryEntryModel);
                return stdDictionaryEntryModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardDictEntryCode);
        } else {
            throw new ApiException(ErrorCode.StandardDictEntrySaveFailed);
        }
    }
    public Boolean dictEntryCodeValidate(StandardVersion standardVersion, Integer dictId, String code) {
        Map<String, String> query = new HashMap<>();
        Map<String, String> order = new HashMap<>();
        query.put("code", code);
        List<StdDictionaryEntryModel> list = this.getList(standardVersion, dictId, query, order, 1, 0);
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public void delete(String stdVersion, Integer dictEntryId) {
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            if (dictEntryId != null) {
                this.delete(standardVersion, dictEntryId);
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.StandardDictEntryDeleteFailed);
        }
    }
    public Boolean dictEntryCodeValidate(StandardVersion standardVersion, Integer dictId, Integer dictEntryId, String code) {
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryEntryModel.class);
        sqlCreator.equalCondition("dictId", dictId);
        sqlCreator.equalCondition("code", code);
        sqlCreator.neCondition("id", dictEntryId);
        String sql = sqlCreator.selectData(standardVersion.getDictEntryTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        List<StdDictionaryEntryModel> list = sessionQuery.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public Object update(String stdVersion, String dictEntry) {
        Boolean existFlg = false;
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdDictionaryEntryModel stdDictionaryEntryModel = objectMapper.readValue(dictEntry, StdDictionaryEntryModel.class);
            existFlg = dictEntryCodeValidate(standardVersion, stdDictionaryEntryModel.getDictId(), stdDictionaryEntryModel.getId(), stdDictionaryEntryModel.getCode());
            if (!existFlg) {
                this.modify(standardVersion, stdDictionaryEntryModel);
                return stdDictionaryEntryModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardDictEntryCode);
        } else {
            throw new ApiException(ErrorCode.StandardDictEntryUpdateFailed);
        }
    }
    public StdDictionaryEntryModel get(String stdVersion, Integer dictEntryId) {
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            if (dictEntryId != null) {
                return this.get(standardVersion, dictEntryId);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDictEntryGetFailed);
    }
    private StdDictionaryEntryModel get(StandardVersion standardVersion, Integer dictEntryId) {
        String dictEntryTableName = standardVersion.getDictEntryTableName();
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryEntryModel.class);
        sqlCreator.equalCondition("id", dictEntryId);
        String sql = sqlCreator.selectData(dictEntryTableName);
        Query query = getQuery(sqlCreator, sql);
        return (StdDictionaryEntryModel) query.uniqueResult();
    }
    private void modify(StandardVersion standardVersion, StdDictionaryEntryModel stdDictionaryEntryModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdDictionaryEntryModel));
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryEntryModel.class);
        String dictEntryTableName = standardVersion.getDictEntryTableName();
        String sql = sqlCreator.updateDataByTableKey(dictEntryTableName, jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private void delete(StandardVersion standardVersion, Integer dictEntryId) {
        Session session = getCurrentSession();
        String sql = "delete from " + standardVersion.getDictEntryTableName() + " where id = :id";
        Query query = session.createSQLQuery(sql);
        query.setInteger("id", dictEntryId);
        query.executeUpdate();
    }
    private void add(StandardVersion standardVersion, StdDictionaryEntryModel stdDictionaryEntryModel) throws IOException {
        Session session = getCurrentSession();
        String dictEntryTableName = standardVersion.getDictEntryTableName();
        String sql = "select max(id) from " + dictEntryTableName;
        Query query = session.createSQLQuery(sql);
        Object object = query.uniqueResult();
        Integer id = object == null ? 1 : Integer.parseInt(object.toString()) + 1;
        stdDictionaryEntryModel.setId(id);
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdDictionaryEntryModel));
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryEntryModel.class);
        sql = sqlCreator.insertData(dictEntryTableName, jsonNode);
        query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private List<StdDictionaryEntryModel> getList(StandardVersion standardVersion, Integer dictId, Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryEntryModel.class);
        sqlCreator.equalCondition("dictId", dictId);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(standardVersion.getDictEntryTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdDictionaryEntryModel>) sessionQuery.list();
    }
    public List getDictEntryList(Class tClass, String stdVersion, Integer dictId, String condition, String order, Integer limit, Integer offset) {
        StandardVersion standardVersion = new StandardVersion(stdVersion);
        String tableName = standardVersion.getDictEntryTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        sqlCreator.equalCondition("dictId", dictId);
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("code", "value", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.selectData(tableName);
        Query query = getQuery(sqlCreator, sql);
        if (limit != null) {
            query.setMaxResults(limit);
            if (offset != null) {
                query.setFirstResult(offset * limit);
            }
        }
        return query.list();
    }
    public Integer getDictEntryInt(Class tClass, String stdVersion, Integer dictId, String condition, String order, Integer limit, Integer offset) {
        StandardVersion standardVersion = new StandardVersion(stdVersion);
        String tableName = standardVersion.getDictEntryTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        sqlCreator.equalCondition("dictId", dictId);
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("code", "value", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String sql = sqlCreator.countData(tableName);
        Query query = getCurrentSession().createSQLQuery(sql);
        for (String key : sqlCreator.getKeyValueMap().keySet()) {
            query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
        }
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public List<Select2> getDictEntrySelectList(List<StdDictionaryEntryModel> dictEntryList) {
        List<Select2> detailModelList = new ArrayList<>();
        for (StdDictionaryEntryModel dictEntry : dictEntryList) {
            Select2 select2 = new Select2();
            select2.setId(dictEntry.getId() + Constants.COMMA + dictEntry.getCode());
            select2.setText(dictEntry.getValue());
            detailModelList.add(select2);
        }
        return detailModelList;
    }
}//end DictEntryManager

+ 299 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdDictService.java

@ -0,0 +1,299 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.BeanTransformer;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.Select2;
import com.yihu.ehr.standard.model.standard.StdDictionaryModel;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
/**
 * @author Sand
 * @version 1.0
 * @created 14-7月-2015 15:44:21
 */
@Transactional
@Service("StdDictService")
public class StdDictService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdDictService";
    public StdDictService() {
    }
    public void finalize() throws Throwable {
    }
    public List<StdDictionaryModel> getList(String stdVersion, String condition, String order, Integer limit, Integer offset) {
        try{
            Map<String, String> queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map<String, String> orderMap = RequestParamTransformer.parseJsonToMap(order);
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            return this.getList(standardVersion, queryMap, orderMap, limit, offset);
        }catch (Exception e){
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDictGetListFailed);
    }
    public Object add(String stdVersion, String dict) {
        Boolean existFlg = false;
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdDictionaryModel stdDictionaryModel = objectMapper.readValue(dict, StdDictionaryModel.class);
            existFlg = dictCodeValidate(standardVersion, stdDictionaryModel.getCode());
            if (!existFlg) {
                this.add(standardVersion, stdDictionaryModel);
                return stdDictionaryModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardDictCode);
        } else {
            throw new ApiException(ErrorCode.StandardDictSaveFailed);
        }
    }
    public Boolean dictCodeValidate(StandardVersion standardVersion, String code) {
        Map<String, String> query = new HashMap<>();
        Map<String, String> order = new HashMap<>();
        query.put("code", code);
        List<StdDictionaryModel> list = this.getList(standardVersion, query, order, 1, 0);
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public void delete(String stdVersion, Integer dictId) {
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            if (dictId != null) {
                this.delete(standardVersion, dictId);
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.StandardDictDeleteFailed);
        }
    }
    public Boolean dictCodeValidate(StandardVersion standardVersion, Integer dictId, String code) {
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryModel.class);
        sqlCreator.equalCondition("code", code);
        sqlCreator.neCondition("id", dictId);
        String sql = sqlCreator.selectData(standardVersion.getDictTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        List<StdDictionaryModel> list = sessionQuery.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public Object update(String stdVersion, String dict) {
        Boolean existFlg = false;
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdDictionaryModel stdDictionaryModel = objectMapper.readValue(dict, StdDictionaryModel.class);
            existFlg = dictCodeValidate(standardVersion, stdDictionaryModel.getId(), stdDictionaryModel.getCode());
            if (!existFlg) {
                this.modify(standardVersion, stdDictionaryModel);
                return stdDictionaryModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardDictCode);
        } else {
            throw new ApiException(ErrorCode.StandardDictUpdateFailed);
        }
    }
    public StdDictionaryModel get(String stdVersion, Integer dictId) {
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            if (dictId != null) {
                return this.get(standardVersion, dictId);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardDictGetFailed);
    }
    private StdDictionaryModel get(StandardVersion standardVersion, Integer dictId) {
        Session session = getCurrentSession();
        String dictTableName = standardVersion.getDictTableName();
        String sql = "select id, std_id, code, name, define, description, parent_id from " + dictTableName + " where id = :id";
        Query query = session.createSQLQuery(sql);
        query.setInteger("id", dictId);
        query.setResultTransformer(new BeanTransformer<>(StdDictionaryModel.class));
        return (StdDictionaryModel) query.uniqueResult();
    }
    private void modify(StandardVersion standardVersion, StdDictionaryModel stdDictionaryModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        String strTableName = standardVersion.getDictTableName();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdDictionaryModel));
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryModel.class);
        String sql = sqlCreator.updateDataByTableKey(strTableName, jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private void delete(StandardVersion standardVersion, Integer dictId) {
        Session session = getCurrentSession();
        String sql = "delete from " + standardVersion.getDictTableName() + " where id = :id";
        Query query = session.createSQLQuery(sql);
        query.setInteger("id", dictId);
        query.executeUpdate();
        sql = "delete from " + standardVersion.getDictEntryTableName() + " where dict_id = :dictId";
        query = session.createSQLQuery(sql);
        query.setInteger("dictId", dictId);
        query.executeUpdate();
    }
    private void add(StandardVersion standardVersion, StdDictionaryModel stdDictionaryModel) throws IOException {
        Session session = getCurrentSession();
        ObjectMapper objectMapper = new ObjectMapper();
        String strTableName = standardVersion.getDictTableName();
        String sql = null;
        sql = "select max(id) from " + strTableName;
        Query query = session.createSQLQuery(sql);
        Object object = query.uniqueResult();
        Integer id = object == null ? 1 : Integer.parseInt(object.toString()) + 1;
        stdDictionaryModel.setId(id);
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdDictionaryModel));
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryModel.class);
        sql = sqlCreator.insertData(strTableName, jsonNode);
        query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private List<StdDictionaryModel> getList(StandardVersion standardVersion, Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdDictionaryModel.class);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(standardVersion.getDictTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdDictionaryModel>) sessionQuery.list();
    }
    public List getDictList(Class tClass, String stdVersion, String condition, String order, Integer limit, Integer offset) {
        StandardVersion standardVersion = new StandardVersion(stdVersion);
        String tableName = standardVersion.getDictTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                if(jsonNode.get("initVal")!=null && !jsonNode.get("initVal").asText().isEmpty()){
                    String initName = jsonNode.get("initVal").asText();
                    sqlCreator.neCondition("code",initName);
                }else if(jsonNode.get("name")!=null && !jsonNode.get("name").asText().isEmpty()){
                    String name = jsonNode.get("name").asText();
                    sqlCreator.likeOrCondition("code", "name", name);
                }
            }
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.selectData(tableName);
        Query query = getQuery(sqlCreator, sql);
        if (limit != null) {
            query.setMaxResults(limit);
            if (offset != null) {
                query.setFirstResult(offset * limit);
            }
        }
        return query.list();
    }
    public Integer getDictInt(Class tClass, String stdVersion, String condition) {
        StandardVersion standardVersion = new StandardVersion(stdVersion);
        String tableName = standardVersion.getDictTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("code", "name", name);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.countData(tableName);
        Query query = getCurrentSession().createSQLQuery(sql);
        for (String key : sqlCreator.getKeyValueMap().keySet()) {
            query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
        }
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public List<Select2> getDictSelectList(List<StdDictionaryModel> dictList) {
        List<Select2> detailModelList = new ArrayList<>();
        for (StdDictionaryModel dictModel : dictList) {
            Select2 select2 = new Select2();
            select2.setId(dictModel.getId() + Constants.COMMA + dictModel.getCode());
            select2.setText(dictModel.getName());
            detailModelList.add(select2);
        }
        return detailModelList;
    }
}

+ 358 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdMetadataService.java

@ -0,0 +1,358 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.BeanTransformer;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.Select2;
import com.yihu.ehr.standard.model.standard.StandardVersionModel;
import com.yihu.ehr.standard.model.standard.StdDataSetModel;
import com.yihu.ehr.standard.model.standard.StdMetaDataModel;
import com.yihu.ehr.standard.service.bo.StandardVersion;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
/**
 * 数据元管理接口实现。
 *
 * @author Sand
 * @version 1.0
 * @created 2015.07.10 15:22
 */
@Transactional
@Service("StdMetadataService")
public class StdMetadataService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdMetadataService";
    public StdMetadataService() {
    }
    public List<StdMetaDataModel> getList(String stdVersion, Integer datasetId, String condition, String order, Integer limit, Integer offset) {
        try{
            Map<String, String> queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map<String, String> orderMap = RequestParamTransformer.parseJsonToMap(order);
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            return this.getList(standardVersion, datasetId, queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardMetaDataGetListFailed);
    }
    public Object add(String stdVersion, String metadata) {
        Boolean existFlg = false;
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdMetaDataModel stdMetaDataModel = objectMapper.readValue(metadata, StdMetaDataModel.class);
            existFlg = metadataCodeValidate(standardVersion, stdMetaDataModel.getDatasetId(), stdMetaDataModel.getCode());
            if (!existFlg) {
                this.add(standardVersion, stdMetaDataModel);
                return stdMetaDataModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardMetaDataCode);
        } else {
            throw new ApiException(ErrorCode.StandardMetaDataSaveFailed);
        }
    }
    public Boolean metadataCodeValidate(StandardVersion standardVersion, Integer datasetId, String code) {
        Map<String, String> query = new HashMap<>();
        Map<String, String> order = new HashMap<>();
        query.put("code", code);
        List<StdMetaDataModel> list = this.getList(standardVersion, datasetId, query, order, 1, 0);
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public void delete(String stdVersion, Integer metadataId) {
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            if (metadataId != null) {
                this.delete(standardVersion, metadataId);
            }
        } catch (Exception e) {
            throw new ApiException(ErrorCode.StandardMetaDataDeleteFailed);
        }
    }
    public Boolean metadataCodeValidate(StandardVersion standardVersion, Integer datasetId, Integer metadataId, String code) {
        SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
        sqlCreator.equalCondition("datasetId", datasetId);
        sqlCreator.equalCondition("code", code);
        sqlCreator.neCondition("id", metadataId);
        String sql = sqlCreator.selectData(standardVersion.getMetaDataTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        List<StdMetaDataModel> list = sessionQuery.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
    public StdMetaDataModel update(String stdVersion, String metadata) {
        Boolean existFlg = false;
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            ObjectMapper objectMapper = new ObjectMapper();
            StdMetaDataModel stdMetaDataModel = objectMapper.readValue(metadata, StdMetaDataModel.class);
            existFlg = metadataCodeValidate(standardVersion, stdMetaDataModel.getDatasetId(), stdMetaDataModel.getId(), stdMetaDataModel.getCode());
            if (!existFlg) {
                this.modify(standardVersion, stdMetaDataModel);
                return stdMetaDataModel;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistStandardMetaDataCode);
        } else {
            throw new ApiException(ErrorCode.StandardMetaDataUpdateFailed);
        }
    }
    public StdMetaDataModel get(String stdVersion, Integer metadataId) {
        try {
            StandardVersion standardVersion = new StandardVersion(stdVersion);
            if (metadataId != null) {
                String metaDataTableName = standardVersion.getMetaDataTableName();
                SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
                sqlCreator.equalCondition("id", metadataId);
                String sql = sqlCreator.selectData(metaDataTableName);
                Query query = getQuery(sqlCreator, sql);
                return (StdMetaDataModel) query.uniqueResult();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.StandardMetaDataGetFailed);
    }
    private void modify(StandardVersion standardVersion, StdMetaDataModel stdMetaDataModel) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdMetaDataModel));
        SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
        String metaDataTableName = standardVersion.getMetaDataTableName();
        String sql = sqlCreator.updateDataByTableKey(metaDataTableName, jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private void delete(StandardVersion standardVersion, Integer metadataId) {
        Session session = getCurrentSession();
        String sql = "delete from " + standardVersion.getMetaDataTableName() + " where id = :id";
        Query query = session.createSQLQuery(sql);
        query.setInteger("id", metadataId);
        query.executeUpdate();
    }
    private void add(StandardVersion standardVersion, StdMetaDataModel stdMetaDataModel) throws IOException {
        Session session = getCurrentSession();
        String metaDataTableName = standardVersion.getMetaDataTableName();
        String sql = "select max(id) from " + metaDataTableName;
        Query query = session.createSQLQuery(sql);
        Object object = query.uniqueResult();
        stdMetaDataModel.setId(object == null ? 1 : Integer.parseInt(object.toString()) + 1);
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdMetaDataModel));
        SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
        sql = sqlCreator.insertData(metaDataTableName, jsonNode);
        query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
    private List<StdMetaDataModel> getList(StandardVersion standardVersion, Integer datasetId, Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdMetaDataModel.class);
        sqlCreator.equalCondition("datasetId", datasetId);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        String sql = sqlCreator.selectData(standardVersion.getMetaDataTableName());
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdMetaDataModel>) sessionQuery.list();
    }
    public List getMetadataList(Class tClass, String stdVersion, Integer datasetId, String condition, String order, Integer limit, Integer offset) {
        StandardVersion standardVersion = new StandardVersion(stdVersion);
        String tableName = standardVersion.getMetaDataTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        sqlCreator.equalCondition("datasetId", datasetId);
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("code", "name", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            if (!StringUtil.isEmpty(order)) {
                JsonNode jsonNode = objectMapper.readTree(order);
                Iterator<String> fieldNames = jsonNode.fieldNames();
                while (fieldNames.hasNext()) {
                    String fieldName = fieldNames.next();
                    String value = jsonNode.get(fieldName).asText().toUpperCase();
                    sqlCreator.order(fieldName, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        String sql = sqlCreator.selectData(tableName);
        Query query = getQuery(sqlCreator, sql);
        if (limit != null) {
            query.setMaxResults(limit);
            if (offset != null) {
                query.setFirstResult(offset * limit);
            }
        }
        return query.list();
    }
    public Integer getMetadataCount(Class tClass, String stdVersion, Integer datasetId, String condition) {
        StandardVersion standardVersion = new StandardVersion(stdVersion);
        String tableName = standardVersion.getMetaDataTableName();
        SqlCreator sqlCreator = new SqlCreator(tClass);
        ObjectMapper objectMapper = new ObjectMapper();
        sqlCreator.equalCondition("datasetId", datasetId);
        if (!StringUtil.isEmpty(condition)) {
            try {
                JsonNode jsonNode = objectMapper.readTree(condition);
                String name = jsonNode.get("name").asText();
                sqlCreator.likeOrCondition("code", "name", name);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String sql = sqlCreator.countData(tableName);
        Query query = getCurrentSession().createSQLQuery(sql);
        for (String key : sqlCreator.getKeyValueMap().keySet()) {
            query.setParameter(key, sqlCreator.getKeyValueMap().get(key));
        }
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public List<Select2> getMetadataSelectList(List<StdMetaDataModel> metaDataList) {
        List<Select2> detailModelList = new ArrayList<>();
        for (StdMetaDataModel metaDataModel : metaDataList) {
            Select2 select2 = new Select2();
            select2.setId(metaDataModel.getId() + Constants.COMMA + metaDataModel.getCode());
            select2.setText(metaDataModel.getName());
            detailModelList.add(select2);
        }
        return detailModelList;
    }
    public List getAllVersionMetadataList(String condition) {
        try {
            Map<Integer, String> versionMap = new HashMap<>();
            String sql = Constants.EMPTY;
            ObjectMapper objectMapper = new ObjectMapper();
            String code = Constants.EMPTY;
            if (!StringUtil.isEmpty(condition)) {
                JsonNode jsonNode = objectMapper.readTree(condition);
                code = jsonNode.get("code").asText();
            }
            String hql = "FROM StandardVersionModel WHERE publishTime is not null order by publishTime";
            Query query = getCurrentSession().createQuery(hql);
            List<StandardVersionModel> versionModelList = query.list();
            for (StandardVersionModel versionModel : versionModelList) {
                SqlCreator sqlDatasetCreator = new SqlCreator(StdDataSetModel.class);
                StandardVersion version = new StandardVersion(versionModel.getVersion());
                versionMap.put(versionModel.getStandardId(), versionModel.getVersion());
                sqlDatasetCreator.equalCondition("code", code);
                sql = sql + sqlDatasetCreator.selectData(version.getDataSetTableName()) + Constants.UNION;
            }
            BeanTransformer datasetTransformer = new BeanTransformer(StdDataSetModel.class);
            if (!StringUtil.isEmpty(sql)) {
                sql = sql.substring(0, sql.length() - Constants.UNION.length());
                SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
                sqlQuery.setResultTransformer(datasetTransformer);
                sqlQuery.setParameter("code", code);
                List<StdDataSetModel> modelList = sqlQuery.list();
                sql = Constants.EMPTY;
                Integer count =  1;
                Map<Integer, String> datasetIdMap = new HashMap<>();
                for (StdDataSetModel model : modelList) {
                    SqlCreator sqlMetadataCreator = new SqlCreator(StdMetaDataModel.class);
                    StandardVersion version = new StandardVersion(versionMap.get(model.getstandardId()));
                    datasetIdMap.put(count++, StringUtil.toString(model.getId()));
                    sqlMetadataCreator.equalConditionQue("datasetId", model.getId());
                    sql = sql + sqlMetadataCreator.selectData(version.getMetaDataTableName()) + Constants.UNION;
                }
                BeanTransformer metadataTransformer = new BeanTransformer(StdMetaDataModel.class);
                List<StdMetaDataModel> distinctModelList = new ArrayList<>();
                if (!StringUtil.isEmpty(sql)) {
                    sql = sql.substring(0, sql.length() - Constants.UNION.length());
                    sqlQuery = getCurrentSession().createSQLQuery(sql);
                    sqlQuery.setResultTransformer(metadataTransformer);
                    for (int i=1; i<count; i++) {
                        sqlQuery.setParameter(i-1, datasetIdMap.get(i));
                    }
                    List<StdMetaDataModel> metadataList = sqlQuery.list();
                    Map<String, StdMetaDataModel> meatadataModelMap = new HashMap<>();
                    for (StdMetaDataModel model : metadataList) {
                        meatadataModelMap.put(model.getCode(), model);
                    }
                    for (String key : meatadataModelMap.keySet()) {
                        distinctModelList.add(meatadataModelMap.get(key));
                    }
                }
                return distinctModelList;
            } else  {
                return new ArrayList<>();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new ApiException(ErrorCode.GetDataSetListFailed);
        }
    }
}

+ 203 - 0
Hos-resource/src/main/java/com/yihu/ehr/standard/service/standard/StdPublisherService.java

@ -0,0 +1,203 @@
package com.yihu.ehr.standard.service.standard;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.framework.common.dao.SQLGeneralDAO;
import com.yihu.ehr.framework.constrant.Constants;
import com.yihu.ehr.framework.constrant.ErrorCode;
import com.yihu.ehr.framework.exception.ApiException;
import com.yihu.ehr.framework.util.operator.CollectionUtil;
import com.yihu.ehr.framework.util.operator.StringUtil;
import com.yihu.ehr.framework.util.sql.RequestParamTransformer;
import com.yihu.ehr.framework.util.sql.SqlCreator;
import com.yihu.ehr.standard.model.standard.StandardModel;
import com.yihu.ehr.standard.model.standard.StdPublisherModel;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
/**
 * @created Airhead 2015/12/23.
 */
@Transactional
@Service("StdPublisherService")
public class StdPublisherService extends SQLGeneralDAO {
    public static final String BEAN_ID = "StdPublisherService";
    public List<StdPublisherModel> getList(String condition, String order, Integer limit, Integer offset) {
        try{
            Map<String, String> queryMap = RequestParamTransformer.parseJsonToMap(condition);
            Map<String, String> orderMap = RequestParamTransformer.parseJsonToMap(order);
            return this.getList(queryMap, orderMap, limit, offset);
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new ApiException(ErrorCode.GetPublisherListFaield);
    }
    private List<StdPublisherModel> getList(Map<String, String> query, Map<String, String> order, Integer limit, Integer offset) {
        SqlCreator sqlCreator = new SqlCreator(StdPublisherModel.class);
        for (String key : query.keySet()) {
            sqlCreator.equalCondition(key, query.get(key));
        }
        for (String key : order.keySet()) {
            sqlCreator.order(key, order.get(key));
        }
        sqlCreator.neCondition("code", "jkzl");
        String sql = sqlCreator.selectData(StdPublisherModel.TABLE_NAME);
        Query sessionQuery = getQuery(sqlCreator, sql);
        if (limit != null) {
            sessionQuery.setMaxResults(limit);
            if (offset != null) {
                sessionQuery.setFirstResult(offset);
            }
        }
        return (List<StdPublisherModel>) sessionQuery.list();
    }
    public StdPublisherModel add(String publisher) {
        Boolean existFlg = true;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StdPublisherModel stdPublisherModel = objectMapper.readValue(publisher, StdPublisherModel.class);
            existFlg = existPublisherValid(stdPublisherModel.getCode(), stdPublisherModel.getName());
            if (!existFlg) {
                saveEntity(stdPublisherModel);
                return stdPublisherModel;
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistOrgForCreate);
        } else {
            throw new ApiException(ErrorCode.SavePublisherFailed);
        }
    }
    public void delete(Integer stdPublisherId) {
        Boolean existFlg = false;
        try {
            StdPublisherModel publisherModel = getEntity(StdPublisherModel.class, stdPublisherId);
            existFlg = existStandardValid(publisherModel.getCode());
            if (!existFlg) {
                String hql = "delete from StdPublisherModel where id = :id";
                Query query = getCurrentSession().createQuery(hql);
                query.setInteger("id", publisherModel.getId());
                query.executeUpdate();
                return;
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistOrgForStandard);
        } else {
            throw new ApiException(ErrorCode.SavePublisherFailed);
        }
}
    public StdPublisherModel update(String publisher) {
        Boolean existFlg;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            StdPublisherModel stdPublisherModel = objectMapper.readValue(publisher, StdPublisherModel.class);
            StdPublisherModel publisherModel = getEntity(StdPublisherModel.class, stdPublisherModel.getId());
            existFlg = existPublisherValid(stdPublisherModel.getId(), stdPublisherModel.getCode(), stdPublisherModel.getName());
            if (!existFlg) {
                String sql = "update std_info set publisher = :publisher,publisher_org_code = :stdPublisherOrgCode" +
                        " where publisher_org_code = :publisherOrgCode";
                SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
                sqlQuery.setParameter("publisher", stdPublisherModel.getName());
                sqlQuery.setParameter("stdPublisherOrgCode", stdPublisherModel.getCode());
                sqlQuery.setParameter("publisherOrgCode", publisherModel.getCode());
                sqlQuery.executeUpdate();
                publisherModel.setCode(stdPublisherModel.getCode());
                publisherModel.setName(stdPublisherModel.getName());
                publisherModel.setDescription(stdPublisherModel.getDescription());
                updateEntity(publisherModel);
                return stdPublisherModel;
            }
        }catch (Exception e) {
            throw new ApiException(ErrorCode.UpdatePublisherFailed);
        }
        if (existFlg) {
            throw new ApiException(ErrorCode.ExistOrgForCreate);
        } else {
            throw new ApiException(ErrorCode.SavePublisherFailed);
        }
    }
    public StdPublisherModel get(Integer stdPublisherId) {
        try {
            SqlCreator sqlCreator = new SqlCreator(StdPublisherModel.class);
            sqlCreator.equalCondition("id", stdPublisherId);
            String sql = sqlCreator.selectData(StdPublisherModel.TABLE_NAME);
            Query query = getQuery(sqlCreator, sql);
            return (StdPublisherModel) query.uniqueResult();
        } catch (Exception e) {
            throw new ApiException(ErrorCode.GetPublisherFailed);
        }
    }
    public StdPublisherModel getStandardPublisher() {
        try {
            SqlCreator sqlCreator = new SqlCreator(StdPublisherModel.class);
            String paramSql = "select s.org_id from system_param s where s.param_key = '"+ Constants.STANDARD+"'";
            Query paramQuery = getCurrentSession().createSQLQuery(paramSql);
            List list = paramQuery.list();
            String publisherCode = StringUtil.toString(list.get(0));
            sqlCreator.equalCondition("code", publisherCode);
            String sql = sqlCreator.selectData(StdPublisherModel.TABLE_NAME);
            Query query = getQuery(sqlCreator, sql);
            return (StdPublisherModel) query.uniqueResult();
        } catch (Exception e) {
            throw new ApiException(ErrorCode.GetPublisherFailed);
        }
    }
    public boolean existStandardValid(String code) {
        String hql="FROM StandardModel WHERE publisherOrgCode = :code";
        Query query = getCurrentSession().createQuery(hql);
        query.setParameter("code", code);
        List<StandardModel> standardModelList = query.list();
        if (standardModelList.size() > 0) {
           return true;
        }
        return false;
    }
    public boolean existPublisherValid(Integer publiserId, String code, String name) {
        String hql="FROM StdPublisherModel WHERE code = :code or name = :name";
        Query query = getCurrentSession().createQuery(hql);
        query.setParameter("code", code);
        query.setParameter("name", name);
        List<StdPublisherModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            if (list.get(0).getId() != publiserId) {
                return true;
            }
        }
        return false;
    }
    public boolean existPublisherValid(String code, String name) {
        String hql="FROM StdPublisherModel WHERE code = :code or name = :name";
        Query query = getCurrentSession().createQuery(hql);
        query.setParameter("code", code);
        query.setParameter("name", name);
        List<StdPublisherModel> list = query.list();
        if (!CollectionUtil.isEmpty(list)) {
            return true;
        }
        return false;
    }
}