提交 34794915 authored 作者: zhu's avatar zhu

1.增加测试微信小程序配置

2.第三方电话回调接口(50%) 3.接口逻辑丰富
上级 5fb169d8
......@@ -102,12 +102,12 @@ dependencyManagement {
flyway {
driver = 'com.mysql.cj.jdbc.Driver'
// url = 'jdbc:mysql://localhost:3306/aiming-hospital?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false'
// user = 'root'
// password = '123456'
url = 'jdbc:mysql://175.24.172.212:3306/hospital-server?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false'
url = 'jdbc:mysql://localhost:3306/aiming-hospital?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false'
user = 'root'
password = 'jgx2vgk0p!15'
password = '123456'
// url = 'jdbc:mysql://175.24.172.212:3306/hospital-server?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false'
// user = 'root'
// password = 'jgx2vgk0p!15'
}
tasks.named('test') {
......
......@@ -40,6 +40,8 @@ public class SaTokenConfig implements WebMvcConfigurer {
.excludePathPatterns("/v1/system/user/register")
.excludePathPatterns("/v1/system/user/miniAppLogin")
.excludePathPatterns("/v1/system/user/miniAppRegister")
.excludePathPatterns("/v1/system/user/wxUpdate")
.excludePathPatterns("/v1/system/user/getPhoneNumber")
.excludePathPatterns("/v1/system/sms/sendSms")
// swagger 放行
.excludePathPatterns("/webjars/**")
......
......@@ -116,6 +116,20 @@ public class MedicalQualifications extends BaseDomain {
@Schema(description = "更新时间", nullable = false)
private java.util.Date updateTime;
/**
* 资质图片
*/
@Schema(description = "资质图片")
@TableField(exist = false)
private List<MedicalQualificationsPicture> pictureList;
/**
* 医生姓名
*/
@Schema(description = "医生姓名")
@TableField(exist = false)
private String doctorName;
/**
* 设置默认值
*/
......
package com.xwd.hospital.server.dto;
import lombok.Data;
@Data
public class CallDto {
private String alertingTime;
private String called;
private String recorderId;
private String callerArea;
private String beginTime;
private String calledArea;
private String caller;
private String calledShow;
private String connectTime;
private String result;
private String releaseTime;
private String account;
private String mappingId;
private String appId;
private String callDuration;
private String userData;
private String answerTime;
private String smallNumberType;
private String calldisplay;
public CallDto() {
}
public CallDto(String alertingTime, String called, String recorderId, String callerArea, String beginTime, String calledArea, String caller, String calledShow, String connectTime, String result, String releaseTime, String account, String mappingId, String appId, String callDuration, String userData, String answerTime, String smallNumberType, String calldisplay) {
this.alertingTime = alertingTime;
this.called = called;
this.recorderId = recorderId;
this.callerArea = callerArea;
this.beginTime = beginTime;
this.calledArea = calledArea;
this.caller = caller;
this.calledShow = calledShow;
this.connectTime = connectTime;
this.result = result;
this.releaseTime = releaseTime;
this.account = account;
this.mappingId = mappingId;
this.appId = appId;
this.callDuration = callDuration;
this.userData = userData;
this.answerTime = answerTime;
this.smallNumberType = smallNumberType;
this.calldisplay = calldisplay;
}
}
......@@ -11,6 +11,8 @@ import com.xwd.hospital.server.enums.DoctorTitleEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class MedicalQualificationDto {
/**
......@@ -39,4 +41,6 @@ public class MedicalQualificationDto {
@Schema(description = "职称", nullable = false)
private DoctorTitleEnum title;
private List<String> pictureList;
}
package com.xwd.hospital.server.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.xwd.hospital.server.enums.SexTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class ReportDto {
/**
* 患者姓名
*/
@TableField(value = "patient_name")
@Schema(description = "患者姓名", nullable = false)
private String patientName;
/**
* 患者身份证号码
*/
@TableField(value = "patient_id_no")
@Schema(description = "患者身份证号码", nullable = false)
private String patientIdNo;
/**
* 性别
*/
@TableField(value = "sex")
@Schema(description = "性别", nullable = false)
private SexTypeEnum sex;
/**
* 患者年龄
*/
@TableField(value = "age")
@Schema(description = "患者年龄", nullable = false)
private Integer age;
/**
* 影像报告项目
*/
@TableField(value = "report_item", select = false)
@Schema(description = "影像报告项目", nullable = false)
private String reportItem;
/**
* 影像说明
*/
@TableField(value = "report_declare", select = false)
@Schema(description = "影像说明", nullable = false)
private String reportDeclare;
/**
* 报告医院
*/
@TableField(value = "report_hospital")
@Schema(description = "报告医院", nullable = false)
private String reportHospital;
/**
* 报告医生
*/
@TableField(value = "report_doctor")
@Schema(description = "报告医生", nullable = false)
private String reportDoctor;
private List<String> pictureList;
}
/**
* 项目:互联网医疗
* @Author: xiongwei
* @Date: 2023-09-05 09:42:00
*/
package com.xwd.hospital.server.enums;
/**
* 审核状态
*/
public enum SysSettingEnum {
PROXY_PHONE("匿名小号");
SysSettingEnum(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
......@@ -31,5 +31,5 @@ public interface DoctorInfoMapper extends DoctorInfoBaseMapper {
DoctorInfoDto queryDoctorDetail(@Param("doctorId")Long doctorId);
String selectNameById(Long doctorId);
}
......@@ -23,5 +23,5 @@ import com.xwd.hospital.server.repository.base.MedicalQualificationsPictureBaseM
@Repository
public interface MedicalQualificationsPictureMapper extends MedicalQualificationsPictureBaseMapper {
List<MedicalQualificationsPicture> selectByQualificationId(Long id);
}
......@@ -22,6 +22,8 @@ import com.xwd.hospital.server.annotation.ApiCommon;
import com.xwd.hospital.server.annotation.AuthUser;
import com.xwd.hospital.server.base.BaseController;
import com.xwd.hospital.server.domain.User;
import com.xwd.hospital.server.dto.MedicalQualificationDto;
import com.xwd.hospital.server.dto.ReportDto;
import com.xwd.hospital.server.rest.res.ApiCode;
import com.xwd.hospital.server.domain.MedicalReport;
import com.xwd.hospital.server.rest.req.MedicalReportParam;
......@@ -87,5 +89,15 @@ public class MedicalReportController extends BaseController<MedicalReportService
return ApiResponse.ok(this.service.saveBatch(entityList));
}
/**
* 上传影像报告
*
*/
@PostMapping("/uploadReport")
@Operation(summary = "上传影像报告")
public ApiResponse uploadReport(@RequestBody ReportDto dto, @AuthUser User user) {
return ApiResponse.ok(this.service.uploadReport(dto));
}
}
......@@ -155,7 +155,7 @@ public class OrderController extends BaseController<OrderService, Order, OrderPa
@PostMapping("/callPhone")
@Operation(summary = "患者端发起通话")
@ApiCommon
public ApiResponse<Order> callPhone(@RequestParam String orderNo, @AuthUser User user) {
public ApiResponse callPhone(@RequestParam String orderNo, @AuthUser User user) {
return ApiResponse.ok( this.service.callPhone(orderNo));
}
......
......@@ -8,10 +8,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
......@@ -42,6 +39,40 @@ public class SmsController {
@PostMapping("/bindPhone")
@ApiCommon
public ApiResponse bindPhone(@RequestParam("phone") String phone) {
return ApiResponse.ok(smsService.bindPhone(phone));
String proxyNumber = "17085298640";
return ApiResponse.ok(smsService.bindPhone(proxyNumber,phone));
}
/**
* <pre>
* 容联七陌回调接口
* </pre>
*/
@Operation(summary = "容联七陌回调接口")
@GetMapping("/callback")
@ApiCommon
public ApiResponse callback(@RequestParam(value = "alerting_time",required = false) String alertingTime,
@RequestParam(value = "called",required = false) String called,
@RequestParam(value = "recorder_id",required = false) String recorderId,
@RequestParam(value = "caller_area",required = false) String callerArea,
@RequestParam(value = "begin_time",required = false) String beginTime,
@RequestParam(value = "called_area",required = false) String calledArea,
@RequestParam(value = "caller",required = false) String caller,
@RequestParam(value = "called_show",required = false) String calledShow,
@RequestParam(value = "connect_time",required = false) String connectTime,
@RequestParam(value = "result",required = false) String result,
@RequestParam(value = "release_time",required = false) String releaseTime,
@RequestParam(value = "account",required = false) String account,
@RequestParam(value = "mappingId",required = false) String mappingId,
@RequestParam(value = "appId",required = false) String appId,
@RequestParam(value = "call_duration",required = false) String callDuration,
@RequestParam(value = "userData",required = false) String userData,
@RequestParam(value = "answerTime",required = false) String answerTime,
@RequestParam(value = "smallNumberType",required = false) String smallNumberType,
@RequestParam(value = "calldisplay",required = false) String calldisplay) {
return ApiResponse.ok(smsService.callback(alertingTime,called,recorderId, callerArea, beginTime,
calledArea, caller,calledShow, connectTime, result,
releaseTime, account, mappingId, appId, callDuration,
userData, answerTime, smallNumberType, calldisplay));
}
}
......@@ -221,8 +221,10 @@ public class UserController extends BaseController<UserService, User, UserParam>
public ApiResponse<Map> miniAppLogin(@RequestBody LoginDto loginDto) {
Map<String, Object> result = new HashMap<>();
UserDto userDto = this.service.miniAppLogin(loginDto);
result.put("userDto", userDto);
if(userDto.isRegisterFlag()){
return ApiResponse.ok(result);
}
var loginModel = new SaLoginModel();
loginModel.setExtra("userId", userDto.getUser().getId());
StpUtil.login(userDto.getUser().getUsername(), loginModel);
......@@ -252,6 +254,18 @@ public class UserController extends BaseController<UserService, User, UserParam>
return ApiResponse.ok(result);
}
/**
* <pre>
* 微信信息修改
* </pre>
*/
@Operation(summary = "微信信息修改")
@PostMapping("/wxUpdate")
@ApiCommon
public ApiResponse wxUpdate(@RequestBody UpdateInfoDto updateUserDto) {
return ApiResponse.ok(this.service.wxUpdate(updateUserDto));
}
/**
* <pre>
* 查询当前登录的用户信息
......
......@@ -7,8 +7,7 @@ import retrofit2.http.Body;
public class BindNumberReq {
private String midNum;
private String called;
private Integer icDisplayFlag = 1;
private Boolean needRecord = true;
private Integer expiration = 0;
private String icDisplayFlag = "1";
private String needRecord = "true";
private String expiration = "0";
}
package com.xwd.hospital.server.rest.thirdPartReq;
import lombok.Data;
@Data
public class UnbindNumberReq {
private String mappingId;
private String midNum;
}
......@@ -2,6 +2,7 @@ package com.xwd.hospital.server.service;
import com.google.gson.JsonObject;
import com.xwd.hospital.server.rest.thirdPartReq.BindNumberReq;
import com.xwd.hospital.server.rest.thirdPartReq.UnbindNumberReq;
import org.springframework.web.bind.annotation.RequestBody;
import retrofit2.Call;
import retrofit2.http.*;
......@@ -16,5 +17,5 @@ public interface CallApiService {
@FormUrlEncoded
@POST("/v20160818/rlxh/midNumUnBinding/{account}")
Call<String> unbindNumber(@HeaderMap Map<String, String> headers,@FieldMap Map<String, Object> map,@Path("account") String account);
Call<JsonObject> unbindNumber(@HeaderMap Map<String, String> headers, @Body UnbindNumberReq body, @Path("account") String account, @Query("sig") String sig);
}
......@@ -11,8 +11,11 @@ package com.xwd.hospital.server.service;
import java.util.List;
import com.xwd.hospital.server.base.BaseService;
import com.xwd.hospital.server.domain.MedicalReport;
import com.xwd.hospital.server.dto.ReportDto;
import com.xwd.hospital.server.rest.req.MedicalReportParam;
public interface MedicalReportService extends BaseService<MedicalReport> {
boolean uploadReport(ReportDto dto);
}
......@@ -30,7 +30,7 @@ public interface OrderService extends BaseService<Order> {
Order stratImChat(String orderNo);
Order callPhone(String orderNo);
String callPhone(String orderNo);
Order submitPrescriptionInfo(PrescriptionInfoDto prescriptionInfoDto);
......
package com.xwd.hospital.server.service;
import org.springframework.web.bind.annotation.RequestParam;
public interface SmsService {
/**
* 发送短信验证码
......@@ -9,5 +11,11 @@ public interface SmsService {
*/
String sendSms(String phoneNumber);
String bindPhone(String phoneNumber);
String bindPhone(String proxyNumber,String phoneNumber);
void unbindPhone(String proxyNumber,String mappingId);
boolean callback(String alertingTime, String called, String recorderId, String callerArea, String beginTime,
String calledArea, String caller, String calledShow, String connectTime, String result,
String releaseTime,String account, String mappingId, String appId, String callDuration,
String userData, String answerTime, String smallNumberType, String calldisplay);
}
......@@ -69,6 +69,8 @@ public interface UserService extends BaseService<User> {
*/
UserDto updateUserInfo(UpdateUserInfoDto updateInfoDto);
UserDto wxUpdate(UpdateInfoDto updateUserDto);
/**
* 微信获取手机号码
* @return
......
......@@ -67,7 +67,7 @@ public class DepartmentInfoServiceImpl extends ServiceImpl<DepartmentInfoMapper,
}
for (DepartmentDto departmentDto : departmentList) {
if (departmentDto.getParentId() != null) {
if (departmentDto.getParentId() != null && departmentDto.getParentId() != 0) {
DepartmentDto parent = departmentMap.get(departmentDto.getParentId());
if (parent != null) {
parent.getChildList().add(departmentDto);
......
......@@ -13,8 +13,11 @@ import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import com.xwd.hospital.server.domain.DoctorInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.xwd.hospital.server.domain.*;
import com.xwd.hospital.server.dto.MedicalQualificationDto;
import com.xwd.hospital.server.enums.AuditStateEnum;
import com.xwd.hospital.server.service.*;
import jakarta.annotation.Resource;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
......@@ -22,14 +25,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.xwd.hospital.server.service.MedicalQualificationsService;
import com.xwd.hospital.server.repository.MedicalQualificationsMapper;
import com.xwd.hospital.server.repository.base.MedicalQualificationsBaseMapper;
import com.xwd.hospital.server.domain.MedicalQualifications;
import com.xwd.hospital.server.rest.req.MedicalQualificationsParam;
@Service
public class MedicalQualificationsServiceImpl extends ServiceImpl<MedicalQualificationsMapper, MedicalQualifications> implements MedicalQualificationsService {
@Resource
private DoctorInfoService doctorInfoService;
@Resource
private UserService userService;
@Resource
private MedicalQualificationsPictureService pictureService;
@Override
public int updateAllFieldsById(MedicalQualifications entity) {
......@@ -52,7 +59,48 @@ public class MedicalQualificationsServiceImpl extends ServiceImpl<MedicalQualifi
@Override
public DoctorInfo uploadQualification(MedicalQualificationDto dto) {
//当前用户
Object userId = StpUtil.getExtra("userId");
DoctorInfo doctorInfo = doctorInfoService.getOne(Wrappers.<DoctorInfo>query().eq("user_id", Long.valueOf(userId.toString())));
if(null == doctorInfo){
return null;
}
User sysUser = userService.getById(Long.valueOf(userId.toString()));
//查询医生资质信息
MedicalQualifications qualifications = this.getOne(Wrappers.<MedicalQualifications>query().eq("doctor_id", doctorInfo.getId()));
if(null == qualifications){
qualifications = new MedicalQualifications();
qualifications.setDoctorId(doctorInfo.getId());
}
qualifications.setHospitalId(dto.getHospitalId());
qualifications.setDepartmentId(dto.getDepartmentId());
qualifications.setTitle(dto.getTitle());
qualifications.setEditorId(sysUser.getId());
qualifications.setEditorName(sysUser.getUsername());
qualifications.setAuditState(AuditStateEnum.TO_AUDIT);
this.saveOrUpdate(qualifications);
if(null != dto.getPictureList()
&& dto.getPictureList().size()>0){
//删除原有的照片
pictureService.remove(Wrappers.<MedicalQualificationsPicture>query().eq("doctor_id", doctorInfo.getId()));
//再插入新的图片
ArrayList<MedicalQualificationsPicture> pictureList = new ArrayList<>();
for (String picUrl:dto.getPictureList()) {
MedicalQualificationsPicture picture = new MedicalQualificationsPicture();
picture.setDoctorId(doctorInfo.getId());
picture.setMedicalQualificationId(qualifications.getId());
picture.setCertificatePicture(picUrl);
picture.setEditorId(sysUser.getId());
picture.setEditorName(sysUser.getUsername());
pictureList.add(picture);
}
pictureService.saveBatch(pictureList);
}
doctorInfo.setMedicalQualificationId(qualifications.getId());
doctorInfoService.saveOrUpdate(doctorInfo);
return doctorInfo;
}
}
......@@ -13,6 +13,9 @@ import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import com.xwd.hospital.server.domain.MedicalReportPicture;
import com.xwd.hospital.server.dto.ReportDto;
import com.xwd.hospital.server.service.MedicalReportPictureService;
import jakarta.annotation.Resource;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
......@@ -29,6 +32,9 @@ import com.xwd.hospital.server.rest.req.MedicalReportParam;
@Service
public class MedicalReportServiceImpl extends ServiceImpl<MedicalReportMapper, MedicalReport> implements MedicalReportService {
@Resource
private MedicalReportPictureService pictureService;
@Override
public int updateAllFieldsById(MedicalReport entity) {
return this.getBaseMapper().updateAllFieldsById(entity);
......@@ -48,5 +54,32 @@ public class MedicalReportServiceImpl extends ServiceImpl<MedicalReportMapper, M
return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
}
@Override
public boolean uploadReport(ReportDto dto) {
MedicalReport medicalReport = new MedicalReport();
medicalReport.setAge(dto.getAge());
medicalReport.setPatientName(dto.getPatientName());
medicalReport.setReportDoctor(dto.getReportDoctor());
medicalReport.setReportHospital(dto.getReportHospital());
medicalReport.setPatientIdNo(dto.getPatientIdNo());
medicalReport.setSex(dto.getSex());
medicalReport.setReportItem(dto.getReportItem());
medicalReport.setReportDeclare(dto.getReportDeclare());
this.save(medicalReport);
if(null != dto.getPictureList()
&& dto.getPictureList().size()>0){
ArrayList<MedicalReportPicture> pictureList = new ArrayList<>();
for (String picUrl:dto.getPictureList()) {
MedicalReportPicture picture = new MedicalReportPicture();
picture.setMedicalReportId(medicalReport.getId());
picture.setReportPicture(picUrl);
pictureList.add(picture);
}
pictureService.saveBatch(pictureList);
}
return true;
}
}
......@@ -14,19 +14,19 @@ import java.text.SimpleDateFormat;
import java.util.*;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xwd.hospital.server.domain.*;
import com.xwd.hospital.server.dto.*;
import com.xwd.hospital.server.enums.OrderOperationEnum;
import com.xwd.hospital.server.enums.OrderStateEnum;
import com.xwd.hospital.server.enums.OrderTypeEnum;
import com.xwd.hospital.server.enums.YesNoEnum;
import com.xwd.hospital.server.enums.*;
import com.xwd.hospital.server.service.*;
import com.xwd.hospital.server.util.DateUtils;
import jakarta.annotation.Resource;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.xwd.hospital.server.repository.OrderMapper;
......@@ -55,6 +55,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
private OrderOperationService orderOperationService;
@Resource
private OrderPictureService orderPictureService;
@Resource
private SmsService smsService;
@Resource
private PhoneOrderRecordService phoneOrderRecordService;
@Resource
private SettingService settingService;
@Override
public int updateAllFieldsById(Order entity) {
......@@ -78,7 +84,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
@Override
public List<OrderDto> queryOrderListForMiniApp(OrderStateEnum param) {
Object userId = StpUtil.getExtra("userId");
UserInfo userInfo = userInfoService.getOne(Wrappers.<UserInfo>query().eq("user_id", userId));
UserInfo userInfo = userInfoService.getOne(Wrappers.<UserInfo>query().eq("user_id", Long.valueOf(userId.toString())));
if(null == userInfo){
return null;
}
......@@ -90,7 +96,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
public Order createOrder(CreateOrderDto createOrderDto) {
//当前用户
Object userId = StpUtil.getExtra("userId");
UserInfo userInfo = userInfoService.getOne(Wrappers.<UserInfo>query().eq("user_id", userId));
UserInfo userInfo = userInfoService.getOne(Wrappers.<UserInfo>query().eq("user_id", Long.valueOf(userId.toString())));
if(null == userInfo){
return null;
}
......@@ -319,7 +325,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
phoneOrderRecord.setOrderId(order.getId());
phoneOrderRecord.setOrderNo(orderNo);
phoneOrderRecord.setPatientPhoneNo(order.getPatientPhoneNumber());
phoneOrderRecordService.save(phoneOrderRecord);
}
return order;
......@@ -342,11 +348,47 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
* @return
*/
@Override
public Order callPhone(String orderNo) {
//todo sdk接入
public String callPhone(String orderNo) {
String proxyNumber = null;
//判断订单状态是否为服务中
Order order = this.getOne(Wrappers.<Order>query().eq("order_no", orderNo));
if(order.getOrderState() == OrderStateEnum.IN_SERVICE){
//判断预约日期是否到达
Date now = new Date();
Date appointmentDate = order.getAppointmentDate();
int compare = DateUtil.compare(now, appointmentDate, "yyyy-MM-dd");
if(0 != compare){
return null;
}
//绑定小号和患者号码并返回小号
PhoneOrderRecord record = phoneOrderRecordService.getOne(Wrappers.<PhoneOrderRecord>query().eq("order_no", orderNo));
if(!StringUtils.isBlank(record.getProxyPhoneNo() )
&&record.getMappingState() == YesNoEnum.NO){
return record.getProxyPhoneNo();
}
//todo 从小号列表中获取到合适的小号(sys_setting表)
List<Setting> settingList = settingService.list(Wrappers.<Setting>query().eq("code", SysSettingEnum.PROXY_PHONE).eq("remark","usable"));
if(null == settingList
|| settingList.size() == 0){
//暂无可用来绑定的小号
return null;
}
Setting setting = settingList.get(0);
proxyNumber = setting.getValue();
//绑定小号和患者号码
String mappingId = smsService.bindPhone(proxyNumber, record.getPatientPhoneNo());
record.setMappingId(mappingId);
record.setProxyPhoneNo(proxyNumber);
phoneOrderRecordService.saveOrUpdate(record);
//小号改为已使用
setting.setRemark("used");
settingService.saveOrUpdate(setting);
}
return proxyNumber;
}
/**
* 提交续方开药处方单
......
......@@ -65,7 +65,7 @@ public class PatientPrescriptionInfoServiceImpl extends ServiceImpl<PatientPresc
@Override
public PatientPrescriptionInfo create(CreatePrescriptionDto dto) {
Object userId = StpUtil.getExtra("userId");
UserInfo userInfo = userInfoService.getOne(Wrappers.<UserInfo>query().eq("user_id", userId));
UserInfo userInfo = userInfoService.getOne(Wrappers.<UserInfo>query().eq("user_id", Long.valueOf(userId.toString())));
if(null == userInfo){
return null;
}
......
......@@ -11,7 +11,9 @@ import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import com.xwd.hospital.server.constants.Constant;
import com.xwd.hospital.server.dto.CallDto;
import com.xwd.hospital.server.rest.thirdPartReq.BindNumberReq;
import com.xwd.hospital.server.rest.thirdPartReq.UnbindNumberReq;
import com.xwd.hospital.server.service.CallApiService;
import com.xwd.hospital.server.service.RedisService;
import com.xwd.hospital.server.service.SmsService;
......@@ -20,6 +22,9 @@ import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import retrofit2.Call;
import retrofit2.Response;
......@@ -27,6 +32,8 @@ import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
......@@ -38,10 +45,21 @@ public class SmsServiceImpl implements SmsService {
@Resource
private RedisService redisService;
private static final String secretId = "AKIDZzDD2e4IURBhy2sUrzsXxXu4zf7LL7ex";
private static final String secretKey = "A52lGXaTAev274oMk4CBzay9C6nIbjeM";
private static final String sdkAppId = "1400859846";
private static final String templateId = "1946431";
@Value("${tencent.cloud.secretId}")
private String secretId;
@Value("${tencent.cloud.secretKey}")
private String secretKey;
@Value("${tencent.cloud.sms.sdkAppId}")
private String sdkAppId;
@Value("${tencent.cloud.sms.templateId}")
private String templateId;
@Value("${ronglian.cloud.account}")
public String account;//替换为您的账户
@Value("${ronglian.cloud.secret}")
public String secret;//替换为您的api密码
@Value("${ronglian.cloud.host}")
public String host;
@Override
public String sendSms(String phoneNumber) {
......@@ -50,13 +68,14 @@ public class SmsServiceImpl implements SmsService {
// 生成一个100000到999999之间的随机整数
int randomNumber = random.nextInt(900000) + 100000;
//调用短信sdk发送短信
// sendAuth(String.valueOf(randomNumber),phoneNumber);
//todo 暂时屏蔽短信接口
sendAuth(String.valueOf(randomNumber),phoneNumber);
//存入redis中,缓存默认5分钟失效
redisService.setExpire(Constant.SMS_PREFIX+phoneNumber,String.valueOf(randomNumber),5, TimeUnit.MINUTES);
return String.valueOf(randomNumber);
}
public static void sendAuth(String authNumber,String phone) {
public void sendAuth(String authNumber,String phone) {
try {
Credential cred = new Credential(secretId, secretKey);
// 实例化一个http选项,可选,没有特殊需求可以跳过
......@@ -119,25 +138,25 @@ public class SmsServiceImpl implements SmsService {
}
@Override
public String bindPhone(String phoneNumber) {
public String bindPhone(String proxyNumber,String phoneNumber) {
String mappingId = "";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(CallUtil.host)
.baseUrl(host)
.addConverterFactory(GsonConverterFactory.create())
.client(new OkHttpClient.Builder().build())
.build();
CallApiService service = retrofit.create(CallApiService.class);
Map<String, String> sigAndAuth = CallUtil.getSigAndAuth();
Map<String, String> sigAndAuth = getSigAndAuth();
HashMap<String, String> headers = new HashMap<>();
headers.put("Authorization",sigAndAuth.get("auth"));
BindNumberReq bindNumberReq = new BindNumberReq();
bindNumberReq.setMidNum("17085298640");//小号
bindNumberReq.setMidNum(proxyNumber);//小号
bindNumberReq.setCalled(phoneNumber);//被叫号码
Call<JsonObject> call = service.bindNumber(headers, bindNumberReq, CallUtil.account, sigAndAuth.get("sig"));
Call<JsonObject> call = service.bindNumber(headers, bindNumberReq, account, sigAndAuth.get("sig"));
try {
Response<JsonObject> execute = call.execute();
mappingId = execute.body().get("mappingId").getAsString();
......@@ -147,4 +166,80 @@ public class SmsServiceImpl implements SmsService {
}
return mappingId;
}
@Override
public void unbindPhone(String proxyNumber, String mappingId) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(host)
.addConverterFactory(GsonConverterFactory.create())
.client(new OkHttpClient.Builder().build())
.build();
CallApiService service = retrofit.create(CallApiService.class);
Map<String, String> sigAndAuth = getSigAndAuth();
HashMap<String, String> headers = new HashMap<>();
headers.put("Authorization",sigAndAuth.get("auth"));
UnbindNumberReq req = new UnbindNumberReq();
req.setMappingId(mappingId);
req.setMidNum(proxyNumber);
Call<JsonObject> call = service.unbindNumber(headers, req, account, sigAndAuth.get("sig"));
try {
Response<JsonObject> execute = call.execute();
log.info(execute.body().toString());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public Map<String,String> getSigAndAuth () {
String time = getDateTime();
String sig = md5(account + secret + time);
String auth = base64(account + ":" + time);
HashMap<String, String> map = new HashMap<>();
map.put("sig",sig);
map.put("auth",auth);
return map;
}
public static String md5 (String text) {
return DigestUtils.md5Hex(text).toUpperCase();
}
public static String base64 (String text) {
byte[] b = text.getBytes();
Base64 base64 = new Base64();
b = base64.encode(b);
String s = new String(b);
return s;
}
public static String getDateTime(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
return sdf.format(new Date());
}
@Override
public boolean callback(String alertingTime, String called, String recorderId, String callerArea,
String beginTime, String calledArea, String caller, String calledShow, String connectTime,
String result, String releaseTime, String account, String mappingId, String appId,
String callDuration, String userData, String answerTime, String smallNumberType, String calldisplay) {
CallDto callDto = new CallDto(alertingTime,called,recorderId, callerArea, beginTime,
calledArea, caller,calledShow, connectTime, result,
releaseTime, account, mappingId, appId, callDuration,
userData, answerTime, smallNumberType, calldisplay);
if(result.equals("0")){//通话成功
//解绑
unbindPhone(calledShow,mappingId);
//todo 修改sys_setting表,小号状态
//todo 修改phone——order——record表状态
}
log.info("容联通话回调:------");
return false;
}
}
......@@ -9,6 +9,7 @@
package com.xwd.hospital.server.service.impl;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
......@@ -19,6 +20,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.binarywang.wx.miniapp.util.WxMaConfigHolder;
import cn.dev33.satoken.stp.StpUtil;
import com.xwd.hospital.server.config.WxMaProperties;
import com.xwd.hospital.server.constants.Constant;
import com.xwd.hospital.server.domain.*;
import com.xwd.hospital.server.dto.LoginDto;
......@@ -54,6 +56,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Resource
private WxMaService wxMaService;
@Resource
private WxMaProperties wxMaProperties;
@Resource
private RedisService redisService;
@Resource
private UserInfoService userInfoService;
......@@ -61,11 +65,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private DoctorInfoService doctorInfoService;
@Resource
private PatientInfoService patientInfoService;
@Resource
private DoctorServiceInfoService doctorServiceInfoService;
@Value("$(wx.miniapp.configs[0].appid)")
@Value("${wx.miniapp.configs[0].appid}")
private String patientAppId;
@Value("$(wx.miniapp.configs[1].appid)")
@Value("${wx.miniapp.configs[1].appid}")
private String doctorAppId;
@Override
......@@ -211,6 +217,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
doctorInfoService.save(doctorInfo);
userDto.setDoctorInfo(doctorInfo);
user.setObjId(doctorInfo.getId());
createService(doctorInfo.getId());
}
super.saveOrUpdate(user);
Role defaultRole = this.roleMapper.selectOne(Wrappers.<Role>lambdaQuery().eq(Role::getName, roleName));
......@@ -234,10 +243,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
//根据小程序登录源,切换相应配置
if(loginDto.getUserType() == UserTypeEnum.PATIENT){
wxMaService.switchover(patientAppId);
log.debug(patientAppId);
}else if(loginDto.getUserType() == UserTypeEnum.DOCTOR){
wxMaService.switchover(doctorAppId);
log.debug(doctorAppId);
}
try {
String appid = wxMaProperties.getConfigs().get(0).getAppid();
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(loginDto.getCode());
log.debug(session.getSessionKey());
log.debug(session.getOpenid());
......@@ -269,6 +281,28 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
return userDto;
};
void createService(Long doctorId){
ArrayList<DoctorServiceInfo> serviceList = new ArrayList<>(3);
DoctorServiceEnum[] serviceEnums = {
DoctorServiceEnum.ONLINE_INQUIRY,
DoctorServiceEnum.PRESCRIPTION,
DoctorServiceEnum.TELEPHONE
};
for (int i = 0; i < 3; i++) {
DoctorServiceInfo doctorServiceInfo = new DoctorServiceInfo();
doctorServiceInfo.setDoctorId(doctorId);
doctorServiceInfo.setServiceState(YesNoEnum.NO);
doctorServiceInfo.setServicePrice(new BigDecimal("100"));
doctorServiceInfo.setServiceStartTime("00:00");
doctorServiceInfo.setServiceEndTime("23:59");
doctorServiceInfo.setServicePhoneNumber("");
doctorServiceInfo.setServiceName(serviceEnums[i]);
serviceList.add(doctorServiceInfo);
}
doctorServiceInfoService.saveBatch(serviceList);
}
@Override
public UserDto miniAppRegister(RegisterDto registserDto) {
UserDto userDto = new UserDto();
......@@ -326,6 +360,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
doctorInfoService.save(doctorInfo);
userDto.setDoctorInfo(doctorInfo);
user.setObjId(doctorInfo.getId());
createService(doctorInfo.getId());
}
Role defaultRole = this.roleMapper.selectOne(Wrappers.<Role>lambdaQuery().eq(Role::getName, roleName));
......@@ -409,6 +444,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
return userDto;
}
@Override
public UserDto wxUpdate(UpdateInfoDto updateUserDto) {
UserDto userDto = new UserDto();
......@@ -483,4 +519,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
// 如果所有字段都不为null,则返回true
return true;
}
public void test(){
}
}
......@@ -12,6 +12,7 @@ import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import retrofit2.Retrofit;
import java.io.IOException;
......@@ -23,60 +24,49 @@ import java.util.Map;
@Slf4j
public class CallUtil {
public static final String account = "T00000029722";//替换为您的账户
public static final String secret = "88275dd0-6667-11ee-a6e8-a9e02a8e273e";//替换为您的api密码
public static final String host = "https://openapis.7moor.com";
public static void call() {
String time = getDateTime();
String sig = md5(account + secret + time);
//查询坐席状态接口
String interfacePath = "/v20160818/user/queryUserState/";
String url = host + interfacePath + account + "?sig=" + sig;
// public void call() {
// String time = getDateTime();
// String sig = md5(account + secret + time);
// //查询坐席状态接口
// String interfacePath = "/v20160818/user/queryUserState/";
// String url = host + interfacePath + account + "?sig=" + sig;
//
//
// String auth = base64(account + ":" + time);
//
//
// HttpClientBuilder builder = HttpClientBuilder.create();
// CloseableHttpClient client = builder.build();
// HttpPost post = new HttpPost(url);
// post.addHeader("Accept", "application/json");
// post.addHeader("Content-Type","application/json;charset=utf-8");
// post.addHeader("Authorization",auth);
//
//
// StringEntity requestEntity = null;
// //根据需要发送的数据做相应替换
// requestEntity = new StringEntity("{\"exten\":\"8000\"}","UTF-8");
// post.setEntity(requestEntity);
// CloseableHttpResponse response = null;
// try {
// response = client.execute(post);
// HttpEntity entity = response.getEntity();
// log.info("the response is : " + EntityUtils.toString(entity,"utf8"));
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// if (response != null){
// try {
// response.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// }
String auth = base64(account + ":" + time);
HttpClientBuilder builder = HttpClientBuilder.create();
CloseableHttpClient client = builder.build();
HttpPost post = new HttpPost(url);
post.addHeader("Accept", "application/json");
post.addHeader("Content-Type","application/json;charset=utf-8");
post.addHeader("Authorization",auth);
StringEntity requestEntity = null;
//根据需要发送的数据做相应替换
requestEntity = new StringEntity("{\"exten\":\"8000\"}","UTF-8");
post.setEntity(requestEntity);
CloseableHttpResponse response = null;
try {
response = client.execute(post);
HttpEntity entity = response.getEntity();
log.info("the response is : " + EntityUtils.toString(entity,"utf8"));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (response != null){
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static Map<String,String> getSigAndAuth () {
String time = getDateTime();
String sig = md5(account + secret + time);
String auth = base64(account + ":" + time);
HashMap<String, String> map = new HashMap<>();
map.put("sig",sig);
map.put("auth",auth);
return map;
}
public static String md5 (String text) {
return DigestUtils.md5Hex(text).toUpperCase();
}
......
......@@ -21,20 +21,32 @@ knife4j:
wx:
miniapp:
configs:
- appid: #微信小程序的appid
secret: #微信小程序的Secret
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
- appid: 11111
secret: 123456
token: 123
aesKey: 123
msgDataFormat: JSON
- appid: #微信小程序的appid
secret: #微信小程序的Secret
- appid: wxc447fccb6a2745ce
secret: af277a664613a2276266eca024bff139
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
pay:
wx:
appId:
merchantId:
keyPath:
merchantSerialNumber:
apiV3Key:
appId: 123
merchantId: 123
keyPath: 123
merchantSerialNumber: 123
apiV3Key: 123
tencent:
cloud:
secretId: AKIDZzDD2e4IURBhy2sUrzsXxXu4zf7LL7ex
secretKey: A52lGXaTAev274oMk4CBzay9C6nIbjeM
sms:
sdkAppId: 1400859846
templateId: 1946431
ronglian:
cloud:
account: T00000029722
secret: 88275dd0-6667-11ee-a6e8-a9e02a8e273e
host: https://openapis.7moor.com
......@@ -11,7 +11,7 @@ spring:
application:
name: aiming-hospital-server
profiles:
active: prod
active: dev
jackson:
default-property-inclusion: non_null
date-format: yyyy-MM-dd HH:mm:ss
......
......@@ -59,7 +59,7 @@
left join pms_order o on o.doctor_id = di.id
left join pms_doctor_service_info s on s.doctor_id = di.id
left join pms_user_attention_info ua on ua.doctor_id = di.id
where di.doctor_state = 'NORMAL' and s.service_name = 'ONLINE_INQUIRY' and pmq.audit_state = 'AUDIT_SUCCESS'
where di.doctor_state = 'NORMAL' and pmq.audit_state = 'AUDIT_SUCCESS'
<if test="sickness != null and sickness != ''">
AND di.expertise_area LIKE CONCAT('%', #{sickness}, '%')
</if>
......@@ -69,7 +69,7 @@
<if test="departmentId != null and departmentId != ''">
AND pmq.department_id = #{departmentId}
</if>
GROUP BY di.doctor_name, h.hospital_name, d.department_name, di.expertise_area, di.introduction, pmq.title, u.avatar, s.service_price
GROUP BY di.id, di.doctor_name, h.hospital_name, d.department_name, di.expertise_area, di.introduction, pmq.title, u.avatar, s.service_price
</select>
<!-- 小程序查询医生详情 -->
......@@ -93,4 +93,10 @@
left join pms_user_attention_info ua on ua.doctor_id = di.id
where di.id = #{doctorId}
</select>
<select id="selectNameById" resultType="string">
select di.doctor_name
from pms_doctor_info di
where di.id = #{doctorId}
</select>
</mapper>
......@@ -36,4 +36,11 @@
from pms_medical_qualifications_picture
${ew.customSqlSegment}
</select>
<select id="selectByQualificationId" resultMap="ListResultMap">
select
<include refid="com.xwd.hospital.server.repository.base.MedicalQualificationsPictureBaseMapper.Base_Column_List" />
from pms_medical_qualifications_picture
where medical_qualification_id = #{id}
</select>
</mapper>
......@@ -14,12 +14,14 @@
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<resultMap id="ResultMap" type="com.xwd.hospital.server.domain.MedicalQualifications" extends="BaseResultMap">
<association column="doctor_id" property="doctor" javaType="com.xwd.hospital.server.domain.DoctorInfo"
select="com.xwd.hospital.server.repository.DoctorInfoMapper.selectById" />
<association column="hospital_id" property="hospital" javaType="com.xwd.hospital.server.domain.HospitalInfo"
select="com.xwd.hospital.server.repository.HospitalInfoMapper.selectById" />
<association column="department_id" property="department" javaType="com.xwd.hospital.server.domain.DepartmentInfo"
select="com.xwd.hospital.server.repository.DepartmentInfoMapper.selectById" />
<association column="doctor_id" property="doctorName" javaType="string"
select="com.xwd.hospital.server.repository.DoctorInfoMapper.selectNameById" />
<collection column="id" property="pictureList" javaType="list"
select="com.xwd.hospital.server.repository.MedicalQualificationsPictureMapper.selectByQualificationId" />
</resultMap>
<sql id="Base_Column_List">
`id`, `doctor_id`, `hospital_id`, `department_id`, `title`, `audit_state`, `editor_id`, `editor_name`, `create_time`, `update_time`
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论