|
|
@@ -0,0 +1,148 @@
|
|
|
+package work.baiyun.chronicdiseaseapp.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import work.baiyun.chronicdiseaseapp.mapper.UserBindingMapper;
|
|
|
+import work.baiyun.chronicdiseaseapp.model.po.UserBinding;
|
|
|
+import work.baiyun.chronicdiseaseapp.model.vo.BaseQueryRequest;
|
|
|
+import work.baiyun.chronicdiseaseapp.model.vo.UserBindingResponse;
|
|
|
+import work.baiyun.chronicdiseaseapp.model.vo.CreateUserBindingRequest;
|
|
|
+import work.baiyun.chronicdiseaseapp.model.vo.CheckUserBindingResponse;
|
|
|
+import work.baiyun.chronicdiseaseapp.model.vo.CheckUserBindingRequest;
|
|
|
+import work.baiyun.chronicdiseaseapp.service.UserBindingService;
|
|
|
+import work.baiyun.chronicdiseaseapp.enums.UserBindingType;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class UserBindingServiceImpl implements UserBindingService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserBindingMapper userBindingMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void createUserBinding(CreateUserBindingRequest request) {
|
|
|
+ // 检查是否已存在绑定关系
|
|
|
+ QueryWrapper<UserBinding> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("patient_user_id", request.getPatientUserId())
|
|
|
+ .eq("bound_user_id", request.getBoundUserId());
|
|
|
+ UserBinding existing = userBindingMapper.selectOne(queryWrapper);
|
|
|
+
|
|
|
+ if (existing != null) {
|
|
|
+ // 如果已存在,则更新状态为有效
|
|
|
+ existing.setStatus(1);
|
|
|
+ userBindingMapper.updateById(existing);
|
|
|
+ } else {
|
|
|
+ // 如果不存在,则创建新的绑定关系
|
|
|
+ UserBinding userBinding = new UserBinding();
|
|
|
+ BeanUtils.copyProperties(request, userBinding);
|
|
|
+ userBinding.setStatus(1); // 默认状态为有效
|
|
|
+ userBindingMapper.insert(userBinding);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteUserBinding(Long patientUserId, Long boundUserId) {
|
|
|
+ QueryWrapper<UserBinding> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("patient_user_id", patientUserId)
|
|
|
+ .eq("bound_user_id", boundUserId);
|
|
|
+ UserBinding existing = userBindingMapper.selectOne(queryWrapper);
|
|
|
+
|
|
|
+ if (existing != null) {
|
|
|
+ // 软删除,将状态设置为无效
|
|
|
+ existing.setStatus(0);
|
|
|
+ userBindingMapper.updateById(existing);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<UserBindingResponse> listBindingsByPatient(Long patientUserId, String bindingType, BaseQueryRequest request) {
|
|
|
+ Page<UserBinding> page = new Page<>(request.getPageNum(), request.getPageSize());
|
|
|
+ LambdaQueryWrapper<UserBinding> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.eq(UserBinding::getPatientUserId, patientUserId)
|
|
|
+ .eq(UserBinding::getStatus, 1) // 只查询有效的绑定关系
|
|
|
+ .ge(request.getStartTime() != null, UserBinding::getCreateTime, request.getStartTime())
|
|
|
+ .le(request.getEndTime() != null, UserBinding::getCreateTime, request.getEndTime());
|
|
|
+
|
|
|
+ if (bindingType != null && !bindingType.isEmpty()) {
|
|
|
+ wrapper.eq(UserBinding::getBindingType, UserBindingType.fromCode(bindingType));
|
|
|
+ }
|
|
|
+
|
|
|
+ wrapper.orderByDesc(UserBinding::getCreateTime);
|
|
|
+
|
|
|
+ Page<UserBinding> result = userBindingMapper.selectPage(page, wrapper);
|
|
|
+
|
|
|
+ List<UserBindingResponse> responses = result.getRecords().stream().map(r -> {
|
|
|
+ UserBindingResponse resp = new UserBindingResponse();
|
|
|
+ BeanUtils.copyProperties(r, resp);
|
|
|
+ resp.setId(r.getId().toString());
|
|
|
+ if (r.getBindingType() != null) {
|
|
|
+ resp.setBindingType(r.getBindingType().getCode());
|
|
|
+ }
|
|
|
+ return resp;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ Page<UserBindingResponse> responsePage = new Page<>();
|
|
|
+ responsePage.setRecords(responses);
|
|
|
+ responsePage.setCurrent(result.getCurrent());
|
|
|
+ responsePage.setSize(result.getSize());
|
|
|
+ responsePage.setTotal(result.getTotal());
|
|
|
+ return responsePage;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<UserBindingResponse> listBindingsByBoundUser(Long boundUserId, String bindingType, BaseQueryRequest request) {
|
|
|
+ Page<UserBinding> page = new Page<>(request.getPageNum(), request.getPageSize());
|
|
|
+ LambdaQueryWrapper<UserBinding> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.eq(UserBinding::getBoundUserId, boundUserId)
|
|
|
+ .eq(UserBinding::getStatus, 1) // 只查询有效的绑定关系
|
|
|
+ .ge(request.getStartTime() != null, UserBinding::getCreateTime, request.getStartTime())
|
|
|
+ .le(request.getEndTime() != null, UserBinding::getCreateTime, request.getEndTime());
|
|
|
+
|
|
|
+ if (bindingType != null && !bindingType.isEmpty()) {
|
|
|
+ wrapper.eq(UserBinding::getBindingType, UserBindingType.fromCode(bindingType));
|
|
|
+ }
|
|
|
+
|
|
|
+ wrapper.orderByDesc(UserBinding::getCreateTime);
|
|
|
+
|
|
|
+ Page<UserBinding> result = userBindingMapper.selectPage(page, wrapper);
|
|
|
+
|
|
|
+ List<UserBindingResponse> responses = result.getRecords().stream().map(r -> {
|
|
|
+ UserBindingResponse resp = new UserBindingResponse();
|
|
|
+ BeanUtils.copyProperties(r, resp);
|
|
|
+ resp.setId(r.getId().toString());
|
|
|
+ if (r.getBindingType() != null) {
|
|
|
+ resp.setBindingType(r.getBindingType().getCode());
|
|
|
+ }
|
|
|
+ return resp;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ Page<UserBindingResponse> responsePage = new Page<>();
|
|
|
+ responsePage.setRecords(responses);
|
|
|
+ responsePage.setCurrent(result.getCurrent());
|
|
|
+ responsePage.setSize(result.getSize());
|
|
|
+ responsePage.setTotal(result.getTotal());
|
|
|
+ return responsePage;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CheckUserBindingResponse checkUserBinding(CheckUserBindingRequest request) {
|
|
|
+ QueryWrapper<UserBinding> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("patient_user_id", request.getPatientUserId())
|
|
|
+ .eq("bound_user_id", request.getBoundUserId())
|
|
|
+ .eq("status", 1); // 只检查有效的绑定关系
|
|
|
+ UserBinding existing = userBindingMapper.selectOne(queryWrapper);
|
|
|
+
|
|
|
+ CheckUserBindingResponse response = new CheckUserBindingResponse();
|
|
|
+ response.setExists(existing != null);
|
|
|
+ if (existing != null && existing.getBindingType() != null) {
|
|
|
+ response.setBindingType(existing.getBindingType().getCode());
|
|
|
+ }
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+}
|