Procházet zdrojové kódy

导入,适配开发

chenyongxing před 8 roky
rodič
revize
c1155a0949
25 změnil soubory, kde provedl 1013 přidání a 37 odebrání
  1. 12 0
      pom.xml
  2. 24 0
      src/main/java/com/yihu/hos/config/BeanConfig.java
  3. 84 4
      src/main/java/com/yihu/hos/standard/controller/AdapterDictController.java
  4. 94 8
      src/main/java/com/yihu/hos/standard/controller/AdapterMetadataController.java
  5. 8 0
      src/main/java/com/yihu/hos/standard/controller/IntegrationController.java
  6. 85 3
      src/main/java/com/yihu/hos/standard/controller/StandardVersionController.java
  7. 10 0
      src/main/java/com/yihu/hos/standard/model/adapter/AdapterDictEntryModel.java
  8. 10 0
      src/main/java/com/yihu/hos/standard/model/adapter/AdapterMetadataModel.java
  9. 9 0
      src/main/java/com/yihu/hos/standard/model/adapter/resultModel/AdapterDictEntryResultDetailModel.java
  10. 9 0
      src/main/java/com/yihu/hos/standard/model/adapter/resultModel/ApiMetadataResultDetailModel.java
  11. 48 0
      src/main/java/com/yihu/hos/standard/service/adapter/AdapterDatasetService.java
  12. 35 0
      src/main/java/com/yihu/hos/standard/service/adapter/AdapterDictEntryService.java
  13. 46 2
      src/main/java/com/yihu/hos/standard/service/adapter/AdapterDictService.java
  14. 35 0
      src/main/java/com/yihu/hos/standard/service/adapter/AdapterMetadataService.java
  15. 8 2
      src/main/java/com/yihu/hos/standard/service/adapter/AdapterSchemeVersionService.java
  16. 152 1
      src/main/java/com/yihu/hos/standard/service/standard/StandardVersionService.java
  17. 1 1
      src/main/java/com/yihu/hos/standard/service/standard/StdDatasetService.java
  18. 1 1
      src/main/java/com/yihu/hos/standard/service/standard/StdDictService.java
  19. 1 1
      src/main/java/com/yihu/hos/standard/service/standard/StdMetadataService.java
  20. 10 0
      src/main/webapp/WEB-INF/ehr/jsp/standard/adapterplan/configuration.jsp
  21. 308 9
      src/main/webapp/WEB-INF/ehr/jsp/standard/adapterplan/configurationJs.jsp
  22. 4 0
      src/main/webapp/WEB-INF/ehr/jsp/standard/integration/configuration.jsp
  23. 17 3
      src/main/webapp/WEB-INF/ehr/jsp/standard/integration/configurationJs.jsp
  24. 1 1
      src/main/webapp/WEB-INF/ehr/jsp/standard/integration/versionDetailJs.jsp
  25. 1 1
      src/main/webapp/develop/lib/ligerui/skins/Aqua/css/ligerui-grid.css

+ 12 - 0
pom.xml

@ -184,6 +184,18 @@
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>
        <!--   jxl导出工具-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15-beta1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.15-beta1</version>
        </dependency>
        <!-- swagger end -->
    </dependencies>

+ 24 - 0
src/main/java/com/yihu/hos/config/BeanConfig.java

@ -1,6 +1,9 @@
package com.yihu.hos.config;
import com.yihu.hos.interceptor.AuditInterceptor;
import com.yihu.hos.standard.match.dictionary.DictitemStandardExistStrategy;
import com.yihu.hos.standard.match.metadata.MetatdataStandardExistStrategy;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
@ -14,6 +17,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
@ -155,4 +159,24 @@ public class BeanConfig {
    public String getFsUrl() {
        return fsUrl;
    }
    @Bean
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(5);
        threadPoolTaskExecutor.setMaxPoolSize(10);
        threadPoolTaskExecutor.setQueueCapacity(25);
        threadPoolTaskExecutor.setKeepAliveSeconds(300);
        threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return threadPoolTaskExecutor;
    }
    @Bean
    public MetatdataStandardExistStrategy metatdataStandardExistStrategy() {
        return new MetatdataStandardExistStrategy();
    }
    @Bean
    public DictitemStandardExistStrategy dictitemStandardExistStrategy() {
        return new DictitemStandardExistStrategy();
    }
}

+ 84 - 4
src/main/java/com/yihu/hos/standard/controller/AdapterDictController.java

@ -1,15 +1,15 @@
package com.yihu.hos.standard.controller;
import com.yihu.hos.standard.match.dictionary.DictItemStrategyExecute;
import com.yihu.hos.standard.service.adapter.AdapterDictService;
import com.yihu.hos.web.framework.model.ActionResult;
import com.yihu.hos.web.framework.model.DetailModelResult;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.controller.BaseController;
import com.yihu.hos.standard.service.adapter.AdapterDictService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -88,5 +88,85 @@ public class AdapterDictController extends BaseController {
            @RequestParam(value = "dict") String dict) {
        return dictService.add(adapterVersion, dict);
    }
    @RequestMapping(value = "/isStrategyDic", method = RequestMethod.POST , produces = "application/json")
    @ResponseBody
    @ApiOperation(value = "是否智能匹配", response = Object.class, produces = "application/json", notes = "是否智能匹配")
    public Result isStrategy(
            @ApiParam(value = "匹配version", required = true) @RequestParam("version") String version
    ) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            actionResult.setData("{\"isAdapt\":\"" + DictItemStrategyExecute.isAdapt(version) + "\"}");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
    /**
     * 智能匹配
     *
     * @param version
     * @return
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping(value = "/strategyDic", method = RequestMethod.POST)
    @ApiOperation(value = "智能匹配", response = Object.class, produces = "application/json", notes = "智能匹配")
    public Result strategyDic(
            @ApiParam(value = "匹配version", required = true) @RequestParam("version") String version,
            @ApiParam(value = "平台标准version", required = true) @RequestParam("std_version") String std_version,
            @ApiParam(value = "适配方案版本号", required = true) @RequestParam("adapter_std_version") String adapter_std_version
    ) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            synchronized (DictItemStrategyExecute.class){
                if (!DictItemStrategyExecute.isAdapt(version)) {
                    //判断之前是否已经有匹配有的话不进行匹配
                    DictItemStrategyExecute.setVersionYes(version);
                }else{
                    return actionResult;
                }
            }
            dictService.strategy(version,adapter_std_version);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
    @RequestMapping(value = "/getStrategyDicSize", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "智能匹配进行", response = Object.class, produces = "application/json", notes = "智能匹配进行")
    public Result getStrategyDicSize(
            @ApiParam(value = "匹配version", required = true) @RequestParam("version") String version
    ) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            actionResult.setData(DictItemStrategyExecute.getAllNumAndAdaptNum(version));
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
    @RequestMapping(value = "/endStrategyDic", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "智能匹配結束", response = Object.class, produces = "application/json", notes = "智能匹配結束")
    public Result endStrategyDic(
            @ApiParam(value = "匹配version", required = true) @RequestParam("version") String version
    ) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            DictItemStrategyExecute.removeAdapt(version);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
}

+ 94 - 8
src/main/java/com/yihu/hos/standard/controller/AdapterMetadataController.java

@ -1,16 +1,17 @@
package com.yihu.hos.standard.controller;
import com.yihu.hos.standard.match.metadata.MetadataStrategyExecute;
import com.yihu.hos.standard.service.adapter.AdapterDatasetService;
import com.yihu.hos.standard.service.adapter.AdapterMetadataService;
import com.yihu.hos.standard.service.bo.AdapterVersion;
import com.yihu.hos.web.framework.model.ActionResult;
import com.yihu.hos.web.framework.model.DetailModelResult;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.controller.BaseController;
import com.yihu.hos.standard.service.adapter.AdapterMetadataService;
import com.yihu.hos.standard.service.bo.AdapterVersion;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -23,6 +24,8 @@ import javax.annotation.Resource;
public class AdapterMetadataController extends BaseController {
    @Resource(name = AdapterMetadataService.BEAN_ID)
    private AdapterMetadataService metadataService;
    @Resource(name = AdapterDatasetService.BEAN_ID)
    private AdapterDatasetService adapterDatasetService;
    /**
     * 查询数据元列表信息(get)
     * @param adapterVersion
@ -46,12 +49,12 @@ public class AdapterMetadataController extends BaseController {
            @RequestParam(value = "rows", required = false) Integer rows,
            @ApiParam(name = "page", value = "Start position of result set. Must be an integer")
            @RequestParam(value = "page", required = false) Integer page)  throws Exception{
       return metadataService.getDetailResult(adapterVersion, condition, order, rows, page);
        return  metadataService.getDetailResult(adapterVersion, condition, order, rows, page);
    }
    @RequestMapping("/getForMetadataId")
    @ApiOperation(value = "获取数据元", response = Result.class, produces = "application/json", notes = "获取数据元")
    public Result get(
     @ApiOperation(value = "获取数据元", response = Result.class, produces = "application/json", notes = "获取数据元")
     public Result get(
            @ApiParam(name = "adapterVersion", value = "标准版本号")
            @RequestParam(value = "adapterVersion") String adapterVersion,
            @ApiParam(name = "metadataId", value = "数据元ID")
@ -103,4 +106,87 @@ public class AdapterMetadataController extends BaseController {
            @RequestParam(value = "adapterDatasetId") Integer adapterDatasetId) {
        return metadataService.deleteMultiple(adapterVersion, metadataId, stdDatasetId, adapterDatasetId);
    }
    @RequestMapping(value = "/isStrategy", method = RequestMethod.POST , produces = "application/json")
    @ResponseBody
    @ApiOperation(value = "是否智能匹配", response = Object.class, produces = "application/json", notes = "是否智能匹配")
    public Result isStrategy(
            @ApiParam(value = "匹配version", required = true) @RequestParam("version") String version
    ) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            actionResult.setData("{\"isAdapt\":\"" + MetadataStrategyExecute.isAdapt(version) + "\"}");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
    /**
     * 智能匹配
     *
     * @param version
     * @return
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping(value = "/strategy", method = RequestMethod.POST)
    @ApiOperation(value = "智能匹配", response = Object.class, produces = "application/json", notes = "智能匹配")
    public Result strategy(
            @ApiParam(value = "匹配version", required = true) @RequestParam("version") String version,
            @ApiParam(value = "平台标准version", required = true) @RequestParam("std_version") String std_version,
            @ApiParam(value = "适配方案版本号", required = true) @RequestParam("adapter_std_version") String adapter_std_version
    ) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            //判断之前是否已经在匹配,有的话不进行匹配
            synchronized (MetadataStrategyExecute.class) {
                if (!MetadataStrategyExecute.isAdapt(version)) {
                    //判断之前是否已经有匹配有的话不进行匹配
                    MetadataStrategyExecute.setVersionYes(version);
                } else {
                    return actionResult;
                }
            }
            adapterDatasetService.strategy(version,adapter_std_version);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
    @RequestMapping(value = "/getStrategySize", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "智能匹配进行", response = Object.class, produces = "application/json", notes = "智能匹配进行")
    public Result getStrategySize(
            @ApiParam(value = "匹配version", required = true) @RequestParam("version") String version
    ) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            actionResult.setData(MetadataStrategyExecute.getAllNumAndAdaptNum(version));
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
    @RequestMapping(value = "/endStrategy", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation(value = "智能匹配結束", response = Object.class, produces = "application/json", notes = "智能匹配結束")
    public Result endStrategy(
            @ApiParam(value = "匹配version", required = true) @RequestParam("version") String version
    ) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            MetadataStrategyExecute.removeAdapt(version);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
}

+ 8 - 0
src/main/java/com/yihu/hos/standard/controller/IntegrationController.java

@ -112,4 +112,12 @@ public class IntegrationController extends BaseController {
        model.addAttribute("dictEntryId", id);
        return "pageView";
    }
    @RequestMapping("importData")
    public String importData(Model model,String version,Integer standardId) {
        model.addAttribute("contentPage", "standard/integration/importData");
        model.addAttribute("version", version);
        model.addAttribute("standardId", standardId);
        return "pageView";
    }
}

+ 85 - 3
src/main/java/com/yihu/hos/standard/controller/StandardVersionController.java

@ -1,5 +1,6 @@
package com.yihu.hos.standard.controller;
import com.yihu.hos.web.framework.model.ActionResult;
import com.yihu.hos.web.framework.model.DictionaryResult;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.controller.BaseController;
@ -7,9 +8,8 @@ import com.yihu.hos.standard.service.standard.StandardVersionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
@ -118,4 +118,86 @@ public class StandardVersionController extends BaseController {
            @RequestParam(value = "page", required = false) Integer page) {
        return standardVersionService.getDetailResultModelList(standardId, condition, order, rows, page);
    }
    /**
     * 根据类型文件上传保存对应的数据
     *
     * @param type
     * @param file
     * @return
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping(value = "/importFile", method = RequestMethod.POST)
    @ApiOperation(value = "根据type导入数据接口", response = Object.class, produces = "application/json", notes = "导入数据接口")
    public Result importFile(@ApiParam(value = "类型(1:数据集 2:字典 3:机构数据 4:机构字典)", required = true) @RequestParam("type") String type,
                             @ApiParam(value = "项目版本", required = true) @RequestParam("version") String version,
                             @ApiParam(value = "项目版本", required = true) @RequestParam("standardId") Integer standardId,
                             @ApiParam(value = "文件", required = true, allowMultiple = true) @RequestParam("file") MultipartFile file) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            String id = "";
            //根據类别判断上传的文件1:数据集 2:字典
            if("1".equals(type)){
                version = standardVersionService.saveDatasetExcel(file, version,standardId);
            }else {
                version = standardVersionService.saveDictExcel(file, version,standardId);
            }
            //解析excel文件 保存
            actionResult.setData("{\"version\":\"" + version + "\"}");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
    @ResponseBody
    @RequestMapping(value = "/isUpdateDatasetAndDict", method = RequestMethod.POST)
    @ApiOperation(value = "项目列表", response = Object.class, produces = "application/json", notes = "项目列表")
    public Result isUpdateDatasetAndDict(
            @RequestParam(required = true) String version) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            actionResult.setData(standardVersionService.isUpdateDatasetAndDict(version));
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
    /**
     * 根据类型和主键删除数据
     *
     * @param type
     * @param id
     * @return
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping(value = "/deleteByType", method = RequestMethod.POST)
    @ApiOperation(value = "文件上传成功后的删除", response = Object.class, produces = "application/json", notes = "文件上传成功后的删除")
    public Result deleteByType(
            @ApiParam(value = "类型(1:数据集 2:字典 )", required = true) @RequestParam("type") String type,
            @ApiParam(value = "主键(上传成功后返回的ID)", required = true) @RequestParam("version") String version) throws Exception {
        ActionResult actionResult = new ActionResult();
        try {
            //根據类别判断上传的文件1:数据集 2:字典 删除数据
            switch (type) {
                case "1": {
                    standardVersionService.deleteDataset(version);
                    break;
                }
                case "2": {
                    standardVersionService.deleteDict(version);
                    break;
                }
            }
        } catch (Exception e) {
            return Result.error(e.getMessage());
        }
        return actionResult;
    }
}

+ 10 - 0
src/main/java/com/yihu/hos/standard/model/adapter/AdapterDictEntryModel.java

@ -35,6 +35,16 @@ public class AdapterDictEntryModel extends Result implements Serializable {
    private String adapterEntryCode;
    @Column(name = "adapter_entry_value")
    private String adapterEntryValue;
    @Column(name = "adapter_info")
    private String adapterInfo;
    public String getAdapterInfo() {
        return adapterInfo;
    }
    public void setAdapterInfo(String adapterInfo) {
        this.adapterInfo = adapterInfo;
    }
    public Integer getId() {
        return id;

+ 10 - 0
src/main/java/com/yihu/hos/standard/model/adapter/AdapterMetadataModel.java

@ -41,6 +41,16 @@ public class AdapterMetadataModel extends Result implements Serializable {
    private Integer adapterDataType;
    @Column(name = "adapter_dict_id")
    private Integer adapterDictId;
    @Column(name = "adapter_info")
    private String adapterInfo;
    public String getAdapterInfo() {
        return adapterInfo;
    }
    public void setAdapterInfo(String adapterInfo) {
        this.adapterInfo = adapterInfo;
    }
    public Integer getId() {
        return id;

+ 9 - 0
src/main/java/com/yihu/hos/standard/model/adapter/resultModel/AdapterDictEntryResultDetailModel.java

@ -16,6 +16,15 @@ public class AdapterDictEntryResultDetailModel {
    private String adapterEntryValue;
    private String adapterDictCode;
    private String adapterDictName;
    private String adapterInfo;
    public String getAdapterInfo() {
        return adapterInfo;
    }
    public void setAdapterInfo(String adapterInfo) {
        this.adapterInfo = adapterInfo;
    }
    public Integer getId() {
        return id;

+ 9 - 0
src/main/java/com/yihu/hos/standard/model/adapter/resultModel/ApiMetadataResultDetailModel.java

@ -19,6 +19,15 @@ public class ApiMetadataResultDetailModel {
    private String adapterDatasetCode;
    private String adapterDatasetName;
    private Integer adapterDictId;
    private String adapterInfo;
    public String getAdapterInfo() {
        return adapterInfo;
    }
    public void setAdapterInfo(String adapterInfo) {
        this.adapterInfo = adapterInfo;
    }
    public Integer getId() {
        return id;

+ 48 - 0
src/main/java/com/yihu/hos/standard/service/adapter/AdapterDatasetService.java

@ -4,9 +4,14 @@ package com.yihu.hos.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.standard.dao.IStdDataSetModelDao;
import com.yihu.hos.standard.dao.IStdMetaDataModelDao;
import com.yihu.hos.standard.match.matchModel.MetadataMatchVO;
import com.yihu.hos.standard.match.metadata.MetadataStrategyExecute;
import com.yihu.hos.standard.model.adapter.AdapterDatasetModel;
import com.yihu.hos.standard.model.adapter.AdapterDictModel;
import com.yihu.hos.standard.model.adapter.AdapterMetadataModel;
import com.yihu.hos.standard.model.adapter.AdapterSchemeVersionModel;
import com.yihu.hos.standard.model.standard.StdDataSetModel;
import com.yihu.hos.standard.model.standard.StdMetaDataModel;
import com.yihu.hos.standard.service.bo.AdapterVersion;
@ -22,6 +27,8 @@ import com.yihu.hos.web.framework.util.sql.BeanTransformer;
import com.yihu.hos.web.framework.util.sql.SqlCreator;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -33,6 +40,21 @@ public class AdapterDatasetService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterDatasetService";
    @Autowired
    private AdapterMetadataService adapterMetadataService;
    @Autowired
    private AdapterSchemeVersionService adapterSchemeVersionService;
    @Autowired
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Autowired
    private IStdMetaDataModelDao stdMetaDataModelDao;
    @Autowired
    private IStdDataSetModelDao stdDataSetModelDao;
    public AdapterDatasetService() {
    }
@ -600,4 +622,30 @@ public class AdapterDatasetService extends SQLGeneralDAO {
        }
    }
    public void strategy(String version,String adapter_std_version) throws Exception {
        List<AdapterMetadataModel> unAdapterMetadataModels =  adapterMetadataService.getAllUnAdaptMetadata(version);//等待适配的标准数据元
        List<AdapterMetadataModel> adapterMetadataModel = new ArrayList<AdapterMetadataModel>();//之前已经适配好的适配方案
        //获取所有未匹配的
        //查找出  之前已经适配好的适配方案
        List<AdapterSchemeVersionModel> all = adapterSchemeVersionService.getAll();
        if(all!=null){
            for(AdapterSchemeVersionModel adapterSchemeVersionModel:all){
                String vers = adapterSchemeVersionModel.getVersion();
                if(org.apache.commons.lang3.StringUtils.isNotBlank(vers)){
                    List<AdapterMetadataModel> adaptMetadata = adapterMetadataService.getAllAdaptMetadata(adapterSchemeVersionModel.getVersion());
                    adapterMetadataModel.addAll(adaptMetadata);
                }
            }
        }
        MetadataMatchVO matchVO = new MetadataMatchVO();
        matchVO.setCodeAdapter(matchVO.geNameGroup(adapterMetadataModel));
        //执行匹配
        MetadataStrategyExecute.setFirst(version, unAdapterMetadataModels.size());//设置第一次匹配
        for (AdapterMetadataModel unAdapterMetadataModel : unAdapterMetadataModels) {
            threadPoolTaskExecutor.execute(new MetadataStrategyExecute(unAdapterMetadataModel, matchVO, adapter_std_version,version, stdMetaDataModelDao,stdDataSetModelDao,adapterMetadataService));
        }
    }
}

+ 35 - 0
src/main/java/com/yihu/hos/standard/service/adapter/AdapterDictEntryService.java

@ -8,6 +8,7 @@ import com.yihu.hos.standard.model.adapter.AdapterDictEntryModel;
import com.yihu.hos.standard.model.adapter.AdapterDictModel;
import com.yihu.hos.standard.model.adapter.AdapterSchemeModel;
import com.yihu.hos.standard.model.adapter.resultModel.AdapterDictEntryResultDetailModel;
import com.yihu.hos.standard.model.standard.StdDictionaryEntryModel;
import com.yihu.hos.standard.model.standard.StdDictionaryModel;
import com.yihu.hos.standard.service.bo.AdapterVersion;
import com.yihu.hos.standard.service.bo.StandardVersion;
@ -16,6 +17,7 @@ import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import com.yihu.hos.web.framework.exception.ApiException;
import com.yihu.hos.web.framework.model.DetailModelResult;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.sql.BeanTransformer;
import com.yihu.hos.web.framework.util.sql.SqlCreator;
import org.hibernate.Query;
import org.hibernate.Session;
@ -191,6 +193,7 @@ public class AdapterDictEntryService extends SQLGeneralDAO {
            detailModel.setStdEntryId(model.getStdEntryId());
            detailModel.setStdEntryCode(model.getStdEntryCode());
            detailModel.setStdEntryValue(model.getStdEntryValue());
            detailModel.setAdapterInfo(model.getAdapterInfo());
            if (stdDictModelMap.get(model.getAdapterDictId()) != null) {
                detailModel.setAdapterDictCode(stdDictModelMap.get(model.getAdapterDictId()).getCode());
                detailModel.setAdapterDictName(stdDictModelMap.get(model.getAdapterDictId()).getName());
@ -242,6 +245,7 @@ public class AdapterDictEntryService extends SQLGeneralDAO {
                adapterDictEntryModel.setStdEntryId(dictEntryModel.getStdEntryId());
                adapterDictEntryModel.setStdEntryCode(dictEntryModel.getStdEntryCode());
                adapterDictEntryModel.setStdEntryValue(dictEntryModel.getStdEntryValue());
                adapterDictEntryModel.setAdapterInfo(dictEntryModel.getAdapterInfo());
                idList.add(dictEntryModel.getStdDictId());
                dictEntryResultMap.put(dictEntryModel.getStdDictId(), dictEntryModel);
                SqlCreator sqlCreator = new SqlCreator(AdapterDictEntryModel.class);
@ -348,5 +352,36 @@ public class AdapterDictEntryService extends SQLGeneralDAO {
            return null;
        }
    }
    public List<AdapterDictEntryModel> getAllUnAdaptDictEntry(String version){
        AdapterVersion adapterVersion = new AdapterVersion(version);
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT m.*").append(" FROM "+adapterVersion.getDictEntryTableName()).append(" m where m.adapter_entry_id is null");
        Query query = getCurrentSession().createSQLQuery(sql.toString());
        query.setResultTransformer(new BeanTransformer(AdapterDictEntryModel.class));
        List<AdapterDictEntryModel> list = query.list();
        return list;
    }
    public List<AdapterDictEntryModel> getAllAdaptDictEntry(String version) {
        AdapterVersion adapterVersion = new AdapterVersion(version);
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT m.*").append(" FROM "+adapterVersion.getDictEntryTableName()).append(" m where m.adapter_entry_id is not null");
        Query query = getCurrentSession().createSQLQuery(sql.toString());
        query.setResultTransformer(new BeanTransformer(AdapterDictEntryModel.class));
        List<AdapterDictEntryModel> list = query.list();
        return list;
    }
    public void saveAdapt(AdapterDictEntryModel adapterDictEntryModel, StdDictionaryEntryModel stdDictionaryEntryModel, String version,String adapterInfo) throws  Exception{
        adapterDictEntryModel.setAdapterDictId(stdDictionaryEntryModel.getDictId());
        adapterDictEntryModel.setAdapterEntryId(stdDictionaryEntryModel.getId());
        adapterDictEntryModel.setAdapterEntryCode(stdDictionaryEntryModel.getCode());
        adapterDictEntryModel.setAdapterEntryValue(stdDictionaryEntryModel.getValue());
        adapterDictEntryModel.setAdapterInfo(adapterInfo);
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterDictEntryModel));
        SqlCreator sqlCreator = new SqlCreator(AdapterDictEntryModel.class);
        String sql = sqlCreator.updateDataByTableKey(new AdapterVersion(version).getDictEntryTableName(), jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
}

+ 46 - 2
src/main/java/com/yihu/hos/standard/service/adapter/AdapterDictService.java

@ -3,7 +3,13 @@ package com.yihu.hos.standard.service.adapter;
import com.fasterxml.jackson.databind.JsonNode;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.standard.dao.IStdDictionaryModelDao;
import com.yihu.hos.standard.dao.StdDictionaryEntryModelDao;
import com.yihu.hos.standard.match.dictionary.DictItemStrategyExecute;
import com.yihu.hos.standard.match.matchModel.DictItemMatchVO;
import com.yihu.hos.standard.model.adapter.AdapterDictEntryModel;
import com.yihu.hos.standard.model.adapter.AdapterDictModel;
import com.yihu.hos.standard.model.adapter.AdapterSchemeVersionModel;
import com.yihu.hos.standard.service.bo.AdapterVersion;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import com.yihu.hos.web.framework.model.DetailModelResult;
@ -11,9 +17,12 @@ import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.util.sql.SqlCreator;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@Transactional
@ -22,6 +31,21 @@ public class AdapterDictService extends SQLGeneralDAO {
    public static final String BEAN_ID = "AdapterDictService";
    @Autowired
    private AdapterDictEntryService adapterDictEntryService;
    @Autowired
    private AdapterSchemeVersionService adapterSchemeVersionService;
    @Autowired
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Autowired
    private IStdDictionaryModelDao stdDictionaryDao;
    @Autowired
    private StdDictionaryEntryModelDao stdDictionaryEntryDao;
    public AdapterDictService() {
    }
@ -144,7 +168,6 @@ public class AdapterDictService extends SQLGeneralDAO {
                query.setFirstResult((offset - 1) * limit);
            }
        }
        return query.list();
    }
@ -170,7 +193,28 @@ public class AdapterDictService extends SQLGeneralDAO {
        Integer count = Integer.parseInt(StringUtil.toString(query.list().get(0)));
        return count;
    }
    public void strategy(String version, String adapter_std_version) {
        List<AdapterDictEntryModel> unAdapterDictEntryModels= adapterDictEntryService.getAllUnAdaptDictEntry(version);//等待适配的标准字典项
        List<AdapterDictEntryModel> adapterDictEntryModels = new ArrayList<AdapterDictEntryModel>();//之前已经适配好的适配方案
        //查找出  之前已经适配好的适配方案
        List<AdapterSchemeVersionModel> all = adapterSchemeVersionService.getAll();//
        if(all!=null){
            for(AdapterSchemeVersionModel adapterSchemeVersionModel:all){
                String vers = adapterSchemeVersionModel.getVersion();
                if(org.apache.commons.lang3.StringUtils.isNotBlank(vers)){
                    List<AdapterDictEntryModel> adaptMetadata = adapterDictEntryService.getAllAdaptDictEntry(adapterSchemeVersionModel.getVersion());
                    adapterDictEntryModels.addAll(adaptMetadata);
                }
            }
        }
        DictItemMatchVO matchVO= new DictItemMatchVO();
        matchVO.setCodeAdapter(matchVO.geNameGroup(adapterDictEntryModels));
        //执行匹配
        DictItemStrategyExecute.setFirst(version, unAdapterDictEntryModels.size());//设置第一次匹配
        for (AdapterDictEntryModel unAdapterDictEntryModel : unAdapterDictEntryModels) {
            threadPoolTaskExecutor.execute(new DictItemStrategyExecute(unAdapterDictEntryModel, matchVO,adapter_std_version,version, stdDictionaryDao, stdDictionaryEntryDao,adapterDictEntryService));
        }
    }
}

+ 35 - 0
src/main/java/com/yihu/hos/standard/service/adapter/AdapterMetadataService.java

@ -204,6 +204,7 @@ public class AdapterMetadataService extends SQLGeneralDAO {
            detailModel.setStdMetadataId(model.getStdMetadataId());
            detailModel.setStdMetadataCode(model.getStdMetadataCode());
            detailModel.setStdMetadataName(model.getStdMetadataName());
            detailModel.setAdapterInfo(model.getAdapterInfo());
            if (stdDatasetModelMap.get(model.getAdapterDatasetId()) != null) {
                detailModel.setAdapterDatasetCode(stdDatasetModelMap.get(model.getAdapterDatasetId()).getCode());
                detailModel.setAdapterDatasetName(stdDatasetModelMap.get(model.getAdapterDatasetId()).getName());
@ -313,6 +314,7 @@ public class AdapterMetadataService extends SQLGeneralDAO {
                adapterMetadataModel.setStdDatasetId(metadataModel.getStdDatasetId());
                adapterMetadataModel.setStdMetadataCode(metadataModel.getStdMetadataCode());
                adapterMetadataModel.setStdMetadataName(metadataModel.getStdMetadataName());
                adapterMetadataModel.setAdapterInfo(metadataModel.getAdapterInfo());
                idList.add(metadataModel.getStdDatasetId());
                metadataResultMap.put(metadataModel.getStdDatasetId(), metadataModel);
                JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(adapterMetadataModel));
@ -440,4 +442,37 @@ public class AdapterMetadataService extends SQLGeneralDAO {
            return null;
        }
    }
    public List<AdapterMetadataModel> getAllAdaptMetadata(String adapter_version){
        AdapterVersion adapterVersion = new AdapterVersion(adapter_version);
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT m.*").append(" FROM "+adapterVersion.getMetaDataTableName()).append(" m where m.adapter_metadata_id is not null");
        Query query = getCurrentSession().createSQLQuery(sql.toString());
        query.setResultTransformer(new BeanTransformer(AdapterMetadataModel.class));
        List<AdapterMetadataModel> list = query.list();
        return list;
    }
    public List<AdapterMetadataModel> getAllUnAdaptMetadata(String version){
        AdapterVersion adapterVersion = new AdapterVersion(version);
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT m.*").append(" FROM "+adapterVersion.getMetaDataTableName()).append(" m where m.adapter_metadata_id is null");
        Query query = getCurrentSession().createSQLQuery(sql.toString());
        query.setResultTransformer(new BeanTransformer(AdapterMetadataModel.class));
        List<AdapterMetadataModel> list = query.list();
        return list;
    }
    public void saveAdapt(AdapterMetadataModel strategyMetadata,StdMetaDataModel orgMetadata,String version,String adapterInfo) throws Exception {
        strategyMetadata.setAdapterDatasetId(orgMetadata.getDatasetId());
        strategyMetadata.setAdapterMetadataId(orgMetadata.getId());
        strategyMetadata.setAdapterMetadataCode(orgMetadata.getCode());
        strategyMetadata.setAdapterMetadataName(orgMetadata.getName());
        strategyMetadata.setAdapterInfo(adapterInfo);
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(strategyMetadata));
        SqlCreator sqlCreator = new SqlCreator(AdapterMetadataModel.class);
        String sql = sqlCreator.updateDataByTableKey(new AdapterVersion(version).getMetaDataTableName(), jsonNode);
        Query query = getExeuteQuery(sqlCreator, sql);
        query.executeUpdate();
    }
}

+ 8 - 2
src/main/java/com/yihu/hos/standard/service/adapter/AdapterSchemeVersionService.java

@ -504,5 +504,11 @@ public class AdapterSchemeVersionService extends SQLGeneralDAO {
        sql.append(SqlConstants.RIGHT_BRACKET);
        return sql.toString();
    }
}
    public List<AdapterSchemeVersionModel> getAll(){
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT v.*").append(" FROM adapter_scheme_version v ");
        Query query = getCurrentSession().createSQLQuery(sql.toString()).addEntity(AdapterSchemeVersionModel.class);
        List<AdapterSchemeVersionModel> list = query.list();
        return list;
    }
}

+ 152 - 1
src/main/java/com/yihu/hos/standard/service/standard/StandardVersionService.java

@ -1,6 +1,8 @@
package com.yihu.hos.standard.service.standard;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.standard.model.standard.*;
import com.yihu.hos.standard.util.ExcelUtilBigData;
import com.yihu.hos.web.framework.dao.SQLGeneralDAO;
import com.yihu.hos.web.framework.constant.ErrorCode;
import com.yihu.hos.web.framework.constant.SqlConstants;
@ -12,17 +14,19 @@ import com.yihu.hos.core.datatype.CollectionUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.web.framework.util.sql.RequestParamTransformer;
import com.yihu.hos.standard.model.adapter.AdapterSchemeModel;
import com.yihu.hos.standard.model.standard.StandardVersionModel;
import com.yihu.hos.standard.service.bo.StandardVersion;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.*;
@ -38,6 +42,18 @@ public class StandardVersionService extends SQLGeneralDAO {
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private StdDatasetService stdDatasetService;
    @Autowired
    private StdMetadataService stdMetadataService;
    @Autowired
    private StdDictService stdDictService;
    @Autowired
    private StdDictEntryService stdDictEntryService;
    public DictionaryResult getDictionaryResult(Integer standardId, String condition, String order, Integer rows, Integer page) {
        try {
            DictionaryResult dictionaryResult = DictionaryResult.success("获取标准版本成功");
@ -397,4 +413,139 @@ public class StandardVersionService extends SQLGeneralDAO {
        insertBatch(insertSql);
        insertBatch(updateSql);
    }
    @Transactional
    public String saveDatasetExcel(MultipartFile file, String version,Integer standardId) throws Exception {
        List<List<String[]>> list = ExcelUtilBigData.readerExcel(file.getInputStream(), 13, 0);//String[] 存放一行,List<String[]> 代表一个excel表格
        for (int i = 0; i < list.size(); i++) {
            List<String[]> l = list.get(i);
            //遍历sheet
            //新增数据集
            StandardVersion standardVersion = new StandardVersion(version);
            StdDataSetModel stdeDataset = new StdDataSetModel();
            stdeDataset.setName(getNotNull(l.get(0)[1]));
            stdeDataset.setCode(getNotNull(l.get(1)[1]));
            stdeDataset.setSummary(getNotNull(l.get(3)[1]));
            stdeDataset.setLanguage(getNotNull(l.get(4)[1]));
            stdeDataset.setClassModel(getNotNull(l.get(5)[1]));
            stdeDataset.setstandardId(standardId);
            if(org.apache.commons.lang3.StringUtils.isNotBlank(getNotNull(l.get(2)[1]))){
                stdeDataset.setCatalog(Integer.valueOf(getNotNull(l.get(2)[1])));
            }
            stdDatasetService.add(standardVersion.getDataSetTableName(), stdeDataset);
            for (int row = 7; row < l.size(); row++) {
                //保存数据元
                StdMetaDataModel stdeMetadata = new StdMetaDataModel();
                stdeMetadata.setDatasetId(stdeDataset.getId());//肯定要设置
                stdeMetadata.setStandardId(standardId);
                stdeMetadata.setDeCode(getNotNull(l.get(row)[1]));
                stdeMetadata.setCode(getNotNull(l.get(row)[2]));
                stdeMetadata.setName(getNotNull(l.get(row)[3]));
                stdeMetadata.setDefinition(getNotNull(l.get(row)[4]));
                stdeMetadata.setType(getNotNull(l.get(row)[5]));
                stdeMetadata.setFormat(getNotNull(l.get(row)[6]));
                String dicId = getNotNull(l.get(row)[7]);
                if(org.apache.commons.lang3.StringUtils.isNotBlank(dicId)){
                    stdeMetadata.setDictId(Integer.valueOf(dicId));
                }
                stdeMetadata.setColumnName(getNotNull(l.get(row)[8]));
                stdeMetadata.setColumnType(getNotNull(l.get(row)[9]));
                stdeMetadata.setColumnLength(getNotNull(l.get(row)[10]));
                String isPrimaryKey = getNotNull(l.get(row)[11]);
                if(org.apache.commons.lang3.StringUtils.isNotBlank(isPrimaryKey)){
                    stdeMetadata.setPrimaryKey(Integer.valueOf(isPrimaryKey));
                }
                String isNullable = getNotNull(l.get(row)[12]);
                if(org.apache.commons.lang3.StringUtils.isNotBlank(isNullable)){
                    stdeMetadata.setNullable(Integer.valueOf(isNullable));
                }
                if(org.apache.commons.lang3.StringUtils.isBlank(stdeMetadata.getCode())){
                    continue;
                }
                stdMetadataService.add(standardVersion, stdeMetadata);
            }
        }
        return version;
    }
    @Transactional
    public String saveDictExcel(MultipartFile file, String version,Integer standardId) throws Exception {
        List<List<String[]>> list = ExcelUtilBigData.readerExcel(file.getInputStream(), 5, 3);
        StandardVersion standardVersion = new StandardVersion(version);
        for (int i = 0; i < list.size(); i++) {
            List<String[]> l = list.get(i);
            //遍历sheet
            StdDictionaryModel stdeDict = new StdDictionaryModel();
            stdeDict.setstandardId(standardId);
            stdeDict.setCode(getNotNull(l.get(0)[1]));
            stdeDict.setName(getNotNull(l.get(1)[1]));
            stdeDict.setDefine(getNotNull(l.get(2)[1]));
            stdeDict.setDescription(getNotNull(l.get(3)[1]));
            String parentId = getNotNull(l.get(4)[1]);
            if(!StringUtils.isEmpty(parentId)){
                stdeDict.setParentId(Integer.valueOf(parentId));
            }
            stdDictService.add(standardVersion,stdeDict);
            for (int row = 0; row < l.size(); row++) {
                if (StringUtils.isEmpty(l.get(row)[4])) {
                    continue;
                }
                StdDictionaryEntryModel stdeDictItem = new StdDictionaryEntryModel();
                stdeDictItem.setstandardId(standardId);
                stdeDictItem.setDictId(stdeDict.getId());
                stdeDictItem.setValue(getNotNull(l.get(row)[4]));
                stdeDictItem.setCode(getNotNull(l.get(row)[3]));
                System.out.println("第"+(i+1)+"个表格;第"+(row+1)+"行数据");
                stdDictEntryService.add(standardVersion,stdeDictItem);
            }
        }
        return version;
    }
    private String getNotNull(Object obj) {
        if (!StringUtils.isEmpty(obj)) {
            return obj.toString().replace("\"", "");
        }
        return "";
    }
    public String isUpdateDatasetAndDict(String version) {
        JSONObject jo=new JSONObject();
        List<StdDataSetModel> stdDataSetModels = stdDatasetService.getList(version, null, null, null, null);
        if(stdDataSetModels!=null&&stdDataSetModels.size()>0){
            jo.put("datasetUpdate","true");
        }else{
            jo.put("datasetUpdate","false");
        }
        List<StdDictionaryModel> stdDictionaryModels = stdDictService.getList(version, null, null, null, null);
        if(stdDictionaryModels!=null&&stdDictionaryModels.size()>0){
            jo.put("dictUpdate","true");
        }else{
            jo.put("dictUpdate","false");
        }
        return jo.toString();
    }
    @Transactional
    public void deleteDataset(String version) throws Exception {
        Session session = getCurrentSession();
        //删除数据集
        String sql1 = "truncate table std_dataset_" + version;
        session.createSQLQuery(sql1).executeUpdate();
        //删除数据元
        String sql = "truncate table std_metadata_" + version;
        session.createSQLQuery(sql).executeUpdate();
    }
    public void deleteDict(String version) {
        Session session = getCurrentSession();
        //删除字典
        String sql1 = "truncate table std_dictionary_" + version;
        session.createSQLQuery(sql1).executeUpdate();
        //删除字典项
        String sql = "truncate table std_dictionary_entry_" + version;
        session.createSQLQuery(sql).executeUpdate();
    }
}

+ 1 - 1
src/main/java/com/yihu/hos/standard/service/standard/StdDatasetService.java

@ -209,7 +209,7 @@ public class StdDatasetService extends SQLGeneralDAO {
        query.executeUpdate();
    }
    private void add(String dataSetTable, StdDataSetModel stdDataSetModel) throws IOException {
    public void add(String dataSetTable, StdDataSetModel stdDataSetModel) throws IOException {
        stdDataSetModel.setId(getMaxId(dataSetTable));
        JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(stdDataSetModel));

+ 1 - 1
src/main/java/com/yihu/hos/standard/service/standard/StdDictService.java

@ -220,7 +220,7 @@ public class StdDictService extends SQLGeneralDAO {
        query.executeUpdate();
    }
    private void add(StandardVersion standardVersion, StdDictionaryModel stdDictionaryModel) throws IOException {
    public void add(StandardVersion standardVersion, StdDictionaryModel stdDictionaryModel) throws IOException {
        Session session = getCurrentSession();
        String strTableName = standardVersion.getDictTableName();
        String sql = null;

+ 1 - 1
src/main/java/com/yihu/hos/standard/service/standard/StdMetadataService.java

@ -183,7 +183,7 @@ public class StdMetadataService extends SQLGeneralDAO {
        query.executeUpdate();
    }
    private void add(StandardVersion standardVersion, StdMetaDataModel stdMetaDataModel) throws IOException {
    public void add(StandardVersion standardVersion, StdMetaDataModel stdMetaDataModel) throws IOException {
        Session session = getCurrentSession();
        String metaDataTableName = standardVersion.getMetaDataTableName();

+ 10 - 0
src/main/webapp/WEB-INF/ehr/jsp/standard/adapterplan/configuration.jsp

@ -65,6 +65,9 @@
  .back{
    border-right: 1px solid #d3d3d3;
  }
  .unadapt .l-grid-row-cell {background-color:#F5F5F5}
  .ysadapt .l-grid-row-cell {background-color:#1eaaff}
  .alladapt .l-grid-row-cell {background-color: #da4312;}
  .js-example-data-array{width: 90% !important;height:30px;margin-top:5px;}
</style>
@ -76,6 +79,7 @@
  <input id="scheme_id" value='${schemeId}' hidden="none" />
  <input id="std_dict_id" hidden="none" />
  <input id="publish_status" value='${status}' hidden="none" />
  <input id ="isDataSet" value="1" hidden="none"/>
  <div position="top" style="margin-top: 10px;">
    <div id="btn_back" class="l-button u-btn u-btn-primary u-btn-small"  onclick="javascript: indexPage.openChildPage('','${contextRoot}' + '/adapterPlan/initial?treePid=5&treeId=23');">
@ -84,6 +88,9 @@
    <div id="title" style="text-align:center;font-size: 18px;margin-right:100px;font-weight: bold;">
      ${name}
    </div>
    <div style="text-align: right;">
      <img src="${contextRoot}/develop/images/adapt.png" class="fr" />
    </div>
  </div>
  <br/>
  <div class="btn-group  f-tac " data-toggle="buttons" style="text-align: center;height: 50px;">
@ -128,6 +135,9 @@
            <div id="btn_add_relation" class="l-button l-button-green" style="display: none;">
              <span>新增</span>
            </div>
            <div class="l-button div-btn" id="btn_aoto_adpat">
              <span>自动适配</span>
            </div>
            <div id="btn_save_relation" class="l-button div-btn">
              <span>保存</span>
            </div>

+ 308 - 9
src/main/webapp/WEB-INF/ehr/jsp/standard/adapterplan/configurationJs.jsp

@ -44,8 +44,13 @@
        
      }
      function reloadGrid (url, params, columns) {
      function reClass(){
        $(".l-grid-row-alt").each(function(){
          $(this).removeChild("l-grid-row-alt");
        })
      }
      function reloadGrid (url, params, columns) {
        if(columns)
          this.grid.set({
            columns:columns,
@ -89,6 +94,7 @@
              return;
            cfgModel = 0;
            $("#btn_add_relation").hide();
            $("#isDataSet").val("1");//该input框为1时,代表此时显示字典
            retrieve.setTitle();
            entryRetrieve.setTitle();
            changeFlag=true;
@ -104,6 +110,7 @@
              return;
            cfgModel = 1;
            $("#btn_add_relation").show();
            $("#isDataSet").val("0");//该input框为0时,代表此时显示数据集
            retrieve.setTitle();
            entryRetrieve.setTitle();
            changeFlag=true;
@ -282,6 +289,132 @@
            onDblClickRow : function (row){
              //$.publish('grid:right:open',[row.id, 'modify']);
            },
            rowClsRender:function (rowdata,rowid){
              if(rowdata.adapterInfo=="0"){//疑似适配
                return "unadapt";
              }
              if(rowdata.adapterInfo=="1"){//疑似适配
                return "ysadapt";
              }
              if(rowdata.adapterInfo=="2"){//完全适配
                return "alladapt";
              }
            },
            _getHtmlFromData: function (data, frozen)
            {
              if (!data) return "";
              var g = this, p = this.options;
              var gridhtmlarr = [];
              for (var i = 0, l = data.length; i < l; i++)
              {
                var item = data[i];
                var rowid = item['__id'];
                if (!item) continue;
                gridhtmlarr.push('<tr');
                gridhtmlarr.push(' id="' + g._getRowDomId(item, frozen) + '"');
                gridhtmlarr.push(' class="l-grid-row'); //class start
                if (!frozen && g.enabledCheckbox() && p.isChecked && p.isChecked(item))
                {
                  g.select(item);
                  gridhtmlarr.push(' l-selected');
                }
                else if (g.isSelected(item))
                {
                  gridhtmlarr.push(' l-selected');
                }
                else if (p.isSelected && p.isSelected(item))
                {
                  g.select(item);
                  gridhtmlarr.push(' l-selected');
                }
                if (p.rowClsRender)
                {
                  var rowcls = p.rowClsRender(item, rowid);
                  rowcls && gridhtmlarr.push(' ' + rowcls);
                }
                gridhtmlarr.push('" ');  //class end
                if (p.rowAttrRender) gridhtmlarr.push(p.rowAttrRender(item, rowid));
                if (p.tree && g.collapsedRows && g.collapsedRows.length)
                {
                  var isHide = function ()
                  {
                    var pitem = g.getParent(item);
                    while (pitem)
                    {
                      if ($.inArray(pitem, g.collapsedRows) != -1) return true;
                      pitem = g.getParent(pitem);
                    }
                    return false;
                  };
                  if (isHide()) gridhtmlarr.push(' style="display:none;" ');
                }
                gridhtmlarr.push('>');
                $(g.columns).each(function (columnindex, column)
                {
                  if (frozen != column.frozen) return;
                  gridhtmlarr.push('<td');
                  gridhtmlarr.push(' id="' + g._getCellDomId(item, this) + '"');
                  //如果是行序号(系统列)
                  if (this.isrownumber)
                  {
                    gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-rownumbers" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
                    if (p.fixedCellHeight)
                      gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
                    else
                      gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
                    gridhtmlarr.push('>' + (parseInt(item['__index']) + 1) + '</div></td>');
                    return;
                  }
                  //如果是复选框(系统列)
                  if (this.ischeckbox)
                  {
                    gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-checkbox" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
                    if (p.fixedCellHeight)
                      gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
                    else
                      gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
                    gridhtmlarr.push('>');
                    gridhtmlarr.push('<span class="l-grid-row-cell-btn-checkbox"></span>');
                    gridhtmlarr.push('</div></td>');
                    return;
                  }
                  //如果是明细列(系统列)
                  else if (this.isdetail)
                  {
                    gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-detail" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
                    if (p.fixedCellHeight)
                      gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
                    else
                      gridhtmlarr.push(' style = "min-height:' + p.rowHeight + 'px;" ');
                    gridhtmlarr.push('>');
                    if (!p.isShowDetailToggle || p.isShowDetailToggle(item))
                    {
                      gridhtmlarr.push('<span class="l-grid-row-cell-detailbtn"></span>');
                    }
                    gridhtmlarr.push('</div></td>');
                    return;
                  }
                  var colwidth = this._width;
                  gridhtmlarr.push(' class="l-grid-row-cell ');
                  if (g.changedCells[rowid + "_" + this['__id']]) gridhtmlarr.push("l-grid-row-cell-edited ");
                  if (this.islast)
                    gridhtmlarr.push('l-grid-row-cell-last ');
                  gridhtmlarr.push('"');
                  //if (this.columnname) gridhtmlarr.push('columnname="' + this.columnname + '"');
                  gridhtmlarr.push(' style = "');
                  gridhtmlarr.push('width:' + colwidth + 'px; ');
                  if (column._hide)
                  {
                    gridhtmlarr.push('display:none;');
                  }
                  gridhtmlarr.push(' ">');
                  gridhtmlarr.push(g._getCellHtml(item, column));
                  gridhtmlarr.push('</td>');
                });
                gridhtmlarr.push('</tr>');
              }
              return gridhtmlarr.join('');
            },
            onAfterShowData: function () {//显示完数据事件
              //【应用数据元编码】初始化注册select2(下拉框带查询)事件
              $(".sel-adapter-metadata-code").each(function(){
@ -326,7 +459,6 @@
              //【应用数据集编码】change事件
              $(".sel-adapter-dataset-code").on("change", function(event,msg) {
                
                var index = $(this).attr("id").replace("adapterDatasetCode","");
                var select2 =  comAdapterDataset($(this),"change","adapterDatasetCode","adapterDatasetName");
                comAdapterMetaData($("#adapterMetadataCode"+index),"change","adapterMetadataCode","adapterMetadataName");
@ -382,6 +514,7 @@
              });
              //【应用数据元名称】change事件
              $(".sel-adapter-metadata-name").on("change", function(event,msg) {
                var index = $(this).attr("id").replace("adapterMetadataName","");
                var select2 = comAdapterMetaData($(this),"change","adapterMetadataName","adapterMetadataCode");
                if(msg!="adapterMetadataName"){//当【应用数据元名称】联动时,【应用数据元编码】不触发联动
@ -389,6 +522,12 @@
                }
                select2.select2("open");
                select2.select2("close");
                var selectValue = $("#adapterMetadataName"+index).val();
                if(selectValue!=null&&selectValue!=''&&selectValue!=undefined){
                  $("#adapterInfo"+index).html("<option value='1' >疑似适配</option><option value='2' >完全适配</option>")
                }else{
                  $("#adapterInfo"+index).html("<option value='0' >未适配</option>");
                }
              });
              //---------------------------------------------------------------------
              //【平台字典项编码】change事件
@ -473,6 +612,13 @@
                }
                select2.select2("open");
                select2.select2("close");
                debugger
                var selectValue = select2.val();
                if(selectValue!=null&&selectValue!=''&&selectValue!=undefined){
                  $("#adapterInfo"+index).html("<option value='1' >疑似适配</option><option value='2' >完全适配</option>")
                }else{
                  $("#adapterInfo"+index).html("<option value='0' >未适配</option>");
                }
              });
            }
          });
@ -558,6 +704,7 @@
        delete:function(rowindex,flag){
          $.ligerDialog.confirm('确定清空该适配关系?', function (r) {
            if (r) {
              $("#adapterInfo"+rowindex).html("<option value='0'>未适配</option>");
              if(flag == "dataset"){//数据集
                $("#adapterDatasetCode"+rowindex).html("");
                $("#adapterDatasetName"+rowindex).html("");
@ -607,7 +754,6 @@
          if (cfgModel == 0) {
            var dataResult = new Array();
            var rowData = entryMaster.grid.getData();
            debugger
            for (var i = 0; i < rowData.length; i++) {
              var ob = new Object();
              ob.id = rowData[i].id == undefined ? "" : rowData[i].id;
@ -626,6 +772,7 @@
                ob.adapterDatasetId = "";
                ob.adapterDatasetName = "";
              }
              ob.adapterInfo  = $("#adapterInfo"+i).val();
              ob.adapterDatasetCode = $("#adapterDatasetCode"+i).text() == undefined ? "" : $("#adapterDatasetCode"+i).text();
              var adapterMetadataCodeArr = $("#adapterMetadataCode"+i).val()==undefined ? "":$("#adapterMetadataCode"+i).val().split(",");
              if(adapterMetadataCodeArr.length>0){
@ -643,7 +790,6 @@
              ob.adapterMetadataCode = $("#adapterMetadataCode"+i).text() == undefined ? "" : $("#adapterMetadataCode"+i).text();
              dataResult.push(ob)
            }
            //保存数据
            $.ajax({
              type : "POST",
@ -652,7 +798,6 @@
              dataType : "json",
              async:false,
              success :function(data){
                
                if(data.successFlg){
                  entryMaster.reloadGrid(); //重新查询,返回json记录集
                  $.ligerDialog.success(data.message);
@ -685,6 +830,7 @@
                ob.stdEntryValue = stdEntryCodeArr[1];
              }
              ob.stdEntryCode = $("#stdEntryCode"+i).text() == undefined ? "" : $("#stdEntryCode"+i).text();
              ob.adapterInfo  = $("#adapterInfo"+i).val();
              var adapterDictCodeArr = $("#adapterDictCode"+i).val()==undefined ? "":$("#adapterDictCode"+i).val().split(",");
              if(adapterDictCodeArr.length>0){
                ob.adapterDictId = adapterDictCodeArr[0];
@ -735,6 +881,131 @@
            });
          }
        },
        isAdaptationIng:function(){
          var version = $("#version").val();
          var self=this;//为了获取项目id
          var url="";//AdapterDatasetController
          var obj="";//为了获取进度条
          var isDataSet = $("#isDataSet").val();
          if(isDataSet=="0"){//字典
            obj=self.$zidianZdsp
            url="${contextRoot}/adapterCenter/isStrategyDic"
          }else{//数据集
            obj=self.$shujujiZdsp
            url="${contextRoot}/adapterCenter/isStrategy"
          }
          var isCanPlay= setInterval(function(){//判断 是否可以开始匹配了
            $.ajax({
              type:"POST",
              dataType:"",
              url:url,
              data:{version:version},
              success:function(res){
                var isPPing=JSON.parse(res.data).isAdapt//是否正在匹配
                if(isPPing=="false"){//如果不是正在匹配
                  self.pipeiDo();//开始匹配
                }else{//如果正在匹配
                  self.autoAdaptation(obj);//显示进度
                  clearInterval(isCanPlay)
                }
              }
            })
          },3000)
        },
        pipeiDo:function(){
          var std_version = $("#std_version").val();
          var version = $("#version").val();
          var adapter_std_version = $("#adapter_std_version").val();
          var parmas = {std_version:std_version,version:version,adapter_std_version:adapter_std_version};
          var self=this;
          var obj;//当前属于字典还是数据集对象,赋值匹配中
          var btnObj//自动匹配的按钮
          var url//链接
          var isDataSet = $("#isDataSet").val();
          if(isDataSet=="0"){//字典
            obj=$("#zidian .boxleft");
            url="${contextRoot}/adapterCenter/strategyDic"
          }else{//数据集
            obj=$("#shujuji .boxleft");
            url="${contextRoot}/adapterCenter/strategy"
          }
          $("#btn_aoto_adpat span").html("匹配中...");
          $.ajax({
            type:"POST",
            dataType:"json",
            url:url,
            data:parmas,
            success:function(data){
              $("#btn_aoto_adpat span").html("自动适配");
            },
            error:function(){
            }
          })
        },//开始匹配
        autoAdaptation:function(){
          var self=this;
          var url=""//进度
          var isDataSet = $("#isDataSet").val();
          var version = $("#version").val();
          if(isDataSet=="0"){//字典
            url="${contextRoot}/adapterCenter/getStrategyDicSize"
          }else{//数据集
            url="${contextRoot}/adapterCenter/getStrategySize"
          }
          var timeIng =setInterval(function(){
            var ver =
            $.ajax({
              type:"POST",
              dataType:"json",
              url:url,
              data:{version:version},
              success:function(res){
                if(res.data==undefined){
                  $("#btn_aoto_adpat span").html("请求中");
                }else{
                  if(res.data.all==0){//如果判断被除数不能为0  如果为0 直接清空
                    $("#btn_aoto_adpat span").html("匹配完成");
                    clearInterval(timeIng);
                    self.ppeiEnd()//结束匹配
                  }else{
                    var jdu=  res.data.adapt/res.data.all//进度
                    if(jdu!=1){
                      var jduBFB=parseInt(jdu*100)+"%"
                      $("#btn_aoto_adpat span").html("已匹配"+jduBFB)
                    }else{
                      $("#btn_aoto_adpat span").html("匹配完成");
                      master.reloadGrid();
                      clearInterval(timeIng);
                      self.ppeiEnd()//结束匹配
                    }
                  }
                }
              }
            })
          },3000)
        },//自动匹配进度
        ppeiEnd:function(){
          var self=this;
          var url="";
          var isDataSet = $("#isDataSet").val()
          if(isDataSet=="0"){//字典
            url="${contextRoot}/adapterCenter/endStrategyDic"
          }else{//数据集
            url="${contextRoot}/adapterCenter/endStrategy"
          }
          $.ajax({
            type:"POST",
            dataType:"json",
            url:url,
            data:{version:$("#version").val()},
            success:function(res){
            }
          })
        },//结束匹配
        uniqueArray:function(a){ /* 判断适配方案id、平台字典id、平台字典项id、应用字典项id是否重复*/
          var temp = new Array();
          for(var i = 0; i < a.length; i ++){
@ -764,6 +1035,10 @@
            entryMaster.save();
          });
          $('#btn_aoto_adpat').click(function () {
            entryMaster.isAdaptationIng();
          });
          $("#searchNmEntry").keyup(function (e) {
            if (e.keyCode == 13) {
              entryMaster.reloadGrid();
@ -875,7 +1150,19 @@
                  $('option[value="'+value+'"]',select).attr('selected',true);
                  return  select.prop("outerHTML");
                }
              }}
              }},{
                display:'适配情况',name:'adapterInfo',width:'5%',render: function (row, rowindex, value, column) {
                  var select=null;
                  if(row.adapterDatasetId==undefined || row.adapterDatasetCode==undefined || row.adapterDatasetName==undefined){
                    select= $('<div class="f-mt25"><select class="js-example-data-array" id="adapterInfo'+rowindex+'" ><option value="0">未适配</option></select></div>');
                  }else{
                    select= $('<div class="f-mt25"><select class="js-example-data-array" id="adapterInfo'+rowindex+'">'
                            +'<option value="1" >疑似适配</option><option value="2">完全适配</option></select></div>');
                  }
                  $('option[value="'+value+'"]',select).attr('selected',true);
                  return  select.prop("outerHTML");
                }
              }
            ]
            if(status =="0"){//未发布
@ -983,7 +1270,19 @@
                      $('option[value="'+value+'"]',select).attr('selected',true);
                      return  select.prop("outerHTML");
                    }
              }}
              }},{
                display:'适配情况',name:'adapterInfo',width:'5%',render: function (row, rowindex, value, column) {
                  var select=null;
                  if(row.adapterEntryId==undefined || row.adapterEntryCode==undefined || row.adapterEntryValue==undefined){
                    select= $('<div class="f-mt25"><select class="js-example-data-array" id="adapterInfo'+rowindex+'" ><option value="0">未适配</option></select></div>');
                  }else{
                    select= $('<div class="f-mt25"><select class="js-example-data-array" id="adapterInfo'+rowindex+'">'
                            +'<option value="1" >疑似适配</option><option value="2">完全适配</option></select></div>');
                  }
                  $('option[value="'+value+'"]',select).attr('selected',true);
                  return  select.prop("outerHTML");
                }
              }
            ]
            if(status =="0") {//未发布
@ -1000,7 +1299,6 @@
      //应用数据集编码-应用数据集名称联动公共方法
      function comAdapterDataset(that,requestType,targer,changeTarget){
        
        var index =that.attr("id").replace(targer,"");
        var adapterStdVersion = $("#adapter_std_version").val();
        var arr = that.val()==null?[]:that.val().split(",");
@ -1057,7 +1355,6 @@
      //应用字典编码-应用字典名称联动公共方法
      function comAdapterDict(that,requestType,targer,changeTarget){
        
        var index =that.attr("id").replace(targer,"");
        var adapterStdVersion = $("#adapter_std_version").val();
        var arr = that.val()==null?[]:that.val().split(",");
@ -1230,4 +1527,6 @@
      $(function () {
      pageInit();
    });
</script>

+ 4 - 0
src/main/webapp/WEB-INF/ehr/jsp/standard/integration/configuration.jsp

@ -79,6 +79,10 @@
    <div id="btn_back" class="l-button u-btn u-btn-primary u-btn-small"  onclick="javascript: indexPage.openChildPage('','${contextRoot}'+ '${backUrl}');">
      <span>< 返回</span>
    </div>
    <div id="importData" class="l-button u-btn u-btn-primary u-btn-small" >
      <span>导入数据</span>
    </div>
    <div id="title" style="text-align:center;font-size: 18px;margin-right:100px;font-weight: bold;">
      ${name}
    </div>

+ 17 - 3
src/main/webapp/WEB-INF/ehr/jsp/standard/integration/configurationJs.jsp

@ -4,6 +4,7 @@
<script src="${contextRoot}/develop/lib/select2/select2.js"></script>
<script >
      /* ************************** 全局变量定义 **************************** */
      $importData=$("#importData");
      var status = $("#publish_status").val();
      var Util = $.Util;
      var retrieve = null;
@ -47,6 +48,22 @@
        $('#div_datasource').hide();
      }
      $importData.bind("click",function(){
        var version =$("#version").val();
        var standardId = $("#standard_id").val();
        var url = "${contextRoot}/integration/importData?version="+version+"&standardId="+standardId;;
        var importDataDialog = $.ligerDialog.open({
          title: "导入数据",
          url: url,
          height: 250,
          width: 650,
          cls:"closeCls"
        });
        $(document).on("click",".closeCls",function(){
          master.reloadGrid();
        });
      });
      function reloadGrid (url, params, columns) {
        if(columns)
          this.grid.set({
@ -192,9 +209,7 @@
            validate : true,
            unSetValidateAttr:false,
            onSuccess: function (data,grid) {
              debugger
              if(data.detailModelList.length==0){
                debugger
                entryMaster.reloadGrid('');
              }
            },
@ -225,7 +240,6 @@
        },
        reloadGrid: function () {
          debugger
          var searchNm = $("#searchNm").val();
          var values = {
            stdVersion: $("#version").val(),

+ 1 - 1
src/main/webapp/WEB-INF/ehr/jsp/standard/integration/versionDetailJs.jsp

@ -147,7 +147,7 @@
                  resultData = data;
                  _url = standard.version._url+"/standardCenter/updateVersion";
              }
                debugger
            $.ajax({
                url: _url,
                dataType: "json",

+ 1 - 1
src/main/webapp/develop/lib/ligerui/skins/Aqua/css/ligerui-grid.css

@ -303,7 +303,7 @@ padding-right: 10px;
.l-grid-row-alt .l-grid-row-cell
{
    background:#F5F5F5; 
    background:#F5F5F5;
}
.l-grid-row-over .l-grid-row-cell,.l-grid-row-over
{