护理员app代码移植

This commit is contained in:
张恒 2023-09-22 17:53:07 +08:00
parent f3ee015e67
commit 588e849cd2
21 changed files with 2948 additions and 0 deletions

View File

@ -0,0 +1,222 @@
package com.xinelu.applet.controller.nursepersonapplogin;
import com.xinelu.applet.dto.nursepersonapplogin.OrderFallbackDTO;
import com.xinelu.applet.service.nursepersonapplogin.INursePersonAppLoginService;
import com.xinelu.applet.vo.nursepersonapplogin.NurseAppLoginSysUserVO;
import com.xinelu.applet.vo.nursepersonapplogin.OrderAndItemVO;
import com.xinelu.applet.vo.nursepersonapplogin.PersonNurseStationAppVO;
import com.xinelu.common.annotation.MobileRequestAuthorization;
import com.xinelu.common.annotation.RepeatSubmit;
import com.xinelu.common.constant.Constants;
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.custominterface.TaskInsert;
import com.xinelu.common.utils.regex.RegexUtil;
import com.xinelu.manage.domain.appointmentorderdetails.AppointmentOrderDetails;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
* @Description 护理人员APP登录注册控制器
* @Author zh
* @Date 2022-10-28
*/
@RestController
@RequestMapping("/nurseApp/personLogin")
public class NursePersonAppLoginController extends BaseController {
@Resource
private INursePersonAppLoginService nursePersonAppLoginService;
@Resource
private RegexUtil regexUtil;
/**
* 工单首页查询已完成以及未完成数量
*
* @param nurseStationPersonId 护理员id
* @return 结果
*/
@MobileRequestAuthorization
@GetMapping("/selectOrderByNursePersonCount")
public AjaxResult selectOrderByNursePersonCount(Long nurseStationPersonId) {
return nursePersonAppLoginService.selectOrderByNursePersonCount(nurseStationPersonId);
}
/**
* 服务人员我的任务界面 查询服务订单
*
* @param orderAndItem 预约订单信息
* @return 结果
*/
@MobileRequestAuthorization
@GetMapping("/selectMission")
public TableDataInfo selectMission(OrderAndItemVO orderAndItem) {
startPage();
List<OrderAndItemVO> appointmentOrder = nursePersonAppLoginService.selectAppointmentOrder(orderAndItem);
return getDataTable(appointmentOrder);
}
/**
* 服务人员-服务订单详情
*
* @param orderNo 订单编号
* @return 结果
*/
@MobileRequestAuthorization
@GetMapping("/taskDetails")
public AjaxResult selectOrderDetailsAndPatient(String orderNo) {
if (Objects.isNull(orderNo)) {
return AjaxResult.error("订单信息不能为空!");
}
return nursePersonAppLoginService.selectOrderDetailsAndPatient(orderNo);
}
/**
* 服务人员 - 任务回退
*
* @param orderFallbackDTO 订单信息
* @return 结果
*/
@MobileRequestAuthorization
@PostMapping("/orderFallback")
public AjaxResult updateAppointmentOrder(@Validated(Insert.class) @RequestBody OrderFallbackDTO orderFallbackDTO) {
return nursePersonAppLoginService.updateAppointmentOrder(orderFallbackDTO);
}
/**
* 任务确认完成
*
* @param appointmentOrderDetails 图片路径
* @return AjaxResult
*/
@MobileRequestAuthorization
@PostMapping("/orderConfirm")
public AjaxResult updateOrderDetails(@Validated(TaskInsert.class) @RequestBody AppointmentOrderDetails appointmentOrderDetails) {
return nursePersonAppLoginService.updateOrderDetails(appointmentOrderDetails);
}
/**
* 护理人员 注册用户信息
*
* @param nurseAppLogin 账号信息
* @return 结果
*/
@PostMapping("/nurseAppLoginSysUser")
public AjaxResult nurseAppLoginSysUser(@Validated(Insert.class) @RequestBody NurseAppLoginSysUserVO nurseAppLogin) {
//校验手机号
boolean regexPhone = regexUtil.regexPhone(nurseAppLogin.getPhonenumber());
if (BooleanUtils.isFalse(regexPhone)) {
return AjaxResult.error("您输入的手机号不正确,请重新输入!");
}
return nursePersonAppLoginService.nurseAppLoginSysUser(nurseAppLogin);
}
/**
* 护理人员 app登录
*
* @param phonenumber 账号
* @param stationPersonPassword 密码
* @return 结果
*/
@PostMapping("/appLogin")
public AjaxResult logins(String phonenumber, String stationPersonPassword) {
if (StringUtils.isBlank(phonenumber)) {
return AjaxResult.error("请输入账号!");
}
if (StringUtils.isBlank(stationPersonPassword)) {
return AjaxResult.error("请输入密码!");
}
return nursePersonAppLoginService.logins(phonenumber, stationPersonPassword);
}
/**
* 忘记密码
*
* @param phonenumber 手机号
* @param stationPersonPassword 密码
* @return 结果
*/
@PostMapping("/updatePassword")
public AjaxResult updatePassword(String phonenumber, String stationPersonPassword, String verification) {
if (StringUtils.isBlank(phonenumber)) {
return AjaxResult.error("手机号不能为空!");
}
if (StringUtils.isBlank(stationPersonPassword)) {
return AjaxResult.error("密码不能为空!");
}
return nursePersonAppLoginService.updatePassword(phonenumber, stationPersonPassword, verification);
}
/**
* 查询护理站人员的个人信息
*
* @param nurseAppLoginSysUserVO 个人信息
* @return com.xinyilu.nurseapplet.domain.vo.nursepersonapplogin.NursePersonAppLoginsUserVO
**/
@MobileRequestAuthorization
@GetMapping("/nursePerson")
public AjaxResult nursePerson(NurseAppLoginSysUserVO nurseAppLoginSysUserVO) {
if (StringUtils.isBlank(nurseAppLoginSysUserVO.getPhonenumber())) {
return AjaxResult.error("账号异常,请联系管理员!");
}
if (StringUtils.isBlank(nurseAppLoginSysUserVO.getStationPersonPassword())) {
return AjaxResult.error("账号密码异常,请联系管理员!");
}
return AjaxResult.success(nursePersonAppLoginService.getNursePersonPersonalInformation(nurseAppLoginSysUserVO));
}
/**
* 修改用户护理人员的账户密码
*
* @param nurseAppLoginSysUserVO 用户信息
* @return int
**/
@MobileRequestAuthorization
@RepeatSubmit
@PostMapping("/userPassWord")
public AjaxResult userPassWord(@RequestBody NurseAppLoginSysUserVO nurseAppLoginSysUserVO) {
return nursePersonAppLoginService.updateUserPassWord(nurseAppLoginSysUserVO);
}
/**
* 修改被护理人人员上传文件头像
*
* @param multipartFile 文件
* @param userId userId护理人人员id
* @return com.xinyilu.common.core.domain.AjaxResult
* @throws Exception 异常信息
**/
@PostMapping("/updateHeadAvatarHead")
public AjaxResult updateHeadAvatarHead(@RequestParam("file") MultipartFile multipartFile, Long userId) throws Exception {
if (Objects.isNull(userId)) {
return AjaxResult.error("护理人人员id不能为空");
}
if (Objects.isNull(multipartFile) || StringUtils.isBlank(multipartFile.getOriginalFilename())) {
return AjaxResult.error("当前文件不存在,无法上传!");
}
if (multipartFile.getOriginalFilename().contains(Constants.EMPTY)) {
return AjaxResult.error("当前文件名含有空格,请先去除空格在上传!");
}
return nursePersonAppLoginService.updateHeadAvatarHead(multipartFile, userId);
}
/**
* 查询护理站信息列表
*/
@GetMapping("/personNurseStationLists")
public TableDataInfo personNurseStationLists(PersonNurseStationAppVO nurseStation) {
startPage();
List<PersonNurseStationAppVO> personNurseStationLists = nursePersonAppLoginService.getPersonNurseStationLists(nurseStation);
return getDataTable(personNurseStationLists);
}
}

View File

@ -0,0 +1,43 @@
package com.xinelu.applet.dto.nursepersonapplogin;
import com.xinelu.common.custominterface.Insert;
import lombok.Data;
import net.sf.jsqlparser.statement.update.Update;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Description 护理员任务退回传入DTO
* @Author 张恒
* @Date 2023-03-30
*/
@Data
public class OrderFallbackDTO implements Serializable {
private static final long serialVersionUID = -7304878110328260180L;
/**
* 预约订单id
*/
@NotNull(message = "订单信息为空", groups = {Insert.class, Update.class})
private Long appointmentOrderId;
/**
* 护理员id
*/
@NotNull(message = "用户信息为空", groups = {Insert.class, Update.class})
private Long stationPersonId;
/**
* 订单编号
*/
@NotBlank(message = "订单编号为空", groups = {Insert.class, Update.class})
private String appointmentOrderNo;
/**
* 退回原因
*/
@NotBlank(message = "退回原因为空", groups = {Insert.class})
private String taskReturnReason;
}

View File

@ -0,0 +1,134 @@
package com.xinelu.applet.mapper.nursepersonapplogin;
import com.xinelu.applet.vo.nursepersonapplogin.*;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Description 护理人员APP登录注册Mapper
* @Author zh
* @Date 2022-10-28
*/
public interface NursePersonAppLoginMapper {
/**
* 工单首页查询已完成以及未完成数量
*
* @param nurseStationPersonId 护理员id
* @param orderStatusList 状态
* @return java.util.List<com.xinyilu.nurseapplet.domain.vo.nursepersonapplogin.OrderByNursePersonVO>
**/
List<OrderByNursePersonVO> selectOrderByNursePersonCount(@Param("nurseStationPersonId") Long nurseStationPersonId, @Param("orderStatusList") List<String> orderStatusList);
/**
* 服务人员我的任务界面 查询服务订单
*
* @param orderAndItem 预约订单信息
* @return 结果
*/
List<OrderAndItemVO> selectOrderByNursePersonId(OrderAndItemVO orderAndItem);
/**
* 服务人员-服务订单详情
*
* @param orderNo 订单编号
* @return 结果
*/
OrderDetailsAndPatientVO getOrderDetailsAndPatientByDetailsId(String orderNo);
/**
* 任务退回
*
* @param orderNo 订单编号
* @param orderStatus 订单状态
* @param taskReturnReason 退还原因
* @return 结果
*/
int updateAppointmentOrderByOrderNo(@Param("orderNo") String orderNo, @Param("orderStatus") String orderStatus, @Param("taskReturnReason") String taskReturnReason);
/**
* 根据手机号或者密码 查询 护理人员的注册信息
*
* @param phonenumber 手机号
* @param stationPersonPassword 密码
* @return int 数量
*/
int getSysUserPasswordByPhone(@Param("phonenumber") String phonenumber, @Param("stationPersonPassword") String stationPersonPassword);
/**
* 护理站人员注册信息新增
*
* @param nurseAppLoginSysUserVO 注册信息
* @return int 结果
**/
int insertNurseAppLoginSysUser(NurseAppLoginSysUserVO nurseAppLoginSysUserVO);
/**
* 根据用户护理人员的账户密码去查询 返回护理人员信息
*
* @param phonenumber 手机号 账号
* @param stationPersonPassword 密码
* @return com.xinyilu.nurseapplet.domain.vo.nursepersonapplogin.NursePersonAppLoginsUserVO
**/
NursePersonAppLoginsUserVO getUserAndPerson(@Param("phonenumber") String phonenumber, @Param("stationPersonPassword") String stationPersonPassword);
/**
* 根据手机号查询用户id
*
* @param phonenumber 手机号码
* @return 完善信息
*/
Long getFromPhoneUserId(String phonenumber);
/**
* 修改用户护理人员的账户密码
*
* @param nurseAppLoginSysUserVO 用户信息
* @return int
**/
int updateUserPassWord(NurseAppLoginSysUserVO nurseAppLoginSysUserVO);
/**
* 查询护理站人员的个人信息
*
* @param nurseAppLoginSysUserVO 个人信息
* @return com.xinyilu.nurseapplet.domain.vo.nursepersonapplogin.NursePersonAppLoginsUserVO
**/
NursePersonAppLoginsUserVO getNursePersonPersonalInformation(NurseAppLoginSysUserVO nurseAppLoginSysUserVO);
/**
* 修改被护理人人员上传文件头像
*
* @param avatar 头像地址
* @param userId userId护理人人员id
* @return com.xinyilu.common.core.domain.AjaxResult
**/
int updateHeadAvatarHeadUserId(@Param("userId") Long userId, @Param("avatar") String avatar);
/**
* 查询护理站列表
*
* @param nurseStation 护理站列表
* @return com.xinyilu.base.domain.nursestation.NurseStation
**/
List<PersonNurseStationAppVO> getPersonNurseStationLists(PersonNurseStationAppVO nurseStation);
/**
* 根据userId查询信息
*
* @param userId 护理人员id
* @return int
**/
NursePersonAppLoginsUserVO getNursePersonUserId(Long userId);
/**
* 根据护理员id查询个人信息
*
* @param nursePersonId 护理员id
* @return com.xinyilu.nurseapplet.domain.vo.nursepersonapplogin.NurseStationPersonUserVO
**/
NurseStationPersonUserVO getNurseStationPersonById(Long nursePersonId);
}

View File

@ -0,0 +1,136 @@
package com.xinelu.applet.service.nursepersonapplogin;
import com.xinelu.applet.dto.nursepersonapplogin.OrderFallbackDTO;
import com.xinelu.applet.vo.nursepersonapplogin.NurseAppLoginSysUserVO;
import com.xinelu.applet.vo.nursepersonapplogin.NursePersonAppLoginsUserVO;
import com.xinelu.applet.vo.nursepersonapplogin.OrderAndItemVO;
import com.xinelu.applet.vo.nursepersonapplogin.PersonNurseStationAppVO;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.manage.domain.appointmentorderdetails.AppointmentOrderDetails;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @Description 护理人员APP登录注册业务层
* @Author zh
* @Date 2022-10-28
*/
public interface INursePersonAppLoginService {
/**
* 工单首页查询已完成以及未完成数量
*
* @param nurseStationPersonId 护理员id
* @return int
**/
AjaxResult selectOrderByNursePersonCount(Long nurseStationPersonId);
/**
* 服务人员我的任务界面 查询服务订单
*
* @param orderAndItem 预约订单信息
* @return 结果
*/
List<OrderAndItemVO> selectAppointmentOrder(OrderAndItemVO orderAndItem);
/**
* 服务人员-服务订单详情
*
* @param orderNo 订单编号
* @return 结果
*/
AjaxResult selectOrderDetailsAndPatient(String orderNo);
/**
* 服务人员 - 任务回退
*
* @param orderFallbackDTO 订单信息
* @return 结果
*/
AjaxResult updateAppointmentOrder(OrderFallbackDTO orderFallbackDTO);
/**
* 任务确认完成
*
* @param appointmentOrderDetails 图片路径
* @return 结果
*/
AjaxResult updateOrderDetails(AppointmentOrderDetails appointmentOrderDetails);
/**
* 护理人员 注册用户信息
*
* @param nurseAppLogin 注册信息
* @return com.xinyilu.common.core.domain.AjaxResult
**/
AjaxResult nurseAppLoginSysUser(NurseAppLoginSysUserVO nurseAppLogin);
/**
* APP登录用户信息
*
* @param phone 账号
* @param stationPersonPassword 密码
* @return 结果
*/
AjaxResult logins(String phone, String stationPersonPassword);
/**
* 忘记密码
*
* @param phonenumber 账号
* @param stationPersonPassword 密码
* @return 结果
*/
AjaxResult updatePassword(String phonenumber, String stationPersonPassword, String verification);
/**
* 查询护理站人员的个人信息
*
* @param nurseAppLoginSysUserVO 个人信息
* @return com.xinyilu.nurseapplet.domain.vo.nursepersonapplogin.NursePersonAppLoginsUserVO
**/
NursePersonAppLoginsUserVO getNursePersonPersonalInformation(NurseAppLoginSysUserVO nurseAppLoginSysUserVO);
/**
* 修改用户护理人员的账户密码
*
* @param nurseAppLoginSysUserVO 用户信息
* @return int
**/
AjaxResult updateUserPassWord(NurseAppLoginSysUserVO nurseAppLoginSysUserVO);
/**
* 修改被护理人人员上传文件头像
*
* @param avatar 头像地址
* @param userId userId护理人人员id
* @return com.xinyilu.common.core.domain.AjaxResult
**/
boolean updateHeadAvatarHeadUserId(@Param("userId") Long userId, @Param("avatar") String avatar, String userIdAvatar);
/**
* 修改被护理人人员上传文件头像
*
* @param multipartFile 文件
* @param userId userId护理人人员id
* @return com.xinyilu.common.core.domain.AjaxResult
* @throws Exception 异常信息
**/
AjaxResult updateHeadAvatarHead(MultipartFile multipartFile, Long userId) throws Exception;
/**
* 查询护理站列表
*
* @param nurseStation 护理站列表
* @return com.xinyilu.base.domain.nursestation.NurseStation
**/
List<PersonNurseStationAppVO> getPersonNurseStationLists(PersonNurseStationAppVO nurseStation);
}

View File

@ -0,0 +1,489 @@
package com.xinelu.applet.service.nursepersonapplogin.impl;
import com.xinelu.applet.dto.nursepersonapplogin.OrderFallbackDTO;
import com.xinelu.applet.mapper.nursepersonapplogin.NursePersonAppLoginMapper;
import com.xinelu.applet.service.nursepersonapplogin.INursePersonAppLoginService;
import com.xinelu.applet.vo.nursepersonapplogin.*;
import com.xinelu.common.config.XinELuConfig;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.enums.OrderProcessOperateTypeEnum;
import com.xinelu.common.enums.OrderStatusEnum;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.AgeUtil;
import com.xinelu.common.utils.file.FileUploadUtils;
import com.xinelu.common.utils.file.MimeTypeUtils;
import com.xinelu.common.utils.regex.RegexUtil;
import com.xinelu.common.utils.sign.Md5Utils;
import com.xinelu.manage.domain.appointmentorderdetails.AppointmentOrderDetails;
import com.xinelu.manage.domain.appointmentorderprocessrecord.AppointmentOrderProcessRecord;
import com.xinelu.manage.domain.nursestationperson.NurseStationPerson;
import com.xinelu.manage.domain.nursestationpersonrevenue.NurseStationPersonRevenue;
import com.xinelu.manage.domain.patientdiseaseinfo.PatientDiseaseInfo;
import com.xinelu.manage.mapper.appointmentorderdetails.AppointmentOrderDetailsMapper;
import com.xinelu.manage.mapper.appointmentorderprocessrecord.AppointmentOrderProcessRecordMapper;
import com.xinelu.manage.mapper.nursestation.NurseStationMapper;
import com.xinelu.manage.mapper.nursestationperson.NurseStationPersonMapper;
import com.xinelu.manage.mapper.nursestationpersonrevenue.NurseStationPersonRevenueMapper;
import com.xinelu.manage.mapper.patientdiseaseinfo.PatientDiseaseInfoMapper;
import com.xinelu.manage.service.stationmessagepush.StationMessagePushService;
import com.xinelu.manage.vo.appointmentorder.AppointmentOrderRecordVO;
import com.xinelu.manage.vo.appointmentorder.AppointmentReceivingOrderVO;
import com.xinelu.manage.vo.nursestation.NurseStationSysUserVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @Description 护理人员APP登录注册业务层实现类
* @Author ZH
* @Date 2022-10-28
*/
@Service
@Slf4j
public class NursePersonAppLoginServiceImpl implements INursePersonAppLoginService {
@Resource
private NursePersonAppLoginMapper nursePersonAppLoginMapper;
@Resource
private AppointmentOrderDetailsMapper appointmentOrderDetailsMapper;
@Resource
private RegexUtil regexUtil;
@Resource
private NurseStationMapper nurseStationMapper;
@Resource
private NursePersonAppLoginServiceImpl nursePersonAppLoginService;
@Resource
private NurseStationPersonMapper nurseStationPersonMapper;
@Resource
private XinELuConfig xinYiLuConfig;
@Resource
private AppointmentOrderProcessRecordMapper appointmentOrderProcessRecordMapper;
@Resource
private NurseStationPersonRevenueMapper nurseStationPersonRevenueMapper;
@Resource
private PatientDiseaseInfoMapper patientDiseaseInfoMapper;
@Resource
private StationMessagePushService stationMessagePushService;
/**
* 工单首页查询已完成以及未完成数量
*
* @param nurseStationPersonId 护理员id
* @return int
**/
@Override
public AjaxResult selectOrderByNursePersonCount(Long nurseStationPersonId) {
OrderByNursePersonVO orderByNursePersonVO = new OrderByNursePersonVO();
if (Objects.isNull(nurseStationPersonId)) {
orderByNursePersonVO.setCompleteCount(0L);
orderByNursePersonVO.setNotFinishCount(0L);
return AjaxResult.success(orderByNursePersonVO);
}
List<String> orderStatusList = Arrays.asList(OrderStatusEnum.NOT_FINISH.getInfo(), OrderStatusEnum.WAIT_RECEIVE.getInfo(), OrderStatusEnum.COMPLETE.getInfo(), OrderStatusEnum.EVALUATED.getInfo());
List<OrderByNursePersonVO> orderByNursePersonList = nursePersonAppLoginMapper.selectOrderByNursePersonCount(nurseStationPersonId, orderStatusList);
long completeCount = orderByNursePersonList.stream().filter(Objects::nonNull).filter(order -> (StringUtils.isNotBlank(order.getOrderStatus())) && order.getOrderStatus().equals(OrderStatusEnum.COMPLETE.getInfo()) || order.getOrderStatus().equals(OrderStatusEnum.EVALUATED.getInfo())).count();
long notFinishCount = orderByNursePersonList.stream().filter(Objects::nonNull).filter(order -> (StringUtils.isNotBlank(order.getOrderStatus())) && order.getOrderStatus().equals(OrderStatusEnum.NOT_FINISH.getInfo()) || order.getOrderStatus().equals(OrderStatusEnum.WAIT_RECEIVE.getInfo())).count();
orderByNursePersonVO.setCompleteCount(completeCount);
orderByNursePersonVO.setNotFinishCount(notFinishCount);
return AjaxResult.success(orderByNursePersonVO);
}
/**
* 服务人员我的任务界面 查询服务订单
*
* @param orderAndItem 预约订单信息
* @return 结果
*/
@Override
public List<OrderAndItemVO> selectAppointmentOrder(OrderAndItemVO orderAndItem) {
List<OrderAndItemVO> appointmentOrderDetails = new ArrayList<>();
if (Objects.isNull(orderAndItem) || Objects.isNull(orderAndItem.getNursePersonId())) {
return appointmentOrderDetails;
}
List<String> orderStatusList;
//处理全部订单状态筛选条件
if (StringUtils.isBlank(orderAndItem.getOrderStatus())) {
orderStatusList = Arrays.asList(OrderStatusEnum.NOT_FINISH.getInfo(), OrderStatusEnum.WAIT_RECEIVE.getInfo(), OrderStatusEnum.COMPLETE.getInfo(), OrderStatusEnum.EVALUATED.getInfo());
orderAndItem.setOrderStatusList(orderStatusList);
}
//处理当前订单状态筛选条件
if (StringUtils.isNotBlank(orderAndItem.getOrderStatus()) && StringUtils.equals(OrderStatusEnum.NOT_FINISH.getInfo(), orderAndItem.getOrderStatus())) {
orderStatusList = Arrays.asList(OrderStatusEnum.NOT_FINISH.getInfo(), OrderStatusEnum.WAIT_RECEIVE.getInfo());
orderAndItem.setOrderStatusList(orderStatusList);
}
//已完成的订单状态筛选条件
if (StringUtils.isNotBlank(orderAndItem.getOrderStatus()) && StringUtils.equals(OrderStatusEnum.COMPLETE.getInfo(), orderAndItem.getOrderStatus())) {
orderStatusList = Arrays.asList(OrderStatusEnum.COMPLETE.getInfo(), OrderStatusEnum.EVALUATED.getInfo());
orderAndItem.setOrderStatusList(orderStatusList);
}
return nursePersonAppLoginMapper.selectOrderByNursePersonId(orderAndItem);
}
/**
* 服务人员-服务订单详情
*
* @param orderNo 订单编号
* @return 结果
*/
@Override
public AjaxResult selectOrderDetailsAndPatient(String orderNo) {
OrderDetailsAndPatientVO patientByDetails = nursePersonAppLoginMapper.getOrderDetailsAndPatientByDetailsId(orderNo);
if (Objects.nonNull(patientByDetails) && Objects.nonNull(patientByDetails.getBirthDate())) {
patientByDetails.setAge(AgeUtil.getAgeMonth(String.valueOf(patientByDetails.getBirthDate())));
}
//健康状况
List<PatientDiseaseInfo> patientDiseaseInfo = patientDiseaseInfoMapper.selectPatientDiseaseInfoByOrderNo(patientByDetails.getOrderNo());
if (CollectionUtils.isNotEmpty(patientDiseaseInfo)) {
List<String> diseaseNameList = patientDiseaseInfo.stream().filter(Objects::nonNull).map(PatientDiseaseInfo::getDiseaseName).filter(StringUtils::isNotBlank).collect(Collectors.toList());
String diseaseName = String.join(",", diseaseNameList);
patientByDetails.setDiseaseName(diseaseName);
}
return AjaxResult.success(patientByDetails);
}
/**
* 服务人员 - 任务回退
*
* @param orderFallbackDTO 订单信息
* @return 结果
*/
@Transactional(rollbackFor = Exception.class)
@Override
public AjaxResult updateAppointmentOrder(OrderFallbackDTO orderFallbackDTO) {
AppointmentReceivingOrderVO appointmentReceivingOrder = appointmentOrderDetailsMapper.getAppointmentReceivingOrder(orderFallbackDTO.getAppointmentOrderNo());
if (Objects.isNull(appointmentReceivingOrder)) {
return AjaxResult.error("当前订单不存在,无法退回!");
}
appointmentReceivingOrder.setTaskReturnReason(orderFallbackDTO.getTaskReturnReason());
int update = nursePersonAppLoginMapper.updateAppointmentOrderByOrderNo(orderFallbackDTO.getAppointmentOrderNo(), OrderStatusEnum.WAIT_DISPATCH.getInfo(), orderFallbackDTO.getTaskReturnReason());
if (update <= 0) {
throw new ServiceException("任务退回失败,请联系管理员!");
}
//流程记录
AppointmentOrderProcessRecord appointmentOrderProcessRecord = new AppointmentOrderProcessRecord();
appointmentOrderProcessRecord.setAppointmentOrderNo(orderFallbackDTO.getAppointmentOrderNo());
appointmentOrderProcessRecord.setCreateTime(LocalDateTime.now());
appointmentOrderProcessRecord.setOperatePersonId(orderFallbackDTO.getStationPersonId());
appointmentOrderProcessRecord.setOperateTime(LocalDateTime.now());
appointmentOrderProcessRecord.setOperateType(OrderProcessOperateTypeEnum.ACTIVE_BACK_ORDER.getInfo());
appointmentOrderProcessRecord.setOperateDetails(orderFallbackDTO.getTaskReturnReason());
appointmentOrderProcessRecord.setAppointmentOrderId(orderFallbackDTO.getAppointmentOrderId());
int count = appointmentOrderProcessRecordMapper.insertAppointmentOrderProcessRecord(appointmentOrderProcessRecord);
if (count <= 0) {
throw new ServiceException("预约订单流程记录失败,请联系管理员!");
}
//异步发送信息
stationMessagePushService.refusalOrdersOperationsPush(appointmentReceivingOrder);
return AjaxResult.success();
}
/**
* 任务确认完成
*
* @param appointmentOrderDetails 图片路径
* @return 结果
*/
@Transactional(rollbackFor = Exception.class)
@Override
public AjaxResult updateOrderDetails(AppointmentOrderDetails appointmentOrderDetails) {
AppointmentOrderRecordVO orderDetails = appointmentOrderDetailsMapper.selectAppointmentOrderById(appointmentOrderDetails.getOrderNo());
if (Objects.isNull(orderDetails) || StringUtils.isBlank(orderDetails.getOrderStatus())) {
return AjaxResult.error("当前订单状态不存在,请重新选择!");
}
if (!orderDetails.getOrderStatus().equals(OrderStatusEnum.NOT_FINISH.getInfo())) {
return AjaxResult.error("订单状态异常,请选择未完成订单!");
}
if (StringUtils.isBlank(appointmentOrderDetails.getServeLocationLatitude()) || StringUtils.isBlank(appointmentOrderDetails.getServeLocationLatitude())) {
log.info("当前用户不同意获取位置信息,无法保存当前位置经纬度信息!");
}
appointmentOrderDetails.setUpdateTime(LocalDateTime.now());
appointmentOrderDetails.setOrderStatus(OrderStatusEnum.COMPLETE.getInfo());
int update = appointmentOrderDetailsMapper.updateOrderDetailsById(appointmentOrderDetails);
if (update <= 0) {
throw new ServiceException("信息上传失败,请联系管理员!");
}
//新增护理员订单佣金收益信息表
NurseStationPersonRevenue nurseStationPersonRevenue = new NurseStationPersonRevenue();
nurseStationPersonRevenue.setNurseStationPersonId(Objects.isNull(orderDetails.getNurseStationPersonId()) ? null : orderDetails.getNurseStationPersonId());
nurseStationPersonRevenue.setAppointmentOrderId(Objects.isNull(orderDetails.getId()) ? null : orderDetails.getId());
nurseStationPersonRevenue.setRevenueAmount(Objects.isNull(orderDetails.getOrderCommissionAmount()) ? null : orderDetails.getOrderCommissionAmount());
nurseStationPersonRevenue.setFinishOrderTime(LocalDateTime.now());
nurseStationPersonRevenue.setCreateTime(LocalDateTime.now());
int stationPersonRevenue = nurseStationPersonRevenueMapper.insertNurseStationPersonRevenue(nurseStationPersonRevenue);
if (stationPersonRevenue <= 0) {
throw new ServiceException("新增护理员订单佣金收益记录失败,请联系管理员!");
}
//新增预约订单流程记录信息表
AppointmentOrderProcessRecord appointment = new AppointmentOrderProcessRecord();
appointment.setOperatePersonId(Objects.isNull(orderDetails.getNurseStationPersonId()) ? null : orderDetails.getNurseStationPersonId());
appointment.setAppointmentOrderId(Objects.isNull(orderDetails.getId()) ? null : orderDetails.getId());
appointment.setAppointmentOrderNo(StringUtils.isBlank(orderDetails.getOrderNo()) ? "" : orderDetails.getOrderNo());
appointment.setOperateTime(LocalDateTime.now());
appointment.setOperateType(OrderProcessOperateTypeEnum.FINISH_ORDER.getInfo());
appointment.setOperateDetails("预约订单任务完成操作");
appointment.setCreateTime(LocalDateTime.now());
int count = appointmentOrderProcessRecordMapper.insertAppointmentOrderProcessRecord(appointment);
if (count <= 0) {
throw new ServiceException("预约订单流程记录失败,请联系管理员!");
}
//更新护理员账户总金额
Long nurseStationPersonId = Objects.isNull(orderDetails.getNurseStationPersonId()) ? 0 : orderDetails.getNurseStationPersonId();
BigDecimal orderCommissionAmount = Objects.isNull(orderDetails.getOrderCommissionAmount()) ? BigDecimal.ZERO : orderDetails.getOrderCommissionAmount();
nurseStationPersonMapper.updateTotalRevenueAmountById(nurseStationPersonId, orderCommissionAmount);
//异步发送信息
stationMessagePushService.orderCompletionOperationsPush(orderDetails);
return AjaxResult.success();
}
/**
* 护理人员 注册用户信息
*
* @param nurseAppLogin 注册信息
* @return com.xinyilu.common.core.domain.AjaxResult
**/
@Transactional(rollbackFor = Exception.class)
@Override
public AjaxResult nurseAppLoginSysUser(NurseAppLoginSysUserVO nurseAppLogin) {
//校验手机号是否存在 sys_user 用户表与nurse_station_person 护理站人员信息表关联
NurseStationPerson nurseStationPersonPhoneUser = nurseStationPersonMapper.getNurseStationPersonPhoneUser(nurseAppLogin.getPhonenumber());
NurseAppLoginSysUserVO patient = new NurseAppLoginSysUserVO();
if (Objects.nonNull(nurseStationPersonPhoneUser)) {
patient.setNurseStationPersonId(Objects.isNull(nurseStationPersonPhoneUser.getId()) ? null : nurseStationPersonPhoneUser.getId());
} else {
log.warn("当前护理员信息在nurse_station_person表中不存在请先前往Pc端护理站人员信息维护该护理人员信息");
return AjaxResult.error("当前护理员信息不存在,请前往护理站管理平台新增个人信息!");
}
//校验手机号是否存在 sys_user 用户表与nurse_station_person 护理站人员信息表关联
int phoneCount = nursePersonAppLoginMapper.getSysUserPasswordByPhone(nurseAppLogin.getPhonenumber(), null);
if (phoneCount > 0) {
return AjaxResult.error("该手机号已注册,请重新输入!");
}
//调用md5加密方法
String changePassword = md5(nurseAppLogin.getStationPersonPassword());
patient.setPhonenumber(nurseAppLogin.getPhonenumber());
patient.setUserName(nurseAppLogin.getPhonenumber());
patient.setNickName(nurseAppLogin.getNickName());
patient.setStationPersonPassword(changePassword);
patient.setCreateTime(LocalDateTime.now());
patient.setNurseStationIds(nurseAppLogin.getNurseStationIds());
int row = nursePersonAppLoginMapper.insertNurseAppLoginSysUser(patient);
if (row <= 0) {
throw new ServiceException("注册失败,请联系管理员!");
}
return AjaxResult.success();
}
/**
* app登录
*
* @param phonenumber 账号
* @param stationPersonPassword 密码
* @return AjaxResult
*/
@Override
public AjaxResult logins(String phonenumber, String stationPersonPassword) {
if (BooleanUtils.isFalse(regexUtil.regexPhone(phonenumber))) {
return AjaxResult.error("您输入的账号不正确,请重新输入!");
}
//校验手机号是否存在 sys_user 用户表与nurse_station_person 护理站人员信息表关联
NurseStationPerson nurseStationPersonPhoneUser = nurseStationPersonMapper.getNurseStationPersonPhoneUser(phonenumber);
if (Objects.isNull(nurseStationPersonPhoneUser)) {
return AjaxResult.error("当前护理员信息不存在,请前往护理站管理平台新增个人信息!");
}
//判断账号是否存在不存在进行注册
int existsCount = nursePersonAppLoginMapper.getSysUserPasswordByPhone(phonenumber, null);
if (existsCount <= 0) {
return AjaxResult.error("当前账号不存在,请先注册!");
}
//账号存在判断输入密码是否正确
int count = nursePersonAppLoginMapper.getSysUserPasswordByPhone(phonenumber, md5(stationPersonPassword));
if (count <= 0) {
return AjaxResult.error("您输入的密码不正确,请重新输入!");
}
NursePersonAppLoginsUserVO patient = nursePersonAppLoginMapper.getUserAndPerson(phonenumber, md5(stationPersonPassword));
return AjaxResult.success(patient);
}
/**
* 忘记密码
*
* @param phonenumber 账号
* @param stationPersonPassword 密码
* @return 结果
*/
@Override
public AjaxResult updatePassword(String phonenumber, String stationPersonPassword, String verification) {
//校验手机号是否存在 sys_user 用户表与nurse_station_person 护理站人员信息表关联
NurseStationPerson nurseStationPersonPhoneUser = nurseStationPersonMapper.getNurseStationPersonPhoneUser(phonenumber);
if (Objects.isNull(nurseStationPersonPhoneUser)) {
return AjaxResult.error("当前护理员信息不存在,请前往护理站管理平台新增个人信息!");
}
Long patientId = nursePersonAppLoginMapper.getFromPhoneUserId(phonenumber);
if (Objects.isNull(patientId) || patientId == 0L) {
return AjaxResult.error("当前账号信息不存在,请重新输入!");
}
NurseAppLoginSysUserVO patientInfo = new NurseAppLoginSysUserVO();
patientInfo.setPhone(phonenumber);
patientInfo.setUserId(patientId);
patientInfo.setStationPersonPassword(md5(stationPersonPassword));
//判断是否修改成功`
int updatePassword = nursePersonAppLoginMapper.updateUserPassWord(patientInfo);
if (updatePassword <= 0) {
throw new ServiceException("修改密码失败,请联系管理员!");
}
return AjaxResult.success();
}
/**
* 查询护理站人员的个人信息
*
* @param nurseAppLoginSysUserVO 个人信息
* @return com.xinyilu.nurseapplet.domain.vo.nursepersonapplogin.NursePersonAppLoginsUserVO
**/
@Override
public NursePersonAppLoginsUserVO getNursePersonPersonalInformation(NurseAppLoginSysUserVO nurseAppLoginSysUserVO) {
nurseAppLoginSysUserVO.setStationPersonPassword(md5(nurseAppLoginSysUserVO.getStationPersonPassword()));
NursePersonAppLoginsUserVO personAppLoginsUserVO = nursePersonAppLoginMapper.getNursePersonPersonalInformation(nurseAppLoginSysUserVO);
//查询所属的护理站信息
if (StringUtils.isBlank(personAppLoginsUserVO.getNurseStationIds())) {
return personAppLoginsUserVO;
}
List<String> nurseTypeCodeList = Arrays.asList(StringUtils.split(personAppLoginsUserVO.getNurseStationIds(), ","));
List<Long> stationIdList = nurseTypeCodeList.stream().map(s -> Long.parseLong(s.trim())).distinct().collect(Collectors.toList());
List<NurseStationSysUserVO> stationIds = nurseStationMapper.getNurseStationIds(stationIdList);
personAppLoginsUserVO.setNurseStationSysUserVOList(stationIds);
return personAppLoginsUserVO;
}
/**
* 修改用户护理人员的账户密码
*
* @param nurseAppLoginSysUserVO 用户信息
* @return int
**/
@Transactional(rollbackFor = Exception.class)
@Override
public AjaxResult updateUserPassWord(NurseAppLoginSysUserVO nurseAppLoginSysUserVO) {
NurseStationPerson personInfo = nurseStationPersonMapper.getNurseStationPersonPhoneUser(nurseAppLoginSysUserVO.getPhonenumber());
if (Objects.isNull(personInfo)) {
return AjaxResult.error("当前护理人员信息不存在,无法修改个人信息!");
}
//有手机号才 进行校验
if (StringUtils.isNotBlank(nurseAppLoginSysUserVO.getPhonenumber())) {
if (BooleanUtils.isFalse(regexUtil.regexPhone(nurseAppLoginSysUserVO.getPhonenumber()))) {
return AjaxResult.error("您输入的电话号码" + nurseAppLoginSysUserVO.getPhonenumber() + "不正确,请重新输入!");
}
if (StringUtils.isNotBlank(personInfo.getPhone()) && !StringUtils.equals(personInfo.getPhone(), nurseAppLoginSysUserVO.getPhonenumber())) {
int nurseStationPersonPhone = nurseStationPersonMapper.getNurseStationPersonPhone(nurseAppLoginSysUserVO.getPhonenumber());
if (nurseStationPersonPhone > 0) {
return AjaxResult.error("您输入的联系电话" + nurseAppLoginSysUserVO.getPhonenumber() + "重复!");
}
}
}
//更新sysUser表信息
nursePersonAppLoginMapper.updateUserPassWord(nurseAppLoginSysUserVO);
//更新NurseStationPerson表信息
NurseStationPerson nurseStationPerson = new NurseStationPerson();
nurseStationPerson.setNursePersonName(nurseAppLoginSysUserVO.getNickName());
nurseStationPerson.setId(nurseAppLoginSysUserVO.getNurseStationPersonId());
nurseStationPersonMapper.updateNurseStationPerson(nurseStationPerson);
return AjaxResult.success();
}
/**
* 修改被护理人人员上传文件头像
*
* @param avatar 头像地址
* @param userId userId护理人人员id
* @return com.xinyilu.common.core.domain.AjaxResult
**/
@Override
public boolean updateHeadAvatarHeadUserId(Long userId, String avatar, String userIdAvatar) {
//删除被护理人人员的头像
if (StringUtils.isNotBlank(userIdAvatar)) {
String picture = XinELuConfig.getProfile() + userIdAvatar.replaceAll("/profile", "");
File checkReportNameFile = new File(picture);
if (checkReportNameFile.exists()) {
boolean delete = checkReportNameFile.delete();
if (BooleanUtils.isFalse(delete)) {
throw new ServiceException("图片地址删除失败!");
}
}
}
return nursePersonAppLoginMapper.updateHeadAvatarHeadUserId(userId, avatar) > 0;
}
/**
* 修改被护理人人员上传文件头像
*
* @param multipartFile 文件
* @param userId userId护理人人员id
* @return com.xinyilu.common.core.domain.AjaxResult
* @throws Exception 异常信息
**/
@Override
public AjaxResult updateHeadAvatarHead(MultipartFile multipartFile, Long userId) throws Exception {
//根据userId查询SysUser表的信息
if (Objects.isNull(userId)) {
return AjaxResult.error("当前用户信息不存在,无法上传!");
}
//根据被护理人的id查询基本信息
NursePersonAppLoginsUserVO nursePersonUserId = nursePersonAppLoginMapper.getNursePersonUserId(userId);
if (Objects.isNull(nursePersonUserId)) {
return AjaxResult.error("当前用户信息不存在,无法上传!");
}
//原有用户头像地址
String userIdAvatar = StringUtils.isBlank(nursePersonUserId.getAvatar()) ? "" : nursePersonUserId.getAvatar();
//定义文件上传路径
String fileName = FileUploadUtils.uploadPictureUrlPath(XinELuConfig.getProfile() + xinYiLuConfig.getNurseStationAppPersonUrl(), multipartFile, MimeTypeUtils.IMAGE_EXTENSION);
if (StringUtils.isBlank(fileName)) {
throw new Exception("头像上传失败,请联系管理员!");
}
if (nursePersonAppLoginService.updateHeadAvatarHeadUserId(userId, fileName, userIdAvatar)) {
AjaxResult ajax = AjaxResult.success();
ajax.put("imgUrl", fileName);
return ajax;
}
return AjaxResult.success("上传成功!");
}
/**
* 查询护理站列表
*
* @param nurseStation 护理站列表
* @return com.xinyilu.base.domain.nursestation.NurseStation
**/
@Override
public List<PersonNurseStationAppVO> getPersonNurseStationLists(PersonNurseStationAppVO nurseStation) {
return nursePersonAppLoginMapper.getPersonNurseStationLists(nurseStation);
}
/**
* 生成BCryptPasswordEncoder密码
*
* @param getStationPersonPassword 密码
* @return 加密字符串
*/
private String md5(String getStationPersonPassword) {
getStationPersonPassword = Md5Utils.hash((getStationPersonPassword));
return getStationPersonPassword;
}
}

View File

@ -0,0 +1,79 @@
package com.xinelu.applet.vo.nursepersonapplogin;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.custominterface.Insert;
import lombok.Data;
import net.sf.jsqlparser.statement.update.Update;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 护理站人员注册信息类
*
* @author ljh
* @version 1.0
* Create by 2022/10/28 11:26
*/
@Data
public class NurseAppLoginSysUserVO implements Serializable {
private static final long serialVersionUID = 3253830606920513883L;
/**
* 用户账号
*/
private Long userId;
/**
* 用户账号 用户昵称
*/
private String userName;
/**
* 用户姓名
*/
@NotBlank(message = "用户姓名不能为空!", groups = {Insert.class, Update.class})
private String nickName;
/**
* 手机号码
*/
@Length(max = 11, message = "手机号码不能超过11位", groups = {Insert.class, Update.class})
private String phone;
/**
* 手机号码
*/
@Length(max = 11, message = "手机号码不能超过11位", groups = {Insert.class, Update.class})
@NotBlank(message = "手机号码不能为空!", groups = {Insert.class, Update.class})
private String phonenumber;
/**
* 登录密码
*/
@Length(min = 6, max = 10, message = "密码不能低于6位并不能超过10位", groups = {Insert.class})
@NotBlank(message = "密码不能为空!", groups = {Insert.class, Update.class})
private String stationPersonPassword;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 选择护理站
*/
@NotBlank(message = "选择护理站不能为空!", groups = {Insert.class, Update.class})
private String nurseStationIds;
/**
* 头像地址
*/
private String avatar;
/**
* 护理站人员表id
*/
private Long nurseStationPersonId;
}

View File

@ -0,0 +1,83 @@
package com.xinelu.applet.vo.nursepersonapplogin;
import com.xinelu.manage.vo.nursestation.NurseStationSysUserVO;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author ljh
* @version 1.0
* Create by 2022/10/28 14:15
*/
@Data
public class NursePersonAppLoginsUserVO implements Serializable {
private static final long serialVersionUID = 8144014821044310693L;
/**
* 用户账号
*/
private Long userId;
/**
* 护理站id
*/
private Long nurseStationId;
/**
* 手机号码
*/
private String phonenumber;
/**
* 用户账号
*/
private String userName;
/**
* 用户昵称 用户姓名
*/
private String nickName;
/**
* 手机号码
*/
private String phone;
/**
* 用户账号
*/
private String nurseStationIds;
/**
* 用户昵称 用户姓名
*/
private String nursePersonName;
/**
* 头像地址
*/
private String avatar;
/**
* 密码
*/
private String stationPersonPassword;
/**
* 护理人员id
*/
private Long nursePersonId;
/**
* 护理站信息集合
*/
List<NurseStationSysUserVO> nurseStationSysUserVOList;
/**
* 角色标识
*/
private String personRoleLoginFlag;
}

View File

@ -0,0 +1,73 @@
package com.xinelu.applet.vo.nursepersonapplogin;
import com.xinelu.manage.domain.nursestationperson.NurseStationPerson;
import com.xinelu.manage.domain.nursestationpersoncertificate.NurseStationPersonCertificate;
import com.xinelu.manage.vo.nursestation.NurseStationSysUserVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.Valid;
import java.io.Serializable;
import java.util.List;
/**
* @author ljh
* @version 1.0
* Create by 2023/3/30 17:38
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class NurseStationPersonUserVO extends NurseStationPerson implements Serializable {
private static final long serialVersionUID = -7948807351529053663L;
/**
* 用户账号
*/
private Long userId;
/**
* 手机号码
*/
private String phonenumber;
/**
* 用户名称
*/
private String userName;
/**
* 用户昵称 用户姓名
*/
private String nickName;
/**
* 用户账号
*/
private String nurseStationIds;
/**
* 头像地址
*/
private String avatar;
/**
* 护理人员id
*/
private Long nursePersonId;
/**
* 护理站信息集合
*/
@Valid
List<NurseStationSysUserVO> nurseStationSysUserVOList;
/**
* 护理员证书资质信息表集合
**/
@Valid
private List<NurseStationPersonCertificate> nurseStationPersonCertificateList;
/**
* 年龄
*/
private Long age;
}

View File

@ -0,0 +1,126 @@
package com.xinelu.applet.vo.nursepersonapplogin;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
/**
* 任务详情输出VO
*
* @author zhangheng
* @date 2022-11-1
*/
@Data
public class OrderAndItemVO implements Serializable {
private static final long serialVersionUID = 5316795619405528012L;
/**
* 预约订单明细表主键id
*/
private Long id;
/**
* 护理站id
*/
private Long stationId;
/**
* 护理项目id
*/
private Long stationItemId;
/**
* 护理项目订单id
*/
private Long stationItemPriceId;
/**
* 预约订单编号
*/
private String orderNo;
/**
* 订单数量
*/
private Long orderCount;
/**
* 服务日期格式yyyy-MM-dd
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate serviceDate;
/**
* 服务开始时间格式HH:mm
*/
@JsonFormat(pattern = "HH:mm:ss")
private LocalTime serviceStartTime;
/**
* 服务结束时间格式HH:mm
*/
@JsonFormat(pattern = "HH:mm:ss")
private LocalTime serviceEndTime;
/**
* 预约订单状态代付款WAIT_PAY待派单WAIT_DISPATCH未完成NOT_FINISH服务完成COMPLETE
*/
private String orderStatus;
/**
* 预约总价格单位
*/
private BigDecimal totalPrice;
/**
* 护理项目名称
*/
private String nurseItemName;
/**
* 护理项目服务时长和单位
*/
private String itemServeDurationUnit;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 护理项目图片地址
*/
private String itemPictureUrl;
/**
* 护理员id
*/
private Long nursePersonId;
/**
* 已完成和已评价订单状态值集合
*/
private List<String> orderStatusList;
/**
* 服务地址
*/
private String serviceAddress;
/**
* 订单佣金金额
*/
private BigDecimal orderCommissionAmount;
/**
* 订单类型院内陪护COMPANION_IN_HOSPITAL其它OTHER',
*/
private String orderType;
}

View File

@ -0,0 +1,28 @@
package com.xinelu.applet.vo.nursepersonapplogin;
import lombok.Data;
import java.io.Serializable;
/**
* @author ljh
* @version 1.0
* Create by 2023/3/30 9:43
*/
@Data
public class OrderByNursePersonVO implements Serializable {
private static final long serialVersionUID = -3973147428969028472L;
/**
* 未完成数量
**/
private Long notFinishCount;
/**
* 已完成数量
**/
private Long completeCount;
private String orderStatus;
}

View File

@ -0,0 +1,157 @@
package com.xinelu.applet.vo.nursepersonapplogin;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalTime;
/**
* 任务详情输出VO
*
* @author zhangheng
* @date 2022-10-28
*/
@Data
public class OrderDetailsAndPatientVO implements Serializable {
private static final long serialVersionUID = 5800983517650859147L;
/**
* 订单主表主键id
*/
private Long appointmentOrderId;
/**
* 订单明细主键id
*/
private Long orderDetailsId;
/**
* 预约订单编号
*/
private String orderNo;
/**
* 订单数量
*/
private Long orderCount;
/**
* 服务地址
*/
private String serviceAddress;
/**
* 服务日期格式yyyy-MM-dd
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate serviceDate;
/**
* 服务开始时间格式HH:mm
*/
@JsonFormat(pattern = "HH:mm:ss")
private LocalTime serviceStartTime;
/**
* 预约总价格单位
*/
private BigDecimal totalPrice;
/**
* 护理项目名称
*/
private String nurseItemName;
/**
* 护理项目服务时长和单位
*/
private String itemServeDurationUnit;
/**
* 用户姓名
*/
private String patientName;
/**
* 手机号码
*/
private String phone;
/**
* 人员地址
*/
private String address;
/**
* 出生日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate birthDate;
/**
* 年龄
*/
private Long age;
/**
* 住址经度
*/
private String homeLongitude;
/**
* 住址纬度
*/
private String homeLatitude;
/**
* 护理项目图片地址
*/
private String itemPictureUrl;
/**
* 预约订单状态待派单WAIT_DISPATCH未完成NOT_FINISH服务完成COMPLETE
*/
private String orderStatus;
/**
* 服务到岗图片路径
*/
private String onDutyPictureUrl;
/**
* 服务进行中上传视频存放路径
*/
private String serviceProgressVideoUrl;
/**
* 服务结束照片存放路径
*/
private String serviceEndPictureUrl;
/**
* 用户签名确认图片存放路径
*/
private String userSignaturePictureUrl;
/**
* 失能情况NOT_DISABLED未失能DISABLED已失能
*/
private String disablingCondition;
/**
* 失能原因
*/
private String disablingReason;
/**
* 订单佣金金额
*/
private BigDecimal orderCommissionAmount;
/**
* 健康状态
*/
private String diseaseName;
}

View File

@ -0,0 +1,77 @@
package com.xinelu.applet.vo.nursepersonapplogin;
import lombok.Data;
import java.io.Serializable;
/**
* @author ljh
* @version 1.0
* Create by 2022/11/2 11:42
*/
@Data
public class PersonNurseStationAppVO implements Serializable {
private static final long serialVersionUID = -231488908366920143L;
/**
* 主键id
*/
private Long id;
/**
* 所属区域编码
*/
private String areaCode;
/**
* 创建人id
*/
private Long userId;
/**
* 护理站编号
*/
private String nurseStationCode;
/**
* 护理站名称
*/
private String nurseStationName;
/**
* 护理类型多个用逗号隔开
*/
private String nurseStationType;
/**
* 护理站经纬横坐标
*/
private String longitude;
/**
* 护理站纬度纵坐标
*/
private String latitude;
/**
* 联系电话
*/
private String phone;
/**
* 护理站地址
*/
private String address;
/**
* 负责人
*/
private String dutyPerson;
/**
* 负责人联系电话
*/
private String dutyPhone;
}

View File

@ -0,0 +1,418 @@
<?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.nursepersonapplogin.NursePersonAppLoginMapper">
<resultMap type="com.xinelu.applet.vo.nursepersonapplogin.NurseStationPersonUserVO" id="NursePersonVO">
<result property="id" column="id"/>
<result property="nurseStationIds" column="nurse_station_ids"/>
<result property="departmentCode" column="department_code"/>
<result property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<result property="nickName" column="nick_name"/>
<result property="phonenumber" column="phonenumber"/>
<result property="avatar" column="avatar"/>
<result property="nursePersonCode" column="nurse_person_code"/>
<result property="nursePersonName" column="nurse_person_name"/>
<result property="nursePersonType" column="nurse_person_type"/>
<result property="sex" column="sex"/>
<result property="phone" column="phone"/>
<result property="address" column="address"/>
<result property="birthDate" column="birth_date"/>
<result property="openid" column="openid"/>
<result property="unionid" column="unionid"/>
<result property="evaluateStarCount" column="evaluate_star_count"/>
<result property="positionalTitleLevel" column="positional_title_level"/>
<result property="geniusItem" column="genius_item"/>
<result property="totalRevenueAmount" column="total_revenue_amount"/>
<result property="workStatus" column="work_status"/>
<result property="modifyCheckStatus" column="modify_check_status"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<collection property="nurseStationPersonCertificateList" javaType="java.util.List"
resultMap="NursePersonCertificateInfoById"/>
</resultMap>
<resultMap type="NurseStationPersonCertificate" id="NursePersonCertificateInfoById">
<result property="id" column="certificateId"/>
<result property="certificateName" column="certificate_name"/>
<result property="certificateUrl" column="certificate_url"/>
<result property="sort" column="sort"/>
</resultMap>
<select id="selectOrderByNursePersonCount"
resultType="com.xinelu.applet.vo.nursepersonapplogin.OrderByNursePersonVO">
SELECT
order_status
FROM appointment_order
<where>
<if test="nurseStationPersonId != null">
nurse_station_person_id = #{nurseStationPersonId}
</if>
<if test="orderStatusList != null and orderStatusList != ''">
AND order_status in
<foreach collection="orderStatusList" item="orderStatusList" open="(" separator="," close=")">
#{orderStatusList}
</foreach>
</if>
and del_flag = 0
</where>
</select>
<select id="selectOrderByNursePersonId"
resultType="com.xinelu.applet.vo.nursepersonapplogin.OrderAndItemVO">
SELECT
ao.id,
aod.order_no,
aod.order_count,
aod.order_status,
ao.order_commission_amount,
aod.appointment_status,
aod.service_date,
aod.service_start_time,
aod.service_end_time,
aod.total_price,
aod.nurse_item_name,
aod.item_serve_duration_unit,
aod.create_time,
aod.service_address,
nsi.item_picture_url
FROM
appointment_order ao
LEFT JOIN appointment_order_details aod ON aod.order_no = ao.order_no
LEFT JOIN nurse_station_item nsi ON nsi.id = aod.nurse_station_item_id
<where>
<if test="nursePersonId != null">
ao.nurse_station_person_id = #{nursePersonId}
</if>
<!-- 已完成订单状态和未完成的订单状态 -->
<if test="orderStatusList != null and orderStatusList != ''">
AND ao.order_status in
<foreach collection="orderStatusList" item="orderStatus" open="(" separator="," close=")">
#{orderStatus}
</foreach>
</if>
<if test="nurseItemName != null and nurseItemName != ''">
AND aod.nurse_item_name like concat('%', #{nurseItemName}, '%')
</if>
and ao.del_flag = 0
and aod.del_flag = 0
</where>
ORDER BY aod.order_status DESC
</select>
<select id="getOrderDetailsAndPatientByDetailsId"
resultType="com.xinelu.applet.vo.nursepersonapplogin.OrderDetailsAndPatientVO">
SELECT
ao.id appointmentOrderId,
aod.id orderDetailsId,
aod.order_no,
aod.service_address,
aod.order_count,
aod.service_date,
aod.service_start_time,
aod.service_end_time,
aod.total_price,
aod.nurse_item_name,
aod.item_serve_duration_unit,
aod.order_status,
ao.order_commission_amount,
nsi.item_picture_url,
pi.patient_name,
pi.birth_date,
pi.phone,
IFNULL(pi.address, '') address,
pi.home_longitude,
pi.home_latitude,
aod.disabling_condition,
aod.disabling_reason,
aod.on_duty_picture_url,
aod.service_end_picture_url,
aod.user_signature_picture_url,
aod.service_progress_video_url
FROM appointment_order ao
LEFT JOIN appointment_order_details aod ON aod.order_no = ao.order_no
LEFT JOIN patient_info pi ON pi.id = ao.patient_id
LEFT JOIN nurse_station_item nsi ON nsi.id = aod.nurse_station_item_id
<where>
<if test="orderNo != null and orderNo != ''">
AND ao.order_no = #{orderNo}
</if>
and aod.del_flag = 0
and ao.del_flag = 0
</where>
</select>
<update id="updateAppointmentOrderByOrderNo">
UPDATE appointment_order a,
appointment_order_details b
SET a.order_status = #{orderStatus},
a.task_return_reason = #{taskReturnReason},
a.nurse_station_person_id = null,
b.order_status = #{orderStatus},
a.update_time = now(),
b.update_time = now()
WHERE
a.order_no = b.order_no
AND a.del_flag = 0
AND a.order_status &lt;&gt; #{orderStatus}
AND b.order_status &lt;&gt; #{orderStatus}
AND a.order_no = #{orderNo}
</update>
<select id="getSysUserPasswordByPhone" resultType="int">
SELECT
count( 1 )
FROM
sys_user su
LEFT JOIN nurse_station_person nsp ON su.phonenumber = nsp.phone
<where>
<if test="phonenumber != null and phonenumber != ''">
and su.phonenumber = #{phonenumber}
</if>
<if test="stationPersonPassword != null and stationPersonPassword != ''">
and su.station_person_password = #{stationPersonPassword}
</if>
and su.del_flag = 0
</where>
</select>
<insert id="insertNurseAppLoginSysUser"
parameterType="com.xinelu.applet.vo.nursepersonapplogin.NurseAppLoginSysUserVO"
useGeneratedKeys="true" keyProperty="userId">
insert into sys_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userName != null ">user_name,
</if>
<if test="nickName != null ">nick_name,
</if>
<if test="phonenumber != null ">phonenumber,
</if>
<if test="stationPersonPassword != null">station_person_password,
</if>
<if test="nurseStationIds != null">nurse_station_ids,
</if>
<if test="nurseStationPersonId != null">nurse_station_person_id,
</if>
<if test="createTime != null">create_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userName != null ">#{userName},
</if>
<if test="nickName != null ">#{nickName},
</if>
<if test="phonenumber != null ">#{phonenumber},
</if>
<if test="stationPersonPassword != null ">#{stationPersonPassword},
</if>
<if test="nurseStationPersonId != null ">#{nurseStationPersonId},
</if>
<if test="nurseStationIds != null ">#{nurseStationIds},
</if>
<if test="createTime != null">#{createTime},
</if>
</trim>
</insert>
<update id="updateUserPassWord" parameterType="SysUser">
update sys_user
<trim prefix="SET" suffixOverrides=",">
<if test="userName != null ">user_name = #{userName},
</if>
<if test="nickName != null ">nick_name = #{nickName},
</if>
<if test="phonenumber != null ">phonenumber = #{phonenumber},
</if>
<if test="stationPersonPassword != null ">station_person_password = #{stationPersonPassword},
</if>
<if test="avatar != null ">avatar = #{avatar},
</if>
</trim>
where user_id = #{userId}
</update>
<select id="getUserAndPerson"
parameterType="com.xinelu.applet.vo.nursepersonapplogin.NursePersonAppLoginsUserVO"
resultType="com.xinelu.applet.vo.nursepersonapplogin.NursePersonAppLoginsUserVO">
SELECT
su.user_id,
su.user_name,
su.nick_name,
su.phonenumber,
su.nurse_station_ids,
su.station_person_password,
nsp.id nursePersonId,
nsp.nurse_station_id,
nsp.nurse_person_name,
nsp.phone
FROM
sys_user su
LEFT JOIN nurse_station_person nsp ON su.phonenumber = nsp.phone
<where>
<if test="phonenumber != null and phonenumber != ''">
and su.phonenumber = #{phonenumber}
</if>
<if test="stationPersonPassword != null and stationPersonPassword != ''">
and su.station_person_password = #{stationPersonPassword}
</if>
and su.del_flag = 0
</where>
</select>
<select id="getFromPhoneUserId" resultType="Long">
select
user_id
from sys_user
<where>
<if test="phonenumber != null and phonenumber != ''">
phonenumber = #{phonenumber}
</if>
and del_flag = 0
</where>
</select>
<select id="getNursePersonPersonalInformation"
parameterType="com.xinelu.applet.vo.nursepersonapplogin.NursePersonAppLoginsUserVO"
resultType="com.xinelu.applet.vo.nursepersonapplogin.NursePersonAppLoginsUserVO">
SELECT
su.user_id,
su.user_name,
su.nick_name,
su.phonenumber,
su.avatar,
su.nurse_station_ids
FROM
sys_user su
<where>
<if test="phonenumber != null and phonenumber != ''">
and su.phonenumber = #{phonenumber}
</if>
<if test="stationPersonPassword != null and stationPersonPassword != ''">
and su.station_person_password = #{stationPersonPassword}
</if>
and su.del_flag = 0
</where>
</select>
<update id="updateHeadAvatarHeadUserId" parameterType="SysUser">
update sys_user
set avatar = #{avatar}
where user_id = #{userId}
</update>
<select id="getPersonNurseStationLists"
parameterType="com.xinelu.applet.vo.nursepersonapplogin.PersonNurseStationAppVO"
resultType="com.xinelu.applet.vo.nursepersonapplogin.PersonNurseStationAppVO">
select id,
area_code,
user_id,
nurse_station_code,
nurse_station_name,
nurse_station_type,
longitude,
latitude,
phone,
address,
duty_person,
duty_phone,
create_by,
create_time,
update_by,
update_time
from nurse_station
<where>
<if test="areaCode != null ">
and area_code = #{areaCode}
</if>
<if test="id != null ">
and id = #{id}
</if>
<if test="userId != null ">
and user_id = #{userId}
</if>
<if test="nurseStationCode != null and nurseStationCode != ''">
and nurse_station_code like concat('%', #{nurseStationCode}, '%')
</if>
<if test="nurseStationName != null and nurseStationName != ''">
and nurse_station_name like concat('%', #{nurseStationName}, '%')
</if>
<if test="nurseStationType != null and nurseStationType != ''">
and find_in_set(#{nurseStationType},nurse_station_type)
</if>
</where>
</select>
<select id="getNursePersonUserId" parameterType="Long"
resultType="com.xinelu.applet.vo.nursepersonapplogin.NursePersonAppLoginsUserVO">
SELECT
su.user_id,
su.user_name,
su.nick_name,
su.phonenumber,
su.avatar,
su.nurse_station_ids
FROM
sys_user su
<where>
<if test="userId != null ">
and su.user_id = #{userId}
</if>
and su.del_flag = 0
</where>
</select>
<select id="getNurseStationPersonById"
parameterType="integer"
resultMap="NursePersonVO">
SELECT
su.user_id,
su.user_name,
su.nick_name,
su.phonenumber,
su.avatar,
su.nurse_station_ids,
nsp.id nursePersonId,
nsp.department_code,
nsp.nurse_person_name,
nsp.nurse_person_type,
nsp.sex,
nsp.phone,
nsp.address,
nsp.birth_date,
nsp.openid,
nsp.unionid,
nsp.evaluate_star_count,
nsp.positional_title_level,
nsp.genius_item,
nsp.total_revenue_amount,
nsp.work_status,
nsp.modify_check_status,
nsp.create_by,
nsp.create_time,
nsp.update_by,
nsp.update_time,
nspc.id certificateId,
nspc.certificate_name,
nspc.certificate_url,
nspc.sort
FROM
nurse_station_person nsp
LEFT JOIN sys_user su ON su.phonenumber = nsp.phone
LEFT JOIN nurse_station_person_certificate nspc ON nspc.nurse_station_person_id = nsp.id
<where>
<if test="nursePersonId != null and nursePersonId != ''">
and nsp.id = #{nursePersonId}
</if>
and su.del_flag = 0
</where>
ORDER BY nspc.sort
</select>
</mapper>

View File

@ -0,0 +1,81 @@
package com.xinelu.manage.domain.nursestationpersonrevenue;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.annotation.Excel;
import com.xinelu.common.core.domain.BaseDomain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 护理员订单佣金收益信息对象 nurse_station_person_revenue
*
* @author xinyilu
* @date 2023-03-29
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "护理员订单佣金收益信息对象", description = "nurse_station_person_revenue")
public class NurseStationPersonRevenue extends BaseDomain implements Serializable {
private static final long serialVersionUID = -5400211001451444886L;
/**
* 主键id
*/
private Long id;
/**
* 护理站人员表id
*/
@ApiModelProperty(value = "护理站人员表id")
@Excel(name = "护理站人员表id")
private Long nurseStationPersonId;
/**
* 预约订单表id
*/
@ApiModelProperty(value = "预约订单表id")
@Excel(name = "预约订单表id")
private Long appointmentOrderId;
/**
* 收益金额
*/
@ApiModelProperty(value = "收益金额")
@Excel(name = "收益金额")
private BigDecimal revenueAmount;
/**
* 预约订单完成时间
*/
@ApiModelProperty(value = "预约订单完成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "预约订单完成时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime finishOrderTime;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("nurseStationPersonId", getNurseStationPersonId())
.append("appointmentOrderId", getAppointmentOrderId())
.append("revenueAmount", getRevenueAmount())
.append("finishOrderTime", getFinishOrderTime())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -0,0 +1,89 @@
package com.xinelu.manage.mapper.nursestationpersonrevenue;
import com.xinelu.manage.domain.nursestationpersonrevenue.NurseStationPersonRevenue;
import com.xinelu.manage.vo.nursestationpersonrevenue.NurseStationPersonRevenueVO;
import com.xinelu.manage.vo.nursestationpersonrevenue.PersonRevenueCountVO;
import com.xinelu.manage.vo.nursestationpersonrevenue.RevenueTimeDTO;
import java.util.List;
/**
* 护理员订单佣金收益信息Mapper接口
*
* @author xinyilu
* @date 2023-03-29
*/
public interface NurseStationPersonRevenueMapper {
/**
* 查询护理员订单佣金收益信息
*
* @param id 护理员订单佣金收益信息主键
* @return 护理员订单佣金收益信息
*/
NurseStationPersonRevenue selectNurseStationPersonRevenueById(Long id);
/**
* 查询护理员订单佣金收益信息列表
*
* @param nurseStationPersonRevenue 护理员订单佣金收益信息
* @return 护理员订单佣金收益信息集合
*/
List<NurseStationPersonRevenue> selectNurseStationPersonRevenueList(NurseStationPersonRevenue nurseStationPersonRevenue);
/**
* 新增护理员订单佣金收益信息
*
* @param nurseStationPersonRevenue 护理员订单佣金收益信息
* @return 结果
*/
int insertNurseStationPersonRevenue(NurseStationPersonRevenue nurseStationPersonRevenue);
/**
* 修改护理员订单佣金收益信息
*
* @param nurseStationPersonRevenue 护理员订单佣金收益信息
* @return 结果
*/
int updateNurseStationPersonRevenue(NurseStationPersonRevenue nurseStationPersonRevenue);
/**
* 删除护理员订单佣金收益信息
*
* @param id 护理员订单佣金收益信息主键
* @return 结果
*/
int deleteNurseStationPersonRevenueById(Long id);
/**
* 批量删除护理员订单佣金收益信息
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
int deleteNurseStationPersonRevenueByIds(Long[] ids);
/**
* 护理员收益统计
*
* @param revenueTime 时间
* @return NurseStationPersonRevenueVO
*/
List<PersonRevenueCountVO> selectCount(RevenueTimeDTO revenueTime);
/**
* 护理员收益统计
*
* @param revenueTime 用户信息及时间
* @return NurseStationPersonRevenueVO
*/
PersonRevenueCountVO selectRevenueAmountById(RevenueTimeDTO revenueTime);
/**
* 查询收益明细
*
* @param revenueTime 护理员信息
* @return NurseStationPersonRevenueVO
*/
List<NurseStationPersonRevenueVO> selectRevenueDetails(RevenueTimeDTO revenueTime);
}

View File

@ -0,0 +1,86 @@
package com.xinelu.manage.mapper.patientdiseaseinfo;
import com.xinelu.manage.domain.patientdiseaseinfo.PatientDiseaseInfo;
import java.util.List;
/**
* 患者疾病关系Mapper接口
*
* @author 纪寒
* @date 2022-09-02
*/
public interface PatientDiseaseInfoMapper {
/**
* 查询患者疾病关系
*
* @param id 患者疾病关系主键
* @return 患者疾病关系
*/
PatientDiseaseInfo selectPatientDiseaseInfoById(Long id);
/**
* 查询患者疾病关系列表
*
* @param patientDiseaseInfo 患者疾病关系
* @return 患者疾病关系集合
*/
List<PatientDiseaseInfo> selectPatientDiseaseInfoList(PatientDiseaseInfo patientDiseaseInfo);
/**
* 查询患者疾病关系列表
*
* @param patientId 患者疾病关系
* @return 患者疾病关系集合
*/
List<PatientDiseaseInfo> selectPatientDiseasePatientId(Long patientId);
/**
* 新增患者疾病关系
*
* @param patientDiseaseInfo 患者疾病关系
* @return 结果
*/
int insertPatientDiseaseInfo(PatientDiseaseInfo patientDiseaseInfo);
/**
* 修改患者疾病关系
*
* @param patientDiseaseInfo 患者疾病关系
* @return 结果
*/
int updatePatientDiseaseInfo(PatientDiseaseInfo patientDiseaseInfo);
/**
* 删除患者疾病关系
*
* @param id 患者疾病关系主键
* @return 结果
*/
int deletePatientDiseaseInfoById(Long id);
/**
* 批量删除患者疾病关系
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
int deletePatientDiseaseInfoByIds(Long[] ids);
/**
* 批量新增护理人疾病信息
*
* @param patientDiseaseInfoList 信息集合
* @return 新增数量
*/
int insertBatchPatientDiseaseInfo(List<PatientDiseaseInfo> patientDiseaseInfoList);
/**
* 根据订单编号查询会员健康状况
*
* @param orderNo 订单编号
* @return PatientDiseaseInfo
*/
List<PatientDiseaseInfo> selectPatientDiseaseInfoByOrderNo(String orderNo);
}

View File

@ -0,0 +1,67 @@
package com.xinelu.manage.vo.nursestationpersonrevenue;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.manage.domain.nursestationpersonrevenue.NurseStationPersonRevenue;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
/**
* 收益明细
*
* @author zhangheng
* @date 2023-0330
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class NurseStationPersonRevenueVO extends NurseStationPersonRevenue implements Serializable {
private static final long serialVersionUID = -2454392424237460279L;
/**
* 护理站人员id
*/
private Long nurseStationPersonRevenueId;
/**
* 护理项目名称
*/
private String nurseItemName;
/**
* 服务日期格式yyyy-MM-dd
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate serviceDate;
/**
* 服务开始时间格式HH:mm
*/
@JsonFormat(pattern = "HH:mm:ss")
private LocalTime serviceStartTime;
/**
* 服务结束时间格式HH:mm
*/
@JsonFormat(pattern = "HH:mm:ss")
private LocalTime serviceEndTime;
/**
* 预约订单完成时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime finishOrderTime;
/**
* 预约订单主表id
*/
private Long appointmentOrderId;
/**
* 预约订单编号
*/
private String orderNo;
}

View File

@ -0,0 +1,62 @@
package com.xinelu.manage.vo.nursestationpersonrevenue;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 收益统计
*
* @author zhangheng
* @date 2023-0330
*/
@Data
public class PersonRevenueCountVO implements Serializable {
private static final long serialVersionUID = -2454392424237460279L;
/**
* 护理员id
*/
private Long nurseStationPersonId;
/**
* 护理员名称
*/
private String nursePersonName;
/**
* 所属护理站名称
*/
private String nurseStationName;
/**
* 订单总数
*/
private Long orderCount;
/**
* 订单总收益
*/
private BigDecimal orderTotalPrice;
/**
* 本月订单总数
*/
private Long monthOrderCount;
/**
* 本月订单总收益
*/
private BigDecimal monthOrderTotalPrice;
/**
* 今日订单总数
*/
private Long todayOrderCount;
/**
* 今日订单收益
*/
private BigDecimal todayOrderPrice;
}

View File

@ -0,0 +1,75 @@
package com.xinelu.manage.vo.nursestationpersonrevenue;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 收益统计传入vo
*
* @author zhangheng
* @date 2023-0331
*/
@Data
public class RevenueTimeDTO {
/**
* 护理站id
*/
private Long nurseStationId;
/**
* 护理员id
*/
private Long nurseStationPersonId;
/**
* 开始时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
/**
* 结束时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
/**
* 现在时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime nowTime;
/**
* 月开始时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate monthStartTime;
/**
* 月结束时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate monthEndTime;
/**
* 月份时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate monthTime;
/**
* 月开始时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime monthStartDateTime;
/**
* 月结束时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime monthEndDateTime;
}

View File

@ -0,0 +1,237 @@
<?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.manage.mapper.nursestationpersonrevenue.NurseStationPersonRevenueMapper">
<resultMap type="NurseStationPersonRevenue" id="NurseStationPersonRevenueResult">
<result property="id" column="id"/>
<result property="nurseStationPersonId" column="nurse_station_person_id"/>
<result property="appointmentOrderId" column="appointment_order_id"/>
<result property="revenueAmount" column="revenue_amount"/>
<result property="finishOrderTime" column="finish_order_time"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<sql id="selectNurseStationPersonRevenueVo">
select id,
nurse_station_person_id,
appointment_order_id,
revenue_amount,
finish_order_time,
create_by,
create_time,
update_by,
update_time
from nurse_station_person_revenue
</sql>
<select id="selectNurseStationPersonRevenueList" parameterType="NurseStationPersonRevenue"
resultMap="NurseStationPersonRevenueResult">
<include refid="selectNurseStationPersonRevenueVo"/>
<where>
<if test="nurseStationPersonId != null ">
and nurse_station_person_id = #{nurseStationPersonId}
</if>
<if test="appointmentOrderId != null ">
and appointment_order_id = #{appointmentOrderId}
</if>
<if test="revenueAmount != null ">
and revenue_amount = #{revenueAmount}
</if>
<if test="finishOrderTime != null ">
and finish_order_time = #{finishOrderTime}
</if>
</where>
</select>
<select id="selectNurseStationPersonRevenueById" parameterType="Long"
resultMap="NurseStationPersonRevenueResult">
<include refid="selectNurseStationPersonRevenueVo"/>
where id = #{id}
</select>
<insert id="insertNurseStationPersonRevenue" parameterType="NurseStationPersonRevenue" useGeneratedKeys="true"
keyProperty="id">
insert into nurse_station_person_revenue
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="nurseStationPersonId != null">nurse_station_person_id,
</if>
<if test="appointmentOrderId != null">appointment_order_id,
</if>
<if test="revenueAmount != null">revenue_amount,
</if>
<if test="finishOrderTime != null">finish_order_time,
</if>
<if test="createBy != null">create_by,
</if>
<if test="createTime != null">create_time,
</if>
<if test="updateBy != null">update_by,
</if>
<if test="updateTime != null">update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="nurseStationPersonId != null">#{nurseStationPersonId},
</if>
<if test="appointmentOrderId != null">#{appointmentOrderId},
</if>
<if test="revenueAmount != null">#{revenueAmount},
</if>
<if test="finishOrderTime != null">#{finishOrderTime},
</if>
<if test="createBy != null">#{createBy},
</if>
<if test="createTime != null">#{createTime},
</if>
<if test="updateBy != null">#{updateBy},
</if>
<if test="updateTime != null">#{updateTime},
</if>
</trim>
</insert>
<update id="updateNurseStationPersonRevenue" parameterType="NurseStationPersonRevenue">
update nurse_station_person_revenue
<trim prefix="SET" suffixOverrides=",">
<if test="nurseStationPersonId != null">nurse_station_person_id =
#{nurseStationPersonId},
</if>
<if test="appointmentOrderId != null">appointment_order_id =
#{appointmentOrderId},
</if>
<if test="revenueAmount != null">revenue_amount =
#{revenueAmount},
</if>
<if test="finishOrderTime != null">finish_order_time =
#{finishOrderTime},
</if>
<if test="createBy != null">create_by =
#{createBy},
</if>
<if test="createTime != null">create_time =
#{createTime},
</if>
<if test="updateBy != null">update_by =
#{updateBy},
</if>
<if test="updateTime != null">update_time =
#{updateTime},
</if>
</trim>
where id = #{id}
</update>
<delete id="deleteNurseStationPersonRevenueById" parameterType="Long">
delete
from nurse_station_person_revenue
where id = #{id}
</delete>
<delete id="deleteNurseStationPersonRevenueByIds" parameterType="String">
delete from nurse_station_person_revenue where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="selectCount"
resultType="com.xinelu.manage.vo.nursestationpersonrevenue.PersonRevenueCountVO">
SELECT nsp.id nurseStationPersonId,
nsp.nurse_person_name,
ns.nurse_station_name,
(select count(1) FROM nurse_station_person_revenue WHERE nurse_station_person_id = nsp.id) orderCount,
(select IFNULL(SUM(revenue_amount), 0.00)
FROM nurse_station_person_revenue
where nurse_station_person_id = nsp.id) orderTotalPrice,
(select count(1)
FROM nurse_station_person_revenue
WHERE nurse_station_person_id = nsp.id
and finish_order_time &gt;= #{monthStartDateTime}
and finish_order_time &lt;= #{monthEndDateTime}) monthOrderCount,
(select IFNULL(SUM(revenue_amount), 0.00)
FROM nurse_station_person_revenue
where nurse_station_person_id = nsp.id
and finish_order_time &gt;= #{monthStartDateTime}
and finish_order_time &lt;= #{monthEndDateTime}) monthOrderTotalPrice,
(select count(1)
FROM nurse_station_person_revenue
WHERE nurse_station_person_id = nsp.id
and finish_order_time &gt;= #{startTime}
and finish_order_time &lt;= #{nowTime}) todayOrderCount,
(select IFNULL(SUM(revenue_amount), 0.00)
FROM nurse_station_person_revenue
where nurse_station_person_id = nsp.id
and finish_order_time &gt;= #{startTime}
and finish_order_time &lt;= #{nowTime}) todayOrderPrice
FROM nurse_station_person nsp
LEFT JOIN nurse_station_person_revenue nspr ON nsp.id = nspr.nurse_station_person_id
LEFT JOIN nurse_station ns ON ns.id = nsp.nurse_station_id
<where>
<if test="nurseStationPersonId != null ">
nsp.id = #{nurseStationPersonId}
</if>
<if test="nurseStationId != null ">
AND ns.id = #{nurseStationId}
</if>
</where>
GROUP BY nsp.id
</select>
<select id="selectRevenueAmountById"
resultType="com.xinelu.manage.vo.nursestationpersonrevenue.PersonRevenueCountVO">
select nsp.id nurseStationPersonId,
nsp.nurse_person_name,
(select IFNULL(SUM(revenue_amount), 0.00)
FROM nurse_station_person_revenue
where nurse_station_person_id = nspr.nurse_station_person_id
and finish_order_time &gt;= #{startTime}
and finish_order_time &lt;= #{endTime}) todayOrderPrice,
(select IFNULL(SUM(revenue_amount), 0.00)
FROM nurse_station_person_revenue
where nurse_station_person_id = nspr.nurse_station_person_id
and finish_order_time &gt;= #{monthStartDateTime}
and finish_order_time &lt;= #{monthEndDateTime}) monthOrderTotalPrice,
IFNULL(SUM(nspr.revenue_amount), 0.00) orderTotalPrice
FROM nurse_station_person_revenue nspr
LEFT JOIN nurse_station_person nsp on nsp.id = nspr.nurse_station_person_id
<where>
<if test="nurseStationPersonId != null ">
nspr.nurse_station_person_id = #{nurseStationPersonId}
</if>
</where>
group by nspr.nurse_station_person_id
</select>
<select id="selectRevenueDetails"
resultType="com.xinelu.manage.vo.nursestationpersonrevenue.NurseStationPersonRevenueVO">
select
ao.order_no,
ao.id appointmentOrderId,
nspr.id nurseStationPersonRevenueId,
nspr.revenue_amount,
nspr.finish_order_time,
aod.nurse_item_name,
aod.service_date,
aod.service_start_time
FROM nurse_station_person_revenue nspr
LEFT JOIN appointment_order ao ON ao.id = nspr.appointment_order_id
LEFT JOIN appointment_order_details aod ON aod.order_no = ao.order_no
<where>
<if test="nurseStationPersonId != null ">
nspr.nurse_station_person_id = #{nurseStationPersonId}
</if>
<if test="monthStartDateTime != null">
and nspr.finish_order_time &gt;= #{monthStartDateTime}
</if>
<if test="monthEndDateTime != null">
and nspr.finish_order_time &lt;= #{monthEndDateTime}
</if>
</where>
ORDER BY nspr.finish_order_time Desc
</select>
</mapper>

View File

@ -0,0 +1,186 @@
<?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.manage.mapper.patientdiseaseinfo.PatientDiseaseInfoMapper">
<resultMap type="PatientDiseaseInfo" id="PatientDiseaseInfoResult">
<result property="id" column="id"/>
<result property="patientId" column="patient_id"/>
<result property="diseaseId" column="disease_id"/>
<result property="userId" column="user_id"/>
<result property="diseaseName" column="disease_name"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<sql id="selectPatientDiseaseInfoVo">
select id,
patient_id,
disease_id,
user_id,
disease_name,
create_by,
create_time,
update_by,
update_time
from patient_disease_info
</sql>
<select id="selectPatientDiseaseInfoList" parameterType="PatientDiseaseInfo" resultMap="PatientDiseaseInfoResult">
<include refid="selectPatientDiseaseInfoVo"/>
<where>
<if test="patientId != null ">
and patient_id = #{patientId}
</if>
<if test="diseaseId != null ">
and disease_id = #{diseaseId}
</if>
<if test="userId != null ">
and user_id = #{userId}
</if>
<if test="diseaseName != null ">
and disease_name = #{diseaseName}
</if>
</where>
</select>
<select id="selectPatientDiseasePatientId" parameterType="PatientDiseaseInfo" resultMap="PatientDiseaseInfoResult">
<include refid="selectPatientDiseaseInfoVo"/>
<where>
<if test="patientId != null ">
and patient_id = #{patientId}
</if>
<if test="diseaseId != null ">
and disease_id = #{diseaseId}
</if>
<if test="userId != null ">
and user_id = #{userId}
</if>
<if test="diseaseName != null ">
and disease_name = #{diseaseName}
</if>
</where>
</select>
<select id="selectPatientDiseaseInfoById" parameterType="Long"
resultMap="PatientDiseaseInfoResult">
<include refid="selectPatientDiseaseInfoVo"/>
where id = #{id}
</select>
<insert id="insertPatientDiseaseInfo" parameterType="PatientDiseaseInfo" useGeneratedKeys="true"
keyProperty="id">
insert into patient_disease_info
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="patientId != null">patient_id,
</if>
<if test="diseaseId != null">disease_id,
</if>
<if test="userId != null">user_id,
</if>
<if test="diseaseName != null ">disease_name,
</if>
<if test="createBy != null">create_by,
</if>
<if test="createTime != null">create_time,
</if>
<if test="updateBy != null">update_by,
</if>
<if test="updateTime != null">update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="patientId != null">#{patientId},
</if>
<if test="diseaseId != null">#{diseaseId},
</if>
<if test="userId != null">#{userId},
</if>
<if test="diseaseName != null ">#{diseaseName},
</if>
<if test="createBy != null">#{createBy},
</if>
<if test="createTime != null">#{createTime},
</if>
<if test="updateBy != null">#{updateBy},
</if>
<if test="updateTime != null">#{updateTime},
</if>
</trim>
</insert>
<update id="updatePatientDiseaseInfo" parameterType="PatientDiseaseInfo">
update patient_disease_info
<trim prefix="SET" suffixOverrides=",">
<if test="patientId != null">patient_id =
#{patientId},
</if>
<if test="diseaseId != null">disease_id =
#{diseaseId},
</if>
<if test="userId != null">user_id =
#{userId},
</if>
<if test="diseaseName != null ">disease_name =
#{diseaseName},
</if>
<if test="createBy != null">create_by =
#{createBy},
</if>
<if test="createTime != null">create_time =
#{createTime},
</if>
<if test="updateBy != null">update_by =
#{updateBy},
</if>
<if test="updateTime != null">update_time =
#{updateTime},
</if>
</trim>
where id = #{id}
</update>
<delete id="deletePatientDiseaseInfoById" parameterType="Long">
delete
from patient_disease_info
where id = #{id}
</delete>
<delete id="deletePatientDiseaseInfoByIds" parameterType="String">
delete from patient_disease_info where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<insert id="insertBatchPatientDiseaseInfo">
insert into patient_disease_info(
patient_id,
disease_id,
disease_name,
create_time
) values
<foreach item="patientDisease" index="index" collection="list" separator=",">
(
#{patientDisease.patientId},
#{patientDisease.diseaseId},
#{patientDisease.diseaseName},
#{patientDisease.createTime}
)
</foreach>
</insert>
<select id="selectPatientDiseaseInfoByOrderNo"
resultType="com.xinelu.manage.domain.patientdiseaseinfo.PatientDiseaseInfo">
SELECT ao.patient_id,
pdi.disease_name
FROM appointment_order ao
LEFT JOIN patient_info pi ON ao.patient_id = pi.id
LEFT JOIN patient_disease_info pdi ON pdi.patient_id = pi.id
WHERE ao.order_no = #{orderNo}
</select>
</mapper>