This commit is contained in:
菲菲
2025-03-26 17:04:34 +08:00
48 changed files with 2377 additions and 297 deletions

View File

@@ -3,13 +3,14 @@ package com.core.common.core.domain.model;
import java.util.Collection;
import java.util.Set;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import com.alibaba.fastjson2.annotation.JSONField;
import com.core.common.core.domain.entity.SysUser;
import lombok.Data;
/**
* 登录用户身份权限
*
@@ -72,6 +73,16 @@ public class LoginUser implements UserDetails {
/** 租户ID */
private Integer tenantId;
/**
* 机构/科室id
*/
private Long orgId;
/**
* 参与者id
*/
private Long practitionerId;
/**
* 用户信息
*/

View File

@@ -0,0 +1,21 @@
package com.core.common.core.domain.model;
import lombok.Data;
/**
* 登录用户扩展
*/
@Data
public class LoginUserExtend {
/**
* 机构/科室id
*/
private Long orgId;
/**
* 参与者id
*/
private Long practitionerId;
}

View File

@@ -17,6 +17,7 @@ import com.core.common.constant.Constants;
import com.core.common.constant.UserConstants;
import com.core.common.core.domain.entity.SysUser;
import com.core.common.core.domain.model.LoginUser;
import com.core.common.core.domain.model.LoginUserExtend;
import com.core.common.core.redis.RedisCache;
import com.core.common.exception.ServiceException;
import com.core.common.exception.user.*;
@@ -63,7 +64,7 @@ public class SysLoginService {
*/
public String login(String username, String password, String code, String uuid) {
// 验证码校验
// validateCaptcha(username, code, uuid);
validateCaptcha(username, code, uuid);
// 登录前置校验
loginPreCheck(username, password);
// 用户验证
@@ -91,7 +92,7 @@ public class SysLoginService {
MessageUtils.message("user.login.success")));
LoginUser loginUser = (LoginUser)authentication.getPrincipal();
// -----start-----登录时set租户id,正常应该从请求头获取,这行代码只是测试使用
// -----start-----登录时set租户id
Integer tenantId = 0;
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
if (attributes != null) {
@@ -103,8 +104,12 @@ public class SysLoginService {
}
}
loginUser.setTenantId(tenantId);
// -----end-----登录时set租户id,正常应该从请求头获取,这行代码只是测试使用
// -----end-----登录时set租户id
recordLoginInfo(loginUser.getUserId());
// 设置 机构id和参与者id
LoginUserExtend loginUserExtend = userService.getLoginUserExtend(loginUser.getUserId());
loginUser.setOrgId(loginUserExtend.getOrgId());
loginUser.setPractitionerId(loginUserExtend.getPractitionerId());
// 生成token
return tokenService.createToken(loginUser);
}

View File

@@ -2,6 +2,7 @@ package com.core.system.mapper;
import java.util.List;
import com.core.common.core.domain.model.LoginUserExtend;
import org.apache.ibatis.annotations.Param;
import com.core.common.core.domain.entity.SysUser;
@@ -125,4 +126,12 @@ public interface SysUserMapper {
* @return 结果
*/
public SysUser checkEmailUnique(String email);
/**
* 扩展属性
*
* @param userId 系统用户id
* @return 扩展属性
*/
LoginUserExtend getLoginUserExtend(@Param("userId") Long userId);
}

View File

@@ -3,6 +3,7 @@ package com.core.system.service;
import java.util.List;
import com.core.common.core.domain.entity.SysUser;
import com.core.common.core.domain.model.LoginUserExtend;
/**
* 用户 业务层
@@ -203,4 +204,12 @@ public interface ISysUserService {
* @return 结果
*/
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
/**
* 扩展属性
*
* @param userId 系统用户id
* @return 扩展属性
*/
LoginUserExtend getLoginUserExtend(Long userId);
}

View File

@@ -6,6 +6,7 @@ import java.util.stream.Collectors;
import javax.validation.Validator;
import com.core.common.core.domain.model.LoginUserExtend;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -484,4 +485,16 @@ public class SysUserServiceImpl implements ISysUserService {
}
return successMsg.toString();
}
/**
* 扩展属性
*
* @param userId 系统用户id
* @return 扩展属性
*/
@Override
public LoginUserExtend getLoginUserExtend(Long userId) {
return userMapper.getLoginUserExtend(userId);
}
}

View File

@@ -265,4 +265,12 @@
</foreach>
</delete>
<select id="getLoginUserExtend" resultType="com.core.common.core.domain.model.LoginUserExtend">
SELECT T1.ID AS practitioner_id,
T1.org_id AS org_id
FROM adm_practitioner AS T1
WHERE T1.delete_flag = '0'
AND T1.user_id = #{userId} LIMIT 1
</select>
</mapper>

View File

@@ -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,38 @@ public interface IPractitionerAppService {
/**
* 新增用户及参与者
*
* @param userAndPractitionerDto 用户及参与者dto
* @return 结果
*/
R<?> saveUserPractitioner(UserAndPractitionerDto userAndPractitionerDto);
/**
* 查询用户及参与者
*
* @param userAndPractitionerDto 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页
* @param pageSize 每页多少条
* @return 用户及参与者
*/
IPage<UserAndPractitionerDto> getUserPractitionerPage(UserAndPractitionerDto userAndPractitionerDto,
String searchKey, Integer pageNo, Integer pageSize);
/**
* 修改用户及参与者
*
* @param userAndPractitionerDto 用户及参与者dto
* @return 结果
*/
R<?> editUserPractitioner(UserAndPractitionerDto userAndPractitionerDto);
/**
* 删除用户及参与者 ; admin不允许删除
*
* @param userId 系统用户id
* @return 结果
*/
R<?> delUserPractitioner(Long userId);
}

View File

@@ -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,192 @@ 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<BizUser>().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<Long> 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<UserAndPractitionerChildDto> 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.M00001, new Object[] {"人员信息"}));
}
/**
* 查询用户及参与者
*
* @param userAndPractitionerDto 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页
* @param pageSize 每页多少条
* @return 用户及参与者
*/
@Override
public IPage<UserAndPractitionerDto> getUserPractitionerPage(UserAndPractitionerDto userAndPractitionerDto,
String searchKey, Integer pageNo, Integer pageSize) {
// 构建查询条件
QueryWrapper<UserAndPractitionerDto> queryWrapper = HisQueryUtils.buildQueryWrapper(userAndPractitionerDto,
searchKey, new HashSet<>(Arrays.asList("user_name", "nick_name", "py_str", "wb_str")), null);
IPage<UserAndPractitionerDto> userPractitionerPage =
practitionerAppAppMapper.getUserPractitionerPage(new Page<>(pageNo, pageSize), queryWrapper);
List<UserAndPractitionerDto> records = userPractitionerPage.getRecords();
// 参与者id集合
List<Long> practitionerIdList =
records.stream().map(UserAndPractitionerDto::getPractitionerId).collect(Collectors.toList());
// 子集合
List<UserAndPractitionerChildDto> childList = practitionerAppAppMapper.getChildList(practitionerIdList);
for (UserAndPractitionerDto record : records) {
// 匹配子集合
List<UserAndPractitionerChildDto> childDtoList = childList.stream()
.filter(e -> e.getPractitionerId().equals(record.getPractitionerId())).collect(Collectors.toList());
record.setChildList(childDtoList);
}
return userPractitionerPage;
}
/**
* 修改用户及参与者 : 登录账号和密码不允许编辑
*
* @param userAndPractitionerDto 用户及参与者dto
* @return 结果
*/
@Override
public R<?> editUserPractitioner(UserAndPractitionerDto userAndPractitionerDto) {
Long userId = userAndPractitionerDto.getUserId(); // 系统用户id
Long practitionerId = userAndPractitionerDto.getPractitionerId(); // 参与者id
String nickName = userAndPractitionerDto.getNickName();
String phonenumber = userAndPractitionerDto.getPhonenumber();
String sex = userAndPractitionerDto.getSex();
// 编辑 sys_user
BizUser bizUser = new BizUser();
bizUser.setNickName(nickName); // 昵称
bizUser.setEmail(userAndPractitionerDto.getEmail());// 邮箱
bizUser.setPhonenumber(phonenumber); // 电话
bizUser.setSex(sex); // 性别
bizUser.setStatus(userAndPractitionerDto.getStatus()); // 状态
bizUser.setRemark(userAndPractitionerDto.getRemark()); // 备注
iBizUserService.update(bizUser, new LambdaQueryWrapper<BizUser>().eq(BizUser::getUserId, userId));
// 先删除,再新增 sys_user_role
practitionerAppAppMapper.delUserRole(userId);
List<Long> 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.setId(practitionerId);
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.updateById(practitioner);
// 先删除,再新增 adm_practitioner_role
practitionerAppAppMapper.delPractitionerRole(practitionerId);
List<UserAndPractitionerChildDto> 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[] {"人员信息"}));
}
/**
* 删除用户及参与者 ; admin不允许删除
*
* @param userId 系统用户id
* @return 结果
*/
@Override
public R<?> delUserPractitioner(Long userId) {
if (1L == userId) {
return R.fail(null, "admin不允许删除");
}
iBizUserService.remove(new LambdaQueryWrapper<BizUser>().eq(BizUser::getUserId, userId));
practitionerAppAppMapper.delUserRole(userId);
Practitioner one =
iPractitionerService.getOne(new LambdaQueryWrapper<Practitioner>().eq(Practitioner::getUserId, userId));
Long practitionerId = one.getId();// 参与者id
iPractitionerService.removeById(practitionerId);
iPractitionerRoleService
.remove(new LambdaQueryWrapper<PractitionerRole>().eq(PractitionerRole::getPractitionerId, practitionerId));
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00005, new Object[] {"人员信息"}));
}
}

View File

@@ -3,11 +3,9 @@
*/
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.baomidou.mybatisplus.core.metadata.IPage;
import com.core.common.core.domain.R;
import com.openhis.web.basedatamanage.appservice.IPractitionerAppService;
import com.openhis.web.doctorstation.dto.UserAndPractitionerDto;
@@ -32,9 +30,64 @@ 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));
}
/**
* 查询用户及参与者详情
*
* @param userId 系统用户id
* @return 用户及参与者详情
*/
@GetMapping(value = "/user-practitioner-detail")
public R<?> getUserPractitionerPage(@RequestParam Long userId) {
UserAndPractitionerDto userAndPractitionerDto = new UserAndPractitionerDto();
userAndPractitionerDto.setUserId(userId);
IPage<UserAndPractitionerDto> userPractitionerPage =
practitionerAppService.getUserPractitionerPage(userAndPractitionerDto, "", 1, 1);
return R.ok(userPractitionerPage.getRecords().get(0));
}
/**
* 修改用户及参与者
*
* @param userAndPractitionerDto 用户及参与者dto
* @return 结果
*/
@PutMapping(value = "/user-practitioner")
public R<?> editUserPractitioner(@RequestBody UserAndPractitionerDto userAndPractitionerDto) {
return practitionerAppService.editUserPractitioner(userAndPractitionerDto);
}
/**
* 删除用户及参与者 ; admin不允许删除
*
* @param userId 系统用户id
* @return 结果
*/
@DeleteMapping(value = "/user-practitioner")
public R<?> delUserPractitioner(@RequestParam Long userId) {
return practitionerAppService.delUserPractitioner(userId);
}
}

View File

@@ -1,11 +1,53 @@
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<UserAndPractitionerDto> getUserPractitionerPage(@Param("page") Page<UserAndPractitionerDto> page,
@Param(Constants.WRAPPER) QueryWrapper<UserAndPractitionerDto> queryWrapper);
/**
* 查询子集合
*
* @param practitionerIdList 参与者id集合
* @return 子集合
*/
List<UserAndPractitionerChildDto> getChildList(@Param("practitionerIdList") List<Long> practitionerIdList);
/**
* 物理删除系统用户与角色的关系
*
* @param userId 系统用户id
*/
void delUserRole(@Param("userId") Long userId);
/**
* 物理删除参与者与业务角色的关系
*
* @param practitionerId 参与者id
*/
void delPractitionerRole(@Param("practitionerId") Long practitionerId);
}

View File

@@ -84,8 +84,8 @@ public class ChargeItemFormData {
this.statusEnum = ChargeItemStatus.BILLED.getValue();
this.contextEnum = EncounterClass.AMB.getValue();
this.occurrenceTime = new Date();
this.performerId = SecurityUtils.getLoginUser().getUserId();
this.entererId = SecurityUtils.getLoginUser().getUserId();
this.performerId = SecurityUtils.getLoginUser().getPractitionerId();
this.entererId = SecurityUtils.getLoginUser().getPractitionerId();
this.enteredDate = new Date();
this.serviceTable = CommonConstants.TableName.ADM_HEALTHCARE_SERVICE;
}

View File

@@ -12,7 +12,7 @@ import com.openhis.web.datadictionary.dto.MedicationManageUpDto;
public interface IItemDefinitionService {
/**
* 添加项目定价
* 添加药品的项目定价
*
* @param medicationManageUpDto 药品目录信息
* @param medicationDetail 药品信息

View File

@@ -10,6 +10,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +22,7 @@ import org.springframework.web.bind.annotation.RequestParam;
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.MessageUtils;
@@ -30,6 +32,7 @@ import com.openhis.administration.domain.Organization;
import com.openhis.administration.mapper.DeviceDefinitionMapper;
import com.openhis.administration.service.IDeviceDefinitionService;
import com.openhis.administration.service.IOrganizationService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.DeviceCategory;
import com.openhis.common.enums.OrganizationType;
@@ -43,6 +46,8 @@ import com.openhis.web.datadictionary.dto.DeviceManageDto;
import com.openhis.web.datadictionary.dto.DeviceManageInitDto;
import com.openhis.web.datadictionary.dto.DeviceManageSelParam;
import com.openhis.web.datadictionary.dto.DeviceManageUpDto;
import com.openhis.web.datadictionary.mapper.DeviceManageMapper;
import com.openhis.web.doctorstation.dto.AdviceBaseDto;
/**
* 器材目录 impl
@@ -62,6 +67,9 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService {
@Autowired
private IOrganizationService organizationService;
@Resource
DeviceManageMapper deviceManageMapper;
/**
* 器材目录初始化
*
@@ -106,15 +114,23 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService {
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
// // 构建查询条件
// QueryWrapper<DeviceDefinition> queryWrapper = HisQueryUtils.buildQueryWrapper(deviceManageSelParam, searchKey,
// new HashSet<>(Arrays.asList("bus_no", "name", "py_str", "wb_str")), request);
// // 设置排序
// queryWrapper.orderByAsc("bus_no");
//
// // 分页查询
// Page<DeviceManageDto> deviceManagePage =
// HisPageUtils.selectPage(deviceDefinitionMapper, queryWrapper, pageNo, pageSize, DeviceManageDto.class);
// 构建查询条件
QueryWrapper<DeviceDefinition> queryWrapper = HisQueryUtils.buildQueryWrapper(deviceManageSelParam, searchKey,
QueryWrapper<DeviceManageDto> queryWrapper = HisQueryUtils.buildQueryWrapper(deviceManageSelParam, searchKey,
new HashSet<>(Arrays.asList("bus_no", "name", "py_str", "wb_str")), request);
// 设置排序
queryWrapper.orderByAsc("bus_no");
// 分页查询
Page<DeviceManageDto> deviceManagePage =
HisPageUtils.selectPage(deviceDefinitionMapper, queryWrapper, pageNo, pageSize, DeviceManageDto.class);
IPage<DeviceManageDto> deviceManagePage =
deviceManageMapper.getDevicePage(new Page<>(pageNo, pageSize), queryWrapper);
deviceManagePage.getRecords().forEach(e -> {
// 高值器材标志枚举类回显赋值
@@ -125,8 +141,10 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService {
e.setYbMatchFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getYbMatchFlag()));
// 过敏标记枚举类回显赋值
e.setAllergenFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getAllergenFlag()));
//器材分类
// 器材分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(DeviceCategory.class, e.getCategoryEnum()));
// 器材状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, e.getStatusEnum()));
});
// 返回【器材目录列表DTO】分页

View File

@@ -3,6 +3,7 @@ package com.openhis.web.datadictionary.appservice.impl;
import java.util.ArrayList;
import java.util.List;
import com.core.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -47,8 +48,9 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
.setStatusEnum(PublicationStatus.ACTIVE.getValue())
.setInstanceTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION)
.setInstanceId(medicationDetail.getMedicationDefId()).setEffectiveStart(DateUtils.getNowDate())
// todo 机构ID后续修改
.setOrgId(1L)
//机构ID
// .setOrgId(SecurityUtils.getLoginUser().getOrgId())
.setOrgId(1l)//todo 没数据先写死
// 财务类别
.setTypeCode(medicationManageUpDto.getMinimalFee())
// 医保类别
@@ -64,25 +66,25 @@ public class ItemDefinitionServiceImpl implements IItemDefinitionService {
.setConditionCode(
medicationManageUpDto.getDoseUnitCode_dictText() + "," + medicationManageUpDto.getLotNumber())
// 购入价
.setAmount(medicationManageUpDto.getPurchasePrice()).setPriority(0);
.setAmount(medicationManageUpDto.getPurchasePrice());
ChargeItemDefDetail chargeItemDefDetail2 = new ChargeItemDefDetail();
chargeItemDefDetail1.setDefinitionId(chargeItemDefinition.getId())
chargeItemDefDetail2.setDefinitionId(chargeItemDefinition.getId())
// 单位+批次unit,pici 用,符号拼装
.setConditionCode(
medicationManageUpDto.getDoseUnitCode_dictText() + "," + medicationManageUpDto.getLotNumber())
// 零售价
.setAmount(medicationManageUpDto.getRetailPrice()).setPriority(1);
.setAmount(medicationManageUpDto.getRetailPrice());
shargeItemDefDetails.add(chargeItemDefDetail2);
ChargeItemDefDetail chargeItemDefDetail3 = new ChargeItemDefDetail();
chargeItemDefDetail1.setDefinitionId(chargeItemDefinition.getId())
chargeItemDefDetail3.setDefinitionId(chargeItemDefinition.getId())
// 单位+批次unit,pici 用,符号拼装
.setConditionCode(
medicationManageUpDto.getDoseUnitCode_dictText() + "," + medicationManageUpDto.getLotNumber())
// 最高零售价
.setAmount(medicationManageUpDto.getMaximumRetailPrice()).setPriority(2);
.setAmount(medicationManageUpDto.getMaximumRetailPrice());
shargeItemDefDetails.add(chargeItemDefDetail3);

View File

@@ -164,10 +164,31 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, e.getStatusEnum()));
// 权限限制
e.setRestrictedEnum_enumText(EnumUtils.getInfoByValue(PermissionLimit.class, e.getRestrictedEnum()));
// 活动标记
// e.setActiveFlag_enumText(EnumUtils.getInfoByValue(AccountStatus.class, e.getActiveFlag()));
// 是否为活性
e.setActiveFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getActiveFlag()));
// 医保是否对码
e.setYbMatchFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getYbMatchFlag()));
//是否皮试
e.setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getSkinTestFlag()));;
//是否为注射药物
e.setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getInjectFlag()));
//是否限制使用
e.setRestrictedFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getRestrictedFlag()));
//儿童用药标志
e.setChildrenFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getChildrenFlag()));
// 适用范围
// e.setDomainEnum_enumText(EnumUtils.getInfoByValue(ApplicableScope.class, e.getDomainEnum()));
e.setDomainEnum_enumText(EnumUtils.getInfoByValue(ApplicableScope.class, e.getDomainEnum()));
// 是否自制
e.setSelfFlag_enumText(EnumUtils.getInfoByValue(ApplicableScope.class, e.getSelfFlag()));
// 是否抗生素
e.setAntibioticFlag_enumText(EnumUtils.getInfoByValue(ApplicableScope.class, e.getAntibioticFlag()));
// 基药标识
e.setBasicFlag_enumText(EnumUtils.getInfoByValue(ApplicableScope.class, e.getBasicFlag()));
// // 活动标记
// e.setActiveFlag_enumText(EnumUtils.getInfoByValue(AccountStatus.class, e.getActiveFlag()));
});
// 返回【药品录列表DTO】分页

View File

@@ -70,7 +70,7 @@ public class MedicationManageController {
* @return
*/
@GetMapping("/information-one")
public R<?> getMedicationOne(@PathVariable("id") Long id) {
public R<?> getMedicationOne(@RequestParam Long id) {
return medicationManageAppService.getMedicationOne(id);
}

View File

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
import com.openhis.common.enums.DeviceCategory;
import com.openhis.common.enums.PublicationStatus;
@@ -79,13 +80,20 @@ public class DeviceManageDto {
private String ybMatchFlag_enumText;
/** 状态 */
private PublicationStatus statusEnum;
private Integer statusEnum;
private String statusEnum_enumText;
/** 生产厂家 */
private Long manufacturerId;
/** 生产厂商文本 */
private Long manufacturerText;
/** 供应商 */
@JsonSerialize(using = ToStringSerializer.class)
@Dict(dictTable = "adm_supplier",dictCode = "id",dictText = "name")
private Long supplyId;
private String supplyId_dictText;
/** 说明 */
private String description;
@@ -94,7 +102,10 @@ public class DeviceManageDto {
private String jurisdiction;
/** 执行科室 */
@Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long ruleId;
private String ruleId_dictText;
/** 器材版本 */
private String version;
@@ -105,4 +116,8 @@ public class DeviceManageDto {
/** 过敏标记 */
private Integer allergenFlag;
private String allergenFlag_enumText;
/** 售价 */
private BigDecimal price;
}

View File

@@ -43,7 +43,10 @@ public class DeviceManageUpDto {
/** 器材分类 */
@NotNull(message = "器材分类不能为空")
private DeviceCategory categoryEnum;
// private DeviceCategory categoryEnum;
private Integer categoryEnum;
private String categoryEnum_enumText;
/** 器材种类 */
@NotBlank(message = "器材种类不能为空")
@@ -133,4 +136,23 @@ public class DeviceManageUpDto {
/** 过敏标记 */
// @NotNull(message = "过敏标记不能为空")
private Integer allergenFlag;
/** 购入价 */
@NotNull(message = "购入价不能为空")
private BigDecimal purchasePrice;
/** 零售价 */
@NotNull(message = "零售价不能为空")
private BigDecimal retailPrice;
/** 最高零售价 */
@NotNull(message = "最高零售价不能为空")
private BigDecimal maximumRetailPrice;
/** 最小费用 */
private String minimalFee;
/** 医保类别 */
private String ybType;
}

View File

@@ -9,6 +9,7 @@ import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 诊疗目录分页检索
@@ -80,4 +81,8 @@ public class DiagnosisTreatmentDto {
/** 所在位置 */
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
/** 售价 */
private BigDecimal price;
}

View File

@@ -6,7 +6,6 @@ import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
import com.openhis.common.enums.PublicationStatus;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -34,13 +33,13 @@ public class MedicationManageDto {
private String statusEnum_enumText;
/** 所属科室 */
@Dict(dictTable = "adm_organization",dictCode = "id",dictText = "name")
@Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;
private String orgId_dictText;
/** 所在位置 */
@Dict(dictTable = "adm_location",dictCode = "id",dictText = "name")
@Dict(dictTable = "adm_location", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
private String locationId_dictText;
@@ -83,7 +82,9 @@ public class MedicationManageDto {
private BigDecimal dose;
/** 剂量单位 */
@Dict(dictCode = "unit_code")
private String doseUnitCode;
private String doseUnitCode_dictText;
/** 单次最大剂量 */
private BigDecimal maxUnit;
@@ -95,7 +96,9 @@ public class MedicationManageDto {
private BigDecimal usageLimit;
/** DDD值 */
@Dict(dictCode = "ddd_code")
private String dddCode;
private String dddCode_dictText;
/** DDD单位 */
@Dict(dictCode = "unit_code")
@@ -149,22 +152,19 @@ public class MedicationManageDto {
/** 所含耗材 */
private String comprisedText;
/** 成分 */
private String ingredient;
/** 拆零比 */
private BigDecimal partPercent;
/** 剂量形式 */
private Integer doseFrom;
private String doseFrom_enumText;
/** 批准文号 */
private String approvalNumber;
/** 医保是否对码 */
@Dict(dictCode = "sys_yes_no")
private Integer ybMatchFlag;
private String ybMatchFlag_dictText;
private String ybMatchFlag_enumText;;
/** 医保编码 */
private String ybNo;
@@ -173,14 +173,12 @@ public class MedicationManageDto {
private String pharmacologyCategoryCode;
/** 是否皮试 */
@Dict(dictCode = "sys_yes_no")
private Integer skinTestFlag;
private String skinTestFlag_dictText;
private String skinTestFlag_enumText;
/** 是否为注射药物 */
@Dict(dictCode = "sys_yes_no")
private Integer injectFlag;
private String injectFlag_dictText;
private String injectFlag_enumText;
/** 生产厂家 */
@JsonSerialize(using = ToStringSerializer.class)
@@ -188,71 +186,75 @@ public class MedicationManageDto {
/** 供应商 */
@JsonSerialize(using = ToStringSerializer.class)
@Dict(dictTable = "adm_supplier",dictCode = "id",dictText = "name")
@Dict(dictTable = "adm_supplier", dictCode = "id", dictText = "name")
private Long supplyId;
private String supplyId_dictText;
/** 是否限制使用 */
@Dict(dictCode = "sys_yes_no")
private Integer restrictedFlag;
private String restrictedFlag_dictText;
private String restrictedFlag_enumText;
/** 限制使用范围 */
private String restrictedScope;
/** 儿童用药标志 */
@Dict(dictCode = "sys_yes_no")
private Integer childrenFlag;
private String childrenFlag_dictText;
private String childrenFlag_enumText;
/** 产品特性 */
private Integer characteristic;
private String characteristic_enumText;
/** 贯标国家编码 */
private String nationalDrugCode;
/** 拆分属性 */
private String partAttribute;
private Integer partAttributeEnum;
private String partAttributeEnum_enumText;
/** 抗生素分类 */
@Dict(dictCode = "antibiotic_type_code")
private String antibioticCode;
private String antibioticCode_dictText;
/** 权限限制 */
private Integer restrictedEnum;
private String restrictedEnum_enumText;
/** 是否自制 */
@Dict(dictCode = "sys_yes_no")
private Integer selfFlag;
private String selfFlag_dictText;
private String selfFlag_enumText;
/** 是否抗生素 */
@Dict(dictCode = "sys_yes_no")
private Integer antibioticFlag;
private String antibioticFlag_dictText;
private String antibioticFlag_enumText;
/** 基药标识 */
@Dict(dictCode = "sys_yes_no")
private Integer basicFlag;
private String basicFlag_dictText;
private String basicFlag_enumText;
/** 生产厂家名称 */
private String manufacturerName;
/** 常规单位 */
@Dict(dictCode = "unit_code")
private String baseUnitCode;
private String baseUnitCode_dictText;
/** 当前库存数量(常规单位) */
@Dict(dictCode = "unit_code")
private String baseQuantity;
private String baseQuantity_dictText;
/** 当前库存数量(最小单位数量) */
private String minQuantity;
/** 售价 */
private BigDecimal price;
/** 单次最小用药频次 */
private String minRateCode;
/** 单次最大用药频次 */
private String maxRateCode;
}

View File

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.util.Date;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -177,12 +178,15 @@ public class MedicationManageUpDto {
private Integer characteristic;
/** 购入价 */
@NotNull(message = "购入价不能为空")
private BigDecimal purchasePrice;
/** 零售价 */
@NotNull(message = "零售价不能为空")
private BigDecimal retailPrice;
/** 最高零售价 */
@NotNull(message = "最高零售价不能为空")
private BigDecimal maximumRetailPrice;
/** 医保类别 */
@@ -191,4 +195,35 @@ public class MedicationManageUpDto {
/** 最小费用 */
private String minimalFee;
/** 单次最小用药频次 */
private String minRateCode;
/** 单次最大用药频次 */
private String maxRateCode;
/** 药品状态 */
private Integer statusEnum;
/** 拆分属性 */
private Integer partAttributeEnum;
/** 贯标国家编码 */
private String nationalDrugCode;
/** 是否抗生素 */
private Integer antibioticFlag;
/** 是否自制 */
private Integer selfFlag;
/** DDD值 */
private String dddCode;
/** DDD单位 */
private String dddUnitCode;
/** 用量限定 */
private BigDecimal usageLimit;
/** 系统类别???? */
}

View File

@@ -0,0 +1,30 @@
package com.openhis.web.datadictionary.mapper;
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.datadictionary.dto.DeviceManageDto;
import com.openhis.web.outpatientmanage.dto.OutpatientInfusionPatientDto;
import org.apache.ibatis.annotations.Param;
/**
* 器材目录
*
* @author Wuser
* @date 2025/3/26
*/
public interface DeviceManageMapper {
/**
* 器材目录分页查询
*
* @param page 分页参数
* @param queryWrapper 查询条件
* @return 器材记录
*/
IPage<DeviceManageDto> getDevicePage(
@Param("page") Page<DeviceManageDto> page,
@Param(Constants.WRAPPER) QueryWrapper<DeviceManageDto> queryWrapper);
}

View File

@@ -2,6 +2,7 @@ package com.openhis.web.doctorstation.dto;
import java.math.BigDecimal;
import com.core.common.utils.SecurityUtils;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.enums.EncounterClass;
@@ -126,8 +127,7 @@ public class AdviceSaveDto {
this.statusEnum = RequestStatus.DRAFT.getValue();
this.categoryEnum = EncounterClass.AMB.getValue();
this.therapyEnum = TherapyTimeType.TEMPORARY.getValue();
// TODO: 应该从当前登录账号获取参与者id,现在没有
// this.practitionerId
this.practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
}
}

View File

@@ -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;
}

View File

@@ -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<Long> roleIds;
/**
* 角色code集合
* 集合
*/
private List<String> roleCodes;
private List<UserAndPractitionerChildDto> childList;
}

View File

@@ -0,0 +1,71 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.appservice;
import javax.servlet.http.HttpServletRequest;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.openhis.web.inventorymanage.dto.*;
/**
* 采购入库明细查询 service
*
* @author
* @date 2025-03-10
*/
public interface IInventoryDetailsAppService {
/**
* 采购入库查询
*
* @param purchaseInSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 采购入库查询分页列表
*/
IPage<PurchaseInDetailDto> purchaseInGetPage(PurchaseInSearchParam purchaseInSearchParam, String searchKey,
Integer pageNo, Integer pageSize, HttpServletRequest request);
/**
* 领用出库查询
*
* @param requisitionOutSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 领用出库查询分页列表
*/
IPage<RequisitionOutDetailDto> requisitionOutGetPage(RequisitionOutSearchParam requisitionOutSearchParam,
String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request);
/**
* 商品调拨查询
*
* @param requisitionOutSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 商品调拨查询分页列表
*/
IPage<InventoryTransferDetailDto> inventoryTransferGetPage(RequisitionOutSearchParam requisitionOutSearchParam,
String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request);
/**
* 商品盘点查询
*
* @param requisitionOutSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 商品盘点查询分页列表
*/
IPage<InventoryStockTakeDetailDto> inventoryStockTakeGetPage(RequisitionOutSearchParam requisitionOutSearchParam,
String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request);
}

View File

@@ -0,0 +1,133 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.appservice.impl;
import java.util.Arrays;
import java.util.HashSet;
import javax.servlet.http.HttpServletRequest;
import com.openhis.web.inventorymanage.dto.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
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.openhis.common.utils.HisQueryUtils;
import com.openhis.web.inventorymanage.appservice.IInventoryDetailsAppService;
import com.openhis.web.inventorymanage.mapper.InventoryDetailsMapper;
/**
* 采购入库明细查询 impl
*
* @author
* @date 2025-03-10
*/
@Service
public class InventoryDetailsAppServiceImpl implements IInventoryDetailsAppService {
@Autowired
private InventoryDetailsMapper inventoryDetailsMapper;
/**
* 采购入库明细查询
*
* @param purchaseInSearchParam 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 采购入库明细分页列表
*/
@Override
public IPage<PurchaseInDetailDto> purchaseInGetPage(PurchaseInSearchParam purchaseInSearchParam, String searchKey,
Integer pageNo, Integer pageSize, HttpServletRequest request) {
// 构建查询条件
// QueryWrapper<SupplyRequest> queryWrapper =
// HisQueryUtils.buildQueryWrapper(inventorySearchParam, searchKey, searchFields, request);
// 查询入库单据分页列表
// Page<InventoryReceiptPageDto> inventoryReceiptPage = purchaseInventoryMapper.selectInventoryReceiptPage(
// new Page<>(pageNo, pageSize), queryWrapper, SupplyType.PURCHASE_INVENTORY.getValue());
// return R.ok(inventoryReceiptPage);
QueryWrapper<PurchaseInSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(purchaseInSearchParam,
searchKey, new HashSet<>(Arrays.asList("bus_no","item_name","item_no")), request);
Page<PurchaseInDetailDto> purchaseInInfo =
inventoryDetailsMapper.selectPurchaseInDetailsPage(new Page<>(pageNo, pageSize), queryWrapper);
return purchaseInInfo;
}
/**
* 领用出库明细查询
*
* @param requisitionOutSearchParam 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 领用出库明细分页列表
*/
@Override
public IPage<RequisitionOutDetailDto> requisitionOutGetPage(RequisitionOutSearchParam requisitionOutSearchParam, String searchKey,
Integer pageNo, Integer pageSize, HttpServletRequest request) {
QueryWrapper<RequisitionOutSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(requisitionOutSearchParam,
searchKey, new HashSet<>(Arrays.asList("bus_no","item_name","item_no")), request);
Page<RequisitionOutDetailDto> requisitionOutInfo =
inventoryDetailsMapper.selectRequisitionOutDetailsPage(new Page<>(pageNo, pageSize), queryWrapper);
return requisitionOutInfo;
}
/**
* 商品调拨明细查询
*
* @param requisitionOutSearchParam 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 商品调拨明细分页列表
*/
@Override
public IPage<InventoryTransferDetailDto> inventoryTransferGetPage(RequisitionOutSearchParam requisitionOutSearchParam, String searchKey,
Integer pageNo, Integer pageSize, HttpServletRequest request) {
QueryWrapper<RequisitionOutSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(requisitionOutSearchParam,
searchKey, new HashSet<>(Arrays.asList("bus_no","item_name","item_no")), request);
Page<InventoryTransferDetailDto> inventoryTransferInfo =
inventoryDetailsMapper.selectInventoryTransferDetailsPage(new Page<>(pageNo, pageSize), queryWrapper);
return inventoryTransferInfo;
}
/**
* 商品调拨明细查询
*
* @param requisitionOutSearchParam 查询条件
* @param searchKey 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
* @return 商品调拨明细分页列表
*/
@Override
public IPage<InventoryStockTakeDetailDto> inventoryStockTakeGetPage(RequisitionOutSearchParam requisitionOutSearchParam, String searchKey,
Integer pageNo, Integer pageSize, HttpServletRequest request) {
QueryWrapper<RequisitionOutSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(requisitionOutSearchParam,
searchKey, new HashSet<>(Arrays.asList("bus_no","item_name","item_no")), request);
Page<InventoryStockTakeDetailDto> inventoryStockTakeInfo =
inventoryDetailsMapper.selectInventoryStockTakeDetailsPage(new Page<>(pageNo, pageSize), queryWrapper);
return inventoryStockTakeInfo;
}
}

View File

@@ -0,0 +1,111 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.appservice.IInventoryDetailsAppService;
import com.openhis.web.inventorymanage.dto.PurchaseInSearchParam;
import com.openhis.web.inventorymanage.dto.RequisitionOutSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 库存相关明细查询 controller
*
* @author
* @date 2025-03-10
*/
@RestController
@RequestMapping("/inventory-manage-details")
@Slf4j
public class InventoryDetailsController {
@Autowired
private IInventoryDetailsAppService inventoryDetailsAppService;
/**
* 采购入库明细查询
*
* @param purchaseInSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 采购入库分页列表
*/
@GetMapping(value = "/purchase-in")
public R<?> purchaseInQueryGetPage(PurchaseInSearchParam purchaseInSearchParam,
@RequestParam(name = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return R.ok(
inventoryDetailsAppService.purchaseInGetPage(purchaseInSearchParam, searchKey, pageNo, pageSize, request));
}
/**
* 领用出库明细查询
*
* @param requisitionOutSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 采购入库分页列表
*/
@GetMapping(value = "/requisition-out")
public R<?> RequisitionOutQueryGetPage(RequisitionOutSearchParam requisitionOutSearchParam,
@RequestParam(name = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return R.ok(inventoryDetailsAppService.requisitionOutGetPage(requisitionOutSearchParam, searchKey, pageNo,
pageSize, request));
}
/**
* 商品调拨明细查询
*
* @param requisitionOutSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 商品调拨分页列表
*/
@GetMapping(value = "/inventory-transfer")
public R<?> InventoryTransferQueryGetPage(RequisitionOutSearchParam requisitionOutSearchParam,
@RequestParam(name = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return R.ok(inventoryDetailsAppService.inventoryTransferGetPage(requisitionOutSearchParam, searchKey, pageNo,
pageSize, request));
}
/**
* 商品盘点明细查询
*
* @param requisitionOutSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 商品盘点分页列表
*/
@GetMapping(value = "/inventory-stock-take")
public R<?> InventoryStockTakeQueryGetPage(RequisitionOutSearchParam requisitionOutSearchParam,
@RequestParam(name = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return R.ok(inventoryDetailsAppService.inventoryStockTakeGetPage(requisitionOutSearchParam, searchKey, pageNo,
pageSize, request));
}
}

View File

@@ -0,0 +1,93 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.sun.jna.platform.unix.solaris.LibKstat;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 商品盘点
*
* @author
* @date 2025-03-15
*/
@Data
@Accessors(chain = true)
public class InventoryStockTakeDetailDto implements Serializable {
private static final long serialVersionUID = 1L;
/** ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 单据号 */
private String busNo;
/** 状态 */
private String statusEnum;
/** 项目类型 */
private String itemTable;
/** 物品编码 */
private Long itemNo;
/** 项目名称 */
private String itemName;
/** 项目规格 */
private String itemVolume;
/** 产品批号 */
private String lotNumber;
/** 厂家产地 */
private String manufacturerId;
/** 物品计量单位 */
private String unitCode;
/** 盘前数量 */
private BigDecimal itemQuantity;
/** 盘后数量 */
private BigDecimal itemQuantity1;
/** 盈亏数量 */
/** 盈亏原因 */
/** 目的仓库类型 */
private Integer purposeTypeEnum;
/** 目的仓库 */
private String purposeName;
/** 目的仓位 */
private String purposeStoreName;
/** 审批时间 */
private Date approvalTime;
/** 申请人 */
private String applicantName;
/** 审批人 */
private String approveName;
/** 租户ID */
private Integer tenantId;
}

View File

@@ -0,0 +1,102 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.sun.jna.platform.unix.solaris.LibKstat;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 商品调拨
*
* @author
* @date 2025-03-15
*/
@Data
@Accessors(chain = true)
public class InventoryTransferDetailDto implements Serializable {
private static final long serialVersionUID = 1L;
/** ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 单据号 */
private String busNo;
/** 状态 */
private String statusEnum;
/** 项目类型 */
private String itemTable;
/** 物品编码 */
private Long itemNo;
/** 项目名称 */
private String itemName;
/** 项目规格 */
private String itemVolume;
/** 产品批号 */
private String lotNumber;
/** 厂家产地 */
private String manufacturerId;
/** 调拨数量 */
private BigDecimal itemQuantity;
/** 物品计量单位 */
private String unitCode;
/** 采购单价 */
private BigDecimal price;
/** 合计金额 总价 */
private BigDecimal totalPrice;
/** 源仓库类型 */
private Integer sourceTypeEnum;
/** 源仓库 */
private String sourceName;
/** 源仓位 */
private String sourceStoreName;
/** 目的仓库类型 */
private Integer purposeTypeEnum;
/** 目的仓库 */
private String purposeName;
/** 目的仓位 */
private String purposeStoreName;
/** 审批时间 */
private Date approvalTime;
/** 有效期至 */
private Date occurrenceTime;
/** 申请人 */
private String applicantName;
/** 审批人 */
private String approveName;
/** 租户ID */
private Integer tenantId;
}

View File

@@ -0,0 +1,89 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 采购入库
*
* @author
* @date 2025-03-10
*/
@Data
@Accessors(chain = true)
public class PurchaseInDetailDto implements Serializable {
private static final long serialVersionUID = 1L;
/** ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 单据号 */
private String busNo;
/** 状态 */
private String statusEnum;
/** 项目类型 */
private String itemTable;
/** 物品编码 */
private Long itemNo;
/** 项目名称 */
private String itemName;
/** 项目规格 */
private String itemVolume;
/** 产品批号 */
private String lotNumber;
/** 供应商 */
private String supName;
/** 数量 */
private BigDecimal itemQuantity;
/** 单价 */
private BigDecimal price;
/** 总价 */
private BigDecimal totalPrice;
/** 物品计量单位 */
private String unitCode;
/** 目的仓库 */
private String locName;
/** 目的仓位 */
private String locstoreName;
/** 审批时间 */
private Date approvalTime;
/** 期望时间 */
private Date occurrenceTime;
/** 申请人 */
private String applicantName;
/** 审批人 */
private String approverName;
/** 租户ID */
private Integer tenantId;
}

View File

@@ -0,0 +1,35 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.dto;
import java.io.Serializable;
import org.hibernate.validator.constraints.Length;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 采购入库分页查询条件
*
* @author
* @date 2025-03-10
*/
@Data
@Accessors(chain = true)
public class PurchaseInSearchParam implements Serializable {
/** 单据号 */
@Length(max = 255)
private String busNo;
/** 项目编码 */
@Length(max = 255)
private String id;
/** 项目类型 */
// @Length(max = 255)
// private String busNo;
}

View File

@@ -0,0 +1,89 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 领用出库
*
* @author
* @date 2025-03-15
*/
@Data
@Accessors(chain = true)
public class RequisitionOutDetailDto implements Serializable {
private static final long serialVersionUID = 1L;
/** ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 单据号 */
private String busNo;
/** 状态 */
private String statusEnum;
/** 项目类型 */
private String itemTable;
/** 物品编码 */
private Long itemNo;
/** 项目名称 */
private String itemName;
/** 项目规格 */
private String itemVolume;
/** 项目规格 */
private String itemId;
/** 数量 */
private BigDecimal itemQuantity;
/** 物品计量单位 */
private String unitCode;
/** 产品批号 */
private String lotNumber;
/** 采购批次流水号 */
private String xxxNo;
/** 目的仓库 */
private String locName;
/** 目的仓位 */
private String locstoreName;
/** 制单时间 */
private Date applyTime;
/** 审批时间 */
private Date approvalTime;
/** 领用部门 */
private String xxxxxOrg;
/** 申请人 */
private String applicantName;
/** 审批人 */
private String approverName;
/** 租户ID */
private Integer tenantId;
}

View File

@@ -0,0 +1,36 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.dto;
import java.io.Serializable;
import java.util.Date;
import org.hibernate.validator.constraints.Length;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 领用出库分页查询条件
*
* @author
* @date 2025-03-15
*/
@Data
@Accessors(chain = true)
public class RequisitionOutSearchParam implements Serializable {
/** 单据号 */
@Length(max = 255)
private String busNo;
/** 项目编码 */
@Length(max = 255)
private String id;
/** 项目类型 */
// @Length(max = 255)
// private String busNo;
}

View File

@@ -0,0 +1,62 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.inventorymanage.mapper;
import com.openhis.web.inventorymanage.dto.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* 采购入库查询用 mapper
*
* @author
* @date 2025-03-10
*/
@Repository
public interface InventoryDetailsMapper {
/**
* 查询采购入库分页列表
*
* @param page 分页
* @param queryWrapper 查询条件
* @return 采购入库分页列表
*/
Page<PurchaseInDetailDto> selectPurchaseInDetailsPage(@Param("page") Page<PurchaseInDetailDto> page,
@Param(Constants.WRAPPER) QueryWrapper<PurchaseInSearchParam> queryWrapper);
/**
* 查询领用出库分页列表
*
* @param page 分页
* @param queryWrapper 查询条件
* @return 领用出库分页列表
*/
Page<RequisitionOutDetailDto> selectRequisitionOutDetailsPage(@Param("page") Page<RequisitionOutDetailDto> page,
@Param(Constants.WRAPPER) QueryWrapper<RequisitionOutSearchParam> queryWrapper);
/**
* 查询商品调拨分页列表
*
* @param page 分页
* @param queryWrapper 查询条件
* @return 商品调拨分页列表
*/
Page<InventoryTransferDetailDto> selectInventoryTransferDetailsPage(@Param("page") Page<InventoryTransferDetailDto> page,
@Param(Constants.WRAPPER) QueryWrapper<RequisitionOutSearchParam> queryWrapper);
/**
* 查询商品盘点分页列表
*
* @param page 分页
* @param queryWrapper 查询条件
* @return 商品盘点分页列表
*/
Page<InventoryStockTakeDetailDto> selectInventoryStockTakeDetailsPage(@Param("page") Page<InventoryTransferDetailDto> page,
@Param(Constants.WRAPPER) QueryWrapper<RequisitionOutSearchParam> queryWrapper);
}

View File

@@ -0,0 +1,212 @@
<?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.openhis.web.inventorymanage.mapper.InventoryDetailsMapper">
<select id="selectPurchaseInDetailsPage"
resultType="com.openhis.web.inventorymanage.dto.PurchaseInDetailDto">
SELECT T10.id,
T10.bus_no,
T10.status_enum,
T10.item_table,
T10.item_no,
T10.item_name,
T10.item_volume,
T10.lot_number,
T10.sup_name,
T10.item_quantity,
T10.price,
T10.total_price,
T10.unit_code,
T10.loc_name,
T10.locstore_name,
T10.approval_time,
T10.occurrence_time,
T10.applicant_name,
T10.approver_name,
T10.tenant_id
FROM (SELECT T1.id,
T1.bus_no,
CASE T1.status_enum WHEN 2 THEN '已入库' ELSE '未入库' END AS status_enum,
CASE T1.item_table
WHEN 'med_medication_definition' THEN '药品'
WHEN 'adm_device' THEN '设备' END AS item_table,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T2.bus_no
WHEN T1.item_table = 'adm_device' THEN T4.bus_no END AS item_no,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T2.name
WHEN T1.item_table = 'adm_device' THEN T4.name END AS item_name,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T3.total_volume
WHEN T1.item_table = 'adm_device' THEN T4.device_specifications END AS item_volume,
T1.lot_number,
T4.name AS sup_name,
T1.item_quantity,
T1.price,
T1.total_price,
T1.unit_code,
T6.name AS loc_name,
T7.name AS locstore_name,
T1.approval_time,
T1.occurrence_time,
T8.name AS applicant_name,
T9.name AS approver_name,
T1.tenant_id
FROM wor_supply_request AS T1
LEFT JOIN med_medication_definition AS T2 ON T1.item_id = T2.id
LEFT JOIN med_medication AS T3 ON T1.item_id = T3.medication_def_id
LEFT JOIN adm_device AS T4 ON T1.item_id = T4.id
LEFT JOIN adm_supplier AS T5 ON T1.supplier_id = T5.id
LEFT JOIN adm_location AS T6 ON T1.purpose_location_id = T6.id
LEFT JOIN adm_location AS T7 ON T1.purpose_location_store_id = T7.id
LEFT JOIN adm_practitioner AS T8 ON T1.applicant_id = T8.id
LEFT JOIN adm_practitioner AS T9 ON T1.approver_id = T9.id
WHERE T1.delete_flag = '0'
ORDER BY T1.bus_no desc) AS T10
${ew.customSqlSegment}
</select>
<select id="selectRequisitionOutDetailsPage"
resultType="com.openhis.web.inventorymanage.dto.RequisitionOutDetailDto">
SELECT T10.id,
T10.bus_no,
T10.status_enum,
T10.item_table,
T10.item_no,
T10.item_name,
T10.item_volume,
T10.item_id,
T10.item_quantity,
T10.unit_code,
T10.lot_number,
T10.loc_name,
T10.locstore_name,
T10.apply_time,
T10.approval_time,
T10.applicant_name,
T10.approver_name,
T10.tenant_id
FROM (SELECT T1.id,
T1.bus_no,
CASE T1.status_enum WHEN 2 THEN '已出库' ELSE '未出库' END AS status_enum,
CASE T1.item_table
WHEN 'med_medication_definition' THEN '药品'
WHEN 'adm_device' THEN '设备' END AS item_table,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T2.bus_no
WHEN T1.item_table = 'adm_device' THEN T4.bus_no END AS item_no,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T2.name
WHEN T1.item_table = 'adm_device' THEN T4.name END AS item_name,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T3.total_volume
WHEN T1.item_table = 'adm_device' THEN T4.device_specifications END AS item_volume,
T1.item_id,
T1.item_quantity,
T1.unit_code,
T1.lot_number,
T6.name AS loc_name,
T7.name AS locstore_name,
T1.apply_time,
T1.approval_time,
T8.name AS applicant_name,
T9.name AS approver_name,
T1.tenant_id
FROM wor_supply_request AS T1
LEFT JOIN med_medication_definition AS T2 ON T1.item_id = T2.id
LEFT JOIN med_medication AS T3 ON T1.item_id = T3.medication_def_id
LEFT JOIN adm_device AS T4 ON T1.item_id = T4.id
LEFT JOIN adm_supplier AS T5 ON T1.supplier_id = T5.id
LEFT JOIN adm_location AS T6 ON T1.purpose_location_id = T6.id
LEFT JOIN adm_location AS T7 ON T1.purpose_location_store_id = T7.id
LEFT JOIN adm_practitioner AS T8 ON T1.applicant_id = T8.id
LEFT JOIN adm_practitioner AS T9 ON T1.approver_id = T9.id
WHERE T1.delete_flag = '0'
ORDER BY T1.bus_no desc) AS T10
${ew.customSqlSegment}
</select>
<select id="selectInventoryTransferDetailsPage"
resultType="com.openhis.web.inventorymanage.dto.InventoryTransferDetailDto">
SELECT T10.id,
T10.bus_no,
T10.status_enum,
T10.item_table,
T10.item_no,
T10.item_name,
T10.item_volume,
T10.item_id,
T10.lot_number,
T10.manufacturer_id,
T10.item_quantity,
T10.unit_code,
T10.price,
T10.total_price,
T10.source_type_enum,
T10.source_name,
T10.source_store_name,
T10.purpose_type_enum,
T10.purpose_name,
T10.purpose_store_name,
T10.approval_time,
T10.occurrence_time,
T10.applicant_name,
T10.approve_name,
T10.tenant_id
FROM (SELECT T1.id,
T1.bus_no,
CASE T1.status_enum WHEN 2 THEN '已调拨' ELSE '未调拨' END AS status_enum,
CASE T1.item_table
WHEN 'med_medication_definition' THEN '药品'
WHEN 'adm_device' THEN '设备' END AS item_table,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T2.bus_no
WHEN T1.item_table = 'adm_device' THEN T4.bus_no END AS ite m_no,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T2.name
WHEN T1.item_table = 'adm_device' THEN T4.name END AS item_name,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T3.total_volume
WHEN T1.item_table = 'adm_device' THEN T4.device_specifications END AS item_volume,
T1.item_id,
T1.lot_number,
CASE
WHEN T1.item_table = 'med_medication_definition' THEN T3.manufacturer_id
WHEN T1.item_table = 'adm_device' THEN T13.manufacturer_id END AS manufacturer_id,
T1.item_quantity,
T1.unit_code,
T1.price,
T1.total_price,
T1.source_type_enum,
T11.name AS source_name,
T12.name AS source_store_name,
T1.purpose_type_enum,
T6.name AS purpose_name,
T7.name AS purpose_store_name,
T1.approval_time,
T1.occurrence_time,
T8.name AS applicant_name,
T9.name AS approve_name,
T1.tenant_id
FROM wor_supply_request AS T1
LEFT JOIN med_medication_definition AS T2 ON T1.item_id = T2.id
LEFT JOIN med_medication AS T3 ON T1.item_id = T3.medication_def_id
LEFT JOIN adm_device AS T4 ON T1.item_id = T4.id
LEFT JOIN adm_device_definition AS T13 ON T4.device_def_id = T13.id
LEFT JOIN adm_supplier AS T5 ON T1.supplier_id = T5.id
LEFT JOIN adm_location AS T6 ON T1.purpose_location_id = T6.id
LEFT JOIN adm_location AS T7 ON T1.purpose_location_store_id = T7.id
LEFT JOIN adm_practitioner AS T8 ON T1.applicant_id = T8.id
LEFT JOIN adm_practitioner AS T9 ON T1.approver_id = T9.id
LEFT JOIN adm_location AS T11 ON T1.source_location_id = T11.id
LEFT JOIN adm_location AS T12 ON T1.source_location_store_id = T12.id
WHERE T1.delete_flag = '0'
ORDER BY T1.bus_no desc) AS T10
${ew.customSqlSegment}
</select>
<select id="selectInventoryStockTakeDetailsPage"
resultType="com.openhis.web.inventorymanage.dto.InventoryStockTakeDetailDto">
</select>
</mapper>

View File

@@ -4,5 +4,79 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openhis.web.basedatamanage.mapper.PractitionerAppAppMapper">
<select id="getUserPractitionerPage" resultType="com.openhis.web.doctorstation.dto.UserAndPractitionerDto">
SELECT T3.tenant_id,
T3.user_id,
T3.practitioner_id,
T3.py_str,
T3.wb_str,
T3.user_name,
T3.nick_name,
T3.email,
T3.phonenumber,
T3.sex,
T3.status,
T3.remark,
T3.birth_date,
T3.address,
T3.yb_no,
T3.org_id
from (
SELECT T1.tenant_id,
T1.id AS practitioner_id,
T1.user_id,
T1.py_str,
T1.wb_str,
T2.user_name,
T2.nick_name,
T2.email,
T2.phonenumber,
T2.sex,
T2.status,
T2.remark,
T1.birth_date,
T1.address,
T1.yb_no,
T1.org_id
FROM adm_practitioner AS T1
LEFT JOIN sys_user AS T2 ON T2.user_id = T1.user_id
AND T2.delete_flag = '0'
WHERE T1.delete_flag = '0') AS T3
${ew.customSqlSegment}
</select>
<select id="getChildList" resultType="com.openhis.web.doctorstation.dto.UserAndPractitionerChildDto">
SELECT
t1.practitioner_id,
t1.org_id,
t1.location_id,
t1.role_code,
t2.role_id,
t2.role_name
FROM
adm_practitioner_role AS T1
LEFT JOIN sys_role AS T2 ON t2.role_key = t1.role_code
AND t2.del_flag = '0'
WHERE
t1.delete_flag = '0'
<if test="practitionerIdList != null and !practitionerIdList.isEmpty()">
AND t1.practitioner_id IN
<foreach collection="practitionerIdList" item="itemId" open="(" separator="," close=")">
#{itemId}
</foreach>
</if>
</select>
<delete id="delUserRole">
delete
from sys_user_role
where user_id = #{userId}
</delete>
<delete id="delPractitionerRole">
delete
from adm_practitioner_role
where practitioner_id = #{practitionerId}
</delete>
</mapper>

View File

@@ -0,0 +1,84 @@
<?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.openhis.web.datadictionary.mapper.DeviceManageMapper">
<select id="getDevicePage" parameterType="java.util.Map"
resultType="com.openhis.web.datadictionary.dto.DeviceManageDto">
SELECT
T3.id,
T3.bus_no,
T3.name,
T3.py_str,
T3.wb_str,
T3.category_enum,
T3.type_code,
T3.unit_code,
T3.size,
T3.part_percent,
T3.min_unit_code,
T3.org_id,
T3.location_id,
T3.model_number,
T3.hvcm_flag,
T3.sales_unit_code,
T3.approval_number,
T3.yb_flag,
T3.yb_no,
T3.yb_match_flag,
T3.status_enum,
T3.manufacturer_id,
T3.manufacturer_text,
T3.supply_id,
T3.description,
T3.jurisdiction,
T3.version,
T3.substance_text,
T3.allergen_flag,
T3.tenant_id,
T3.price
FROM
(
SELECT
T1.id,
T1.bus_no,
T1.name,
T1.py_str,
T1.wb_str,
T1.category_enum,
T1.type_code,
T1.unit_code,
T1.size,
T1.part_percent,
T1.min_unit_code,
T1.org_id,
T1.location_id,
T1.model_number,
T1.hvcm_flag,
T1.sales_unit_code,
T1.approval_number,
T1.yb_flag,
T1.yb_no,
T1.yb_match_flag,
T1.status_enum,
T1.manufacturer_id,
T1.manufacturer_text,
T1.supply_id,
T1.description,
T1.jurisdiction,
T1.version,
T1.substance_text,
T1.allergen_flag,
T1.tenant_id,
T2.price
FROM adm_device_definition T1
LEFT JOIN adm_charge_item_definition T2 ON T1.id = T2.instance_id
<where>
T1.delete_flag = '0'
AND T2.instance_table = 'adm_device_definition'
</where>
ORDER BY T1.bus_no
) AS T3
${ew.customSqlSegment}
</select>
</mapper>

View File

@@ -7,6 +7,7 @@
T2.medication_def_id,
T2.status_enum,
T2.org_id,
T2.location_id,
T2.dose_form_code,
T2.total_volume,
T2.ingredient_item,
@@ -52,7 +53,7 @@
T1.children_flag,
T1.characteristic,
T1.national_drug_code,
T1.part_attribute,
T1.part_attribute_enum,
T1.antibiotic_code,
T1.restricted_enum,
T1.self_flag,
@@ -63,13 +64,16 @@
T4.base_unit_code,
T4.base_quantity,
T4.min_unit_code,
T4.min_quantity
T4.min_quantity,
T5.price
FROM med_medication_definition T1
LEFT JOIN med_medication T2 ON T1.id = T2.medication_def_id
LEFT JOIN adm_supplier T3 ON T1.manufacturer_id = T3.id
LEFT JOIN wor_inventory_item T4 ON T1.id = T4.item_id
LEFT JOIN adm_charge_item_definition T5 ON T2.medication_def_id = T5.instance_id
<where>
T1.delete_flag = '0'
AND T5.instance_table = 'med_medication_definition'
<if test="searchKey!=null and searchKey!='' ">
AND ( T1.name LIKE CONCAT(CONCAT('%', #{searchKey}),'%') OR
T1.name_en LIKE CONCAT(CONCAT('%', #{searchKey}),'%') OR

View File

@@ -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 */

View File

@@ -31,6 +31,7 @@ public class ChargeItemDefDetailServiceImpl extends ServiceImpl<ChargeItemDefApp
if (baseMapper.selectById(chargeItemDefDetail.getId()) == null) {
return false;
} else {
//todo deleteFlag=1
return baseMapper.updateById(chargeItemDefDetail) > 0;
}
} else {

View File

@@ -92,4 +92,10 @@ public class Medication extends HisBaseEntity {
/** DDD单位 */
private String dddUnitCode;
/** 单次最小用药频次 */
private String minRateCode;
/** 单次最大用药频次 */
private String maxRateCode;
}

View File

@@ -139,7 +139,7 @@ public class MedicationDefinition extends HisBaseEntity {
private String nationalDrugCode;
/** 拆分属性 */
private String partAttribute;
private Integer partAttributeEnum;
/** 抗生素分类 */
private String antibioticCode;

View File

@@ -164,4 +164,39 @@ public class MedicationDetail extends HisBaseEntity {
/** 产品特性 */
private Integer characteristic;
/** 所在位置 */
private Long locationId;
/** 贯标国家编码 */
private String nationalDrugCode;
/** 拆分属性 */
private Integer partAttributeEnum;
/** DDD值 */
private String dddCode;
/** DDD单位 */
private String dddUnitCode;
/** 单次最小用药频次 */
private String minRateCode;
/** 单次最大用药频次 */
private String maxRateCode;
/** 抗生素分类 */
private String antibioticCode;
/** 权限限制 */
private Integer restrictedEnum;
/** 是否自制 */
private Integer selfFlag;
/** 是否抗生素 */
private Integer antibioticFlag;
/** 基药标识 */
private Integer basicFlag;
/** 生产厂商文本 */
private String manufacturerText;
/** 用量限定 */
private BigDecimal usageLimit;
}

View File

@@ -13,8 +13,9 @@ export function getMedicationList(query) {
// 查询药品目录详细
export function getMedicationOne(id) {
return request({
url: '/data-dictionary/medication/information-one/' + parseStrEmpty(id),
method: 'get'
url: '/data-dictionary/medication/information-one',
method: 'get',
params: { id } // 确保参数正确传递
})
}
@@ -53,7 +54,7 @@ export function getMedicationCategory() {
}
// 停用病种目录
// 停用药品目录
export function stopMedication(ids) {
console.log(ids)
return request({
@@ -63,7 +64,7 @@ export function stopMedication(ids) {
})
}
// 启用病种目录
// 启用药品目录
export function startMedication(ids) {
console.log(ids)
return request({
@@ -71,4 +72,22 @@ export function startMedication(ids) {
method: 'put',
data: ids
})
}
}
// 查询部门树形数据
export function deptTreeSelect(queryParams) {
return request({
url: '/base-data-manage/organization/organization',
method: 'get',
param: queryParams
})
}
// 查询地点树形数据
export function locationTreeSelect(queryParams) {
return request({
url: '/base-data-manage/cabinet-location/cabinet-location',
method: 'get',
param: queryParams
})
}

View File

@@ -77,12 +77,39 @@
</el-col>
<el-col :span="6">
<el-form-item label="所属科室" prop="orgId">
<el-input v-model="form.orgId" maxlength="11" />
<el-tree-select
v-model="form.orgId"
:data="deptOptions"
:props="{
value: 'id',
label: 'name',
children: 'children',
}"
value-key="id"
placeholder="请选择提供部门"
check-strictly
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="地点" prop="locationId">
<el-tree-select
v-model="form.locationId"
:data="locationOptions"
:props="{
value: 'id',
label: 'name',
children: 'children',
}"
value-key="id"
placeholder="请选择地点"
check-strictly
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
<!-- <el-col :span="6">
<el-form-item label="系统类别" prop="category">
<el-select
v-model="form.category"
@@ -97,7 +124,7 @@
/>
</el-select>
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="6">
<el-form-item label="药品分类" prop="categoryCode">
<el-select
@@ -106,7 +133,7 @@
:disabled="form.id != undefined"
>
<el-option
v-for="category in medicine_category"
v-for="category in med_category_code"
:key="category.value"
:label="category.label"
:value="category.value"
@@ -115,9 +142,9 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="最小费用" prop="categoryCode">
<el-form-item label="财务统计类型" prop="minimalFee">
<el-select
v-model="form.categoryCode"
v-model="form.minimalFee"
clearable
:disabled="form.id != undefined"
>
@@ -153,15 +180,6 @@
<el-input v-model="form.totalVolume" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="包装数量" prop="packagingQuantity">
<el-input
v-model="form.packagingQuantity"
placeholder=""
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="包装单位" prop="unitCode">
<el-select
@@ -179,9 +197,9 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="贯标国家编码" prop="minUnitCode">
<el-form-item label="贯标国家编码" prop="nationalDrugCode">
<el-input
v-model="form.minUnitCode"
v-model="form.nationalDrugCode"
placeholder=""
:disabled="form.id != undefined"
/>
@@ -189,15 +207,15 @@
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="基本剂量" prop="dose">
<!-- <el-col :span="6">
<el-form-item label="基本剂量" prop="doseUnitCode">
<el-input
v-model="form.dose"
v-model="form.doseUnitCode"
placeholder=""
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="6">
<el-form-item label="剂量单位" prop="doseUnitCode">
<el-select
@@ -222,7 +240,7 @@
:disabled="form.id != undefined"
>
<el-option
v-for="category in medicine_formulation"
v-for="category in dose_form_code"
:key="category.value"
:label="category.label"
:value="category.value"
@@ -249,9 +267,9 @@
</el-row>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="拆分属性" prop="minUnitCode">
<el-form-item label="拆分属性" prop="partAttributeEnum">
<el-select
v-model="form.categoryCode"
v-model="form.partAttributeEnum"
clearable
:disabled="form.id != undefined"
>
@@ -265,27 +283,22 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="购入价" prop="name">
<el-input v-model="form.name" placeholder="" />
<el-form-item label="购入价" prop="purchasePrice">
<el-input v-model="form.purchasePrice" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="零售价" prop="name">
<el-input v-model="form.name" placeholder="" />
<el-form-item label="零售价" prop="retailPrice">
<el-input v-model="form.retailPrice" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="最高零售价" prop="name">
<el-input v-model="form.name" placeholder="" />
<el-form-item label="最高零售价" prop="maximumRetailPrice">
<el-input v-model="form.maximumRetailPrice" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="停用" prop="status">
<el-checkbox v-model="form.status"></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="皮试判别" prop="skinTestFlag">
<el-checkbox v-model="form.skinTestFlag"></el-checkbox>
@@ -301,6 +314,11 @@
<el-checkbox v-model="form.childrenFlag"></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否活性" prop="activeFlag">
<el-checkbox v-model="form.activeFlag"></el-checkbox>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
@@ -412,16 +430,6 @@
<el-input v-model="form.approvalNumber" placeholder="" />
</el-form-item>
</el-col>
<!-- <el-col :span="6">
<el-form-item label="所含耗材" prop="comprisedText">
<el-input v-model="form.comprisedText" placeholder="" />
</el-form-item>
</el-col> -->
<el-col :span="6">
<el-form-item label="拆零比" prop="partPercent">
<el-input v-model="form.partPercent" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="医保类别" prop="ybType">
<el-select
@@ -443,7 +451,7 @@
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="医保对码" prop="ybMatchFlag">
<el-input v-model="form.ybMatchFlag" placeholder="" />
<el-checkbox v-model="form.ybMatchFlag" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="6">
@@ -452,13 +460,25 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="生产厂家 " prop="manufacturerId">
<el-input v-model="form.manufacturerId" placeholder="" />
<el-form-item label="生产厂家 " prop="manufacturerText">
<el-input v-model="form.manufacturerText" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="供应商" prop="supplyId">
<el-input v-model="form.supplyId" placeholder="" />
<el-select
v-model="form.supplyId"
placeholder=""
clearable
style="width: 150px"
>
<el-option
v-for="supplier in supplierListOptions"
:key="supplier.value"
:label="supplier.label"
:value="supplier.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
@@ -469,13 +489,13 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="抗生素" prop="restrictedFlag">
<el-checkbox v-model="form.restrictedFlag"></el-checkbox>
<el-form-item label="抗生素" prop="antibioticFlag">
<el-checkbox v-model="form.antibioticFlag"></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="限制使用范围" prop="restrictedScope">
<el-input v-model="form.restrictedScope" placeholder="" />
<el-form-item label="自制" prop="selfFlag">
<el-checkbox v-model="form.selfFlag"></el-checkbox>
</el-form-item>
</el-col>
<el-col :span="6">
@@ -485,7 +505,7 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-col :span="10">
<el-form-item label="生效日期" prop="effectiveDate">
<el-date-picker
v-model="form.effectiveDate"
@@ -495,12 +515,8 @@
/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item
label="到期日期"
prop="expirationDate"
style="margin-left: 10px"
>
<el-col :span="8">
<el-form-item label="到期日期" prop="expirationDate">
<el-date-picker
v-model="form.expirationDate"
type="datetime"
@@ -509,10 +525,20 @@
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="限制使用范围"
prop="restrictedScope"
style="margin-left: 15px"
>
<el-input v-model="form.restrictedScope" placeholder="" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="抗生素信息" v-if="form.id != undefined">
<!-- <el-tab-pane label="抗生素信息" v-if="form.id != undefined && form.antibioticFlag"> -->
<el-tab-pane label="抗生素信息" v-if="form.antibioticFlag">
<el-form
:model="antibioticForm"
:rules="rules"
@@ -522,22 +548,10 @@
>
<el-row :gutter="24">
<el-col :span="20">
<el-form-item label="抗生素分类" prop="conditionCode">
<el-select v-model="antibioticForm.statusEnum" clearable>
<el-form-item label="抗生素分类" prop="antibioticCode">
<el-select v-model="antibioticForm.antibioticCode" clearable>
<el-option
v-for="dict in sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
<el-select
v-model="antibioticForm.statusEnum"
clearable
style="margin-left: 5px"
>
<el-option
v-for="dict in sys_normal_disable"
v-for="dict in antibiotic_type_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@@ -553,12 +567,12 @@
prop="conditionCode"
class="custom-label-spacing"
>
<el-select v-model="antibioticForm.statusEnum" clearable>
<el-select v-model="antibioticForm.restrictedEnum" clearable>
<el-option
v-for="dict in sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
v-for="statusRestricted in statusRestrictedOptions"
:key="statusRestricted.value"
:label="statusRestricted.info"
:value="statusRestricted.value"
/>
</el-select>
</el-form-item>
@@ -566,9 +580,9 @@
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="单次剂量" prop="conditionCode">
<el-form-item label="单次剂量" prop="dose">
<el-input
v-model="antibioticForm.name"
v-model="antibioticForm.dose"
placeholder="输入剂量"
:disabled="form.id != undefined"
/>
@@ -576,9 +590,9 @@
</el-col>
-
<el-col :span="5">
<el-form-item label="" prop="conditionCode" label-width="0px">
<el-form-item label="" prop="maxUnit" label-width="0px">
<el-input
v-model="antibioticForm.name"
v-model="antibioticForm.maxUnit"
placeholder="输入剂量"
:disabled="form.id != undefined"
/>
@@ -587,9 +601,9 @@
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="频次范围" prop="conditionCode">
<el-form-item label="频次范围" prop="minRateCode">
<el-input
v-model="antibioticForm.name"
v-model="antibioticForm.minRateCode"
placeholder=""
:disabled="form.id != undefined"
/>
@@ -597,9 +611,9 @@
</el-col>
-
<el-col :span="5">
<el-form-item label="" prop="conditionCode" label-width="0px">
<el-form-item label="" prop="maxRateCode" label-width="0px">
<el-input
v-model="antibioticForm.name"
v-model="antibioticForm.maxRateCode"
placeholder=""
:disabled="form.id != undefined"
/>
@@ -627,18 +641,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="剂量单位" prop="conditionCode">
<el-input
v-model="antibioticForm.name"
placeholder=""
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
<el-col :span="6"> (单位g) </el-col>
</el-row>
</el-form>
</el-tab-pane>
</el-tabs>
@@ -653,22 +655,16 @@
</template>
<script setup name="MedicineDialog">
// import {
// getDiseaseList,
// editDisease,
// addDisease,
// getDiseaseCategory,
// getDiseaseOne,
// } from "./components/medicine";
import { deptTreeSelect, locationTreeSelect } from "./medicine";
const router = useRouter();
const { proxy } = getCurrentInstance();
const {
medicine_category,
med_category_code,
system_categories,
medicine_properties,
unit_code,
medicine_formulation,
dose_form_code,
yb_type,
medicine_default_usage,
medicine_default_frequency,
@@ -676,13 +672,14 @@ const {
sys_normal_disable,
rate_code,
method_code,
fin_type_code
fin_type_code,
antibiotic_type_code,
} = proxy.useDict(
"medicine_category",
"med_category_code",
"system_categories",
"medicine_properties",
"unit_code",
"medicine_formulation",
"dose_form_code",
"yb_type",
"medicine_default_usage",
"medicine_default_frequency",
@@ -690,7 +687,8 @@ const {
"sys_normal_disable",
"rate_code",
"method_code",
"fin_type_code"
"fin_type_code",
"antibiotic_type_code"
);
const title = ref("");
@@ -698,7 +696,10 @@ const visible = ref(false);
const emits = defineEmits(["submit"]); // 声明自定义事件
const statusFlagOptions = ref(undefined);
const domainEnumOptions = ref(undefined);
const deptOptions = ref(undefined); // 部门树选项
const locationOptions = ref(undefined); // 地点树选项
const supplierListOptions = ref(undefined); // 供应商列表选项
const statusRestrictedOptions = ref(undefined); // 权限级别选项
const data = reactive({
form: {},
antibioticForm: {},
@@ -726,33 +727,42 @@ const props = defineProps({
type: Object,
required: false,
},
supplierListOptions: {
type: Object,
required: false,
},
statusRestrictedOptions: {
type: Object,
required: false,
},
});
/** 查询部门下拉树结构 */
function getDeptTree() {
console.log("查询部门下拉树结构");
deptTreeSelect().then((response) => {
console.log(response, "response查询部门下拉树结构");
deptOptions.value = response.data.records;
console.log(deptOptions.value, "部门下拉树结构");
});
}
/** 查询地点下拉树结构 */
function getLocationTree() {
locationTreeSelect().then((response) => {
console.log(response, "response查询部门下拉树结构");
locationOptions.value = response.data.records;
console.log(locationOptions.value, "部门下拉树结构");
});
}
// 显示弹框
function show() {
// queryParams.roleId = props.roleId;
// getList();
getLocationTree();
getDeptTree();
reset();
statusFlagOptions.value = props.status;
domainEnumOptions.value = props.domainEnum;
// currentData.value.activeFlag == 1
// ? (currentData.value.activeFlag = true)
// : (currentData.value.activeFlag = false); //是否为活性
// currentData.value.ybMatchFlag == 1
// ? (currentData.value.ybMatchFlag = true)
// : (currentData.value.ybMatchFlag = false); //医保是否对码
// currentData.value.skinTestFlag == 1
// ? (currentData.value.skinTestFlag = true)
// : (currentData.value.skinTestFlag = false); //是否皮试
// currentData.value.injectFlag == 1
// ? (currentData.value.injectFlag = true)
// : (currentData.value.injectFlag = false); //是否为注射药物
// currentData.value.restrictedFlag == 1
// ? (currentData.value.restrictedFlag = true)
// : (currentData.value.restrictedFlag = false); //是否限制使用
// currentData.value.childrenFlag == 1
// ? (currentData.value.childrenFlag = true)
// : (currentData.value.childrenFlag = false); //儿童用药标志
supplierListOptions.value = props.supplierListOptions;
statusRestrictedOptions.value = props.statusRestrictedOptions;
// console.log(currentData.value, "currentData");
visible.value = true;
}
@@ -764,15 +774,53 @@ function edit() {
console.log(props.item);
console.log("props.item");
reset();
getLocationTree();
getDeptTree();
form.value = props.item;
setFlag(form.value);
statusFlagOptions.value = props.status;
domainEnumOptions.value = props.domainEnum;
supplierListOptions.value = props.supplierListOptions;
statusRestrictedOptions.value = props.statusRestrictedOptions;
visible.value = true;
}
// checkbox值转换
function setFlag(data) {
data.activeFlag == 1 ? (data.activeFlag = true) : (data.activeFlag = false); //是否为活性
data.ybMatchFlag == 1
? (data.ybMatchFlag = true)
: (data.ybMatchFlag = false); //医保是否对码
data.skinTestFlag == 1
? (data.skinTestFlag = true)
: (data.skinTestFlag = false); //是否皮试
data.injectFlag == 1 ? (data.injectFlag = true) : (data.injectFlag = false); //是否为注射药物
data.restrictedFlag == 1
? (data.restrictedFlag = true)
: (data.restrictedFlag = false); //是否限制使用
data.childrenFlag == 1
? (data.childrenFlag = true)
: (data.childrenFlag = false); //儿童用药标志
data.antibioticFlag == 1
? (data.antibioticFlag = true)
: (data.antibioticFlag = false); //抗生素
data.selfFlag == 1
? (data.selfFlag = true)
: (data.selfFlag = false); //自制
}
/** 重置操作表单 */
function reset() {
form.value = {
id: undefined,
medicationDefId: undefined,
orgId: undefined,
locationId: undefined,
activeFlag: undefined,
effectiveDate: undefined,
expirationDate: undefined,
doseFrom: undefined,
rateCode: undefined,
approvalNumber: undefined,
definition: undefined,
name: undefined,
pyStr: undefined,
wbStr: undefined,
@@ -804,10 +852,23 @@ function reset() {
ybMatchFlag: undefined,
ybNo: undefined,
manufacturerId: undefined,
manufacturerText: undefined,
supplyId: undefined,
restrictedFlag: undefined,
restrictedScope: undefined,
characteristic: undefined,
purchasePrice: undefined,
retailPrice: undefined,
maximumRetailPrice: undefined,
ybType: undefined,
minimalFee: undefined,
nationalDrugCode: undefined,
ybDrugCode: undefined,
antibioticFlag: undefined,
selfFlag: undefined,
minRateCode: undefined,
maxRateCode: undefined,
partAttributeEnum: undefined,
};
proxy.resetForm("medicationRef");
}

View File

@@ -48,11 +48,7 @@
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item
label="状态"
prop="statusEnum"
label-width="100"
>
<el-form-item label="状态" prop="statusEnum" label-width="100">
<el-select v-model="queryParams.statusEnum" clearable>
<el-option
v-for="status in statusFlagOptions"
@@ -64,17 +60,21 @@
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="医保对码" prop="ybMatchFlag" label-width="80">
<el-form-item
label="医保对码"
prop="ybMatchFlag"
label-width="80"
>
<el-select
v-model="queryParams.ybMatchFlag"
placeholder=""
clearable
>
<el-option
v-for="domainEnum in domainEnumOptions"
:key="domainEnum.value"
:label="domainEnum.info"
:value="domainEnum.value"
v-for="ybMatch in statusWeatherOption"
:key="ybMatch.value"
:label="ybMatch.info"
:value="ybMatch.value"
/>
</el-select>
</el-form-item>
@@ -184,8 +184,15 @@
<el-table-column
label="药品状态"
align="center"
key="statusEnum"
prop="statusEnum"
key="statusEnum_enumText"
prop="statusEnum_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="医保类别"
align="center"
key="ybType_enumText"
prop="ybType_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -206,23 +213,30 @@
<el-table-column
label="药品分类"
align="center"
key="categoryCode"
prop="categoryCode"
key="categoryCode_dictText"
prop="categoryCode_dictText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="所属科室"
align="center"
key="orgId"
prop="orgId"
key="orgId_dictText"
prop="orgId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="地点"
align="center"
key="locationId_dictText"
prop="locationId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="剂型"
align="center"
key="doseFormCode"
prop="doseFormCode"
key="doseFormCode_dictText"
prop="doseFormCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -243,8 +257,8 @@
<el-table-column
label="是否为活性"
align="center"
key="activeFlag"
prop="activeFlag"
key="activeFlag_enumText"
prop="activeFlag_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -254,13 +268,13 @@
prop="lotNumber"
:show-overflow-tooltip="true"
/>
<el-table-column
<!-- <el-table-column
label="拆零价"
align="center"
key="statusEnum"
prop="statusEnum"
:show-overflow-tooltip="true"
/>
/> -->
<el-table-column
label="生效日期"
align="center"
@@ -286,16 +300,15 @@
<el-table-column
label="用法"
align="center"
key="methodCode"
prop="methodCode"
key="methodCode_dictText"
prop="methodCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="用药频次"
align="center"
key="rateCode"
prop="rateCode"
key="rateCode_dictText"
prop="rateCode_dictText"
:show-overflow-tooltip="true"
width="100"
/>
@@ -309,8 +322,8 @@
<el-table-column
label="剂量单位"
align="center"
key="doseUnitCode"
prop="doseUnitCode"
key="doseUnitCode_dictText"
prop="doseUnitCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -328,11 +341,35 @@
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="用量限定"
align="center"
key="usageLimit"
prop="usageLimit"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="DDD值"
align="center"
key="dddCode_dictText"
prop="dddCode_dictText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="DDD单位"
align="center"
key="dddUnitCode_dictText"
prop="dddUnitCode_dictText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="适用范围"
align="center"
key="domainEnum"
prop="domainEnum"
key="domainEnum_enumText"
prop="domainEnum_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -381,10 +418,10 @@
:show-overflow-tooltip="true"
/>
<el-table-column
label="最小单位"
label="财务统计类型"
align="center"
key="minUnitCode"
prop="minUnitCode"
key="minUnitCode_dictText"
prop="minUnitCode_dictText"
:show-overflow-tooltip="true"
width="90"
/>
@@ -429,8 +466,8 @@
<el-table-column
label="医保是否对码"
align="center"
key="ybMatchFlag"
prop="ybMatchFlag"
key="ybMatchFlag_enumText"
prop="ybMatchFlag_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -451,16 +488,16 @@
<el-table-column
label="是否皮试"
align="center"
key="skinTestFlag"
prop="skinTestFlag"
key="skinTestFlag_enumText"
prop="skinTestFlag_enumText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="是否为注射药物"
align="center"
key="injectFlag"
prop="injectFlag"
key="injectFlag_enumText"
prop="injectFlag_enumText"
:show-overflow-tooltip="true"
width="90"
/>
@@ -471,19 +508,26 @@
prop="manufacturerId"
:show-overflow-tooltip="true"
/>
<el-table-column
label="生产厂家名称"
align="center"
key="manufacturerName"
prop="manufacturerName"
:show-overflow-tooltip="true"
/>
<el-table-column
label="供应商"
align="center"
key="supplyId"
prop="supplyId"
key="supplyId_dictText"
prop="supplyId_dictText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="是否限制使用"
align="center"
key="restrictedFlag"
prop="restrictedFlag"
key="restrictedFlag_enumText"
prop="restrictedFlag_enumText"
:show-overflow-tooltip="true"
width="90"
/>
@@ -498,8 +542,8 @@
<el-table-column
label="儿童用药标志"
align="center"
key="childrenFlag"
prop="childrenFlag"
key="childrenFlag_enumText"
prop="childrenFlag_enumText"
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -510,6 +554,94 @@
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="贯标国家编码"
align="center"
key="nationalDrugCode"
prop="nationalDrugCode"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="拆分属性"
align="center"
key="partAttributeEnum_enumText"
prop="partAttributeEnum_enumText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="抗生素分类"
align="center"
key="antibioticCode_dictText"
prop="antibioticCode_dictText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="权限限制"
align="center"
key="restrictedEnum_enumText"
prop="restrictedEnum_enumText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="是否自制"
align="center"
key=" selfFlag_enumText"
prop=" selfFlag_enumText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="是否抗生素"
align="center"
key="antibioticFlag_enumText"
prop="antibioticFlag_enumText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="基药标识"
align="center"
key="basicFlag_enumText"
prop="basicFlag_enumText"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="常规单位"
align="center"
key="baseUnitCode"
prop="baseUnitCode"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="当前库存数量(常规单位)"
align="center"
key="baseQuantity"
prop="baseQuantity"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="当前库存数量(最小单位数量)"
align="center"
key="minQuantity"
prop="minQuantity"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="售价"
align="center"
key="price"
prop="price"
:show-overflow-tooltip="true"
width="90"
/>
<el-table-column
label="操作"
align="center"
@@ -526,14 +658,14 @@
v-hasPermi="['system:user:edit']"
>编辑</el-button
>
<el-button
<!-- <el-button
link
type="primary"
icon="View"
@click="openViewMedicine(scope.row)"
v-hasPermi="['system:user:remove']"
>查看</el-button
>
> -->
</template>
</el-table-column>
</el-table>
@@ -551,6 +683,8 @@
:item="currentData"
:domainEnum="domainEnumOptions"
:status="statusFlagOptions"
:supplierListOptions="supplierListOptions"
:statusRestrictedOptions="statusRestrictedOptions"
@submit="submitForm"
/>
<medicine-view-dialog
@@ -595,6 +729,8 @@ const medicationOptions = ref(undefined);
const statusFlagOptions = ref(undefined);
const domainEnumOptions = ref(undefined);
const supplierListOptions = ref(undefined);
const statusWeatherOption = ref(undefined);
const statusRestrictedOptions = ref(undefined);
// 使用 ref 定义当前药品数据
const currentData = ref({});
// 使用 ref 定义当前查看药品数据
@@ -611,7 +747,7 @@ const data = reactive({
searchKey: undefined, // 品名/商品名/英文品名/编码/拼音
statusEnum: undefined, // 状态(包括 1预置2启用3停用
ybMatchFlag: undefined, // 是否医保匹配(包括 10
status: undefined, // 状态(包括 1预置2启用3停用
categoryCode: undefined, // 目录
},
rules: {
// name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
@@ -636,15 +772,18 @@ const filterNode = (value, data) => {
function getMedicationCategoryList() {
getMedicationCategory().then((response) => {
console.log(response, "response药品目录分类查询下拉树结构");
medicationOptions.value = response.data.medicationListOptions;
medicationOptions.value = response.data.medicationCategoryCodeOptions;
statusFlagOptions.value = response.data.statusFlagOptions;
domainEnumOptions.value = response.data.domainFlagOptions;
supplierListOptions.value = response.data.supplierListOptions;
statusWeatherOption.value = response.data.statusWeatherOptions;
statusRestrictedOptions.value = response.data.statusRestrictedOptions;
});
}
/** 查询病种目录列表 */
function getList() {
loading.value = true;
console.log(queryParams.value, "queryParams***********************");
getMedicationList(queryParams.value).then((res) => {
loading.value = false;
console.log(res, "res");
@@ -654,12 +793,13 @@ function getList() {
}
/** 节点单击事件 */
function handleNodeClick(data) {
queryParams.value.deptId = data.id;
queryParams.value.categoryCode = data.value;
handleQuery();
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNo = 1;
console.log(queryParams.value, "queryParams");
getList();
}
@@ -740,25 +880,36 @@ function openAddMedicine() {
}
/** 打开编辑弹窗 */
function openEditMedicine(row) {
currentData.value = JSON.parse(JSON.stringify(row));
currentData.value.activeFlag == 1
? (currentData.value.activeFlag = true)
: (currentData.value.activeFlag = false); //是否为活性
currentData.value.ybMatchFlag == 1
? (currentData.value.ybMatchFlag = true)
: (currentData.value.ybMatchFlag = false); //医保是否对码
currentData.value.skinTestFlag == 1
? (currentData.value.skinTestFlag = true)
: (currentData.value.skinTestFlag = false); //是否皮试
currentData.value.injectFlag == 1
? (currentData.value.injectFlag = true)
: (currentData.value.injectFlag = false); //是否为注射药物
currentData.value.restrictedFlag == 1
? (currentData.value.restrictedFlag = true)
: (currentData.value.restrictedFlag = false); //是否限制使用
currentData.value.childrenFlag == 1
? (currentData.value.childrenFlag = true)
: (currentData.value.childrenFlag = false); //儿童用药标志
getMedicationOne(row.id).then((response) => {
console.log(response, "responsebbbb", row.id);
currentData.value = response.data;
// getList();
});
// currentData.value = JSON.parse(JSON.stringify(row));
// currentData.value.activeFlag == 1
// ? (currentData.value.activeFlag = true)
// : (currentData.value.activeFlag = false); //是否为活性
// currentData.value.ybMatchFlag == 1
// ? (currentData.value.ybMatchFlag = true)
// : (currentData.value.ybMatchFlag = false); //医保是否对码
// currentData.value.skinTestFlag == 1
// ? (currentData.value.skinTestFlag = true)
// : (currentData.value.skinTestFlag = false); //是否皮试
// currentData.value.injectFlag == 1
// ? (currentData.value.injectFlag = true)
// : (currentData.value.injectFlag = false); //是否为注射药物
// currentData.value.restrictedFlag == 1
// ? (currentData.value.restrictedFlag = true)
// : (currentData.value.restrictedFlag = false); //是否限制使用
// currentData.value.childrenFlag == 1
// ? (currentData.value.childrenFlag = true)
// : (currentData.value.childrenFlag = false); //儿童用药标志
// currentData.value.antibioticFlag == 1
// ? (currentData.value.antibioticFlag = true)
// : (currentData.value.antibioticFlag = false); //抗生素标志
// currentData.value.selfFlag == 1
// ? (currentData.value.selfFlag = true)
// : (currentData.value.selfFlag = false); //自制标志
console.log(currentData.value, "currentData");
// 确保子组件已经接收到最新的 props
nextTick(() => {
@@ -799,8 +950,14 @@ function submitForm(formData) {
formData.childrenFlag == true
? (formData.childrenFlag = 1)
: (formData.childrenFlag = 0); //儿童用药标志
formData.antibioticFlag == true
? (formData.antibioticFlag = 1)
: (formData.antibioticFlag = 0); //抗生素标志
formData.selfFlag == true
? (formData.selfFlag = 1)
: (formData.selfFlag = 0); //自制标志
formData.status == true ? (formData.status = 1) : (formData.status = 0); //启用状态
console.log(formData, "submitForm");
if (formData.id != undefined) {
// form.value.status
// ? (form.value.statusEnum = "3")