Commit 2c7710f7 authored by gaozhaochen's avatar gaozhaochen

add: 1. 万达公众号对接;2. 号源信息查询逻辑更新和健康云保持一致

parent 8d82fb17
......@@ -41,6 +41,10 @@ public enum LoginTypeEnum {
* 打浦桥,外滩,小东门,老西门,豫园,五里桥,淮海,瑞二
*/
WOA_ZZ("woa_zz", "中智用户系统公众号登录"),
/**
* 上海交通大学医学院附属第九人民医院黄浦分院
*/
WOA_WD("woa_wd", "万达公众号用户系统公众号登录"),
/**
* H5登录
......
......@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import cn.sh.stc.sict.cloud.common.core.dto.WOAWDUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WOAZzUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.XSZYUserInfo;
import lombok.experimental.UtilityClass;
......@@ -37,7 +38,7 @@ public class WoaUtil {
/**
* 获取用户信息请求地址
*/
private final static String WOA_XSZY_USER_INFO_API_URL = WOA_XSZY_PROXY_PASS_URL + WOA_XSZY_GATEWAY_URL;
private final static String WOA_XSZY_USER_INFO_API_URL = WOA_XSZY_URL + WOA_XSZY_GATEWAY_URL;
/**
* 接口授权信息
......@@ -98,6 +99,9 @@ public class WoaUtil {
// private final static String WOA_ZZ_PROXY_PASS_URL = "https://booking.hpdapuqiao.com";
private final static String ZZ_USER_INFO_API_URL = WOA_ZZ_PROXY_PASS_URL + "/api/Other/GetPerson";
//private final static String WOA_WD_PROXY_PASS_URL = "https://wxgzh.shjyhpfy.com/api/hosservice/visit/GetUserInfoByToken";
private final static String WOA_WD_PROXY_PASS_URL = "http://30.30.5.74:9988/woa/wd";
private final static String WOA_WD_USER_INFO_URL = WOA_WD_PROXY_PASS_URL + "/api/hosservice/visit/GetUserInfoByToken";
public WOAZzUserInfo getZzUserInfo(String accessToken) {
try {
......@@ -114,6 +118,23 @@ public class WoaUtil {
log.error(ex.getMessage(), ex);
return null;
}
}
public WOAWDUserInfo getWoaWDUserInfo(String accessToken) {
try {
HttpResponse response = HttpRequest.get(WOA_WD_USER_INFO_URL)
.header("access-token", accessToken)
.execute();
if (response.getStatus() != 200) {
log.error("万达公众号获取用户信息异常-1");
return null;
}
return JSONUtil.toBean(response.body(), WOAWDUserInfo.class);
} catch (Exception ex) {
log.error("万达公众号token获取用户信息异-2!");
log.error(ex.getMessage(), ex);
return null;
}
}
......
......@@ -10,6 +10,7 @@ import cn.sh.stc.sict.cloud.common.core.constant.RedisCacheConstant;
import cn.sh.stc.sict.cloud.common.core.constant.UserConstant;
import cn.sh.stc.sict.cloud.common.core.constant.enums.LoginTypeEnum;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WOAWDUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WOAZzUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.XSZYUserInfo;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
......@@ -96,6 +97,9 @@ public class SysUserBaseServiceImpl extends ServiceImpl<SysUserBaseMapper, SysUs
// 中智公众号登录
case WOA_ZZ:
return this.getWoaZzUserInfoByToken(split);
// 万达公众号登录
case WOA_WD:
return this.getWoaWDUserInfoByToken(split);
// 微信登录
default:
WxOAuth2AccessToken token = wxMpService.getOAuth2Service().getAccessToken(split[2]);
......@@ -245,6 +249,55 @@ public class SysUserBaseServiceImpl extends ServiceImpl<SysUserBaseMapper, SysUs
return info;
}
private UserInfo getWoaWDUserInfoByToken(String[] infoArray) {
String source = infoArray[0];
String appId = infoArray[1];
String token = infoArray[2];
String hospitalCode = infoArray[3];
WOAWDUserInfo userInfo = WoaUtil.getWoaWDUserInfo(token);
String userInfoStr = JSONUtil.toJsonStr(userInfo);
log.error("woa.login.wdUser = {}", userInfoStr);
if (ObjectUtil.isNull(userInfo) || StrUtil.isBlank(userInfo.getId())) {
return null;
}
// 根据用户ID和手机号查询当前用户是否已注册过
LambdaQueryWrapper<SysUserBase> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUserBase::getOpenId, userInfo.getId())
.or()
.eq(SysUserBase::getPhone, userInfo.getMobile())
.orderByDesc(SysUserBase::getUpdateTime)
.last("limit 1");
SysUserBase user = this.getOne(wrapper);
// 未注册用户默认注册
if (user == null) {
user = new SysUserBase();
user.setUserName(userInfo.getMobile());
user.setOpenId(userInfo.getId());
user.setName(userInfo.getUsername());
user.setIdCard(userInfo.getPersoncard());
user.setSex(userInfo.getGender());
user.setHeadimg(userInfo.getAvator());
user.setSource(source);
user.setStatus(Constant.BYTE_NO);
user.setPasswd(ENCODER.encode(Constant.DEFAULT_PASSWORD));
user.setPhone(userInfo.getMobile());
user.setAppId(appId);
this.save(user);
}
UserInfo info = new UserInfo();
info.setSysUserBase(user);
info.setOpenId(userInfo.getId());
// 设置医疗机构代码,后续查询只显示当前医疗机构下的查询结果
info.setHospitalCode(hospitalCode);
return info;
}
@Override
public boolean saveDto(UserDTO dto) {
if (NumberUtil.isNotNullOrZero(dto.getUser().getId())) {
......
......@@ -3,6 +3,7 @@ package cn.sh.stc.sict.theme.hpgp.service;
import cn.hutool.core.date.DateTime;
import cn.sh.stc.sict.theme.hpgp.model.HpgpBusyIdlePrediction;
import cn.sh.stc.sict.theme.hpgp.model.HpgpDepartmentRank;
import cn.sh.stc.sict.theme.hphy.model.HpDeptInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Date;
......@@ -28,7 +29,7 @@ public interface HpgpBusyIdlePredictionService extends IService<HpgpBusyIdlePred
*/
List<HpgpBusyIdlePrediction> busyIdlePrediction(String hospitalCode, String deptName);
void statisticResourceInfo(HpgpDepartmentRank dept, Date startDate, Date endDate, Byte flag);
void statisticResourceInfo(HpDeptInfo dept, Date startDate, Date endDate, Byte flag);
List<HpgpBusyIdlePrediction> listByDeptRank(HpgpDepartmentRank dept, DateTime startTime, DateTime endTime);
List<HpgpBusyIdlePrediction> listByDept(HpDeptInfo dept, DateTime startTime, DateTime endTime);
}
......@@ -17,8 +17,9 @@ public interface HpgpKsHotService extends IService<HpgpKsHot> {
* 根据医疗机构代码查询热门科室
*
* @param yljgdm 医疗机构代码
* @param size 科室数量
* @return
*/
List<HpgpKsHot> listHotDept(String yljgdm);
List<HpgpKsHot> listHotDept(String yljgdm, int size);
}
......@@ -8,19 +8,19 @@ import cn.hutool.core.util.StrUtil;
import cn.sh.stc.sict.theme.hpgp.dao.HpHzjlMapper;
import cn.sh.stc.sict.theme.hpgp.model.HpHzjl;
import cn.sh.stc.sict.theme.hpgp.model.HpgpBusyIdlePrediction;
import cn.sh.stc.sict.theme.hpgp.model.HpgpDepartmentRank;
import cn.sh.stc.sict.theme.hpgp.model.HpgpKsHot;
import cn.sh.stc.sict.theme.hpgp.service.HpHzjlService;
import cn.sh.stc.sict.theme.hpgp.service.HpgpBusyIdlePredictionService;
import cn.sh.stc.sict.theme.hpgp.service.HpgpDepartmentRankService;
import cn.sh.stc.sict.theme.hpgp.service.HpgpKsHotService;
import cn.sh.stc.sict.theme.hphy.model.HpDeptInfo;
import cn.sh.stc.sict.theme.hphy.model.HpDocInfo;
import cn.sh.stc.sict.theme.hphy.service.HpDeptInfoService;
import cn.sh.stc.sict.theme.hphy.service.HpDocInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
......@@ -40,6 +40,9 @@ public class HpHzjlServiceImpl extends ServiceImpl<HpHzjlMapper, HpHzjl> impleme
private final HpgpBusyIdlePredictionService hpgpBusyIdlePredictionService;
private final HpDocInfoService hpDocInfoService;
private final HpgpKsHotService hpgpKsHotService;
private final HpDeptInfoService hpDeptInfoService;
private static final Integer MAX_DEPT_SIZE = 3;
/**
* 根据身份证号查找最后三次不同科室就诊记录,并计算忙闲
......@@ -53,6 +56,7 @@ public class HpHzjlServiceImpl extends ServiceImpl<HpHzjlMapper, HpHzjl> impleme
public List<HpgpBusyIdlePrediction> listByCertIdAndHosCode(String certId,
String hospitalCode) {
List<HpgpBusyIdlePrediction> result = new ArrayList<>();
int resultDeptSize = 0;
DateTime startTime = DateUtil.tomorrow();
DateTime endTime = DateUtil.offsetDay(startTime, 6);
......@@ -61,33 +65,38 @@ public class HpHzjlServiceImpl extends ServiceImpl<HpHzjlMapper, HpHzjl> impleme
.eq(StrUtil.isNotBlank(hospitalCode), HpHzjl::getYljgdm, hospitalCode)
.groupBy(HpHzjl::getJzksbm)
.orderByDesc(HpHzjl::getJzksrq)
.last("limit 10");
.last("limit " + MAX_DEPT_SIZE);
List<HpHzjl> recordList = this.list(wrapper);
if (CollUtil.isNotEmpty(recordList)) {
for (HpHzjl record : recordList) {
if (result.size() >= 20) {
break;
}
// 查找科室
HpgpDepartmentRank dept = hpgpDepartmentRankService.getByCode(record.getYljgdm(), null, record.getJzksbm());
if (ObjectUtil.isEmpty(dept)) {
LambdaQueryWrapper<HpDeptInfo> deptWrapper = Wrappers.<HpDeptInfo>lambdaQuery();
deptWrapper.eq(HpDeptInfo::getHosOrgCode, record.getYljgdm())
.eq(HpDeptInfo::getDeptCode, record.getJzksbm())
.eq(HpDeptInfo::getDeptLevel, 2);
HpDeptInfo dept = hpDeptInfoService.getOne(deptWrapper);
if (ObjectUtil.isNull(dept)) {
continue;
}
// 忙闲预测
result.addAll(hpgpBusyIdlePredictionService.listByDeptRank(dept, startTime, endTime));
result.addAll(hpgpBusyIdlePredictionService.listByDept(dept, startTime, endTime));
resultDeptSize++;
}
}
// 历史科室查询结果为空时,采用热点科室数据
if (CollUtil.isEmpty(result)) {
List<HpgpKsHot> hotList = hpgpKsHotService.listHotDept(hospitalCode);
// 历史科室查询结果少于3个时,采用热点科室数据补充
if (resultDeptSize < MAX_DEPT_SIZE) {
List<HpgpKsHot> hotList = hpgpKsHotService.listHotDept(hospitalCode, MAX_DEPT_SIZE - resultDeptSize);
hotList.forEach(hot -> {
HpgpDepartmentRank rank = new HpgpDepartmentRank();
BeanUtils.copyProperties(hot, rank);
result.addAll(hpgpBusyIdlePredictionService.listByDeptRank(rank, startTime, endTime));
HpDeptInfo dept = new HpDeptInfo();
dept.setHosOrgCode(hot.getHospitalCode());
dept.setHosName(hot.getHospitalName());
dept.setOneDeptCode(hot.getOneDeptCode());
dept.setDeptCode(hot.getDeptCode());
dept.setDeptName(hot.getDeptName());
result.addAll(hpgpBusyIdlePredictionService.listByDept(dept, startTime, endTime));
});
}
return result;
}
......
......@@ -67,8 +67,8 @@ public class HpgpDepartmentRankServiceImpl extends ServiceImpl<HpgpDepartmentRan
deptInfo.setHosOrgCode(dept.getHospitalCode());
deptInfo.setOneDeptCode(dept.getOneDeptCode());
deptInfo.setDeptCode(dept.getDeptCode());
List<OutPatInfo> resourceOutPatInfo = WanDaHttpUtil.getResourceOutPatInfo(deptInfo);
List<DoctInfo> resourceDoctInfo = WanDaHttpUtil.getResourceDoctInfo(deptInfo);
List<OutPatInfo> resourceOutPatInfo = WanDaHttpUtil.getOutPatInfo(deptInfo);
List<DoctInfo> resourceDoctInfo = WanDaHttpUtil.getDoctInfo(deptInfo);
if (CollUtil.isEmpty(resourceDoctInfo) && CollUtil.isEmpty(resourceOutPatInfo)) {
return;
}
......
......@@ -21,11 +21,11 @@ import java.util.List;
public class HpgpKsHotServiceImpl extends ServiceImpl<HpgpKsHotMapper, HpgpKsHot> implements HpgpKsHotService {
@Override
public List<HpgpKsHot> listHotDept(String yljgdm) {
public List<HpgpKsHot> listHotDept(String yljgdm, int size) {
LambdaQueryWrapper<HpgpKsHot> wrapper = Wrappers.lambdaQuery();
wrapper.eq(HpgpKsHot::getGzh, StrUtil.isBlank(yljgdm) ? "ALL" : yljgdm)
.orderByAsc(HpgpKsHot::getRankScore)
.last("limit 3");
.last("limit " + size);
return this.list(wrapper);
}
}
......@@ -77,13 +77,13 @@ public class HpDeptInfoController extends ApiController {
@RequestParam(value = "oneDeptCode", required = false) String oneDeptCode,
@RequestParam(value = "dept", required = false) String deptCode,
@RequestParam(value = "flag", required = false, defaultValue = Constant.STRING_NO) Byte flag) {
QueryWrapper<HpgpDepartmentRank> wrapper = Wrappers.emptyWrapper();
LambdaQueryWrapper<HpgpDepartmentRank> queryWrapper = wrapper.select("DISTINCT standard_dept,hospital_code,hospital_name,one_dept_code,dept_code,dept_name").lambda();
queryWrapper.eq(StrUtil.isNotEmpty(hospCode), HpgpDepartmentRank::getHospitalCode, hospCode)
.eq(StrUtil.isNotEmpty(oneDeptCode), HpgpDepartmentRank::getOneDeptCode, oneDeptCode)
.eq(StrUtil.isNotEmpty(deptCode), HpgpDepartmentRank::getDeptCode, deptCode);
LambdaQueryWrapper<HpDeptInfo> wrapper = Wrappers.<HpDeptInfo>lambdaQuery();
wrapper.eq(HpDeptInfo::getDeptLevel, 2)
.eq(StrUtil.isNotEmpty(hospCode), HpDeptInfo::getHosOrgCode, hospCode)
.eq(StrUtil.isNotEmpty(oneDeptCode), HpDeptInfo::getOneDeptCode, oneDeptCode)
.eq(StrUtil.isNotEmpty(deptCode), HpDeptInfo::getDeptCode, deptCode);;
List<HpgpDepartmentRank> deptList = hpgpDepartmentRankService.list(queryWrapper);
List<HpDeptInfo> deptList = hpDeptInfoService.list(wrapper);
log.error("医院科室查询结果deptList = {}", deptList);
deptList.forEach(dept -> {
if (StrUtil.isEmpty(dept.getOneDeptCode()) || StrUtil.isEmpty(dept.getDeptCode())) {
......
......@@ -6,10 +6,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.constant.enums.LoginTypeEnum;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserCardInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WOAZzUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.XSZYUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.*;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.core.util.SsbUtil;
......@@ -143,6 +140,7 @@ public class HphyPatientBaseController {
}
// 获取患者信息
HphyPatientBase base = hphyPatientBaseService.getByOpenId(current.getOpenId());
log.error("获取患者信息 = {}", JSONUtil.toJsonStr(base));
// 根据手机号去重
if (ObjectUtil.isNull(base) || NumberUtil.isNullOrZero(base.getId())) {
base = hphyPatientBaseService.getByPhone(current.getPhone(), true);
......@@ -172,7 +170,13 @@ public class HphyPatientBaseController {
if (LoginTypeEnum.WOA_ZZ.getType().equals(source)) {
WOAZzUserInfo zzUserInfo = WoaUtil.getZzUserInfo(token);
log.error("zzUser = {}", zzUserInfo);
base = hphyPatientBaseService.saveWoaInfo(current, zzUserInfo);
base = hphyPatientBaseService.saveWoaZzInfo(current, zzUserInfo);
}
// 万达微信公众后
if (LoginTypeEnum.WOA_WD.getType().equals(source)) {
WOAWDUserInfo wdUserInfo = WoaUtil.getWoaWDUserInfo(token);
log.error("wdUserInfo = {}", wdUserInfo);
base = hphyPatientBaseService.saveWoaWdInfo(current, wdUserInfo);
}
}
......
......@@ -75,20 +75,23 @@ public class WDController {
public R getOrderNumberInfo(NumSourceInfo numSourceInfo) {
// 医生查询所有号源能查到,查询指定类型号源差不多,20220715处理:查询所有,过滤
String orderNumType = numSourceInfo.getOrderNumType();
if(WanDaConstant.ORDER_TYPE_OUTP.equals(numSourceInfo.getOrderType())){
numSourceInfo.setOrderNumType(null);
}
// String orderNumType = numSourceInfo.getOrderNumType();
// if(WanDaConstant.ORDER_TYPE_OUTP.equals(numSourceInfo.getOrderType())){
// numSourceInfo.setOrderNumType(null);
// }
numSourceInfo.setOrderNumType(null);
List<NumSourceInfo> list = WanDaHttpUtil.getOrderNumInfo(numSourceInfo);
if(CollUtil.isEmpty(list)){
return new R();
}
if(WanDaConstant.ORDER_TYPE_OUTP.equals(numSourceInfo.getOrderType())){
List<NumSourceInfo> result = list.stream().filter(i -> orderNumType.equals(i.getOrderNumType())).collect(Collectors.toList());
return new R(result);
}else{
return new R(list);
}
return new R(list);
// if(WanDaConstant.ORDER_TYPE_OUTP.equals(numSourceInfo.getOrderType())){
// List<NumSourceInfo> result = list.stream().filter(i -> orderNumType.equals(i.getOrderNumType())).collect(Collectors.toList());
// return new R(result);
// }else{
// return new R(list);
// }
// if (CollUtil.isNotEmpty(list)) {
// return R.builder().code(Constant.BYTE_YES).data(list).bizCode(Constant.INT_NO).build();
......
......@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.theme.hpgp.model.HpgpDepartmentRank;
import cn.sh.stc.sict.theme.hpgp.service.HpgpBusyIdlePredictionService;
import cn.sh.stc.sict.theme.hpgp.service.HpgpDepartmentRankService;
import cn.sh.stc.sict.theme.hphy.constant.DataConstant;
......@@ -19,7 +18,6 @@ import cn.sh.stc.sict.theme.hphy.wd.DoctInfo;
import cn.sh.stc.sict.theme.hphy.wd.HosInfo;
import cn.sh.stc.sict.theme.hphy.wd.WanDaHttpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -92,7 +90,7 @@ public class RefreshJob {
/**
* 每周一 2点 更新医生信息
*
* <p>
* 1、调用接口获取医生列表
* 2、删除现有医生信息
* 3、插入新的医生信息
......@@ -115,11 +113,11 @@ public class RefreshJob {
* 每天中午12点,晚上12点,统计号源信息
*/
// @Scheduled(cron = "0 50 12 * * ? ")
@Scheduled(cron = "0 0 0,12 * * ? ")
@Scheduled(cron = "0 0 12,0 * * ? ")
public void statisticRankDeptResourceInfo() {
QueryWrapper<HpgpDepartmentRank> wrapper = Wrappers.emptyWrapper();
LambdaQueryWrapper<HpgpDepartmentRank> lambda = wrapper.select("DISTINCT standard_dept,hospital_code,hospital_name,one_dept_code,dept_code,dept_name").lambda();
List<HpgpDepartmentRank> deptList = hpgpDepartmentRankService.list(lambda);
LambdaQueryWrapper<HpDeptInfo> wrapper = Wrappers.<HpDeptInfo>lambdaQuery();
wrapper.eq(HpDeptInfo::getDeptLevel, 2);
List<HpDeptInfo> deptList = deptInfoService.list(wrapper);
deptList.forEach(dept -> {
if (StrUtil.isEmpty(dept.getOneDeptCode()) || StrUtil.isEmpty(dept.getDeptCode())) {
return;
......@@ -141,7 +139,7 @@ public class RefreshJob {
List<HpDocInfo> docInfos = factory.getMapperFacade().mapAsList(doctInfos, HpDocInfo.class);
try {
docInfoService.saveDoctor(docInfos, hosOrgCode);
}catch (Exception e){
} catch (Exception e) {
log.error("医院 {} 医生信息保存出错", hosOrgCode);
log.error(e.getMessage(), e);
}
......
......@@ -21,4 +21,6 @@ public interface HpDeptInfoService extends IService<HpDeptInfo> {
DeptDoctorsVO getDeptDoctors(String hospitalCode, String deptCode);
void asyncUpdate(HpDeptInfo dept);
}
package cn.sh.stc.sict.theme.hphy.service;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserCardInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WOAZzUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.XSZYUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.*;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import cn.sh.stc.sict.theme.hphy.model.HphyPatientBase;
import com.baomidou.mybatisplus.extension.service.IService;
......@@ -39,7 +36,16 @@ public interface HphyPatientBaseService extends IService<HphyPatientBase> {
* @param userInfo 公众号用户详情
* @return XSZYUserInfo {@link WOAZzUserInfo}
*/
HphyPatientBase saveWoaInfo(CurrentUser current, WOAZzUserInfo userInfo);
HphyPatientBase saveWoaZzInfo(CurrentUser current, WOAZzUserInfo userInfo);
/**
* 保存万达公众号用户信息
*
* @param current 当前用户
* @param userInfo 公众号用户详情
* @return XSZYUserInfo {@link WOAWDUserInfo}
*/
HphyPatientBase saveWoaWdInfo(CurrentUser current, WOAWDUserInfo userInfo);
void savePatient(HphyPatientBase patient);
......
......@@ -77,8 +77,8 @@ public class HpDeptInfoServiceImpl extends ServiceImpl<HpDeptInfoMapper, HpDeptI
info.setHosOrgCode(deptInfo.getHosOrgCode());
info.setOneDeptCode(deptInfo.getOneDeptCode());
info.setDeptCode(deptInfo.getDeptCode());
List<OutPatInfo> resourceOutPatInfo = WanDaHttpUtil.getResourceOutPatInfo(info);
List<DoctInfo> resourceDoctInfo = WanDaHttpUtil.getResourceDoctInfo(info);
List<OutPatInfo> resourceOutPatInfo = WanDaHttpUtil.getOutPatInfo(info);
List<DoctInfo> resourceDoctInfo = WanDaHttpUtil.getDoctInfo(info);
List<HpDocInfo> remainDoctors = this.getRemainDoctList(doctors, resourceDoctInfo);
return new DeptDoctorsVO(hosInfo, deptInfo, resourceOutPatInfo, remainDoctors);
......@@ -91,8 +91,8 @@ public class HpDeptInfoServiceImpl extends ServiceImpl<HpDeptInfoMapper, HpDeptI
deptInfo.setHosOrgCode(dept.getHosOrgCode());
deptInfo.setOneDeptCode(dept.getOneDeptCode());
deptInfo.setDeptCode(dept.getDeptCode());
List<OutPatInfo> resourceOutPatInfo = WanDaHttpUtil.getResourceOutPatInfo(deptInfo);
List<DoctInfo> resourceDoctInfo = WanDaHttpUtil.getResourceDoctInfo(deptInfo);
List<OutPatInfo> resourceOutPatInfo = WanDaHttpUtil.getOutPatInfo(deptInfo);
List<DoctInfo> resourceDoctInfo = WanDaHttpUtil.getDoctInfo(deptInfo);
if (CollUtil.isEmpty(resourceDoctInfo) && CollUtil.isEmpty(resourceOutPatInfo)) {
return;
}
......
......@@ -4,10 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserCardInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WOAZzUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.XSZYUserInfo;
import cn.sh.stc.sict.cloud.common.core.dto.*;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
......@@ -112,7 +109,37 @@ public class HphyPatientBaseServiceImpl extends ServiceImpl<HphyPatientBaseMappe
* @return XSZYUserInfo {@link WOAZzUserInfo}
*/
@Override
public HphyPatientBase saveWoaInfo(CurrentUser current, WOAZzUserInfo userInfo) {
public HphyPatientBase saveWoaZzInfo(CurrentUser current, WOAZzUserInfo userInfo) {
if (ObjectUtil.isNotNull(userInfo)) {
HphyPatientBase base = new HphyPatientBase();
base.setUserId(current.getId());
base.setOpenId(current.getOpenId());
base.setPhone(userInfo.getMobile());
base.setName(userInfo.getUsername());
base.setCertId(userInfo.getPersoncard());
base.setGender(Constant.BYTE_YES.equals(userInfo.getGender()) ? "男" : "女");
base.setVerifyStatus(Constant.STRING_NO);
// 身份证号合法,设置年龄、性别、实名认证标志
if (IdcardUtil.isValidCard(base.getCertId())) {
String certId = base.getCertId();
base.setAge(String.valueOf(IdcardUtil.getAgeByIdCard(certId)));
base.setVerifyStatus(Constant.STRING_YES);
}
this.save(base);
return base;
}
return null;
}
/**
* 保存万达公众号用户信息
*
* @param current 当前用户
* @param userInfo 公众号用户详情
* @return XSZYUserInfo {@link WOAWDUserInfo}
*/
@Override
public HphyPatientBase saveWoaWdInfo(CurrentUser current, WOAWDUserInfo userInfo) {
if (ObjectUtil.isNotNull(userInfo)) {
HphyPatientBase base = new HphyPatientBase();
base.setUserId(current.getId());
......
package cn.sh.stc.sict.theme.hphy.wd;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil;
import cn.hutool.http.HttpRequest;
......@@ -8,15 +9,16 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import javax.print.DocFlavor;
import javax.xml.xpath.XPathConstants;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
@UtilityClass
......@@ -30,7 +32,7 @@ public class WanDaHttpUtil {
/**
* 获取家庭医生签约信息
*/
public static String getContractInfo(String idNo){
public static String getContractInfo(String idNo) {
ContractParam param = new ContractParam(idNo);
String body = HttpRequest.post(CONTRACT_INFO_URL)
.body(JSONUtil.toJsonStr(param))
......@@ -39,7 +41,7 @@ public class WanDaHttpUtil {
System.out.println(body);
JSON parse = JSONUtil.parse(body);
Object obj = parse.getByPath("data.pageInfo.totals");
if(null!=obj&& Integer.valueOf(obj.toString())>0){
if (null != obj && Integer.valueOf(obj.toString()) > 0) {
JSONArray arr = parse.getByPath("data.data", JSONArray.class);
return ((JSONObject) arr.get(0)).get("SQJGMC").toString();
}
......@@ -48,6 +50,7 @@ public class WanDaHttpUtil {
/**
* 发送短信
*
* @param phone
* @param msg
* @param appName
......@@ -197,6 +200,7 @@ public class WanDaHttpUtil {
*/
public List<NumSourceInfo> getOrderNumInfo(NumSourceInfo numSourceInfo) {
String xml = WanDaUtil.GetOrderNumInfoServiceXML(numSourceInfo);
log.error("号源查询:xml = {}", xml);
String body = "";
try {
body = HttpRequest.post(URL)
......@@ -215,14 +219,22 @@ public class WanDaHttpUtil {
List<NumSourceInfo> list = new ArrayList<>();
if (null != nodeList && nodeList.getLength() > 0) {
for (int i = 0; i < nodeList.getLength(); i++) {
list.add(XmlUtil.xmlToBean(nodeList.item(i), NumSourceInfo.class));
try {
// 外层异常只处理查询号源、解析xml的问题
// 号源数据出现异常,不再处理(大概率是医院数据质量低,造成号源数字解析问题)
list.add(XmlUtil.xmlToBean(nodeList.item(i), NumSourceInfo.class));
} catch (Exception e) {
// ignore exception
}
}
}
return list;
} else {
return null;
}
}catch (Exception e){
} catch (Exception e) {
log.error("号源查询失败,num = {}", JSONUtil.toJsonStr(numSourceInfo));
log.error("号源查询失败,body = {}", body);
log.error(e.getMessage(), e);
......@@ -423,7 +435,7 @@ public class WanDaHttpUtil {
*/
public List<DoctInfo> getResourceDoctInfo(DeptInfo deptInfo) {
String xml = WanDaUtil.GetResourceDoctInfoServiceXML(deptInfo);
//log.error("获取可预约医生信息 xml = {}", xml);
log.error("获取可预约医生信息 xml = {}", xml);
String body = HttpRequest.post(URL)
.body(xml)
.execute()
......@@ -433,7 +445,7 @@ public class WanDaHttpUtil {
log.error("获取可预约医生信息 失败");
return null;
}
//log.info("获取可预约医生信息:body = {}", body);
log.error("获取可预约医生信息:body = {}", body);
String returnXml = getReturn(body, "GetResourceDoctInfoService");
return serialDoctInfo(returnXml);
}
......@@ -446,7 +458,7 @@ public class WanDaHttpUtil {
*/
public List<OutPatInfo> getResourceOutPatInfo(DeptInfo deptInfo) {
String xml = WanDaUtil.GetResourceOutPatInfoServiceXML(deptInfo);
//log.error("获取可预约门诊信息 xml = {}", xml);
log.error("获取可预约门诊信息 xml = {}", xml);
String body = HttpRequest.post(URL)
.body(xml)
.execute()
......@@ -456,7 +468,7 @@ public class WanDaHttpUtil {
log.error("查询门诊信息失败");
return null;
}
//log.info("查询门诊信息:body = {}", body);
log.error("查询门诊信息:body = {}", body);
String returnXml = getReturn(body, "GetResourceOutPatInfoService");
return serialOutPatInfo(returnXml);
}
......@@ -487,7 +499,11 @@ public class WanDaHttpUtil {
List<DoctInfo> list = new ArrayList<>();
if (null != nodeList && nodeList.getLength() > 0) {
for (int i = 0; i < nodeList.getLength(); i++) {
list.add(XmlUtil.xmlToBean(nodeList.item(i), DoctInfo.class));
try {
list.add(XmlUtil.xmlToBean(nodeList.item(i), DoctInfo.class));
}catch (Exception e){
// ignore exception
}
}
}
return list;
......@@ -505,7 +521,11 @@ public class WanDaHttpUtil {
List<OutPatInfo> list = new ArrayList<>();
if (null != nodeList && nodeList.getLength() > 0) {
for (int i = 0; i < nodeList.getLength(); i++) {
list.add(XmlUtil.xmlToBean(nodeList.item(i), OutPatInfo.class));
try {
list.add(XmlUtil.xmlToBean(nodeList.item(i), OutPatInfo.class));
}catch (Exception e){
// ignore exception
}
}
}
return list;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment