Browse Source

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

Shi Kejing 4 năm trước cách đây
mục cha
commit
6ed8090c21
37 tập tin đã thay đổi với 596 bổ sung182 xóa
  1. 3 1
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/org/BaseOrgEndpoint.java
  2. 31 38
      svr/svr-base/src/main/java/com/yihu/jw/base/service/org/BaseOrgService.java
  3. 19 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/consult/PatientConsultEndpoint.java
  4. 21 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doorCoach/DoctorDoorCoachOrderController.java
  5. 0 19
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doorCoach/PatientDoorCoachOrderController.java
  6. 42 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/ConsultService.java
  7. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/WxPushService.java
  8. 5 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doorCoach/DoctorDoorCoachOrderService.java
  9. 2 2
      svr/svr-cloud-care/src/main/resources/application.yml
  10. 90 24
      svr/svr-cloud-job/pom.xml
  11. 0 36
      svr/svr-cloud-job/src/main/java/com.yihu/jw.care/util/MessageUtil.java
  12. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/CloudApplicationJob.java
  13. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/config/async/AsyncConfig.java
  14. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/config/quartz/JobFactory.java
  15. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/config/quartz/SchedulerConfig.java
  16. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/JobConfigDao.java
  17. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/QuartzJobConfigDao.java
  18. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/QuartzJobLogDao.java
  19. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/QuotaDao.java
  20. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/WlyyQuotaResultDao.java
  21. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/event/ApplicationEvent.java
  22. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/job/QuartzHelper.java
  23. 87 14
      svr/svr-cloud-job/src/main/java/com.yihu/jw.care/job/consult/FinishConsultJob.java
  24. 1 1
      svr/svr-cloud-job/src/main/java/com.yihu/jw.care/job/message/DoctorSendUnreadJob.java
  25. 14 10
      svr/svr-cloud-job/src/main/java/com.yihu/jw.care/job/message/PatientSendUnreadJob.java
  26. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/service/JobService.java
  27. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/DateUtil.java
  28. 171 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/MessageUtil.java
  29. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/SystemConf.java
  30. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/http/HttpResponse.java
  31. 2 0
      svr/svr-cloud-job/src/main/java/com.yihu/jw.care/util/http/HttpUtils.java
  32. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/http/IPInfoUtils.java
  33. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/vo/WlyyJobConfigVO.java
  34. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/vo/WlyyQuotaVO.java
  35. 0 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/web/BaseController.java
  36. 8 3
      svr/svr-cloud-job/src/main/java/com.yihu/jw.care/web/JobController.java
  37. 99 23
      svr/svr-cloud-job/src/main/resources/application.yml

+ 3 - 1
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/org/BaseOrgEndpoint.java

@ -145,13 +145,15 @@ public class BaseOrgEndpoint extends EnvelopRestEndpoint {
            @RequestParam(value = "codeOrName", required = false) String codeOrName,
            @ApiParam(name = "orgStatus", value = "机构状态")
            @RequestParam(value = "orgStatus", required = false) String orgStatus,
            @ApiParam(name = "userId", value = "用户id(过滤测试机构)")
            @RequestParam(value = "userId", required = false) String userId,
            @ApiParam(name = "orgType", value = "机构类型: 1.等级医院 2.社区医院3.养老机构 4.教育机构")
            @RequestParam(value = "orgType", required = false) String orgType,
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1")
            @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15")
            @RequestParam(value = "size") int size) throws Exception {
        JSONObject result = baseOrgService.queryOrgBaseInfoList(codeOrName, orgStatus,orgType,page,size,wechatId);
        JSONObject result = baseOrgService.queryOrgBaseInfoList(codeOrName, orgStatus,orgType,page,size,wechatId,userId);
        return success(result.getJSONArray("msg"),result.getInteger("count"),page,size);
    }

+ 31 - 38
svr/svr-base/src/main/java/com/yihu/jw/base/service/org/BaseOrgService.java

@ -11,12 +11,13 @@ import com.yihu.jw.base.service.org.tree.TreeNode;
import com.yihu.jw.base.service.user.UserService;
import com.yihu.jw.base.util.ConstantUtils;
import com.yihu.jw.base.util.JavaBeanUtils;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import com.yihu.jw.entity.base.org.BaseOrgSaasDO;
import com.yihu.jw.entity.base.org.BaseOrgUserDO;
import com.yihu.jw.entity.base.user.UserDO;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.restmodel.base.wx.WxGraphicMessageVO;
import com.yihu.jw.restmodel.base.wx.WxReplySceneVO;
import com.yihu.jw.utils.StringUtil;
import com.yihu.jw.utils.hibernate.HibenateUtils;
import com.yihu.mysql.query.BaseJpaService;
@ -25,12 +26,12 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import sun.misc.Unsafe;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
/**
@ -76,6 +77,8 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
    private HibenateUtils hibenateUtils;
    @Autowired
    private BaseOrgUserDao  baseOrgUserDao;
    @Autowired
    private WlyyHospitalSysDictDao hospitalSysDictDao;
    @Value("${wechat.flag}")
    private boolean flag;
@ -86,43 +89,27 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
     * @param orgStatus
     * @return
     */
    public JSONObject queryOrgBaseInfoList(String codeOrName,String orgStatus,String orgType,int page,int size,String wechatId) throws Exception {
    public JSONObject queryOrgBaseInfoList(String codeOrName,String orgStatus,String orgType,int page,int size,String wechatId,String userId) throws Exception {
        JSONObject result = new JSONObject();
        int start = 0 == page ? page++ : (page - 1) * size;
        int end = 0 == size ? 15 : page * size;
        String codeOrNameValue = null == codeOrName ? "" : codeOrName;
//        String sql = "select id as \"id\",code as \"code\",name as \"name\",case del when 1 then '有效' else '失效' end as status as \"del\",concat(province_name,city_name,town_name,address) as \"address\" " +
//                " from base_org " +
//                " where " +
//                " ((code like '{code}' or ''='{code}')  and (del = '{orgStatus}' or ''='{orgStatus}'))" +
//                " or " +
//                " ((name like '{name}' or ''='{name}') and (del = '{orgStatus}' or ''='{orgStatus}'))" +
//                " and" +
//                " (del = '{orgStatus}' or ''='{orgStatus}')" +
//                "  order by create_time desc ";
//        String finalSql = sql
//
//                .replace("{code}", "%" + codeOrNameValue + "%")
//                .replace("{name}", "%" + codeOrNameValue + "%")
//                .replace("{orgStatus}", null == orgStatus ? "" : orgStatus);
//
//        String countSql = "SELECT count(id)" +
//                " FROM base_org " +
//                " WHERE " +
//                " ((code like '{code}' or ''='{code}')  and (del = '{orgStatus}' or ''='{orgStatus}'))" +
//                " OR " +
//                " ((name like '{name}' or ''='{name}') and (del = '{orgStatus}' or ''='{orgStatus}'))" +
//                " AND" +
//                " (del = '{orgStatus}' OR ''='{orgStatus}')";
//        String finalCountSql = countSql
//                .replace("{code}", "%" + codeOrNameValue + "%")
//                .replace("{name}", "%" + codeOrNameValue + "%")
//                .replace("{orgStatus}", null == orgStatus ? "" : orgStatus);
//        Logger.getAnonymousLogger().info("finalSql="+finalSql);
//        List<Map<String, Object>> list = hibenateUtils.createSQLQuery(finalSql,page,size);
//        Logger.getAnonymousLogger().info("finalCountSql="+finalCountSql);
        String filters = "";
        if(!StringUtil.isBlank(userId)){
           //判断当前用户是否不需要过滤测试机构
            List<WlyyHospitalSysDictDO>  dictDOs = hospitalSysDictDao.findByDictNameAndDictCode("jkzl_user",userId);
            if(dictDOs.size()==0){
                //需要过滤
                String sql = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
                List<Map<String,Object>> list =  jdbcTemplate.queryForList(sql);
                if(list.size()>0){
                    String orgCodes = String.valueOf(list.get(0).get("orgCodes"));
                    orgCodes = orgCodes.replaceAll(",","','");
                    filters = " and code not in ('"+orgCodes+"')";
                }
            }
        }
        String codeOrNameValue = null == codeOrName ? "" : codeOrName;
                String sql = "SELECT\n" +
                        "\tID AS \"id\",\n" +
                        "\tcode AS \"code\",\n" +
@ -154,6 +141,9 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
                if (!StringUtil.isBlank(orgType)){
                    sql+=" and type = '"+orgType+"'";
                }
                if(!StringUtil.isBlank(filters)){
                    sql+= filters;
                }
                sql+="  ORDER BY\n" +
                        "\tcreate_time DESC";
                String finalSql = sql;
@ -200,6 +190,9 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
        if (!StringUtil.isBlank(orgStatus)){
            countSql+=" and del = '"+orgStatus+"'";
        }
        if(!StringUtil.isBlank(filters)){
            countSql+= filters;
        }
        Logger.getAnonymousLogger().info("finalCountSql="+countSql);
        Integer count = jdbcTemplate.queryForObject(countSql, Integer.class);
        result.put("count", count);

+ 19 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/consult/PatientConsultEndpoint.java

@ -192,6 +192,25 @@ public class PatientConsultEndpoint extends EnvelopRestEndpoint {
		return success("操作成功", consult);
	}
	@GetMapping(value = "findConsultDoctor")
	@ApiOperation(value = "查找历史咨询过的教师")
	public Envelop findConsultDoctor(
			@ApiParam(name = "patient", value = "居民id")
			@RequestParam(value = "patient",required = true) String patient,
			@ApiParam(name = "orgCode", value = "机构code")
			@RequestParam(value = "orgCode",required = true) String orgCode,
			@ApiParam(name = "page", value = "第几页")
			@RequestParam(value = "page",required = false) int page,
			@ApiParam(name = "pagesize", value = "分页大小")
			@RequestParam(value = "pagesize",required = false) int pagesize)throws Exception{
		try {
			List<Map<String,Object>>  data = consultService.findConsultDoctor(orgCode, patient, page,pagesize);
			return success(data);
		}catch (Exception e){
			return failedException(e);
		}
	}
	@GetMapping(value = "records")
	@ApiOperation(value = "患者咨询记录查询")
	public Envelop records(

+ 21 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doorCoach/DoctorDoorCoachOrderController.java

@ -470,6 +470,7 @@ public class DoctorDoorCoachOrderController extends BaseController {
            @ApiParam(name = "page", value = "分页大小", required = true, defaultValue = "1") @RequestParam(value = "page") int page,
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15") @RequestParam(value = "size") int size) {
        try{
            doctorDoorCoachOrderService.initDoorStatus(hospital);
            JSONObject result = doctorDoorCoachOrderService.queryDoctorList(patient,hospital, doctorName, status, page, size);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return error(-1,result.getString(ResponseContant.resultMsg));
@ -557,7 +558,7 @@ public class DoctorDoorCoachOrderController extends BaseController {
    @ApiOperation(value = "初始化医生分派订单开关状态")
    public String initDoorStatus() {
        try {
            doctorDoorCoachOrderService.initDoorStatus();
            doctorDoorCoachOrderService.initDoorStatus(null);
            return success("成功");
        } catch (Exception e) {
            error(e);
@ -597,6 +598,25 @@ public class DoctorDoorCoachOrderController extends BaseController {
        }
    }
    @PostMapping(value = "dispatcherIntoTopic")
    @ApiOperation(value = "调度员进入会话")
    public ObjEnvelop dispatcherIntoTopic(
            @ApiParam(name = "orderId", value = "工单id", required = true) @RequestParam String orderId,
            @ApiParam(name = "hospitalName", value = "机构名称", required = true) @RequestParam String hospitalName,
            @ApiParam(name = "dispatcher", value = "调度员code", required = true) @RequestParam String dispatcher,
            @ApiParam(name = "dispatcherName", value = "调度员姓名", required = true) @RequestParam  String dispatcherName
    ) {
        try{
            JSONObject result = patientDoorCoachOrderService.dispatcherIntoTopic(orderId,hospitalName,dispatcher,dispatcherName);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
            return ObjEnvelop.getSuccess("转接成功",result.get(ResponseContant.resultMsg));
        }catch (Exception e){
            e.printStackTrace();
        }
        return ObjEnvelop.getError("转接失败");
    }
    @RequestMapping(value = "/urlAnalysis",produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
    @ApiOperation("门牌解析上门地址")

+ 0 - 19
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doorCoach/PatientDoorCoachOrderController.java

@ -204,25 +204,6 @@ public class PatientDoorCoachOrderController extends EnvelopRestEndpoint {
        }
    }
    @PostMapping(value = "dispatcherIntoTopic")
    @ApiOperation(value = "调度员进入会话")
    public ObjEnvelop dispatcherIntoTopic(
            @ApiParam(name = "orderId", value = "工单id", required = true) @RequestParam String orderId,
            @ApiParam(name = "hospitalName", value = "机构名称", required = true) @RequestParam String hospitalName,
            @ApiParam(name = "dispatcher", value = "调度员code", required = true) @RequestParam String dispatcher,
            @ApiParam(name = "dispatcherName", value = "调度员姓名", required = true) @RequestParam  String dispatcherName
    ) {
        try{
            JSONObject result = patientDoorCoachOrderService.dispatcherIntoTopic(orderId,hospitalName,dispatcher,dispatcherName);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
            return ObjEnvelop.getSuccess("转接成功",result.get(ResponseContant.resultMsg));
        }catch (Exception e){
            e.printStackTrace();
        }
        return ObjEnvelop.getError("转接失败");
    }
    /**
     * 获取服务项目

+ 42 - 7
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/ConsultService.java

@ -78,7 +78,7 @@ public class ConsultService {
    public Map<String,Object> findLastOnlineConsult(String patient,String orgCode){
        Map<String,Object> map = new HashedMap();
        String sql = "SELECT " +
                " b.consult, " +
                " b.consult,b.doctor, " +
                " b.type,b.status " +
                "FROM " +
                " wlyy_consult_team b, " +
@ -91,7 +91,9 @@ public class ConsultService {
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        if(list.size()>0){
            map = list.get(0);
            map.put("sessionId",String.valueOf(map.get("consult"))+"_"+patient+"_23");
            map.put("sessionId",patient+"_"+String.valueOf(map.get("doctor"))+"_23");
            BaseDoctorDO doctorDO = baseDoctorDao.findById(String.valueOf(map.get("doctor")));
            map.put("doctorName",doctorDO.getName());
        }
        return map;
    }
@ -176,6 +178,7 @@ public class ConsultService {
                "d.job_title_name AS \"jobTitleName\", " +
                "h.dept_name AS \"deptName\", " +
                "h.org_name AS \"hospitalName\", " +
                "h.org_code AS orgCode, " +
                "a.pay_status AS \"payStatus\", "+
                "a.source AS \"source\" "+
                "FROM wlyy_consult a," +
@ -210,13 +213,20 @@ public class ConsultService {
        sql += " ORDER BY a.czrq desc ";
        logger.info("sql="+sql);
        List<Map<String,Object>> result = hibenateUtils.createSQLQuery(sql,page,pagesize);
        Map<String,Integer> unreadNum = new HashedMap();
        for (Map<String,Object> map:result){
            if(type.equals(ImUtil.SESSION_TYPE_ONLINE)){
                String sessionId = String.valueOf(map.get("id"))+"_"+patient+"_23";
                String sessionId = patient+"_"+String.valueOf(map.get("doctorCode"))+"_23";
                //新增未读消息数量
                Integer count = imUtil.UserSessionsUnreadMessageCount(sessionId,patient);
                if(unreadNum.containsKey(sessionId)){
                    map.put("count",0);
                }else{
                    Integer count = imUtil.UserSessionsUnreadMessageCount(sessionId,patient);
                    map.put("count",count);
                    unreadNum.put(sessionId,count);
                }
                map.put("sessionId",sessionId);
                map.put("count",count);
            }
        }
        return result;
@ -325,6 +335,31 @@ public class ConsultService {
        return count;
    }
    /**
     * 查找历史咨询过的教师 去重
     * @param orgCode
     * @param patient
     * @return
     */
    public List<Map<String,Object>> findConsultDoctor(String orgCode,String patient,int page,int pagesize){
        String sql = "SELECT  DISTINCT " +
                " a.type AS type, " +
                " d.name AS doctorName, " +
                " d.photo AS doctorphoto, " +
                " d.id AS doctor, " +
                " d.job_title_name AS jobTitleName,  " +
                " h.dept_name AS deptName, " +
                " h.org_name AS orgName " +
                " FROM wlyy_consult a,wlyy_consult_team b, " +
                " base_doctor d,base_doctor_hospital h  " +
                " WHERE a.id=b.consult and d.id = h.doctor_code  " +
                " AND b.doctor=d.id  AND a.type = 23 and h.org_code = '"+orgCode+"' " +
                " and a.patient = '"+patient +"' "+
                " ORDER BY a.czrq desc";
        List<Map<String,Object>> mapList = hibenateUtils.createSQLQuery(sql,page,pagesize);
        return mapList;
    }
    /**
     * 查询医生所有的咨询记录
     * @param doctor 医生标识
@ -415,7 +450,7 @@ public class ConsultService {
            }
            if(type.equals(ImUtil.SESSION_TYPE_ONLINE)){
                String sessionId = String.valueOf(map.get("id"))+"_"+String.valueOf(map.get("patient"))+"_23";
                String sessionId = String.valueOf(map.get("patient"))+"_"+doctor+"_23";
                //新增未读消息数量
                Integer count = imUtil.UserSessionsUnreadMessageCount(sessionId,doctor);
                map.put("sessionId",sessionId);
@ -516,7 +551,7 @@ public class ConsultService {
        users.put(patient, 0);
        users.put(doctor, 0);
        String session_type = ImUtil.SESSION_TYPE_ONLINE;
        String sessionId = consult.getId() + "_" + patient + "_" + ct.getType();
        String sessionId = patient + "_" + doctor + "_" + ct.getType();
        JSONObject obj = imUtil.createTopics(sessionId, consult.getId(), tempPatient.getName(), users, messages, session_type);
        if (obj == null) {
            throw new RuntimeException("IM消息发送异常!");

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/WxPushService.java

@ -76,6 +76,6 @@ public class WxPushService {
        Date timeDate = DateUtil.strToDate(time);
        messageUtil.putTemplateWxMessage(wxId,templateName,scene,openid,first,null,null,1,null,
                DateUtil.getStringDate(),"消息未回复通知","未回复");
                DateUtil.dateToChineseTime2(timeDate),"消息未回复通知","未回复");
    }
}

+ 5 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doorCoach/DoctorDoorCoachOrderService.java

@ -1055,10 +1055,13 @@ public class DoctorDoorCoachOrderService {
        return count;
    }
    public void initDoorStatus(){
    public void initDoorStatus(String hospital){
        String sql = "SELECT * from base_doctor WHERE doctor_level=3 and id not in ( " +
                "SELECT doctor from base_door_coach_doctor_status " +
                ")";
        if (StringUtils.isNotBlank(hospital)){
            sql += "and EXISTS (select id from base_doctor_hospital dh where doc.id = dh.doctor_code and dh.org_code='"+hospital+"' and dh.del=1 ) ";
        }
        List<BaseDoctorDO> doctorDOs = jdbcTemplate.query(sql,new BeanPropertyRowMapper(BaseDoctorDO.class));
        List<BaseDoorCoachDoctorStatusDO> statusDOList = new ArrayList<>(doctorDOs.size());
@ -1085,7 +1088,7 @@ public class DoctorDoorCoachOrderService {
        if (null == doctorSwitch) {
            BaseDoorCoachDoctorStatusDO DoorDoctorStatusDO =new BaseDoorCoachDoctorStatusDO();
            DoorDoctorStatusDO.setDoctor(doctor);
            DoorDoctorStatusDO.setStatus(5);
            DoorDoctorStatusDO.setStatus(1);
            DoorDoctorStatusDO.setCreateTime(new Date());
            DoorDoctorStatusDO.setCreateUser(doctor);
            DoorDoctorStatusDO.setCreateUserName(null != doctorVO ? doctorVO.getName() : null);

+ 2 - 2
svr/svr-cloud-care/src/main/resources/application.yml

@ -231,7 +231,7 @@ wechat:
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fweixin.xmtyw.cn%2fwlyy-dev
  accId: gh_ffd64560fb21
  id: ijk  # base库中,wx_wechat 的id字段
  id: hz_yyyzh_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
im:
@ -335,7 +335,7 @@ wechat:
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fweixin.xmtyw.cn%2fwlyy-dev
  accId: gh_ffd64560fb21
  id: ijk  # base库中,wx_wechat 的id字段
  id: hz_yyyzh_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
im:

+ 90 - 24
svr/svr-cloud-job/pom.xml

@ -53,11 +53,6 @@
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <!-- <scope>runtime</scope> -->
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-entity</artifactId>
@ -88,6 +83,12 @@
            <groupId>com.yihu</groupId>
            <artifactId>mysql-starter</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
@ -124,8 +125,15 @@
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>im-service</artifactId>
            <artifactId>sms-service</artifactId>
            <version>2.0.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>base-service</artifactId>
            <version>2.0.0</version>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <groupId>xalan</groupId>
@ -133,38 +141,96 @@
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>im-service</artifactId>
            <version>2.0.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>svr-cloud-job</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <mainClass>com.yihu.CloudApplicationJob</mainClass>
                    <archive>
                        <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
                        <addMavenDescriptor>false</addMavenDescriptor>
                        <manifest>
                            <!-- 是否要把第三方jar加入到类构建路径 -->
                            <addClasspath>true</addClasspath>
                            <!-- 外部依赖jar包的最终位置 -->
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.yihu.CloudApplicationJob</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <!--拷贝依赖到jar外面的lib目录-->
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-lib</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- 依赖包输出目录,将来不打进jar包里 -->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <excludeTransitive>false</excludeTransitive>
                            <stripVersion>false</stripVersion>
                            <includeScope>runtime</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--指定配置文件,将resources打成外部resource-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
                    <archive>
                        <!-- 指定配置文件目录,这样jar运行时会去找到同目录下的resources文件夹下查找 -->
                        <manifestEntries>
                            <Class-Path>resources/</Class-Path>
                        </manifestEntries>
                    </archive>
                    <!-- 打包时忽略的文件(也就是不打进jar包里的文件) -->
                    <excludes>
                        <exclude>**/*.yml</exclude>
                        <exclude>**/*.xml</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- 拷贝资源文件 外面的resource目录-->
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <!-- 资源文件输出目录 -->
                            <outputDirectory>${project.build.directory}/resources</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <!--指定资源的位置-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/**.**</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

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

@ -1,36 +0,0 @@
package com.yihu.jw.care.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.sms.service.TXYSmsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * Created by Bing on 2021/5/29.
 */
@Component
public class MessageUtil {
    @Autowired
    private TXYSmsService txySmsService;
    private static Logger logger = LoggerFactory.getLogger(MessageUtil.class);
    public String sendTXYSJson(String templateCode,String mobile,String ...params)throws Exception{
        JSONObject sendObj = new JSONObject();
        sendObj.put("templateCode",templateCode);
        if (params.length>0){
            JSONArray paramArr =JSONArray.parseArray(JSON.toJSONString(params));
            sendObj.put("templateParamArr",paramArr);
        }else {
            JSONArray paramArr =new JSONArray();
            sendObj.put("templateParamArr",paramArr);
        }
        return txySmsService.sendMessageJson(mobile,sendObj);
    }
}

svr/svr-cloud-job/src/main/java/com.yihu/CloudApplicationJob.java → svr/svr-cloud-job/src/main/java/com/yihu/CloudApplicationJob.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/config/async/AsyncConfig.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/config/async/AsyncConfig.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/config/quartz/JobFactory.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/config/quartz/JobFactory.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/config/quartz/SchedulerConfig.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/config/quartz/SchedulerConfig.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/dao/JobConfigDao.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/JobConfigDao.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/dao/QuartzJobConfigDao.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/QuartzJobConfigDao.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/dao/QuartzJobLogDao.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/QuartzJobLogDao.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/dao/QuotaDao.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/QuotaDao.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/dao/WlyyQuotaResultDao.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/WlyyQuotaResultDao.java


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


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/job/QuartzHelper.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/job/QuartzHelper.java


+ 87 - 14
svr/svr-cloud-job/src/main/java/com.yihu/jw.care/job/consult/FinishConsultJob.java

@ -2,7 +2,15 @@ package com.yihu.jw.care.job.consult;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.util.http.HttpUtils;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.im.ConsultDo;
import com.yihu.jw.entity.base.im.ConsultTeamDo;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.im.dao.ConsultDao;
import com.yihu.jw.im.dao.ConsultTeamDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.patient.dao.BasePatientDao;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@ -11,8 +19,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -31,13 +39,22 @@ public class FinishConsultJob implements Job {
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private HttpUtils httpUtil;
    @Autowired
    private ImUtil imUtil;
    @Autowired
    private ConsultTeamDao consultTeamDao;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private ConsultDao consultDao;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        try{
            //在线咨询
            logger.info("FinishConsultJob start.....");
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            StringBuffer sql = new StringBuffer();
            sql.append("SELECT s.id session_id, s.name session_name, s.create_date session_create_time, s.last_message_time, ")
            .append("t.id topic_id, t.name topic_name, t.create_time topic_create_time, t.start_message_id ")
@ -46,18 +63,19 @@ public class FinishConsultJob implements Job {
            .append("SELECT id FROM ").append(imDb).append(".doctors d where d.id<>t.patient) ")
            .append("AND UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(s.last_message_time) > 24*3600 ")
            .append("ORDER BY t.create_time");
            JSONObject userAgent = new JSONObject();
            userAgent.put("uid","admin");
            userAgent.put("admin_token","0a5c5258-8863-4b07-a3f9-88c768528ab4");
            userAgent.put("token","");
            userAgent.put("imei","admin_imei");
            List<Map<String,Object>> list = jdbcTemplate.queryForList(sql.toString());
            list.stream().forEach(one->{
                String topicId = one.get("topic_id").toString();
                String topicName = one.get("topic_name").toString();
                logger.info("Got topic to terminate, " + topicId + ": " + topicName + ", last active time: " + one.get("last_message_time"));
                String response = httpUtil.sendLoginGet(server_url+"/doctor/consult/finish_consult","consult="+topicId,userAgent.toString());
                logger.info("FinishConsultJob response....."+response);
                try {
                    logger.info("Got topic to terminate, " + topicId + ": " + topicName + ", last active time: " + one.get("last_message_time"));
                   Integer response =  finishConsult(topicId,"admin",2);
                    logger.info("FinishConsultJob response....."+response);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
            logger.info("FinishConsultJob 处理医生回复后,居民进入了咨询但是没有回复的 咨询也要自动结束.....");
@ -81,9 +99,13 @@ public class FinishConsultJob implements Job {
                List<Map<String,Object>> temp = jdbcTemplate.queryForList(sql2.toString(),sessionId);
                if(temp!=null&&temp.size()>=0){
                    logger.info("Got topic to terminate, " + topicId + ": " + topicName + ", last active time: " + one.get("last_message_time"));
                    String response = httpUtil.sendLoginGet(server_url+"/doctor/consult/finish_consult","consult="+topicId,userAgent.toString());
                    logger.info("FinishConsultJob response....."+response);
                    try {
                        logger.info("Got topic to terminate, " + topicId + ": " + topicName + ", last active time: " + one.get("last_message_time"));
                        Integer response =  finishConsult(topicId,"admin",2);
                        logger.info("FinishConsultJob response....."+response);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
@ -93,4 +115,55 @@ public class FinishConsultJob implements Job {
        }
    }
    public int finishConsult(String consult, String endOperator, int endType) throws Exception {
        ConsultTeamDo consultTeam = consultTeamDao.findByConsult(consult);
        ConsultDo cons = consultDao.findOne(consult);
        if (consultTeam.getStatus() == 1) {
            return -1;
        }
//        //新增续方咨询结束判断 (续方未审核时不可由医生或居民关闭)
//        if (consultTeam.getType() == 8) {
//            Prescription prescription = prescriptionDao.findByCode(consultTeam.getRelationCode());
//            if (prescription.getStatus() == 0) {
//                return -2;
//            }
//        }
        String endName = "";
        String endId = "";
        //结束咨询才发送推送给IM文字消息
        if (endType == 1) {
            BasePatientDO p = patientDao.findById(endOperator);
            endName = p.getName();
            endId = p.getId();
        } else {
            if (endOperator.equals("admin")) {
                endId = "system";
                endName = "咨询超时未回复,系统自动";
            } else {
                BaseDoctorDO d = doctorDao.findOne(endOperator);
                endId = d.getId();
                endName = d.getName();
            }
        }
        JSONObject obj = imUtil.endTopics(consultTeam.getPatient(), endId, endName, consultTeam.getConsult());
        if (obj == null) {
            throw new RuntimeException("IM消息结束异常!");
        }
        if (obj.getInteger("status") == -1) {
            throw new RuntimeException(String.valueOf(obj.get("message")));
        }
        consultTeam.setEndMsgId(obj.getString("id"));
        cons.setEndTime(new Date());
        consultTeam.setEndTime(new Date());
        consultTeam.setStatus(1);
        consultDao.save(cons);
        consultTeamDao.save(consultTeam);
        return 1;
    }
}

+ 1 - 1
svr/svr-cloud-job/src/main/java/com.yihu/jw.care/job/message/DoctorSendUnreadJob.java

@ -32,7 +32,7 @@ public class DoctorSendUnreadJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("DoctorSendUnreadJob start.....");
        String sql = " select id,name,mobile from base_doctor where del=1 and id ='4028030c796376b801796380a2b50003' and mobile is not null  ";
        String sql = " select id,name,mobile from base_doctor where del=1 and mobile is not null  ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> tmp:list){
            String mobile = tmp.get("mobile").toString();

+ 14 - 10
svr/svr-cloud-job/src/main/java/com.yihu/jw.care/job/message/PatientSendUnreadJob.java

@ -2,6 +2,7 @@ package com.yihu.jw.care.job.message;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -43,15 +45,15 @@ public class PatientSendUnreadJob implements Job {
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("PatientSendUnreadJob start.....");
        String sql = "select p.id,p.name,wc.openId from base_patient p INNER JOIN base_patient_wechat wc " +
                " on p.id = wc.patient_id where p.del=1 and p.id='808080eb7955aa9301795b8bad3f0078' and wc.wechat_id = '"+wxId+"' GROUP BY p.id ORDER BY wc.create_time desc  ;  ";
                " on p.id = wc.patient_id where p.del=1  and wc.wechat_id = '"+wxId+"' GROUP BY p.id ORDER BY wc.create_time desc  ;  ";
        List<Map<String,Object>> patientList = jdbcTemplate.queryForList(sql);
        for (Map<String,Object>tmp:patientList) {
            try {
                String patientId = tmp.get("openId").toString();
                String patientId = tmp.get("id").toString();
                Integer unreadCount = imUtil.SessionsUnreadMessageCountByUserId(patientId);
                String name = tmp.get("name").toString();
                String openId = tmp.get("openId").toString();
                if (StringUtils.isNotBlank(patientId)) {
                if (StringUtils.isNotBlank(openId)) {
                    sql = "select t2.id from base_patient_family_member t1,base_patient t2 " +
                            " where t2.id in (select family_member from base_patient_family_member where patient = '" + patientId + "' ) " +
                            " and t1.patient = '" + patientId + "' and t1.family_member = t2.id ";
@ -66,17 +68,19 @@ public class PatientSendUnreadJob implements Job {
                }
                if (unreadCount > 0) {//发送模板
                    String first = ""+name+"您好,您与您的家庭成员共有"+unreadCount+"条消息未回复,请及时处理";
                    String url = server_url + "wxpush/sendPatientUnreadWXTemplate";
                    List<NameValuePair> params = new ArrayList<>();
                    params.add(new BasicNameValuePair("openid", openId));
                    params.add(new BasicNameValuePair("first", first));
                    params.add(new BasicNameValuePair("templateName", "template_process_feedback"));
                    params.add(new BasicNameValuePair("scene", "jobfsjmwd"));
                    httpClientUtil.post(url,params,"UTF-8");
                    sendPatientUnreadWXTemplate(openId,first,"template_process_feedback","jobfsjmwd");
                }
            } catch (Exception e) {
            }
        }
        logger.info("PatientSendUnreadJob end.....");
    }
    public void sendPatientUnreadWXTemplate(String openid,String first,String templateName,String scene){
        String time = DateUtil.getStringDateShort()+" 09:00:00";
        Date timeDate = DateUtil.strToDate(time);
        messageUtil.putTemplateWxMessage(wxId,templateName,scene,openid,first,null,null,null,null,
                DateUtil.dateToChineseTime2(timeDate),"消息未回复通知","未回复");
    }
}

svr/svr-cloud-job/src/main/java/com.yihu/jw.care/service/JobService.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/service/JobService.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/util/DateUtil.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/DateUtil.java


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

@ -0,0 +1,171 @@
package com.yihu.jw.care.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.base.wx.WxAccessTokenDO;
import com.yihu.jw.entity.base.wx.WxTemplateConfigDO;
import com.yihu.jw.sms.service.TXYSmsService;
import com.yihu.jw.util.wechat.WeixinMessagePushUtils;
import com.yihu.jw.wechat.dao.WxTemplateConfigDao;
import com.yihu.jw.wechat.service.WxAccessTokenService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * Created by Bing on 2021/5/29.
 */
@Component
public class MessageUtil {
    @Autowired
    private WxAccessTokenService wxAccessTokenService;
    @Autowired
    private WxTemplateConfigDao wxTemplateConfigDao;
    @Autowired
    private WeixinMessagePushUtils weixinMessagePushUtils;
    @Autowired
    private TXYSmsService txySmsService;
    private static Logger logger = LoggerFactory.getLogger(MessageUtil.class);
    public void putTemplateWxMessage(String wechatId, String templateName, String scene, String openId, String first
            ,String url, String remark, Integer type,JSONObject json,String ...keywords) {
        try {
            System.out.println(wechatId);
            WxAccessTokenDO wxAccessTokenDO = wxAccessTokenService.getWxAccessTokenById(wechatId);
            if (wxAccessTokenDO == null) {
                logger.info("wx_access_token表获取为空,wechatId" + wechatId);
                return;
            }
            WxTemplateConfigDO templateConfig = wxTemplateConfigDao.findByWechatIdAndTemplateNameAndSceneAndStatus(wechatId, templateName, scene, 1);
            WxTemplateConfigDO newConfig = new WxTemplateConfigDO();
            BeanUtils.copyProperties(templateConfig,newConfig);
            if (newConfig == null) {
                logger.info("微信模板不存在!请确认wechatId:" + wechatId + ",templateName:" + templateName + ",scene:" + scene);
                return;
            }
            logger.info("微信模板推送前");
            if (StringUtils.isNoneBlank(first)){
                newConfig.setFirst(first);
            }
            if (StringUtils.isNoneBlank(url)){
                newConfig.setUrl(url);
            }
            if (StringUtils.isNoneBlank(remark)){
                newConfig.setRemark(remark);
            }
            newConfig = setTemPlateUrl(newConfig,type,openId,json);
            int keyLength = keywords.length;
            if (keyLength >= 1) {
                if(StringUtils.isNoneBlank(keywords[0])){
                    newConfig.setKeyword1(keywords[0]);
                }
            }
            if (keyLength >= 2) {
                if(StringUtils.isNoneBlank(keywords[1])){
                    newConfig.setKeyword2(keywords[1]);
                }
            }
            if (keyLength >= 3) {
                if(StringUtils.isNoneBlank(keywords[2])){
                    newConfig.setKeyword3(keywords[2]);
                }
            }
            if (keyLength >= 4) {
                if(StringUtils.isNoneBlank(keywords[3])){
                    newConfig.setKeyword4(keywords[3]);
                }
            }
            if (keyLength >= 5) {
                if(StringUtils.isNoneBlank(keywords[4])){
                    newConfig.setKeyword5(keywords[4]);
                }
            }
            if (keyLength >= 6) {
                if(StringUtils.isNoneBlank(keywords[5])){
                    newConfig.setKeyword6(keywords[5]);
                }
            }
            if (keyLength >= 7) {
                if(StringUtils.isNoneBlank(keywords[6])){
                    newConfig.setKeyword7(keywords[6]);
                }
            }
            //发起微信消息模板推送
            weixinMessagePushUtils.putWxMsg(wxAccessTokenDO.getAccessToken(), openId, newConfig);
            logger.info("微信模板消息推送后");
        } catch (Exception e) {
            logger.info("微信模板推送异常");
            e.printStackTrace();
        }
    }
    public WxTemplateConfigDO setTemPlateUrl(WxTemplateConfigDO wxTemplateConfigDO,Integer type,String openid,JSONObject json){
        String url =  "taian-wx/html/";
        if (json==null){
            return wxTemplateConfigDO;
        }
        switch (type){
            case 1:
                //咨询回复
                wxTemplateConfigDO.setUrl(wxTemplateConfigDO.getUrl() + "?sessionId=" + json.getString("sessionId")
                        +"&type="+json.getString("consultType"));
                break;
            case 19:
                String urlStr= wxTemplateConfigDO.getUrl();
                boolean status = urlStr.contains("openid=");
                if(!status){
                    urlStr=json.getString("url")+"?openid=" + openid;
                }
                wxTemplateConfigDO.setUrl(url + urlStr );
                break;
            case 30:
                //反馈通知 测试 TPbq9m0SAiVfRhXtXq17SDmYIfrJ8Whp2NpSrq9wlfI
                if(json.containsKey("consult")) {
                    wxTemplateConfigDO.setUrl(url + wxTemplateConfigDO.getUrl() + "?openid=" + openid + "&consult=" + json.getString("consult"));
                }else if (json.containsKey("id")){
                    wxTemplateConfigDO.setUrl(url + wxTemplateConfigDO.getUrl() + "?openid=" + openid + "&id=" + json.getString("id"));
                }else if(json.containsKey("relationCode")){
                    wxTemplateConfigDO.setUrl(url + wxTemplateConfigDO.getUrl() + "?openid=" + openid );
                }else if(json.containsKey("resultCode")){
                    wxTemplateConfigDO.setUrl(url + wxTemplateConfigDO.getUrl() + "?resultCode=" + json.getString("resultCode"));
                }
                break;
            case 31:
                //上门服务医生评分
                wxTemplateConfigDO.setUrl(url + wxTemplateConfigDO.getUrl()+"?openid=" + openid + "&id=" + json.getString("id")+ "&finish=" + json.getString("finish"));
                break;
            case 32:
                String url1 = "wx/common/";
                wxTemplateConfigDO.setUrl(url1 + wxTemplateConfigDO.getUrl()+"?openid=" + openid + "&consult=" + json.getString("consult") + "&status=" + json.getInteger("status"));
                break;
            case 34:
                wxTemplateConfigDO.setUrl(url + wxTemplateConfigDO.getUrl() + "?openid=" + openid + "&orderId=" + json.getString("orderId")+ "&authorizeImage=" + json.getString("authorizeImage"));
                break;
            case 35:
                wxTemplateConfigDO.setUrl(url + wxTemplateConfigDO.getUrl()+json.getString("orderId")+"&isMask=1");
                break;
        }
        return wxTemplateConfigDO;
    }
    public String sendTXYSJson(String templateCode,String mobile,String ...params)throws Exception{
        JSONObject sendObj = new JSONObject();
        sendObj.put("templateCode",templateCode);
        if (params.length>0){
            JSONArray paramArr =JSONArray.parseArray(JSON.toJSONString(params));
            sendObj.put("templateParamArr",paramArr);
        }else {
            JSONArray paramArr =new JSONArray();
            sendObj.put("templateParamArr",paramArr);
        }
        return txySmsService.sendMessageJson(mobile,sendObj);
    }
}

svr/svr-cloud-job/src/main/java/com.yihu/jw.care/util/SystemConf.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/SystemConf.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/util/http/HttpResponse.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/http/HttpResponse.java


+ 2 - 0
svr/svr-cloud-job/src/main/java/com.yihu/jw.care/util/http/HttpUtils.java

@ -14,6 +14,7 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.io.BufferedReader;
@ -29,6 +30,7 @@ import java.util.Map;
 * Utils - HTTP请求辅助工具类
 * Created by progr1mmer on 2017/9/27.
 */
@Component
public class HttpUtils {
    public static HttpResponse doGet(String url, Map<String, Object> params) throws Exception {

svr/svr-cloud-job/src/main/java/com.yihu/jw.care/util/http/IPInfoUtils.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/http/IPInfoUtils.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/vo/WlyyJobConfigVO.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/vo/WlyyJobConfigVO.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/vo/WlyyQuotaVO.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/vo/WlyyQuotaVO.java


svr/svr-cloud-job/src/main/java/com.yihu/jw.care/web/BaseController.java → svr/svr-cloud-job/src/main/java/com/yihu/jw/care/web/BaseController.java


+ 8 - 3
svr/svr-cloud-job/src/main/java/com.yihu/jw.care/web/JobController.java

@ -259,13 +259,18 @@ public class JobController extends BaseController {
    @ApiOperation("立即执行")
    public String executeSignFamilyPayResultJob() {
        try {
            quartzHelper.startNow(FinishConsultJob.class, "finish_consult_job", null);
            quartzHelper.startNow(DoctorSendUnreadJob.class, "DOCTOR_SEND_UNREAD_MES_JOB", null);
            quartzHelper.startNow(PatientSendUnreadJob.class, "PATIENT_SEND_UNREAD_MES_JOB", null);
//            quartzHelper.removeJob("finish_consult_job3");
//            quartzHelper.removeJob("finish_consult_job4");
            quartzHelper.removeJob("PATIENT_SEND_UNREAD_MES_JOB3");
//            quartzHelper.startNow(FinishConsultJob.class, "finish_consult_job3", null);
//            quartzHelper.startNow(DoctorSendUnreadJob.class, "finish_consult_job4", null);
            quartzHelper.startNow(PatientSendUnreadJob.class, "PATIENT_SEND_UNREAD_MES_JOB3", null);
            return write(200, "启动成功");
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
}

+ 99 - 23
svr/svr-cloud-job/src/main/resources/application.yml

@ -54,8 +54,6 @@ FileTempPath:
  voice_path : /var/local/upload/voice
  chat_file_path : /var/local/upload/chat
cloudServer:
  server_url: http://172.26.0.107:10301/
---
spring:
  profiles: jwtest
@ -63,31 +61,45 @@ spring:
    url: jdbc:mysql://172.26.0.104/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true
    username: ssgg
    password: ssgg@jkzl2019
  activemq:
    broker-url: tcp://172.26.0.116:61616
    user: admin
    password: admin
  redis:
    host: 172.26.0.253 # Redis server host.
    port: 6379 # Redis server port.
fastDFS:
  fastdfs_file_url: http://172.26.0.110:8888/
fast-dfs:
  tracker-server: 172.26.0.110:22122 #服务器地址
hlwyyEntrance:
  url: http://localhost:10023
# mq 是否获取his数据,flag代表获取演示数据,false代表获取his真实数据
demo:
  flag: true
hospital:
  url: ht
  mqUser: 1
  mqPwd: 1
  url: https://wx.xmzsh.com
  mqUser: JKZL
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
im:
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
fastDFS:
  fastdfs_file_url: http://172.26.0.110:8888/
wlyy:
  url: http://ehr.yihu.com/wlyy/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040  # base库中,wx_wechat 的id字段
  appId: wxd03f859efdf0873d
  appSecret: 2935b54b53a957d9516c920a544f2537
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fweixin.xmtyw.cn%2fwlyy-dev
  accId: gh_ffd64560fb21
  id: hz_yyyzh_wx  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
cloudServer:
  server_url: http://172.26.0.107:10301/
pay:
  flag: true
---
spring:
  profiles: jwprod
@ -95,29 +107,93 @@ spring:
    url: jdbc:mysql://192.0.33.27:3306/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true
    username: im
    password: 2oEq3Kf7
  redis:
    host: 192.0.33.26 # Redis server host.
    port: 6390 # Redis server port.
    password: Kb6wKDQP1W4
fastDFS:
  fastdfs_file_url: https://hlwyy.xmzsh.com/fastdfs/
fast-dfs:
  tracker-server: 192.0.33.26:22122 #服务器地址
hlwyyEntrance:
  url: http://172.16.1.42:10023
# mq 是否获取his数据,flag代表获取演示数据,false代表获取his真实数据
demo:
  flag: false
  flag: true
hospital:
  url: https://172.16.1.34
  url: https://wx.xmzsh.com
  mqUser: JKZL
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
im:
  im_list_get: http://172.16.1.42:3000/
  data_base_name: im
fastDFS:
  fastdfs_file_url: http://192.0.33.26:8888/
  im_list_get: http://172.26.0.105:3000/
  data_base_name: im_internet_hospital
wlyy:
  url: http://www.xmtyw.cn/wlyytest/
  url: 1
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040  # base库中,wx_wechat 的id字段
  flag: false #演示环境  true走Mysql数据库  false走Oracle
  appId: wx2c55f5b7b2f3cb56
  appSecret: 0dd9927e58125ad5f0efb9299860d145
  wechat_token: 27eb3bb24f149a7760cf1bb154b08041
  wechat_base_url: http%3A%2F%2Fhzijk.cityihealth.com%2Fcityihealth%2FcloudCare%2F
  accId: gh_da06ed9e5751
  id: hz_yyyzh_wx  # base库中,wx_wechat 的id字段
  flag: true #演示环境  true走Mysql数据库  false走Oracle
cloudServer:
  server_url: http://172.26.0.12:10301/
pay:
  flag: true
---
spring:
  profiles: hzprod
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://172.26.0.13:3306/base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true&useSSL=false
    username: root
    password: '*ukOOSl&c0!y'
  #  elasticsearch:
  #    cluster-name: jkzl #集群名 默认elasticsearch
  #    cluster-nodes: 172.26.0.115:9300,172.26.0.115:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
  #    client-transport-sniff: false
  #    jest:
  #      uris: http://172.26.0.112:9200,http://172.26.0.112:9200
  #      connection-timeout: 60000 # Connection timeout in milliseconds.
  #      multi-threaded: true # Enable connection requests from multiple execution threads.
  activemq:
    broker-url: tcp://172.26.0.13:61616
    user: admin
    password: admin
  redis:
    host: 172.26.0.13 # Redis server host.
    port: 6379  # Redis server port.
    password: Kb6wKDQP1W4
fastDFS:
  fastdfs_file_url: http://172.26.0.13:8888/
fast-dfs:
  tracker-server: 172.26.0.13:22122 #服务器地址
# mq 是否获取his数据,flag代表获取演示数据,false代表获取his真实数据
demo:
  flag: false
hospital:
  url: 1
  mqUser: 1
  mqPwd: 1
  SourceSysCode: S60
  TargetSysCode: S01
im:
  im_list_get: http://172.26.0.12:3000/
  data_base_name: im_internet_hospital
wlyy:
  url: 1
wechat:
  appId: wx2c55f5b7b2f3cb56
  appSecret: 0dd9927e58125ad5f0efb9299860d145
  wechat_token: 27eb3bb24f149a7760cf1bb154b08041
  wechat_base_url: http%3A%2F%2Fhzijk.cityihealth.com%2Fcityihealth%2FcloudCare%2F
  accId: gh_da06ed9e5751
  id: hz_yyyzh_wx  # base库中,wx_wechat 的id字段
  flag: true #演示环境  true走Mysql数据库  false走Oracle
cloudServer:
  server_url: http://172.26.0.12:10301/
pay:
  flag: true