LAPTOP-KB9HII50\70708 2 anni fa
parent
commit
32654ac798

+ 5 - 0
common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java

@ -145,6 +145,11 @@ public class DateUtil {
        return date;
    }
    public static String getCurrentString(String pattern) {
        SimpleDateFormat f = new SimpleDateFormat(pattern);
        return f.format(Calendar.getInstance(TimeZone.getDefault()).getTime());
    }
    public static String utcToDate(Date date) {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        String utcDate = sdf1.format(date);

+ 11 - 0
svr/svr-basic/pom.xml

@ -47,6 +47,17 @@
            <version>2.2.6</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>

+ 595 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/agadmin/controller/app/AppController.java

@ -0,0 +1,595 @@
//package com.yihu.jw.basic.agadmin.controller.app;
//
//
//import com.yihu.ehr.constants.ServiceApi;
//import com.yihu.ehr.constants.SessionAttributeKeys;
//
//import com.yihu.jw.basic.user.service.GetInfoService;
//import com.yihu.jw.entity.ehr.apps.App;
//import com.yihu.jw.restmodel.ehr.resource.MRsAppResource;
//import com.yihu.jw.restmodel.web.Envelop;
//import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
//import com.yihu.jw.util.common.LogService;
//import com.yihu.jw.util.http.HttpClientUtil;
//import org.apache.commons.lang.ArrayUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.util.LinkedMultiValueMap;
//import org.springframework.util.MultiValueMap;
//import org.springframework.util.StringUtils;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.*;
//
///**
// * Created by yww on 2015/8/12.
// */
//@RequestMapping("/app")
//@RestController
//public class AppController extends EnvelopRestEndpoint {
//
//    @Autowired
//    private GetInfoService getInfoService;
//
////    @RequestMapping("template/appInfo")
////    public String appInfoTemplate(Model model, String appId, String mode) {
////
////        String result = "";
////        Object app = null;
////        try {
////            //mode定义:new modify view三种模式,新增,修改,查看
////            if (mode.equals("new")) {
////                app = new AppDetailModel();
////                ((AppDetailModel) app).setStatus("WaitingForApprove");
////            } else {
////                String url = "/apps/" + appId;
////                RestTemplates template = new RestTemplates();
////                result = template.doGet(comUrl + url);
////                Envelop envelop = getEnvelop(result);
////                if (envelop.isSuccessFlg()) {
////                    app = envelop.getObj();
////                }
////            }
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////        }
////
////        model.addAttribute("model", toJson(app));
////        model.addAttribute("mode", mode);
////        model.addAttribute("contentPage", "/app/appInfoDialog");
////        return "emptyView";
////    }
//
//    /**
//     * 应用列表及特定查询
//     */
//    @GetMapping("/searchApps")
//    public Envelop getAppList(String sourceType, String searchNm, String org, String catalog, String status, int page, int rows, HttpServletRequest request) {
//        StringBuilder filters = new StringBuilder();
//        if (!StringUtils.isEmpty(sourceType)) {
//            filters.append("sourceType=" + sourceType+";");
//        }
//
//        if (!StringUtils.isEmpty(searchNm)) {
//            filters.append("id?" + searchNm+" g1;");
//            filters.append("name?" + searchNm+" g1;");
//        }
//        if (!StringUtils.isEmpty(org)) {
//            filters.append("org?" + org+";");
//        }
//        if (!StringUtils.isEmpty(catalog)) {
//            filters.append("catalog=" + catalog+";");
//        }
//        if (!StringUtils.isEmpty(status)) {
//            filters.append("status=" + status+";");
//        }
//
//        builder.setPageNumber(page)
//                .setPageSize(rows);
//        builder.addSorter("createTime", false);
//        String param = builder.toString();
//        String url = "/apps";
//        String resultStr = "";
//        try {
//            List<App> appList = appService.search(null, filters, null, page, rows);
//            pagedResponse(request, response, appService.getCount(filters), page, rows);
//        } catch (Exception ex) {
//            LogService.getLogger(AppController.class).error(ex.getMessage());
//        }
//
//        return resultStr;
//    }
//
////    @RequestMapping("/deleteApp")
////    @ResponseBody
////    public Object deleteApp(String appId) {
////        Envelop result = new Envelop();
////        String resultStr = "";
////        try {
////            String url = "/apps/" + appId;
////            RestTemplates template = new RestTemplates();
////            resultStr = template.doDelete(comUrl + url);
////            result.setSuccessFlg(getEnvelop(resultStr).isSuccessFlg());
////        } catch (Exception ex) {
////            result.setSuccessFlg(false);
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////        }
////        return result;
////    }
////
////    @RequestMapping("createApp")
////    @ResponseBody
////    public Object createApp(AppDetailModel appDetailModel, HttpServletRequest request) {
////
////        Envelop result = new Envelop();
////        String resultStr = "";
////        String url = "/apps";
////        MultiValueMap<String, String> conditionMap = new LinkedMultiValueMap<String, String>();
////        try {
////            if(null!=appDetailModel&&appDetailModel.getCode().length()>30){
////                return failed("应用代码长度不超过30");
////            }
////            //不能用 @ModelAttribute(SessionAttributeKeys.CurrentUser)获取,会与AppDetailModel中的id属性有冲突
////            UsersModel userDetailModel = getCurrentUserRedis(request);
////            appDetailModel.setCreator(userDetailModel.getId());
////            conditionMap.add("app", toJson(appDetailModel));
////            RestTemplates template = new RestTemplates();
////            resultStr = template.doPost(comUrl + url, conditionMap);
////            Envelop envelop = getEnvelop(resultStr);
////            if (envelop.isSuccessFlg()) {
////                result.setSuccessFlg(true);
////                result.setObj(envelop.getObj());
////            } else {
////                return failed("注册失败");
////            }
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////        }
////        return result;
////    }
////
////
////    @RequestMapping("updateApp")
////    @ResponseBody
////    public Object updateApp(AppDetailModel appDetailModel) {
//////        if (appDetailModel.getDescription().equals("del")){
//////            deleteApp(appDetailModel.getId());
//////            return false;
//////        }
////        Envelop result = new Envelop();
////        Envelop envelop = new Envelop();
////        String resultStr = "";
////        String url = "/apps";
////        try {
////            if(null!=appDetailModel&&appDetailModel.getCode().length()>30){
////                return failed("应用代码长度不超过30");
////            }
////            RestTemplates template = new RestTemplates();
////            //获取app
////            String id = appDetailModel.getId();
////            MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
////            map.add("app_id", id);
////            resultStr = template.doGet(comUrl + url + '/' + id, map);
////            envelop = getEnvelop(resultStr);
////            if (envelop.isSuccessFlg()) {
////                AppDetailModel appUpdate = getEnvelopModel(envelop.getObj(), AppDetailModel.class);
////                appUpdate.setName(appDetailModel.getName());
////                appUpdate.setOrg(appDetailModel.getOrg());
////                appUpdate.setCatalog(appDetailModel.getCatalog());
////                appUpdate.setTags(appDetailModel.getTags());
////                appUpdate.setUrl(appDetailModel.getUrl());
////                appUpdate.setOutUrl(appDetailModel.getOutUrl());
////                appUpdate.setDescription(appDetailModel.getDescription());
////                appUpdate.setCode(appDetailModel.getCode());
////                appUpdate.setRole(appDetailModel.getRole());
////                String icon = appDetailModel.getIcon();
////                if (!StringUtils.isEmpty(icon)) {
////                    icon = icon.substring(icon.indexOf("group1"), icon.length()).replace("group1/", "group1:");
////                    appUpdate.setIcon(icon);
////                }
////                appUpdate.setReleaseFlag(appDetailModel.getReleaseFlag());
////                appUpdate.setManageType(appDetailModel.getManageType());
////                appUpdate.setSourceType(appDetailModel.getSourceType());
////                appUpdate.setDoctorManageType(appDetailModel.getDoctorManageType());
////                //更新
////                MultiValueMap<String, String> conditionMap = new LinkedMultiValueMap<String, String>();
////                conditionMap.add("app", toJson(appUpdate));
////                resultStr = template.doPut(comUrl + url, conditionMap);
////                envelop = getEnvelop(resultStr);
////                if (envelop.isSuccessFlg()) {
////                    result.setSuccessFlg(true);
////                } else {
////                    result.setSuccessFlg(false);
////                    result.setErrorMsg("修改失败!");
////                }
////            }
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////            return failed("系统错误");
////        }
////
////        return result;
////    }
////
////    @RequestMapping("check")
////    @ResponseBody
////    public Object check(String appId, String status) {
////        Envelop result = new Envelop();
////        String urlPath = "/apps/status";
////        String resultStr = "";
////        MultiValueMap<String, String> conditionMap = new LinkedMultiValueMap<>();
////        conditionMap.add("app_id", appId);
////        conditionMap.add("app_status", status);
////        try {
////            RestTemplates template = new RestTemplates();
////            resultStr = template.doPut(comUrl + urlPath, conditionMap);
////            result.setSuccessFlg(Boolean.parseBoolean(resultStr));
////        } catch (Exception e) {
////            result.setSuccessFlg(false);
////        }
////        return result;
////    }
////
////    //-------------------------------------------------------应用---资源授权管理---开始----------------
////    @RequestMapping("/resource/initial")
////    public String resourceInitial(Model model, String backParams) {
////        model.addAttribute("backParams", backParams);
////        model.addAttribute("contentPage", "/app/resource");
////        return "emptyView";
////    }
////
////    //获取app已授权资源ids集合
////    @RequestMapping("/resourceIds")
////    @ResponseBody
////    public Object getResourceIds(String appId) {
////        Envelop envelop = new Envelop();
////        List<String> list = new ArrayList<>();
////        envelop.setSuccessFlg(false);
////        envelop.setDetailModelList(list);
////        URLQueryBuilder builder = new URLQueryBuilder();
////        if (StringUtils.isEmpty(appId)) {
////            return envelop;
////        }
////        builder.addFilter("appId", "=", appId, null);
////        builder.setPageNumber(1)
////                .setPageSize(999);
////        String param = builder.toString();
////        String url = "/resources/grants";
////        String resultStr = "";
////        try {
////            RestTemplates template = new RestTemplates();
////            resultStr = template.doGet(comUrl + url + "?" + param);
////            Envelop resultGet = objectMapper.readValue(resultStr, Envelop.class);
////            if (resultGet.isSuccessFlg() && resultGet.getDetailModelList().size() != 0) {
////                List<RsAppResourceModel> rsAppModels = (List<RsAppResourceModel>) getEnvelopList(resultGet.getDetailModelList(), new ArrayList<RsAppResourceModel>(), RsAppResourceModel.class);
////                for (RsAppResourceModel m : rsAppModels) {
////                    list.add(m.getResourceId());
////                }
////                envelop.setSuccessFlg(true);
////            }
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////        }
////        envelop.setSuccessFlg(true);
////        envelop.setDetailModelList(list);
////        return envelop;
////    }
////
////    @RequestMapping("/app")
////    @ResponseBody
////    public Object getAppById(String appId) {
////        Envelop envelop = new Envelop();
////        try {
////            String url = "/apps/" + appId;
////            RestTemplates template = new RestTemplates();
////            String envelopStr = template.doGet(comUrl + url);
////            return envelopStr;
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////        }
////        envelop.setSuccessFlg(false);
////        return envelop;
////    }
////
////    //资源授权appId+resourceIds
////    @RequestMapping("/resource/grant")
////    @ResponseBody
////    public Object resourceGrant(String appId, String resourceIds) {
////        Envelop envelop = new Envelop();
////        try {
////            String url = "/resources/apps/" + appId + "/grant";
////            Map<String, Object> params = new HashMap<>();
////            params.put("appId", appId);
////            params.put("resourceIds", resourceIds);
////            String resultStr = HttpClientUtil.doPost(comUrl + url, params, username, password);
////            return resultStr;
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////        }
////        envelop.setSuccessFlg(false);
////        return envelop;
////    }
////
////    //批量、单个取消资源授权
////    @RequestMapping("/resource/cancel")
////    @ResponseBody
////    public Object resourceGrantCancel(String appId, String resourceIds) {
////        Envelop envelop = new Envelop();
////        envelop.setSuccessFlg(false);
////        if (StringUtils.isEmpty(appId)) {
////            envelop.setErrorMsg("应用id不能为空!");
////            return envelop;
////        }
////        if (StringUtils.isEmpty(resourceIds)) {
////            envelop.setErrorMsg("资源id不能为空!");
////            return envelop;
////        }
////        try {
////            //先获取授权关系表的ids
////            String url = "/resources/grants/no_paging";
////            Map<String, Object> params = new HashMap<>();
////            params.put("filters", "appId=" + appId + ";resourceId=" + resourceIds);
////            String envelopStrGet = HttpClientUtil.doGet(comUrl + url, params, username, password);
////            Envelop envelopGet = objectMapper.readValue(envelopStrGet, Envelop.class);
////            String ids = "";
////            if (envelopGet.isSuccessFlg() && envelopGet.getDetailModelList().size() != 0) {
////                List<MRsAppResource> list = (List<MRsAppResource>) getEnvelopList(envelopGet.getDetailModelList(),
////                        new ArrayList<MRsAppResource>(), MRsAppResource.class);
////                for (MRsAppResource m : list) {
////                    ids += m.getId() + ",";
////                }
////                ids = ids.substring(0, ids.length() - 1);
////            }
////            //取消资源授权
////            if (!StringUtils.isEmpty(ids)) {
////                String urlCancel = "/resources/grants";
////                Map<String, Object> args = new HashMap<>();
////                args.put("ids", ids);
////                String result = HttpClientUtil.doDelete(comUrl + urlCancel, args, username, password);
////                return result;
////            }
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////            return failed("系统出错");
////
////        }
////        return envelop;
////    }
////
////
////    /**
////     * 资源文件上传
////     *
////     * @param
////     * @return
////     */
////    @RequestMapping("appIconFileUpload")
////    @ResponseBody
////    public Object orgLogoFileUpload(
////            @RequestParam("iconFile") MultipartFile file) throws IOException {
////        Envelop result = new Envelop();
////        InputStream inputStream = file.getInputStream();
////        String fileName = file.getOriginalFilename(); //获取文件名
////        if (!file.isEmpty()) {
////            return uploadFile(inputStream, fileName);
////        }
////        return "fail";
////    }
////
////    public String uploadFile(InputStream inputStream, String fileName) {
////        try {
////            //读取文件流,将文件输入流转成 byte
////            int temp = 0;
////            int bufferSize = 1024;
////            byte tempBuffer[] = new byte[bufferSize];
////            byte[] fileBuffer = new byte[0];
////            while ((temp = inputStream.read(tempBuffer)) != -1) {
////                fileBuffer = ArrayUtils.addAll(fileBuffer, ArrayUtils.subarray(tempBuffer, 0, temp));
////            }
////            inputStream.close();
////            String restStream = Base64.getEncoder().encodeToString(fileBuffer);
////            String url = "";
////            url = fileUpload(restStream, fileName);
////            if (!StringUtils.isEmpty(url)) {
////                System.out.println("上传成功");
////                return url;
////            } else {
////                System.out.println("上传失败");
////            }
////
////        } catch (Exception e) {
////            return "fail";
////        }
////        return "fail";
////    }
////
////    /**
////     * 图片上传
////     *
////     * @param inputStream
////     * @param fileName
////     * @return
////     */
////    public String fileUpload(String inputStream, String fileName) {
////
////        RestTemplates templates = new RestTemplates();
////        Map<String, Object> params = new HashMap<>();
////
////        String url = null;
////        if (!StringUtils.isEmpty(inputStream)) {
////
////            //mime  参数 doctor 需要改变  --  需要从其他地方配置
////            FileResourceModel fileResourceModel = new FileResourceModel("", "org", "");
////            String fileResourceModelJsonData = toJson(fileResourceModel);
////
////            params.put("file_str", inputStream);
////            params.put("file_name", fileName);
////            params.put("json_data", fileResourceModelJsonData);
////            try {
////                url = HttpClientUtil.doPost(comUrl + "/filesReturnUrl", params, username, password);
////                return url;
////            } catch (Exception e) {
////                e.printStackTrace();
////            }
////        }
////        return url;
////    }
////
////
////
////    //修改、查看授权资源
////    //-------------------------------------------------------应用---资源授权管理---结束----------------
////
////    //-------------------------------------------------------应用----资源----数据元--管理开始--------------
////    @RequestMapping("/resourceManage/initial")
////    public String resourceManageInitial(Model model, String appId, String resourceId, String dataModel) {
////        model.addAttribute("dataModel", dataModel);
////        model.addAttribute("appRsId", getAppResId(appId, resourceId));
////        model.addAttribute("contentPage", "/app/resourceManage");
////        return "pageView";
////    }
////
////    //获取应用资源关联关系id
////    public String getAppResId(String appId, String resourceId) {
////        URLQueryBuilder builder = new URLQueryBuilder();
////        if (StringUtils.isEmpty(appId) || StringUtils.isEmpty(resourceId)) {
////            return "";
////        }
////        builder.addFilter("appId", "=", appId, null);
////        builder.addFilter("resourceId", "=", resourceId, null);
////        builder.setPageNumber(1)
////                .setPageSize(1);
////        String param = builder.toString();
////        String url = "/resources/grants";
////        String resultStr = "";
////        try {
////            RestTemplates template = new RestTemplates();
////            resultStr = template.doGet(comUrl + url + "?" + param);
////            Envelop resultGet = objectMapper.readValue(resultStr, Envelop.class);
////            if (resultGet.isSuccessFlg()) {
////                List<RsAppResourceModel> rsAppModels = (List<RsAppResourceModel>) getEnvelopList(resultGet.getDetailModelList(), new ArrayList<RsAppResourceModel>(), RsAppResourceModel.class);
////                RsAppResourceModel resourceModel = rsAppModels.get(0);
////                return resourceModel.getId();
////            }
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////        }
////        return "";
////    }
////
//////    /**
//////     * 跳转维度管理页面顶部资源信息
//////     */
//////    @RequestMapping("/resource")
//////    @ResponseBody
//////    public Object getResourceById(String resourceId){
//////        Envelop envelop = new Envelop();
//////        try{
//////            String url = "/resources/"+resourceId;
//////            RestTemplates template = new RestTemplates();
//////            String envelopStr = template.doGet(comUrl+url);
//////            return envelopStr;
//////        }catch (Exception ex){
//////            LogService.getLogger(AppController.class).error(ex.getMessage());
//////        }
//////        envelop.setSuccessFlg(false);
//////        return envelop;
//////    }
//////
//////    //根据资源id获取数据元列表
//////    @RequestMapping("/resource/metadata")
//////    @ResponseBody
//////    public Object resourceMetadata(String resourceId){
//////        Envelop envelop = new Envelop();
//////        try{
//////            String url = "/resources/"+resourceId+"/metadata_list";
//////            RestTemplates template = new RestTemplates();
//////            String envelopStr = template.doGet(comUrl+url);
//////            return envelopStr;
//////        }catch (Exception ex){
//////            LogService.getLogger(AppController.class).error(ex.getMessage());
//////        }
//////        envelop.setSuccessFlg(false);
//////        return envelop;
//////
//////    }
////
////    //-------------------------------------------------------应用----资源----数据元--管理结束--------------
////
////
////    @RequestMapping("/roles/tree")
////    @ResponseBody
////    public Object getRoleArr() {
////        try {
////            String url = comUrl + "/roles/platformAppRolesTree";
////            Map<String, Object> params = new HashMap<>();
////            params.put("type", 0);
////            params.put("source_type", 1);
////            String envelopStr = HttpClientUtil.doGet(url, params, username, password);
////            return envelopStr;
////        } catch (Exception e) {
////            e.printStackTrace();
////            return failedSystem();
////        }
////    }
////
////    //获取平台应用
////    @RequestMapping("/getAppTreeByType")
////    @ResponseBody
////    public Object getAppTreeByType() {
////        try {
////            String url = "/getAppTreeByType";
////            Map<String, Object> params = new HashMap<>();
////            String envelopStr = HttpClientUtil.doGet(comUrl + url, params, username, password);
//////            Envelop envelop = objectMapper.readValue(envelopStr,Envelop.class);
////            return envelopStr;
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////            return failed("内部服务请求失败");
////        }
////    }
////
////    //应用一键授权
////    @RequestMapping("/grantByCategoryId")
////    @ResponseBody
////    public Object grantByCategoryId(String appId, String categoryIds, String resourceIds) {
////        System.out.print("---");
////        try {
////            String url = "/resource/api/v1.0" + ServiceApi.Resources.AppsGrantResourcesByCategoryId;
////            Map<String, Object> params = new HashMap<>();
////            params.put("appId", appId);
////            params.put("categoryIds", categoryIds);
////            params.put("resourceIds", resourceIds);
////            String envelopStr = HttpClientUtil.doPost(adminInnerUrl + url, params, username, password);
////            return envelopStr;
////        } catch (Exception ex) {
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////            return failed("内部服务请求失败");
////        }
////    }
////
////    //应用一键取消授权
////    @RequestMapping("/deleteAppsGrantResourcesByCategoryId")
////    @ResponseBody
////    public Object deleteAppsGrantResourcesByCategoryId(String appId, String categoryIds, String resourceIds) {
////        try {
////            String url = "/resource/api/v1.0" + ServiceApi.Resources.DeleteAppsGrantResourcesByCategoryId;
////            Map<String, Object> params = new HashMap<>();
////            params.put("appId", appId);
////            params.put("categoryIds", categoryIds);
////            params.put("resourceIds", resourceIds);
////            String envelopStr = HttpClientUtil.doPost(adminInnerUrl + url, params, username, password);
////            return envelopStr;
////        } catch (Exception ex){
////            LogService.getLogger(AppController.class).error(ex.getMessage());
////            return failed("内部服务请求失败");
////        }
////    }
//
//}

+ 750 - 739
svr/svr-basic/src/main/java/com/yihu/jw/basic/agadmin/controller/quota/TjQuotaController.java

@ -1,581 +1,611 @@
//package com.yihu.jw.basic.agadmin.controller.quota;
//
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.ObjectMapper;
//
//import com.yihu.jw.basic.quota.service.*;
//import com.yihu.jw.basic.resource.service.RsResourceQuotaService;
//import com.yihu.jw.entity.ehr.quota.*;
//import com.yihu.jw.entity.ehr.resource.RsResourceQuota;
//import com.yihu.jw.restmodel.ehr.tj.MTjQuotaDataSaveModel;
//import com.yihu.jw.restmodel.ehr.tj.MTjQuotaDataSourceModel;
//import com.yihu.jw.restmodel.ehr.tj.MTjQuotaModel;
//import com.yihu.jw.restmodel.web.Envelop;
//import com.yihu.jw.restmodel.web.ObjEnvelop;
//import com.yihu.jw.restmodel.web.PageEnvelop;
//import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
//import com.yihu.jw.util.date.DateUtil;
//import com.yihu.jw.util.http.HttpClientUtil;
//import io.swagger.annotations.Api;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.ui.Model;
//import org.springframework.util.LinkedMultiValueMap;
//import org.springframework.util.MultiValueMap;
//import org.springframework.util.StringUtils;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.bind.annotation.RestController;
//import org.springframework.web.client.RestClientException;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.*;
//import java.net.URLDecoder;
//import java.util.*;
//
///**
// * Created by Administrator on 2017/6/13.
// */
//@RestController
//@RequestMapping("/tjQuota")
//@Api( tags = {"网关-统计"})
//public class TjQuotaController extends EnvelopRestEndpoint {
//
//    @Autowired
//    TjQuotaService tjQuotaService;
//    @Autowired
//    private RsResourceQuotaService resourceQuotaService;
//    @Autowired
//    TjQuotaDataSaveService tjQuotaDataSaveService;
//    @Autowired
//    TjQuotaDataSourceService tjQuotaDataSourceService;
//    @Autowired
//    TjDataSaveService tjDataSaveService;
//    @Autowired
//    TjDataSourceService tjDataSourceService;
//
//    @RequestMapping("/getTjQuota")
//    public Object searchTjQuota(String name, Integer quotaType, int page, int rows) {
//        String url = "/tj/getTjQuotaList";
//        StringBuffer stringBuffer = new StringBuffer();
//        stringBuffer.append("status=1;");
//        if (!StringUtils.isEmpty(name)) {
//            stringBuffer.append("name?" + name.trim() + " g1;code?" + name.trim() + " g1;");
//        }
//        if (!StringUtils.isEmpty(quotaType)) {
//            stringBuffer.append("quotaType=" + quotaType + ";");
//        } /*else {
//            stringBuffer.append("quotaType=-1");
//        }*/
//        String filters = stringBuffer.toString();
//
//        try {
//            PageEnvelop PageEnvelop = new PageEnvelop();
//            List<TjQuota> tjQuota = tjQuotaService.search(null, filters, null, page, rows);
//            if(tjQuota != null){
//                PageEnvelop.setDetailModelList(tjQuota);
//                PageEnvelop.setTotalCount((int)tjQuotaService.getCount(filters));
//                PageEnvelop.setStatus(200);
//                PageEnvelop.setCurrPage(page);
//                PageEnvelop.setPageSize(rows);
//            }else{
//                PageEnvelop.setStatus(200);
//                PageEnvelop.setMessage("查询无数据");
//                PageEnvelop.setTotalCount(0);
//            }
//            return PageEnvelop;
//        } catch (Exception ex) {
//            ex.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//    /**
//     * 新增修改
//     *
//     * @param tjQuotaModelJsonData
//     * @param request
//     * @return
//     * @throws IOException
//     */
//    @RequestMapping(value = "updateTjDataSource", produces = "text/html;charset=UTF-8")
//    public Envelop updateTjQuota(String tjQuotaModelJsonData, HttpServletRequest request) throws IOException {
//        String url = "/tj/addTjQuota/";
//        String resultStr = "";
//        Envelop result = new Envelop();
//        String[] strings = URLDecoder.decode(tjQuotaModelJsonData, "UTF-8").split(";");
//        TjQuota detailModel = objectMapper.readValue(strings[0], TjQuota.class);
//        try {
//            if (!StringUtils.isEmpty(detailModel.getId())) {
//                Long tjQuotaId = detailModel.getId();
//                TjQuota updateTjQuota = tjQuotaService.getById(tjQuotaId);
//                if (updateTjQuota!=null) {
//                    updateTjQuota.setResultGetType(detailModel.getResultGetType());
//                    updateTjQuota.setCode(detailModel.getCode());
//                    updateTjQuota.setName(detailModel.getName());
//                    updateTjQuota.setCron(detailModel.getCron());
//                    updateTjQuota.setJobStatus(detailModel.getJobStatus());
//                    updateTjQuota.setExecType(detailModel.getExecType());
//                    updateTjQuota.setExecTime(detailModel.getExecTime());
//                    updateTjQuota.setJobClazz(detailModel.getJobClazz());
//                    updateTjQuota.setQuotaType(detailModel.getQuotaType());
//                    updateTjQuota.setDataLevel(detailModel.getDataLevel());
//                    updateTjQuota.setRemark(detailModel.getRemark());
//                    TjQuotaDataSource tjquotaDataSource = null;
//                    TjQuotaDataSave tjQuotaDataSave = null;
//                    if(detailModel.getTjQuotaDataSource() != null){
//                        tjquotaDataSource = detailModel.getTjQuotaDataSource();
//                        tjquotaDataSource.setQuotaCode(detailModel.getCode());
//                    }
//                    if(detailModel.getTjQuotaDataSave() != null
//                            && org.apache.commons.lang3.StringUtils.isNotEmpty(detailModel.getTjQuotaDataSave().getSaveCode())){
//                        tjQuotaDataSave = detailModel.getTjQuotaDataSave();
//                        tjQuotaDataSave.setQuotaCode(detailModel.getCode());
//                    }
//                    detailModel.setUpdateTime(new Date());
//                    tjQuotaService.saves(detailModel, tjquotaDataSource, tjQuotaDataSave);
//                    return ObjEnvelop.getSuccess("统计表更新成功!", detailModel);
//                } else {
//                    return failed("参数错误");
//                }
//            } else {
//                TjQuotaDataSource tjquotaDataSource = null;
//                TjQuotaDataSave tjQuotaDataSave = null;
//                if(detailModel.getTjQuotaDataSource() != null){
//                    tjquotaDataSource = detailModel.getTjQuotaDataSource();
//                    tjquotaDataSource.setQuotaCode(detailModel.getCode());
//                }
//                if(detailModel.getTjQuotaDataSave() != null
//                        && org.apache.commons.lang3.StringUtils.isNotEmpty(detailModel.getTjQuotaDataSave().getSaveCode())){
//                    tjQuotaDataSave = detailModel.getTjQuotaDataSave();
//                    tjQuotaDataSave.setQuotaCode(detailModel.getCode());
//                }
//                detailModel.setIsInitExec("0");
//                detailModel.setStatus(1);
//                detailModel.setCreateTime(new Date());
//                detailModel.setUpdateTime(new Date());
//                tjQuotaService.saves(detailModel, tjquotaDataSource, tjQuotaDataSave);
//                return ObjEnvelop.getSuccess("统计表更新成功!", detailModel);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//    /**
//     * 删除
//     *
//     * @param tjQuotaId
//     * @return
//     */
//    @RequestMapping("deleteTjDataSave")
//    public Envelop deleteTjQuota(Long tjQuotaId) {
//        String url = "/tj/deleteTjQuota";
//        //判断资源视图中有没有用到此视图,有用到 不允许删除
//        String resQuotaUrl = "/resourceQuota/searchByQuotaId";
//        try {
//            List<RsResourceQuota> list = resourceQuotaService.search("quotaId=" + tjQuotaId);
//            if (list.size()>0) {
//                return failed("指标在视图中被使用暂时不能删除,若要删除先解除资源视图中指标关系");
//            }
//            TjQuota tjQuota = tjQuotaService.getById(tjQuotaId);
//            tjQuota.setStatus(-1);
//            tjQuotaService.save(tjQuota);
//            return ObjEnvelop.getSuccess("统计指标表删除成功!");
//        } catch (Exception e) {
//            e.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//    /**
//     * 根据id获取消息
//     *
//     * @param model
//     * @param id
//     * @return
//     */
//    @RequestMapping("getTjQuotaById")
//    public Envelop getTjQuotaById(Model model, Long id) {
//        String url = "/tj/getTjQuotaById/" + id;
//        String resultStr = "";
//        Envelop envelop = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//        params.put("id", id);
//        try {
//            TjQuota tjQuota = tjQuotaService.getById(id);
//            if (null != tjQuota) {
//                TjQuotaDataSave tjQuotaDataSave = tjQuotaDataSaveService.getByQuotaCode(tjQuota.getCode());
//                TjQuotaDataSource tjQuotaDataSource = tjQuotaDataSourceService.getByQuotaCode(tjQuota.getCode());
//                if (tjQuotaDataSave != null) {
//                    TjDataSave tjDataSave = tjDataSaveService.getByCode(tjQuotaDataSave.getSaveCode());
//                    tjQuotaDataSave.setName(tjDataSave.getName());
//                }
//                if (tjQuotaDataSource != null) {
//                    TjDataSource tjDataSource = tjDataSourceService.getByCode(tjQuotaDataSource.getSourceCode());
//                    tjQuotaDataSource.setName(tjDataSource.getName());
//                }
//                tjQuota.setTjQuotaDataSave(tjQuotaDataSave);
//                tjQuota.setTjQuotaDataSource(tjQuotaDataSource);
//            }
//            return ObjEnvelop.getSuccess("统计指标表删除成功!",tjQuota);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return failed("查询失败");
//    }
//
//    /**
//     * 校验name是否唯一,true已存在
//     *
//     * @param name
//     * @return
//     */
//    @RequestMapping("hasExistsName")
//    public Envelop hasExistsName(String name) {
//        String url = "/tj/tjQuotaExistsName/" + name;
//        String resultStr = "";
//        Envelop result = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//        ObjectMapper mapper = new ObjectMapper();
//        params.put("name", name);
//        try {
//            String filter = "name=" + name;
//            List<TjQuota> list = tjQuotaService.search(filter);
//            return ObjEnvelop.getSuccess("查询成功",list.size() >0);
//        } catch (Exception e) {
//            e.getMessage();
//        }
//        return  failed("查询失败");
//    }
//
//    /**
//     * 校验code是否唯一
//     *
//     * @param code
//     * @return
//     */
//    @RequestMapping("hasExistsCode")
//    public Envelop hasExistsCode(String code) {
//        String url = "/tj/tjQuotaExistsCode/" + code;
//        String resultStr = "";
//        Envelop result = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//        ObjectMapper mapper = new ObjectMapper();
//        params.put("code", code);
//        try {
//            String filter = "code=" + code;
//            List<TjQuota> list = tjQuotaService.search(filter);
//            return ObjEnvelop.getSuccess("查询成功",list.size() >0);
//        } catch (Exception e) {
//            e.getMessage();
//        }
//        return  failed("查询失败");
//    }
//
//    /**
//     * 初始执行(全量统计)
//     */
//    @RequestMapping("firstExecuteQuota")
//    public Object firstExecuteQuota(Long tjQuotaId) {
//        Envelop envelop = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//        params.put("id", tjQuotaId);
//        try {
//            String url = "/job/firstExecuteQuota";
//            String resultStr = HttpClientUtil.doPost(comUrl + url, params, username, password);
//            envelop = objectMapper.readValue(resultStr, Envelop.class);
//            return envelop;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//    /**
//     * 执行指标
//     */
//    @RequestMapping("execuQuota")
//    public Object execuQuota(Long tjQuotaId, String startDate, String endDate) {
//        Envelop envelop = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//        params.put("id", tjQuotaId);
//        if (!StringUtils.isEmpty(startDate)) {
//            params.put("startDate", startDate);
//        }
//        if (!StringUtils.isEmpty(endDate)) {
//            params.put("endDate", endDate);
//        }
//        try {
//            String url = "/job/execuJob";
//            String resultStr = HttpClientUtil.doPost(comUrl + url, params, username, password);
//            envelop = objectMapper.readValue(resultStr, Envelop.class);
//            return envelop;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//    /**
//     * 指标结果页
//     *
//     * @param model
//     * @return
//     */
//    @RequestMapping("initialResult")
//    public String initialResult(Model model, long tjQuotaId, String quotaCode, String quotaType, String name) throws Exception {
//        model.addAttribute("contentPage", "/report/zhibiao/resultIndex");
//        model.addAttribute("id", tjQuotaId);
//        model.addAttribute("quotaType", quotaType);
//        model.addAttribute("name", name);
//        String urlSlave = "/tj/getDimensionSlaveByQuotaCode";
//        Map<String, Object> params = new HashMap<>();
//        params.put("quotaCode", quotaCode);
//        Envelop result = null;
//        try {
//            String resultStr = HttpClientUtil.doGet(comUrl + urlSlave, params, username, password);
//            result = objectMapper.readValue(resultStr, Envelop.class);
//            if (result.isSuccessFlg() && result.getDetailModelList().size() > 0) {
//                List<HashMap> slaveModelList = result.getDetailModelList();
//                if (slaveModelList != null && slaveModelList.size() > 0) {
//                    int num = 1;
//                    for (HashMap map : slaveModelList) {
//                        TjQuotaDimensionSlaveModel quotaDimensionSlaveModel = objectMapper.convertValue(map, TjQuotaDimensionSlaveModel.class);
//                        RestTemplates templates = new RestTemplates();
//                        params.clear();
//                        params.put("code", quotaDimensionSlaveModel.getSlaveCode());
//                        resultStr = HttpClientUtil.doGet(comUrl + "/tj/getTjDimensionSlaveByCode", params, username, password);
//                        result = objectMapper.readValue(resultStr, Envelop.class);
//                        if (result.isSuccessFlg()) {
//                            TjDimensionSlaveModel tjDimensionSlaveModel = objectMapper.convertValue(result.getObj(), TjDimensionSlaveModel.class);
//                            model.addAttribute("slaveKey" + num + "Name", tjDimensionSlaveModel.getName());
//                            num++;
//                        }
//                    }
//                }
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return "emptyView";
//    }
//
//
//    /**
//     * 指标执行结果
//     *
//     * @param tjQuotaId
//     * @return
//     */
//    @RequestMapping("selectQuotaResult")
//    public Object selectQuotaResult(Long tjQuotaId, int page, int rows,
//                                    String startTime, String endTime, String orgName,
//                                    String province, String city, String district,String res, HttpServletRequest request) {
//        Envelop result = new Envelop();
//        String resultStr = "";
//        String url = "/tj/tjGetQuotaResult";
//        try {
//            Map<String, Object> filters = new HashMap<>();
//            filters.put("startTime", startTime);
//            filters.put("endTime", endTime);
//            filters.put("org", orgName);
//            filters.put("province", province);
//            filters.put("town", city);
//            filters.put("district", district);
//             // 结果大于0
//            filters.put("result", res);
//            Map<String, Object> params = new HashMap<>();
//            List<String> userOrgList = getUserOrgSaasListRedis(request);
//            params.put("userOrgList", userOrgList);
//            params.put("id", tjQuotaId);
//            params.put("pageNo", page);
//            params.put("pageSize", rows);
//            params.put("filters", objectMapper.writeValueAsString(filters));
//            ObjectMapper mapper = new ObjectMapper();
//            resultStr = HttpClientUtil.doGet(comUrl + url, params, username, password);
//            result = mapper.readValue(resultStr, Envelop.class);
//            return result;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//
//    /**
//     * 获取指标日志信息
//     *
//     * @param
//     * @return
//     */
//    @RequestMapping("queryQuotaLog")
//    public Object queryQuotaLog(String quotaCode, String startTime, String endTime, int page, int rows) throws Exception {
//        String url = "/tj/getTjQuotaLogList";
//        String resultStr = "";
//        Envelop envelop = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//
//        params.put("startTime", startTime);
//        params.put("endTime", endTime);
//        params.put("quotaCode", quotaCode);
//        params.put("fields", "");
//        params.put("sorts", "");
//        params.put("page", page);
//        params.put("size", rows);
//        try {
//            resultStr = HttpClientUtil.doGet(comUrl + url, params, username, password);
//            return resultStr;
//        } catch (Exception ex) {
//            ex.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//    /**
//     * 获取quotaCode查询是否配置维度
//     *
//     * @param
//     * @return
//     */
//    @RequestMapping("hasConfigDimension")
//    public boolean hasConfigDimension(String quotaCode) throws Exception {
//        String url = "/tj/hasConfigDimension";
//        String resultStr = "";
//        Map<String, Object> params = new HashMap<>();
//
//        params.put("quotaCode", quotaCode);
//        try {
//            resultStr = HttpClientUtil.doGet(comUrl + url, params, username, password);
//            if (resultStr.equals("true")) {
//                return true;
//            }
//        } catch (Exception e) {
//            e.getMessage();
//        }
//        return false;
//    }
//
//
//    //带检索分页的查找指标方法,用于下拉框
//    @RequestMapping("/rsQuota")
//    public Object searchRsQuota(String searchParm, int page, int rows) {
//        String url = "/tj/getTjQuotaList";
//        Envelop envelop = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//        StringBuffer stringBuffer = new StringBuffer();
//        if (!StringUtils.isEmpty(searchParm)) {
//            stringBuffer.append("name?" + searchParm + ";");
//        }
//        params.put("filters", "");
//        String filters = stringBuffer.toString();
//        if (!StringUtils.isEmpty(filters)) {
//            params.put("filters", filters);
//        }
//        params.put("page", page);
//        params.put("size", rows);
//        try {
//            String envelopStrGet = HttpClientUtil.doGet(comUrl + url, params, username, password);
//            Envelop envelopGet = objectMapper.readValue(envelopStrGet, Envelop.class);
//            List<TjQuotaModel> tjQuotaModelList = new ArrayList<>();
//            List<Map> list = new ArrayList<>();
//            if (envelopGet.isSuccessFlg()) {
//                tjQuotaModelList = (List<TjQuotaModel>) getEnvelopList(envelopGet.getDetailModelList(), new ArrayList<TjQuotaModel>(), TjQuotaModel.class);
//                for (TjQuotaModel m : tjQuotaModelList) {
//                    Map map = new HashMap<>();
//                    map.put("id", m.getCode());
//                    map.put("name", m.getName());
//                    list.add(map);
//                }
//                envelopGet.setDetailModelList(list);
//                return envelopGet;
//            }
//            return envelop;
//        } catch (Exception ex) {
//            ex.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//
//    @RequestMapping("/getTjQuotaChartList")
//    public Object getQuotaChartList(String quotaCode, String name, int dictId, int page, int rows) {
//        String url = "/tj/getTjQuotaChartList";
//        String resultStr = "";
//        Envelop envelop = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//        params.put("filters", "");
//        StringBuffer stringBuffer = new StringBuffer();
//        if (!StringUtils.isEmpty(quotaCode)) {
//            stringBuffer.append("quotaCode=" + quotaCode);
//        }
//        if (!StringUtils.isEmpty(name)) {
//            stringBuffer.append("value?" + name);
//        }
//        String filters = stringBuffer.toString();
//        if (!StringUtils.isEmpty(filters)) {
//            params.put("filters", filters);
//        }
//        String filter = "";
//        if (!StringUtils.isEmpty(dictId)) {
//            filter = "dictId=" + dictId;
//        }
//        params.put("dictfilter", filter);
//        params.put("page", page);
//        params.put("size", rows);
//        try {
//            resultStr = HttpClientUtil.doGet(comUrl + url, params, username, password);
//            return resultStr;
//        } catch (Exception ex) {
//            ex.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//    /**
//     * 添加主维度子表
//     *
//     * @param jsonModel 维度子表信息的json串
//     * @param request
//     * @return
//     * @throws IOException
//     */
//    @RequestMapping(value = "addTjQuotaChart", produces = "text/html;charset=UTF-8")
//    public Object addTjQuotaChart(String quotaCode, String jsonModel, HttpServletRequest request) throws IOException {
//        String url = "/tj/batchTjQuotaChart";
//        String resultStr = "";
//        Envelop result = new Envelop();
//        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
//        params.add("model", jsonModel);
//        RestTemplates templates = new RestTemplates();
//        try {
//            resultStr = templates.doPost(comUrl + url, params);
//        } catch (RestClientException e) {
//            e.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//        return resultStr;
//    }
//
//    /**
//     * 指标文件导入
//     *
//     * @param file
//     * @param request
//     * @param response
//     * @return
//     * @throws IOException
//     */
//    private static final String parentFile = "tjQuotaDataSet";
//
package com.yihu.jw.basic.agadmin.controller.quota;
import com.fasterxml.jackson.core.type.TypeReference;
import com.yihu.jw.basic.dict.service.SystemDictEntryService;
import com.yihu.jw.basic.quota.controller.JobController;
import com.yihu.jw.basic.quota.model.SaveModel;
import com.yihu.jw.basic.quota.service.*;
import com.yihu.jw.basic.quota.util.QuartzHelper;
import com.yihu.jw.basic.resource.service.RsResourceQuotaService;
import com.yihu.jw.basic.util.TemPath;
import com.yihu.jw.entity.ehr.quota.*;
import com.yihu.jw.entity.ehr.resource.RsResourceQuota;
import com.yihu.jw.restmodel.ehr.dict.MConventionalDict;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.util.date.DateTimeUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestClientException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;
import java.util.*;
/**
 * Created by Administrator on 2017/6/13.
 */
@RestController
@RequestMapping("/tjQuota")
@Api( tags = {"网关-统计"})
public class TjQuotaController extends EnvelopRestEndpoint {
    @Autowired
    private JobController jobController;
    @Autowired
    private SystemDictEntryService dictEntryService;
    @Autowired
    TjQuotaService tjQuotaService;
    @Autowired
    private RsResourceQuotaService resourceQuotaService;
    @Autowired
    TjQuotaDataSaveService tjQuotaDataSaveService;
    @Autowired
    TjQuotaDataSourceService tjQuotaDataSourceService;
    @Autowired
    TjDataSaveService tjDataSaveService;
    @Autowired
    TjDataSourceService tjDataSourceService;
    @Autowired
    TjQuotaChartService tjQuotaChartService;
    @Autowired
    TjDimensionMainService tjDimensionMainService;
    @Autowired
    TjDimensionSlaveService tjDimensionSlaveService;
    @Autowired
    private TjQuotaCategoryService quotaCategoryService;
    @Autowired
    TjQuotaDimensionSlaveService tjQuotaDimensionSlaveService;
    @Autowired
    TjQuotaDimensionMainService tjQuotaDimensionMainService;
    @Autowired
    private QuotaService quotaService;
    @Autowired
    TjQuotaLogService tjQuotaLogService;
    @GetMapping("/getTjQuota")
    public Envelop searchTjQuota(String name, Integer quotaType, int page, int rows) {
        String url = "/tj/getTjQuotaList";
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("status=1;");
        if (!StringUtils.isEmpty(name)) {
            stringBuffer.append("name?" + name.trim() + " g1;code?" + name.trim() + " g1;");
        }
        if (!StringUtils.isEmpty(quotaType)) {
            stringBuffer.append("quotaType=" + quotaType + ";");
        } /*else {
            stringBuffer.append("quotaType=-1");
        }*/
        String filters = stringBuffer.toString();
        try {
            PageEnvelop PageEnvelop = new PageEnvelop();
            List<TjQuota> tjQuota = tjQuotaService.search(null, filters, null, page, rows);
            if(tjQuota != null){
                PageEnvelop.setDetailModelList(tjQuota);
                PageEnvelop.setTotalCount((int)tjQuotaService.getCount(filters));
                PageEnvelop.setStatus(200);
                PageEnvelop.setCurrPage(page);
                PageEnvelop.setPageSize(rows);
            }else{
                PageEnvelop.setStatus(200);
                PageEnvelop.setMessage("查询无数据");
                PageEnvelop.setTotalCount(0);
            }
            return PageEnvelop;
        } catch (Exception ex) {
            ex.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    /**
     * 新增修改
     *
     * @param tjQuotaModelJsonData
     * @param request
     * @return
     * @throws IOException
     */
    @PostMapping(value = "updateTjDataSource", produces = "text/html;charset=UTF-8")
    public Envelop updateTjQuota(String tjQuotaModelJsonData, HttpServletRequest request) throws IOException {
        String url = "/tj/addTjQuota/";
        String[] strings = URLDecoder.decode(tjQuotaModelJsonData, "UTF-8").split(";");
        TjQuota detailModel = objectMapper.readValue(strings[0], TjQuota.class);
        try {
            if (!StringUtils.isEmpty(detailModel.getId())) {
                Long tjQuotaId = detailModel.getId();
                TjQuota updateTjQuota = tjQuotaService.getById(tjQuotaId);
                if (updateTjQuota!=null) {
                    updateTjQuota.setResultGetType(detailModel.getResultGetType());
                    updateTjQuota.setCode(detailModel.getCode());
                    updateTjQuota.setName(detailModel.getName());
                    updateTjQuota.setCron(detailModel.getCron());
                    updateTjQuota.setJobStatus(detailModel.getJobStatus());
                    updateTjQuota.setExecType(detailModel.getExecType());
                    updateTjQuota.setExecTime(detailModel.getExecTime());
                    updateTjQuota.setJobClazz(detailModel.getJobClazz());
                    updateTjQuota.setQuotaType(detailModel.getQuotaType());
                    updateTjQuota.setDataLevel(detailModel.getDataLevel());
                    updateTjQuota.setRemark(detailModel.getRemark());
                    TjQuotaDataSource tjquotaDataSource = null;
                    TjQuotaDataSave tjQuotaDataSave = null;
                    if(detailModel.getTjQuotaDataSource() != null){
                        tjquotaDataSource = detailModel.getTjQuotaDataSource();
                        tjquotaDataSource.setQuotaCode(detailModel.getCode());
                    }
                    if(detailModel.getTjQuotaDataSave() != null
                            && org.apache.commons.lang3.StringUtils.isNotEmpty(detailModel.getTjQuotaDataSave().getSaveCode())){
                        tjQuotaDataSave = detailModel.getTjQuotaDataSave();
                        tjQuotaDataSave.setQuotaCode(detailModel.getCode());
                    }
                    detailModel.setUpdateTime(new Date());
                    tjQuotaService.saves(detailModel, tjquotaDataSource, tjQuotaDataSave);
                    return ObjEnvelop.getSuccess("统计表更新成功!", detailModel);
                } else {
                    return failed("参数错误");
                }
            } else {
                TjQuotaDataSource tjquotaDataSource = null;
                TjQuotaDataSave tjQuotaDataSave = null;
                if(detailModel.getTjQuotaDataSource() != null){
                    tjquotaDataSource = detailModel.getTjQuotaDataSource();
                    tjquotaDataSource.setQuotaCode(detailModel.getCode());
                }
                if(detailModel.getTjQuotaDataSave() != null
                        && org.apache.commons.lang3.StringUtils.isNotEmpty(detailModel.getTjQuotaDataSave().getSaveCode())){
                    tjQuotaDataSave = detailModel.getTjQuotaDataSave();
                    tjQuotaDataSave.setQuotaCode(detailModel.getCode());
                }
                detailModel.setIsInitExec("0");
                detailModel.setStatus(1);
                detailModel.setCreateTime(new Date());
                detailModel.setUpdateTime(new Date());
                tjQuotaService.saves(detailModel, tjquotaDataSource, tjQuotaDataSave);
                return ObjEnvelop.getSuccess("统计表更新成功!", detailModel);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    /**
     * 删除
     *
     * @param tjQuotaId
     * @return
     */
    @PostMapping("deleteTjDataSave")
    public Envelop deleteTjQuota(Long tjQuotaId) {
        String url = "/tj/deleteTjQuota";
        //判断资源视图中有没有用到此视图,有用到 不允许删除
        String resQuotaUrl = "/resourceQuota/searchByQuotaId";
        try {
            List<RsResourceQuota> list = resourceQuotaService.search("quotaId=" + tjQuotaId);
            if (list.size()>0) {
                return failed("指标在视图中被使用暂时不能删除,若要删除先解除资源视图中指标关系");
            }
            TjQuota tjQuota = tjQuotaService.getById(tjQuotaId);
            tjQuota.setStatus(-1);
            tjQuotaService.save(tjQuota);
            return ObjEnvelop.getSuccess("统计指标表删除成功!");
        } catch (Exception e) {
            e.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    /**
     * 根据id获取消息
     * @param id
     * @return
     */
    @GetMapping("getTjQuotaById")
    public Envelop getTjQuotaById( Long id) {
        String url = "/tj/getTjQuotaById/" + id;
        Map<String, Object> params = new HashMap<>();
        params.put("id", id);
        try {
            TjQuota tjQuota = tjQuotaService.getById(id);
            if (null != tjQuota) {
                TjQuotaDataSave tjQuotaDataSave = tjQuotaDataSaveService.getByQuotaCode(tjQuota.getCode());
                TjQuotaDataSource tjQuotaDataSource = tjQuotaDataSourceService.getByQuotaCode(tjQuota.getCode());
                if (tjQuotaDataSave != null) {
                    TjDataSave tjDataSave = tjDataSaveService.getByCode(tjQuotaDataSave.getSaveCode());
                    tjQuotaDataSave.setName(tjDataSave.getName());
                }
                if (tjQuotaDataSource != null) {
                    TjDataSource tjDataSource = tjDataSourceService.getByCode(tjQuotaDataSource.getSourceCode());
                    tjQuotaDataSource.setName(tjDataSource.getName());
                }
                tjQuota.setTjQuotaDataSave(tjQuotaDataSave);
                tjQuota.setTjQuotaDataSource(tjQuotaDataSource);
            }
            return ObjEnvelop.getSuccess("统计指标表删除成功!",tjQuota);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("查询失败");
    }
    /**
     * 校验name是否唯一,true已存在
     *
     * @param name
     * @return
     */
    @GetMapping("hasExistsName")
    public Envelop hasExistsName(String name) {
        String url = "/tj/tjQuotaExistsName/" + name;
        try {
            String filter = "name=" + name;
            List<TjQuota> list = tjQuotaService.search(filter);
            return ObjEnvelop.getSuccess("查询成功",list.size() >0);
        } catch (Exception e) {
            e.getMessage();
        }
        return  failed("查询失败");
    }
    /**
     * 校验code是否唯一
     *
     * @param code
     * @return
     */
    @GetMapping("hasExistsCode")
    public Envelop hasExistsCode(String code) {
        String url = "/tj/tjQuotaExistsCode/" + code;
        try {
            String filter = "code=" + code;
            List<TjQuota> list = tjQuotaService.search(filter);
            return ObjEnvelop.getSuccess("查询成功",list.size() >0);
        } catch (Exception e) {
            e.getMessage();
        }
        return  failed("查询失败");
    }
    /**
     * 初始执行(全量统计)
     */
    @PostMapping("firstExecuteQuota")
    public Envelop firstExecuteQuota(Long tjQuotaId) {
        Map<String, Object> params = new HashMap<>();
        params.put("id", tjQuotaId);
        try {
            String url = "/job/firstExecuteQuota";
            return jobController.firstExecuteQuota(tjQuotaId);
        } catch (Exception e) {
            e.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    /**
     * 执行指标
     */
    @PostMapping("execuQuota")
    public Envelop execuQuota(Long tjQuotaId, String startDate, String endDate) {
        Envelop envelop = new Envelop();
        Map<String, Object> params = new HashMap<>();
        params.put("id", tjQuotaId);
        if (!StringUtils.isEmpty(startDate)) {
            params.put("startDate", startDate);
        }
        if (!StringUtils.isEmpty(endDate)) {
            params.put("endDate", endDate);
        }
        try {
            String url = "/job/execuJob";
            return jobController.executeQuota(tjQuotaId,startDate,endDate);
        } catch (Exception e) {
            e.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    /**
     * 指标结果页
     *
     * @param model
     * @return
     */
    @GetMapping("initialResult")
    public Envelop initialResult(Model model, long tjQuotaId, String quotaCode, String quotaType, String name) throws Exception {
        try {
            Map<String,String> map = new HashMap<>();
            List<TjQuotaDimensionSlave> slaveModelList = tjQuotaDimensionSlaveService.getTjQuotaDimensionSlaveByCode(quotaCode);
            if (slaveModelList.size() > 0) {
                int num = 1;
                for (TjQuotaDimensionSlave quotaDimensionSlaveModel : slaveModelList) {
                    TjDimensionSlave tjDimensionSlave = tjDimensionSlaveService.getTjDimensionSlaveByCode(quotaDimensionSlaveModel.getSlaveCode());
                    if (tjDimensionSlave!=null) {
                        map.put("slaveKey" + num + "Name", tjDimensionSlave.getName());
                        num++;
                    }
                }
            }
            return ObjEnvelop.getSuccess("查询成功",map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return failed("查询失败");
    }
    /**
     * 指标执行结果
     *
     * @param tjQuotaId
     * @return
     */
    @RequestMapping("selectQuotaResult")
    public Envelop selectQuotaResult(Long tjQuotaId, int page, int rows,
                                    String startTime, String endTime, String orgName,
                                    String province, String city, String district,String res, HttpServletRequest request) {
        String url = "/tj/tjGetQuotaResult";
        try {
            Map<String, Object> filters = new HashMap<>();
            filters.put("startTime", startTime);
            filters.put("endTime", endTime);
            filters.put("org", orgName);
            filters.put("province", province);
            filters.put("town", city);
            filters.put("district", district);
             // 结果大于0
            filters.put("result", res);
            try {
                List<SaveModel> saveModelList = new ArrayList<>();
                List<Map<String, Object>> resultList = quotaService.queryResultPage(tjQuotaId, filters.toString(), page, rows);
                if(resultList != null && resultList.size() > 0){
                    for(Map<String, Object> map : resultList){
                        SaveModel saveModel =  objectMapper.convertValue(map, SaveModel.class);
                        if(saveModel != null){
                            saveModelList.add(saveModel);
                        }
                    }
                }
                long totalCount = quotaService.getQuotaTotalCount(tjQuotaId,filters.toString());
                return PageEnvelop.getSuccessListWithPage("查询成功",saveModelList,page,rows,totalCount);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return failed("查询失败");
        } catch (Exception e) {
            e.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    /**
     * 获取指标日志信息
     *
     * @param
     * @return
     */
    @RequestMapping("queryQuotaLog")
    public Envelop queryQuotaLog(String quotaCode, String startTime, String endTime, int page, int rows) throws Exception {
        String url = "/tj/getTjQuotaLogList";
        String resultStr = "";
        Envelop envelop = new Envelop();
        Map<String, Object> params = new HashMap<>();
        params.put("startTime", startTime);
        params.put("endTime", endTime);
        params.put("quotaCode", quotaCode);
        params.put("fields", "");
        params.put("sorts", "");
        params.put("page", page);
        params.put("size", rows);
        try {
            Map<String, Object> conditionMap = new HashMap<>();
            conditionMap.put("quotaCode", quotaCode);
            conditionMap.put("page", page);
            conditionMap.put("pageSize", rows);
            Date startDate = DateTimeUtil.simpleDateTimeParse(startTime);
            Date endDate = DateTimeUtil.simpleDateTimeParse(endTime);
            if(null!=endDate){
                Calendar calendar   =   new GregorianCalendar();
                calendar.setTime(endDate);
                calendar.add(calendar.DATE,1);//把日期往后增加一天.整数往后推,负数往前移动
                endDate=calendar.getTime();   //日期往后推一天
            }
            conditionMap.put("startDate", startDate);
            conditionMap.put("endDate", endDate);
            List<TjQuotaLog> tjQuotaLogs = tjQuotaLogService.searchQuotaLogByParams(conditionMap);
            Long totalCount =Long.parseLong(tjQuotaLogService.searchQuotaLogByParamsTotalCount(conditionMap).toString());
            return PageEnvelop.getSuccessListWithPage("",tjQuotaLogs,page,rows,totalCount);
        } catch (Exception ex) {
            ex.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    /**
     * 获取quotaCode查询是否配置维度
     *
     * @param
     * @return
     */
    @RequestMapping("hasConfigDimension")
    public Envelop hasConfigDimension(String quotaCode) throws Exception {
        String url = "/tj/hasConfigDimension";
        try {
            String filters = "quotaCode=" + quotaCode;
            List<TjQuotaDimensionMain> list = tjQuotaDimensionMainService.search(filters);
            return ObjEnvelop.getSuccess("",list.size()>0);
        } catch (Exception e) {
            e.getMessage();
        }
        return failed("查询失败");
    }
    //带检索分页的查找指标方法,用于下拉框
    @RequestMapping("/rsQuota")
    public Envelop searchRsQuota(String searchParm, int page, int rows) {
        String url = "/tj/getTjQuotaList";
        StringBuffer stringBuffer = new StringBuffer();
        if (!StringUtils.isEmpty(searchParm)) {
            stringBuffer.append("name?" + searchParm + ";");
        }
        String filters = stringBuffer.toString();
        try {
            PageEnvelop PageEnvelop = new PageEnvelop();
            List<TjQuota> tjQuota = tjQuotaService.search(null, filters, null, page, rows);
            if(tjQuota != null){
                PageEnvelop.setDetailModelList(tjQuota);
                PageEnvelop.setTotalCount((int)tjQuotaService.getCount(filters));
                PageEnvelop.setStatus(200);
                PageEnvelop.setCurrPage(page);
                PageEnvelop.setPageSize(rows);
            }else{
                PageEnvelop.setStatus(200);
                PageEnvelop.setMessage("查询无数据");
                PageEnvelop.setTotalCount(0);
            }
            return PageEnvelop;
        } catch (Exception ex) {
            ex.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    @RequestMapping("/getTjQuotaChartList")
    public Envelop getQuotaChartList(String quotaCode, String name, int dictId, int page, int rows) {
        String url = "/tj/getTjQuotaChartList";
        Map<String, Object> params = new HashMap<>();
        params.put("filters", "");
        StringBuffer stringBuffer = new StringBuffer();
        if (!StringUtils.isEmpty(quotaCode)) {
            stringBuffer.append("quotaCode=" + quotaCode);
        }
        if (!StringUtils.isEmpty(name)) {
            stringBuffer.append("value?" + name);
        }
        String filters = stringBuffer.toString();
        if (!StringUtils.isEmpty(filters)) {
            params.put("filters", filters);
        }
        String filter = "";
        if (!StringUtils.isEmpty(dictId)) {
            filter = "dictId=" + dictId;
        }
        params.put("dictfilter", filter);
        params.put("page", page);
        params.put("size", rows);
        try {
            List<MConventionalDict> conventionalDictList = dictEntryService.search(null, filter, null, page, rows);
            List<MConventionalDict> mainModelList = new ArrayList<>();
            if (conventionalDictList.size() > 0) {
                Map<String,String> dictMap = new HashMap<>();
                for(MConventionalDict dict:mainModelList){
                    dictMap.put(dict.getCode(),dict.getValue());
                }
                List<TjQuotaChart> tjQuotaChartList = tjQuotaChartService.search(null, filters, null, page, rows);
                List<MConventionalDict> checkedConventionalDicts = new ArrayList<>();
                if (tjQuotaChartList.size() > 0) {
                    for (TjQuotaChart tjQuotaChartModel : tjQuotaChartList) {
                        MConventionalDict mConventionalDict = new MConventionalDict();
                        String key = tjQuotaChartModel.getChartId()+"";
                        if(dictMap.containsKey(key)){
                            mConventionalDict.setCode(key);
                            mConventionalDict.setValue(dictMap.get(key));
                            checkedConventionalDicts.add(mConventionalDict);
                        }
                    }
                }
                List<String> list = getAllCheckedTjQuotaChart(filters);
                for (int i = 0; i < mainModelList.size(); i++) {
                    if (list.contains(mainModelList.get(i).getCode())) {
                        mainModelList.get(i).setChecked(true);
                    } else {
                        mainModelList.get(i).setChecked(false);
                    }
                }
                return MixEnvelop.getSuccess("",checkedConventionalDicts,mainModelList,page,rows,dictEntryService.getCount(filter));
            } else {
                return success();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    public List<String> getAllCheckedTjQuotaChart(String filters) throws Exception{
        List<String> list = new ArrayList<>();
        List<TjQuotaChart> tjQuotaCharts = tjQuotaChartService.search(filters, null);
        List<TjQuotaChart>  tjQuotaChartModels = new ArrayList<>();
        if (tjQuotaCharts.size()> 0) {
            for (TjQuotaChart tjQuotaChartModel : tjQuotaCharts) {
                tjQuotaChartModels.add(tjQuotaChartModel);
                list.add(tjQuotaChartModel.getChartId()+"");
            }
        }
        return list;
    }
    /**
     * 添加主维度子表
     *
     * @param jsonModel 维度子表信息的json串
     * @param request
     * @return
     * @throws IOException
     */
    @RequestMapping(value = "addTjQuotaChart", produces = "text/html;charset=UTF-8")
    public Envelop addTjQuotaChart(String quotaCode, String jsonModel, HttpServletRequest request) throws IOException {
        String url = "/tj/batchTjQuotaChart";
        try {
            List<TjQuotaChart> list = objectMapper.readValue(jsonModel, new TypeReference<List<TjQuotaChart>>(){});
            if (list != null && list.size() > 0) {
                tjQuotaChartService.deleteByQuotaCode(list.get(0).getQuotaCode());
            }
            for (int i=0; i<list.size(); i++) {
                tjQuotaChartService.save(list.get(i));
            }
            return ObjEnvelop.getSuccess("指标图表信息更新成功!", list);
        } catch (RestClientException e) {
            e.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
    /**
     * 指标文件导入
     *
     * @param file
     * @param request
     * @param response
     * @return
     * @throws IOException
     */
    private static final String parentFile = "tjQuotaDataSet";
//    @RequestMapping(value = "import")
//    @ResponseBody
//    public void importData(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException {
//
//        try {
//            UsersModel user = getCurrentUserRedis(request);
//            writerResponse(response, 1 + "", "l_upd_progress");
//            request.setCharacterEncoding("UTF-8");
//            TjQuotaMsgReader excelReader = new TjQuotaMsgReader();
@ -616,35 +646,35 @@
//            writerResponse(response, "-1", "l_upd_progress");
//        }
//    }
//
//    protected void writerResponse(HttpServletResponse response, String body, String client_method) throws IOException {
//        StringBuffer sb = new StringBuffer();
//        sb.append("<script type=\"text/javascript\">//<![CDATA[\n");
//        sb.append("     parent.").append(client_method).append("(").append(body).append(");\n");
//        sb.append("//]]></script>");
//
//        response.setContentType("text/html;charset=UTF-8");
//        response.addHeader("Pragma", "no-cache");
//        response.setHeader("Cache-Control", "no-cache,no-store,must-revalidate");
//        response.setHeader("Cache-Control", "pre-check=0,post-check=0");
//        response.setDateHeader("Expires", 0);
//        response.getWriter().write(sb.toString());
//        response.flushBuffer();
//    }
//
//    /**
//     * 验证指标编码、名称、指标分类、主维度、细维度
//     *
//     * @param excelReader         待验证的数据
//     * @param errorLs             指标错误数据
//     * @param correctLs           指标正常数据
//     * @param quotaMainErrorLs    主维度错误数据
//     * @param quotaMainCorrectLs  主维度正常数据
//     * @param quotaSlaveErrorLs   细维度错误数据
//     * @param quotaSlaveCorrectLs 细维度正常数据
//     * @return
//     * @throws Exception
//     */
    protected void writerResponse(HttpServletResponse response, String body, String client_method) throws IOException {
        StringBuffer sb = new StringBuffer();
        sb.append("<script type=\"text/javascript\">//<![CDATA[\n");
        sb.append("     parent.").append(client_method).append("(").append(body).append(");\n");
        sb.append("//]]></script>");
        response.setContentType("text/html;charset=UTF-8");
        response.addHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache,no-store,must-revalidate");
        response.setHeader("Cache-Control", "pre-check=0,post-check=0");
        response.setDateHeader("Expires", 0);
        response.getWriter().write(sb.toString());
        response.flushBuffer();
    }
    /**
     * 验证指标编码、名称、指标分类、主维度、细维度
     *
     * @param excelReader         待验证的数据
     * @param errorLs             指标错误数据
     * @param correctLs           指标正常数据
     * @param quotaMainErrorLs    主维度错误数据
     * @param quotaMainCorrectLs  主维度正常数据
     * @param quotaSlaveErrorLs   细维度错误数据
     * @param quotaSlaveCorrectLs 细维度正常数据
     * @return
     * @throws Exception
     */
//    private Map<String,Object> validate(UsersModel user,TjQuotaMsgReader excelReader,
//                          List<TjQuotaMsg> errorLs, List<TjQuotaMsg> correctLs ,
//                           List<TjQuotaDMainMsg>  quotaMainErrorLs ,List<TjQuotaDMainMsg>  quotaMainCorrectLs ,
@ -791,72 +821,62 @@
//        }
//        return map;
//    }
//
//    /**
//     * 获取已经存在的指标编码/指标名称
//     *
//     * @param name  检索字段名称
//     * @param codes 检索列表
//     * @return
//     * @throws Exception
//     */
//    private Set<String> findExistCodeOrName(String name, Set<String> codes) throws Exception {
//
//        Map<String, Object> conditionMap = new HashMap<>();
//        String rs = "";
//        //获取存在的主维度
//        if (!StringUtils.isEmpty(name) && name.equals("mainCode")) {
//            if (null != codes && codes.size() > 0) {
//                conditionMap.put("mainCode", toJson(codes));
//                rs = HttpClientUtil.doPost(comUrl + "/quota/TjDimensionMainIsExist", conditionMap);
//            }
//        } else if (!StringUtils.isEmpty(name) && name.equals("slaveCode")) {
//            //获取存在的细维度
//            if (null != codes && codes.size() > 0) {
//                conditionMap.put("slaveCode", toJson(codes));
//                rs = HttpClientUtil.doPost(comUrl + "/quota/TjDimensionSlaveIsExist", conditionMap);
//            }
//        } else {
//            if (null != codes && codes.size() > 0) {
//                conditionMap.put("type", name);
//                conditionMap.put("json", toJson(codes));
//                rs = HttpClientUtil.doPost(comUrl + "/quota/type_isExist", conditionMap);
//            }
//        }
//
//        return objectMapper.readValue(rs, new TypeReference<Set<String>>() {
//        });
//    }
//
//    /**
//     * 根据指标分类的名称获取指标id和name
//     *
//     * @param names 指标分类名称
//     * @return
//     * @throws Exception
//     */
//    private Map<String, String> findExistQuotaType(Set<String> names) throws Exception {
//        Map map = new HashMap<>();
//        String resultStr = "";
//        if (null != names && names.size() > 0) {
//            map.put("name", toJson(names));
//            resultStr = HttpClientUtil.doPost(comUrl + "/quotaCategory/getQuotaCategoryByName", map, username, password);
//        }
//        Envelop envelopAddr = objectMapper.readValue(resultStr, Envelop.class);
//        Map<String, String> quotaCategoryMap = new HashMap<>();
//        if (null != envelopAddr && null != envelopAddr.getObj()) {
//            quotaCategoryMap = objectMapper.readValue(toJson(envelopAddr.getObj()), new TypeReference<Map<String, String>>() {
//            });
//        }
//        return quotaCategoryMap;
//    }
//
//    /**
//     * 指标、数据源、数据存储、主维度、细维度整体入库
//     *
//     * @param lsMap saveLs、quotaMainLs、quotaSlaveLs
//     * @return
//     */
    /**
     * 获取已经存在的指标编码/指标名称
     *
     * @param name  检索字段名称
     * @param codes 检索列表
     * @return
     * @throws Exception
     */
    private List<String> findExistCodeOrName(String name, Set<String> codes) throws Exception {
        Map<String, Object> conditionMap = new HashMap<>();
        List values = new ArrayList();
        //获取存在的主维度
        if (!StringUtils.isEmpty(name) && name.equals("mainCode")) {
            if (null != codes && codes.size() > 0) {
                values = tjDimensionMainService.tjDimensionMainIsExist(toEntity(toJson(codes), String[].class));
            }
        } else if (!StringUtils.isEmpty(name) && name.equals("slaveCode")) {
            //获取存在的细维度
            if (null != codes && codes.size() > 0) {
                values = tjDimensionSlaveService.tjDimensionSlaveIsExist(toEntity(toJson(codes), String[].class));
            }
        } else {
            if (null != codes && codes.size() > 0) {
                values = tjQuotaService.tjQuotaTypeIsExist(name,toEntity(toJson(codes), String[].class));
            }
        }
        return values;
    }
    /**
     * 根据指标分类的名称获取指标id和name
     *
     * @param names 指标分类名称
     * @return
     * @throws Exception
     */
    private Map<String, String> findExistQuotaType(Set<String> names) throws Exception {
        Map<String, String> map = new HashMap<>();
        List<Object> list = (List<Object>)quotaCategoryService.getQuotaCategoryByName(toEntity(toJson(names), String[].class));
        for(int i = 0 ;i < list.size() ; i++){
            Object[] objectList=(Object[])list.get(i);
            if(null!=objectList[0]&&null!=objectList[1]){
                map.put(objectList[0].toString(), objectList[1].toString());
            }
        }
        return  map;
    }
    /**
     * 指标、数据源、数据存储、主维度、细维度整体入库
     *
     * @return
     */
//    private Envelop saveData(Map<String, Object> lsMap) {
//        Envelop ret = new Envelop();
//        Map map = new HashMap<>();
@ -872,72 +892,63 @@
//            return ret;
//        }
//    }
//
//
//    @RequestMapping("/downLoadErrInfo")
//    public void downLoadErrInfo(String f, String datePath, HttpServletResponse response) throws IOException {
//
//        try {
//            f = datePath + TemPath.separator + f;
//            downLoadFile(TemPath.getFullPath(f, parentFile), response);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    public void downLoadFile(String filePath, HttpServletResponse response) throws IOException {
//
//        InputStream fis = null;
//        OutputStream toClient = null;
//        try {
//            File file = new File(filePath);
//            fis = new BufferedInputStream(new FileInputStream(file));
//            byte[] buffer = new byte[fis.available()];
//            fis.read(buffer);
//            fis.close();
//
//            response.reset();
//            response.setContentType("octets/stream");
//            response.addHeader("Content-Length", "" + file.length());
//            response.addHeader("Content-Disposition", "attachment; filename="
//                    + new String(file.getName().getBytes("gb2312"), "ISO8859-1"));
//
//            toClient = new BufferedOutputStream(response.getOutputStream());
//            toClient.write(buffer);
//            toClient.flush();
//            toClient.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//            if (fis != null){
//                fis.close();
//            }
//            if (toClient != null){
//                toClient.close();
//            }
//        }
//    }
//
//    /**
//     * 停止执行指标
//     */
//    @RequestMapping("removeQuota")
//    public Object removeQuota(Long tjQuotaId) {
//        Envelop envelop = new Envelop();
//        Map<String, Object> params = new HashMap<>();
//        params.put("id", tjQuotaId);
//        try {
//            String url = "/quota/api/v1.0/job/removeJob";
//            String resultStr = HttpClientUtil.doPost(adminInnerUrl + url, params, username, password);
//            if(resultStr.equals("true")){
//                envelop.setSuccessFlg(true);
//            }else{
//                envelop.setSuccessFlg(false);
//            }
//            return envelop;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return failed(ERR_SYSTEM_DES);
//        }
//    }
//
//}
    @RequestMapping("/downLoadErrInfo")
    public void downLoadErrInfo(String f, String datePath, HttpServletResponse response) throws IOException {
        try {
            f = datePath + TemPath.separator + f;
            downLoadFile(TemPath.getFullPath(f, parentFile), response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void downLoadFile(String filePath, HttpServletResponse response) throws IOException {
        InputStream fis = null;
        OutputStream toClient = null;
        try {
            File file = new File(filePath);
            fis = new BufferedInputStream(new FileInputStream(file));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            response.reset();
            response.setContentType("octets/stream");
            response.addHeader("Content-Length", "" + file.length());
            response.addHeader("Content-Disposition", "attachment; filename="
                    + new String(file.getName().getBytes("gb2312"), "ISO8859-1"));
            toClient = new BufferedOutputStream(response.getOutputStream());
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (Exception e) {
            e.printStackTrace();
            if (fis != null){
                fis.close();
            }
            if (toClient != null){
                toClient.close();
            }
        }
    }
    /**
     * 停止执行指标
     */
    @RequestMapping("removeQuota")
    public Object removeQuota(Long tjQuotaId) {
        Envelop envelop = new Envelop();
        try {
            return jobController.removeQuota(tjQuotaId);
        } catch (Exception e) {
            e.printStackTrace();
            return failed(ERR_SYSTEM_DES);
        }
    }
}

+ 9 - 8
svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/controller/JobController.java

@ -2,6 +2,7 @@ package com.yihu.jw.basic.quota.controller;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.jw.basic.quota.service.JobService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
@ -25,8 +26,8 @@ import org.springframework.web.bind.annotation.RestController;
@Api(description = "指标任务控制")
public class JobController extends EnvelopRestEndpoint {
//    @Autowired
//    private JobService jobService;
    @Autowired
    private JobService jobService;
    /**
     * 初始执行指标
@ -35,9 +36,9 @@ public class JobController extends EnvelopRestEndpoint {
    @RequestMapping(value = ServiceApi.TJ.FirstExecuteQuota, method = RequestMethod.POST)
    public Envelop firstExecuteQuota(
            @ApiParam(name = "id", value = "指标ID", required = true)
            @RequestParam(value = "id", required = true) Integer id) {
            @RequestParam(value = "id", required = true) Long id) {
        try {
//            jobService.executeJob(id, "1", null, null);
            jobService.executeJob(id, "1", null, null);
            return success("执行成功");
        } catch (Exception e) {
            e.printStackTrace();
@ -52,13 +53,13 @@ public class JobController extends EnvelopRestEndpoint {
    @RequestMapping(value = ServiceApi.TJ.TjQuotaExecute, method = RequestMethod.POST)
    public Envelop executeQuota(
            @ApiParam(name = "id", value = "指标ID", required = true)
            @RequestParam(value = "id", required = true) Integer id,
            @RequestParam(value = "id", required = true) Long id,
            @ApiParam(name = "startDate", value = "起始日期")
            @RequestParam(value = "startDate", required = false) String startDate,
            @ApiParam(name = "endDate", value = "截止日期")
            @RequestParam(value = "endDate", required = false) String endDate) {
        try {
//            jobService.executeJob(id, "2", startDate, endDate);
            jobService.executeJob(id, "2", startDate, endDate);
            return success("执行成功");
        } catch (Exception e) {
            e.printStackTrace();
@ -70,9 +71,9 @@ public class JobController extends EnvelopRestEndpoint {
    @RequestMapping(value = ServiceApi.TJ.TjQuotaRemove, method = RequestMethod.POST)
    public Envelop removeQuota(
            @ApiParam(name = "id", value = "指标ID", required = true)
            @RequestParam(value = "id", required = true) Integer id) {
            @RequestParam(value = "id", required = true) Long id) {
        try {
//            jobService.removeJob(id);
            jobService.removeJob(id);
            return success("执行成功");
        } catch (Exception e) {
            e.printStackTrace();

+ 219 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/model/QuotaVo.java

@ -0,0 +1,219 @@
package com.yihu.jw.basic.quota.model;
import java.io.Serializable;
import java.util.Date;
/**
 * Created by chenweida on 2017/6/1.
 */
public class QuotaVo implements Serializable {
    private long serialVersionUID = 1L;
    private Integer id;
    private String code;
    private String compute;
    private String name;
    private String cron;//quartz时间表达式
    private String dataLevel;//1 全量  2增量
    private String jobClazz;
    private Date createTime;
    private String createUser;
    private String createUserName;
    private Date updateTime;
    private String updateUser;
    private String updateUserName;
    private String execType;
    private String status;
    private String remark;
    //周期指标执行状态:0未开启,1执行中
    private String jobStatus;
    private int start ;
    private int rows;
    private String executeFlag;
    @Override
    public String toString() {
        return "QuotaVo{" +
                "id=" + id +
                ", code='" + code + '\'' +
                ", compute='" + compute + '\'' +
                ", name='" + name + '\'' +
                ", cron='" + cron + '\'' +
                ", dataLevel='" + dataLevel + '\'' +
                ", jobClazz='" + jobClazz + '\'' +
                ", createTime=" + createTime +
                ", createUser='" + createUser + '\'' +
                ", createUserName='" + createUserName + '\'' +
                ", updateTime=" + updateTime +
                ", updateUser='" + updateUser + '\'' +
                ", updateUserName='" + updateUserName + '\'' +
                ", execType='" + execType + '\'' +
                ", status='" + status + '\'' +
                ", jobStatus='" + jobStatus + '\'' +
                ", remark='" + remark + '\'' +
                '}';
    }
    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 String getJobClazz() {
        return jobClazz;
    }
    public void setJobClazz(String jobClazz) {
        this.jobClazz = jobClazz;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getCreateUser() {
        return createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    public String getCreateUserName() {
        return createUserName;
    }
    public void setCreateUserName(String createUserName) {
        this.createUserName = createUserName;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getUpdateUser() {
        return updateUser;
    }
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser;
    }
    public String getUpdateUserName() {
        return updateUserName;
    }
    public void setUpdateUserName(String updateUserName) {
        this.updateUserName = updateUserName;
    }
    public String getExecType() {
        return execType;
    }
    public void setExecType(String execType) {
        this.execType = execType;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getCompute() {
        return compute;
    }
    public void setCompute(String compute) {
        this.compute = compute;
    }
    public String getCron() {
        return cron;
    }
    public void setCron(String cron) {
        this.cron = cron;
    }
    public String getDataLevel() {
        return dataLevel;
    }
    public void setDataLevel(String dataLevel) {
        this.dataLevel = dataLevel;
    }
    public String getJobStatus() {
        return jobStatus;
    }
    public void setJobStatus(String jobStatus) {
        this.jobStatus = jobStatus;
    }
    public int getStart() {
        return start;
    }
    public void setStart(int start) {
        this.start = start;
    }
    public int getRows() {
        return rows;
    }
    public void setRows(int rows) {
        this.rows = rows;
    }
    public String getExecuteFlag() {
        return executeFlag;
    }
    public void setExecuteFlag(String executeFlag) {
        this.executeFlag = executeFlag;
    }
}

+ 109 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/service/JobService.java

@ -0,0 +1,109 @@
package com.yihu.jw.basic.quota.service;
import com.yihu.jw.basic.es.EsResultExtract;
import com.yihu.jw.basic.quota.dao.XTjQuotaRepository;
import com.yihu.jw.basic.quota.model.QuotaVo;
import com.yihu.jw.basic.quota.util.QuartzHelper;
import com.yihu.jw.entity.ehr.quota.TjQuota;
import org.quartz.ObjectAlreadyExistsException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
 * @author chenweida
 */
@Service
public class JobService {
    @Autowired
    private QuartzHelper quartzHelper;
    @Autowired
    private XTjQuotaRepository quotaDao;
    @Autowired
    private EsResultExtract esResultExtract;
    /**
     * 启动指标任务
     *
     * @param id          指标ID
     * @param executeFlag 执行动作标识,1:初始执行(全量统计),2:立即执行、周期执行(增量统计)
     * @param startDate   抽取数据起始日期。初始执行时为NULL;立即执行时需要传值;周期执行时也为NULL,如果是基础指标周期执行,后续默认赋值昨天开始。
     * @param endDate     抽取数据截止日期。初始执行时无NULL;立即执行时需要传值;周期执行时也为NULL,如果是基础指标周期执行,后续默认赋值昨天截止。
     * @throws Exception
     */
    public void executeJob(Long id, String executeFlag, String startDate, String endDate) throws Exception {
        TjQuota tjQuota = quotaDao.getOne(id);
        if (tjQuota != null) {
            QuotaVo quotaVo = new QuotaVo();
            BeanUtils.copyProperties(tjQuota, quotaVo);
            Map<String, Object> params = new HashMap<>();
            params.put("quota", quotaVo);
            params.put("executeFlag", executeFlag);
            params.put("startTime", startDate);
            params.put("endTime", endDate);
            String quotaCode = quotaVo.getCode().replace("_", "");
            String quotaCodeImmediately = quotaCode + "immediately";
            boolean existJob = quartzHelper.isExistJob(quotaCode);
            boolean existJobImmediately = quartzHelper.isExistJob(quotaCodeImmediately);
            if (existJob && "0".equals(quotaVo.getJobStatus())) {
                //周期执行jobKey
                quartzHelper.removeJob(quotaCode);
            }
            if (existJobImmediately) {
                //立即执行jobKey
                quartzHelper.removeJob(quotaCodeImmediately);
            }
            //往quartz框架添加任务
            if ((!StringUtils.isEmpty(executeFlag) && executeFlag.equals("1")) || // 初始执行
                    (!StringUtils.isEmpty(tjQuota.getJobClazz()) && tjQuota.getExecType().equals("1"))) { // 立即执行
               try {
                   quartzHelper.startNow(Class.forName(quotaVo.getJobClazz()), quotaCodeImmediately, params);
               }catch (Exception e){
                   throw  new ObjectAlreadyExistsException(quotaCodeImmediately + "," + tjQuota.getName() + "指标正在执行!");
               }
            } else {
                //周期执行指标 更新指标执行状态:0未开启,1执行中
                tjQuota.setJobStatus("1");
                quotaDao.save(tjQuota);
                quartzHelper.addJob(Class.forName(quotaVo.getJobClazz()), quotaVo.getCron(), quotaCode, params);
            }
        }
    }
    /**
     * 停止指标任务
     *
     * @param id 指标ID
     * @throws Exception
     */
    public void removeJob(Long id) throws Exception {
        TjQuota tjQuota = quotaDao.getOne(id);
        if (tjQuota != null) {
            QuotaVo quotaVo = new QuotaVo();
            BeanUtils.copyProperties(tjQuota, quotaVo);
            String quotaCode = quotaVo.getCode().replace("_", "");
            String quotaCodeImmediately = quotaCode + "immediately";
            boolean existJob = quartzHelper.isExistJob(quotaCode);
            boolean existJobImmediately = quartzHelper.isExistJob(quotaCodeImmediately);
            if (existJob) {
                //周期执行jobKey
                quartzHelper.removeJob(quotaCode);
            }
            if (existJobImmediately) {
                //立即执行jobKey
                quartzHelper.removeJob(quotaCodeImmediately);
            }
            //周期执行指标 更新指标执行状态:0未开启,1执行中
            tjQuota.setJobStatus("0");
            quotaDao.save(tjQuota);
        }
    }
}

+ 35 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/service/TjQuotaLogService.java

@ -27,6 +27,41 @@ public class TjQuotaLogService extends BaseJpaService<TjQuotaLog, XTjQuotaLogRep
    @Autowired
    XTjQuotaLogRepository tjQuotaLogRepository;
    public List<TjQuotaLog> searchQuotaLogByParams(Map<String, Object> args) {
        Session session = entityManager.unwrap(Session.class);
        String quotaCode = (String) args.get("quotaCode");
        Integer page = (Integer) args.get("page");
        Integer pageSize = (Integer) args.get("pageSize");
        Date startTime = (Date) args.get("startDate");
        Date endTime = (Date) args.get("endDate");
        String hql = "from TjQuotaLog where 1=1";
        if (!StringUtils.isEmpty(quotaCode)) {
            hql += " and quotaCode = :quotaCode";
        }
        if (!StringUtils.isEmpty(startTime)) {
            hql += " and startTime >= :startTime";
        }
        if (!StringUtils.isEmpty(endTime)) {
            hql += " and endTime <= :endTime";
        }
        hql += " order by startTime desc";
        Query query = session.createQuery(hql);
        if (!StringUtils.isEmpty(quotaCode)) {
            query.setString("quotaCode", quotaCode);
        }
        if (!StringUtils.isEmpty(startTime)) {
            query.setDate("startTime",startTime);
        }
        if (!StringUtils.isEmpty(endTime)) {
            query.setDate("endTime", endTime);
        }
        query.setMaxResults(pageSize);
        query.setFirstResult((page - 1) * pageSize);
        List<TjQuotaLog> tjQuotaLogs = query.list();
        return tjQuotaLogs;
    }
    public Integer searchQuotaLogByParamsTotalCount(Map<String, Object> args) {
        Session session = entityManager.unwrap(Session.class);

+ 110 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/quota/util/QuartzHelper.java

@ -0,0 +1,110 @@
package com.yihu.jw.basic.quota.util;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.Map;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
@Component("quartzHelper")
public class QuartzHelper {
    @Autowired
    private SchedulerFactoryBean schedulerFactoryBean;
    private Scheduler scheduler = null;
    @PostConstruct
    public void init() {
        try {
            scheduler = schedulerFactoryBean.getScheduler();
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
    public void addJob(Class jobClass, String cronString, String jobKey,
                       Map<String, Object> params) throws Exception {
        if (!CronExpression.isValidExpression(cronString)) {
            throw new Exception("cronExpression is not a valid Expression");
        }
        try {
            JobDetail job = JobBuilder.newJob(jobClass)
                    .withIdentity("job-id:" + jobKey, "job-group:" + jobKey)
                    .build();
            JobDataMap jobDataMap = job.getJobDataMap();
            jobDataMap.putAll(params);
            CronTrigger trigger = TriggerBuilder
                    .newTrigger()
                    .withIdentity("trigger-name:" + jobKey,
                            "trigger-group:" + jobKey)
                    .withSchedule(CronScheduleBuilder.cronSchedule(cronString))
                    .build();
            scheduler.scheduleJob(job, trigger);
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
    public void removeJob(String jobKeyString) throws Exception {
        TriggerKey triggerKey = new TriggerKey("trigger-name:" + jobKeyString,
                "trigger-group:" + jobKeyString);
        JobKey jobName = new JobKey("job-group:" + jobKeyString, "job-id:"
                + jobKeyString);
        scheduler.pauseTrigger(triggerKey);// 停止触发器
        scheduler.unscheduleJob(triggerKey);// 移除触发器
        scheduler.deleteJob(jobName);// 删除任务
    }
    public boolean isExistJob(String jobKey) throws SchedulerException {
        JobKey jk = new JobKey("job-id:" + jobKey, "job-group:" + jobKey);
        if (scheduler.checkExists(jk)) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 立即执行任务。
     *
     * @param jobClass
     * @param id
     * @param params
     * @throws Exception
     */
    public void startNow(Class jobClass, String id, Map<String, Object> params) throws Exception {
        startAt(new Date(), jobClass, id, params);
    }
    /**
     * 在指定时间点执行。
     *
     * @param time
     * @param jobClass
     * @param id
     * @param params
     * @throws Exception
     */
    public void startAt(Date time, Class jobClass, String id, Map<String, Object> params) throws Exception {
        JobDetail job = JobBuilder.newJob(jobClass).
                withIdentity("job-id:" + id, "job-group:" + id)
                .build();
        JobDataMap jobDataMap = job.getJobDataMap();
        if(null != params) jobDataMap.putAll(params);
        SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger-id:" + id, "group-group:" + id)
                .startAt(time)
                .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(0).withMisfireHandlingInstructionFireNow())
                .build();
        scheduler.scheduleJob(job, trigger);
        scheduler.start();
    }
}

+ 5 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/user/service/GetInfoService.java

@ -8,13 +8,17 @@ import com.yihu.jw.basic.org.service.OrgService;
import com.yihu.jw.basic.user.dao.RolesDao;
import com.yihu.jw.basic.user.dao.XUserRepository;
import com.yihu.jw.basic.user.dao.RoleUserDao;
import com.yihu.jw.util.http.HttpClientUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2017/7/19.
@ -61,6 +65,7 @@ public class GetInfoService {
        return roleIdList;
    }
    /**
     * 获取角色所对应的appId
     * @param userId

+ 39 - 0
svr/svr-basic/src/main/java/com/yihu/jw/basic/util/TemPath.java

@ -0,0 +1,39 @@
package com.yihu.jw.basic.util;
import com.yihu.jw.util.date.DateUtil;
import org.apache.log4j.Logger;
import java.io.File;
import java.io.IOException;
/**
 * @author lincl
 * @version 1.0
 * @created 2016/6/19
 */
public class TemPath {
    public static Logger logger  = Logger.getLogger(TemPath.class);
    public final static String tmpdir = System.getProperty("java.io.tmpdir");
    public final static String separator = System.getProperty("file.separator");
    public final static String defPath = "ehr" + separator;
    public static String createFileName(String userId, String type, String parentFile, String fileType) throws IOException {
        File file = new File( tmpdir + separator + defPath + parentFile + separator);
        if(!file.exists())
            file.mkdirs();
        String curPath = DateUtil.getCurrentString("yyyy_MM_dd") + separator;
        String fileUrl = tmpdir + separator + defPath + parentFile + separator + curPath;
        logger.warn("upload addrr = " + fileUrl);
        file = new File( fileUrl );
        if(!file.exists())
            file.mkdirs();
        return curPath + DateUtil.getCurrentString("HHmmss") + "_" + userId + "_" + type + fileType;
    }
    public static String getFullPath(String fileName, String parent){
        return tmpdir + separator + defPath + parent + separator + fileName;
    }
}