APP及小程序健康咨询接口

This commit is contained in:
HaoWang 2023-10-16 14:15:34 +08:00
parent c1e79c2ba6
commit 7460db18d6
8 changed files with 548 additions and 0 deletions

View File

@ -0,0 +1,84 @@
package com.xinelu.applet.controller.healthconsultation;
import com.xinelu.applet.service.healthconsultation.HealthConsultationService;
import com.xinelu.applet.vo.healthconsultation.HealthConsultationOrderDTO;
import com.xinelu.common.annotation.MobileRequestAuthorization;
import com.xinelu.common.annotation.RepeatSubmit;
import com.xinelu.common.core.controller.BaseController;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.page.TableDataInfo;
import com.xinelu.common.custominterface.Insert;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.manage.domain.hospitalpersoninfo.HospitalPersonInfo;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* @Description APP及小程序健康咨询接口
* @Author zh
* @Date 2023-03-07
*/
@RestController
@RequestMapping("/nurseApp/healthConsultation")
public class HealthConsultationController extends BaseController {
@Resource
private HealthConsultationService healthConsultationService;
/**
* 健康咨询-预约医生
*/
@MobileRequestAuthorization
@GetMapping("/selectDepartment")
public TableDataInfo selectDepartment() {
return healthConsultationService.selectDepartment();
}
/**
* 健康咨询-预约医生-单查科室人员
*/
@MobileRequestAuthorization
@GetMapping("/selectHospitalPerson")
public TableDataInfo selectHospitalPerson(Long departmentId) {
startPage();
List<HospitalPersonInfo> list = healthConsultationService.selectHospitalPerson(departmentId);
return getDataTable(list);
}
/**
* 健康咨询-信息确认
*/
@MobileRequestAuthorization
@GetMapping("/informationConfirmation")
public AjaxResult informationConfirmation(Long patientId) {
if (Objects.isNull(patientId)) {
return AjaxResult.error("用户信息为空!");
}
return healthConsultationService.informationConfirmation(patientId);
}
/**
* 手机App和微信小程序健康咨询确认订单方法
*
* @param healthConsultationOrderDTO 健康咨询订单
* @return 结果
*/
@MobileRequestAuthorization
@RepeatSubmit
@PostMapping("/addHealthConsultationOrder")
public AjaxResult addHealthConsultationOrder(@Validated(Insert.class) @RequestBody HealthConsultationOrderDTO healthConsultationOrderDTO, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
throw new ServiceException(bindingResult.getAllErrors().get(0).getDefaultMessage());
}
if (Objects.nonNull(healthConsultationOrderDTO.getTotalPrice()) && healthConsultationOrderDTO.getTotalPrice().compareTo(BigDecimal.ZERO) <= 0) {
return AjaxResult.error("预约金额不正确,无法下单,请输入正确的预约金额!");
}
return healthConsultationService.insertHealthConsultationOrder(healthConsultationOrderDTO);
}
}

View File

@ -0,0 +1,30 @@
package com.xinelu.applet.mapper.healthconsultation;
import com.xinelu.applet.vo.healthconsultation.HealthConsultationVO;
import com.xinelu.manage.domain.patientinfo.PatientInfo;
import java.util.List;
/**
* 健康咨询Mapper接口
*
* @author 张恒
* @date 2023-03-07
*/
public interface HealthConsultationMapper {
/**
* 健康咨询-信息确认
*
* @param patientId 用户信息
* @return PatientInfo
*/
PatientInfo selectPatientById(Long patientId);
/**
* 查询科室信息管理列表
*
* @return 科室信息管理集合
*/
List<HealthConsultationVO> selectHospitalDepartmentList();
}

View File

@ -0,0 +1,50 @@
package com.xinelu.applet.service.healthconsultation;
import com.xinelu.applet.vo.healthconsultation.HealthConsultationOrderDTO;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.page.TableDataInfo;
import com.xinelu.manage.domain.hospitalpersoninfo.HospitalPersonInfo;
import java.util.List;
/**
* @Description 健康咨询接口业务层
* @Author zh
* @Date 2023-03-07
*/
public interface HealthConsultationService {
/**
* 健康咨询-预约医生
*
* @return AjaxResult
*/
TableDataInfo selectDepartment();
/**
* 单查科室人员
*
* @param departmentId 科室id
* @return AjaxResult
*/
List<HospitalPersonInfo> selectHospitalPerson(Long departmentId);
/**
* 健康咨询-信息确认
*
* @param patientId 用户信息
* @return AjaxResult
*/
AjaxResult informationConfirmation(Long patientId);
/**
* 手机App和微信小程序健康咨询确认订单方法
*
* @param healthConsultationOrderDTO 健康咨询订单
* @return 结果
*/
AjaxResult insertHealthConsultationOrder(HealthConsultationOrderDTO healthConsultationOrderDTO);
}

View File

@ -0,0 +1,172 @@
package com.xinelu.applet.service.healthconsultation.impl;
import com.xinelu.applet.service.healthconsultation.HealthConsultationService;
import com.xinelu.applet.utils.AppointmentTimeUtil;
import com.xinelu.applet.vo.healthconsultation.HealthConsultationOrderDTO;
import com.xinelu.applet.vo.healthconsultation.HealthConsultationVO;
import com.xinelu.applet.vo.healthconsultation.PatientAndTimeVO;
import com.xinelu.applet.vo.specialdisease.WeekDaysVO;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.page.TableDataInfo;
import com.xinelu.common.enums.BuySourceEnum;
import com.xinelu.common.enums.GooodsOrderStatusEnum;
import com.xinelu.common.enums.OrderTypeEnum;
import com.xinelu.common.enums.PoserModuleTypeEnum;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.PageServiceUtil;
import com.xinelu.common.utils.StringUtils;
import com.xinelu.common.utils.bean.BeanUtils;
import com.xinelu.manage.domain.goodsOrder.GoodsOrder;
import com.xinelu.manage.domain.goodsOrderDetails.GoodsOrderDetails;
import com.xinelu.manage.domain.hospitalpersoninfo.HospitalPersonInfo;
import com.xinelu.manage.domain.patientinfo.PatientInfo;
import com.xinelu.manage.domain.poserInfo.PoserInfo;
import com.xinelu.manage.mapper.goodsOrder.GoodsOrderMapper;
import com.xinelu.manage.mapper.goodsOrderDetails.GoodsOrderDetailsMapper;
import com.xinelu.applet.mapper.healthconsultation.HealthConsultationMapper;
import com.xinelu.manage.mapper.hospitalpersoninfo.HospitalPersonInfoMapper;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
import com.xinelu.manage.mapper.poserInfo.PoserInfoMapper;
import com.xinelu.manage.vo.patientinfo.PatientInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @Description 健康咨询接口业务层实现类
* @Author zh
* @Date 2023-03-07
*/
@Slf4j
@Service
public class HealthConsultationServiceImpl implements HealthConsultationService {
@Resource
private PatientInfoMapper patientInfoMapper;
@Resource
private GoodsOrderMapper goodsOrderMapper;
@Resource
private GoodsOrderDetailsMapper goodsOrderDetailsMapper;
@Resource
private HealthConsultationMapper healthConsultationMapper;
@Resource
private PoserInfoMapper poserInfoMapper;
@Resource
private HospitalPersonInfoMapper hospitalPersonInfoMapper;
@Resource
private AppointmentTimeUtil appointmentTimeUtil;
@Resource
private PageServiceUtil pageServiceUtil;
/**
* 健康咨询-预约医生
*
* @return AjaxResult
*/
@Override
public TableDataInfo selectDepartment() {
//查询海报及科室
List<PoserInfo> poserList = poserInfoMapper.selectPoserListByModuleTyp(PoserModuleTypeEnum.HEALTH_CONSUTION_MODULE.getInfo());
pageServiceUtil.startPage();
List<HealthConsultationVO> healthConsultation = healthConsultationMapper.selectHospitalDepartmentList();
if (CollectionUtils.isNotEmpty(healthConsultation)) {
healthConsultation.get(0).setPoserInfoList(poserList);
}
return pageServiceUtil.getDataTable(healthConsultation);
}
/**
* 单查科室人员
*
* @param departmentId 科室id
* @return AjaxResult
*/
@Override
public List<HospitalPersonInfo> selectHospitalPerson(Long departmentId) {
if (Objects.isNull(departmentId)) {
return new ArrayList<>();
}
return hospitalPersonInfoMapper.selectHospitalPerson(departmentId);
}
/**
* 健康咨询-信息确认
*
* @param patientId 用户信息
* @return AjaxResult
*/
@Override
public AjaxResult informationConfirmation(Long patientId) {
PatientAndTimeVO patientAndTime = new PatientAndTimeVO();
PatientInfo patientInfo = healthConsultationMapper.selectPatientById(patientId);
if (Objects.isNull(patientInfo)) {
return AjaxResult.error("用户信息不存在!");
}
LocalDate nowTime = LocalDate.now();
//近七天的预约时间点数据集合
List<WeekDaysVO> weekDaysList = Lists.newArrayList();
appointmentTimeUtil.setWeekDayAndWeekDate(nowTime, weekDaysList);
patientAndTime.setAppointmentTimeList(weekDaysList);
patientAndTime.setPatientName(patientInfo.getPatientName());
patientAndTime.setPhone(patientInfo.getPhone());
return AjaxResult.success(patientAndTime);
}
/**
* 手机App和微信小程序健康咨询确认订单方法
*
* @param healthConsultationOrderDTO 健康咨询订单
* @return 结果
*/
@Transactional(rollbackFor = Exception.class)
@Override
public AjaxResult insertHealthConsultationOrder(HealthConsultationOrderDTO healthConsultationOrderDTO) {
//判断当前会员信息是否存在
PatientInfoVO patientInfo = patientInfoMapper.getPatientInfoById(healthConsultationOrderDTO.getPatientId());
if (Objects.isNull(patientInfo)) {
return AjaxResult.error("用户信息不存在,无法预约专家!");
}
//根据id查询当前专家是否存在
HospitalPersonInfo hospitalPersonInfo = hospitalPersonInfoMapper.selectHospitalPersonInfoById(healthConsultationOrderDTO.getHospitalPersonId());
if (Objects.isNull(hospitalPersonInfo)) {
return AjaxResult.error("当前专家信息不存在,请重新预约!");
}
//生成订单信息
GoodsOrder goodsOrder = new GoodsOrder();
BeanUtils.copyProperties(healthConsultationOrderDTO, goodsOrder);
String goodOrderNo = StringUtils.fillZeroByPatientId(healthConsultationOrderDTO.getPatientId(), 5) + System.nanoTime();
goodsOrder.setOrderNo(goodOrderNo);
goodsOrder.setOrderStatus(GooodsOrderStatusEnum.WAIT_PAY.getInfo());
goodsOrder.setDelFlag(0);
goodsOrder.setOrderType(OrderTypeEnum.HEALTH_CONSULTATION.getInfo());
goodsOrder.setBuySource(BuySourceEnum.HEALTH_CONSULTATION.getInfo());
goodsOrder.setCreateTime(LocalDateTime.now());
goodsOrder.setOrderTime(LocalDateTime.now());
goodsOrder.setOriginalTotalPrice(healthConsultationOrderDTO.getTotalPrice());
int insertGoodsOrder = goodsOrderMapper.insertGoodsOrder(goodsOrder);
if (insertGoodsOrder <= 0) {
throw new ServiceException("预约订单新增信息失败,请联系管理员!");
}
GoodsOrderDetails goodsOrderDetails = new GoodsOrderDetails();
goodsOrderDetails.setGoodsOrderId(goodsOrder.getId());
goodsOrderDetails.setOrderNo(goodOrderNo);
goodsOrderDetails.setGoodsName("健康咨询");
goodsOrderDetails.setTotalPrice(healthConsultationOrderDTO.getTotalPrice());
goodsOrderDetails.setDelFlag(0);
goodsOrderDetails.setCreateTime(LocalDateTime.now());
int insertGoodsOrderDetails = goodsOrderDetailsMapper.insertGoodsOrderDetails(goodsOrderDetails);
if (insertGoodsOrderDetails <= 0) {
throw new ServiceException("预约订单明细新增信息失败,请联系管理员!");
}
return AjaxResult.success(goodsOrderMapper.getGoodsOrderByOrderNo(goodOrderNo));
}
}

View File

@ -0,0 +1,131 @@
package com.xinelu.applet.vo.healthconsultation;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.custominterface.Insert;
import com.xinelu.common.custominterface.Update;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @author ljh
* @version 1.0
* Create by 2023/3/8 13:59
*/
@Data
public class HealthConsultationOrderDTO implements Serializable {
private static final long serialVersionUID = 8664995394794180987L;
/**
* 主键id
*/
private Long id;
/**
* 商品订单表id
*/
private Long goodsOrderId;
/**
* 订单编号
*/
private String orderNo;
/**
* 01
*/
private Integer delFlag;
/**
* 会员id
*/
@NotNull(message = "咨询人员信息不能为空!", groups = {Insert.class, Update.class})
private Long patientId;
/**
* 订单状态待付款WAIT_PAY已付款PAY已取消CANCEL待收货WAIT_RECEIVED已收货RECEIVED待退款WAIT_REFUND已退款REFUNDED待退货WAIT_RETURNED已退货RETURNED
*/
private String orderStatus;
/**
* 订单总金额
*/
@NotNull(message = "金额不能为空", groups = {Insert.class, Update.class})
private BigDecimal totalPrice;
/**
* 收货人
*/
@NotBlank(message = "姓名不能为空", groups = {Insert.class, Update.class})
@Length(max = 20, message = "姓名不能超过20位", groups = {Insert.class, Update.class})
private String receiver;
/**
* 联系电话
*/
@NotBlank(message = "联系电话不能为空", groups = {Insert.class, Update.class})
@Length(max = 11, message = "联系电话不能超过11位", groups = {Insert.class, Update.class})
private String phone;
/**
* 下单时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime orderTime;
/**
* 下单方式手机AppMOBILE_APP微信小程序WECHAT_APPLET支付宝小程序ALI_PAY_APPLET
*/
@NotNull(message = "下单方式不能为空", groups = {Insert.class, Update.class})
private String orderChannel;
/**
* 护理站NURSE_STATION商城SHOPPING_MALL健康咨询HEALTH_CONSULTATION
*/
private String buySource;
/**
* 订单类型积分兑换INTEGRAL_EXCHANGE直接购买DIRECT_BUY健康咨询HEALTH_CONSULTATION
*/
private String orderType;
/**
* 健康咨询人员表id记录咨询订单中选择的医生健康咨询订单使用
*/
@NotNull(message = "请选择咨询的专家!", groups = {Insert.class, Update.class})
private Long hospitalPersonId;
/**
* 商品原始金额商品数量 * 商品单价
*/
private BigDecimal originalTotalPrice;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 健康咨询预约时间健康咨询订单使用
**/
@JsonFormat(pattern = "yyyy-MM-dd")
@NotNull(message = "服务日期不能为空", groups = {Insert.class, Update.class})
private Date healthAppointDate;
/**
* 健康咨询内容健康咨询类型的订单使用
*/
private String healthConsultationContent;
/**
* 健康咨询专家记录咨询订单中选择的医生姓名健康咨询订单使用
*/
@NotBlank(message = "请选择咨询的专家!", groups = {Insert.class, Update.class})
private String hospitalPersonName;
}

View File

@ -0,0 +1,30 @@
package com.xinelu.applet.vo.healthconsultation;
import com.xinelu.manage.domain.poserInfo.PoserInfo;
import lombok.Data;
import java.util.List;
/**
* @Description 健康咨询返回值实体类
* @Author zh
* @Date 2023-03-07
*/
@Data
public class HealthConsultationVO {
/**
* 科室id
*/
private Long departmentId;
/**
* 科室名称
*/
private String departmentName;
/**
* 海报集合
*/
List<PoserInfo> poserInfoList;
}

View File

@ -0,0 +1,30 @@
package com.xinelu.applet.vo.healthconsultation;
import com.xinelu.applet.vo.specialdisease.WeekDaysVO;
import lombok.Data;
import java.util.List;
/**
* @Description 信息确认返回值实体类
* @Author zh
* @Date 2023-03-07
*/
@Data
public class PatientAndTimeVO {
/**
* 用户姓名
*/
private String patientName;
/**
* 手机号码
*/
private String phone;
/**
* 近七天的预约时间点集合
*/
List<WeekDaysVO> appointmentTimeList;
}

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xinelu.applet.mapper.healthconsultation.HealthConsultationMapper">
<select id="selectPatientById" resultType="com.xinelu.manage.domain.patientinfo.PatientInfo">
SELECT patient_name,
phone
FROM patient_info
WHERE id = #{patientId}
</select>
<select id="selectHospitalDepartmentList"
resultType="com.xinelu.applet.vo.healthconsultation.HealthConsultationVO">
select id departmentId,
department_name
from hospital_department_info
order by department_sort asc
</select>
</mapper>