Browse Source

小程序就诊人

guomengjiao 3 days ago
parent
commit
65f47e0681

+ 2 - 2
ruoyi-admin/src/main/resources/application-dev.yml

@@ -168,8 +168,8 @@ wx:
         msgDataFormat: JSON
         version: trial  # release   develop   trial
   pay:
-    appId: wx3f5fa98c5edf8718 #公司的:wxd15dbb580e6f1cd3  客户的:wx3f5fa98c5edf8718
-    mchId: 1703980824 #公司的:1640577480  客户的:1703980824
+    appId: xx
+    mchId: xxx
     mchKey: #微信支付商户密钥
     subAppId: #服务商模式下的子商户公众账号ID
     subMchId: #服务商模式下的子商户号

+ 80 - 0
ruoyi-api/src/main/java/com/ruoyi/api/controller/info/ApiOrderController.java

@@ -0,0 +1,80 @@
+package com.ruoyi.api.controller.info;
+
+import com.ruoyi.api.controller.common.AbstractApiController;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.info.order.domain.bo.OrderBo;
+import com.ruoyi.info.order.domain.vo.OrderVo;
+import com.ruoyi.info.order.service.IOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2025-09-20
+ */
+@Validated
+@Api(value = "订单控制器", tags = {"订单管理"})
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/api/order/order")
+public class ApiOrderController extends AbstractApiController {
+
+    private final IOrderService iOrderService;
+
+    /**
+     * 分页查询订单列表
+     */
+    @ApiOperation("查询订单列表")
+    @GetMapping("/page")
+    public TableDataInfo<OrderVo> page(@Validated(QueryGroup.class) OrderBo bo, PageQuery pageQuery) {
+        return iOrderService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 获取订单详细信息
+     */
+    @ApiOperation("获取订单详细信息")
+    @GetMapping("/info/{id}")
+    public R<OrderVo> getInfo(@ApiParam("主键")
+                                                  @NotNull(message = "主键不能为空")
+                                                  @PathVariable("id") Long id) {
+        return R.ok(iOrderService.queryById(id));
+    }
+
+    /**
+     * 新增订单
+     */
+    @ApiOperation("新增订单")
+    @RepeatSubmit()
+    @PostMapping("/add")
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody OrderBo bo) {
+        return toAjax(iOrderService.insertByBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除订单
+     */
+    @ApiOperation("删除订单")
+    @PostMapping("/del/{ids}")
+    public R<Void> remove(@ApiParam("主键串")
+                                       @NotEmpty(message = "主键不能为空")
+                                       @PathVariable Long[] ids) {
+        return toAjax(iOrderService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+
+}

+ 44 - 35
ruoyi-admin/src/main/java/com/ruoyi/web/controller/info/PatientController.java

@@ -1,31 +1,27 @@
-package com.ruoyi.web.controller.info;
+package com.ruoyi.api.controller.info;
 
-import java.util.List;
-import java.util.Arrays;
-
-import lombok.RequiredArgsConstructor;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.constraints.*;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.validation.annotation.Validated;
+import com.ruoyi.api.controller.common.AbstractApiController;
 import com.ruoyi.common.annotation.RepeatSubmit;
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.PageQuery;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.validate.AddGroup;
 import com.ruoyi.common.core.validate.EditGroup;
 import com.ruoyi.common.core.validate.QueryGroup;
-import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.info.patient.domain.vo.PatientVo;
 import com.ruoyi.info.patient.domain.bo.PatientBo;
+import com.ruoyi.info.patient.domain.vo.PatientVo;
 import com.ruoyi.info.patient.service.IPatientService;
-import com.ruoyi.common.core.page.TableDataInfo;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 就诊人Controller
@@ -37,8 +33,8 @@ import io.swagger.annotations.ApiOperation;
 @Api(value = "就诊人控制器", tags = {"就诊人管理"})
 @RequiredArgsConstructor
 @RestController
-@RequestMapping("/patient/patient")
-public class PatientController extends BaseController {
+@RequestMapping("/api/patient/patient")
+public class ApiPatientController extends AbstractApiController {
 
     private final IPatientService iPatientService;
 
@@ -46,17 +42,26 @@ public class PatientController extends BaseController {
      * 分页查询就诊人列表
      */
     @ApiOperation("查询就诊人列表")
-    @SaCheckPermission("patient:patient:list")
     @GetMapping("/page")
     public TableDataInfo<PatientVo> page(@Validated(QueryGroup.class) PatientBo bo, PageQuery pageQuery) {
+        bo.setUserId(getUserId());
         return iPatientService.queryPageList(bo, pageQuery);
     }
 
+    /**
+     * 查询就诊人列表
+     */
+    @ApiOperation("查询就诊人列表")
+    @GetMapping("/list")
+    public R<List<PatientVo>> list(@Validated(QueryGroup.class) PatientBo bo) {
+        bo.setUserId(getUserId());
+        return R.ok(iPatientService.queryList(bo));
+    }
+
     /**
      * 获取就诊人详细信息
      */
     @ApiOperation("获取就诊人详细信息")
-    @SaCheckPermission("patient:patient:query")
     @GetMapping("/info/{id}")
     public R<PatientVo> getInfo(@ApiParam("主键")
                                                   @NotNull(message = "主键不能为空")
@@ -68,11 +73,10 @@ public class PatientController extends BaseController {
      * 新增就诊人
      */
     @ApiOperation("新增就诊人")
-    @SaCheckPermission("patient:patient:add")
-    @Log(title = "就诊人", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping("/add")
     public R<Void> add(@Validated(AddGroup.class) @RequestBody PatientBo bo) {
+        bo.setUserId(getUserId());
         return toAjax(iPatientService.insertByBo(bo) ? 1 : 0);
     }
 
@@ -80,11 +84,10 @@ public class PatientController extends BaseController {
      * 修改就诊人
      */
     @ApiOperation("修改就诊人")
-    @SaCheckPermission("patient:patient:edit")
-    @Log(title = "就诊人", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PostMapping("/edit")
     public R<Void> edit(@Validated(EditGroup.class) @RequestBody PatientBo bo) {
+        bo.setUserId(getUserId());
         return toAjax(iPatientService.updateByBo(bo) ? 1 : 0);
     }
 
@@ -92,8 +95,6 @@ public class PatientController extends BaseController {
      * 删除就诊人
      */
     @ApiOperation("删除就诊人")
-    @SaCheckPermission("patient:patient:remove")
-    @Log(title = "就诊人", businessType = BusinessType.DELETE)
     @PostMapping("/del/{ids}")
     public R<Void> remove(@ApiParam("主键串")
                                        @NotEmpty(message = "主键不能为空")
@@ -102,15 +103,23 @@ public class PatientController extends BaseController {
     }
 
     /**
-     * 导出就诊人列表
+     * 设置用户就诊人是否默认
      */
-    @ApiOperation("导出就诊人列表")
-    @SaCheckPermission("patient:patient:export")
-    @Log(title = "就诊人", businessType = BusinessType.EXPORT)
-    @PostMapping("/export")
-    public void export(@Validated PatientBo bo, HttpServletResponse response) {
-        List<PatientVo> list = iPatientService.queryList(bo);
-        ExcelUtil.exportExcel(list, "就诊人", PatientVo.class, response);
+    @ApiOperation("设置用户就诊人是否默认")
+    @RepeatSubmit()
+    @PostMapping("/setDefaulted/{patientId}")
+    public R<Void> setDefaulted(@PathVariable("patientId") Long patientId) {
+        iPatientService.setDefaulted(getUserId(),patientId);
+        return R.ok();
     }
 
+
+    /**
+     * 获取用户默认就诊人
+     */
+    @ApiOperation("获取用户默认就诊人")
+    @GetMapping("/getDefaulted")
+    public R<PatientVo> getDefaulted() {
+        return R.ok(iPatientService.getDefaulted(getUserId()));
+    }
 }

+ 42 - 0
ruoyi-api/src/main/java/com/ruoyi/api/controller/info/ApiServiceProductController.java

@@ -0,0 +1,42 @@
+package com.ruoyi.api.controller.info;
+
+import com.ruoyi.api.controller.common.AbstractApiController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.validate.QueryGroup;
+import com.ruoyi.info.service.domain.bo.ServiceProductBo;
+import com.ruoyi.info.service.domain.vo.ServiceProductVo;
+import com.ruoyi.info.service.service.IServiceProductService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 服务Controller
+ *
+ * @author ruoyi
+ * @date 2025-09-20
+ */
+@Validated
+@Api(value = "服务控制器", tags = {"服务管理"})
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/api/service/serviceProduct")
+public class ApiServiceProductController extends AbstractApiController {
+
+    private final IServiceProductService iServiceProductService;
+
+    /**
+     * 分页查询服务列表
+     */
+    @ApiOperation("查询服务列表")
+    @GetMapping("/list")
+    public TableDataInfo<ServiceProductVo> page(@Validated(QueryGroup.class) ServiceProductBo bo, PageQuery pageQuery) {
+        return iServiceProductService.queryPageList(bo, pageQuery);
+    }
+
+}

+ 7 - 0
ruoyi-api/src/main/java/com/ruoyi/api/controller/user/ApiUserLoginController.java

@@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.validate.RegGroup;
 import com.ruoyi.framework.web.service.ApiTokenService;
 import com.ruoyi.user.domain.User;
+import com.ruoyi.user.enums.UserThirdType;
 import com.ruoyi.user.service.IUserService;
 import com.ruoyi.weixin.domain.WxUserDto;
 import com.ruoyi.weixin.service.WxUserService;
@@ -93,4 +94,10 @@ public class ApiUserLoginController extends AbstractApiController {
         return R.ok(result);
     }
 
+    @ApiOperation("登出方法")
+    @PostMapping("/wxLogout")
+    public R<Void> wxLogout() {
+        userService.logout(getUserId(true), UserThirdType.WX_MINI_PROGRAM.getCode());
+        return R.ok("退出成功");
+    }
 }

+ 4 - 0
ruoyi-info/src/main/java/com/ruoyi/info/patient/domain/Patient.java

@@ -54,5 +54,9 @@ public class Patient extends BaseTimeEntity {
      * 关系
      */
     private String relationship;
+    /**
+     * 是否默认
+     */
+    private Boolean defaulted;
 
 }

+ 5 - 3
ruoyi-info/src/main/java/com/ruoyi/info/patient/domain/bo/PatientBo.java

@@ -62,15 +62,17 @@ public class PatientBo extends BaseEntity {
      * 年龄
      */
     @ApiModelProperty(value = "年龄", required = true)
-    @NotNull(message = "年龄不能为空", groups = { AddGroup.class, EditGroup.class })
     private Integer age;
 
     /**
      * 关系
      */
     @ApiModelProperty(value = "关系", required = true)
-    @NotBlank(message = "关系不能为空", groups = { AddGroup.class, EditGroup.class })
     private String relationship;
 
-
+    /**
+     * 是否默认
+     */
+    @ApiModelProperty(value = "是否默认", required = true)
+    private Boolean defaulted;
 }

+ 5 - 1
ruoyi-info/src/main/java/com/ruoyi/info/patient/domain/vo/PatientVo.java

@@ -72,5 +72,9 @@ public class PatientVo {
     @ApiModelProperty("关系")
     private String relationship;
 
-
+    /**
+     * 是否默认
+     */
+    @ApiModelProperty(value = "是否默认", required = true)
+    private Boolean defaulted;
 }

+ 1 - 1
ruoyi-info/src/main/java/com/ruoyi/info/patient/exception/PatientExceptionEnum.java

@@ -11,7 +11,7 @@ public enum PatientExceptionEnum implements IIntegerEnum {
 
     // TODO 注意检查错误码,保证系统内唯一
     Patient_IS_NOT_EXISTS(120001, "就诊人不存在"),
-
+    OPTION_USER_PATIENT_IS_EXISTS(120002, "只能操作自己的就诊人信息"),
     ;
 
     private Integer code;

+ 3 - 0
ruoyi-info/src/main/java/com/ruoyi/info/patient/service/IPatientService.java

@@ -74,4 +74,7 @@ public interface IPatientService {
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
+    void setDefaulted(Long userId, Long patientId);
+
+    PatientVo getDefaulted(Long userId);
 }

+ 41 - 10
ruoyi-info/src/main/java/com/ruoyi/info/patient/service/impl/PatientServiceImpl.java

@@ -2,26 +2,26 @@ package com.ruoyi.info.patient.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.BeanCopyUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.core.domain.PageQuery;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
+import com.ruoyi.info.patient.domain.Patient;
 import com.ruoyi.info.patient.domain.bo.PatientBo;
 import com.ruoyi.info.patient.domain.vo.PatientVo;
-import com.ruoyi.info.patient.domain.Patient;
+import com.ruoyi.info.patient.exception.PatientExceptionEnum;
 import com.ruoyi.info.patient.mapper.PatientMapper;
 import com.ruoyi.info.patient.service.IPatientService;
-import com.ruoyi.info.patient.exception.PatientExceptionEnum;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Collection;
 
 /**
  * 就诊人Service业务层处理
@@ -69,6 +69,8 @@ public class PatientServiceImpl implements IPatientService {
         lqw.eq(bo.getGender() != null, Patient::getGender, bo.getGender());
         lqw.eq(bo.getAge() != null, Patient::getAge, bo.getAge());
         lqw.eq(StringUtils.isNotBlank(bo.getRelationship()), Patient::getRelationship, bo.getRelationship());
+        lqw.eq(bo.getDefaulted() != null, Patient::getDefaulted, bo.getDefaulted());
+        lqw.orderByDesc(Patient::getDefaulted).orderByDesc(Patient::getCreateTime);
         return lqw;
     }
 
@@ -152,4 +154,33 @@ public class PatientServiceImpl implements IPatientService {
         return baseMapper.deleteBatchIds(ids) > 0;
     }
 
+    @Override
+    public void setDefaulted(Long userId, Long patientId) {
+        Patient patient = loadById(patientId, true);
+        if (!patient.getUserId().equals(userId)) {
+            throw new ServiceException(PatientExceptionEnum.OPTION_USER_PATIENT_IS_EXISTS);
+        }
+        // 如果当前患者已经是默认患者,直接返回
+        if (patient.getDefaulted()) {
+            return;
+        }
+        // 取消原有默认患者的默认状态
+        Patient defaultObj = this.loadDefaulted(userId);
+        if (ObjectUtil.isNotNull(defaultObj) && !patient.getId().equals(defaultObj.getId())) {
+            defaultObj.setDefaulted(false);
+            this.baseMapper.updateById(defaultObj);
+        }
+        // 设置当前患者为默认患者
+        patient.setDefaulted(true);
+        this.baseMapper.updateById(patient);
+    }
+
+    @Override
+    public PatientVo getDefaulted(Long userId) {
+        return this.baseMapper.selectVoOne(new LambdaQueryWrapper<Patient>().eq(Patient::getUserId, userId).eq(Patient::getDefaulted, true).last("limit 1"));
+    }
+
+    public Patient loadDefaulted(Long userId) {
+        return this.baseMapper.selectOne(new LambdaQueryWrapper<Patient>().eq(Patient::getUserId, userId).eq(Patient::getDefaulted, true).last("limit 1"));
+    }
 }

+ 1 - 0
ruoyi-info/src/main/resources/mapper/patient/PatientMapper.xml

@@ -12,6 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="gender" column="gender"/>
         <result property="age" column="age"/>
         <result property="relationship" column="relationship"/>
+        <result property="defaulted" column="defaulted"/>
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
     </resultMap>

+ 1 - 0
ruoyi-user/src/main/java/com/ruoyi/user/service/IUserService.java

@@ -126,4 +126,5 @@ public interface IUserService {
      */
     List<UserStatisticsVo> statisticsUserRegisterForHome();
 
+    void logout(Long userId, Integer type);
 }

+ 25 - 1
ruoyi-user/src/main/java/com/ruoyi/user/service/impl/UserServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.constant.Constants;
@@ -201,7 +202,21 @@ public class UserServiceImpl implements IUserService {
         User user = this.loadByMobile(wxUserDto.getMobile(), true);
         if(ObjectUtil.isNotNull(user))
         {
-           return user;
+            //查询此用户是否绑定过微信
+            userThirdIdentity = userThirdIdentityMapper.selectOne(
+                new LambdaQueryWrapper<UserThirdIdentity>()
+                    .eq(UserThirdIdentity::getThirdType, 0)
+                    .eq(UserThirdIdentity::getUserId, user.getId())
+                    .last("limit 1")
+            );
+            if (ObjectUtil.isNull(userThirdIdentity)) {
+                userThirdIdentity = new UserThirdIdentity();
+                userThirdIdentity.setUserId(user.getId());
+                userThirdIdentity.setThirdType(0);
+            }
+            userThirdIdentity.setIdentityCode(openId);
+            userThirdIdentityMapper.insertOrUpdate(userThirdIdentity);
+            return user;
         }
 
 
@@ -331,6 +346,15 @@ public class UserServiceImpl implements IUserService {
         return dataList;
     }
 
+    @Override
+    public void logout(Long userId, Integer type) {
+        userThirdIdentityMapper.update(null, new LambdaUpdateWrapper<UserThirdIdentity>()
+            .eq(UserThirdIdentity::getUserId, userId)
+            .eq(UserThirdIdentity::getThirdType, type)
+            .set(UserThirdIdentity::getIdentityCode, "")
+        );
+    }
+
     public static List<UserStatisticsVo> completionDate(String start, String end) {
         //日期格式化
         List<UserStatisticsVo> dateList = new ArrayList<>();