Jelajahi Sumber

代码修改

LAPTOP-KB9HII50\70708 11 bulan lalu
induk
melakukan
083776d911

+ 78 - 0
business/es-service/src/main/java/com/yihu/jw/es/service/DataService.java

@ -0,0 +1,78 @@
package com.yihu.jw.es.service;
import com.alibaba.fastjson.JSON;
import com.yihu.jw.elasticsearch.ElasticSearch7Helper;
import com.yihu.jw.es.util.SaveModel;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by yeshijie on 2024/8/15.
 */
@Service
public class DataService {
    private Logger logger = LoggerFactory.getLogger(DataService.class);
    @Autowired
    private ElasticSearch7Helper elasticSearch7Helper;
    @Resource(name="restHighLevelClient")
    private RestHighLevelClient restHighLevelClient;
    private final String esIndex = "hlw_quota_prod";
    /**
     * 删除 某个指标某一天的某个timelevel的数据
     *
     */
    public void deleteData(Date quotaDate, String quotaCode, String timeLevel) {
        try {
            //先根据条件查找出来
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(
                    new BoolQueryBuilder()
                            .must(QueryBuilders.matchQuery("quotaCode", quotaCode))
                            .must(QueryBuilders.matchQuery("timeLevel", timeLevel))
                            .must(QueryBuilders.matchQuery("quotaDate", quotaDate))
            ).size(50000);//一次取10000条
            List<String> result = elasticSearch7Helper.search(esIndex,searchSourceBuilder);
            List<SaveModel> saveModels = new ArrayList<>();
            for (String s:result){
                SaveModel saveModel = new SaveModel();
                saveModel = JSON.parseObject(s,SaveModel.class);
                saveModels.add(saveModel);
            }
            //根据id批量删除
            BulkRequest bulkRequest = new BulkRequest();
//            bulkRequest.timeout(TimeValue.timeValueSeconds(60));
            for (SaveModel obj : saveModels) {
                bulkRequest.add(new DeleteRequest(esIndex)
                        .id(obj.getId()));
            }
            logger.info("delete size:"+result.size());
            if (saveModels!=null&&saveModels.size()!=0){
                BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
                logger.info(bulkResponse.buildFailureMessage());
                logger.info("delete data count:" + saveModels.size());
                logger.info("delete flag:" + !bulkResponse.hasFailures());
            }
        } catch (Exception e) {
            logger.info("delete error:"+e.getMessage());
        }
    }
}

+ 9 - 0
common/common-entity/src/db/2024.sql

@ -343,3 +343,12 @@ INSERT INTO `wlyy_doctor_scheme_blood_pressure` (`id`, `name`, `code`, `doctorco
INSERT INTO `wlyy_doctor_scheme_blood_pressure` (`id`, `name`, `code`, `doctorcode`, `dayofweek`, `early_morning`, `early_morning_time`, `morning`, `morning_time`, `noon`, `noon_time`, `after_noon`, `after_noon_time`, `night`, `night_time`, `create_time`, `alert_tag`, `content`, `del`) VALUES ('5', '基础监测方案', 'default', NULL, '5', '1', '10:00:00', '0', NULL, '0', NULL, '0', NULL, '0', NULL, '2017-01-01 00:00:32', '1', '针对血压相对稳定或微小波动的用户', '0');
INSERT INTO `wlyy_doctor_scheme_blood_pressure` (`id`, `name`, `code`, `doctorcode`, `dayofweek`, `early_morning`, `early_morning_time`, `morning`, `morning_time`, `noon`, `noon_time`, `after_noon`, `after_noon_time`, `night`, `night_time`, `create_time`, `alert_tag`, `content`, `del`) VALUES ('6', '基础监测方案', 'default', NULL, '6', '1', '10:00:00', '0', NULL, '0', NULL, '0', NULL, '0', NULL, '2017-01-01 00:00:32', '1', '针对血压相对稳定或微小波动的用户', '0');
INSERT INTO `wlyy_doctor_scheme_blood_pressure` (`id`, `name`, `code`, `doctorcode`, `dayofweek`, `early_morning`, `early_morning_time`, `morning`, `morning_time`, `noon`, `noon_time`, `after_noon`, `after_noon_time`, `night`, `night_time`, `create_time`, `alert_tag`, `content`, `del`) VALUES ('7', '基础监测方案', 'default', NULL, '7', '1', '10:00:00', '0', NULL, '0', NULL, '0', NULL, '0', NULL, '2017-01-01 00:00:32', '1', '针对血压相对稳定或微小波动的用户', '0');
INSERT INTO `base`.`wlyy_job_config_new` (`id`, `job_name`, `job_info`, `job_type`, `area_level`, `job_class`, `sql`,
`sql_count`, `sql_day`, `sql_year`, `cache_key`, `quartz_cron`, `status`, `quota_id`, `del`, `extract_type`,
`time_level`, `increment_interval`) VALUES ('78', '护理咨询-门诊状态', '护理咨询-门诊状态', '2', '6',
 'com.yihu.jw.statistics.job.business.MysqlToEsQuotaJob', 'SELECT c.id AS business_id, c.doctor AS doctor,CONCAT(c.outpatient_status,\'\') AS slaveKey2 , CONCAT(c.type,\'\') as slaveKey1 FROM wlyy_consult_outpatient_info c WHERE c.type =18 ', 'SELECT COUNT(c.id) FROM wlyy_consult_outpatient_info c WHERE c.type =18 ', 'AND c.create_time <:endTime  AND c.create_time  >=:startTime ', NULL, NULL, '0 30 0 * * ?', '0', '78', '1', NULL, '3', '1');
INSERT INTO `base`.`dimension_quota` (`id`, `quota_code`, `dimension_code`, `dict_sql`, `convert_clazz`, `sort`, `key`)
VALUES ('64', '78', '8', 'select s.dict_code code,s.dict_value name from wlyy_hospital_sys_dict s where  s.dict_name=\'OUT_PATIENT_STATUS\'', NULL, '2', 'slaveKey2');

+ 20 - 0
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/DsyyPrescriptionCotroller.java

@ -1,6 +1,7 @@
package com.yihu.jw.hospital.endpoint.prescription;
import com.yihu.jw.elasticsearch.ElasticSearch7Util;
import com.yihu.jw.es.service.DataService;
import com.yihu.jw.es.util.ElasticsearchUtil;
import com.yihu.jw.hospital.prescription.service.DsyyPrescriptionService;
import com.yihu.jw.hospital.prescription.service.entrance.DsyyEntranceService;
@ -9,9 +10,11 @@ import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
import com.yihu.jw.util.date.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;
@ -38,6 +41,23 @@ public class DsyyPrescriptionCotroller extends EnvelopRestEndpoint {
    private ElasticSearch7Util elasticSearch7Util;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DataService dataService;
    @PostMapping(value = "open/exportExcel/deleteData")
    @ApiOperation(value = "删除es数据")
    public Envelop deleteData(String quotaDate, String quotaCode, String timeLevel){
        try {
            if(StringUtils.isBlank(quotaDate)||StringUtils.isBlank(quotaCode)||StringUtils.isBlank(timeLevel)){
                return Envelop.getError("参数错误");
            }
            dataService.deleteData(DateUtil.strToDate(quotaDate, "yyyy-MM-dd"),quotaCode,timeLevel);
            return Envelop.getSuccess("ok");
        }catch (Exception e){
            e.printStackTrace();
            return Envelop.getError("失败");
        }
    }
    @PostMapping(value = "open/exportExcel/dmSql")
    @ApiOperation(value = "执行sql语句")

+ 3 - 3
svr/svr-statistics-hlw/src/main/java/com/yihu/jw/statistics/job/business/MysqlToEsQuotaJob.java

@ -150,7 +150,7 @@ public class MysqlToEsQuotaJob implements Job {
     */
    private void computequota() {
        try {
            logger.info("========================quotaCode:" + wlyyJobCongId + "," + DateUtil.dateToStr(quotaDate, "yyyy-MM-dd") + ",timeLevel:" + timeLevel + " start========================");
            logger.info("===quotaCode:" + wlyyJobCongId + "," + DateUtil.dateToStr(quotaDate, "yyyy-MM-dd") + ",timeLevel:" + timeLevel + " start==========");
            QuartzJobLog tjQuotaLog = new QuartzJobLog();
            tjQuotaLog.setJobId(wlyyJobCongId);
            tjQuotaLog.setJobStartTime(new Date());
@ -178,7 +178,7 @@ public class MysqlToEsQuotaJob implements Job {
            tjQuotaLog.setJobEndTime(new Date());
            tjQuotaLog.setJobContent(JSONArray.fromObject(filterModel.getErrorModels()).toString());
            saveLog(tjQuotaLog);
            logger.info("========================quotaCode:" + wlyyJobCongId + "," + DateUtil.dateToStr(quotaDate, "yyyy-MM-dd") + ",timeLevel:" + timeLevel + " end========================");
            logger.info("=====quotaCode:" + wlyyJobCongId + "," + DateUtil.dateToStr(quotaDate, "yyyy-MM-dd") + ",timeLevel:" + timeLevel + " end=======");
    /*        }*/
        } catch (Exception e) {
            e.printStackTrace();
@ -201,7 +201,7 @@ public class MysqlToEsQuotaJob implements Job {
                            .must(QueryBuilders.matchQuery("quotaCode", quotaCode))
                            .must(QueryBuilders.matchQuery("timeLevel", timeLevel))
                            .must(QueryBuilders.matchQuery("quotaDate", quotaDate))
            ).size(10000);//一次取10000条
            ).size(50000);//一次取10000条
            List<String> result = elasticSearch7Helper.search(esIndex,searchSourceBuilder);
            List<SaveModel> saveModels = new ArrayList<>();
            for (String s:result){

+ 17 - 0
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/common/StatisticsController.java

@ -99,6 +99,23 @@ public class StatisticsController extends EnvelopRestEndpoint {
            return ObjEnvelop.getError("查询失败");
        }
    }
    @GetMapping(value="exportExcel/exportServiceSituationDetail")
    public void exportServiceSituationDetail(
            @RequestParam(required = false) String startDate,
            @RequestParam(required = false) String endDate,
            HttpServletRequest request,HttpServletResponse response){
        try {
            List<Map<String,Object>> list = statisticsService.serviceSituationDetail2(request);
            response.setContentType("octets/stream");
            response.setHeader("Content-Disposition", "attachment; filename=serviceSituationDetail.xls");
            OutputStream os = response.getOutputStream();
            String header[] = {"科室","医生","回复次数","回复率","协诊次数","下转次数"};
            String col[] = {"dept","name","replyNum","replyRate","collaborateNum","turnDownNum"};
            exportUtl.write(os,list,header,col);
        }catch (Exception ex){
            error(ex);
        }
    }
    @GetMapping(value = "uploadAnalysis")
    @ApiOperation(value = "设备上传次数趋势")

+ 151 - 0
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/common/service/StatisticsService.java

@ -346,6 +346,157 @@ public class StatisticsService {
        return result;
    }
    public List<Map<String,Object>> serviceSituationDetail2(HttpServletRequest request){
        String sql = "SELECT DISTINCT d.idcard,d.name,h.dept_code dept,h.dept_name deptName,0 collaborateNum,0 inviteNum" +
                ",0 replyNum,0 turnUpNum,0 turnDownNum  from base_doctor_hospital h,base_doctor d " +
                "WHERE h.del='1' and d.del='1' and h.doctor_code=d.id and d.idcard is not null and h.dept_name is not null order by h.dept_name";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        JSONObject jsonObject = wlyyBusinessService.commonGet(request,"serviceSituationDetail");
        JSONArray jsonArray = null;
        int collaborateNumTotal = 0;
        int inviteNumTotal = 0;
        int replyNumTotal = 0;
        int turnUpNumTotal = 0;
        int turnDownNumTotal = 0;
        List<Map<String,Object>> listTmp = new ArrayList<>();
        Map<String, List<Map<String,Object>>> deptMap = new HashMap<>();
        if(jsonObject!=null&&jsonObject.getInteger("status")==200){
            jsonArray = jsonObject.getJSONArray("list");
            for (Map<String,Object> map:list){
                String idcard1 = map.get("idcard")+"";
                for (int i=0;i<jsonArray.size();i++){
                    JSONObject json = jsonArray.getJSONObject(i);
                    String idcard = json.getString("code");
                    int collaborateNum = json.getInteger("collaborateNum");
                    int inviteNum = json.getInteger("inviteNum");
                    int replyNum = json.getInteger("replyNum");
                    int turnUpNum = json.getInteger("turnUpNum");
                    int turnDownNum = json.getInteger("turnDownNum");
                    int total = collaborateNum + inviteNum + replyNum + turnUpNum + turnDownNum;
                    if(total==0){
                        jsonArray.remove(i);
                        break;
                    }
                    collaborateNumTotal += collaborateNum;
                    inviteNumTotal += inviteNum;
                    replyNumTotal += replyNum;
                    turnUpNumTotal += turnUpNum;
                    turnDownNumTotal += turnDownNum;
                    if(idcard1.equals(idcard)){
                        map.put("collaborateNum",collaborateNum);
                        map.put("inviteNum",inviteNum);
                        map.put("replyNum",replyNum);
                        map.put("turnUpNum",turnUpNum);
                        map.put("turnDownNum",turnDownNum);
                        map.put("replyRate",getRange(replyNum, inviteNum));
                        listTmp.add(map);
                        jsonArray.remove(i);
                        break;
                    }
                }
            }
        }
        Map<String,Object> totalMap = new HashMap<>();
        totalMap.put("dept","合计");
        totalMap.put("name","-");
        totalMap.put("collaborateNum",collaborateNumTotal);
        totalMap.put("inviteNum",inviteNumTotal);
        totalMap.put("replyNum",replyNumTotal);
        totalMap.put("turnUpNum",turnUpNumTotal);
        totalMap.put("turnDownNum",turnDownNumTotal);
        totalMap.put("replyRate",getRange(replyNumTotal, inviteNumTotal));
        List<Map<String,Object>> result = new ArrayList<>();
        result.add(totalMap);
        Map<String, List<Map<String,Object>>> resList = listTmp.stream().collect(Collectors.groupingBy(e -> e.get("deptName").toString()));
        for (Map.Entry<String, List<Map<String,Object>>> entry:resList.entrySet()){
            String key = entry.getKey();
            int collaborateNumDept = 0;
            int inviteNumDept = 0;
            int replyNumDept = 0;
            int turnUpNumDept = 0;
            int turnDownNumDept = 0;
            Map<String,Object> deptTmp = new HashMap<>();
            List<Map<String,Object>> value = entry.getValue();
            String dept = "";
            for (Map<String,Object> map:value){
                map.put("dept", key);
                dept = map.get("dept")+"";
                int collaborateNum = Integer.parseInt(map.get("collaborateNum")+"");
                int inviteNum = Integer.parseInt(map.get("inviteNum")+"");
                int replyNum = Integer.parseInt(map.get("replyNum")+"");
                int turnUpNum = Integer.parseInt(map.get("turnUpNum")+"");
                int turnDownNum = Integer.parseInt(map.get("turnDownNum")+"");
                collaborateNumDept += collaborateNum;
                inviteNumDept += inviteNum;
                replyNumDept += replyNum;
                turnUpNumDept += turnUpNum;
                turnDownNumDept += turnDownNum;
            }
            deptTmp.put("dept",key);
            deptTmp.put("name","-");
            deptTmp.put("collaborateNum",collaborateNumDept);
            deptTmp.put("inviteNum",inviteNumDept);
            deptTmp.put("replyNum",replyNumDept);
            deptTmp.put("turnUpNum",turnUpNumDept);
            deptTmp.put("turnDownNum",turnDownNumDept);
            deptTmp.put("replyRate",getRange(replyNumDept, inviteNumDept));
            value.sort(Comparator.comparingInt(a->Integer.parseInt(a.get("replyNum")+"")));
            result.add(deptTmp);
            result.addAll(value);
        }
        List<Map<String,Object>> other = new ArrayList<>();
        if(jsonArray!=null&&jsonArray.size()>0){
            int collaborateNumOther = 0;
            int inviteNumOther = 0;
            int replyNumOther = 0;
            int turnUpNumOther = 0;
            int turnDownNumOther = 0;
            for (int i=0;i<jsonArray.size();i++){
                Map<String,Object> map = new HashMap<>();
                JSONObject json = jsonArray.getJSONObject(i);
                String name = json.getString("name");
                int collaborateNum = json.getInteger("collaborateNum");
                int inviteNum = json.getInteger("inviteNum");
                int replyNum = json.getInteger("replyNum");
                int turnUpNum = json.getInteger("turnUpNum");
                int turnDownNum = json.getInteger("turnDownNum");
                map.put("dept","其他");
                map.put("name",name);
                map.put("collaborateNum",collaborateNum);
                map.put("inviteNum",inviteNum);
                map.put("replyNum",replyNum);
                map.put("turnUpNum",turnUpNum);
                map.put("turnDownNum",turnDownNum);
                map.put("replyRate",getRange(replyNum, inviteNum));
                other.add(map);
                collaborateNumOther += collaborateNum;
                inviteNumOther += inviteNum;
                replyNumOther += replyNum;
                turnUpNumOther += turnUpNum;
                turnDownNumOther += turnDownNum;
            }
            Map<String,Object> otherMap = new HashMap<>();
            otherMap.put("dept","其他");
            otherMap.put("name","-");
            otherMap.put("collaborateNum",collaborateNumOther);
            otherMap.put("inviteNum",inviteNumOther);
            otherMap.put("replyNum",replyNumOther);
            otherMap.put("turnUpNum",turnUpNumOther);
            otherMap.put("turnDownNum",turnDownNumOther);
            otherMap.put("replyRate",getRange(replyNumOther, inviteNumOther));
            other.sort(Comparator.comparingInt(a->Integer.parseInt(a.get("replyNum")+"")));
            result.add(otherMap);
            result.addAll(other);
        }
        return result;
    }
    /**
     * 设备上传次数趋势
     */