Browse Source

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

wangzhinan 2 years ago
parent
commit
de90912d7f

+ 2 - 3
svr/svr-base/src/main/java/com/yihu/jw/base/service/user/UserService.java

@ -757,10 +757,9 @@ public class UserService extends BaseJpaService<UserDO, UserDao> {
             "iotprod".equals(springProfile)||//物联网
             "iotprodIn".equals(springProfile)//物联网
        ) {
            user.setPassword(MD5.md5Hex("a"+password+"*" + "{" + user.getSalt() + "}"));
        }else {
            user.setPassword(MD5.md5Hex(password + "{" + user.getSalt() + "}"));
            password = "a"+password+"*";
        }
        user.setPassword(MD5.md5Hex(password + "{" + user.getSalt() + "}"));
        userDao.save(user);
        saveUserPwlimitDate(userId);
        result.put("response",ConstantUtils.SUCCESS);

+ 3 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/DoctorMessageEndpoint.java

@ -268,9 +268,10 @@ public class DoctorMessageEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "/getDoctorOrgList")
    @ApiOperation(value = "获取机构")
    public ListEnvelop getDoctorOrgList(){
    public ListEnvelop getDoctorOrgList(@ApiParam(name = "date", required = true)
                                            @RequestParam(value = "date", required = true) String date){
        try {
            return success("获取成功", 200, patientMessageService.getDoctorOrgList());
            return success("获取成功", 200, patientMessageService.getDoctorOrgList(date));
        } catch (Exception e) {
            e.printStackTrace();
            return failedListEnvelopException2(e);

+ 17 - 9
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/PatientMessageService.java

@ -343,7 +343,7 @@ public class PatientMessageService {
        String[] dateS ;
        ZhaohuiDailyEntity zhaohuiDailyEntity = null;
        if (StringUtils.isNotBlank(dailyId)){
            zhaohuiDailyEntity = zhaohuiDailyDao.findById(Long.parseLong(dailyId));
                zhaohuiDailyEntity = zhaohuiDailyDao.findById(Long.parseLong(dailyId));
            dateS = zhaohuiDailyEntity.getServiceTime().split(",");
        }else {
            String startDate = date+ " 00:00:00";
@ -365,10 +365,13 @@ public class PatientMessageService {
        //dateS[0] = "2022-01-01 00:00:00";
        //dateS[1] = "2022-11-29 23:59:59";
        ;
        JSONObject doctorBaseInfo = JSONObject.parseObject(JSON.toJSONString(zhaohuiDailyEntity));
        if ("4".equals(userType)) {
            String orgSql = "select * from base_team where id = '"+orgId+"' ";
            List<Map<String, Object>> list = jdbcTemplate.queryForList(orgSql);
            zhaohuiDailyEntity.setMessage(zhaohuiDailyEntity.getMessage().replace("您",list.get(0).get("org_name").toString()));
            String replace = zhaohuiDailyEntity.getMessage().replace("您", list.get(0).get("name").toString());
            doctorBaseInfo.put("message",replace);
            String sql = "SELECT t.org_name orgName,d.photo photo,d.mobile mobile,d.id doctorId,d.`name` doctorName,t.id orgId from base_team t INNER JOIN base_team_member m ON t.id = m.team_code  " +
                    "INNER JOIN base_doctor d ON m.doctor_code = d.id  WHERE t.org_code = 'zdjsylfwyxgszhfgs' AND t.id = '"+orgId+"' ";
@ -377,7 +380,7 @@ public class PatientMessageService {
            resultObj.put("doctorList",doctorList);
        }
        String sql = "select * from base_zhaohui_daily where org_code='" + orgId + "' and create_time>= '" + dateS[0] + "' and create_time<='" + dateS[1] + "' and user_type = 1 ";
        String sql = "select * from base_zhaohui_daily where org_code='" + orgId + "' and create_time>= '" + dateS[0] + "' and create_time<='" + dateS[1] + "' and user_type = 1 Group By patient ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        List<JSONObject> patientBasInfoList = new ArrayList<>();
@ -400,14 +403,20 @@ public class PatientMessageService {
            System.out.println(endTime - startTime);
        }
        resultObj.put("doctorBaseInfo", zhaohuiDailyEntity);
        resultObj.put("doctorBaseInfo", doctorBaseInfo);
        resultObj.put("patientBaseInfo", patientBasInfoList);
        return resultObj;
    }
    public List<Map<String, Object>>  getDoctorOrgList(){
        String sql ="select id,org_name from base_team where org_code = 'zdjsylfwyxgszhfgs'";
    public List<Map<String, Object>>  getDoctorOrgList(String date){
       // String sql ="select id,name as org_name from base_team where org_code = 'zdjsylfwyxgszhfgs'";
        String startDate = date + " 00:00:00";
        String endDate = date + " 23:59:59";
        String sql  =" SELECT t.`name`,t.id FROM base_zhaohui_daily d INNER JOIN base_team t ON  d.org_code = t.id  WHERE  " +
                " user_type = 3 AND d.create_time >='"+startDate+"' AND d.create_time <='"+endDate+"'  and t.org_code = 'zdjsylfwyxgszhfgs' GROUP BY d.org_code  ";
        return jdbcTemplate.queryForList(sql);
    }
@ -498,7 +507,7 @@ public class PatientMessageService {
            sql.append(" and family_code = '" + patient + "' and user_type = 1");
        } else if ("2".equals(userType)) {
            sql.append(" and family_code = '" + patient + "' and user_type = 2");
            sql.append(" and patient = '" + patient + "' and user_type = 2");
        } else if ("3".equals(userType)) {
            sql.append(" and org_code = '" + orgCode + "' and user_type = 3");
        }
@ -544,8 +553,7 @@ public class PatientMessageService {
        }else {
            sonSql += " and org_code ='"+orgCode+"' and user_type = 3 group By create_time";
        }
        System.out.println(startDate+":::::"+endDate);
        System.out.println("sql:-------------------"+sql+sonSql);
        List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql + sonSql);
        for (Map<String, Object> map : resultList) {

+ 6 - 0
svr/svr-cloud-job/pom.xml

@ -122,6 +122,12 @@
            <artifactId>elasticsearch</artifactId>
            <version>2.4.4</version>
        </dependency>
        <!--钉钉sdk-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>zwdd-sdk-java</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>sms-service</artifactId>

+ 5 - 5
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/event/ApplicationEvent.java

@ -6,7 +6,7 @@ import com.yihu.jw.care.job.birthday.BirthdayWishesNotPushJob;
import com.yihu.jw.care.job.consult.FinishConsultJob;
import com.yihu.jw.care.job.data.SaveDataPushJob;
import com.yihu.jw.care.job.device.*;
import com.yihu.jw.care.job.message.DoctorSendUnreadJob;
import com.yihu.jw.care.job.message.PatientSendUnreadJob;
import com.yihu.jw.care.job.order.*;
import com.yihu.jw.care.job.pushRecord.*;
import com.yihu.jw.care.job.sim.GetSimsVoiceFlowDayJob;
@ -46,22 +46,22 @@ public class ApplicationEvent implements ApplicationListener<ContextRefreshedEve
            }
            //#每天的早上9:00,给所有医生/社工/教师发送一条短信
            if (!quartzHelper.isExistJob("DOCTOR_SEND_UNREAD_MES_JOB")) {
            /*if (!quartzHelper.isExistJob("DOCTOR_SEND_UNREAD_MES_JOB")) {
                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("DOCTOR_SEND_UNREAD_MES_JOB");
                quartzHelper.addJob(DoctorSendUnreadJob.class, trigger, "DOCTOR_SEND_UNREAD_MES_JOB", new HashMap<String, Object>());
                logger.info("DOCTOR_SEND_UNREAD_MES_JOB success");
            } else {
                logger.info("DOCTOR_SEND_UNREAD_MES_JOB exist");
            }
            }*/
            //#每天的早上9:00,给所有居民发送未读消息微信模板
            /*if (!quartzHelper.isExistJob("PATIENT_SEND_UNREAD_MES_JOB")) {
            if (!quartzHelper.isExistJob("PATIENT_SEND_UNREAD_MES_JOB")) {
                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("PATIENT_SEND_UNREAD_MES_JOB");
                quartzHelper.addJob(PatientSendUnreadJob.class, trigger, "PATIENT_SEND_UNREAD_MES_JOB", new HashMap<String, Object>());
                logger.info("PATIENT_SEND_UNREAD_MES_JOB success");
            } else {
                logger.info("PATIENT_SEND_UNREAD_MES_JOB exist");
            }*/
            }
            //#每天的早上9:00,生日祝福提醒短信
            if (!quartzHelper.isExistJob("BIRTHDAY_REMINDER_JOB")) {

+ 74 - 19
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/service/message/ZhaohuiDailyService.java

@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yihu.jw.care.dao.pushLog.*;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.util.DingdingUtil;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.dict.service.BaseCopywritingService;
import com.yihu.jw.entity.base.patient.BasePatientDO;
@ -62,6 +63,8 @@ public class ZhaohuiDailyService {
    private ZhaohuifireGasSecDao zhaohuifireGasSecDao;
    @Autowired
    private BaseCopywritingService dictService;
    @Autowired
    private DingdingUtil dingdingUtil;
    public void allRound() {
@ -164,7 +167,7 @@ public class ZhaohuiDailyService {
        }*/
        zhaohuiDailyEntity.setMessage(old.getName()+sex+","+message);
        zhaohuiDailyEntity.setMessage("【"+old.getName()+"】"+sex+","+message);
        String lifeSql = "select count(id) from base_life_care_order where patient = '" + oldId + "' and status = 1 and create_time>= '" + stateDate + "' and create_time<= '" + endDate + "' and status <> -1";
@ -436,25 +439,51 @@ public class ZhaohuiDailyService {
        String secMessage = "";
        String deviceMessage = "";
        //判断是否存在预警
        secSql = "select serve_desc,status total,serve_desc from  base_security_monitoring_order where patient= '" + oldId + "' and create_time>='" + stateDate + "' and create_time<='" + endDate + "' and status <> -1 order by create_time DESC  ";
        //secSql = "select ,status total,serve_desc from  base_emergency_assistance_order where patient= '" + oldId + "' and create_time>='" + stateDate + "' and create_time<='" + endDate + "' and status <> -1 order by create_time DESC  ";
        secSql = "SELECT sum(a.total) total FROM (\n" +
                "SELECT count(id) total FROM base_emergency_assistance_order WHERE patient ='"+oldId+"' and create_time>='" + stateDate + "' and create_time<='" + endDate + "' and status <> -1 \n" +
                "UNION ALL \n" +
                "SELECT count(id) total FROM base_security_monitoring_order WHERE patient ='"+oldId+"' and create_time>='" + stateDate + "' and create_time<='" + endDate + "' and status <> -1 \n" +
                ") a ";
        String emeSecstatusSql = "SELECT count(a.total) total, a.`status`,a.serve_desc FROM (\n" +
                "                            SELECT '紧急预警' as serve_desc,count(o.id) total ,o.`status` AS `status` FROM base_emergency_assistance_order o WHERE o.patient ='"+oldId+"' and o.status <> -1 AND o.create_time >='"+stateDate+"' AND o.create_time<='"+endDate+"' GROUP BY o.`status`\n" +
                "                            UNION ALL\n" +
                "                            SELECT o.serve_desc as serve_desc,count(o.id) total ,o.`status` AS `status` FROM  base_security_monitoring_order o WHERE o.patient ='"+oldId+"' and o.status <> -1 AND o.create_time >='"+stateDate+"' AND o.create_time<='"+endDate+"'  GROUP BY o.`status`\n" +
                "                            ) a  GROUP BY a.`status`";
        list = jdbcTemplate.queryForList(secSql);
        if (list.size() > 0) {
        List<Map<String, Object>> emeSecStatusList = jdbcTemplate.queryForList(emeSecstatusSql);
        Integer statusNUm = 0;
        if (emeSecStatusList.size() > 0) {
            for (Map<String, Object> stringObjectMap : emeSecStatusList) {
                Integer.parseInt(stringObjectMap.get("status").toString());
                if (0 == Integer.parseInt(stringObjectMap.get("status").toString())) {
                    statusNUm += Integer.parseInt(stringObjectMap.get("total").toString());
                }
            }
        }
        Integer secemeTotal = Integer.parseInt(list.get(0).get("total").toString());
        if (secemeTotal>0&&statusNUm >= 0) {
            secMessage = dictService.findCopywriting("zhaohui_dailyReport", "family_eme1");
            secMessage = secMessage.replace("<serve>",list.get(0).get("serve_desc").toString()).replace("<status>","");
            secMessage = secMessage.replace("<serve>",emeSecStatusList.get(0).get("serve_desc").toString()).replace("<status>",(secemeTotal-statusNUm)>0?"未处理完":"已处理完");
        }else {
            secMessage = dictService.findCopywriting("zhaohui_dailyReport", "family_eme2");
        }
        if (deviceTotal>0) {
            deviceMessage = dictService.findCopywriting("zhaohui_dailyReport", "family_device1");
            deviceMessage.replace("<deviceName>",deviceName.replace(",",""));
            deviceMessage = deviceMessage.replace("<deviceName>", deviceName.substring(1));
        }else {
            deviceMessage = dictService.findCopywriting("zhaohui_dailyReport", "family_device2");
        }
        zhaohuiDailyEntity.setMessage(old.getName()+sex+secMessage+deviceMessage);
        zhaohuiDailyEntity.setMessage("【"+old.getName()+"】"+sex+secMessage+","+deviceMessage);
        zhaohuiDailyDao.save(zhaohuiDailyEntity);
@ -469,7 +498,7 @@ public class ZhaohuiDailyService {
        messageUtil.putTemplateWxMessage(wxId,"template_zhrb","zhrb","123456",first,null,null,1,null,"",key2+"",liftOlderTotal+"","【推送完成】",DateUtil.getStringDate());
*/
        wxPush(old.getName(),familyCode, zhaohuiDailyEntity.getService(), emeTotal);
        //wxPush(old.getName(),familyCode, zhaohuiDailyEntity.getService(), emeTotal);
        zhaohuiDailySleepDao.save(zhaohuiDailySleepList);
        zhaohuiDailyWatchDao.save(zhaohuiDailyWatchList);
@ -521,7 +550,10 @@ public class ZhaohuiDailyService {
        List<ZhaohuiDailyEntity> zhaohuiDailyEntityList = new ArrayList<>();
        for (Map<String, Object> map : orgList) {
            ZhaohuiDailyEntity zhaohuiDailyEntity = new ZhaohuiDailyEntity();
            String dailySql = "SELECT count(d.id) as total ,GROUP_CONCAT(patient_name) as patientName,sum(eme_num) as  emeNum,SUM(service) as serviceNum FROM base_zhaohui_daily d INNER JOIN base_team t ON d.org_code = t.id where d.org_code = '"+map.get("id")+"' and d.user_type = 1  and d.create_time >= '"+stateDate+"' and d.create_time<= '"+endDate+"' GROUP BY d.org_code ";
            //String dailySql = "SELECT  DISTINCT d.patient ,count(d.id) as total,GROUP_CONCAT(patient_name) as patientName,sum(eme_num) as  emeNum,SUM(service) as serviceNum FROM base_zhaohui_daily d INNER JOIN base_team t ON d.org_code = t.id where d.org_code = '"+map.get("id")+"' and d.user_type = 1  and d.create_time >= '"+stateDate+"' and d.create_time<= '"+endDate+"' GROUP BY d.org_code ";
            String dailySql = "SELECT count( DISTINCT  a.patient ) AS total,GROUP_CONCAT(DISTINCT  a.patient ) patientS , GROUP_CONCAT(DISTINCT  a.patient_name ) AS patientName,sum( a.eme_num ) AS emeNum, SUM( a.service ) AS serviceNum  FROM (\n" +
                    "SELECT DISTINCT patient,patient_name,service,eme_num,org_code FROM base_zhaohui_daily WHERE org_code = '"+map.get("id")+"'  AND user_type = 1 AND create_time >= '"+stateDate+"' AND create_time <= '"+endDate+"') a GROUP BY org_code";
            List<Map<String, Object>> list = jdbcTemplate.queryForList(dailySql);
            if (list.size()>0) {
                String message = "";
@ -549,22 +581,27 @@ public class ZhaohuiDailyService {
                zhaohuiDailyEntity.setCreateTime(new Date());
                zhaohuiDailyEntity.setServiceTime(stateDate+","+endDate);
                if (flag) {
                    String[] patientS = list.get(0).get("patientS").toString().split(",");
                    Integer statusNUm = 0;
                    for (String patient : patientS) {
                    String emeSecstatusSql = "SELECT count(a.total) total, a.`status` FROM (\n" +
                            "SELECT count(o.id) total ,o.`status` AS `status` FROM base_team t INNER JOIN base_service_package_sign_record r ON t.leader_code = r.sign_doctor INNER JOIN base_emergency_assistance_order o ON o.patient = r.patient WHERE t.id = '" + map.get("id") + "' and o.status <> -1 AND o.create_time >='" + stateDate + "' AND o.create_time<='" + endDate + "' GROUP BY o.`status`\n" +
                            "UNION ALL\n" +
                            "SELECT count(o.id) total ,o.`status` AS `status` FROM base_team t INNER JOIN base_service_package_sign_record r ON t.leader_code = r.sign_doctor INNER JOIN base_security_monitoring_order o ON o.patient = r.patient WHERE t.id = '" + map.get("id") + "' and o.status <> -1 AND o.create_time >='" + stateDate + "' AND o.create_time<='" + endDate + "'  GROUP BY o.`status`\n" +
                            ") a  GROUP BY a.`status`";
                            "                            SELECT count(o.id) total ,o.`status` AS `status` FROM base_emergency_assistance_order o WHERE o.patient ='"+patient+"' and o.status <> -1 AND o.create_time >='"+stateDate+"' AND o.create_time<='"+endDate+"' GROUP BY o.`status`\n" +
                            "                            UNION ALL\n" +
                            "                            SELECT count(o.id) total ,o.`status` AS `status` FROM  base_security_monitoring_order o WHERE o.patient ='"+patient+"' and o.status <> -1 AND o.create_time >='"+stateDate+"' AND o.create_time<='"+endDate+"'  GROUP BY o.`status`\n" +
                            "                            ) a  GROUP BY a.`status`";
                    List<Map<String, Object>> emeSecStatusList = jdbcTemplate.queryForList(emeSecstatusSql);
                    Integer statusNUm = 0;
                    if (emeSecStatusList.size() > 0) {
                        for (Map<String, Object> stringObjectMap : emeSecStatusList) {
                            Integer.parseInt(stringObjectMap.get("status").toString());
                            if (0 == Integer.parseInt(stringObjectMap.get("status").toString())) {
                                statusNUm = Integer.parseInt(stringObjectMap.get("total").toString());
                        if (emeSecStatusList.size() > 0) {
                            for (Map<String, Object> stringObjectMap : emeSecStatusList) {
                                Integer.parseInt(stringObjectMap.get("status").toString());
                                if (0 == Integer.parseInt(stringObjectMap.get("status").toString())) {
                                    statusNUm += Integer.parseInt(stringObjectMap.get("total").toString());
                                }
                            }
                        }
                    }
                    if (statusNUm == emeNum||statusNUm<emeNum) {
                    if (statusNUm == emeNum||statusNUm>emeNum) {
                        message += ","+dictService.findCopywriting("zhaohui_dailyReport", "doctor_emeStatus2");
                    }else {
                        message += ","+dictService.findCopywriting("zhaohui_dailyReport", "doctor_emeStatus1").replace("<num>",(emeNum-statusNUm)+"");
@ -576,6 +613,24 @@ public class ZhaohuiDailyService {
        }
        zhaohuiDailyDao.save(zhaohuiDailyEntityList);
        String sql = "SELECT d.id AS doctorId ,d.ykt_doctor_id as yktDoctorId,t.id FROM base_doctor d INNER JOIN base_team_member m ON d.id = m.doctor_code INNER JOIN base_team t  ON m.team_code = t.id  " +
                " WHERE d.doctor_level = 2 AND t.org_code = 'zdjsylfwyxgszhfgs' AND d.ykt_doctor_id IS NOT NULL";
        List<Map<String, Object>> doctorList = jdbcTemplate.queryForList(sql);
        //社区
        for (Map<String, Object> map : doctorList) {
            for (ZhaohuiDailyEntity zhaohuiDailyEntity : zhaohuiDailyEntityList) {
                if (zhaohuiDailyEntity.getOrgCode().equals(map.get("doctorId"))) {
                    dingdingUtil.sendP2pMsg(zhaohuiDailyEntity.getMessage(),map.get("yktDoctorId").toString());
                    break;
                }
            }
        }
    }

+ 258 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/DingdingUtil.java

@ -0,0 +1,258 @@
package com.yihu.jw.care.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.xxpt.gateway.shared.client.http.ExecutableClient;
import com.alibaba.xxpt.gateway.shared.client.http.GetClient;
import com.alibaba.xxpt.gateway.shared.client.http.PostClient;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
/**
 * 阿里巴巴钉钉工具类
 * Created by yeshijie on 2022/3/23.
 */
@Component
public class DingdingUtil {
    private static final Logger logger = LoggerFactory.getLogger(DingdingUtil.class);
    //测试-专有钉钉
//    private static final String AppKey = "ceshiyzh-jtP6zf3cfZEqs8UmmYNra";
//    private static final String AppSecret = "NbbH9viHPDNTPTuQPz2Y0Y06F88krYWTTPLv0h01";
    //正式-浙政钉
    private static final String zhdAppKey = "zhyzh-r085NCVALJYmgcDc7oBVFRZj";
    private static final String zhdAppSecret = "fH8ZVDGAmJaeF7ujwAZgCi40w0U3im9J801vBaSF";
    private static final String zhdDomainName = "openplatform.dg-work.cn";
    private static final String zhdtenantId = "50495309";
    //正式-专有钉钉
    private static final String AppKey = "zhyzh-67H0tpyZr7m8crdJsxI3YVZb";
    private static final String AppSecret = "xK0VBIfeUj0gBm0Gp55180Qk6i866230Qch1T96v";
    private static final String DomainName = "openplatform-pro.ding.zj.gov.cn";
    private static final String tenantId = "196729";
    private static final String gettokenApi = "/gettoken.json";
    private static final String dingtalk_app_user = "/rpc/oauth2/dingtalk_app_user.json";
    private static final String get_by_mobiles = "/mozi/employee/get_by_mobiles";
    private static final String getuserinfo_bycode = "/rpc/oauth2/getuserinfo_bycode.json";
    private static final String sendMsg = "/chat/sendMsg";
    //单聊默认发送者id
    private static final String p2pSenderId = "78728186";
//    private static final String p2pSenderId = "821606";
    public static final String picMediaId = "$iwHSAADGgQoAC9EkWgKsb2N0ZXQtc3RyZWFtAwAEAAUABrzrLoqjhIdIKXPi5GCsroJXXzE3ZmI0OGFiNWJhBwAIAAmhMA";
    //executableClient要单例,并且使用前要初始化,只需要初始化一次
    private static ExecutableClient executableClient = null;
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /**
     * 测试浙政钉
     */
    public void testZzd() {
//        ExecutableClient executableClient = ExecutableClient.getInstance();
//        executableClient.setAccessKey(zhdAppKey);
//        executableClient.setSecretKey(zhdAppSecret);
//        executableClient.setDomainName(zhdDomainName);
//        executableClient.setProtocal("https");
//        executableClient.init();
//        logger.info("get_by_mobiles========="+zhdDomainName);
//        //调用API
//        PostClient postClient = executableClient.newPostClient(get_by_mobiles);
//        //设置参数
//        postClient.addParameter("areaCode", "86");
//        //手机号码列表,逗号分隔,最多50个
//        postClient.addParameter("mobiles", "15659713528");
//        postClient.addParameter("tenantId", zhdtenantId);
//        postClient.addParameter("namespace", "local");
//        //Call API
//        String apiResult2 = postClient.post();
//        logger.info("get_by_mobiles========="+apiResult2);
    }
    @PostConstruct
    public void clientInit(){
        if(executableClient == null){
            synchronized(ExecutableClient.class){
                if(executableClient == null){
                    executableClient = ExecutableClient.getInstance();
                    executableClient.setAccessKey(AppKey);
                    executableClient.setSecretKey(AppSecret);
                    executableClient.setDomainName(DomainName);
                    executableClient.setProtocal("https");
                    executableClient.init();
                }
            }
        }
    }
    /**
     * 获取AccessToken
     * @return
     */
    public String getAccessToken(){
        GetClient getClient = executableClient.newGetClient(gettokenApi);
        //设置参数
        getClient.addParameter("appkey", AppKey);
        getClient.addParameter("appsecret", AppSecret);
        //调用API
        String apiResult = getClient.get();
        logger.info(apiResult);
        //{"success":true,"content":{"data":{"expiresIn":7200,"accessToken":"app_4197121c698246cea9ec660902324edd"},"success":true,"requestId":"276077ca16480212814976877e76c6","responseMessage":"OK","responseCode":"0","bizErrorCode":"0"},"bizErrorCode":"0"}
        JSONObject jsonObject = JSON.parseObject(apiResult);
        if(jsonObject.getBoolean("success")){
            JSONObject content = jsonObject.getJSONObject("content");
            if(content.getBoolean("success")){
                return content.getJSONObject("data").getString("accessToken");
            }
        }
        return null;
    }
    /**
     * 获取用户信息
     * @return
     */
    public JSONObject dingtalk_app_user(String authCode){
        //调用API
        PostClient postClient = executableClient.newPostClient(dingtalk_app_user);
        //设置参数
        postClient.addParameter("access_token", getAccessToken());
        postClient.addParameter("auth_code", authCode);
        //Call API
        String apiResult = postClient.post();
        logger.info(apiResult);
        //{"success":true,"content":{"success":false,"responseMessage":"code失效或不存在","responseCode":"240111","bizErrorCode":"MBS-B001-02-16-240111"}}
        return JSON.parseObject(apiResult);
    }
    /**
     * 根据手机号获取员工账户id
     * @param mobiles
     * @return
     */
    public JSONArray get_by_mobiles(String mobiles){
        //调用API
        PostClient postClient = executableClient.newPostClient(get_by_mobiles);
        //设置参数
        postClient.addParameter("areaCode", "86");
        //手机号码列表,逗号分隔,最多50个
        postClient.addParameter("mobiles", mobiles);
        postClient.addParameter("tenantId", tenantId);
        postClient.addParameter("namespace", "local");
        //Call API
        String apiResult = postClient.post();
        logger.info(apiResult);
        //{"success":true,"content":{"data":[{"accountId":821685,"mobile":"15859634562","employeeCode":"GE_f27a7231e19f4b31b8f11d2859d1be07","status":0},{"accountId":821606,"mobile":"13559485270","employeeCode":"GE_10933a0f8bc949149143163cba5bb81f","status":0}],"success":true,"requestId":"2760828316480239373806874ed97b","responseMessage":"OK","responseCode":"0","bizErrorCode":"0"},"bizErrorCode":"0"}
        JSONObject jsonObject = JSON.parseObject(apiResult);
        if(jsonObject.getBoolean("success")){
            JSONObject content = jsonObject.getJSONObject("content");
            if(content.getBoolean("success")){
                return content.getJSONArray("data");
            }
        }
        return null;
    }
    /**
     * 初始化更新钉钉账户id
     */
    public void yktDoctorIdInit(){
        List<BaseDoctorDO> doctorDOList = doctorDao.findByYktDoctorIdNull();
        List<BaseDoctorDO> doctorDOs = new ArrayList<>();
        for (BaseDoctorDO doctorDO:doctorDOList){
            JSONArray jsonArray = get_by_mobiles(doctorDO.getMobile());
            if(jsonArray!=null&&jsonArray.size()>0){
                long accountId = jsonArray.getJSONObject(0).getLong("accountId");
                doctorDO.setYktDoctorId(accountId+"");
                doctorDOs.add(doctorDO);
            }
        }
        if(doctorDOs.size()>0){
            doctorDao.save(doctorDOs);
        }
    }
    /**
     * 更新单个钉钉账户id
     * @param mobile
     */
    public void updYktDoctorId(String mobile){
        List<BaseDoctorDO> doctorDOs = doctorDao.findByMobile(mobile);
        if(doctorDOs.size()>0){
            BaseDoctorDO doctorDO = doctorDOs.get(0);
            JSONArray jsonArray = get_by_mobiles(doctorDO.getMobile());
            if(jsonArray!=null&&jsonArray.size()>0){
                long accountId = jsonArray.getJSONObject(0).getLong("accountId");
                doctorDO.setYktDoctorId(accountId+"");
                doctorDao.save(doctorDOs);
            }
        }
    }
    public String getuserinfo_bycode(String code){
        //调用API
        PostClient postClient = executableClient.newPostClient(getuserinfo_bycode);
        //设置参数
        postClient.addParameter("access_token", getAccessToken());
        postClient.addParameter("code", code);
        //Call API
        String apiResult = postClient.post();
        logger.info(apiResult);
//        JSONObject jsonObject = JSON.parseObject(apiResult);
//        if(jsonObject.getBoolean("success")){
//            JSONObject content = jsonObject.getJSONObject("content");
//            if(content.getBoolean("success")){
//                return content.getJSONObject("data").getString("accessToken");
//            }
//        }
        return null;
    }
    /**
     * 发送单聊消息
     */
    public String sendP2pMsg(String msg,String receiverId){
        return this.sendP2pMsg(msg, receiverId,null);
    }
    /**
     * 发送单聊消息
     */
    public String sendP2pMsg(String msg,String receiverId,String sendId){
        PostClient postClient = executableClient.newPostClient(sendMsg);
        //Set the parameters
        postClient.addParameter("msg", msg);
        postClient.addParameter("senderId", StringUtils.isBlank(sendId)?p2pSenderId:sendId);
        postClient.addParameter("receiverId", receiverId);
        postClient.addParameter("chatId", "");
        postClient.addParameter("tenantId", tenantId);
        postClient.addParameter("chatType", "1");
        //Call API
        String apiResult = postClient.post();
        logger.info("响应结果"+apiResult);
        return apiResult;
    }
}