From 98039f1cc4a378d176decb25cd031b19ac0c84bf Mon Sep 17 00:00:00 2001 From: "Wang.Huan" Date: Wed, 26 Mar 2025 13:43:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=82=E4=B8=8E=E8=80=85=E9=87=8D=E5=86=99?= =?UTF-8?q?=20-=20=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appservice/IPractitionerAppService.java | 14 +++ .../impl/PractitionerAppServiceImpl.java | 119 ++++++++++++++++-- .../controller/PractitionerController.java | 25 +++- .../mapper/PractitionerAppAppMapper.java | 28 +++++ .../dto/UserAndPractitionerChildDto.java | 54 ++++++++ .../dto/UserAndPractitionerDto.java | 35 ++++-- .../basedatamanage/PractitionerAppMapper.xml | 62 +++++++++ .../administration/domain/BizUser.java | 4 +- 8 files changed, 314 insertions(+), 27 deletions(-) create mode 100644 openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UserAndPractitionerChildDto.java diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/IPractitionerAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/IPractitionerAppService.java index b88504f3..fe255a7e 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/IPractitionerAppService.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/IPractitionerAppService.java @@ -1,5 +1,6 @@ package com.openhis.web.basedatamanage.appservice; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.core.common.core.domain.R; import com.openhis.web.doctorstation.dto.UserAndPractitionerDto; @@ -10,9 +11,22 @@ public interface IPractitionerAppService { /** * 新增用户及参与者 + * * @param userAndPractitionerDto 用户及参与者dto * @return 结果 */ R saveUserPractitioner(UserAndPractitionerDto userAndPractitionerDto); + /** + * 查询用户及参与者 + * + * @param userAndPractitionerDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 用户及参与者 + */ + IPage getUserPractitionerPage(UserAndPractitionerDto userAndPractitionerDto, + String searchKey, Integer pageNo, Integer pageSize); + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java index 5e25389d..06104195 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java @@ -1,18 +1,36 @@ package com.openhis.web.basedatamanage.appservice.impl; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; + import javax.annotation.Resource; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.utils.ChineseConvertUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.BizUser; +import com.openhis.administration.domain.BizUserRole; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.domain.PractitionerRole; import com.openhis.administration.service.IBizUserRoleService; import com.openhis.administration.service.IBizUserService; import com.openhis.administration.service.IPractitionerRoleService; import com.openhis.administration.service.IPractitionerService; -import org.springframework.stereotype.Service; - -import com.core.common.core.domain.R; -import com.core.common.utils.MessageUtils; import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.AccountStatus; +import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.basedatamanage.appservice.IPractitionerAppService; import com.openhis.web.basedatamanage.mapper.PractitionerAppAppMapper; +import com.openhis.web.doctorstation.dto.UserAndPractitionerChildDto; import com.openhis.web.doctorstation.dto.UserAndPractitionerDto; @Service @@ -33,26 +51,105 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { @Resource IPractitionerRoleService iPractitionerRoleService; - /** * 新增用户及参与者 - * + * * @param userAndPractitionerDto 用户及参与者dto * @return 结果 */ @Override public R saveUserPractitioner(UserAndPractitionerDto userAndPractitionerDto) { - // 数据有效性校验 : 账号唯一性 - + String userName = userAndPractitionerDto.getUserName(); + String nickName = userAndPractitionerDto.getNickName(); + String phonenumber = userAndPractitionerDto.getPhonenumber(); + String sex = userAndPractitionerDto.getSex(); + // 账号唯一性 + long count = iBizUserService.count(new LambdaQueryWrapper().eq(BizUser::getUserName, userName)); + if (count > 0L) { + return R.fail(null, "账号已存在"); + } // 新增 sys_user - + BizUser bizUser = new BizUser(); + bizUser.setUserName(userName); // 账号 + bizUser.setNickName(nickName); // 昵称 + bizUser.setEmail(userAndPractitionerDto.getEmail());// 邮箱 + bizUser.setPhonenumber(phonenumber); // 电话 + bizUser.setSex(sex); // 性别 + bizUser.setPassword(SecurityUtils.encryptPassword(userAndPractitionerDto.getPassword())); // 密码 + bizUser.setStatus(userAndPractitionerDto.getStatus()); // 状态 + bizUser.setRemark(userAndPractitionerDto.getRemark()); // 备注 + iBizUserService.save(bizUser); + Long userId = bizUser.getUserId(); // 用户id // 新增 sys_user_role - + List roleIds = userAndPractitionerDto.getRoleIds(); + BizUserRole bizUserRole; + for (Long roleId : roleIds) { + bizUserRole = new BizUserRole(); + bizUserRole.setUserId(userId); + bizUserRole.setRoleId(roleId); + iBizUserRoleService.save(bizUserRole); + } // 新增 adm_practitioner - + Practitioner practitioner = new Practitioner(); + practitioner.setActiveFlag(AccountStatus.ACTIVE.getValue()); // 活动标记 + practitioner.setName(nickName); // 姓名 + practitioner.setGenderEnum(Integer.parseInt(sex)); // 性别 + practitioner.setBirthDate(userAndPractitionerDto.getBirthDate()); // 出生日期 + practitioner.setPhone(phonenumber); // 电话 + practitioner.setAddress(userAndPractitionerDto.getAddress()); // 地址 + practitioner.setYbNo(userAndPractitionerDto.getYbNo()); // 医保码 + practitioner.setUserId(userId); // 系统用户id + practitioner.setOrgId(userAndPractitionerDto.getOrgId()); // 机构id + practitioner.setPyStr(ChineseConvertUtils.toPinyinFirstLetter(nickName)); // 拼音码 + practitioner.setWbStr(ChineseConvertUtils.toWBFirstLetter(nickName)); // 五笔码 + iPractitionerService.save(practitioner); + Long practitionerId = practitioner.getId();// 参与者id // 新增 adm_practitioner_role + List childList = userAndPractitionerDto.getChildList(); + PractitionerRole practitionerRole; + for (UserAndPractitionerChildDto userAndPractitionerChildDto : childList) { + practitionerRole = new PractitionerRole(); + practitionerRole.setName(nickName); // 姓名 + practitionerRole.setPractitionerId(practitionerId); // 参与者id + practitionerRole.setRoleCode(userAndPractitionerChildDto.getRoleCode()); // 角色code + practitionerRole.setOrgId(userAndPractitionerChildDto.getOrgId()); // 机构id + practitionerRole.setLocationId(userAndPractitionerChildDto.getLocationId()); // 位置id + iPractitionerRoleService.save(practitionerRole); + } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"人员信息"})); } + /** + * 查询用户及参与者 + * + * @param userAndPractitionerDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 用户及参与者 + */ + @Override + public IPage getUserPractitionerPage(UserAndPractitionerDto userAndPractitionerDto, + String searchKey, Integer pageNo, Integer pageSize) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(userAndPractitionerDto, + searchKey, new HashSet<>(Arrays.asList("user_name", "nick_name", "py_str", "wb_str")), null); + IPage userPractitionerPage = + practitionerAppAppMapper.getUserPractitionerPage(new Page<>(pageNo, pageSize), queryWrapper); + List records = userPractitionerPage.getRecords(); + // 参与者id集合 + List practitionerIdList = + records.stream().map(UserAndPractitionerDto::getPractitionerId).collect(Collectors.toList()); + // 子集合 + List childList = practitionerAppAppMapper.getChildList(practitionerIdList); + for (UserAndPractitionerDto record : records) { + // 匹配子集合 + List childDtoList = + childList.stream().filter(e -> e.getPractitionerId().equals(record.getPractitionerId())).collect(Collectors.toList()); + record.setChildList(childDtoList); + } + return userPractitionerPage; + } + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/PractitionerController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/PractitionerController.java index 08673c57..ac4f0668 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/PractitionerController.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/controller/PractitionerController.java @@ -3,10 +3,7 @@ */ package com.openhis.web.basedatamanage.controller; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; import com.openhis.web.basedatamanage.appservice.IPractitionerAppService; @@ -32,9 +29,27 @@ public class PractitionerController { * @param userAndPractitionerDto 用户及参与者dto * @return 结果 */ - @PostMapping(value = "/save-user-practitioner") + @PostMapping(value = "/user-practitioner") public R saveUserPractitioner(@RequestBody UserAndPractitionerDto userAndPractitionerDto) { return practitionerAppService.saveUserPractitioner(userAndPractitionerDto); } + /** + * 查询用户及参与者 + * + * @param userAndPractitionerDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @return 用户及参与者 + */ + @GetMapping(value = "/user-practitioner-page") + public R getUserPractitionerPage(UserAndPractitionerDto userAndPractitionerDto, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return R + .ok(practitionerAppService.getUserPractitionerPage(userAndPractitionerDto, searchKey, pageNo, pageSize)); + } + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/mapper/PractitionerAppAppMapper.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/mapper/PractitionerAppAppMapper.java index 9e50ba06..7a07c05e 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/mapper/PractitionerAppAppMapper.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basedatamanage/mapper/PractitionerAppAppMapper.java @@ -1,11 +1,39 @@ package com.openhis.web.basedatamanage.mapper; +import java.util.List; + +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.web.doctorstation.dto.UserAndPractitionerChildDto; +import com.openhis.web.doctorstation.dto.UserAndPractitionerDto; + /** * 参与者 应用Mapper */ @Repository public interface PractitionerAppAppMapper { + /** + * 查询用户及参与者 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @return 用户及参与者 + */ + IPage getUserPractitionerPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 查询子集合 + * + * @param practitionerIdList 参与者id集合 + * @return 子集合 + */ + List getChildList(@Param("practitionerIdList") List practitionerIdList); + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UserAndPractitionerChildDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UserAndPractitionerChildDto.java new file mode 100644 index 00000000..f3586e8f --- /dev/null +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UserAndPractitionerChildDto.java @@ -0,0 +1,54 @@ +package com.openhis.web.doctorstation.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 用户 及 参与者 子dto + */ +@Data +@Accessors(chain = true) +public class UserAndPractitionerChildDto { + + /** + * 机构id + */ + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + private String orgId_dictText; + + /** + * 位置id + */ + @Dict(dictTable = "adm_location", dictCode = "id", dictText = "name") + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + private String locationId_dictText; + + /** + * 角色code + */ + private String roleCode; + + /** + * 角色id + */ + private Long roleId; + + /** + * 角色name + */ + private String roleName; + + /** + * 参与者id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UserAndPractitionerDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UserAndPractitionerDto.java index 4ae24281..4a6e4718 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UserAndPractitionerDto.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/UserAndPractitionerDto.java @@ -5,6 +5,7 @@ import java.util.List; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.common.annotation.Dict; import lombok.Data; import lombok.experimental.Accessors; @@ -16,6 +17,18 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class UserAndPractitionerDto { + /** + * 用户id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long userId; + + /** + * 参与者id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + /** * 账号 */ @@ -26,6 +39,12 @@ public class UserAndPractitionerDto { */ private String nickName; + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + /** * 邮箱 */ @@ -39,7 +58,9 @@ public class UserAndPractitionerDto { /** * 性别 */ + @Dict(dictCode = "sys_user_sex") private String sex; + private String sex_dictText; /** * 密码 @@ -49,7 +70,9 @@ public class UserAndPractitionerDto { /** * 状态(0正常 1停用) */ + @Dict(dictCode = "sys_normal_disable") private String status; + private String status_dictText; /** * 备注 @@ -74,14 +97,10 @@ public class UserAndPractitionerDto { /** * 机构id */ + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") @JsonSerialize(using = ToStringSerializer.class) private Long orgId; - - /** - * 位置id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long locationId; + private String orgId_dictText; /** * 角色id集合 @@ -89,8 +108,8 @@ public class UserAndPractitionerDto { private List roleIds; /** - * 角色code集合 + * 子集合 */ - private List roleCodes; + private List childList; } diff --git a/openhis-server/openhis-application/src/main/resources/mapper/basedatamanage/PractitionerAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/basedatamanage/PractitionerAppMapper.xml index f5b8f393..338d2807 100644 --- a/openhis-server/openhis-application/src/main/resources/mapper/basedatamanage/PractitionerAppMapper.xml +++ b/openhis-server/openhis-application/src/main/resources/mapper/basedatamanage/PractitionerAppMapper.xml @@ -4,5 +4,67 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + \ No newline at end of file diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/BizUser.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/BizUser.java index 3c830920..9980d0fa 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/BizUser.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/domain/BizUser.java @@ -2,8 +2,6 @@ package com.openhis.administration.domain; import java.util.Date; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.core.common.core.domain.HisBaseEntity; @@ -24,7 +22,7 @@ import lombok.experimental.Accessors; public class BizUser extends HisBaseEntity { /** 用户ID */ - @TableId(type = IdType.ASSIGN_ID) + // @TableId(type = IdType.ASSIGN_ID) private Long userId; /** 部门ID */