diff --git a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/util/ValidateCodeUtil.java b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/util/ValidateCodeUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..c1eb62f63e482b833e8369155c3d0f942220ff88 --- /dev/null +++ b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/util/ValidateCodeUtil.java @@ -0,0 +1,60 @@ +package cn.sh.stc.sict.cloud.common.core.util; + +import cn.hutool.core.util.StrUtil; +import cn.sh.stc.sict.cloud.common.core.constant.RedisCacheConstant; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.util.concurrent.TimeUnit; + +/** + * @Description 验证码校验工具类 + * @Author + * @Date + */ +public class ValidateCodeUtil { + + /** + * 过期时间/s + */ + private final static Long EXPIRE_TIME_SECOND = 120L; + + /** + * 从redis取出验证码并验证 + * type : 0-登录 1-注册 + */ + public static boolean validateCode(StringRedisTemplate redisTemplate, String phone, String code, Byte type) { + String key = RedisCacheConstant.SICT_PHONE_CODE_KEY + ":" + type + ":" + phone; + if (!redisTemplate.hasKey(key)) { + return false; + } + Object codeObj = redisTemplate.opsForValue().get(key); + + if (codeObj == null) { + return false; + } + String savedCode = codeObj.toString(); + if (StrUtil.isBlank(savedCode)) { + redisTemplate.delete(key); + return false; + } + if (!StrUtil.equals(savedCode, code)) { + return false; + } + redisTemplate.delete(key); + return true; + } + + public static void saveCode(RedisTemplate redisTemplate, String phone, String code, Byte type) { + String key = RedisCacheConstant.SICT_PHONE_CODE_KEY + ":" + type + ":" + phone; + redisTemplate.opsForValue().set(key, code, EXPIRE_TIME_SECOND, TimeUnit.SECONDS); + } + + public static boolean hasPhoneKey(RedisTemplate redisTemplate, String phone, Byte type) { + String key = RedisCacheConstant.SICT_PHONE_CODE_KEY + ":" + type + ":" + phone; + if (redisTemplate.hasKey(key)) { + return true; + } + return false; + } +} diff --git a/cloud-common/cloud-common-data/src/main/java/cn/sh/stc/sict/cloud/common/data/util/ValidateCodeUtil.java b/cloud-common/cloud-common-data/src/main/java/cn/sh/stc/sict/cloud/common/data/util/ValidateCodeUtil.java deleted file mode 100644 index cedcd52aa9351edc9bf0306457cee67e5e4c5499..0000000000000000000000000000000000000000 --- a/cloud-common/cloud-common-data/src/main/java/cn/sh/stc/sict/cloud/common/data/util/ValidateCodeUtil.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.sh.stc.sict.cloud.common.data.util; - -import cn.hutool.core.util.StrUtil; -import cn.sh.stc.sict.cloud.common.core.constant.RedisCacheConstant; -import org.springframework.data.redis.core.RedisTemplate; - -/** - * @Description 验证码校验工具类 - * @Author - * @Date - */ -public class ValidateCodeUtil { - - /** - * 从redis取出验证码并验证 - */ - public static boolean validateCode(RedisTemplate redisTemplate, String code, String phone) { - String key = RedisCacheConstant.SICT_PHONE_CODE_KEY + phone; - if (!redisTemplate.hasKey(key)) { - return false; - } - Object codeObj = redisTemplate.opsForValue().get(key); - - if (codeObj == null) { - return false; - } - String savedCode = codeObj.toString(); - if (StrUtil.isBlank(savedCode)) { - redisTemplate.delete(key); - return false; - } - if (!StrUtil.equals(savedCode, code)) { - return false; - } - return true; - } -} diff --git a/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/filter/ValidateCodeGatewayFilter.java b/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/filter/ValidateCodeGatewayFilter.java index 498c316cb763df08261247e42d716ea00fd27bfe..c924174a78e0e592698201641342bee550fca9cb 100644 --- a/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/filter/ValidateCodeGatewayFilter.java +++ b/cloud-common/cloud-common-gateway/src/main/java/cn/sh/stc/sict/cloud/common/gateway/filter/ValidateCodeGatewayFilter.java @@ -6,6 +6,8 @@ import cn.sh.stc.sict.cloud.common.core.constant.SecurityConstants; import cn.sh.stc.sict.cloud.common.core.constant.enums.LoginTypeEnum; import cn.sh.stc.sict.cloud.common.core.exception.ValidateCodeException; import cn.sh.stc.sict.cloud.common.core.util.R; +import cn.sh.stc.sict.cloud.common.core.util.SmsSendUtil; +import cn.sh.stc.sict.cloud.common.core.util.ValidateCodeUtil; import cn.sh.stc.sict.cloud.common.core.util.WebUtils; import cn.sh.stc.sict.cloud.common.gateway.config.FilterIgnorePropertiesConfig; import com.fasterxml.jackson.core.JsonProcessingException; @@ -15,6 +17,7 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.HttpStatus; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; @@ -32,7 +35,7 @@ import reactor.core.publisher.Mono; public class ValidateCodeGatewayFilter extends AbstractGatewayFilterFactory { private final ObjectMapper objectMapper; private final FilterIgnorePropertiesConfig filterIgnorePropertiesConfig; - // private final SmsSendUtil smsSendUtil; + private final StringRedisTemplate redisTemplate; @Override public GatewayFilter apply(Object config) { @@ -63,7 +66,13 @@ public class ValidateCodeGatewayFilter extends AbstractGatewayFilterFactory { if (StrUtil.containsAnyIgnoreCase(request.getURI().getPath(), SecurityConstants.SOCIAL_TOKEN_URL)) { String mobile = request.getQueryParams().getFirst("mobile"); if (StrUtil.containsAny(mobile, LoginTypeEnum.SMS.getType())) { - throw new ValidateCodeException("验证码不合法"); + String phone = mobile.split("@")[2]; + String code = request.getQueryParams().getFirst("code"); + log.error("mobile = {}, code = {}", phone, code); + if(!ValidateCodeUtil.validateCode(redisTemplate, phone, code, Constant.BYTE_NO)){ + throw new ValidateCodeException("验证码不合法"); + } + return chain.filter(exchange); } else { return chain.filter(exchange); } diff --git a/smart-health-modules/cloud-upms/cloud-upms-biz/src/main/java/cn/sh/stc/sict/cloud/upms/service/impl/SysUserBaseServiceImpl.java b/smart-health-modules/cloud-upms/cloud-upms-biz/src/main/java/cn/sh/stc/sict/cloud/upms/service/impl/SysUserBaseServiceImpl.java index b465aa1905252266b32edb4b035b2e003740b58d..ad5dbc86c9d966d470e1c7a08baf3c5ae4d4aafc 100644 --- a/smart-health-modules/cloud-upms/cloud-upms-biz/src/main/java/cn/sh/stc/sict/cloud/upms/service/impl/SysUserBaseServiceImpl.java +++ b/smart-health-modules/cloud-upms/cloud-upms-biz/src/main/java/cn/sh/stc/sict/cloud/upms/service/impl/SysUserBaseServiceImpl.java @@ -1,6 +1,7 @@ package cn.sh.stc.sict.cloud.upms.service.impl; 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.util.NumberUtil; import cn.sh.stc.sict.cloud.upms.dao.SysUserBaseMapper; import cn.sh.stc.sict.cloud.upms.dto.UserDTO; @@ -48,10 +49,14 @@ public class SysUserBaseServiceImpl extends ServiceImpl appId = {}, inStr = {}", appId, inStr); // code = 011Eg6Ga1UOXeA0R5wHa16dkab2Eg6G7 String[] split = inStr.split(StringPool.AT); - - WxOAuth2AccessToken token = wxMpService.getOAuth2Service().getAccessToken(split[2]); - - return this.getByOpenId(token.getOpenId()); + if(LoginTypeEnum.SMS.getType().equals(split[0])){ + // 手机号登录 + return this.getByPhone(split[2]); + }else{ + // 微信登录 + WxOAuth2AccessToken token = wxMpService.getOAuth2Service().getAccessToken(split[2]); + return this.getByOpenId(token.getOpenId()); + } } @Override @@ -63,6 +68,26 @@ public class SysUserBaseServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysUserBase::getPhone, phone); + SysUserBase user = this.getOne(wrapper); + // 未注册用户默认注册 + if (user == null) { + user = new SysUserBase(); + user.setOpenId(phone); + user.setStatus(Constant.BYTE_NO); + user.setPasswd(Constant.DEFAULT_PASSWORD); + user.setPhone(phone); + this.save(user); + } + + UserInfo info = new UserInfo(); + info.setSysUserBase(user); + info.setOpenId(phone); + return info; + } + private UserInfo getByOpenId(String openId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/AppointmentController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/AppointmentController.java index 64d114cf5f6f0641f3294f6fa8b6efab265e10cf..100dd61d1bf908e436d183e9f6fde683d3e72448 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/AppointmentController.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/AppointmentController.java @@ -171,6 +171,7 @@ public class AppointmentController { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.ge(StrUtil.isNotBlank(startDate), HpAppointment::getNumSourceDate, startDate) .le(StrUtil.isNotBlank(endDate), HpAppointment::getNumSourceDate, endDate) + .eq(HpAppointment::getPatientId, patient.getId()) .orderByDesc(HpAppointment::getCreateTime); page = hpAppointmentService.page(page, wrapper); diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HphyPatientBaseController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HphyPatientBaseController.java index 7a557852eb414fe61c8380f44cf018ceefc5e181..a89c68914279defaac02cb916850e0703144db88 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HphyPatientBaseController.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HphyPatientBaseController.java @@ -2,17 +2,21 @@ package cn.sh.stc.sict.theme.hphy.controller.mp; import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.StrUtil; +import cn.sh.stc.sict.cloud.common.core.constant.Constant; import cn.sh.stc.sict.cloud.common.core.util.R; +import cn.sh.stc.sict.cloud.common.core.util.ValidateCodeUtil; import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils; import cn.sh.stc.sict.cloud.upms.dto.CurrentUser; import cn.sh.stc.sict.cloud.upms.model.SysUserBase; import cn.sh.stc.sict.theme.hphy.constant.PatientConstant; import cn.sh.stc.sict.theme.hphy.model.HphyPatientBase; import cn.sh.stc.sict.theme.hphy.service.HphyPatientBaseService; +import cn.sh.stc.sict.theme.hphy.wd.WanDaHttpUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.*; @@ -30,6 +34,7 @@ import org.springframework.web.bind.annotation.*; public class HphyPatientBaseController { private HphyPatientBaseService hphyPatientBaseService; + private StringRedisTemplate redisTemplate; /** * 注册并关联登录信息 @@ -43,6 +48,10 @@ public class HphyPatientBaseController { CurrentUser current = SecurityUtils.getCurrentUser(); HphyPatientBase base = hphyPatientBaseService.getByOpenId(current.getOpenId()); patient.setOpenId(current.getOpenId()); +// if(!ValidateCodeUtil.validateCode(redisTemplate, patient.getPhone(), patient.getRandomCode(), Constant.BYTE_YES)){ +// return new R().error("验证码错误!"); +// } + if (base != null) { patient.setId(base.getId()); } @@ -58,6 +67,15 @@ public class HphyPatientBaseController { patient.setGender(IdcardUtil.getGenderByIdCard(patient.getCertId()) == 1 ? "男" : "女"); // 手机号redis验证 // 根据手机号去重 + // 获取家庭医生签约信息 + try { + String familyDocHos = WanDaHttpUtil.getContractInfo(patient.getCertId()); + if(StrUtil.isNotBlank(familyDocHos)){ + patient.setFamilyDocHos(familyDocHos); + } + }catch (Exception e){ + log.error(e.getMessage(), e); + } hphyPatientBaseService.saveOrUpdate(patient); return new R(patient.getId()); diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/IntelligentQAController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/IntelligentQAController.java index ecfdf77932aaaf96e8efc9259774875d62c7ec56..7ec8935a17452e953d5c8ba241a176f4dafbeec8 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/IntelligentQAController.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/IntelligentQAController.java @@ -41,12 +41,12 @@ public class IntelligentQAController { " \n" + " " + IdWorker.getId() + "\n" + ""; - - String body = HttpRequest.post("http://www.365jqr.com/jqrsvr.ashx?Command=talk_162") + String body = HttpRequest.post("http://30.30.5.74:9988/qa/jqrsvr.ashx?Command=talk_162") .body(xml) .execute() .body(); - + log.error("孙总接口请求 xml = {}", xml); + log.error("孙总接口返回 body = {}", body); Map result = XmlUtil.xmlToMap(body); if(result.containsKey(CONTENT)){ return new R(result.get(CONTENT)); diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/WDController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/WDController.java index a902bd2cd08ef1b9f2a5ef8252114c347bb245a9..fa7d7e9cb179a665e6da651f9cb4b6139d00597f 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/WDController.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/WDController.java @@ -1,15 +1,20 @@ package cn.sh.stc.sict.theme.hphy.controller.mp; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.RandomUtil; import cn.sh.stc.sict.cloud.common.core.constant.Constant; import cn.sh.stc.sict.cloud.common.core.util.R; +import cn.sh.stc.sict.cloud.common.core.util.ValidateCodeUtil; import cn.sh.stc.sict.theme.hphy.wd.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -22,6 +27,9 @@ import java.util.List; @Api(tags = "[C]万达相关接口") public class WDController { + @Autowired + private StringRedisTemplate redisTemplate; + /** * 0. 发短信 * 1. 医生查询 @@ -31,13 +39,34 @@ public class WDController { * 5. 预约须知 */ + @ApiOperation("发送短信") + @PostMapping("/send/msg") + public R sendMsg(@RequestParam("phone") String phone, + @ApiParam("类型:0-登录,1-注册") @RequestParam("type") Byte type) { + boolean mobile = Validator.isMobile(phone); + if (!mobile) { + return new R().error("手机号错误!"); + } + // 是否重复发送 + if(ValidateCodeUtil.hasPhoneKey(redisTemplate, phone, type)){ + return new R().success("短信已发送,请等待!"); + } + String appName = "dx"; + String code = RandomUtil.randomNumbers(6); + String msg = "您的验证码是:" + code; + WanDaHttpUtil.sendMsg(phone, msg, appName); + ValidateCodeUtil.saveCode(redisTemplate, phone, code, type); + return new R().success("短信已发送,请等待!"); + } + + @ApiOperation("获取号源信息") @GetMapping("/num/info") public R getOrderNumberInfo(NumSourceInfo numSourceInfo) { List list = WanDaHttpUtil.getOrderNumInfo(numSourceInfo); - if(CollUtil.isNotEmpty(list)){ + if (CollUtil.isNotEmpty(list)) { return R.builder().code(Constant.BYTE_YES).data(list).bizCode(Constant.INT_NO).build(); } @@ -46,7 +75,7 @@ public class WDController { deptInfo.setOneDeptCode(numSourceInfo.getOneDeptCode()); deptInfo.setDeptCode(numSourceInfo.getDeptCode()); List outPatInfo = WanDaHttpUtil.getResourceOutPatInfo(deptInfo); - if(CollUtil.isNotEmpty(outPatInfo)){ + if (CollUtil.isNotEmpty(outPatInfo)) { numSourceInfo.setOrderType(WanDaConstant.ORDER_TYPE_CLINC); numSourceInfo.setResourceCode(outPatInfo.get(0).getResourceCode()); list = WanDaHttpUtil.getOrderNumInfo(numSourceInfo); diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/model/HphyPatientBase.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/model/HphyPatientBase.java index 4882e20bf3b7de173977c43221057cdd4f449246..ac7b886afd5d27eb5997af6cd94e90d27fef23de 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/model/HphyPatientBase.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/model/HphyPatientBase.java @@ -128,6 +128,8 @@ public class HphyPatientBase extends Model { @ApiModelProperty(value = "企业名称") private String enterpriseName; + private String familyDocHos; + @TableField(exist = false) private String randomCode; diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/impl/HpDocInfoServiceImpl.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/impl/HpDocInfoServiceImpl.java index 0f9bcfd0487089a11bbfdab1225804317213f7d3..475f988cffae47d280c8d17e50d3aa0eba4b1790 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/impl/HpDocInfoServiceImpl.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/impl/HpDocInfoServiceImpl.java @@ -1,5 +1,6 @@ package cn.sh.stc.sict.theme.hphy.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.sh.stc.sict.theme.hphy.dao.HpDocInfoMapper; import cn.sh.stc.sict.theme.hphy.model.HpDocInfo; import cn.sh.stc.sict.theme.hphy.model.HphyGuideMatch; @@ -40,32 +41,34 @@ public class HpDocInfoServiceImpl extends ServiceImpl getRecommendList(HphyGuideRecord guide, List pythonList) { List result = new ArrayList<>(); - Map matchMap = pythonList.stream().collect(Collectors.toMap(PythonResult::getDoctorId, PythonResult::getMatchScore)); - List doctorIdList = pythonList.stream().map(PythonResult::getDoctorId).collect(Collectors.toList()); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(HpDocInfo::getPersonId, doctorIdList); - List list = this.list(wrapper); - List matchList = new ArrayList<>(); - list.forEach(doctor -> { - DoctorMatchVO vo = new DoctorMatchVO(); - vo.setDocInfo(doctor); - vo.setMatchScore(matchMap.getOrDefault(doctor.getPersonId(), 85.0)); - result.add(vo); - HphyGuideMatch match = new HphyGuideMatch(); - match.setDeptId(doctor.getDeptCode()); - match.setDeptName(doctor.getDeptName()); - match.setDoctorId(doctor.getResourceCode()); - match.setDoctorName(doctor.getResourceName()); - match.setGuideId(guide.getId()); - match.setHospId(doctor.getHosOrgCode()); - match.setHospName(doctor.getHosName()); - match.setMatchScore(vo.getMatchScore().toString()); - match.setPatientId(guide.getPatientId()); - match.setPatientName(guide.getPatientName()); - matchList.add(match); - }); - // 保存医生推荐记录 - hphyGuideMatchService.asyncSaveBatch(matchList); + if(CollUtil.isNotEmpty(pythonList)){ + Map matchMap = pythonList.stream().collect(Collectors.toMap(PythonResult::getDoctorId, PythonResult::getMatchScore)); + List doctorIdList = pythonList.stream().map(PythonResult::getDoctorId).collect(Collectors.toList()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(HpDocInfo::getPersonId, doctorIdList); + List list = this.list(wrapper); + List matchList = new ArrayList<>(); + list.forEach(doctor -> { + DoctorMatchVO vo = new DoctorMatchVO(); + vo.setDocInfo(doctor); + vo.setMatchScore(matchMap.getOrDefault(doctor.getPersonId(), 85.0)); + result.add(vo); + HphyGuideMatch match = new HphyGuideMatch(); + match.setDeptId(doctor.getDeptCode()); + match.setDeptName(doctor.getDeptName()); + match.setDoctorId(doctor.getResourceCode()); + match.setDoctorName(doctor.getResourceName()); + match.setGuideId(guide.getId()); + match.setHospId(doctor.getHosOrgCode()); + match.setHospName(doctor.getHosName()); + match.setMatchScore(vo.getMatchScore().toString()); + match.setPatientId(guide.getPatientId()); + match.setPatientName(guide.getPatientName()); + matchList.add(match); + }); + // 保存医生推荐记录 + hphyGuideMatchService.asyncSaveBatch(matchList); + } return result.stream() .sorted(Comparator.comparing(DoctorMatchVO::getMatchScore).reversed()) diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/vo/PythonDTO.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/vo/PythonDTO.java index c58d0b6bc1fca1a424c24372e6e9fcc264c5ae38..2159436a9cf8cafcc16d80f4ff9905449571c1ff 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/vo/PythonDTO.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/vo/PythonDTO.java @@ -26,12 +26,13 @@ public class PythonDTO { private String age = "N"; private String exp = "N"; private String fre = "N"; + private String familyDocHos = ""; /** * [纬度,经度] */ private List add = new ArrayList<>(); private List disease; - private List reserve_list = new ArrayList<>(); + private List reserveList = new ArrayList<>(); private List appo = new ArrayList<>(); private Object result; @@ -52,6 +53,9 @@ public class PythonDTO { if (StrUtil.isNotBlank(patient.getDisease())) { disease.add(patient.getDisease()); } + if(StrUtil.isNotBlank(patient.getFamilyDocHos())){ + this.familyDocHos = patient.getFamilyDocHos(); + } } log.error("disease----------------->{}", disease.toString()); if (CollUtil.isNotEmpty(disease)) { diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/ContractInfoParam.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/ContractInfoParam.java new file mode 100644 index 0000000000000000000000000000000000000000..3157761b2c0c97ef72e4c9b8a18300f58b776872 --- /dev/null +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/ContractInfoParam.java @@ -0,0 +1,15 @@ +package cn.sh.stc.sict.theme.hphy.wd; + +import lombok.Data; + +/** + * 家庭医生签约信息查询 param + */ +@Data +public class ContractInfoParam { + private String loginName = "hpwgzxwx"; + private String authCode = "870032"; + private String searchParam; + private String pageNo = "1"; + private String pageSize = "10"; +} diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/ContractParam.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/ContractParam.java new file mode 100644 index 0000000000000000000000000000000000000000..2be8efec1ed2b880ce42e4267d755644395647da --- /dev/null +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/ContractParam.java @@ -0,0 +1,20 @@ +package cn.sh.stc.sict.theme.hphy.wd; + +import lombok.Data; + +@Data +public class ContractParam { + private String loginName; + private String authCode; + private String searchParam; + private String pageNo; + private String pageSize; + + public ContractParam(String searchParam) { + this.loginName = "hpwgzxwx"; + this.authCode = "870032"; + this.searchParam = "and ZJHM = '"+ searchParam+"'"; + this.pageNo = "1"; + this.pageSize = "1"; + } +} diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/WanDaHttpUtil.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/WanDaHttpUtil.java index c773c8d094117e241fc6feb36d106607caa0867b..ab49f2b74eeb928d6cbfa17e49368f4fdedc3215 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/WanDaHttpUtil.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/WanDaHttpUtil.java @@ -3,6 +3,10 @@ package cn.sh.stc.sict.theme.hphy.wd; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.XmlUtil; import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSON; +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 lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; @@ -18,9 +22,46 @@ import java.util.List; @UtilityClass public class WanDaHttpUtil { String URL = "http://173.18.1.29:7001/yyzlWS/webservice/ss"; + String CONTRACT_INFO_URL = "http://173.18.1.66:7001/api/service/accessResources/302fe34ac9ad4b3291329cd3bf6ca9d0"; + String MSG_URL = "http://173.18.1.94:8080/dxpt/ws/smsService"; String CODE_XPATH = "//Response/MessageHeader/code"; String DESC_XPATH = "//Response/MessageHeader/desc"; + /** + * 获取家庭医生签约信息 + */ + public static String getContractInfo(String idNo){ + ContractParam param = new ContractParam(idNo); + String body = HttpRequest.post(CONTRACT_INFO_URL) + .body(JSONUtil.toJsonStr(param)) + .execute() + .body(); + System.out.println(body); + JSON parse = JSONUtil.parse(body); + Object obj = parse.getByPath("data.pageInfo.totals"); + if(null!=obj&& Integer.valueOf(obj.toString())>0){ + JSONArray arr = parse.getByPath("data.data", JSONArray.class); + return ((JSONObject) arr.get(0)).get("SQJGMC").toString(); + } + return ""; + } + + /** + * 发送短信 + * @param phone + * @param msg + * @param appName + */ + public static void sendMsg(String phone, String msg, String appName) { + String xml = WanDaUtil.GetSendMsgServiceXML(phone, msg, appName); + System.out.println(xml); + String body = HttpRequest.post(MSG_URL) + .body(xml) + .execute() + .body(); + System.out.println(body); + } + /** * 调用万达 webservice 接口获取医院信息 * @@ -509,4 +550,5 @@ public class WanDaHttpUtil { return "//soap:Envelope/soap:Body/ns2:" + response + "Response/return"; } + } diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/WanDaUtil.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/WanDaUtil.java index a73739990c27f70a0177c6d1fc92c1fbc3bba7ee..cc6a950f456ea493e22c57ced588a54b76dd8902 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/WanDaUtil.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/wd/WanDaUtil.java @@ -315,4 +315,28 @@ public class WanDaUtil { return xStream.toXML(o); } + /** + * 发送短信 + * + * @param phone + * @param msg + * @param appName + * @return + */ + public static String GetSendMsgServiceXML(String phone, String msg, String appName) { + String body = "" + + " " + + " " + + " " + + " " + + " " + phone + "" + + " " + + " 【黄浦卫管】" + msg + "" + + " " + + " " + appName + "" + + " " + + " " + + ""; + return body; + } }