diff --git a/README.md b/README.md index f0ec1c36..e87f6aef 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,10 @@ ## 📚【支持文档】 -技术支持资源:https://open.tntlinking.com/resource/technicalSupport?site=gitee +技术支持资源:https://open.tntlinking.com/resource/openProductDoc?site=gitee (含演示环境、操作手册、部署手册、开发手册、常见问题等) -产品介绍:https://open.tntlinking.com/resource/industryKnowledge?site=gitee +产品介绍:https://open.tntlinking.com/resource/productPresentation?site=gitee 操作教程:https://open.tntlinking.com/resource/operationTutorial?site=gitee diff --git a/openhis-server-new/core-admin/src/main/java/com/core/web/util/TenantOptionUtil.java b/openhis-server-new/core-admin/src/main/java/com/core/web/util/TenantOptionUtil.java index 46db6d80..5c7b277b 100644 --- a/openhis-server-new/core-admin/src/main/java/com/core/web/util/TenantOptionUtil.java +++ b/openhis-server-new/core-admin/src/main/java/com/core/web/util/TenantOptionUtil.java @@ -3,6 +3,7 @@ package com.core.web.util; import com.core.common.core.domain.model.LoginUser; import com.core.common.enums.TenantOptionDict; import com.core.common.utils.SecurityUtils; +import com.core.common.utils.StringUtils; /** * 租户配置工具类 @@ -30,7 +31,12 @@ public class TenantOptionUtil { if (loginUser.getOptionMap() == null || loginUser.getOptionMap().isEmpty()) { return null; } - return loginUser.getOptionMap().get(optionDict.getCode()); + // return loginUser.getOptionMap().get(optionDict.getCode()); + + // TODO:2025/10/17 李永兴提出的sys_option切换TenantOption临时防止报错方案,最晚2025年11月底删除 + String newValue = loginUser.getOptionMap().get(optionDict.getCode()); + String oldValue = loginUser.getOptionJson().getString(optionDict.getCode()); + return StringUtils.isEmpty(newValue) ? oldValue : newValue; } } diff --git a/openhis-server-new/core-common/pom.xml b/openhis-server-new/core-common/pom.xml index c6b5ea4c..b73c4296 100644 --- a/openhis-server-new/core-common/pom.xml +++ b/openhis-server-new/core-common/pom.xml @@ -142,6 +142,11 @@ pinyin4j + + com.google.code.gson + gson + + \ No newline at end of file diff --git a/openhis-server-new/core-common/src/main/java/com/core/common/enums/AdjustPriceEnum.java b/openhis-server-new/core-common/src/main/java/com/core/common/enums/AdjustPriceEnum.java new file mode 100644 index 00000000..2bcde809 --- /dev/null +++ b/openhis-server-new/core-common/src/main/java/com/core/common/enums/AdjustPriceEnum.java @@ -0,0 +1,32 @@ +package com.core.common.enums; + +/** + * Desc: 调价类型枚举 + * @Author raymond + * @Date 09:14 2025/10/16 + * @return + **/ +public enum AdjustPriceEnum { + + MEDICINE(0, "药品"), + CONSUMABLES(1, "耗材"), + DIAGNOSIS(2, "诊疗"), + REGISTER(3, "挂号"); + + + private final Integer code; + private final String info; + + AdjustPriceEnum(Integer code, String info) { + this.code = code; + this.info = info; + } + + public Integer getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/openhis-server-new/core-common/src/main/java/com/core/common/enums/TenantOptionDict.java b/openhis-server-new/core-common/src/main/java/com/core/common/enums/TenantOptionDict.java index b6916595..a03a2d0f 100644 --- a/openhis-server-new/core-common/src/main/java/com/core/common/enums/TenantOptionDict.java +++ b/openhis-server-new/core-common/src/main/java/com/core/common/enums/TenantOptionDict.java @@ -6,166 +6,93 @@ package com.core.common.enums; * @author system */ public enum TenantOptionDict { + /** * 医院名称 */ - HOSPITAL_NAME("hospitalName", "医院名称", 0), + YB_HOSPITAL_NAME("hospitalName", "医保-医院名称", 0), + /** - * 医疗机构等级 + * 医保-医疗机构等级(3101接口) */ - MEDINS_LV("medinsLv", "医疗机构等级", 1), + YB_MEDINS_LV("medinsLv", "医保_医疗机构等级", 1), /** * 定点医药机构编号 */ - FIXMEDINS_CODE("fixmedinsCode", "定点医药机构编号", 2), + YB_FIXMEDINS_CODE("fixmedinsCode", "医保_定点医药机构编号", 2), /** * 电子发票appid */ - APP_ID("app_id", "电子发票appid", 3), + EINVOICE_APP_ID("app_id", "电子发票-appid", 3), + /** * 电子发票key */ - KEY("key", "电子发票key", 4), + EINVOICE_KEY("key", "电子发票-key", 4), + /** * 电子发票url */ - URL("url", "电子发票url", 5), + EINVOICE_URL("url", "电子发票-url", 5), + /** * 医保开关 */ YB_SWITCH("yb_switch", "医保开关", 6), - /** - * 客户端私钥 - */ - CLI_PRV_KEY("cliPrvKey", "客户端私钥", 7), - /** - * 客户端公钥 - */ - CLI_PUB_KEY("cliPubKey", "客户端公钥", 8), - /** - * 服务端公钥 - */ - SERVER_PUB_KEY("serverPubKey", "服务端公钥", 9), - /** - * 定点医药机构名称 - */ - FIXMEDINS_NAME("fixmedinsName", "定点医药机构名称", 10), - /** - * 行政区划 - */ - ADMVS("admvs", "行政区划", 11), - /** - * 授权范围 - */ - SCOPE("scope", "授权范围", 12), - /** - * 授权类型 - */ - GRANT_TYPE("grantType", "授权类型", 13), - /** - * 密码 - */ - PASSWORD("password", "密码", 14), - /** - * 用户名 - */ - USERNAME("username", "用户名", 15), - /** - * 客户端安全码 - */ - CLIENT_SECRET("clientSecret", "客户端安全码", 16), - /** - * 客户端ID - */ - CLIENT_ID("clientId", "客户端ID", 17), - /** - * 生产环境客户端公钥 - */ - PROD_CLI_PUB_KEY("prod_cliPubKey", "生产环境客户端公钥", 18), - /** - * 生产环境客户端私钥 - */ - PROD_CLI_PRV_KEY("prod_cliPrvKey", "生产环境客户端私钥", 19), - /** - * 生产环境客户端ID - */ - PROD_CLIENT_ID("prod_clientId", "生产环境客户端ID", 20), - /** - * 文件路径 - */ - FILE_PATH("filePath", "文件路径", 21), + /** * 电子地址 */ - ELE_ADDRESS("eleAddress", "电子地址", 22), + ELE_ADDRESS("eleAddress", "电子处方-请求地址", 22), + /** * 服务地址 */ ADDRESS("address", "服务地址", 23), + /** * 超时时间 */ TIME("time", "超时时间", 24), + /** * 是否加密 */ - IS_ENCRYPT("isEncrypt", "是否加密", 25), + YB_IS_ENCRYPT("isEncrypt", "医保-是否加密", 25), /** * 医保区划 */ - INSUPLC_ADMDVS("insuplc_admdvs", "医保区划", 26), + YB_INSUPLC_ADMDVS("insuplc_admdvs", "医保-区划", 26), + /** * 电子处方appId */ - PRE_APP_ID("pre_app_id", "电子处方appId", 27), + ELE_PRE_APP_ID("pre_app_id", "电子处方-appId", 27), + /** * 电子处方appSecret */ - PRE_APP_SECRET("pre_app_secret", "电子处方appSecret", 28), + ELE_PRE_APP_SECRET("pre_app_secret", "电子处方-appSecret", 28), + /** * 电子处方私钥 */ - APP_PRVKEY("APP_PRVKEY", "电子处方私钥", 29), + ELE_APP_PRVKEY("APP_PRVKEY", "电子处方-私钥", 29), + /** * 电子处方公钥 */ - PLAF_PUBKEY("PLAF_PUBKEY", "电子处方公钥", 30), - /** - * 医保客户端ID - */ - YB_CLIENT_ID("ybClientId", "医保客户端ID", 31), - /** - * 医保客户端安全码 - */ - YB_CLIENT_SECRET("ybClientSecret", "医保客户端安全码", 32), - /** - * 医保用户名 - */ - YB_USERNAME("ybUsername", "医保用户名", 33), - /** - * 医保密码 - */ - YB_PASSWORD("ybPassword", "医保密码", 34), - /** - * 医保授权类型 - */ - YB_GRANT_TYPE("ybGrantType", "医保授权类型", 35), - /** - * 医保授权范围 - */ - YB_SCOPE("ybScope", "医保授权范围", 36), - /** - * 医保密钥 - */ - YB_CLI_PRV_KEY("ybCliPrvKey", "医保密钥", 37), - /** - * 医保服务URL - */ - YB_URL("ybUrl", "医保服务URL", 38), + ELE_PLAF_PUBKEY("PLAF_PUBKEY", "电子处方-公钥", 30), + /** * 医院等级 */ - HOSPITAL_LV("hospital_lv", "医院等级", 39), + EINVOICE_HOSPITAL_LV("hospital_lv", "电子发票-医院等级", 39), + + /** + * 无视LIS&PACS报错 + */ + LIS_PACS_ERROR_IGNORE("lisPacsErrorIgnore", "无视LIS&PACS报错", 40), /** * LIS接口地址 */ @@ -193,11 +120,11 @@ public enum TenantOptionDict { /** * PACSAppSecret */ - INVOICE_URL("invoiceUrl", "电子发票中转服务的路径", 46), + INVOICE_FORWARD_URL("invoiceUrl", "电子发票-中转服务的路径", 46), /** * PACSAppSecret */ - FORWARD_SWITCH("forwardSwitch", "电子发票中转服务开关", 47), + FORWARD_SWITCH("forwardSwitch", "电子发票-中转服务开关", 47), /** * 食源性开关 */ @@ -229,7 +156,55 @@ public enum TenantOptionDict { /** * BPC请求URL */ - BPC_REQUEST_URL("bpcRequestUrl", "BPC请求URL", 55); + BPC_REQUEST_URL("bpcRequestUrl", "BPC请求URL", 55), + /** + * 电子发票开关 + */ + INVOICE_SWITCH("invoiceSwitch", "电子发票开关 (0:关闭 1:开启)", 56), + + /** + * 医嘱定价来源 + */ + ORDER_PRICING_SOURCE("orderPricingSource", "定价来源 batchSellingPrice/retailPrice", 57), + + /** + * 三方支付(签到) + */ + THREE_PART_SIGN_URL("threePartSignUrl", "三方支付GET请求", 58), + /** + * 三方支付(消费) + */ + THREE_PART_PAY_URL("threePartPayUrl", "三方支付GET请求", 59), + + /** + * 三方支付(退费) + */ + THREE_PART_RETURN_URL("threePartReturnUrl", "三方支付GET请求", 60), + + /** + * 三方支付(隔天退费) + */ + THREE_PART_NEXT_DAY_RETURN_URL("threePartNextDayReturnUrl", "三方支付GET请求", 61), + + /** + * 三方支付路径(支付结果查询) + */ + THREE_PART_PAY_QUERY_URL("threePartPayQueryUrl", "三方支付GET请求", 62), + + /** + * 三方支付路径(退费结果查询) + */ + THREE_PART_RETURN_QUERY_URL("threePartReturnQueryUrl", "三方支付GET请求", 63), + + /** + * 三方支付路径(隔天退费结果查询) + */ + THREE_PART_NEXT_DAY_RETURN_QUERY_URL("threePartNextDayReturnQueryUrl", "三方支付GET请求", 64), + + /** + * 三方支付参数 + */ + THREE_PART_PARAM("threePartParam", "三方支付GET请求", 65); private final String code; private final String name; @@ -241,18 +216,6 @@ public enum TenantOptionDict { this.sort = sort; } - public String getCode() { - return code; - } - - public String getName() { - return name; - } - - public Integer getSort() { - return sort; - } - public static TenantOptionDict getByCode(String code) { if (code == null) { return null; @@ -264,4 +227,16 @@ public enum TenantOptionDict { } return null; } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } + + public Integer getSort() { + return sort; + } } diff --git a/openhis-server-new/core-common/src/main/java/com/core/common/utils/SecurityUtils.java b/openhis-server-new/core-common/src/main/java/com/core/common/utils/SecurityUtils.java index 5fd0447a..67b7fd42 100644 --- a/openhis-server-new/core-common/src/main/java/com/core/common/utils/SecurityUtils.java +++ b/openhis-server-new/core-common/src/main/java/com/core/common/utils/SecurityUtils.java @@ -55,6 +55,17 @@ public class SecurityUtils { } } + /** + * 获取用户昵称 + **/ + public static String getNickName() { + try { + return getLoginUser().getUser().getNickName(); + } catch (Exception e) { + throw new ServiceException("获取用户昵称异常", HttpStatus.UNAUTHORIZED); + } + } + /** * 获取用户 **/ diff --git a/openhis-server-new/core-framework/src/main/java/com/core/framework/config/RedisConfig.java b/openhis-server-new/core-framework/src/main/java/com/core/framework/config/RedisConfig.java index 779d8f2b..99dec13b 100644 --- a/openhis-server-new/core-framework/src/main/java/com/core/framework/config/RedisConfig.java +++ b/openhis-server-new/core-framework/src/main/java/com/core/framework/config/RedisConfig.java @@ -6,6 +6,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.data.redis.serializer.StringRedisSerializer; @@ -45,6 +46,11 @@ public class RedisConfig extends CachingConfigurerSupport { return redisScript; } + @Bean + public ValueOperations valueOperations(RedisTemplate redisTemplate) { + return redisTemplate.opsForValue(); + } + /** * 限流脚本 */ diff --git a/openhis-server-new/openhis-application/pom.xml b/openhis-server-new/openhis-application/pom.xml index 18f038e6..4849ac96 100644 --- a/openhis-server-new/openhis-application/pom.xml +++ b/openhis-server-new/openhis-application/pom.xml @@ -55,6 +55,11 @@ org.apache.httpcomponents httpclient + + + org.springframework.boot + spring-boot-starter-amqp + diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/IAdjustPriceService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/IAdjustPriceService.java new file mode 100644 index 00000000..7e9f733b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/IAdjustPriceService.java @@ -0,0 +1,204 @@ +package com.openhis.web.adjustprice.appservice; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.adjustprice.dto.AdjustPriceDataVo; +import com.openhis.web.adjustprice.dto.AdjustPriceManagerSearchParam; + +/** + * Desc: 调价业务接口 + * + * @Author raymond + * @Date 08:42 2025/10/16 + * @return + **/ +public interface IAdjustPriceService { + /** + * Desc: 保存调价数据 + * + * @param dataVoList 前端数据集合 + * @Author raymond + * @Date 08:57 2025/10/16 + * @return com.core.common.core.domain.R + **/ + R submitChangePriceData(List dataVoList); + + /** + * Desc: 保存并提交审核调价数据 + * + * @param dataVoList + * @Author raymond + * @Date 16:22 2025/10/23 + * @return com.core.common.core.domain.R + **/ + R submitExamineChangePriceData(List dataVoList); + + /** + * Desc: 根据关键词查询 药品|耗材|诊疗 集合的最后价格 + * + * @param searchKey + * @Author raymond + * @Date 09:32 2025/10/20 + * @return java.util.List + **/ + R searchKeyWordDataListByMed(String searchKey); + + /** + * Desc: 根据关键词查询 药品|耗材|诊疗 集合的最后价格 + * + * @param searchKey + * @Author raymond + * @Date 09:32 2025/10/20 + * @return java.util.List + **/ + R searchKeyWordDataListByDevice(String searchKey); + + /** + * Desc: 根据关键词查询 药品|耗材|诊疗 集合的最后价格 + * + * @param searchKey + * @Author raymond + * @Date 09:32 2025/10/20 + * @return java.util.List + **/ + R searchKeyWordDataListByActivity(String searchKey); + + /** + * Desc: 查询提交的改价数据 + * + * @param adjustPriceManagerSearchParam + * @param pageNo + * @param pageSize + * @param searchKey + * @param request + * @Author raymond + * @Date 23:39 2025/11/1 + * @return com.core.common.core.domain.R + **/ + R searchChangePriceSubmitDataToPage(AdjustPriceManagerSearchParam adjustPriceManagerSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * Desc: 根据busNo 查询调价单详情 med + * + * @param busNo + * @Author raymond + * @Date 13:15 2025/10/21 + * @return com.core.common.core.domain.R + **/ + R searchChangePriceDataByMed(String busNo); + + /** + * Desc: 根据busNo 查询调价单详情 med + * + * @param busNo + * @Author raymond + * @Date 13:15 2025/10/21 + * @return com.core.common.core.domain.R + **/ + R searchChangePriceDataByDevice(String busNo); + + /** + * Desc: 根据busNo 查询调价单详情 Activity + * + * @param busNo + * @Author raymond + * @Date 13:15 2025/10/21 + * @return com.core.common.core.domain.R + **/ + R searchChangePriceDataByActivity(String busNo); + + /** + * Desc: 根据busNo 查询调价单详情 Health + * + * @param busNo + * @Author raymond + * @Date 13:15 2025/10/21 + * @return com.core.common.core.domain.R + **/ + R searchChangePriceDataByHealth(String busNo); + + /** + * Desc: 修改调价原因 和 价格 + * + * @param busNo + * @Author raymond + * @Date 15:21 2025/10/21 + * @return com.core.common.core.domain.R + **/ + R cancelChangePriceData(String busNo); + + /** + * Desc: 查询有挂号信息的科室 + * + * @param + * @Author raymond + * @Date 16:38 2025/10/22 + * @return com.core.common.core.domain.R + **/ + R searchAllOrgData(); + + /** + * Desc: 根据科室id 加载挂号数据 + * + * @param orgId + * @Author raymond + * @Date 16:45 2025/10/22 + * @return com.core.common.core.domain.R + **/ + R searchHealthData(Long orgId); + + /** + * Desc: 根据业务单据号 进行单据提交操作 + * + * @param busNo + * @Author raymond + * @Date 09:25 2025/10/23 + * @return com.core.common.core.domain.R + **/ + R updateExamineByApproval(String busNo); + + /** + * Desc: 根据药品ID 是否在审核中 + * + * @param itemId + * @Author raymond + * @Date 17:48 2025/11/3 + * @return com.core.common.core.domain.R + **/ + R checkMedApprovalExist(Long itemId); + + /** + * Desc: 根据耗材ID 是否在审核中 + * + * @param itemId + * @Author raymond + * @Date 17:48 2025/11/3 + * @return com.core.common.core.domain.R + **/ + R checkDeviceApprovalExist(Long itemId); + + /** + * Desc: 根据诊疗ID 是否在审核中 + * + * @param itemId + * @Author raymond + * @Date 17:48 2025/11/3 + * @return com.core.common.core.domain.R + **/ + R checkActivityApprovalExist(Long itemId); + + /** + * Desc: 根据挂号ID 是否在审核中 + * + * @param itemId + * @Author raymond + * @Date 17:48 2025/11/3 + * @return com.core.common.core.domain.R + **/ + R checkHealthApprovalExist(Long itemId); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/ISupplyService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/ISupplyService.java deleted file mode 100644 index ce7cda3d..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/ISupplyService.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.openhis.web.adjustprice.appservice; - -import com.openhis.web.adjustprice.dto.SupplyListDto; - -import java.util.List; - -/** - * Desc: - * @Author raymond - * @Date 16:09 2025/10/15 - * @return - **/ -public interface ISupplyService { - /** - * Desc: - * @param - * @Author raymond - * @Date 17:10 2025/10/15 - * @return java.util.List - **/ - List searchAllSupplyList(); -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/impl/AdjustPriceServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/impl/AdjustPriceServiceImpl.java new file mode 100644 index 00000000..36c8daae --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/impl/AdjustPriceServiceImpl.java @@ -0,0 +1,594 @@ +package com.openhis.web.adjustprice.appservice.impl; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.core.domain.entity.SysDictData; +import com.core.common.enums.AdjustPriceEnum; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.core.system.service.ISysDictDataService; +import com.openhis.administration.domain.ChangePriceRecord; +import com.openhis.administration.dto.ChangePriceDataDto; +import com.openhis.administration.dto.ChargeItemDefDetailPriceDto; +import com.openhis.administration.dto.HealthcareDto; +import com.openhis.administration.dto.OrgDataDto; +import com.openhis.administration.service.*; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.common.utils.RedisKeys; +import com.openhis.common.utils.RedisUtil; +import com.openhis.medication.service.IMedicationService; +import com.openhis.web.adjustprice.appservice.IAdjustPriceService; +import com.openhis.web.adjustprice.dto.AdjustPriceDataVo; +import com.openhis.web.adjustprice.dto.AdjustPriceManagerSearchParam; +import com.openhis.web.adjustprice.dto.ChangePricePageDto; +import com.openhis.web.adjustprice.mapper.AdjustPriceMapper; +import com.openhis.web.inventorymanage.dto.InventorySearchParam; +import com.openhis.workflow.dto.ActivityDto; +import com.openhis.workflow.dto.AdjustPriceDto; +import com.openhis.workflow.service.IActivityDefinitionService; +import com.openhis.workflow.service.IInventoryItemService; + +/** + * @ClassName AdjustPriceServiceImpl + * @Description 调价业务实现 + * @Author raymond + * @Date 2025/10/15 16:10 + * @Version 1.0 + **/ +@Service +public class AdjustPriceServiceImpl implements IAdjustPriceService { + @Resource + private IInventoryItemService inventoryItemService; + @Resource + private IActivityDefinitionService activityDefinitionService; + @Resource + private IHealthcareServiceService healthcareServiceService; + @Resource + private IMedicationService medicationService; + @Resource + private AdjustPriceMapper adjustPriceMapper; + @Resource + private IDeviceDefinitionService deviceDefinitionService; + @Resource + private IOrganizationService organizationService; + @Resource + private IChargeItemDefinitionService chargeItemDefinitionService; + @Resource + private IChangePriceRecordService changePriceRecordService; + @Resource + private ISysDictDataService sysDictDataService; + @Resource + private AssignSeqUtil assignSeqUtil; + @Resource + private RedisUtil redisUtil; + + @Override + @Transactional(rollbackFor = Exception.class) + public R submitChangePriceData(List dataVoList) { + if (dataVoList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00001, null)); + } + if (dataVoList.stream() + .anyMatch(data -> this.redisUtil.hasKey(RedisKeys.getProductsKey(data.getItemId().toString())))) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00002, null)); + } + //获取数据中的类型 + Integer categoryType = dataVoList.get(0).getCategoryType(); + // 单据号 + String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.CHANGE_PRICE_BUZ.getPrefix()); + // 当前人 + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 根据表单提交的tab 进入不同的 execute + if (AdjustPriceEnum.MEDICINE.getCode().equals(categoryType) + || AdjustPriceEnum.CONSUMABLES.getCode().equals(categoryType)) { + //如果是 药品或者是耗材 因为药品和耗材的价格取的是 charge_detail表 + this.executeChangePriceForMedication(dataVoList, busNo, practitionerId, categoryType); + } else if (AdjustPriceEnum.DIAGNOSIS.getCode().equals(categoryType)) { + //如果是 如果是 诊疗, 取价格主表 + this.executeChangePriceForActivity(dataVoList, busNo, practitionerId); + } else { + //如果是 如果是 挂号, 取价格主表 + this.executeChangePriceForHealth(dataVoList, busNo, practitionerId); + } + return R.ok(); + } + + @Override + public R submitExamineChangePriceData(List dataVoList) { + if (dataVoList.isEmpty()) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00001, null)); + } + if (dataVoList.stream() + .anyMatch(data -> this.redisUtil.hasKey(RedisKeys.getProductsKey(data.getItemId().toString())))) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00002, null)); + } + //获取数据中的类型 + Integer categoryType = dataVoList.get(0).getCategoryType(); + // 单据号 + String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.CHANGE_PRICE_BUZ.getPrefix()); + // 当前人 + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 根据表单提交的tab 进入不同的 execute + if (AdjustPriceEnum.MEDICINE.getCode().equals(categoryType) + || AdjustPriceEnum.CONSUMABLES.getCode().equals(categoryType)) { + this.executeChangePriceForMedicationExamine(dataVoList, busNo, practitionerId, categoryType); + } else if (AdjustPriceEnum.DIAGNOSIS.getCode().equals(categoryType)) { + this.executeChangePriceForActivityExamine(dataVoList, busNo, practitionerId); + } else { + this.executeChangePriceForHealthExamine(dataVoList, busNo, practitionerId); + } + return R.ok(); + } + + @Override + public R searchKeyWordDataListByMed(String searchKey) { + //如果 searchKey == null 默认返回10条,反则 查询所有 + return R.ok(this.medicationService.searchMedListByKeyWord(searchKey)); + } + + @Override + public R searchKeyWordDataListByDevice(String searchKey) { + //如果 searchKey == null 默认返回10条,反则 查询所有 + return R.ok(this.deviceDefinitionService.searchDeviceListByKeyWord(searchKey)); + } + + @Override + public R searchKeyWordDataListByActivity(String searchKey) { + //如果 searchKey == null 默认返回10条,反则 查询所有 + return R.ok(this.activityDefinitionService.searchActivityListByKeyWord(searchKey)); + } + + @Override + public R searchChangePriceSubmitDataToPage(AdjustPriceManagerSearchParam adjustPriceManagerSearchParam, + Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + HashSet searchFields = new HashSet<>(); + searchFields.add(CommonConstants.FieldName.BusNo); + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(adjustPriceManagerSearchParam, searchKey, searchFields, request); + // 查询入库单据分页列表 + Page changePricePageDtoPage = this.adjustPriceMapper.searchChangePriceDataToPage( + new Page<>(pageNo, pageSize), queryWrapper, SupplyType.REQUEST_MEDICATION_CHANGE_PRICE.getValue(), + SupplyType.REQUEST_DEVICE_CHANGE_PRICE.getValue(), SupplyType.REQUEST_ACTIVITY_CHANGE_PRICE.getValue(), + SupplyType.REQUEST_HEALTH_CHANGE_PRICE.getValue(), practitionerId); + changePricePageDtoPage.getRecords().forEach(e -> { + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getItemCategoryEnum())); + }); + return R.ok(changePricePageDtoPage); + } + + @Override + public R searchChangePriceDataByMed(String busNo) { + // 根据 单据号 查询 药品详情 + List dataList = this.changePriceRecordService.searchMedChangePriceByBusNo(busNo, + SupplyType.REQUEST_MEDICATION_CHANGE_PRICE.getValue(), null); + // 获取 药品的单位 + for (ChangePriceDataDto changePriceDataDto : dataList) { + SysDictData sysDictData = + sysDictDataService.selectDictInfo(CommonConstants.FieldName.UnitCode, changePriceDataDto.getUnitCode()); + changePriceDataDto.setLabel(sysDictData.getDictLabel()); + } + return R.ok(dataList); + } + + @Override + public R searchChangePriceDataByDevice(String busNo) { + //根据 单据号 耗材调价单详情 + return R.ok(this.changePriceRecordService.searchDeviceChangePriceByBusNo(busNo, + SupplyType.REQUEST_DEVICE_CHANGE_PRICE.getValue(), null)); + } + + @Override + public R searchChangePriceDataByActivity(String busNo) { + //根据 单据号 查询 诊疗调价单详情 + return R.ok(this.changePriceRecordService.searchActivityChangePriceByBusNo(busNo, + SupplyType.REQUEST_ACTIVITY_CHANGE_PRICE.getValue(), null)); + } + + @Override + public R searchChangePriceDataByHealth(String busNo) { + //根据 单据号 挂号调价单详情 + return R.ok(this.changePriceRecordService.searchHealthChangePriceByBusNo(busNo, + SupplyType.REQUEST_HEALTH_CHANGE_PRICE.getValue(), null)); + } + + @Override + public R cancelChangePriceData(String busNo) { + //根据 单据号查询出 当前所有请求调价的数据集 + List changePriceRecordList = + this.changePriceRecordService.searchChangePriceDataForBusNo(busNo); + //循环数据集合,将状态修改为 无效状态 + for (ChangePriceRecord data : changePriceRecordList) { + ChangePriceRecord changePriceRecord = this.changePriceRecordService.getById(data.getId()); + changePriceRecord.setStatusEnum(SupplyStatus.EXPIRED_INVALIDATED.getValue()); + this.changePriceRecordService.updateById(changePriceRecord); + } + return R.ok(); + } + + @Override + public R searchAllOrgData() { + //查询所有科室 + List orgDataList = this.organizationService.searchOrgDataByHealth(); + return R.ok(orgDataList); + } + + @Override + public R searchHealthData(Long orgId) { + //根据科室ID 查询所有号源 + return R.ok(this.healthcareServiceService.searchAllHeathData(orgId,PublicationStatus.ACTIVE.getValue())); + } + + @Override + public R updateExamineByApproval(String busNo) { + //根据调价单编号 查询 分组后的 数据 + List changePriceRecordList = + this.changePriceRecordService.searchChangePriceDataGroupByBusNo(busNo); + if (!changePriceRecordList.isEmpty()) { + // 循环将数据进行填充 + for (ChangePriceRecord data : changePriceRecordList) { + //提交 审批时,查看是否有正在审核中的 货品数据 。根据 货品ID 从redis中查询 + if (this.redisUtil.hasKey(RedisKeys.getProductsKey(data.getItemId().toString()))) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00002, null)); + } + //如果不存在,向redis中插入 药品信息 = 给当前 货品上锁 。审批通过或驳回后 释放 + this.redisUtil.set(RedisKeys.getProductsKey(data.getItemId().toString()), data.getItemId()); + } + //根据 busNo 修改调价单状态 + this.changePriceRecordService.submitApproval(busNo); + } + return R.ok(); + } + + @Override + public R checkMedApprovalExist(Long itemId) { + //添加 货品调价时,先查询 当前货品是否在 审核中,如果在,不允许改价。 + return this.changePriceRecordService.searchMedChangePriceByItemId(itemId, + SupplyType.REQUEST_MEDICATION_CHANGE_PRICE.getValue(), SupplyStatus.APPROVAL.getValue()).isEmpty() ? R.ok() + : R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00002, null)); + } + + @Override + public R checkDeviceApprovalExist(Long itemId) { + //添加 货品调价时,先查询 当前货品是否在 审核中,如果在,不允许改价。 + return this.changePriceRecordService.searchDeviceChangePriceByItemId(itemId, + SupplyType.REQUEST_DEVICE_CHANGE_PRICE.getValue(), SupplyStatus.APPROVAL.getValue()).isEmpty() ? R.ok() + : R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00002, null)); + } + + @Override + public R checkActivityApprovalExist(Long itemId) { + //添加 货品调价时,先查询 当前货品是否在 审核中,如果在,不允许改价。 + return this.changePriceRecordService.searchActivityChangePriceByItemId(itemId, + SupplyType.REQUEST_ACTIVITY_CHANGE_PRICE.getValue(), SupplyStatus.APPROVAL.getValue()).isEmpty() ? R.ok() + : R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00002, null)); + } + + @Override + public R checkHealthApprovalExist(Long itemId) { + //添加 货品调价时,先查询 当前货品是否在 审核中,如果在,不允许改价。 + return this.changePriceRecordService.searchHealthChangePriceByItemId(itemId, + SupplyType.REQUEST_HEALTH_CHANGE_PRICE.getValue(), SupplyStatus.APPROVAL.getValue()).isEmpty() ? R.ok() + : R.fail(MessageUtils.createMessage(PromptMsgConstant.AdjustPrice.M00002, null)); + } + + public boolean executeChangePriceForMedication(List dataVoList, String busNo, + Long practitionerId, Integer categoryType) { + // 有库存的药品或耗材集合 + List resultList = new LinkedList<>(); + // 从map中将表单集合取出 + Map dataVoMap = this.executeMap(dataVoList); + //根据表单中的id数组 加载库存集合 + List inventoryItemList = + this.inventoryItemService.searchResultDataList(this.executeItemIds(dataVoList)); + for (AdjustPriceDto data : inventoryItemList) { + AdjustPriceDataVo dataVo = new AdjustPriceDataVo(); + dataVo.setTotalQuantity(data.getTotalCount()); + dataVo.setItemTable(data.getItemTable()); + dataVo.setItemId(data.getItemId()); + dataVo.setNewBuyingPrice(dataVoMap.get(data.getItemId()).getNewBuyingPrice()); + dataVo.setNewRetailPrice(dataVoMap.get(data.getItemId()).getNewRetailPrice()); + dataVo.setReason(dataVoMap.get(data.getItemId()).getReason()); + dataVo.setUnitCode(dataVoMap.get(data.getItemId()).getUnitCode()); + dataVo.setLotNumber(data.getLotNumber()); + dataVo.setLocationId(data.getLocationId()); + resultList.add(dataVo); + } + //填充 ChangePriceRecord 对象,返回list进行批量添加 + List changePriceRecords = + this.executeChangePriceData(busNo, practitionerId, resultList, SupplyStatus.PENDING_APPROVAL.getValue(), + AdjustPriceEnum.MEDICINE.getCode().equals(categoryType) + ? SupplyType.REQUEST_MEDICATION_CHANGE_PRICE.getValue() + : SupplyType.REQUEST_DEVICE_CHANGE_PRICE.getValue()); + return this.changePriceRecordService.saveOrUpdateBatch(changePriceRecords); + } + + public boolean executeChangePriceForMedicationExamine(List dataVoList, String busNo, + Long practitionerId, Integer categoryType) { + // 有库存的药品或耗材集合 + List resultList = new LinkedList<>(); + Map dataVoMap = this.executeMap(dataVoList); + List inventoryItemList = + this.inventoryItemService.searchResultDataList(this.executeItemIds(dataVoList)); + for (AdjustPriceDto data : inventoryItemList) { + AdjustPriceDataVo dataVo = new AdjustPriceDataVo(); + dataVo.setTotalQuantity(data.getTotalCount()); + dataVo.setItemTable(data.getItemTable()); + dataVo.setItemId(data.getItemId()); + dataVo.setNewBuyingPrice(dataVoMap.get(data.getItemId()).getNewBuyingPrice()); + dataVo.setNewRetailPrice(dataVoMap.get(data.getItemId()).getNewRetailPrice()); + dataVo.setReason(dataVoMap.get(data.getItemId()).getReason()); + dataVo.setUnitCode(dataVoMap.get(data.getItemId()).getUnitCode()); + dataVo.setLotNumber(data.getLotNumber()); + dataVo.setLocationId(data.getLocationId()); + resultList.add(dataVo); + this.redisUtil.set(RedisKeys.getProductsKey(data.getItemId().toString()), data.getItemId()); + } + //填充 ChangePriceRecord 对象,返回list进行批量添加 + List changePriceRecords = + this.executeChangePriceData(busNo, practitionerId, resultList, SupplyStatus.APPROVAL.getValue(), + AdjustPriceEnum.MEDICINE.getCode().equals(categoryType) + ? SupplyType.REQUEST_MEDICATION_CHANGE_PRICE.getValue() + : SupplyType.REQUEST_DEVICE_CHANGE_PRICE.getValue()); + return this.changePriceRecordService.saveOrUpdateBatch(changePriceRecords); + } + + public boolean executeChangePriceForActivity(List dataVoList, String busNo, + Long practitionerId) { + List dataDtoList = + this.activityDefinitionService.searchActivityDefinitionByIds(this.executeItemIds(dataVoList)); + Map dataVoMap = this.executeMap(dataVoList); + List resultList = new LinkedList<>(); + for (ActivityDto data : dataDtoList) { + AdjustPriceDataVo dataVo = new AdjustPriceDataVo(); + dataVo.setItemTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); + dataVo.setName(data.getName()); + dataVo.setItemId(data.getItemId()); + dataVo.setNewBuyingPrice(dataVoMap.get(data.getItemId()).getNewBuyingPrice()); + dataVo.setNewRetailPrice(dataVoMap.get(data.getItemId()).getNewRetailPrice()); + dataVo.setReason(dataVoMap.get(data.getItemId()).getReason()); + dataVo.setLotNumber(dataVoMap.get(data.getItemId()).getLotNumber()); + resultList.add(dataVo); + } + //填充 ChangePriceRecord 对象,返回list进行批量添加 + List changePriceRecords = this.executeChangePriceData(busNo, practitionerId, resultList, + SupplyStatus.PENDING_APPROVAL.getValue(), SupplyType.REQUEST_ACTIVITY_CHANGE_PRICE.getValue()); + return this.changePriceRecordService.saveOrUpdateBatch(changePriceRecords); + } + + /** + * Desc: 处理申请 诊疗改价业务申请 + * + * @param dataVoList + * @Author raymond + * @Date 11:19 2025/10/18 + * @return boolean + **/ + public boolean executeChangePriceForActivityExamine(List dataVoList, String busNo, + Long practitionerId) { + List dataDtoList = + this.activityDefinitionService.searchActivityDefinitionByIds(this.executeItemIds(dataVoList)); + Map dataVoMap = this.executeMap(dataVoList); + List resultList = new LinkedList<>(); + for (ActivityDto data : dataDtoList) { + AdjustPriceDataVo dataVo = new AdjustPriceDataVo(); + dataVo.setItemTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); + dataVo.setName(data.getName()); + dataVo.setItemId(data.getItemId()); + dataVo.setNewBuyingPrice(dataVoMap.get(data.getItemId()).getNewBuyingPrice()); + dataVo.setNewRetailPrice(dataVoMap.get(data.getItemId()).getNewRetailPrice()); + dataVo.setReason(dataVoMap.get(data.getItemId()).getReason()); + dataVo.setLotNumber(dataVoMap.get(data.getItemId()).getLotNumber()); + resultList.add(dataVo); + this.redisUtil.set(RedisKeys.getProductsKey(data.getItemId().toString()), data.getItemId()); + } + //填充 ChangePriceRecord 对象,返回list进行批量添加 + List changePriceRecords = this.executeChangePriceData(busNo, practitionerId, resultList, + SupplyStatus.APPROVAL.getValue(), SupplyType.REQUEST_ACTIVITY_CHANGE_PRICE.getValue()); + return this.changePriceRecordService.saveOrUpdateBatch(changePriceRecords); + } + + /** + * Desc: 处理申请 挂号改价业务 + * + * @param dataVoList + * @Author raymond + * @Date 11:20 2025/10/18 + * @return boolean + **/ + public boolean executeChangePriceForHealth(List dataVoList, String busNo, Long practitionerId) { + List dataDtoList = + this.healthcareServiceService.searchHealthByIds(this.executeItemIds(dataVoList)); + List resultList = new LinkedList<>(); + Map dataVoMap = this.executeMap(dataVoList); + for (HealthcareDto data : dataDtoList) { + AdjustPriceDataVo dataVo = new AdjustPriceDataVo(); + dataVo.setItemTable(CommonConstants.TableName.ADM_HEALTHCARE_SERVICE); + dataVo.setItemId(data.getItemId()); + dataVo.setName(data.getName()); + dataVo.setNewBuyingPrice(dataVoMap.get(data.getItemId()).getNewBuyingPrice()); + dataVo.setNewRetailPrice(dataVoMap.get(data.getItemId()).getNewRetailPrice()); + dataVo.setReason(dataVoMap.get(data.getItemId()).getReason()); + dataVo.setLotNumber(dataVoMap.get(data.getItemId()).getLotNumber()); + resultList.add(dataVo); + } + //填充 ChangePriceRecord 对象,返回list进行批量添加 supply_request表共享了 审核状态和 category 枚举 + List changePriceRecords = this.executeChangePriceData(busNo, practitionerId, resultList, + SupplyStatus.PENDING_APPROVAL.getValue(), SupplyType.REQUEST_HEALTH_CHANGE_PRICE.getValue()); + return this.changePriceRecordService.saveOrUpdateBatch(changePriceRecords); + } + + /** + * Desc: 处理申请 挂号改价业务 + * + * @param dataVoList + * @Author raymond + * @Date 11:20 2025/10/18 + * @return boolean + **/ + public boolean executeChangePriceForHealthExamine(List dataVoList, String busNo, + Long practitionerId) { + List dataDtoList = + this.healthcareServiceService.searchHealthByIds(this.executeItemIds(dataVoList)); + List resultList = new LinkedList<>(); + Map dataVoMap = this.executeMap(dataVoList); + for (HealthcareDto data : dataDtoList) { + AdjustPriceDataVo dataVo = new AdjustPriceDataVo(); + dataVo.setItemTable(CommonConstants.TableName.ADM_HEALTHCARE_SERVICE); + dataVo.setItemId(data.getItemId()); + dataVo.setName(data.getName()); + dataVo.setNewBuyingPrice(dataVoMap.get(data.getItemId()).getNewBuyingPrice()); + dataVo.setNewRetailPrice(dataVoMap.get(data.getItemId()).getNewRetailPrice()); + dataVo.setReason(dataVoMap.get(data.getItemId()).getReason()); + dataVo.setLotNumber(dataVoMap.get(data.getItemId()).getLotNumber()); + resultList.add(dataVo); + this.redisUtil.set(RedisKeys.getProductsKey(data.getItemId().toString()), data.getItemId()); + } + //填充 ChangePriceRecord 对象,返回list进行批量添加 supply_request表共享了 审核状态和 category 枚举 + List changePriceRecords = this.executeChangePriceData(busNo, practitionerId, resultList, + SupplyStatus.APPROVAL.getValue(), SupplyType.REQUEST_HEALTH_CHANGE_PRICE.getValue()); + return this.changePriceRecordService.saveOrUpdateBatch(changePriceRecords); + } + + /** + * Desc: 封装对象数据 + * + * @param busNo + * @param curUserId + * @param itemList + * @Author raymond + * @Date 09:35 2025/10/18 + * @return java.util.List + **/ + public List executeChangePriceData(String busNo, Long curUserId, + List itemList, Integer statusEnum, Integer categoryEnum) { + List srList = new LinkedList<>(); + for (AdjustPriceDataVo dataVo : itemList) { + ChangePriceRecord cpr = new ChangePriceRecord(); + //如果是 药品调价 + if (SupplyType.REQUEST_MEDICATION_CHANGE_PRICE.getValue().equals(categoryEnum)) { + // 获取当前进货价 + ChargeItemDefDetailPriceDto buyingPriceDto = this.chargeItemDefinitionService + .getMedPriceByParam(ConditionCode.LOT_NUMBER_COST.getCode(), dataVo.getItemId()); + // 获取当前零售价 + ChargeItemDefDetailPriceDto retailPriceDto = this.chargeItemDefinitionService + .getMedPriceByParam(ConditionCode.LOT_NUMBER_PRICE.getCode(), dataVo.getItemId()); + if (buyingPriceDto != null || retailPriceDto != null) { + // 库存 以最小单位存储,以货品最小单位进行计算 + BigDecimal partPercent = + dataVo.getTotalQuantity().divide(buyingPriceDto.getPartPercent(), 6, RoundingMode.HALF_UP); + //进货价盈负差 + BigDecimal buyingDiffPrice = + dataVo.getNewBuyingPrice().subtract(buyingPriceDto.getPrice()).multiply(partPercent); + // 零售价盈负差 + BigDecimal retailDiffPrice = + dataVo.getNewRetailPrice().subtract(retailPriceDto.getPrice()).multiply(partPercent); + //填充 change_price_record表数据 + cpr.setNewBuyingPrice(dataVo.getNewBuyingPrice()).setNewRetailPrice(dataVo.getNewRetailPrice()) + .setItemQuantity(dataVo.getTotalQuantity()).setItemId(dataVo.getItemId()) + .setItemTable(dataVo.getItemTable()).setReason(dataVo.getReason()).setBusNo(busNo) + .setApplicantId(curUserId).setStatusEnum(statusEnum).setItemCategoryEnum(categoryEnum) + .setLotNumber(dataVo.getLotNumber()).setUnitCode(dataVo.getUnitCode()) + .setOriginBuyingPrice(buyingPriceDto.getPrice()).setOriginRetailPrice(retailPriceDto.getPrice()) + .setDifferenceBuyingPrice(buyingDiffPrice).setDifferenceRetailPrice(retailDiffPrice) + .setApplicantTime(SupplyStatus.APPROVAL.getValue().equals(statusEnum) ? new Date() : null); + srList.add(cpr); + } //如果是 耗材调价 + } else if (SupplyType.REQUEST_DEVICE_CHANGE_PRICE.getValue().equals(categoryEnum)) { + // 获取当前进货价 + ChargeItemDefDetailPriceDto buyingPriceDto = this.chargeItemDefinitionService + .getDevicePriceByParam(ConditionCode.LOT_NUMBER_COST.getCode(), dataVo.getItemId()); + // 获取当前零售价 + ChargeItemDefDetailPriceDto retailPriceDto = this.chargeItemDefinitionService + .getDevicePriceByParam(ConditionCode.LOT_NUMBER_PRICE.getCode(), dataVo.getItemId()); + if (buyingPriceDto != null || retailPriceDto != null) { + // 库存 以最小单位存储,以货品最小单位进行计算 + BigDecimal partPercent = + dataVo.getTotalQuantity().divide(buyingPriceDto.getPartPercent(), 6, RoundingMode.HALF_UP); + //进货价盈负差 + BigDecimal buyingDiffPrice = + dataVo.getNewBuyingPrice().subtract(buyingPriceDto.getPrice()).multiply(partPercent); + // 零售价盈负差 + BigDecimal retailDiffPrice = + dataVo.getNewRetailPrice().subtract(retailPriceDto.getPrice()).multiply(partPercent); + //填充 change_price_record表数据 + cpr.setNewBuyingPrice(dataVo.getNewBuyingPrice()).setNewRetailPrice(dataVo.getNewRetailPrice()) + .setItemQuantity(dataVo.getTotalQuantity()).setItemId(dataVo.getItemId()).setLocationId(dataVo.getLocationId()) + .setItemTable(dataVo.getItemTable()).setReason(dataVo.getReason()).setBusNo(busNo) + .setApplicantId(curUserId).setStatusEnum(statusEnum).setItemCategoryEnum(categoryEnum) + .setLotNumber(dataVo.getLotNumber()).setUnitCode(dataVo.getUnitCode()) + .setOriginBuyingPrice(buyingPriceDto.getPrice()).setOriginRetailPrice(retailPriceDto.getPrice()) + .setDifferenceBuyingPrice(buyingDiffPrice).setDifferenceRetailPrice(retailDiffPrice) + .setApplicantTime(SupplyStatus.APPROVAL.getValue().equals(statusEnum) ? new Date() : null); + srList.add(cpr); + } + } else {//如果是 诊疗或者挂号调价,诊疗和耗材 没有库存 + ChargeItemDefDetailPriceDto retailPriceDto = this.chargeItemDefinitionService + .getProductPrice(PublicationStatus.ACTIVE.getValue(), dataVo.getItemId()); + if (retailPriceDto != null) { + //新价格 - 原价格 + BigDecimal retailDiffPrice = dataVo.getNewRetailPrice().subtract(retailPriceDto.getPrice()); + //填充 change_price_record表数据 + cpr.setNewBuyingPrice(dataVo.getNewBuyingPrice()).setNewRetailPrice(dataVo.getNewRetailPrice()) + .setItemQuantity(dataVo.getTotalQuantity()).setItemId(dataVo.getItemId()) + .setItemTable(dataVo.getItemTable()).setReason(dataVo.getReason()).setBusNo(busNo) + .setApplicantId(curUserId).setStatusEnum(statusEnum).setItemCategoryEnum(categoryEnum) + .setLotNumber(dataVo.getLotNumber()).setUnitCode(dataVo.getUnitCode()) + .setOriginRetailPrice(retailPriceDto.getPrice()).setDifferenceRetailPrice(retailDiffPrice) + .setApplicantTime(SupplyStatus.APPROVAL.getValue().equals(statusEnum) ? new Date() : null); + srList.add(cpr); + } + } + } + return srList; + } + + /** + * Desc: 封装获取药品和耗材的id数组 + * + * @param dataVoList + * @Author raymond + * @Date 08:03 2025/10/18 + * @return java.util.List + **/ + public List executeItemIds(List dataVoList) { + List itemIds = new LinkedList<>(); + for (AdjustPriceDataVo data : dataVoList) { + itemIds.add(data.getItemId()); + } + return itemIds; + } + /** + * Desc: 存储表单数据 + * @param dataVoList + * @Author raymond + * @Date 10:28 2025/11/5 + * @return java.util.Map + **/ + public Map executeMap(List dataVoList) { + Map map = new ConcurrentHashMap<>(); + for (AdjustPriceDataVo data : dataVoList) { + map.put(data.getItemId(), data); + } + return map; + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/impl/SupplyServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/impl/SupplyServiceImpl.java deleted file mode 100644 index 55283471..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/appservice/impl/SupplyServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.openhis.web.adjustprice.appservice.impl; - -import com.openhis.web.adjustprice.appservice.ISupplyService; -import com.openhis.web.adjustprice.dto.SupplyListDto; -import com.openhis.web.adjustprice.mapper.SupplyMapper; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.List; - -/** - * @ClassName ChangePriceImpl - * @Description TODO - * @Author raymond - * @Date 2025/10/15 16:10 - * @Version 1.0 - **/ -@Component -public class SupplyServiceImpl implements ISupplyService { - - @Resource - private SupplyMapper supplyMapper; - - @Override - public List searchAllSupplyList() { - return this.supplyMapper.searchAllSupplyList(); - } -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/controller/ChangePriceController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/controller/ChangePriceController.java index 21480ed8..55ef8cb0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/controller/ChangePriceController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/controller/ChangePriceController.java @@ -1,13 +1,15 @@ package com.openhis.web.adjustprice.controller; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - +import com.core.common.core.domain.R; +import com.core.common.enums.TenantOptionDict; +import com.core.web.util.TenantOptionUtil; +import com.openhis.common.enums.OrderPricingSource; +import com.openhis.web.adjustprice.appservice.IAdjustPriceService; +import com.openhis.web.adjustprice.dto.AdjustPriceDataVo; import org.springframework.web.bind.annotation.*; -import com.core.common.core.domain.R; -import com.openhis.web.adjustprice.appservice.ISupplyService; -import com.openhis.web.datadictionary.dto.MedicationSearchParam; +import javax.annotation.Resource; +import java.util.List; /** * @ClassName ChargePriceController @@ -19,94 +21,163 @@ import com.openhis.web.datadictionary.dto.MedicationSearchParam; @RestController @RequestMapping("/change/price") public class ChangePriceController { + @Resource - private ISupplyService supplyService; + private IAdjustPriceService adjustPriceService; /** - * Desc: 查询所有供应商集合 - * + * Desc: 根据关键词搜索数据 + * * @param - * @Author raymond - * @Date 16:55 2025/10/15 * @return com.core.common.core.domain.R + * @Author raymond + * @Date 09:26 2025/10/20 **/ - @GetMapping(value = "searchAllSupply") - public R searchAllSupply() { - return R.ok(this.supplyService.searchAllSupplyList()); + @PostMapping(value = "searchKeyWordDataListByMed") + public R searchKeyWordDataListByMed(@RequestParam(name = "searchKey", required = false) String searchKey) { + return R.ok(this.adjustPriceService.searchKeyWordDataListByMed(searchKey)); + } + + /** + * Desc: 根据关键词搜索数据 + * + * @param + * @return com.core.common.core.domain.R + * @Author raymond + * @Date 09:26 2025/10/20 + **/ + @PostMapping(value = "searchKeyWordDataListByDevice") + public R searchKeyWordDataListByDevice(@RequestParam(name = "searchKey", required = false) String searchKey) { + return R.ok(this.adjustPriceService.searchKeyWordDataListByDevice(searchKey)); + } + + /** + * Desc: 根据关键词搜索数据 + * + * @param + * @return com.core.common.core.domain.R + * @Author raymond + * @Date 09:26 2025/10/20 + **/ + @PostMapping(value = "searchKeyWordDataListByActivity") + public R searchKeyWordDataListByActivity(@RequestParam(name = "searchKey", required = false) String searchKey) { + return R.ok(this.adjustPriceService.searchKeyWordDataListByActivity(searchKey)); + } + + /** + * Desc: 查询所有 有挂号信息的科室 + * + * @param + * @return com.core.common.core.domain.R + * @Author raymond + * @Date 08:38 2025/10/22 + **/ + @PostMapping(value = "searchAllOrgData") + public R searchAllOrgData() { + return this.adjustPriceService.searchAllOrgData(); + } + + /** + * Desc: 根据科室id 加载 挂号信息 + * + * @param orgId + * @return com.core.common.core.domain.R + * @Author raymond + * @Date 16:46 2025/10/22 + **/ + @PostMapping(value = "searchHealthData") + public R searchHealthData(@RequestParam Long orgId) { + return this.adjustPriceService.searchHealthData(orgId); + } + + /** + * Desc: 保存 改价数据 + * + * @return com.core.common.core.domain.R + * @Author raymond + * @Date 08:47 2025/10/15 + **/ + @PostMapping(value = "commitChangePriceData") + public R commitChangePriceData(@RequestBody List dataVoList) { + return adjustPriceService.submitChangePriceData(dataVoList); } /** * Desc: 根据供应商和药品名称加载要修改的药品数据 - * + * + * @return com.core.common.core.domain.R * @Author raymond * @Date 08:47 2025/10/15 - * @return com.core.common.core.domain.R **/ - @PostMapping(value = "searchMedicineListToPage") - public R searchMedicineListToPage() { - return R.ok(); + @PostMapping(value = "submitExamineChangePriceData") + public R submitExamineChangePriceData(@RequestBody List dataVoList) { + return adjustPriceService.submitExamineChangePriceData(dataVoList); } /** - * Desc: - * - * @param medicationSearchParam - * @param searchKey - * @param pageNo - * @param pageSize - * @param request - * @Author raymond - * @Date 13:41 2025/10/15 + * Desc: 根据货品ID 查询是否有审核中的药品数据 + * + * @param itemId * @return com.core.common.core.domain.R + * @Author raymond + * @Date 17:32 2025/11/3 **/ - @PostMapping(value = "searchConsumablesListToPage") - public R searchConsumablesListToPage(MedicationSearchParam medicationSearchParam, - @RequestParam(value = "searchKey", defaultValue = "") String searchKey, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - - return null; + @PostMapping(value = "checkMedApprovalExist") + public R checkMedApprovalExist(@RequestParam Long itemId) { + return this.adjustPriceService.checkMedApprovalExist(itemId); } /** - * Desc: - * - * @param medicationSearchParam - * @param searchKey - * @param pageNo - * @param pageSize - * @param request - * @Author raymond - * @Date 13:41 2025/10/15 + * Desc: 根据货品ID 查询是否有审核中的药品数据 + * + * @param itemId * @return com.core.common.core.domain.R + * @Author raymond + * @Date 17:32 2025/11/3 **/ - @PostMapping(value = "searchDiagnosisListToPage") - public R searchDiagnosisListToPage(MedicationSearchParam medicationSearchParam, - @RequestParam(value = "searchKey", defaultValue = "") String searchKey, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - - return null; + @PostMapping(value = "checkDeviceApprovalExist") + public R checkDeviceApprovalExist(@RequestParam Long itemId) { + return this.adjustPriceService.checkDeviceApprovalExist(itemId); } /** - * Desc: - * - * @param medicationSearchParam - * @param searchKey - * @param pageNo - * @param pageSize - * @param request - * @Author raymond - * @Date 13:41 2025/10/15 + * Desc: 根据货品ID 查询是否有审核中的药品数据 + * + * @param itemId * @return com.core.common.core.domain.R + * @Author raymond + * @Date 17:32 2025/11/3 **/ - @PostMapping(value = "searchHealthCareListToPage") - public R searchRegisterListToPage(MedicationSearchParam medicationSearchParam, - @RequestParam(value = "searchKey", defaultValue = "") String searchKey, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + @PostMapping(value = "checkActivityApprovalExist") + public R checkActivityApprovalExist(@RequestParam Long itemId) { + return this.adjustPriceService.checkActivityApprovalExist(itemId); + } - return null; + /** + * Desc: 根据货品ID 查询是否有审核中的药品数据 + * + * @param itemId + * @return com.core.common.core.domain.R + * @Author raymond + * @Date 17:32 2025/11/3 + **/ + @PostMapping(value = "checkHealthApprovalExist") + public R checkHealthApprovalExist(@RequestParam Long itemId) { + return this.adjustPriceService.checkHealthApprovalExist(itemId); + } + + /** + * Desc: 查询调价控制开关状态接口 + * + * @return true:统一零售价 , false:按批次号售卖 + **/ + @GetMapping(value = "getAdjustPriceSwitchState") + public R getAdjustPriceSwitchState() { + // 医嘱定价来源 + String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE); + if (OrderPricingSource.RETAIL_PRICE.getCode().equals(orderPricingSource)) { + return R.ok(true); + } + return R.ok(false); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/controller/ChangePriceDataListPageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/controller/ChangePriceDataListPageController.java new file mode 100644 index 00000000..f1ec5561 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/controller/ChangePriceDataListPageController.java @@ -0,0 +1,153 @@ +package com.openhis.web.adjustprice.controller; + +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.core.common.utils.StringUtils; +import com.openhis.web.adjustprice.appservice.IAdjustPriceService; +import com.openhis.web.adjustprice.dto.AdjustPriceDataVo; +import com.openhis.web.adjustprice.dto.AdjustPriceManagerSearchParam; + +/** + * @ClassName ChangePriceListPageController + * @Description TODO + * @Author raymond + * @Date 2025/10/23 15:16 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/change/price/list") +public class ChangePriceDataListPageController { + + @Resource + private IAdjustPriceService adjustPriceService; + + /** + * Desc: 查询 调价管理列表页面 分页查询当前人 提交的调价单 + * + * @param adjustPriceManagerSearchParam + * @param pageNo + * @param pageSize + * @param searchKey + * @param request + * @Author raymond + * @Date 15:47 2025/10/23 + * @return com.core.common.core.domain.R + **/ + @GetMapping(value = "getPage") + public R getPage(AdjustPriceManagerSearchParam adjustPriceManagerSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return this.adjustPriceService.searchChangePriceSubmitDataToPage(adjustPriceManagerSearchParam, pageNo, + pageSize, searchKey, request); + } + + /** + * Desc: 根据单据号 进行提交审核操作 + * + * @param busNo + * @Author raymond + * @Date 09:38 2025/10/23 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "updateStatusByApproval") + public R updateStatusByApproval(@RequestParam String busNo) { + return this.adjustPriceService.updateExamineByApproval(busNo); + } + + /** + * Desc: 作废 调价单数据 + * + * @param busNo + * @Author raymond + * @Date 14:47 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "cancelChangePriceData") + public R cancelChangePriceData(@RequestParam String busNo) { + return this.adjustPriceService.cancelChangePriceData(busNo); + } + + /** + * Desc: 根据供应商和药品名称加载要修改的药品数据 + * + * + * @Author raymond + * @Date 08:47 2025/10/15 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "submitChangePriceData") + public R submitChangePriceData(@RequestBody List dataVoList) { + return adjustPriceService.submitChangePriceData(dataVoList); + } + + /** + * Desc: 根据 单据号 药品调价单 查询详情 + * + * @param busNo + * @Author raymond + * @Date 12:01 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "searchChangePriceDataByMed") + public R searchChangePriceDataByMed(@RequestParam String busNo) { + if (StringUtils.isEmpty(busNo)) { + return R.fail(); + } + return this.adjustPriceService.searchChangePriceDataByMed(busNo); + } + + /** + * Desc: 根据 单据号 耗材调价单 查询详情 + * + * @param busNo + * @Author raymond + * @Date 12:01 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "searchChangePriceDataByDevice") + public R searchChangePriceDataByDevice(@RequestParam String busNo) { + if (StringUtils.isEmpty(busNo)) { + return R.fail(); + } + return this.adjustPriceService.searchChangePriceDataByDevice(busNo); + } + + /** + * Desc: 根据 单据号 诊疗调价单 查询详情 + * + * @param busNo + * @Author raymond + * @Date 12:01 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "searchChangePriceDataByActivity") + public R searchChangePriceDataByActivity(@RequestParam String busNo) { + if (StringUtils.isEmpty(busNo)) { + return R.fail(); + } + return this.adjustPriceService.searchChangePriceDataByActivity(busNo); + } + + /** + * Desc: 根据 单据号 挂号调价单 查询详情 + * + * @param busNo + * @Author raymond + * @Date 12:01 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "searchChangePriceDataByHealth") + public R searchChangePriceDataByHealth(@RequestParam String busNo) { + if (StringUtils.isEmpty(busNo)) { + return R.fail(); + } + return this.adjustPriceService.searchChangePriceDataByHealth(busNo); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/AdjustPriceDataVo.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/AdjustPriceDataVo.java new file mode 100644 index 00000000..70ad133b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/AdjustPriceDataVo.java @@ -0,0 +1,72 @@ +package com.openhis.web.adjustprice.dto; + +import java.math.BigDecimal; + +import lombok.Data; + +/** + * @ClassName AdjustPriceDataVo + * @Description TODO + * @Author raymond + * @Date 2025/10/16 08:31 + * @Version 1.0 + **/ +@Data +public class AdjustPriceDataVo { + /** + * 表ID + */ + private Long itemId; + /** + * 分类 0、药品;1、耗材;2、诊疗;3、挂号 + */ + private Integer categoryType; + /** + * 改价原因 + */ + private String reason; + /** + * 新进货价 + */ + private BigDecimal newBuyingPrice; + /** + * 新售价 + */ + private BigDecimal newRetailPrice; + /** + * 经手人 + */ + private Long practitionerId; + /** + * 每个批次影响数量 + */ + private BigDecimal quantity; + /** + * 总数量 + */ + private BigDecimal totalQuantity; + /** + * 表名 + */ + private String itemTable; + /** + * 单据号 + */ + private String busNo; + + private String name; + /** + * 批次号 + */ + private String lotNumber; + /** + * 单位 + */ + private String unitCode; + /** + * 位置 + */ + private Long locationId; + + private BigDecimal finalTotalQuantity; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/AdjustPriceManagerSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/AdjustPriceManagerSearchParam.java new file mode 100644 index 00000000..b90c1a6e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/AdjustPriceManagerSearchParam.java @@ -0,0 +1,33 @@ +package com.openhis.web.adjustprice.dto; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @ClassName AdjustPriceManagerSearchParam + * @Description 改价管理 查询条件 + * @Author raymond + * @Date 2025/10/24 16:23 + * @Version 1.0 + **/ +@Data +@Accessors(chain = true) +public class AdjustPriceManagerSearchParam { + + /** 审核状态 */ + private Integer statusEnum; + + /** 单据类型 */ + private Integer itemCategoryEnum; + /** + * 单据时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date applicantTime; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/ChangePriceDataDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/ChangePriceDataDto.java new file mode 100644 index 00000000..a2db0277 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/ChangePriceDataDto.java @@ -0,0 +1,96 @@ +package com.openhis.web.adjustprice.dto; + +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; + +/** + * @ClassName ChangePricePageDto + * @Description TODO + * @Author raymond + * @Date 2025/10/31 17:35 + * @Version 1.0 + **/ +@Data +public class ChangePriceDataDto { + + /** 批次号 */ + private String originLotNumber; + + /** 改价申请人id */ + private Long applicantId; + + /** 目标枚举 药品、耗材、诊疗、挂号 */ + private Integer itemCategoryEnum; + private String itemCategoryEnum_Text; + + /** 药品ID、耗材ID、诊疗ID、挂号ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + /** + * 获取名称 + */ + private String itemName; + /** 原进货价 */ + private BigDecimal originBuyingPrice; + + /** 原零售价价格 */ + private BigDecimal originRetailPrice; + + /** 当前品库存量 */ + private BigDecimal itemQuantity; + + /** 当前业务批次号 */ + private String busNo; + + /** 改价申请时间 */ + private Date applicantTime; + + /** 新进货价 */ + private BigDecimal newBuyingPrice; + + /** 新零售价 */ + private BigDecimal newRetailPrice; + + /** 物品计量单位 */ + private String unitCode; + + /** 审批状态 */ + private Integer statusEnum; + private Integer statusEnum_Text; + + /** 批次号 */ + private String lotNumber; + + /** 条件理由 */ + private String reason; + + /** 零售价盈负差*/ + private BigDecimal differenceRetailPrice; + /**进货价盈负差*/ + private BigDecimal differenceBuyingPrice; + /** + * 科室名称 + */ + private String orgName; + /** + * 价格主表ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long chargeId; + /** + * 调价表ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long changePriceRecordId; + + private String label; + /** + * 规格 + */ + private String totalVolume; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/ChangePricePageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/ChangePricePageDto.java new file mode 100644 index 00000000..a6c24741 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/ChangePricePageDto.java @@ -0,0 +1,67 @@ +package com.openhis.web.adjustprice.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; + +import lombok.Data; + +/** + * @ClassName ChangePricePageDto + * @Description 改价业务分页dto + * @Author raymond + * @Date 2025/11/1 22:53 + * @Version 1.0 + **/ +@Data +public class ChangePricePageDto { + + /** 单据号 */ + private String busNo; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** 审批时间 */ + private Date approvalTime; + + /** 申请人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long applicantId; + private String applicantId_dictText; + + /** 申请时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date applicantTime; + + /** 制单日期 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 备注 */ + private String reason; + + /** + * 24、药品 + */ + private Integer itemCategoryEnum; + private String categoryEnum_enumText; + + private BigDecimal originRetailPrice; + private BigDecimal originBuyingPrice; + private BigDecimal newBuyingPrice; + private BigDecimal newRetailPrice; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/SupplyListDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/SupplyListDto.java deleted file mode 100644 index 9a27fc88..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/dto/SupplyListDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.openhis.web.adjustprice.dto; - -import lombok.Data; - -/** - * @ClassName SupplyListDto - * @Description TODO - * @Author raymond - * @Date 2025/10/15 16:56 - * @Version 1.0 - **/ -@Data -public class SupplyListDto { - /** - * 供应商ID - */ - private Long supplyId; - /** - * 供应商名称 - */ - private String supplyName; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/mapper/AdjustPriceMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/mapper/AdjustPriceMapper.java new file mode 100644 index 00000000..c295cdb7 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/mapper/AdjustPriceMapper.java @@ -0,0 +1,155 @@ +package com.openhis.web.adjustprice.mapper; + +import com.openhis.web.adjustprice.dto.ChangePriceDataDto; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.web.adjustprice.dto.ChangePricePageDto; +import com.openhis.web.inventorymanage.dto.InventorySearchParam; +import com.openhis.web.inventorymanage.dto.ReceiptPageDto; + +import java.util.List; + +/** + * Desc: + * + * @Author raymond + * @Date 14:37 2025/10/15 + * @return + **/ +@Component +public interface AdjustPriceMapper { + /** + * Desc: 查询单据审批分页列表 + * + * @param page + * @param queryWrapper + * @param medTypeEnum + * @param deviceTypeEnum + * @param activityTypeEnum + * @param healthTypeEnum + * @Author raymond + * @Date 16:01 2025/10/24 + * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page + **/ + Page selectInventoryReceiptPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medTypeEnum") Integer medTypeEnum, @Param("deviceTypeEnum") Integer deviceTypeEnum, + @Param("activityTypeEnum") Integer activityTypeEnum, @Param("healthTypeEnum") Integer healthTypeEnum); + + /** + * Desc: 根据当前人 ID 查询提交的调价申请记录 + * + * @param page + * @param queryWrapper + * @param medCategory + * @param deviceCategory + * @param activityCategory + * @param healthCategory + * @param applicantId + * @Author raymond + * @Date 00:59 2025/11/2 + * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page + **/ + Page searchChangePriceDataToPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medCategory") Integer medCategory, @Param("deviceCategory") Integer deviceCategory, + @Param("activityCategory") Integer activityCategory, @Param("healthCategory") Integer healthCategory, + @Param("applicantId") Long applicantId); + + /** + * Desc: 根据条件 查询 药品调价单 + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchMedChangePriceByBusNo(@Param("busNo") String busNo, @Param("categoryEnum") Integer categoryEnum, @Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 药品调价单 + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:34 2025/11/4 + * @return java.util.List + **/ + List searchMedChangePriceByItemId(@Param("itemId") Long itemId,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 耗材调价单 + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchDeviceChangePriceByBusNo(@Param("busNo") String busNo,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 耗材调价单 + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:33 2025/11/4 + * @return java.util.List + **/ + List searchDeviceChangePriceByItemId(@Param("itemId") Long itemId,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + + /** + * Desc: 根据条件 查询 诊疗调价单 + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchActivityChangePriceByBusNo(@Param("busNo") String busNo,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 诊疗调价单 + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:32 2025/11/4 + * @return java.util.List + **/ + List searchActivityChangePriceByItemId(@Param("itemId") Long itemId,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + + /** + * Desc: 根据条件 查询 挂号调价单 + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchHealthChangePriceByBusNo(@Param("busNo") String busNo,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 挂号调价单 + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:31 2025/11/4 + * @return java.util.List + **/ + List searchHealthChangePriceByItemId(@Param("itemId") Long itemId,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 审批单 审核中的数据 + * @param busNo + * @param statusEnum + * @Author raymond + * @Date 10:36 2025/11/2 + * @return java.util.List + **/ + List searchChangePriceRecordDataByBusNo(@Param("busNo") String busNo,@Param("statusEnum") Integer statusEnum); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/mapper/SupplyMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/mapper/SupplyMapper.java deleted file mode 100644 index 80119327..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/mapper/SupplyMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.openhis.web.adjustprice.mapper; - -import com.openhis.web.adjustprice.dto.SupplyListDto; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * Desc: - * @Author raymond - * @Date 14:37 2025/10/15 - * @return - **/ -@Component -public interface SupplyMapper { - /** - * Desc: - * @param - * @Author raymond - * @Date 17:10 2025/10/15 - * @return java.util.List - **/ - List searchAllSupplyList(); - -} diff --git a/openhis-ui-vue3/src/views/drug/123 b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/sseservice/SseService.java similarity index 100% rename from openhis-ui-vue3/src/views/drug/123 rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/adjustprice/sseservice/SseService.java diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java index 5e179cba..b7ccd7b0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java @@ -6,6 +6,9 @@ import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.utils.DateTimeUtils; +import com.openhis.workflow.mapper.ActivityDefinitionMapper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -46,6 +49,9 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation @Autowired private IOrganizationLocationService organizationLocationService; + @Autowired + private ActivityDefinitionMapper activityDefinitionMapper; + /** * 机构位置关系初始化 * @@ -126,6 +132,25 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation OrganizationLocation orgLoc = new OrganizationLocation(); BeanUtils.copyProperties(orgLocQueryDto, orgLoc); + Long activityDefinitionId = orgLoc.getActivityDefinitionId(); + String activityName = activityDefinitionId != null ? activityDefinitionMapper.selectById(activityDefinitionId).getName() : ""; + + List organizationLocationList = + organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getActivityDefinitionId()); + organizationLocationList = (orgLoc.getId() != null) + ? organizationLocationList.stream().filter(item -> !orgLoc.getId().equals(item.getId())).toList() + : organizationLocationList; + + if (!organizationLocationList.isEmpty()) + for (OrganizationLocation organizationLocation : organizationLocationList) + if (DateTimeUtils.isOverlap(organizationLocation.getStartTime(), organizationLocation.getEndTime(), + orgLoc.getStartTime(), orgLoc.getEndTime())) { + String organizationName = + organizationService.getById(organizationLocation.getOrganizationId()).getName(); + return R.fail("当前诊疗:" + activityName + CommonConstants.Common.DASH + orgLoc.getStartTime() + + CommonConstants.Common.DASH + orgLoc.getEndTime() + "与" + organizationName + "时间冲突"); + } + if (orgLocQueryDto.getId() != null) { // 更新机构位置信息 organizationLocationService.updateById(orgLoc); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java index 13141cd5..ab501ec5 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/PractitionerAppServiceImpl.java @@ -7,7 +7,6 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import com.openhis.common.enums.AdministrativeGender; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -15,6 +14,7 @@ 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.AssignSeqUtil; import com.core.common.utils.ChineseConvertUtils; import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; @@ -29,6 +29,8 @@ import com.openhis.administration.service.IPractitionerRoleService; import com.openhis.administration.service.IPractitionerService; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.AccountStatus; +import com.openhis.common.enums.AdministrativeGender; +import com.openhis.common.enums.AssignSeqEnum; import com.openhis.common.enums.PractitionerRoles; import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.basedatamanage.appservice.IPractitionerAppService; @@ -59,6 +61,9 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { @Resource ISysTenantService sysTenantService; + @Resource + private AssignSeqUtil assignSeqUtil; + /** * 新增用户及参与者 * @@ -108,8 +113,9 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { // 新增 adm_practitioner Practitioner practitioner = new Practitioner(); practitioner.setActiveFlag(AccountStatus.ACTIVE.getValue()); // 活动标记 + practitioner.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.PRACTITIONER_NO.getPrefix(), 8)); // 编号 practitioner.setName(nickName); // 姓名 - practitioner.setGenderEnum(sex==null? AdministrativeGender.UNKNOWN.getValue() : Integer.parseInt(sex)); // 性别 + practitioner.setGenderEnum(sex == null ? AdministrativeGender.UNKNOWN.getValue() : Integer.parseInt(sex)); // 性别 practitioner.setBirthDate(userAndPractitionerDto.getBirthDate()); // 出生日期 practitioner.setPhone(phonenumber); // 电话 practitioner.setAddress(userAndPractitionerDto.getAddress()); // 地址 @@ -306,7 +312,7 @@ public class PractitionerAppServiceImpl implements IPractitionerAppService { Practitioner practitioner = new Practitioner(); practitioner.setId(practitionerId); practitioner.setName(nickName); // 姓名 - practitioner.setGenderEnum(sex==null? AdministrativeGender.UNKNOWN.getValue() : Integer.parseInt(sex)); // 性别 + practitioner.setGenderEnum(sex == null ? AdministrativeGender.UNKNOWN.getValue() : Integer.parseInt(sex)); // 性别 practitioner.setBirthDate(userAndPractitionerDto.getBirthDate()); // 出生日期 practitioner.setPhone(phonenumber); // 电话 practitioner.setAddress(userAndPractitionerDto.getAddress()); // 地址 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basicservice/controller/HealthcareServiceController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basicservice/controller/HealthcareServiceController.java index 63580435..c2383746 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basicservice/controller/HealthcareServiceController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basicservice/controller/HealthcareServiceController.java @@ -12,7 +12,6 @@ import java.util.stream.Stream; import javax.servlet.http.HttpServletRequest; -import com.openhis.yb.service.YbManager; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -21,6 +20,7 @@ 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.AssignSeqUtil; import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; import com.core.common.utils.StringUtils; @@ -32,12 +32,14 @@ import com.openhis.administration.service.IHealthcareServiceService; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.AccountStatus; +import com.openhis.common.enums.AssignSeqEnum; import com.openhis.common.enums.PublicationStatus; import com.openhis.common.enums.Whether; import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.basicservice.dto.*; import com.openhis.web.basicservice.mapper.HealthcareServiceBizMapper; +import com.openhis.yb.service.YbManager; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -58,6 +60,8 @@ public class HealthcareServiceController { private final YbManager ybService; + private final AssignSeqUtil assignSeqUtil; + /** * 服务管理基础数据初始化 */ @@ -92,6 +96,7 @@ public class HealthcareServiceController { // 服务管理-新增 HealthcareService healthcareService = new HealthcareService(); BeanUtils.copyProperties(healthcareServiceFormData, healthcareService); + // healthcareService.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.HEALTHCARE_SERVICE_NO.getPrefix(), 8)); HealthcareService healthcareServiceAfterAdd = iHealthcareServiceService.addHealthcareService(healthcareService); // 同时保存费用定价 ChargeItemDefinition chargeItemDefinition = new ChargeItemDefinition(); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/IOutpatientChargeAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/IOutpatientChargeAppService.java index bc6e1be6..49298f91 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/IOutpatientChargeAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/IOutpatientChargeAppService.java @@ -3,14 +3,14 @@ */ package com.openhis.web.chargemanage.appservice; +import java.util.List; + import javax.servlet.http.HttpServletRequest; import com.core.common.core.domain.R; import com.openhis.web.chargemanage.dto.EncounterPatientPageParam; import com.openhis.web.chargemanage.dto.EncounterPatientPrescriptionDto; -import java.util.List; - /** * 门诊收费 service * @@ -62,4 +62,20 @@ public interface IOutpatientChargeAppService { * @return 初始化信息 */ R outpatientChargeInit(); + + /** + * 学生医保转自费 + * + * @param encounterId 就诊id + * @return 结果 + */ + R changeToStudentSelfPay(Long encounterId); + + /** + * 学生自费转学生医保 + * + * @param encounterId 就诊id + * @return 结果 + */ + R changeToStudentYbPay(Long encounterId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/InpatientChargeAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/InpatientChargeAppServiceImpl.java index b4243141..e525f64b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/InpatientChargeAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/InpatientChargeAppServiceImpl.java @@ -87,7 +87,7 @@ public class InpatientChargeAppServiceImpl implements IInpatientChargeAppService encounterPatientPageParam, searchKey, new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientWbStr, CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientName, CommonConstants.FieldName.PatientBusNo, - CommonConstants.FieldName.EncounterBusNo, CommonConstants.FieldName.idCard)), + CommonConstants.FieldName.EncounterBusNo, CommonConstants.FieldName.IdCard)), request); // 就诊患者分页列表 Page encounterPatientPage = inpatientChargeAppMapper diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientChargeAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientChargeAppServiceImpl.java index d73b278c..fce535dc 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientChargeAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientChargeAppServiceImpl.java @@ -88,7 +88,7 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi encounterPatientPageParam, searchKey, new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientWbStr, CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientName, CommonConstants.FieldName.PatientBusNo, - CommonConstants.FieldName.EncounterBusNo, CommonConstants.FieldName.idCard)), + CommonConstants.FieldName.EncounterBusNo, CommonConstants.FieldName.IdCard)), request); // 就诊患者分页列表 Page encounterPatientPage = outpatientChargeAppMapper @@ -126,6 +126,7 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi }); return prescriptionDtoList; } + /** * 医保转自费 * @@ -167,4 +168,46 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi } return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); } + + /** + * 学生医保转学生自费 + * + * @param encounterId 就诊id + * @return 结果 + */ + @Override + public R changeToStudentSelfPay(Long encounterId) { + // 获取就诊患者的学生自费账户id + Long accountId = accountService.getStudentSelfAccount(encounterId); + if (accountId == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Payment.M00008, new Object[] {"医保账户"})); + } + // 自费转医保 + boolean result = chargeItemService.updateAccountType(encounterId, accountId); + if (!result) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Payment.M00009, null)); + } + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 学生自费转学生医保 + * + * @param encounterId 就诊id + * @return 结果 + */ + @Override + public R changeToStudentYbPay(Long encounterId) { + // 获取就诊患者的学生医保账户id + Long accountId = accountService.getStudentYbAccount(encounterId); + if (accountId == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Payment.M00008, new Object[] {"医保账户"})); + } + // 自费转医保 + boolean result = chargeItemService.updateAccountType(encounterId, accountId); + if (!result) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Payment.M00009, null)); + } + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRefundAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRefundAppServiceImpl.java index 0c73f7f7..a051830c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRefundAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRefundAppServiceImpl.java @@ -4,15 +4,12 @@ package com.openhis.web.chargemanage.appservice.impl; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -55,23 +52,23 @@ import com.openhis.workflow.service.IServiceRequestService; @Service public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppService { - @Autowired + @Resource private OutpatientRefundAppMapper outpatientRefundAppMapper; - @Autowired + @Resource private IPaymentReconciliationService paymentReconciliationService; - @Autowired + @Resource private IChargeItemService chargeItemService; - @Autowired + @Resource private IMedicationDispenseService medicationDispenseService; - @Autowired + @Resource private IDeviceDispenseService deviceDispenseService; - @Autowired + @Resource private IServiceRequestService serviceRequestService; - @Autowired + @Resource private IMedicationRequestService medicationRequestService; - @Autowired + @Resource private IDeviceRequestService deviceRequestService; - @Autowired + @Resource private AssignSeqUtil assignSeqUtil; /** @@ -110,8 +107,8 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi PaymentStatus.REFUND_PART.getValue(), PaymentStatus.REFUND_ALL.getValue()); // 获取付款id集合 - List paymentIdList = - encounterPatientPaymentList.stream().map(EncounterPatientPaymentDto::getId).collect(Collectors.toList()); + List paymentIdList = encounterPatientPaymentList.stream().map(EncounterPatientPaymentDto::getPaymentId) + .collect(Collectors.toList()); if (paymentIdList.isEmpty()) { return R.ok(null); } @@ -131,7 +128,7 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi e.setServiceStatus_enumText(EnumUtils.getInfoByValue(RequestStatus.class, e.getServiceStatus())); }); - + refundItemList.sort(Comparator.comparing(RefundItemDto::getPaymentId)); return R.ok(refundItemList); } @@ -162,22 +159,22 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_SERVICE_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, CommonConstants.Common.THREE); - for (RefundItemDto creatdDto : creatChargeItemList) { + for (RefundItemDto createDto : creatChargeItemList) { // 未退费用项,生成新的请求,发放,费用项 - if (CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(creatdDto.getServiceTable())) { + if (CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(createDto.getServiceTable())) { // 药品请求查询 - MedicationRequest medicationRequest = medicationRequestService.getById(creatdDto.getRequestId()); + MedicationRequest medicationRequest = medicationRequestService.getById(createDto.getRequestId()); // 生成新的药品请求 medicationRequest.setId(null); // 药品请求id medicationRequest .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); // 药品请求编码 - medicationRequest.setPrescriptionNo(String.valueOf("C" + creatdDto.getPrescriptionNo())); // 处方号 + medicationRequest.setPrescriptionNo(String.valueOf("C" + createDto.getPrescriptionNo())); // 处方号 medicationRequestService.save(medicationRequest); // 药品发放查询 MedicationDispense medicationDispense = - medicationDispenseService.getById(creatdDto.getDispenseId()); + medicationDispenseService.getById(createDto.getDispenseId()); // 生成新的药品发放 medicationDispense.setId(null); // 药品发放id medicationDispense @@ -186,26 +183,26 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi medicationDispenseService.save(medicationDispense); // 费用项查询 - ChargeItem chargeItem = chargeItemService.getById(creatdDto.getChargeItemId()); + ChargeItem chargeItem = chargeItemService.getById(createDto.getChargeItemId()); // 生成新的费用项 chargeItem.setRefundId(chargeItem.getId());// 退费id chargeItem.setId(null); // 费用项id chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(medicationRequest.getBusNo())); // 编码 - chargeItem.setPrescriptionNo(String.valueOf("C" + creatdDto.getPrescriptionNo())); // 处方号 + chargeItem.setPrescriptionNo(String.valueOf("C" + createDto.getPrescriptionNo())); // 处方号 chargeItem.setServiceId(medicationRequest.getId()); // 医疗服务ID chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue());// 收费单状态:待收费 chargeItemService.save(chargeItem); - } else if (CommonConstants.TableName.WOR_SERVICE_REQUEST.equals(creatdDto.getServiceTable())) { + } else if (CommonConstants.TableName.WOR_SERVICE_REQUEST.equals(createDto.getServiceTable())) { // 服务请求查询 - ServiceRequest serviceRequest = serviceRequestService.getById(creatdDto.getRequestId()); + ServiceRequest serviceRequest = serviceRequestService.getById(createDto.getRequestId()); // 生成新的服务请求 serviceRequest.setId(null); // 服务请求id serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); // 服务请求编码 serviceRequestService.save(serviceRequest); // 费用项查询 - ChargeItem chargeItem = chargeItemService.getById(creatdDto.getChargeItemId()); + ChargeItem chargeItem = chargeItemService.getById(createDto.getChargeItemId()); // 生成新的费用项 chargeItem.setRefundId(chargeItem.getId());// 退费id chargeItem.setId(null); // 费用项id @@ -214,16 +211,16 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue());// 收费单状态:待收费 chargeItemService.save(chargeItem); - } else if (CommonConstants.TableName.WOR_DEVICE_REQUEST.equals(creatdDto.getServiceTable())) { + } else if (CommonConstants.TableName.WOR_DEVICE_REQUEST.equals(createDto.getServiceTable())) { // 耗材请求查询 - DeviceRequest deviceRequest = deviceRequestService.getById(creatdDto.getRequestId()); + DeviceRequest deviceRequest = deviceRequestService.getById(createDto.getRequestId()); // 生成新的耗材请求 deviceRequest.setId(null); // 耗材请求id deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4)); // 耗材请求编码 deviceRequestService.save(deviceRequest); // 耗材发放查询 - DeviceDispense deviceDispense = deviceDispenseService.getById(creatdDto.getDispenseId()); + DeviceDispense deviceDispense = deviceDispenseService.getById(createDto.getDispenseId()); // 生成新的耗材发放 deviceDispense.setId(null); // 耗材id deviceDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_DIS_NO.getPrefix(), 4)); // 器材发放id @@ -231,7 +228,7 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi deviceDispenseService.save(deviceDispense); // 费用项查询 - ChargeItem chargeItem = chargeItemService.getById(creatdDto.getChargeItemId()); + ChargeItem chargeItem = chargeItemService.getById(createDto.getChargeItemId()); // 生成新的费用项 chargeItem.setRefundId(chargeItem.getId());// 退费id chargeItem.setId(null); // 费用项id @@ -372,7 +369,7 @@ public class OutpatientRefundAppServiceImpl implements IOutpatientRefundAppServi encounterPatientPageParam, searchKey, new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientWbStr, CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientName, CommonConstants.FieldName.PatientBusNo, - CommonConstants.FieldName.EncounterBusNo, CommonConstants.FieldName.idCard)), + CommonConstants.FieldName.EncounterBusNo, CommonConstants.FieldName.IdCard)), request); // 就诊患者分页列表 Page encounterPatientPage = outpatientRefundAppMapper.selectBilledEncounterPatientPage( diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRegistrationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRegistrationAppServiceImpl.java index b3cfec5f..b1255b33 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRegistrationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/appservice/impl/OutpatientRegistrationAppServiceImpl.java @@ -296,8 +296,9 @@ public class OutpatientRegistrationAppServiceImpl implements IOutpatientRegistra } IPage currentDayEncounter = outpatientRegistrationAppMapper.getCurrentDayEncounter( - new Page<>(pageNo, pageSize), EncounterClass.AMB.getValue(), ParticipantType.ADMITTER.getCode(), - queryWrapper, ChargeItemContext.REGISTER.getValue(), PaymentStatus.SUCCESS.getValue()); + new Page<>(pageNo, pageSize), EncounterClass.AMB.getValue(), EncounterStatus.IN_PROGRESS.getValue(), + ParticipantType.ADMITTER.getCode(), ParticipantType.REGISTRATION_DOCTOR.getCode(), queryWrapper, + ChargeItemContext.REGISTER.getValue(), PaymentStatus.SUCCESS.getValue()); currentDayEncounter.getRecords().forEach(e -> { // 性别 e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientChargeController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientChargeController.java index 11efbed4..ebb72bdf 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientChargeController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientChargeController.java @@ -3,6 +3,7 @@ */ package com.openhis.web.chargemanage.controller; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +28,7 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class OutpatientChargeController { - @Autowired + @Resource private IOutpatientChargeAppService outpatientChargeAppService; /** @@ -91,4 +92,26 @@ public class OutpatientChargeController { public R changeToMedicalInsurance(@RequestParam Long encounterId) { return outpatientChargeAppService.changeToMedicalInsurance(encounterId); } + + /** + * 医保转自费 + * + * @param encounterId 就诊id + * @return 操作结果 + */ + @PutMapping("/student-self-pay") + public R changeToStudentSelfPay(@RequestParam Long encounterId) { + return outpatientChargeAppService.changeToStudentSelfPay(encounterId); + } + + /** + * 自费转医保 + * + * @param encounterId 就诊id + * @return 操作结果 + */ + @PutMapping("/student-yb-pay") + public R changeToStudentYbPay(@RequestParam Long encounterId) { + return outpatientChargeAppService.changeToStudentYbPay(encounterId); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientRefundController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientRefundController.java index 426c424d..eb751a9c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientRefundController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/controller/OutpatientRefundController.java @@ -5,6 +5,7 @@ package com.openhis.web.chargemanage.controller; import java.util.List; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +31,7 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class OutpatientRefundController { - @Autowired + @Resource private IOutpatientRefundAppService outpatientRefundAppService; /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/CurrentDayEncounterDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/CurrentDayEncounterDto.java index 24c93272..6af90c4b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/CurrentDayEncounterDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/CurrentDayEncounterDto.java @@ -130,6 +130,10 @@ public class CurrentDayEncounterDto { * 生日 */ private Date birthDate; + /** + * 电话 + */ + private String phone; /** * 退号日期/时间 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPaymentDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPaymentDto.java index de95efea..6a1e7680 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPaymentDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPaymentDto.java @@ -5,7 +5,6 @@ package com.openhis.web.chargemanage.dto; import java.math.BigDecimal; import java.util.Date; -import java.util.List; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; @@ -29,7 +28,7 @@ public class EncounterPatientPaymentDto { /** ID */ @TableId(type = IdType.ASSIGN_ID) @JsonSerialize(using = ToStringSerializer.class) - private Long id; + private Long paymentId; /** 就诊ID */ private Long encounterId; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPrescriptionDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPrescriptionDto.java index d8370bfc..80e46d26 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPrescriptionDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/dto/EncounterPatientPrescriptionDto.java @@ -92,7 +92,17 @@ public class EncounterPatientPrescriptionDto { @Dict(dictCode = "med_type") private String medTypeCode; private String medTypeCode_dictText; - + /** 用法 */ + @Dict(dictCode = "method_code") + private String methodCode; + private String methodCode_dictText; + private String dose; + @Dict(dictCode = "unit_code") + private String doseUnitCode; + /** 单次剂量单位 */ + private String doseUnitCode_dictText; + /** 频次 */ + private String rateCode; /** 合同编码 */ private String contractNo; @@ -109,4 +119,8 @@ public class EncounterPatientPrescriptionDto { @JsonSerialize(using = ToStringSerializer.class) private Long serviceId; + /** 付款id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long paymentId; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRegistrationAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRegistrationAppMapper.java index 85b929c3..684ea5a3 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRegistrationAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRegistrationAppMapper.java @@ -36,14 +36,17 @@ public interface OutpatientRegistrationAppMapper { * * @param page 分页参数 * @param classEnum 就诊类型 - * @param participantType 参与者类型 + * @param statusEnum 门诊就诊状态 | 在诊 + * @param participantType1 参与者类型 | 接诊医生 + * @param participantType2 参与者类型 | 挂号医生 * @param queryWrapper 查询条件 * @param register 收费项目类型:挂号 * @param paymentStatus 支付状态:成功 * @return 当日就诊数据 */ IPage getCurrentDayEncounter(@Param("page") Page page, - @Param("classEnum") Integer classEnum, @Param("participantType") String participantType, + @Param("classEnum") Integer classEnum, @Param("statusEnum") Integer statusEnum, + @Param("participantType1") String participantType1, @Param("participantType2") String participantType2, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("register") Integer register, @Param("paymentStatus") Integer paymentStatus); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java index d46b7f8e..aa70db09 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/ICommonService.java @@ -166,4 +166,26 @@ public interface ICommonService { * @return 医嘱打印单 */ R getAdvicePrintInfo(List requestIds, String isPrescription); + + /** + * 查询参与者签名 + * + * @param practitionerId 参与者id + * @return 参与者签名 + */ + R getPractitionerSignature(Long practitionerId); + + /** + * 查询所有供应商 + * + * @return 供应商 + */ + R getSupplierList(); + + /** + * 查询所有诊疗项目 + * + * @return 诊疗项目 + */ + R getActivityDefinition(); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java index ddaae5d0..5d06e746 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/appservice/impl/CommonServiceImpl.java @@ -22,11 +22,13 @@ import com.core.common.utils.StringUtils; import com.core.common.utils.bean.BeanUtils; import com.openhis.administration.domain.Location; import com.openhis.administration.domain.Organization; +import com.openhis.administration.domain.Supplier; import com.openhis.administration.domain.TraceNoManage; import com.openhis.administration.mapper.TraceNoManageMapper; import com.openhis.administration.service.ILocationService; import com.openhis.administration.service.IOrganizationService; import com.openhis.administration.service.IPractitionerRoleService; +import com.openhis.administration.service.ISupplierService; import com.openhis.common.constant.CommonConstants; import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; @@ -65,11 +67,14 @@ public class CommonServiceImpl implements ICommonService { private IOrganizationService organizationService; @Resource - private IInventoryItemService iInventoryItemService; + private IInventoryItemService inventoryItemService; @Resource private ContractMapper contractMapper; + @Resource + private ISupplierService supplierService; + /** * 获取药房列表 * @@ -282,11 +287,10 @@ public class CommonServiceImpl implements ICommonService { // 医保编码和生产厂家校验 for (LocationInventoryDto dto : locationInventoryDtoList) { - if (StringUtils.isNotEmpty(dto.getYbNo()) && StringUtils.isEmpty(dto.getManufacturer())) { + if (StringUtils.isNotEmpty(dto.getYbNo()) && StringUtils.isEmpty(dto.getManufacturerText())) { return R.fail("生产厂家不能为空,请到药品目录维护"); } } - return R.ok(locationInventoryDtoList); } @@ -322,7 +326,7 @@ public class CommonServiceImpl implements ICommonService { for (String traceNo : traceNoList) { if (traceNo != null && !StringUtils.isEmpty(traceNo)) { // 数据源更改 - InventoryItem inventoryItem = iInventoryItemService.getOne( + InventoryItem inventoryItem = inventoryItemService.getOne( new LambdaQueryWrapper().like(InventoryItem::getTraceNo, traceNo).last("LIMIT 1")); if (inventoryItem != null) { String itemId = inventoryItem.getItemId().toString(); @@ -495,4 +499,37 @@ public class CommonServiceImpl implements ICommonService { return R.ok(advicePrintInfoDto); } + /** + * 查询参与者签名 + * + * @param practitionerId 参与者id + * @return 参与者签名 + */ + @Override + public R getPractitionerSignature(Long practitionerId) { + return R.ok(commonAppMapper.getPractitionerSignature(practitionerId)); + } + + /** + * 查询所有供应商 + * + * @return 供应商 + */ + @Override + public R getSupplierList() { + return R.ok(supplierService.list(new LambdaQueryWrapper().select(Supplier::getId, Supplier::getName) + .eq(Supplier::getTypeEnum, SupplierType.SUPPLIER.getValue()) + .eq(Supplier::getDeleteFlag, DelFlag.NO.getCode()).eq(Supplier::getActiveFlag, Whether.YES.getValue()))); + } + + /** + * 查询所有诊疗项目 + * + * @return 诊疗项目 + */ + @Override + public R getActivityDefinition() { + return R.ok(commonAppMapper.getActivityDefinition(PublicationStatus.ACTIVE.getValue())); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java index 51acde75..3bce8dcd 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/controller/CommonAppController.java @@ -7,8 +7,6 @@ import java.util.List; import javax.annotation.Resource; -import com.openhis.common.enums.Whether; -import com.openhis.web.common.dto.AdvicePrintInfoDto; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -221,7 +219,38 @@ public class CommonAppController { */ @GetMapping("/advice-print") public R getAdvicePrintInfo(@RequestParam(value = "requestIds") List requestIds, String isPrescription) { - return commonService.getAdvicePrintInfo(requestIds,isPrescription); + return commonService.getAdvicePrintInfo(requestIds, isPrescription); + } + + /** + * 查询参与者签名 + * + * @param practitionerId 参与者id + * @return 参与者签名 + */ + @GetMapping(value = "/practitioner-signature") + public R getPractitionerSignature(@RequestParam(value = "practitionerId") Long practitionerId) { + return commonService.getPractitionerSignature(practitionerId); + } + + /** + * 查询所有供应商 + * + * @return 供应商 + */ + @GetMapping(value = "/supplier") + public R getSupplierList() { + return commonService.getSupplierList(); + } + + /** + * 查询所有诊疗项目 + * + * @return 诊疗项目 + */ + @GetMapping(value = "/activity-definition") + public R getActivityDefinition() { + return commonService.getActivityDefinition(); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/ActivityDefinitionDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/ActivityDefinitionDto.java new file mode 100644 index 00000000..fef6c9db --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/ActivityDefinitionDto.java @@ -0,0 +1,29 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.common.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 诊疗项目dto + * + * @author zwh + * @date 2025-04-01 + */ +@Data +@Accessors(chain = true) +public class ActivityDefinitionDto { + + /** 项目定义ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long activityDefinitionId; + + /** 项目名称 */ + private String activityDefinitionName; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemDto.java index 93754555..ad54bb48 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/InventoryItemDto.java @@ -87,7 +87,7 @@ public class InventoryItemDto { /** * 生产厂家 */ - private String manufacturer; + private String manufacturerText; /** * 项目对应表名 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/LocationInventoryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/LocationInventoryDto.java index e1dd7c7e..65d1526d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/LocationInventoryDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/LocationInventoryDto.java @@ -75,6 +75,6 @@ public class LocationInventoryDto { private String ybNo; /** 生产厂家 */ - private String manufacturer; + private String manufacturerText; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java index dae8c0bb..372ce291 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/dto/PerformInfoDto.java @@ -26,24 +26,13 @@ public class PerformInfoDto { @JsonSerialize(using = ToStringSerializer.class) private Long requestId; - /** 住院id */ - @JsonSerialize(using = ToStringSerializer.class) - private Long encounterId; - /** 发放id */ @JsonSerialize(using = ToStringSerializer.class) private Long dispenseId; - /** 执行id */ - @JsonSerialize(using = ToStringSerializer.class) - private Long procedureId; - /** 请求所在表 */ private String requestTable; - /** 执行时间列表 */ - private List executeTimes; - /** 执行位置 */ @JsonSerialize(using = ToStringSerializer.class) private Long locationId; @@ -51,10 +40,4 @@ public class PerformInfoDto { /** 分组id */ @JsonSerialize(using = ToStringSerializer.class) private Long groupId; - - /** 执行开始时间 */ - private Date exeStartTime; - - /** 执行结束时间 */ - private Date exeEndTime; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java index 3f764a1c..195963fc 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/common/mapper/CommonAppMapper.java @@ -88,4 +88,20 @@ public interface CommonAppMapper { * @return 处置打印信息 */ AdvicePrintInfoDto selectTreatmentPrintInfo(@Param("requestIds") List requestIds); + + /** + * 查询参与者签名 + * + * @param practitionerId 参与者id + * @return 参与者签名 + */ + String getPractitionerSignature(@Param("practitionerId") Long practitionerId); + + /** + * 查询所有诊疗项目 + * + * @param statusEnum 启用状态 + * @return 诊疗项目 + */ + List getActivityDefinition(@Param("statusEnum") Integer statusEnum); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/ICDCodeService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/ICDCodeService.java new file mode 100644 index 00000000..141f5e6b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/ICDCodeService.java @@ -0,0 +1,37 @@ +package com.openhis.web.datadictionary.appservice; +import com.core.common.core.domain.R; +import com.openhis.web.datadictionary.dto.ICDCodeAddDto; +import com.openhis.web.datadictionary.dto.ICDCodeUpdateDto; + +public interface ICDCodeService { + /** + * 分页查询icd10编码 + * + * @param searchKey + * @param pageNo + * @param pageSize + * @return + */ + R getICDCodePage(String searchKey, Integer pageNo, Integer pageSize); + + /** + * 新增icd10编码 + * @param icdCodeAddDto + * @return + */ + R addICDInformation(ICDCodeAddDto icdCodeAddDto); + + /** + * 删除icd10编码 + * @param glNo + * @return + */ + R deleteICDInformation(String glNo); + + /** + * 修改icd10编码 + * @param icdCodeUpdateDto + * @return + */ + R saveOrUpdateICDInformation(ICDCodeUpdateDto icdCodeUpdateDto); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDeviceManageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDeviceManageAppService.java index cdb48619..adc03874 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDeviceManageAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDeviceManageAppService.java @@ -95,4 +95,12 @@ public interface IDeviceManageAppService { * @param response 响应 */ void importTemplate(HttpServletResponse response); + + /** + * 校验耗材是否可以编辑 + * + * @param deviceId 耗材ID + * @return 校验结果 + */ + R validateDeviceEdit(Long deviceId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDiagTreatMAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDiagTreatMAppService.java index 43a0300a..2b0d07b9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDiagTreatMAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IDiagTreatMAppService.java @@ -92,4 +92,12 @@ public interface IDiagTreatMAppService { * @param response 响应 */ void importTemplate(HttpServletResponse response); + + /** + * 校验诊疗项目是否可以编辑 + * + * @param activityId 诊疗ID + * @return 校验结果 + */ + R validateActivityEdit(Long activityId); } \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IMedicationManageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IMedicationManageAppService.java index 26dc7570..57617d2d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IMedicationManageAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/IMedicationManageAppService.java @@ -97,4 +97,12 @@ public interface IMedicationManageAppService { * @param response 响应 */ void importTemplate(HttpServletResponse response); + + /** + * 校验药品是否可以编辑 + * + * @param medicationId 药品ID + * @return 校验结果 + */ + R validateMedicationEdit(Long medicationId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DeviceManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DeviceManageAppServiceImpl.java index baed3592..f4d07e10 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DeviceManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DeviceManageAppServiceImpl.java @@ -13,7 +13,6 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; @@ -50,6 +49,8 @@ import com.openhis.web.datadictionary.appservice.IDeviceManageAppService; import com.openhis.web.datadictionary.appservice.IItemDefinitionService; import com.openhis.web.datadictionary.dto.*; import com.openhis.web.datadictionary.mapper.DeviceManageMapper; +import com.openhis.workflow.domain.DeviceRequest; +import com.openhis.workflow.service.IDeviceRequestService; import com.openhis.workflow.service.ISupplyRequestService; import com.openhis.yb.service.YbManager; @@ -62,38 +63,41 @@ import com.openhis.yb.service.YbManager; @Service public class DeviceManageAppServiceImpl implements IDeviceManageAppService { - @Autowired + @Resource private ISupplyRequestService supplyRequestService; - @Autowired + @Resource private IDeviceDefinitionService deviceDefinitionService; - @Autowired + @Resource private IChargeItemDefinitionService chargeItemDefinitionService; - @Autowired + @Resource private ILocationService locationService; @Resource private DeviceManageMapper deviceManageMapper; - @Autowired + @Resource private ISysDictTypeService sysDictTypeService; - @Autowired + @Resource private IItemDefinitionService itemDefinitionServic; - @Autowired + @Resource private ISupplierService supplierService; - @Autowired(required = false) + @Resource private AssignSeqUtil assignSeqUtil; - @Autowired + @Resource private YbManager ybService; - @Autowired - private IOperationRecordService iOperationRecordService; + @Resource + private IOperationRecordService operationRecordService; + + @Resource + private IDeviceRequestService deviceRequestService; /** * 器材目录初始化 @@ -199,11 +203,6 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { */ @Override public R editDevice(DeviceManageUpDto deviceManageDto) { - // 校验是否可以编辑 - boolean result = supplyRequestService.verifyAbleEdit(deviceManageDto.getId()); - if (result) { - return R.fail("该耗材已经发生过业务,不可编辑"); - } DeviceDefinition deviceDefinition = new DeviceDefinition(); BeanUtils.copyProperties(deviceManageDto, deviceDefinition); // 拼音码 @@ -230,7 +229,7 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { .setInstanceId(deviceDefinition.getId()).setPrice(deviceManageDto.getRetailPrice()) .setChargeName(deviceManageDto.getName());; // 插入操作记录 - iOperationRecordService.addEntityOperationRecord(DbOpType.UPDATE.getCode(), + operationRecordService.addEntityOperationRecord(DbOpType.UPDATE.getCode(), CommonConstants.TableName.ADM_DEVICE_DEFINITION, deviceDefinition); // 更新价格表 boolean upItemDef = itemDefinitionServic.updateItem(chargeItemDefinition); @@ -261,12 +260,10 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { */ @Override public R getDeviceOne(@RequestParam Long id) { - // 获取租户ID Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); // 根据ID查询【器材目录】 DeviceManageDto deviceManageDto = deviceManageMapper.getOne(id, tenantId); - return R.ok(deviceManageDto); } @@ -278,9 +275,7 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { */ @Override public R editDeviceStop(List ids) { - List DeviceDefinitionList = new CopyOnWriteArrayList<>(); - // 取得更新值 for (Long detail : ids) { DeviceDefinition deviceDefinition = new DeviceDefinition(); @@ -289,7 +284,7 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { DeviceDefinitionList.add(deviceDefinition); } // 插入操作记录 - iOperationRecordService.addIdsOperationRecord(DbOpType.STOP.getCode(), + operationRecordService.addIdsOperationRecord(DbOpType.STOP.getCode(), CommonConstants.TableName.ADM_DEVICE_DEFINITION, ids); // 更新器材信息 @@ -306,9 +301,7 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { */ @Override public R editDeviceStart(List ids) { - List DeviceDefinitionList = new CopyOnWriteArrayList<>(); - // 取得更新值 for (Long detail : ids) { DeviceDefinition DeviceDefinition = new DeviceDefinition(); @@ -317,7 +310,7 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { DeviceDefinitionList.add(DeviceDefinition); } // 插入操作记录 - iOperationRecordService.addIdsOperationRecord(DbOpType.START.getCode(), + operationRecordService.addIdsOperationRecord(DbOpType.START.getCode(), CommonConstants.TableName.ADM_DEVICE_DEFINITION, ids); // 更新器材信息 @@ -333,10 +326,8 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { */ @Override public R addDevice(@Validated @RequestBody DeviceManageUpDto deviceManageUpDto) { - DeviceDefinition deviceDefinition = new DeviceDefinition(); BeanUtils.copyProperties(deviceManageUpDto, deviceDefinition); - // 使用10位数基础采番 String code = assignSeqUtil.getSeq(AssignSeqEnum.DEVICE_NUM.getPrefix(), 10); deviceDefinition.setBusNo(code); @@ -344,10 +335,8 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { deviceDefinition.setPyStr(ChineseConvertUtils.toPinyinFirstLetter(deviceDefinition.getName())); // 五笔码 deviceDefinition.setWbStr(ChineseConvertUtils.toWBFirstLetter(deviceDefinition.getName())); - // 新增外来器材目录 deviceDefinition.setStatusEnum(PublicationStatus.ACTIVE.getValue()); - if (deviceDefinitionService.addDevice(deviceDefinition)) { // 调用医保目录对照接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 @@ -359,7 +348,7 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { } } // 插入操作记录 - iOperationRecordService.addEntityOperationRecord(DbOpType.INSERT.getCode(), + operationRecordService.addEntityOperationRecord(DbOpType.INSERT.getCode(), CommonConstants.TableName.ADM_DEVICE_DEFINITION, deviceDefinition); ItemUpFromDirectoryDto itemUpFromDirectoryDto = new ItemUpFromDirectoryDto(); @@ -374,7 +363,6 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"器材目录"})) : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); } - return R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); } @@ -430,6 +418,30 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService { util.importTemplateExcel(response, "器材目录数据"); } + /** + * 校验耗材是否可以编辑 + * + * @param deviceId 耗材ID + * @return 校验结果 + */ + @Override + public R validateDeviceEdit(Long deviceId) { + List deviceRequestList = deviceRequestService.getDevRequestByDeviceId(deviceId); + if (!deviceRequestList.isEmpty()) { + if (deviceRequestList.stream() + .allMatch(x -> x.getStatusEnum().equals(RequestStatus.COMPLETED.getValue()))) { + return R.ok(1, "医生开过该耗材,不可编辑"); + } else { + // 校验是否可以编辑 + boolean result = supplyRequestService.verifyAbleEdit(deviceId); + if (result) { + return R.ok(2, "该耗材已经入库过,不可编辑"); + } + } + } + return R.ok(); + } + /** * 导入信息校验 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java index 3debdfb1..f74c4cc6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/DiagTreatMAppServiceImpl.java @@ -13,7 +13,6 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -38,14 +37,14 @@ import com.openhis.common.utils.CommonUtil; import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.HisQueryUtils; import com.openhis.sys.service.IOperationRecordService; -import com.openhis.web.common.appservice.ICommonService; import com.openhis.web.datadictionary.appservice.IDiagTreatMAppService; import com.openhis.web.datadictionary.appservice.IItemDefinitionService; import com.openhis.web.datadictionary.dto.*; import com.openhis.web.datadictionary.mapper.ActivityDefinitionManageMapper; import com.openhis.workflow.domain.ActivityDefinition; -import com.openhis.workflow.mapper.ActivityDefinitionMapper; +import com.openhis.workflow.domain.ServiceRequest; import com.openhis.workflow.service.IActivityDefinitionService; +import com.openhis.workflow.service.IServiceRequestService; import com.openhis.yb.service.YbManager; /** @@ -57,34 +56,26 @@ import com.openhis.yb.service.YbManager; @Service public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { - @Autowired + @Resource private IActivityDefinitionService activityDefinitionService; - @Autowired + @Resource private IChargeItemDefinitionService chargeItemDefinitionService; - @Autowired - private ActivityDefinitionMapper activityDefinitionMapper; - @Autowired - private IOrganizationService iOrganizationService; - @Autowired - private ISysDictTypeService iSysDictTypeService; + @Resource + private IOrganizationService organizationService; @Resource private ActivityDefinitionManageMapper activityDefinitionManageMapper; - @Autowired - private IItemDefinitionService itemDefinitionServic; - @Autowired + @Resource + private IItemDefinitionService itemDefinitionService; + @Resource private ISysDictTypeService sysDictTypeService; - - @Autowired - private ICommonService commonService; - - @Autowired(required = false) - AssignSeqUtil assignSeqUtil; - - @Autowired - YbManager ybService; - - @Autowired - IOperationRecordService iOperationRecordService; + @Resource + private AssignSeqUtil assignSeqUtil; + @Resource + private YbManager ybService; + @Resource + private IOperationRecordService operationRecordService; + @Resource + private IServiceRequestService serviceRequestService; /** * 诊疗目录初期查询 @@ -102,7 +93,7 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { // 获取执行科室 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Organization::getTypeEnum, OrganizationType.DEPARTMENT); - List organizations = iOrganizationService.list(queryWrapper); + List organizations = organizationService.list(queryWrapper); List exeOrganizations = organizations.stream() .map(exeOrg -> new DiagnosisTreatmentInitDto.exeOrganization(exeOrg.getId(), exeOrg.getName())) .collect(Collectors.toList()); @@ -259,16 +250,16 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { .setInstanceId(diagnosisTreatmentUpDto.getId()).setPrice(diagnosisTreatmentUpDto.getRetailPrice()) .setChargeName(diagnosisTreatmentUpDto.getName()); // 插入操作记录 - iOperationRecordService.addEntityOperationRecord(DbOpType.UPDATE.getCode(), + operationRecordService.addEntityOperationRecord(DbOpType.UPDATE.getCode(), CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, activityDefinition); // 更新价格表 - boolean upItemDef = itemDefinitionServic.updateItem(chargeItemDefinition); + boolean upItemDef = itemDefinitionService.updateItem(chargeItemDefinition); // 更新子表,修改零售价,条件:单位 - boolean upItemDetail1 = itemDefinitionServic.updateItemDetail(chargeItemDefinition, + boolean upItemDetail1 = itemDefinitionService.updateItemDetail(chargeItemDefinition, diagnosisTreatmentUpDto.getRetailPrice(), ConditionCode.UNIT.getCode()); // 更新子表,修改最高零售价,条件:限制 - boolean upItemDetail2 = itemDefinitionServic.updateItemDetail(chargeItemDefinition, + boolean upItemDetail2 = itemDefinitionService.updateItemDetail(chargeItemDefinition, diagnosisTreatmentUpDto.getMaximumRetailPrice(), ConditionCode.LIMIT.getCode()); // 更新价格表 @@ -299,7 +290,7 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { ActivityDefinitionList.add(ActivityDefinition); } // 插入操作记录 - iOperationRecordService.addIdsOperationRecord(DbOpType.STOP.getCode(), + operationRecordService.addIdsOperationRecord(DbOpType.STOP.getCode(), CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, ids); // 更新诊疗信息 return activityDefinitionService.updateBatchById(ActivityDefinitionList) @@ -327,7 +318,7 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { ActivityDefinitionList.add(ActivityDefinition); } // 插入操作记录 - iOperationRecordService.addIdsOperationRecord(DbOpType.START.getCode(), + operationRecordService.addIdsOperationRecord(DbOpType.START.getCode(), CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, ids); // 更新诊疗信息 return activityDefinitionService.updateBatchById(ActivityDefinitionList) @@ -374,7 +365,7 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { } } // 插入操作记录 - iOperationRecordService.addEntityOperationRecord(DbOpType.INSERT.getCode(), + operationRecordService.addEntityOperationRecord(DbOpType.INSERT.getCode(), CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, activityDefinition); ItemUpFromDirectoryDto itemUpFromDirectoryDto = new ItemUpFromDirectoryDto(); @@ -386,7 +377,7 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { .setConditionFlag(Whether.YES.getValue()).setChargeName(diagnosisTreatmentUpDto.getName()) .setInstanceId(activityDefinition.getId()).setPrice(diagnosisTreatmentUpDto.getRetailPrice()); - return itemDefinitionServic.addItem(itemUpFromDirectoryDto) + return itemDefinitionService.addItem(itemUpFromDirectoryDto) ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"诊疗目录"})) : R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); @@ -442,6 +433,25 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService { util.importTemplateExcel(response, "诊疗目录数据"); } + /** + * 校验诊疗项目是否可以编辑 + * + * @param activityId 诊疗ID + * @return 校验结果 + */ + @Override + public R validateActivityEdit(Long activityId) { + // 查询诊疗申请 + List serviceRequestList = serviceRequestService.getServiceRequestByActivityId(activityId); + if (!serviceRequestList.isEmpty()) { + if (serviceRequestList.stream().anyMatch( + serviceRequest -> RequestStatus.COMPLETED.getValue().equals(serviceRequest.getStatusEnum()))) { + return R.ok(1,"医生开过该诊疗项目,不可编辑"); + } + } + return R.ok(); + } + /** * 导入信息校验 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ICDCodeServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ICDCodeServiceImpl.java new file mode 100644 index 00000000..f83a19a6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ICDCodeServiceImpl.java @@ -0,0 +1,118 @@ +package com.openhis.web.datadictionary.appservice.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.utils.ChineseConvertUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.StringUtils; +import com.openhis.administration.domain.Account; +import com.openhis.administration.domain.Location; +import com.openhis.administration.mapper.LocationMapper; +import com.openhis.administration.service.ILocationService; +import com.openhis.clinical.domain.ConditionNoDefinition; +import com.openhis.clinical.mapper.ConditionNoDefinitionMapper; +import com.openhis.clinical.service.IConditionNoDefinitionService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; +import com.openhis.common.utils.HisPageUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.basedatamanage.dto.LocationAddOrEditDto; +import com.openhis.web.basedatamanage.dto.LocationInfoDto; +import com.openhis.web.datadictionary.dto.DeviceManageDto; +import com.openhis.web.datadictionary.dto.ICDCodeAddDto; +import com.openhis.web.datadictionary.dto.ICDCodeDto; +import com.openhis.web.datadictionary.dto.ICDCodeUpdateDto; +import com.openhis.workflow.domain.SupplyRequest; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import com.core.common.core.domain.R; +import com.openhis.web.datadictionary.appservice.ICDCodeService; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +@Service +public class ICDCodeServiceImpl implements ICDCodeService { + + @Resource + private ConditionNoDefinitionMapper conditionNoDefinitionMapper; + + @Resource + private ICDCodeService icdCodeService; + + @Resource + private IConditionNoDefinitionService conditionNoDefinitionService; + + /** + * + * @param searchKey + * @param pageNo + * @param pageSize + * @return + */ + @Override + public R getICDCodePage(String searchKey, Integer pageNo, Integer pageSize) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(null,searchKey, + new HashSet<>(Arrays.asList("gl_no", "gl_name", "icd10_no", "icd10_name")), null); + Page icdCodeDtoPage = + HisPageUtils.selectPage(conditionNoDefinitionMapper, queryWrapper, pageNo, pageSize, ICDCodeDto.class); + return R.ok(icdCodeDtoPage); + } + + /** + * 添加 + * @param icdCodeAddDto + * @return + */ + @Override + public R addICDInformation(ICDCodeAddDto icdCodeAddDto) { + ConditionNoDefinition conditionNoDefinition = new ConditionNoDefinition(); + conditionNoDefinition.setIcd10No(icdCodeAddDto.getIcd10No()); + conditionNoDefinition.setIcd10Name(icdCodeAddDto.getIcd10Name()); + conditionNoDefinition.setGlNo(icdCodeAddDto.getGlNo()); + conditionNoDefinition.setGlName(icdCodeAddDto.getGlName()); + boolean result = conditionNoDefinitionService.save(conditionNoDefinition); + if(result){ + return R.ok("ok"); + } + return R.fail("no"); + } + + /** + * 删除 + * @param glNo + * @return + */ + @Override + public R deleteICDInformation(String glNo) { + boolean result = + conditionNoDefinitionService.remove(new LambdaQueryWrapper().likeRight(ConditionNoDefinition::getGlNo, glNo)); + return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00005, new Object[] {"国临编码信息删除"})) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00006, new Object[] {"国临编码信息删除"})); + } + + @Override + public R saveOrUpdateICDInformation(ICDCodeUpdateDto icdCodeUpdateDto) { + ConditionNoDefinition conditionNoDefinition = new ConditionNoDefinition(); + conditionNoDefinition.setId(icdCodeUpdateDto.getId()); + conditionNoDefinition.setIcd10No(icdCodeUpdateDto.getIcd10No()); + conditionNoDefinition.setIcd10Name(icdCodeUpdateDto.getIcd10Name()); + conditionNoDefinition.setGlNo(icdCodeUpdateDto.getGlNo()); + conditionNoDefinition.setGlName(icdCodeUpdateDto.getGlName()); + boolean result=conditionNoDefinitionService.saveOrUpdate(conditionNoDefinition); + if(result){ + return R.ok("ok"); + } + return R.fail("no"); + } + + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ItemDefinitionServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ItemDefinitionServiceImpl.java index c4cd78b8..1d72ecde 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ItemDefinitionServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/ItemDefinitionServiceImpl.java @@ -4,7 +4,8 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; +import javax.annotation.Resource; + import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -12,7 +13,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.core.common.utils.bean.BeanUtils; import com.openhis.administration.domain.ChargeItemDefDetail; import com.openhis.administration.domain.ChargeItemDefinition; -import com.openhis.administration.mapper.ChargeItemDefAppMapper; import com.openhis.administration.mapper.ChargeItemDefinitionMapper; import com.openhis.administration.service.IChargeItemDefDetailService; import com.openhis.administration.service.IChargeItemDefinitionService; @@ -30,15 +30,14 @@ import com.openhis.web.datadictionary.dto.ItemUpFromDirectoryDto; @Service public class ItemDefinitionServiceImpl implements IItemDefinitionService { - @Autowired - IChargeItemDefinitionService chargeItemDefinitionService; + @Resource + private IChargeItemDefinitionService chargeItemDefinitionService; - @Autowired - IChargeItemDefDetailService chargeItemDefDetailService; - @Autowired - ChargeItemDefinitionMapper chargeItemDefinitionMapper; - @Autowired - ChargeItemDefAppMapper chargeItemDefAppMapper; + @Resource + private IChargeItemDefDetailService chargeItemDefDetailService; + + @Resource + private ChargeItemDefinitionMapper chargeItemDefinitionMapper; /** * 添加药品/器材/诊疗的项目定价 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/MedicationManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/MedicationManageAppServiceImpl.java index 8920f0c2..b539bbd9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/MedicationManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/appservice/impl/MedicationManageAppServiceImpl.java @@ -8,10 +8,10 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; @@ -44,8 +44,9 @@ import com.openhis.common.utils.HisQueryUtils; import com.openhis.medication.domain.Medication; import com.openhis.medication.domain.MedicationDefinition; import com.openhis.medication.domain.MedicationDetail; +import com.openhis.medication.domain.MedicationRequest; import com.openhis.medication.service.IMedicationDefinitionService; -import com.openhis.medication.service.IMedicationDispenseService; +import com.openhis.medication.service.IMedicationRequestService; import com.openhis.medication.service.IMedicationService; import com.openhis.sys.service.IOperationRecordService; import com.openhis.web.datadictionary.appservice.IItemDefinitionService; @@ -64,43 +65,44 @@ import com.openhis.yb.service.YbManager; @Service public class MedicationManageAppServiceImpl implements IMedicationManageAppService { - @Autowired + @Resource private IMedicationService medicationService; - @Autowired + @Resource private IMedicationDefinitionService medicationDefinitionService; - @Autowired + @Resource private IChargeItemDefinitionService chargeItemDefinitionService; - @Autowired + @Resource private ILocationService locationService; - @Autowired + @Resource private MedicationManageSearchMapper medicationManageSearchMapper; - @Autowired + + @Resource private ISupplierService supplierService; - @Autowired + @Resource private ISysDictTypeService sysDictTypeService; - @Autowired + @Resource private IItemDefinitionService itemDefinitionServic; - @Autowired(required = false) + @Resource private AssignSeqUtil assignSeqUtil; - @Autowired + @Resource private YbManager ybService; - @Autowired - private IOperationRecordService iOperationRecordService; + @Resource + private IOperationRecordService operationRecordService; - @Autowired + @Resource private ISupplyRequestService supplyRequestService; - @Autowired - private IMedicationDispenseService medicationDispenseService; + @Resource + private IMedicationRequestService medicationRequestService; /** * 药品目录初始化 @@ -247,11 +249,6 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi */ @Override public R editMedication(@Validated @RequestBody MedicationManageUpDto medicationManageUpDto) { - // 校验是否可以编辑 - boolean result = supplyRequestService.verifyAbleEdit(medicationManageUpDto.getMedicationDefId()); - if (result) { - return R.fail("该药品已经发生过业务,不可编辑"); - } // Todo:用Medication和medicationDefinition的domainservice来创造新的实例,根据业务需求,使用构造函数; // 如果小于5哥变量,就用基本类型传递,如果大于5哥,在domain层定义构造方法的入参 @@ -294,7 +291,7 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi } // 插入操作记录 - iOperationRecordService.addEntityOperationRecord(DbOpType.UPDATE.getCode(), + operationRecordService.addEntityOperationRecord(DbOpType.UPDATE.getCode(), CommonConstants.TableName.MED_MEDICATION_DEFINITION, medication); // Todo:封装一个价格初始话的方法给app层调用 // 更新价格表 @@ -355,7 +352,7 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi // TODO:别用三元,日志在业务代码以后记录 // 插入操作记录 - iOperationRecordService.addIdsOperationRecord(DbOpType.STOP.getCode(), + operationRecordService.addIdsOperationRecord(DbOpType.STOP.getCode(), CommonConstants.TableName.MED_MEDICATION_DEFINITION, ids); // 更新药品信息 return medicationService.updateBatchById(medicationList) @@ -381,7 +378,7 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi medicationList.add(medication); } // 插入操作记录 - iOperationRecordService.addIdsOperationRecord(DbOpType.START.getCode(), + operationRecordService.addIdsOperationRecord(DbOpType.START.getCode(), CommonConstants.TableName.MED_MEDICATION_DEFINITION, ids); // 更新药品信息 return medicationService.updateBatchById(medicationList) @@ -424,7 +421,7 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi } } // 插入操作记录 - iOperationRecordService.addEntityOperationRecord(DbOpType.INSERT.getCode(), + operationRecordService.addEntityOperationRecord(DbOpType.INSERT.getCode(), CommonConstants.TableName.MED_MEDICATION_DEFINITION, medicationDetail); // 新增子表外来药品目录 boolean insertMedicationSuccess = medicationService.addMedication(medicationDetail); @@ -515,6 +512,31 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi util.importTemplateExcel(response, "药品目录数据"); } + /** + * 校验药品是否可以编辑 + * + * @param medicationId 药品ID + * @return 校验结果 + */ + @Override + public R validateMedicationEdit(Long medicationId) { + List medicationRequestList = + medicationRequestService.getMedRequestByMedicationId(medicationId); + if (!medicationRequestList.isEmpty()) { + if (medicationRequestList.stream() + .allMatch(x -> x.getStatusEnum().equals(RequestStatus.COMPLETED.getValue()))) { + return R.ok(1, "医生开过该药品,不可编辑"); + } else { + // 校验是否可以编辑 + boolean result = supplyRequestService.verifyAbleEdit(medicationId); + if (result) { + return R.ok(2, "该药品已经入库过,不可编辑"); + } + } + } + return R.ok(); + } + /** * 导入信息校验 * @@ -542,6 +564,9 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi if (StringUtils.isEmpty(importDto.getMerchandiseName())) { lineValidateMsgList.add("商品名称必填"); } + if (StringUtils.isEmpty(importDto.getPharmacologyCategoryCode())) { + lineValidateMsgList.add("药品性质必填"); + } if (StringUtils.isEmpty(importDto.getUnitCode())) { lineValidateMsgList.add("药品单位必填"); } @@ -707,7 +732,7 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi } } if (!fieldValidateMsgList.isEmpty()) { - return R.fail("导入失败!药品信息填写有误:" + String.join(" ", fieldValidateMsgList)); + return R.fail("导入失败!药品信息填写有误:" + String.join(" ", fieldValidateMsgList) + " ■ ※如遇到模板中不存在的字段,请重新下载模板"); } // 重复校验(文件行重复) List lineRepeatedValidateMsgList = new ArrayList<>(); @@ -771,7 +796,8 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi .setPartPercent(importDto.getPartPercent()).setDoseFrom(CommonUtil.tryParseInt(importDto.getDoseFrom())) .setApprovalNumber(importDto.getApprovalNumber()) .setYbMatchFlag(CommonUtil.tryParseInt(importDto.getYbMatchFlag())).setYbNo(importDto.getYbNo()) - .setPharmacologyCategoryCode("1").setSkinTestFlag(CommonUtil.tryParseInt(importDto.getSkinTestFlag())) + .setPharmacologyCategoryCode(importDto.getPharmacologyCategoryCode()) + .setSkinTestFlag(CommonUtil.tryParseInt(importDto.getSkinTestFlag())) .setInjectFlag(CommonUtil.tryParseInt(importDto.getInjectFlag())) .setManufacturerText(importDto.getManufacturerText()) .setRestrictedFlag(CommonUtil.tryParseInt(importDto.getRestrictedFlag())) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DeviceManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DeviceManageController.java index 6ca5e4de..942e19ab 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DeviceManageController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DeviceManageController.java @@ -2,17 +2,16 @@ package com.openhis.web.datadictionary.controller; import java.util.List; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import com.core.common.core.domain.R; import com.openhis.web.datadictionary.appservice.IDeviceManageAppService; -import com.openhis.web.datadictionary.dto.DeviceManageDto; import com.openhis.web.datadictionary.dto.DeviceManageSelParam; import com.openhis.web.datadictionary.dto.DeviceManageUpDto; @@ -31,7 +30,7 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class DeviceManageController { - @Autowired + @Resource private IDeviceManageAppService deviceManageAppService; /** @@ -69,7 +68,6 @@ public class DeviceManageController { */ @GetMapping("/information-one") public R getDeviceOne(@RequestParam Long id) { - return deviceManageAppService.getDeviceOne(id); } @@ -81,7 +79,6 @@ public class DeviceManageController { */ @PutMapping("/information") public R editDevice(@RequestBody DeviceManageUpDto deviceManageDto) { - return deviceManageAppService.editDevice(deviceManageDto); } @@ -119,28 +116,6 @@ public class DeviceManageController { return deviceManageAppService.addDevice(deviceManageUpDto); } - /** - * 新增医保器材目录 - * - * @param DeviceManageUpDto 器材目录 - * @return - */ - @PostMapping("/information-yb") - public R addYbDevice(@RequestBody DeviceManageUpDto DeviceManageUpDto) { - return null; - } - - /** - * 器材目录导出 - * - * @param DeviceManageDto 器材目录 - * @return - */ - @GetMapping("/information-export") - public R exportDevice(@RequestBody DeviceManageDto DeviceManageDto) { - return null; - } - /** * 导入器材目录 * @@ -161,4 +136,15 @@ public class DeviceManageController { public void importTemplate(HttpServletResponse response) { deviceManageAppService.importTemplate(response); } + + /** + * 校验耗材是否可以编辑 + * + * @param deviceId 耗材ID + * @return 校验结果 + */ + @GetMapping("/validate-edit") + public R validateDeviceEdit(Long deviceId) { + return deviceManageAppService.validateDeviceEdit(deviceId); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DiagnosisTreatmentController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DiagnosisTreatmentController.java index 35fa8d71..d456171c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DiagnosisTreatmentController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/DiagnosisTreatmentController.java @@ -2,17 +2,16 @@ package com.openhis.web.datadictionary.controller; import java.util.List; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import com.core.common.core.domain.R; import com.openhis.web.datadictionary.appservice.IDiagTreatMAppService; -import com.openhis.web.datadictionary.dto.DiagnosisTreatmentDto; import com.openhis.web.datadictionary.dto.DiagnosisTreatmentSelParam; import com.openhis.web.datadictionary.dto.DiagnosisTreatmentUpDto; @@ -31,7 +30,7 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class DiagnosisTreatmentController { - @Autowired + @Resource private IDiagTreatMAppService diagTreatMAppService; /** @@ -107,7 +106,7 @@ public class DiagnosisTreatmentController { } /** - * 新增外来诊疗目录 + * 新增诊疗目录 * * @param diagnosisTreatmentUpDto 诊疗目录 * @return @@ -117,28 +116,6 @@ public class DiagnosisTreatmentController { return diagTreatMAppService.addDiseaseTreatment(diagnosisTreatmentUpDto); } - /** - * 新增医保诊疗目录 - * - * @param diagnosisTreatmentUpDto 诊疗目录 - * @return - */ - @PostMapping("/information-yb") - public R addYbDiseaseTreatment(@RequestBody DiagnosisTreatmentUpDto diagnosisTreatmentUpDto) { - return null; - } - - /** - * 诊疗目录导出 - * - * @param diagnosisTreatmentDto 诊疗目录 - * @return - */ - @GetMapping("/information-export") - public R exportDiseaseTreatment(@RequestBody DiagnosisTreatmentDto diagnosisTreatmentDto) { - return null; - } - /** * 导入诊疗目录 * @@ -159,4 +136,15 @@ public class DiagnosisTreatmentController { public void importTemplate(HttpServletResponse response) { diagTreatMAppService.importTemplate(response); } + + /** + * 校验诊疗项目是否可以编辑 + * + * @param activityId 诊疗ID + * @return 校验结果 + */ + @GetMapping("/validate-edit") + public R validateActivityEdit(Long activityId) { + return diagTreatMAppService.validateActivityEdit(activityId); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/ICDCodeController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/ICDCodeController.java new file mode 100644 index 00000000..c2cb0df1 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/ICDCodeController.java @@ -0,0 +1,72 @@ +package com.openhis.web.datadictionary.controller; + +import javax.annotation.Resource; + +import com.openhis.web.basedatamanage.dto.LocationAddOrEditDto; +import com.openhis.web.datadictionary.dto.ICDCodeAddDto; +import com.openhis.web.datadictionary.dto.ICDCodeDto; +import com.openhis.web.datadictionary.dto.ICDCodeUpdateDto; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.openhis.web.datadictionary.appservice.ICDCodeService; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@RestController +@RequestMapping("/base-data-manage/ICD10") +@Slf4j +@AllArgsConstructor +public class ICDCodeController { + + @Resource + private ICDCodeService iCDCodeService; + + /** + * 查询icd10 + * @param searchKey + * @param pageNo + * @param pageSize + * @return + */ + @GetMapping("/information-page") // 前端传回来的查询条件 + public R getICDCodePage(@RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return iCDCodeService.getICDCodePage(searchKey, pageNo, pageSize); + } + + /** + * 新增icd10 + * @param icdCodeAddDto + * @return + */ + @PostMapping("/add-icd-Information") + public R ICDInformation(@Validated @RequestBody ICDCodeAddDto icdCodeAddDto) { + return iCDCodeService.addICDInformation(icdCodeAddDto); + } + + /** + * 删除icd10 + * @param glNo + * @return + */ + @DeleteMapping("/delete-icd-Information") + public R deleteICDInformation(@RequestParam String glNo) { + return iCDCodeService.deleteICDInformation(glNo); + } + + /** + * 更新 + * @param icdCodeUpdateDto + * @return + */ + @PutMapping("/update-icd-Information") + public R saveOrUpdateICDInformation(@RequestBody ICDCodeUpdateDto icdCodeUpdateDto){ + return iCDCodeService.saveOrUpdateICDInformation(icdCodeUpdateDto); + } + + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/MedicationManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/MedicationManageController.java index 3a2413ba..89779345 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/MedicationManageController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/controller/MedicationManageController.java @@ -2,10 +2,10 @@ package com.openhis.web.datadictionary.controller; import java.util.List; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -30,7 +30,7 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class MedicationManageController { - @Autowired + @Resource private IMedicationManageAppService medicationManageAppService; /** @@ -117,17 +117,6 @@ public class MedicationManageController { return medicationManageAppService.addMedication(medicationManageUpDto); } - /** - * 新增医保药品目录 - * - * @param medicationManageUpDto 药品目录信息 - * @return - */ - @PostMapping("/information-yb") - public R addYbMedication(@RequestBody MedicationManageUpDto medicationManageUpDto) { - return null; - } - /** * 药品目录导出 * @@ -166,4 +155,15 @@ public class MedicationManageController { public void importTemplate(HttpServletResponse response) { medicationManageAppService.importTemplate(response); } + + /** + * 校验药品是否可以编辑 + * + * @param medicationId 药品ID + * @return 校验结果 + */ + @GetMapping("/validate-edit") + public R validateMedicationEdit(Long medicationId) { + return medicationManageAppService.validateMedicationEdit(medicationId); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DeviceImportDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DeviceImportDto.java index 8920ca12..66da1990 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DeviceImportDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DeviceImportDto.java @@ -10,7 +10,7 @@ import lombok.experimental.Accessors; /** * 器材目录导入Dto * - * @author GuoRui + * @author Thanking * @date 2025-09-24 */ @Data diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiagnosisTreatmentImportDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiagnosisTreatmentImportDto.java index 46cf5eeb..686f25c0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiagnosisTreatmentImportDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiagnosisTreatmentImportDto.java @@ -10,7 +10,7 @@ import lombok.experimental.Accessors; /** * 诊疗目录导入Dto * - * @author GuoRui + * @author Thanking * @date 2025-09-29 */ @Data diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageSelParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageSelParam.java index e91d7365..e940988c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageSelParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/DiseaseManageSelParam.java @@ -19,4 +19,6 @@ public class DiseaseManageSelParam { private Integer sourceEnum; /** 状态 */ private Integer statusEnum; + /** 类型 */ + private String typeCode; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeAddDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeAddDto.java new file mode 100644 index 00000000..7b80d298 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeAddDto.java @@ -0,0 +1,31 @@ +package com.openhis.web.datadictionary.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; + +@Data +@Accessors(chain = true) +public class ICDCodeAddDto { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 国临编码 */ + @NotNull + private String glNo; + + /** 国临name */ + private String glName; + + /** 医保编码 */ + private String icd10No; + + /** 医保name */ + private String icd10Name; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeDto.java new file mode 100644 index 00000000..6574fdfb --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeDto.java @@ -0,0 +1,31 @@ +package com.openhis.web.datadictionary.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; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class ICDCodeDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 国临编码 */ + private String glNo; + + /** 国临name */ + private String glName; + + /** 医保编码 */ + private String icd10No; + + /** 医保name */ + private String icd10Name; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeUpdateDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeUpdateDto.java new file mode 100644 index 00000000..7b0ee790 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/ICDCodeUpdateDto.java @@ -0,0 +1,32 @@ +package com.openhis.web.datadictionary.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; + +@Data +@Accessors(chain = true) +public class ICDCodeUpdateDto { + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 国临编码 */ + @NotNull + private String glNo; + + /** 国临name */ + private String glName; + + /** 医保编码 */ + private String icd10No; + + /** 医保name */ + private String icd10Name; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationImportDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationImportDto.java index 2fe424c7..957c7a78 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationImportDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationImportDto.java @@ -10,7 +10,7 @@ import lombok.experimental.Accessors; /** * 药品目录导入Dto * - * @author GuoRui + * @author Thanking * @date 2025-08-18 */ @Data @@ -42,6 +42,10 @@ public class MedicationImportDto { @Excel(name = "商品名称", prompt = "必填") private String merchandiseName; + /** 药品性质 */ + @Excel(name = "药品性质", prompt = "必填", dictType = "medicine_properties", comboReadDict = true) + private String pharmacologyCategoryCode; + /** 药品单位 */ @Excel(name = "药品单位", prompt = "必填", dictType = "unit_code", comboReadDict = true) private String unitCode; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationManageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationManageDto.java index 9a591f17..c27a0c1e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationManageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationManageDto.java @@ -289,4 +289,9 @@ public class MedicationManageDto { /** 处方标志 */ private Integer rxFlag; + /** + * 用药说明 + */ + private String dosageInstruction; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationManageUpDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationManageUpDto.java index d60fe5fc..fad607eb 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationManageUpDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/dto/MedicationManageUpDto.java @@ -258,4 +258,9 @@ public class MedicationManageUpDto { /** 处方标志 */ private Integer rxFlag; + /** + * 用药说明 + */ + private String dosageInstruction; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/mapper/ICDCodeMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/mapper/ICDCodeMapper.java new file mode 100644 index 00000000..f215aeef --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/datadictionary/mapper/ICDCodeMapper.java @@ -0,0 +1,7 @@ +package com.openhis.web.datadictionary.mapper; + +import org.springframework.stereotype.Repository; + +@Repository +public interface ICDCodeMapper { +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentIssuanceOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentIssuanceOrderServiceImpl.java index 08553fa2..4dcfd347 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentIssuanceOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentIssuanceOrderServiceImpl.java @@ -2,25 +2,16 @@ package com.openhis.web.departmentmanage.appservice.impl; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import javax.annotation.Resource; -import com.openhis.web.departmentmanage.mapper.DepartmentIssuanceOrderMapper; -import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto; -import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto; -import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryDispensingOrderMapper; -import com.openhis.workflow.domain.SupplyDelivery; -import com.openhis.workflow.service.ISupplyDeliveryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; -import com.core.common.utils.MessageUtils; import com.openhis.common.constant.CommonConstants; -import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; import com.openhis.web.departmentmanage.appservice.IDepartmentCommonService; @@ -28,8 +19,10 @@ import com.openhis.web.departmentmanage.appservice.IDepartmentIssuanceOrderServi import com.openhis.web.departmentmanage.dto.DepartmentDetailDto; import com.openhis.web.departmentmanage.dto.DepartmentInitDto; import com.openhis.web.departmentmanage.mapper.DepartmentCommonMapper; -import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.openhis.web.departmentmanage.mapper.DepartmentIssuanceOrderMapper; +import com.openhis.workflow.domain.SupplyDelivery; import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.service.ISupplyDeliveryService; import com.openhis.workflow.service.ISupplyRequestService; /** @@ -55,6 +48,7 @@ public class DepartmentIssuanceOrderServiceImpl implements IDepartmentIssuanceOr private DepartmentCommonMapper departmentCommonMapper; @Autowired private DepartmentIssuanceOrderMapper departmentIssuanceOrderMapper; + /** * 初始化 * @@ -67,15 +61,15 @@ public class DepartmentIssuanceOrderServiceImpl implements IDepartmentIssuanceOr // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption - .add(new DepartmentInitDto.IntegerOption(SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getValue(), - SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getInfo())); - supplyCategoryOption - .add(new DepartmentInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_DISPENSING.getValue(), - SupplyCategory.INPATIENT_PATIENT_DISPENSING.getInfo())); - supplyCategoryOption.add( - new DepartmentInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue(), - SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getInfo())); + // supplyCategoryOption + // .add(new DepartmentInitDto.IntegerOption(SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getValue(), + // SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getInfo())); + // supplyCategoryOption + // .add(new DepartmentInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_DISPENSING.getValue(), + // SupplyCategory.INPATIENT_PATIENT_DISPENSING.getInfo())); + // supplyCategoryOption.add( + // new DepartmentInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue(), + // SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getInfo())); issuanceOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -143,9 +137,8 @@ public class DepartmentIssuanceOrderServiceImpl implements IDepartmentIssuanceOr .setStatusEnum(SupplyStatus.AGREE.getValue()).setCategoryEnum(item.getCategoryEnum()) .setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId()) .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) - .setLotNumber(item.getLotNumber()) - .setSourceTypeEnum(LocationForm.CABINET.getValue()).setSourceLocationId(item.getSourceLocationId()) - .setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) + .setLotNumber(item.getLotNumber()).setSourceTypeEnum(LocationForm.CABINET.getValue()) + .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) .setApplyTime(item.getApplyTime()).setApproverId(item.getApproverId()) .setApprovalTime(item.getApprovalTime()); @@ -156,9 +149,9 @@ public class DepartmentIssuanceOrderServiceImpl implements IDepartmentIssuanceOr .setItemTable(supplyRequest.getItemTable()).setItemId(supplyRequest.getItemId()) .setBasedOnTable(CommonConstants.TableName.WOR_DEVICE_DISPENSE).setBasedOnIds(item.getDispenseIds()) .setUnitCode(supplyRequest.getUnitCode()).setQuantity(supplyRequest.getItemQuantity()) - .setLotNumber(supplyRequest.getLotNumber()) - .setPractitionerId(supplyRequest.getApplicantId()).setOccurrenceTime(supplyRequest.getApprovalTime()) - .setReceiverId(supplyRequest.getPurposeLocationId()).setReceiveTime(supplyRequest.getApprovalTime()); + .setLotNumber(supplyRequest.getLotNumber()).setPractitionerId(supplyRequest.getApplicantId()) + .setOccurrenceTime(supplyRequest.getApprovalTime()).setReceiverId(supplyRequest.getPurposeLocationId()) + .setReceiveTime(supplyRequest.getApprovalTime()); supplyDeliveryList.add(supplyDelivery); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentProfitLossOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentProfitLossOrderServiceImpl.java index b22470c8..535521ec 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentProfitLossOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentProfitLossOrderServiceImpl.java @@ -59,16 +59,16 @@ public class DepartmentProfitLossOrderServiceImpl implements IDepartmentProfitLo // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), - SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), - SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.STANDBY_RESCUE_MEDICINES.getValue(), - SupplyCategory.STANDBY_RESCUE_MEDICINES.getInfo())); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getValue(), - SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getInfo())); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.DONATED_MEDICINES.getValue(), - SupplyCategory.DONATED_MEDICINES.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), +// SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), +// SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.STANDBY_RESCUE_MEDICINES.getValue(), +// SupplyCategory.STANDBY_RESCUE_MEDICINES.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getValue(), +// SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.DONATED_MEDICINES.getValue(), +// SupplyCategory.DONATED_MEDICINES.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentRequisitionOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentRequisitionOrderServiceImpl.java index 424e5eaf..75389a63 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentRequisitionOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentRequisitionOrderServiceImpl.java @@ -58,10 +58,10 @@ public class DepartmentRequisitionOrderServiceImpl implements IDepartmentRequisi // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.PURCHASE_APPLICATION.getValue(), - SupplyCategory.PURCHASE_APPLICATION.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.PURCHASE_APPLICATION.getValue(), +// SupplyCategory.PURCHASE_APPLICATION.getInfo())); requisitionOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentReturnToWarehouseOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentReturnToWarehouseOrderServiceImpl.java index 6dd1368d..939dc00f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentReturnToWarehouseOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentReturnToWarehouseOrderServiceImpl.java @@ -24,7 +24,6 @@ import com.openhis.web.departmentmanage.appservice.IDepartmentReturnToWarehouseO import com.openhis.web.departmentmanage.dto.DepartmentDetailDto; import com.openhis.web.departmentmanage.dto.DepartmentInitDto; import com.openhis.web.departmentmanage.mapper.DepartmentCommonMapper; -import com.openhis.web.departmentmanage.mapper.DepartmentReturnToWarehouseOrderMapper; import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -47,6 +46,7 @@ public class DepartmentReturnToWarehouseOrderServiceImpl implements IDepartmentR private IDepartmentCommonService departmentCommonService; @Autowired private DepartmentCommonMapper departmentCommonMapper; + /** * 初始化 * @@ -59,8 +59,8 @@ public class DepartmentReturnToWarehouseOrderServiceImpl implements IDepartmentR // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -93,16 +93,14 @@ public class DepartmentReturnToWarehouseOrderServiceImpl implements IDepartmentR List unitList; for (DepartmentDetailDto item : returnToDispensaryOrderDtoDetailPage.getRecords()) { unitList = new ArrayList<>(); - unitList.add(new DepartmentDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText())); - unitList.add(new DepartmentDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText() - )); + unitList.add(new DepartmentDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new DepartmentDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); item.setUnitList(unitList); } return R.ok(returnToDispensaryOrderDtoDetailPage); } - /** * 获取单据号 * @@ -128,7 +126,8 @@ public class DepartmentReturnToWarehouseOrderServiceImpl implements IDepartmentR @Override public R addOrEditReturnToWarehouseOrder(List returnToDispensaryOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(returnToDispensaryOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(returnToDispensaryOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentStockInOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentStockInOrderServiceImpl.java index fb29b8c3..4e5dc7f8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentStockInOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentStockInOrderServiceImpl.java @@ -24,7 +24,6 @@ import com.openhis.web.departmentmanage.appservice.IDepartmentStockInOrderServic import com.openhis.web.departmentmanage.dto.DepartmentDetailDto; import com.openhis.web.departmentmanage.dto.DepartmentInitDto; import com.openhis.web.departmentmanage.mapper.DepartmentCommonMapper; -import com.openhis.web.departmentmanage.mapper.DepartmentStockInOrderMapper; import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -60,8 +59,8 @@ public class DepartmentStockInOrderServiceImpl implements IDepartmentStockInOrde // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -134,10 +133,11 @@ public class DepartmentStockInOrderServiceImpl implements IDepartmentStockInOrde // 单据信息删除 supplyRequestService.removeByIds(requestIdList); } - //添加原始单据号 - if(stockInOrderDtoList.get(0).getOriginalBusNo()!=null){ + // 添加原始单据号 + if (stockInOrderDtoList.get(0).getOriginalBusNo() != null) { // 审批单据并返回单据详情 - List agreedList = supplyRequestService.addOriginalBusNo(stockInOrderDtoList.get(0).getOriginalBusNo(), stockInOrderDtoList.get(0).getBusNo()); + List agreedList = supplyRequestService + .addOriginalBusNo(stockInOrderDtoList.get(0).getOriginalBusNo(), stockInOrderDtoList.get(0).getBusNo()); if (agreedList.isEmpty()) { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } @@ -156,8 +156,9 @@ public class DepartmentStockInOrderServiceImpl implements IDepartmentStockInOrde .setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode()) .setSupplierId(item.getSupplierId()).setReason(item.getReason()) .setSourceTypeEnum(LocationForm.WAREHOUSE.getValue()).setSourceLocationId(item.getSourceLocationId()) - .setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()).setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + .setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentStocktakingOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentStocktakingOrderServiceImpl.java index fa706958..f2078be5 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentStocktakingOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentStocktakingOrderServiceImpl.java @@ -60,10 +60,10 @@ public class DepartmentStocktakingOrderServiceImpl implements IDepartmentStockta // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption( - SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption( - SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption( +// SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption( +// SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentTransferInOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentTransferInOrderServiceImpl.java index eda10695..532367f5 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentTransferInOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentTransferInOrderServiceImpl.java @@ -24,7 +24,6 @@ import com.openhis.web.departmentmanage.appservice.IDepartmentTransferInOrderSer import com.openhis.web.departmentmanage.dto.DepartmentDetailDto; import com.openhis.web.departmentmanage.dto.DepartmentInitDto; import com.openhis.web.departmentmanage.mapper.DepartmentCommonMapper; -import com.openhis.web.departmentmanage.mapper.DepartmentTransferInOrderMapper; import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -59,8 +58,8 @@ public class DepartmentTransferInOrderServiceImpl implements IDepartmentTransfer // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -127,7 +126,8 @@ public class DepartmentTransferInOrderServiceImpl implements IDepartmentTransfer @Override public R addOrEditTransferInOrder(List transferInOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); @@ -149,8 +149,8 @@ public class DepartmentTransferInOrderServiceImpl implements IDepartmentTransfer .setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId()) .setReason(item.getReason()).setSourceTypeEnum(LocationForm.DEPARTMENT.getValue()) .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) - .setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentTransferOutOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentTransferOutOrderServiceImpl.java index 4a0c6943..46f0d740 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentTransferOutOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/departmentmanage/appservice/impl/DepartmentTransferOutOrderServiceImpl.java @@ -59,8 +59,8 @@ public class DepartmentTransferOutOrderServiceImpl implements IDepartmentTransfe // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); +// supplyCategoryOption.add(new DepartmentInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java index 884ba328..e3e2e07c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java @@ -4,10 +4,7 @@ import java.util.List; import com.baomidou.mybatisplus.core.metadata.IPage; import com.core.common.core.domain.R; -import com.openhis.web.doctorstation.dto.ActivityBindDeviceDto; -import com.openhis.web.doctorstation.dto.AdviceBaseDto; -import com.openhis.web.doctorstation.dto.AdviceSaveParam; -import com.openhis.web.doctorstation.dto.UpdateGroupIdParam; +import com.openhis.web.doctorstation.dto.*; /** * 医生站-医嘱/处方 应用Service @@ -33,12 +30,13 @@ public interface IDoctorStationAdviceAppService { Integer pricingFlag, List adviceTypes); /** - * 查询诊疗绑定耗材信息 + * 查询医嘱绑定信息 * - * @param activityId 诊疗id - * @return 诊疗绑定耗材信息 + * @param typeCode 1:用法绑东西 2:诊疗绑东西 + * @param itemNo 用法的code 或者 诊疗定义id + * @return 医嘱绑定信息 */ - ActivityBindDeviceDto getActivityBindDevice(Long activityId); + List getOrderBindInfo(String typeCode, String itemNo); /** * 门诊保存医嘱 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index 27b7d0fe..092b0a71 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -1,13 +1,5 @@ package com.openhis.web.doctorstation.appservice.impl; -import java.math.BigDecimal; -import java.util.*; -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.conditions.update.LambdaUpdateWrapper; @@ -15,10 +7,13 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 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.enums.TenantOptionDict; import com.core.common.exception.ServiceException; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; +import com.core.common.utils.StringUtils; +import com.core.web.util.TenantOptionUtil; import com.openhis.administration.domain.ChargeItem; import com.openhis.administration.service.IChargeItemService; import com.openhis.common.constant.CommonConstants; @@ -42,8 +37,13 @@ import com.openhis.workflow.service.IActivityDefinitionService; import com.openhis.workflow.service.IDeviceDispenseService; import com.openhis.workflow.service.IDeviceRequestService; import com.openhis.workflow.service.IServiceRequestService; - import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** * 医生站-医嘱/处方 应用实现类 @@ -97,47 +97,52 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp /** * 查询医嘱信息 * - * @param adviceBaseDto 查询条件 - * @param searchKey 模糊查询关键字 - * @param locationId 药房id + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id * @param adviceDefinitionIdParamList 医嘱定义id参数集合 - * @param organizationId 患者挂号对应的科室id - * @param pageNo 当前页 - * @param pageSize 每页多少条 - * @param pricingFlag 划价标记 - * @param adviceTypes 医嘱类型参数集合 + * @param organizationId 患者挂号对应的科室id + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param pricingFlag 划价标记 + * @param adviceTypes 医嘱类型参数集合 * @return 医嘱信息 */ @Override public IPage getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, - List adviceDefinitionIdParamList, Long organizationId, Integer pageNo, Integer pageSize, - Integer pricingFlag, List adviceTypes) { + List adviceDefinitionIdParamList, Long organizationId, Integer pageNo, Integer pageSize, + Integer pricingFlag, List adviceTypes) { + // 医嘱定价来源 + String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE); + if (StringUtils.isEmpty(orderPricingSource)) { + throw new ServiceException("租户配置项【医嘱定价来源】未配置"); + } // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(adviceBaseDto, searchKey, - new HashSet<>(Arrays.asList("advice_name", "py_str", "wb_str")), null); + new HashSet<>(Arrays.asList("advice_name", "py_str", "wb_str")), null); IPage adviceBaseInfo = doctorStationAdviceAppMapper.getAdviceBaseInfo( - new Page<>(pageNo, pageSize), PublicationStatus.ACTIVE.getValue(), organizationId, - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, - CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, DeviceCategory.SINGLE_USE.getCode(), pricingFlag, - adviceDefinitionIdParamList, adviceTypes, queryWrapper); + new Page<>(pageNo, pageSize), PublicationStatus.ACTIVE.getValue(), organizationId, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, pricingFlag, adviceDefinitionIdParamList, adviceTypes, + queryWrapper); List adviceBaseDtoList = adviceBaseInfo.getRecords(); // 医嘱定义ID集合 List adviceDefinitionIdList = - adviceBaseDtoList.stream().map(AdviceBaseDto::getAdviceDefinitionId).collect(Collectors.toList()); + adviceBaseDtoList.stream().map(AdviceBaseDto::getAdviceDefinitionId).collect(Collectors.toList()); // 费用定价主表ID集合 List chargeItemDefinitionIdList = - adviceBaseDtoList.stream().map(AdviceBaseDto::getChargeItemDefinitionId).collect(Collectors.toList()); + adviceBaseDtoList.stream().map(AdviceBaseDto::getChargeItemDefinitionId).collect(Collectors.toList()); // 医嘱库存集合 List adviceInventoryList = - doctorStationAdviceAppMapper.getAdviceInventory(locationId, adviceDefinitionIdList, - CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue()); + doctorStationAdviceAppMapper.getAdviceInventory(locationId, adviceDefinitionIdList, + CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue()); // 待发放个数信息 List adviceDraftInventoryList = doctorStationAdviceAppMapper.getAdviceDraftInventory( - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, - DispenseStatus.DRAFT.getValue(), DispenseStatus.PREPARATION.getValue()); + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + DispenseStatus.DRAFT.getValue(), DispenseStatus.PREPARATION.getValue()); // 预减库存 List adviceInventory = - adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList); + adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList); // 查询取药科室配置 List medLocationConfig = doctorStationAdviceAppMapper.getMedLocationConfig(organizationId); // 将配置转为 {categoryCode -> 允许的locationId集合} @@ -153,9 +158,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp } // 费用定价子表信息 List childCharge = doctorStationAdviceAppMapper - .getChildCharge(ConditionCode.LOT_NUMBER_COST.getCode(), chargeItemDefinitionIdList); + .getChildCharge(ConditionCode.LOT_NUMBER_PRICE.getCode(), chargeItemDefinitionIdList); // 费用定价主表信息 - List mainCharge = doctorStationAdviceAppMapper.getMainCharge(chargeItemDefinitionIdList); + List mainCharge = + doctorStationAdviceAppMapper.getMainCharge(chargeItemDefinitionIdList, PublicationStatus.ACTIVE.getValue()); String unitCode = ""; // 包装单位 Long chargeItemDefinitionId; // 费用定价主表ID for (AdviceBaseDto baseDto : adviceBaseDtoList) { @@ -163,14 +169,15 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp case CommonConstants.TableName.MED_MEDICATION_DEFINITION: // 药品 // 是否皮试 baseDto - .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, baseDto.getSkinTestFlag())); + .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, baseDto.getSkinTestFlag())); // 是否为注射药物 baseDto.setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, baseDto.getInjectFlag())); case CommonConstants.TableName.ADM_DEVICE_DEFINITION: // 耗材 // 每一条医嘱的库存集合信息 , 包装单位库存前端计算 List< - AdviceInventoryDto> inventoryList = + AdviceInventoryDto> inventoryList = adviceInventory.stream() +<<<<<<< HEAD .filter(e -> baseDto.getAdviceDefinitionId().equals(e.getItemId()) && baseDto.getAdviceTableName().equals(e.getItemTable())) .collect(Collectors.toList()); @@ -187,17 +194,23 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp .collect(Collectors.toList()); } } +======= + .filter(e -> baseDto.getAdviceDefinitionId().equals(e.getItemId()) + && baseDto.getAdviceTableName().equals(e.getItemTable())) + .collect(Collectors.toList()); +>>>>>>> upstream/develop // 库存信息 baseDto.setInventoryList(inventoryList); // 设置默认产品批号 if (!inventoryList.isEmpty()) { // 库存大于0 List hasInventoryList = inventoryList.stream() - .filter(e -> e.getQuantity().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList()); + .filter(e -> e.getQuantity().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList()); if (!hasInventoryList.isEmpty()) { baseDto.setDefaultLotNumber(hasInventoryList.get(0).getLotNumber()); } } +<<<<<<< HEAD if (!inventoryList.isEmpty() && !allowedLocByCategory.isEmpty()) { Set allowedLoc = allowedLocByCategory.get(String.valueOf(baseDto.getCategoryCode())); @@ -207,6 +220,20 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp .findFirst().orElse(null); if (hit != null && hit.getLotNumber() != null) { baseDto.setDefaultLotNumber(hit.getLotNumber()); +======= + if (!inventoryList.isEmpty() && !medLocationConfig.isEmpty()) { + // 第一步:在medLocationConfig中匹配categoryCode + AdviceInventoryDto result1 = medLocationConfig.stream() + .filter(dto -> baseDto.getCategoryCode().equals(dto.getCategoryCode())).findFirst() + .orElse(null); + if (result1 != null) { + // 第二步:在inventoryList中匹配locationId + AdviceInventoryDto result2 = inventoryList.stream() + .filter(dto -> result1.getLocationId().equals(dto.getLocationId())).findFirst() + .orElse(null); + if (result2 != null && result2.getLotNumber() != null) { + baseDto.setDefaultLotNumber(result2.getLotNumber()); +>>>>>>> upstream/develop } } } @@ -217,26 +244,35 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp for (AdviceInventoryDto adviceInventoryDto : inventoryList) { Long finalChargeItemDefinitionId = chargeItemDefinitionId; String finalUnitCode = unitCode; - // 匹配包装单位 - List advicePrice = childCharge.stream() - .filter(e -> e.getDefinitionId().equals(finalChargeItemDefinitionId) - && e.getConditionValue().equals(adviceInventoryDto.getLotNumber())) - .peek(e -> e.setUnitCode(finalUnitCode)) // 设置 unitCode - .collect(Collectors.toList()); - priceDtoList.addAll(advicePrice); + // 从定价子表取价格(适用于批次售卖场景) + List childPrice = childCharge.stream() + .filter(e -> e.getDefinitionId().equals(finalChargeItemDefinitionId) + && e.getConditionValue().equals(adviceInventoryDto.getLotNumber())) + .peek(e -> e.setUnitCode(finalUnitCode)) // 设置 unitCode + .collect(Collectors.toList()); + // 从定价主表取价格(适用于统一零售价场景) + List mainPrice = mainCharge.stream() + .filter(e -> baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId())) + .collect(Collectors.toList()); + // 按批次售价 + if (OrderPricingSource.BATCH_SELLING_PRICE.getCode().equals(orderPricingSource)) { + priceDtoList.addAll(childPrice); + } else { + priceDtoList.addAll(mainPrice); + } } // 价格信息 baseDto.setPriceList(priceDtoList); break; case CommonConstants.TableName.WOR_ACTIVITY_DEFINITION: // 诊疗 List priceList = - mainCharge.stream().filter(e -> baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId())) - .collect(Collectors.toList()); + mainCharge.stream().filter(e -> baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId())) + .collect(Collectors.toList()); // 价格信息 baseDto.setPriceList(priceList); // 活动类型 baseDto.setActivityType_enumText( - EnumUtils.getInfoByValue(ActivityType.class, baseDto.getActivityType())); + EnumUtils.getInfoByValue(ActivityType.class, baseDto.getActivityType())); break; default: break; @@ -246,47 +282,22 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp } /** - * 查询诊疗绑定耗材信息 + * 查询医嘱绑定信息 * - * @param activityId 诊疗id - * @return 诊疗绑定耗材信息 + * @param typeCode 1:用法绑东西 2:诊疗绑东西 + * @param itemNo 用法的code 或者 诊疗定义id + * @return 医嘱绑定信息 */ - public ActivityBindDeviceDto getActivityBindDevice(Long activityId) { - ActivityBindDeviceDto activityBindDeviceDto = new ActivityBindDeviceDto(); - List activityBindDevice = doctorStationAdviceAppMapper.getActivityBindDevice( - activityId + "", PublicationStatus.ACTIVE.getValue(), CommonConstants.TableName.ADM_DEVICE_DEFINITION); - // 详细信息赋值 - if (!activityBindDevice.isEmpty()) { - // 耗材id集合 - List deviceIds = - activityBindDevice.stream().map(ActivityBindDeviceDetailDto::getDeviceId).collect(Collectors.toList()); - // 耗材医嘱信息 - List deviceRecords = - this.getAdviceBaseInfo(null, null, null, deviceIds, 0L, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3)) - .getRecords(); - Map adviceMap = deviceRecords.stream().collect(Collectors - .toMap(AdviceBaseDto::getAdviceDefinitionId, advice -> advice, (existing, replacement) -> existing // 如果有重复key,保留第一个 - )); - activityBindDeviceDto.setActivityBindDeviceInfos(activityBindDevice); - for (ActivityBindDeviceDetailDto activityBindDeviceInfo : activityBindDeviceDto - .getActivityBindDeviceInfos()) { - Long deviceId = activityBindDeviceInfo.getDeviceId(); - if (deviceId != null) { - AdviceBaseDto matchedAdvice = adviceMap.get(deviceId); - if (matchedAdvice != null) { - activityBindDeviceInfo.setOrderDetailInfos(matchedAdvice); - } - } - } - } - return activityBindDeviceDto; + @Override + public List getOrderBindInfo(String typeCode, String itemNo) { + return doctorStationAdviceAppMapper.getOrderBindInfo(typeCode, PublicationStatus.ACTIVE.getValue(), itemNo); } /** * 门诊保存/签发医嘱 * * @param adviceSaveParam 医嘱表单信息 - * @param adviceOpType 医嘱操作类型 + * @param adviceOpType 医嘱操作类型 * @return 结果 */ @Override @@ -297,21 +308,21 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp List adviceSaveList = adviceSaveParam.getAdviceSaveList(); // 药品 List medicineList = adviceSaveList.stream() - .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); // 耗材 List deviceList = adviceSaveList.stream() - .filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); // 诊疗活动 List activityList = adviceSaveList.stream() - .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); /** * 保存时,校验库存 */ if (AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType)) { List needCheckList = - adviceSaveList.stream().filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) - && !ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + adviceSaveList.stream().filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) + && !ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); // 校验库存 String tipRes = adviceUtils.checkInventory(needCheckList); if (tipRes != null) { @@ -342,25 +353,25 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp if (AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType) && !adviceSaveList.isEmpty()) { // 签发的医嘱id集合 List requestIds = adviceSaveList.stream() - .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null) - .collect(Collectors.toList()).stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); + .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null) + .collect(Collectors.toList()).stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); // 就诊id Long encounterId = adviceSaveList.get(0).getEncounterId(); iChargeItemService.update(new LambdaUpdateWrapper() - .set(ChargeItem::getStatusEnum, ChargeItemStatus.PLANNED.getValue()) - .eq(ChargeItem::getEncounterId, encounterId) - .eq(ChargeItem::getStatusEnum, ChargeItemStatus.DRAFT.getValue()) - .in(ChargeItem::getServiceId, requestIds)); + .set(ChargeItem::getStatusEnum, ChargeItemStatus.PLANNED.getValue()) + .eq(ChargeItem::getEncounterId, encounterId) + .eq(ChargeItem::getStatusEnum, ChargeItemStatus.DRAFT.getValue()) + .in(ChargeItem::getServiceId, requestIds)); } - return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"门诊医嘱"})); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"门诊医嘱"})); } /** * 处理药品 */ private void handMedication(List medicineList, Date curDate, String adviceOpType, - Long organizationId, String signCode) { + Long organizationId, String signCode) { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); // 保存操作 @@ -373,11 +384,11 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp ChargeItem chargeItem; // 新增 + 修改 List insertOrUpdateList = - medicineList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) - || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); + medicineList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) + || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); // 删除 List deleteList = medicineList.stream() - .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); // 校验删除的医嘱是否已经收费 List delRequestIdList = deleteList.stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); if (!delRequestIdList.isEmpty()) { @@ -396,30 +407,15 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp iMedicationDispenseService.deleteMedicationDispense(adviceSaveDto.getRequestId()); // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.MED_MEDICATION_REQUEST, - adviceSaveDto.getRequestId()); + adviceSaveDto.getRequestId()); // 删除基于这个药品生成的需要执行的诊疗请求 iServiceRequestService.remove( - new LambdaQueryWrapper().eq(ServiceRequest::getBasedOnId, adviceSaveDto.getRequestId()) - .isNotNull(ServiceRequest::getBasedOnTable) - .eq(ServiceRequest::getStatusEnum, RequestStatus.COMPLETED.getValue())); + new LambdaQueryWrapper().eq(ServiceRequest::getBasedOnId, adviceSaveDto.getRequestId()) + .isNotNull(ServiceRequest::getBasedOnTable) + .eq(ServiceRequest::getStatusEnum, RequestStatus.COMPLETED.getValue())); } - // 当前时间毫秒值 - Long currentTimeMillis = System.currentTimeMillis(); // 签发时 if (is_sign) { - // 对组号进行二次处理 - Long i = 1L; - for (AdviceSaveDto adviceSaveDto : insertOrUpdateList) { - // 输液标记 - if (Whether.YES.getValue().equals(adviceSaveDto.getInjectFlag())) { - if (adviceSaveDto.getGroupId() == null) { - adviceSaveDto.setGroupId(currentTimeMillis + i); - } else { - adviceSaveDto.setGroupId(currentTimeMillis + adviceSaveDto.getGroupId()); - } - } - i = ++i; - } // 生成处方号 prescriptionUtils.generatePrescriptionNumbers(insertOrUpdateList); } @@ -433,9 +429,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp if (is_sign) { medicationRequest.setSignCode(signCode); } - // 只有保存时才处理的字段属性 + // 保存时,处理数据(请求,发放,账单) if (is_save) { medicationRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); + medicationRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 medicationRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量 medicationRequest.setExecuteNum(adviceSaveDto.getExecuteNum()); // 执行次数 medicationRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码 @@ -465,24 +462,18 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp medicationRequest.setSortNumber(adviceSaveDto.getSortNumber()); // 排序号 } iMedicationRequestService.saveOrUpdate(medicationRequest); - // 第一次保存时,如果药品请求为皮试或输液,自动开立对应绑定的诊疗请求 - if (adviceSaveDto.getRequestId() == null) { - if (is_save && (Whether.YES.getValue().equals(adviceSaveDto.getSkinTestFlag()) - || Whether.YES.getValue().equals(adviceSaveDto.getInjectFlag()))) { - // 查询已经存在的当前数据 - medicationRequest = iMedicationRequestService.getById(medicationRequest.getId()); - adviceUtils.generateActRequestByMedicationFlag(medicationRequest, organizationId, adviceSaveDto); - } - } - // 保存时 处理药品发放 和 保存药品费用项 + if (is_save) { // 处理药品发放 - iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType()); + Long dispenseId = + iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType()); + // 保存药品费用项 chargeItem = new ChargeItem(); chargeItem.setId(adviceSaveDto.getChargeItemId()); // 费用项id chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(medicationRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setPrescriptionNo(adviceSaveDto.getPrescriptionNo()); // 处方号 chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者 chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); // 类型 @@ -499,6 +490,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID chargeItem.setConditionId(adviceSaveDto.getConditionId()); // 诊断id chargeItem.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id + chargeItem.setDispenseId(dispenseId); // 发放ID chargeItem.setQuantityValue(adviceSaveDto.getQuantity()); // 数量 chargeItem.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位 @@ -506,82 +498,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp chargeItem.setTotalPrice(adviceSaveDto.getTotalPrice()); // 总价 iChargeItemService.saveOrUpdate(chargeItem); + } } - // 签发时 - /* if (is_sign) { - // --------------------如果是输液药品,生成仅用于执行的 "静脉输液" request(同一个组号生成一个) - List injectList = insertOrUpdateList.stream() - .filter(dto -> Whether.YES.getValue().equals(dto.getInjectFlag()) && dto.getGroupId() != null) // 过滤条件:输液且groupId不为null - .collect(Collectors.groupingBy(AdviceSaveDto::getGroupId)) // 按groupId分组 - .values().stream().map(group -> group.get(0)).collect(Collectors.toList()); // 取每组中的第一个元素 - // 静脉输液的诊疗定义id - Long intravenousInfusionDefinitionId = iActivityDefinitionService - .getAppointActivityDefinitionId(CommonConstants.BusinessName.INTRAVENOUS_INFUSION); - // 对应的诊疗医嘱信息 - AdviceBaseDto injectQueryAdviceBaseDto = new AdviceBaseDto(); - injectQueryAdviceBaseDto.setAdviceDefinitionId(intravenousInfusionDefinitionId); // 医嘱定义id - AdviceBaseDto injectAdviceBaseDto = this.getAdviceBaseInfo(injectQueryAdviceBaseDto, null, null, null, - organizationId, 1, 1, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords().get(0); - ServiceRequest serviceRequestInjectExe; - for (AdviceSaveDto adviceSaveDto : injectList) { - Long groupId = adviceSaveDto.getGroupId();// 组号 - Integer quantity = adviceSaveDto.getExecuteNum();// 执行次数 - // 生成诊疗请求 - serviceRequestInjectExe = new ServiceRequest(); - serviceRequestInjectExe.setStatusEnum(RequestStatus.COMPLETED.getValue());// 请求状态,已完成 - serviceRequestInjectExe - .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); - serviceRequestInjectExe.setQuantity(quantity); // 请求数量 - serviceRequestInjectExe.setUnitCode(injectAdviceBaseDto.getUnitCode()); // 请求单位编码 - serviceRequestInjectExe.setCategoryEnum(EncounterClass.AMB.getValue()); // 请求类型,默认-门诊 - serviceRequestInjectExe.setActivityId(injectAdviceBaseDto.getAdviceDefinitionId());// 诊疗定义id - serviceRequestInjectExe.setPatientId(adviceSaveDto.getPatientId()); // 患者 - serviceRequestInjectExe.setRequesterId(SecurityUtils.getLoginUser().getPractitionerId()); // 开方医生 - serviceRequestInjectExe.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id - serviceRequestInjectExe.setAuthoredTime(curDate); // 请求签发时间 - serviceRequestInjectExe.setOrgId(organizationId); // 执行科室 - serviceRequestInjectExe.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_REQUEST); - serviceRequestInjectExe.setBasedOnId(adviceSaveDto.getRequestId()); - serviceRequestInjectExe.setConditionId(adviceSaveDto.getConditionId()); // 诊断id - serviceRequestInjectExe.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id - serviceRequestInjectExe.setGroupId(groupId);// 组号 - iServiceRequestService.save(serviceRequestInjectExe); - } - // --------------------如果是皮试药品,生成仅用于执行的 "皮试检查" request(每个药品生成一个) - List skinTestList = insertOrUpdateList.stream() - .filter(dto -> Whether.YES.getValue().equals(dto.getSkinTestFlag())).collect(Collectors.toList()); - // 皮试检查的诊疗定义id - Long skinTestInspectionDefinitionId = iActivityDefinitionService - .getAppointActivityDefinitionId(CommonConstants.BusinessName.SKIN_TEST_INSPECTION); - AdviceBaseDto skinTestQueryAdviceBaseDto = new AdviceBaseDto(); - skinTestQueryAdviceBaseDto.setAdviceDefinitionId(skinTestInspectionDefinitionId); // 医嘱定义id - // 对应的诊疗医嘱信息 - AdviceBaseDto skinTestAdviceBaseDto = this.getAdviceBaseInfo(skinTestQueryAdviceBaseDto, null, null, null, - organizationId, 1, 1, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords().get(0); - ServiceRequest serviceRequestSkinTestExe; - for (AdviceSaveDto adviceSaveDto : skinTestList) { - // 生成诊疗请求,用于执行 - serviceRequestSkinTestExe = new ServiceRequest(); - serviceRequestSkinTestExe.setStatusEnum(RequestStatus.COMPLETED.getValue());// 请求状态,已完成 - serviceRequestSkinTestExe - .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); - serviceRequestSkinTestExe.setQuantity(1); // 请求数量 - serviceRequestSkinTestExe.setUnitCode(skinTestAdviceBaseDto.getUnitCode()); // 请求单位编码 - serviceRequestSkinTestExe.setCategoryEnum(EncounterClass.AMB.getValue()); // 请求类型,默认-门诊 - serviceRequestSkinTestExe.setActivityId(skinTestAdviceBaseDto.getAdviceDefinitionId());// 诊疗定义id - serviceRequestSkinTestExe.setPatientId(adviceSaveDto.getPatientId()); // 患者 - serviceRequestSkinTestExe.setRequesterId(SecurityUtils.getLoginUser().getPractitionerId()); // 开方医生 - serviceRequestSkinTestExe.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id - serviceRequestSkinTestExe.setAuthoredTime(curDate); // 请求签发时间 - serviceRequestSkinTestExe.setOrgId(organizationId); // 执行科室 - serviceRequestSkinTestExe.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_REQUEST); - serviceRequestSkinTestExe.setBasedOnId(adviceSaveDto.getRequestId()); - serviceRequestSkinTestExe.setConditionId(adviceSaveDto.getConditionId()); // 诊断id - serviceRequestSkinTestExe.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id - iServiceRequestService.save(serviceRequestSkinTestExe); - } - }*/ } /** @@ -599,11 +518,11 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp ChargeItem chargeItem; // 新增 + 修改 List insertOrUpdateList = - deviceList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) - || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); + deviceList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) + || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); // 删除 List deleteList = deviceList.stream() - .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); // 校验删除的医嘱是否已经收费 List delRequestIdList = deleteList.stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); if (!delRequestIdList.isEmpty()) { @@ -622,16 +541,18 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp iDeviceDispenseService.deleteDeviceDispense(adviceSaveDto.getRequestId()); // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_DEVICE_REQUEST, - adviceSaveDto.getRequestId()); + adviceSaveDto.getRequestId()); } for (AdviceSaveDto adviceSaveDto : insertOrUpdateList) { deviceRequest = new DeviceRequest(); deviceRequest.setId(adviceSaveDto.getRequestId()); // 主键id deviceRequest.setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态 - // 只有保存时才处理的字段属性 + + // 保存时,处理数据(请求,发放,账单) if (is_save) { deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4)); + deviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 deviceRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量 deviceRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码 deviceRequest.setLotNumber(adviceSaveDto.getLotNumber());// 产品批号 @@ -651,19 +572,20 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp deviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码 deviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id deviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id + } - iDeviceRequestService.saveOrUpdate(deviceRequest); - - // 保存时 处理耗材发放 和 保存耗材费用项 if (is_save) { // 处理耗材发放 - iDeviceDispenseService.handleDeviceDispense(deviceRequest, adviceSaveDto.getDbOpType()); + Long dispenseId = + iDeviceDispenseService.handleDeviceDispense(deviceRequest, adviceSaveDto.getDbOpType()); + // 保存耗材费用项 chargeItem = new ChargeItem(); chargeItem.setId(adviceSaveDto.getChargeItemId()); // 费用项id chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者 chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); // 类型 chargeItem.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id @@ -679,6 +601,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID chargeItem.setConditionId(adviceSaveDto.getConditionId()); // 诊断id chargeItem.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id + chargeItem.setDispenseId(dispenseId); // 发放ID chargeItem.setQuantityValue(adviceSaveDto.getQuantity()); // 数量 chargeItem.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位 @@ -694,7 +617,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp * 处理诊疗 */ private void handService(List activityList, Date curDate, String adviceOpType, Long organizationId, - String signCode) { + String signCode) { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); // 保存操作 @@ -706,11 +629,11 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp ChargeItem chargeItem; // 新增 + 修改 List insertOrUpdateList = - activityList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) - || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); + activityList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) + || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); // 删除 List deleteList = activityList.stream() - .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); // 校验删除的医嘱是否已经收费 List delRequestIdList = deleteList.stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); if (!delRequestIdList.isEmpty()) { @@ -726,10 +649,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp for (AdviceSaveDto adviceSaveDto : deleteList) { iServiceRequestService.removeById(adviceSaveDto.getRequestId());// 删除诊疗 iServiceRequestService.remove( - new LambdaQueryWrapper().eq(ServiceRequest::getParentId, adviceSaveDto.getRequestId()));// 删除诊疗套餐对应的子项 + new LambdaQueryWrapper().eq(ServiceRequest::getParentId, adviceSaveDto.getRequestId()));// 删除诊疗套餐对应的子项 // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, - adviceSaveDto.getRequestId()); + adviceSaveDto.getRequestId()); } for (AdviceSaveDto adviceSaveDto : insertOrUpdateList) { @@ -742,6 +665,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 只有保存时才处理的字段属性 if (is_save) { serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 serviceRequest.setQuantity(adviceSaveDto.getQuantity()); // 请求数量 serviceRequest.setUnitCode(adviceSaveDto.getUnitCode()); // 请求单位编码 @@ -767,6 +691,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp chargeItem.setId(adviceSaveDto.getChargeItemId()); // 费用项id chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者 chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); // 类型 chargeItem.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id @@ -792,7 +717,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 第一次保存时,处理诊疗套餐的子项信息 if (adviceSaveDto.getRequestId() == null) { ActivityDefinition activityDefinition = - iActivityDefinitionService.getById(adviceSaveDto.getAdviceDefinitionId()); + iActivityDefinitionService.getById(adviceSaveDto.getAdviceDefinitionId()); String childrenJson = activityDefinition.getChildrenJson(); if (childrenJson != null) { // 诊疗子项参数类 @@ -813,8 +738,21 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 发送跨系统申请 adviceSaveDto.setRequestId(serviceRequest.getId()); try { - doctorStationSendApplyUtil.sendCrossSystemApply(adviceSaveDto, organizationId, curDate); + // 查询诊疗定义 + ActivityDefinition activityDefinition = + iActivityDefinitionService.getById(adviceSaveDto.getAdviceDefinitionId()); + if (activityDefinition != null) { + // 检验 或 检查 + if (ActivityType.PROOF.getValue().equals(activityDefinition.getTypeEnum()) + || ActivityType.TEST.getValue().equals(activityDefinition.getTypeEnum())) { + doctorStationSendApplyUtil.sendCrossSystemApply(adviceSaveDto, organizationId, curDate); + } + } } catch (Exception e) { + if (!Whether.YES.getCode() + .equals(TenantOptionUtil.getOptionContent(TenantOptionDict.LIS_PACS_ERROR_IGNORE))) { + throw e; + } log.error(e.getMessage(), e); } } @@ -833,21 +771,22 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); // 医嘱请求数据 List requestBaseInfo = doctorStationAdviceAppMapper.getRequestBaseInfo(encounterId, null, - CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, - CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode()); + CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, + CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(), + GenerateSource.DOCTOR_PRESCRIPTION.getValue()); for (RequestBaseDto requestBaseDto : requestBaseInfo) { // 请求状态 requestBaseDto - .setStatusEnum_enumText(EnumUtils.getInfoByValue(RequestStatus.class, requestBaseDto.getStatusEnum())); + .setStatusEnum_enumText(EnumUtils.getInfoByValue(RequestStatus.class, requestBaseDto.getStatusEnum())); // 是否皮试 requestBaseDto - .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, requestBaseDto.getSkinTestFlag())); + .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, requestBaseDto.getSkinTestFlag())); // 是否为注射药物 requestBaseDto - .setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, requestBaseDto.getInjectFlag())); + .setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, requestBaseDto.getInjectFlag())); // 收费状态 requestBaseDto.setChargeStatus_enumText( - EnumUtils.getInfoByValue(ChargeItemStatus.class, requestBaseDto.getChargeStatus())); + EnumUtils.getInfoByValue(ChargeItemStatus.class, requestBaseDto.getChargeStatus())); } return R.ok(requestBaseInfo); } @@ -905,7 +844,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp /** * 查询历史医嘱请求数据 * - * @param patientId 病人id + * @param patientId 病人id * @param encounterId 就诊id * @return 历史医嘱请求数据 */ @@ -915,21 +854,22 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); // 医嘱请求数据 List requestBaseInfo = doctorStationAdviceAppMapper.getRequestBaseInfo(encounterId, patientId, - CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, - CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode()); + CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, + CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode(), + GenerateSource.DOCTOR_PRESCRIPTION.getValue()); for (RequestBaseDto requestBaseDto : requestBaseInfo) { // 请求状态 requestBaseDto - .setStatusEnum_enumText(EnumUtils.getInfoByValue(RequestStatus.class, requestBaseDto.getStatusEnum())); + .setStatusEnum_enumText(EnumUtils.getInfoByValue(RequestStatus.class, requestBaseDto.getStatusEnum())); // 是否皮试 requestBaseDto - .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, requestBaseDto.getSkinTestFlag())); + .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, requestBaseDto.getSkinTestFlag())); // 是否为注射药物 requestBaseDto - .setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, requestBaseDto.getInjectFlag())); + .setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, requestBaseDto.getInjectFlag())); // 收费状态 requestBaseDto.setChargeStatus_enumText( - EnumUtils.getInfoByValue(ChargeItemStatus.class, requestBaseDto.getChargeStatus())); + EnumUtils.getInfoByValue(ChargeItemStatus.class, requestBaseDto.getChargeStatus())); } return R.ok(requestBaseInfo); } @@ -944,7 +884,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp public void updateGroupId(UpdateGroupIdParam updateGroupIdParam) { List groupList = updateGroupIdParam.getGroupList(); List idsToSetNull = groupList.stream().filter(dto -> dto.getGroupId() == null) - .map(UpdateGroupDto::getRequestId).collect(Collectors.toList()); + .map(UpdateGroupDto::getRequestId).collect(Collectors.toList()); if (!idsToSetNull.isEmpty()) { // 创建更新条件 @@ -957,8 +897,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 处理非null的情况 List medicationRequestList = groupList.stream().filter(dto -> dto.getGroupId() != null) - .map(dto -> new MedicationRequest().setId(dto.getRequestId()).setGroupId(dto.getGroupId())) - .collect(Collectors.toList()); + .map(dto -> new MedicationRequest().setId(dto.getRequestId()).setGroupId(dto.getGroupId())) + .collect(Collectors.toList()); if (!medicationRequestList.isEmpty()) { iMedicationRequestService.saveOrUpdateBatch(medicationRequestList); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java index ae54198b..ff0aa6a8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationChineseMedicalAppServiceImpl.java @@ -18,6 +18,7 @@ import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; +import com.core.common.utils.StringUtils; import com.openhis.administration.domain.ChargeItem; import com.openhis.administration.domain.EncounterDiagnosis; import com.openhis.administration.service.IChargeItemService; @@ -272,6 +273,11 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation Long orgId = SecurityUtils.getLoginUser().getOrgId(); // 患者挂号对应的科室id Long organizationId = adviceSaveParam.getOrganizationId(); + // 是否代煎 + Integer sufferingFlag = adviceSaveParam.getSufferingFlag(); + // 中药代煎定义id + Long sufferingDefinitionId = + iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.SUFFERING_TCM); // 保存时,校验库存 if (is_save) { List needCheckList = medicineList.stream() @@ -300,9 +306,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.MED_MEDICATION_REQUEST, adviceSaveDto.getRequestId()); + // 删除代煎费 + iChargeItemService.remove(new LambdaQueryWrapper() + .eq(ChargeItem::getPrescriptionNo, adviceSaveDto.getPrescriptionNo()) + .eq(ChargeItem::getProductId, sufferingDefinitionId)); + } - // 是否代煎 - Integer sufferingFlag = adviceSaveParam.getSufferingFlag(); if (is_sign) { // 按groupId分组 @@ -310,9 +319,16 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation insertOrUpdateList.stream().collect(Collectors.groupingBy(AdviceSaveDto::getGroupId)); // 为每个分组生成唯一的处方号 groupMap.forEach((groupId, groupList) -> { - String prescriptionNo = - assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_CHINESE_HERBAL_MEDICINE.getPrefix(), 8); - groupList.forEach(dto -> dto.setPrescriptionNo(prescriptionNo)); + // 先查询当前groupId是否已经被签发生成过处方号 + List list = iMedicationRequestService + .list(new LambdaQueryWrapper().eq(MedicationRequest::getGroupId, groupId)); + if (!list.isEmpty() && StringUtils.isNotEmpty(list.get(0).getPrescriptionNo())) { + groupList.forEach(dto -> dto.setPrescriptionNo(list.get(0).getPrescriptionNo())); + } else { + String prescriptionNo = + assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_CHINESE_HERBAL_MEDICINE.getPrefix(), 8); + groupList.forEach(dto -> dto.setPrescriptionNo(prescriptionNo)); + } }); } @@ -326,13 +342,14 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation medicationRequest.setId(adviceSaveDto.getRequestId()); // 主键id medicationRequest.setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态 if (is_sign) { - medicationRequest.setGroupId(adviceSaveDto.getGroupId()); // 组号 medicationRequest.setPrescriptionNo(adviceSaveDto.getPrescriptionNo()); // 处方号 medicationRequest.setSignCode(signCode); } - // 只有保存时才处理的字段属性 + // 保存时,处理数据(请求,发放,账单) if (is_save) { - medicationRequest.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); + medicationRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); + medicationRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 + medicationRequest.setGroupId(adviceSaveDto.getGroupId()); // 组号 medicationRequest.setChineseHerbsDoseQuantity(chineseHerbsDoseQuantity); // 中药付数 medicationRequest.setSufferingFlag(sufferingFlag); // 代煎标识 medicationRequest.setQuantity(adviceSaveDto.getQuantity().multiply(chineseHerbsDoseQuantity)); // 请求数量 @@ -357,16 +374,20 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation // medicationRequest.setDispensePerDuration(adviceSaveDto.getDispensePerDuration()); // 每次发药供应天数 medicationRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json medicationRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码 + medicationRequest.setDosageInstruction(adviceSaveDto.getDosageInstruction()); // 用药说明 , 即煎法 } iMedicationRequestService.saveOrUpdate(medicationRequest); if (is_save) { // 处理药品发放 - iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType()); + Long dispenseId = + iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType()); + // 保存药品费用项 chargeItem = new ChargeItem(); chargeItem.setId(adviceSaveDto.getChargeItemId()); // 费用项id chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 默认-草稿 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(medicationRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setPrescriptionNo(adviceSaveDto.getPrescriptionNo()); // 处方号 chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者 chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); // 类型 @@ -383,14 +404,14 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID chargeItem.setConditionId(adviceSaveDto.getConditionId()); // 诊断id chargeItem.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id + // chargeItem.setDispenseId(dispenseId); // 发放ID chargeItem.setQuantityValue(medicationRequest.getQuantity()); // 数量 chargeItem.setQuantityUnit(medicationRequest.getUnitCode()); // 单位 chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价 - // 计算总价,保留4位小数 + // 计算总价,保留6位小数 BigDecimal qty = chargeItem.getQuantityValue(); - chargeItem.setTotalPrice(qty.multiply(chargeItem.getUnitPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 - chargeItem.setTotalPrice(adviceSaveDto.getTotalPrice()); // 总价 + chargeItem.setTotalPrice(qty.multiply(chargeItem.getUnitPrice()).setScale(6, RoundingMode.HALF_UP)); // 总价 chargeItem.setTcmFlag(Whether.YES.getValue());// 中医标识 iChargeItemService.saveOrUpdate(chargeItem); @@ -406,61 +427,63 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation Long conditionId = medicineList.get(0).getConditionId(); // 就诊诊断id Long encounterDiagnosisId = medicineList.get(0).getEncounterDiagnosisId(); - // 中药代煎定义id - Long sufferingDefinitionId = - iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.SUFFERING_TCM); - // 签发时,生成中药代煎的账单,只生成一次 + // 中药付数 + BigDecimal chineseHerbsDoseQuantity = medicineList.get(0).getChineseHerbsDoseQuantity(); + // 处方号 + String prescriptionNo = insertOrUpdateList.get(0).getPrescriptionNo(); + + // 签发时,生成中药代煎的账单 if (Whether.YES.getValue().equals(sufferingFlag) && is_sign) { - BigDecimal quantity = new BigDecimal("1"); // 请求数量 + BigDecimal quantity = chineseHerbsDoseQuantity; // 请求数量 AdviceBaseDto adviceBaseDto = new AdviceBaseDto(); adviceBaseDto.setAdviceDefinitionId(sufferingDefinitionId); // 医嘱定义id - // 当前是否已经生成了贵代煎账单 - ChargeItem one = iChargeItemService.getOne(new LambdaQueryWrapper() - .eq(ChargeItem::getEncounterId, encounterId).eq(ChargeItem::getProductId, sufferingDefinitionId)); - if (one == null) { - // 对应的诊疗医嘱信息 - AdviceBaseDto activityAdviceBaseDto = - iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, null, null, organizationId, 1, - 1, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords().get(0); - if (activityAdviceBaseDto != null) { - // 费用定价 - AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0); - if (advicePriceDto != null) { - // 生成账单 - chargeItem = new ChargeItem(); - chargeItem.setGenerateSourceEnum(ChargeItemGenerateSource.MEDICAL_ORDER_BINDING.getValue()); // 账单生成来源 - chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 草稿 - chargeItem.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(), 4)); - chargeItem.setPatientId(patientId); // 患者 - chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 - chargeItem.setEncounterId(encounterId); // 就诊id - chargeItem.setDefinitionId(advicePriceDto.getDefinitionId()); // 费用定价ID - chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId());// 开立人ID - chargeItem.setRequestingOrgId(orgId); // 开立科室 - chargeItem.setEnteredDate(curDate); // 开立时间 - chargeItem.setProductTable(activityAdviceBaseDto.getAdviceTableName());// 产品所在表 - chargeItem.setProductId(activityAdviceBaseDto.getAdviceDefinitionId());// 收费项id - chargeItem.setAccountId(accountId);// 关联账户ID - chargeItem.setConditionId(conditionId); // 诊断id - chargeItem.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id - chargeItem.setQuantityValue(quantity); // 数量 - chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 - chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 - // 计算总价,保留4位小数 - BigDecimal qty = quantity; - chargeItem - .setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 - chargeItem.setTcmFlag(Whether.YES.getValue());// 中医标识 - iChargeItemService.save(chargeItem); - } + // 先删除中药代煎的账单 + iChargeItemService.remove(new LambdaQueryWrapper() + .eq(ChargeItem::getPrescriptionNo, prescriptionNo).eq(ChargeItem::getProductId, sufferingDefinitionId)); + + // 对应的诊疗医嘱信息 + AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, + null, null, organizationId, 1, 1, Whether.NO.getValue(), List.of(3)).getRecords().get(0); + if (activityAdviceBaseDto != null) { + // 费用定价 + AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0); + if (advicePriceDto != null) { + // 生成账单 + chargeItem = new ChargeItem(); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 + chargeItem.setPrescriptionNo(prescriptionNo); // 处方号 + chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 收费状态 + chargeItem.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(), 4)); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 + chargeItem.setPatientId(patientId); // 患者 + chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 + chargeItem.setEncounterId(encounterId); // 就诊id + chargeItem.setDefinitionId(advicePriceDto.getDefinitionId()); // 费用定价ID + chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId());// 开立人ID + chargeItem.setRequestingOrgId(orgId); // 开立科室 + chargeItem.setEnteredDate(curDate); // 开立时间 + chargeItem.setProductTable(activityAdviceBaseDto.getAdviceTableName());// 产品所在表 + chargeItem.setProductId(activityAdviceBaseDto.getAdviceDefinitionId());// 收费项id + chargeItem.setAccountId(accountId);// 关联账户ID + chargeItem.setConditionId(conditionId); // 诊断id + chargeItem.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id + + chargeItem.setQuantityValue(quantity); // 数量 + chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 + chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 + // 计算总价,保留6位小数 + BigDecimal qty = quantity; + chargeItem.setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(6, RoundingMode.HALF_UP)); // 总价 + chargeItem.setTcmFlag(Whether.YES.getValue());// 中医标识 + iChargeItemService.save(chargeItem); } } } else if (Whether.NO.getValue().equals(sufferingFlag)) { // 删除中药代煎的账单 - iChargeItemService.remove(new LambdaQueryWrapper().eq(ChargeItem::getEncounterId, encounterId) - .eq(ChargeItem::getProductId, sufferingDefinitionId)); + iChargeItemService.remove(new LambdaQueryWrapper() + .eq(ChargeItem::getPrescriptionNo, prescriptionNo).eq(ChargeItem::getProductId, sufferingDefinitionId)); } // 签发时,把草稿状态的账单更新为待收费[中医] @@ -491,7 +514,8 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation // 医嘱请求数据 List requestBaseInfo = doctorStationChineseMedicalAppMapper.getTcmRequestBaseInfo(encounterId, null, CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, - CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode()); + CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(), + GenerateSource.DOCTOR_PRESCRIPTION.getValue()); for (RequestBaseDto requestBaseDto : requestBaseInfo) { // 请求状态 requestBaseDto @@ -515,10 +539,10 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation // 当前账号的参与者id Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); // 医嘱请求数据 - List requestBaseInfo = - doctorStationChineseMedicalAppMapper.getTcmRequestHistoryInfo(encounterId, patientId, - CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, - CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode()); + List requestBaseInfo = doctorStationChineseMedicalAppMapper.getTcmRequestHistoryInfo( + encounterId, patientId, CommonConstants.TableName.MED_MEDICATION_REQUEST, + CommonConstants.TableName.WOR_DEVICE_REQUEST, CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, + Whether.YES.getCode(), GenerateSource.DOCTOR_PRESCRIPTION.getValue()); for (RequestBaseDto requestBaseDto : requestBaseInfo) { // 请求状态 requestBaseDto diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java index 0c95aa82..c19cc718 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java @@ -32,43 +32,45 @@ public class DoctorStationAdviceController { /** * 查询医嘱信息 * - * @param adviceBaseDto 查询条件 - * @param searchKey 模糊查询关键字 - * @param locationId 药房id + * @param adviceBaseDto 查询条件 + * @param searchKey 模糊查询关键字 + * @param locationId 药房id * @param adviceDefinitionIdParamList 医嘱定义id参数集合 - * @param adviceTypes 医嘱类型参数集合 - * @param organizationId 患者挂号对应的科室id - * @param pageNo 当前页 - * @param pageSize 每页多少条 + * @param adviceTypes 医嘱类型参数集合 + * @param organizationId 患者挂号对应的科室id + * @param pageNo 当前页 + * @param pageSize 每页多少条 * @return 医嘱信息 */ @GetMapping(value = "/advice-base-info") public R getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, - @RequestParam(value = "searchKey", defaultValue = "") String searchKey, - @RequestParam(value = "locationId", required = false) Long locationId, - @RequestParam(value = "adviceDefinitionIdParamList", required = false) List adviceDefinitionIdParamList, - @RequestParam(value = "organizationId", defaultValue = "0") Long organizationId, - @RequestParam(value = "adviceTypes", defaultValue = "1,2,3") List adviceTypes, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "locationId", required = false) Long locationId, + @RequestParam(value = "adviceDefinitionIdParamList", required = false) List adviceDefinitionIdParamList, + @RequestParam(value = "organizationId", defaultValue = "0") Long organizationId, + @RequestParam(value = "adviceTypes", defaultValue = "1,2,3") List adviceTypes, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { return R.ok(iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, - adviceDefinitionIdParamList, organizationId, pageNo, pageSize, Whether.NO.getValue(), adviceTypes)); + adviceDefinitionIdParamList, organizationId, pageNo, pageSize, Whether.NO.getValue(), adviceTypes)); } /** - * 查询诊疗绑定耗材信息 - * - * @param activityId 诊疗id - * @return 诊疗绑定耗材信息 + * 查询医嘱绑定信息 + * + * @param typeCode 1:用法绑东西 2:诊疗绑东西 + * @param itemNo 用法的code 或者 诊疗定义id + * @return 医嘱绑定信息 */ - @GetMapping(value = "/activity-bind-device-info") - public R getActivityBindDevice(@RequestParam(value = "activityId") Long activityId) { - return R.ok(iDoctorStationAdviceAppService.getActivityBindDevice(activityId)); + @GetMapping(value = "/order-bind-info") + public R getOrderBindInfo(@RequestParam(value = "typeCode") String typeCode, + @RequestParam(value = "itemNo") String itemNo) { + return R.ok(iDoctorStationAdviceAppService.getOrderBindInfo(typeCode, itemNo)); } /** * 门诊保存医嘱 - * + * * @param adviceSaveParam 医嘱表单信息 * @return 结果 */ @@ -101,7 +103,7 @@ public class DoctorStationAdviceController { /** * 查询医嘱请求数据 - * + * * @param encounterId 就诊id * @return 医嘱请求数据 */ @@ -123,7 +125,7 @@ public class DoctorStationAdviceController { /** * 更新组号 - * + * * @param updateGroupIdParam 更新组号参数 */ @PutMapping(value = "/update-groupid") diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDetailDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDetailDto.java index 1e32e8b3..e32239da 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDetailDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDetailDto.java @@ -43,6 +43,14 @@ public class ActivityBindDeviceDetailDto { */ private String unitCode; + /** 小数量 */ + private BigDecimal minUnitCodeQuantity; + + /** + * 小单位 + */ + private String minUnitCode; + /** * 耗材详细信息 */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDto.java deleted file mode 100644 index 2a47fb4c..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/ActivityBindDeviceDto.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.openhis.web.doctorstation.dto; - -import java.util.List; - -import com.openhis.common.annotation.Dict; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 诊疗绑定耗材 dto - */ -@Data -@Accessors(chain = true) -public class ActivityBindDeviceDto { - - /** - * 用于搭配Dict切面,无实际业务意义 - */ - @Dict(dictCode = "test_field") - private String testField; - private String testField_dictText; - - /** - * 诊疗绑定耗材详情 - */ - private List activityBindDeviceInfos; - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceBaseDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceBaseDto.java index becd16f2..5b5efd60 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceBaseDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceBaseDto.java @@ -20,6 +20,9 @@ public class AdviceBaseDto { /** 医嘱类型 */ private Integer adviceType; // 1:药品 , 2: 耗材 , 3:项目 + /** 编号 */ + private String busNo; + /** * 医嘱详细分类 */ @@ -171,4 +174,9 @@ public class AdviceBaseDto { /** 限制使用范围 */ private String restrictedScope; + /** 用药说明 */ + @Dict(dictCode = "dosage_instruction") + private String dosageInstruction; + private String dosageInstruction_dictText; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java index c65852c4..84ec1d1b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java @@ -5,6 +5,7 @@ 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.annotation.Dict; import com.openhis.common.enums.EncounterClass; import com.openhis.common.enums.TherapyTimeType; @@ -225,6 +226,9 @@ public class AdviceSaveDto { */ private Integer sufferingFlag; + /** 用药说明 */ + private String dosageInstruction; + /** * 排序号 */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/OrderBindInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/OrderBindInfoDto.java new file mode 100644 index 00000000..bded72e1 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/OrderBindInfoDto.java @@ -0,0 +1,43 @@ +package com.openhis.web.doctorstation.dto; + +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 lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医嘱绑定信息 详情dto + */ +@Data +@Accessors(chain = true) +public class OrderBindInfoDto { + + /** + * 医嘱定义id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orderDefinitionId; + + /** + * 医嘱定义名称 + */ + private String orderDefinitionName; + + /** 数量 */ + private BigDecimal quantity; + + /** + * 单位code + */ + private String unitCode; + + /** + * 单位 + */ + private String unitCodeName; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java index 55c99889..ed21cd77 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java @@ -119,4 +119,9 @@ public class PatientInfoDto { */ @JsonSerialize(using = ToStringSerializer.class) private Long jzPractitionerUserId; + + /** + * 病历号 + */ + private String busNo; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java index 53edefdb..931f4cb2 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/RequestBaseDto.java @@ -170,4 +170,9 @@ public class RequestBaseDto { */ private Integer sortNumber; + /** 用药说明 */ + @Dict(dictCode = "dosage_instruction") + private String dosageInstruction; + private String dosageInstruction_dictText; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java index 6fea26ce..315c91c0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationAdviceAppMapper.java @@ -26,7 +26,6 @@ public interface DoctorStationAdviceAppMapper { * @param medicationTableName 药品定义表名 * @param deviceTableName 耗材定义表名 * @param activityTableName 诊疗定义表名 - * @param singleUse 单次消耗类 (耗材只查这类) * @param pricingFlag 划价标记 * @param adviceDefinitionIdParamList 医嘱定义id参数集合 * @param adviceTypes 医嘱类型参数集合 @@ -36,8 +35,7 @@ public interface DoctorStationAdviceAppMapper { IPage getAdviceBaseInfo(@Param("page") Page page, @Param("statusEnum") Integer statusEnum, @Param("organizationId") Long organizationId, @Param("medicationTableName") String medicationTableName, @Param("deviceTableName") String deviceTableName, - @Param("activityTableName") String activityTableName, @Param("singleUse") String singleUse, - @Param("pricingFlag") Integer pricingFlag, + @Param("activityTableName") String activityTableName, @Param("pricingFlag") Integer pricingFlag, @Param("adviceDefinitionIdParamList") List adviceDefinitionIdParamList, @Param("adviceTypes") List adviceTypes, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); @@ -76,6 +74,16 @@ public interface DoctorStationAdviceAppMapper { */ List getMedLocationConfig(@Param("organizationId") Long organizationId); + /** + * 查询耗材的取药科室 + * + * @param encounterId 就诊id + * @param distributionCategoryCode 发放编码(耗材) + * @return 耗材的取药科室id + */ + Long getTakeDeviceLocationId(@Param("encounterId") Long encounterId, + @Param("distributionCategoryCode") String distributionCategoryCode); + /** * 查询 费用定价子表 * @@ -90,9 +98,11 @@ public interface DoctorStationAdviceAppMapper { * 查询 费用定价主表 * * @param chargeItemDefinitionIdList 费用定价主表ID集合 + * @param statusEnum 状态 * @return 费用定价子表 */ - List getMainCharge(@Param("chargeItemDefinitionIdList") List chargeItemDefinitionIdList); + List getMainCharge(@Param("chargeItemDefinitionIdList") List chargeItemDefinitionIdList, + @Param("statusEnum") Integer statusEnum); /** * 查询医嘱请求数据 @@ -104,13 +114,14 @@ public interface DoctorStationAdviceAppMapper { * @param WOR_SERVICE_REQUEST 诊疗请求表名 * @param practitionerId 当前账号的参与者id * @param historyFlag 历史医嘱标记 + * @param generateSourceEnum 生成来源 * @return 医嘱请求数据 */ List getRequestBaseInfo(@Param("encounterId") Long encounterId, @Param("patientId") Long patientId, @Param("MED_MEDICATION_REQUEST") String MED_MEDICATION_REQUEST, @Param("WOR_DEVICE_REQUEST") String WOR_DEVICE_REQUEST, @Param("WOR_SERVICE_REQUEST") String WOR_SERVICE_REQUEST, @Param("practitionerId") Long practitionerId, - @Param("historyFlag") String historyFlag); + @Param("historyFlag") String historyFlag, @Param("generateSourceEnum") Integer generateSourceEnum); /** * 查询就诊费用性质 @@ -131,4 +142,15 @@ public interface DoctorStationAdviceAppMapper { List getActivityBindDevice(@Param("activityId") String activityId, @Param("status") Integer status, @Param("tableName") String tableName); + /** + * 查询医嘱绑定信息 + * + * @param typeCode 1:用法绑东西 2:诊疗绑东西 + * @param status 状态 + * @param itemNo 用法的code 或者 诊疗定义id + * @return 医嘱绑定信息 + */ + List getOrderBindInfo(@Param("typeCode") String typeCode, @Param("status") Integer status, + @Param("itemNo") String itemNo); + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationChineseMedicalAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationChineseMedicalAppMapper.java index a208091c..7aa1d64b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationChineseMedicalAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/mapper/DoctorStationChineseMedicalAppMapper.java @@ -32,13 +32,14 @@ public interface DoctorStationChineseMedicalAppMapper { * @param WOR_SERVICE_REQUEST 诊疗请求表名 * @param practitionerId 当前账号的参与者id * @param historyFlag 历史医嘱标记 + * @param generateSourceEnum 生成来源 * @return 中医医嘱请求数据 */ List getTcmRequestBaseInfo(@Param("encounterId") Long encounterId, @Param("patientId") Long patientId, @Param("MED_MEDICATION_REQUEST") String MED_MEDICATION_REQUEST, @Param("WOR_DEVICE_REQUEST") String WOR_DEVICE_REQUEST, @Param("WOR_SERVICE_REQUEST") String WOR_SERVICE_REQUEST, @Param("practitionerId") Long practitionerId, - @Param("historyFlag") String historyFlag); + @Param("historyFlag") String historyFlag, @Param("generateSourceEnum") Integer generateSourceEnum); /** * 查询中医医嘱历史请求数据 @@ -50,13 +51,14 @@ public interface DoctorStationChineseMedicalAppMapper { * @param WOR_SERVICE_REQUEST 诊疗请求表名 * @param practitionerId 当前账号的参与者id * @param historyFlag 历史医嘱标记 + * @param generateSourceEnum 生成来源 * @return 中医医嘱历史请求数据 */ List getTcmRequestHistoryInfo(@Param("encounterId") Long encounterId, @Param("patientId") Long patientId, @Param("MED_MEDICATION_REQUEST") String MED_MEDICATION_REQUEST, @Param("WOR_DEVICE_REQUEST") String WOR_DEVICE_REQUEST, @Param("WOR_SERVICE_REQUEST") String WOR_SERVICE_REQUEST, @Param("practitionerId") Long practitionerId, - @Param("historyFlag") String historyFlag); + @Param("historyFlag") String historyFlag, @Param("generateSourceEnum") Integer generateSourceEnum); /** * 查询中医诊断id集合 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java index dc87575c..0a0111ad 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/AdviceUtils.java @@ -2,6 +2,7 @@ package com.openhis.web.doctorstation.utils; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -9,25 +10,23 @@ import javax.annotation.Resource; import org.springframework.stereotype.Component; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.SecurityUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.openhis.administration.domain.ChargeItem; import com.openhis.administration.service.IChargeItemService; import com.openhis.common.constant.CommonConstants; import com.openhis.common.enums.*; -import com.openhis.medication.domain.MedicationRequest; import com.openhis.web.chargemanage.mapper.OutpatientRegistrationAppMapper; import com.openhis.web.datadictionary.dto.ActivityChildJsonDto; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; import com.openhis.web.doctorstation.dto.*; import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper; import com.openhis.web.inhospitalnursestation.dto.MedicationRequestUseExe; -import com.openhis.web.personalization.dto.ActivityDeviceDto; -import com.openhis.workflow.domain.DeviceRequest; import com.openhis.workflow.domain.ServiceRequest; import com.openhis.workflow.service.IActivityDefinitionService; import com.openhis.workflow.service.IDeviceDispenseService; @@ -207,236 +206,6 @@ public class AdviceUtils { }).collect(Collectors.toList()); } - /** - * 药品请求为皮试或输液,开立对应的请求及账单 - */ - public void generateActRequestByMedicationFlag(MedicationRequest medicationRequest, Long organizationId, - AdviceSaveDto adviceSaveDto) { - // 当前登录账号的科室id - Long orgId = SecurityUtils.getLoginUser().getOrgId(); - // 皮试 - boolean isSkinTest = Whether.YES.getValue().equals(medicationRequest.getSkinTestFlag()); - // 输液 - boolean isInfusion = Whether.YES.getValue().equals(medicationRequest.getInfusionFlag()); - // 当前时间 - Date curDate = new Date(); - AdviceBaseDto adviceBaseDto; - ServiceRequest serviceRequest; - AdviceBaseDto activityAdviceBaseDto; - BigDecimal quantity; - ChargeItem chargeItem; - DeviceRequest deviceRequest; - // 生成皮试检查对应的请求和账单;生成皮试检查这个诊疗自身的请求,以及皮试检查诊疗绑定的耗材(包括发放) - if (isSkinTest) { - quantity = new BigDecimal("1"); // 请求数量 - // 皮试检查的诊疗定义id - Long skinTestInspectionDefinitionId = iActivityDefinitionService - .getAppointActivityDefinitionId(CommonConstants.BusinessName.SKIN_TEST_INSPECTION); - if (skinTestInspectionDefinitionId != null) { - adviceBaseDto = new AdviceBaseDto(); - adviceBaseDto.setAdviceDefinitionId(skinTestInspectionDefinitionId); // 医嘱定义id - // 对应的诊疗医嘱信息 - activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, null, - null, organizationId, 1, 1, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords().get(0); - if (activityAdviceBaseDto != null) { - // 费用定价 - AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0); - if (advicePriceDto != null) { - // 生成诊疗请求,用于收费 - serviceRequest = new ServiceRequest(); - serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 - serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); - serviceRequest.setQuantity(quantity); // 请求数量 - serviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 - serviceRequest.setCategoryEnum(Integer.valueOf(activityAdviceBaseDto.getCategoryCode())); // 请求类型 - serviceRequest.setActivityId(activityAdviceBaseDto.getAdviceDefinitionId());// 诊疗定义id - serviceRequest.setPatientId(medicationRequest.getPatientId()); // 患者 - serviceRequest.setRequesterId(SecurityUtils.getLoginUser().getPractitionerId()); // 开方医生 - serviceRequest.setEncounterId(medicationRequest.getEncounterId()); // 就诊id - serviceRequest.setAuthoredTime(curDate); // 请求签发时间 - serviceRequest.setOrgId(organizationId); // 执行科室 - serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id - serviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id - iServiceRequestService.save(serviceRequest); - // 生成账单 - chargeItem = new ChargeItem(); - chargeItem.setGenerateSourceEnum(ChargeItemGenerateSource.MEDICAL_ORDER_BINDING.getValue()); // 账单生成来源 - chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 - chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); - chargeItem.setPatientId(medicationRequest.getPatientId()); // 患者 - chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 - chargeItem.setEncounterId(medicationRequest.getEncounterId()); // 就诊id - chargeItem.setDefinitionId(advicePriceDto.getDefinitionId()); // 费用定价ID - chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId());// 开立人ID - chargeItem.setRequestingOrgId(orgId); // 开立科室 - chargeItem.setEnteredDate(curDate); // 开立时间 - chargeItem.setServiceTable(CommonConstants.TableName.WOR_SERVICE_REQUEST);// 医疗服务类型 - chargeItem.setServiceId(serviceRequest.getId()); // 医疗服务ID - chargeItem.setProductTable(activityAdviceBaseDto.getAdviceTableName());// 产品所在表 - chargeItem.setProductId(activityAdviceBaseDto.getAdviceDefinitionId());// 收费项id - chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID - chargeItem.setConditionId(adviceSaveDto.getConditionId()); // 诊断id - chargeItem.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id - - chargeItem.setQuantityValue(quantity); // 数量 - chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 - chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 - // 计算总价,保留4位小数 - BigDecimal qty = quantity; - chargeItem - .setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 - iChargeItemService.save(chargeItem); - } - } - // 查询皮试检查绑定的耗材id及请求数量 - List tmpActivityList = outpatientRegistrationAppMapper.getTmpActivityList( - String.valueOf(skinTestInspectionDefinitionId), CommonConstants.TableName.ADM_DEVICE_DEFINITION); - for (ActivityDeviceDto activityDeviceDto : tmpActivityList) { - quantity = activityDeviceDto.getQuantity(); // 请求数量 - adviceBaseDto = new AdviceBaseDto(); - adviceBaseDto.setAdviceDefinitionId(activityDeviceDto.getDevActId()); - // 对应的耗材医嘱信息 - activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, null, - null, organizationId, 1, 1, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords().get(0); - // 库存信息 - AdviceInventoryDto adviceInventoryDto = activityAdviceBaseDto.getInventoryList().get(0); - // 价格信息 - AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0); - if (adviceInventoryDto != null && advicePriceDto != null) { - // 耗材请求 - deviceRequest = new DeviceRequest(); - deviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue()); // 请求状态 - deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4)); - deviceRequest.setQuantity(quantity); // 请求数量 - deviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 - deviceRequest.setLotNumber(adviceInventoryDto.getLotNumber());// 产品批号 - deviceRequest.setCategoryEnum(Integer.valueOf(activityAdviceBaseDto.getCategoryCode())); // 请求类型 - deviceRequest.setDeviceDefId(activityAdviceBaseDto.getAdviceDefinitionId());// 耗材定义id - deviceRequest.setPatientId(medicationRequest.getPatientId()); // 患者 - deviceRequest.setRequesterId(SecurityUtils.getLoginUser().getPractitionerId()); // 开方医生 - deviceRequest.setOrgId(organizationId);// 开方人科室 - deviceRequest.setReqAuthoredTime(curDate); // 请求开始时间 - // 发放耗材房 - deviceRequest.setPerformLocation(activityAdviceBaseDto.getLocationId()); - deviceRequest.setEncounterId(medicationRequest.getEncounterId()); // 就诊id - deviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id - deviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id - iDeviceRequestService.save(deviceRequest); - // 耗材发放 - iDeviceDispenseService.handleDeviceDispense(deviceRequest, DbOpType.INSERT.getCode()); - // 耗材账单 - chargeItem = new ChargeItem(); - chargeItem.setGenerateSourceEnum(ChargeItemGenerateSource.MEDICAL_ORDER_BINDING.getValue()); // 账单生成来源 - chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 - chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo())); - chargeItem.setPatientId(medicationRequest.getPatientId()); // 患者 - chargeItem.setContextEnum(ChargeItemContext.DEVICE.getValue()); // 类型 - chargeItem.setEncounterId(medicationRequest.getEncounterId()); // 就诊id - chargeItem.setDefinitionId(advicePriceDto.getDefinitionId()); // 费用定价ID - chargeItem.setDefDetailId(advicePriceDto.getDefinitionDetailId()); // 定价子表主键 - chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId());// 开立人ID - chargeItem.setEnteredDate(curDate); // 开立时间 - chargeItem.setServiceTable(CommonConstants.TableName.WOR_DEVICE_REQUEST);// 医疗服务类型 - chargeItem.setServiceId(deviceRequest.getId()); // 医疗服务ID - chargeItem.setProductTable(activityAdviceBaseDto.getAdviceTableName());// 产品所在表 - chargeItem.setProductId(activityAdviceBaseDto.getAdviceDefinitionId());// 收费项id - chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID - chargeItem.setConditionId(adviceSaveDto.getConditionId()); // 诊断id - chargeItem.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id - - chargeItem.setQuantityValue(quantity); // 数量 - chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 - chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 - // 计算总价,保留4位小数 - BigDecimal qty = quantity; - chargeItem - .setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 - iChargeItemService.save(chargeItem); - } - } - } - } - // 生成用法(输液)绑定的诊疗对应的请求和账单 - if (isInfusion) { - // 分组id - Long groupId = medicationRequest.getGroupId(); - // 执行次数 - Integer executeNum = medicationRequest.getExecuteNum(); - // 用法 - String methodCode = medicationRequest.getMethodCode(); - // 查询用法绑定的诊疗信息 - List tmpActivityList = outpatientRegistrationAppMapper.getTmpActivityList(methodCode, - CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); - for (ActivityDeviceDto activityDeviceDto : tmpActivityList) { - quantity = activityDeviceDto.getQuantity().multiply(new BigDecimal(executeNum)); // 请求数量 - adviceBaseDto = new AdviceBaseDto(); - adviceBaseDto.setAdviceDefinitionId(activityDeviceDto.getDevActId()); - // 对应的诊疗医嘱信息 - activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, null, - null, organizationId, 1, 1, Whether.NO.getValue(), List.of(1, 2, 3)).getRecords().get(0); - if (activityAdviceBaseDto != null) { - // 费用定价 - AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0); - if (advicePriceDto != null) { - // 本次就诊,绑定的诊疗不重复带 - ServiceRequest one = iServiceRequestService.getOne(new LambdaQueryWrapper() - .eq(ServiceRequest::getEncounterId, medicationRequest.getEncounterId()) - .eq(ServiceRequest::getActivityId, activityAdviceBaseDto.getAdviceDefinitionId())); - if (one == null) { - // 生成诊疗请求 - serviceRequest = new ServiceRequest(); - serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 - serviceRequest - .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); - serviceRequest.setQuantity(quantity); // 请求数量 - serviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 - serviceRequest.setCategoryEnum(Integer.valueOf(activityAdviceBaseDto.getCategoryCode())); // 请求类型 - serviceRequest.setActivityId(activityAdviceBaseDto.getAdviceDefinitionId());// 诊疗定义id - serviceRequest.setPatientId(medicationRequest.getPatientId()); // 患者 - serviceRequest.setRequesterId(SecurityUtils.getLoginUser().getPractitionerId()); // 开方医生 - serviceRequest.setEncounterId(medicationRequest.getEncounterId()); // 就诊id - serviceRequest.setAuthoredTime(curDate); // 请求签发时间 - serviceRequest.setOrgId(organizationId); // 执行科室 - serviceRequest.setGroupId(groupId); // 分组id - serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id - serviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id - iServiceRequestService.save(serviceRequest); - - chargeItem = new ChargeItem(); - chargeItem.setGenerateSourceEnum(ChargeItemGenerateSource.MEDICAL_ORDER_BINDING.getValue()); // 账单生成来源 - chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 - chargeItem - .setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); - chargeItem.setPatientId(medicationRequest.getPatientId()); // 患者 - chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 - chargeItem.setEncounterId(medicationRequest.getEncounterId()); // 就诊id - chargeItem.setDefinitionId(advicePriceDto.getDefinitionId()); // 费用定价ID - chargeItem.setEntererId(SecurityUtils.getLoginUser().getPractitionerId());// 开立人ID - chargeItem.setRequestingOrgId(orgId); // 开立科室 - chargeItem.setEnteredDate(curDate); // 开立时间 - chargeItem.setServiceTable(CommonConstants.TableName.WOR_SERVICE_REQUEST);// 医疗服务类型 - chargeItem.setServiceId(serviceRequest.getId()); // 医疗服务ID - chargeItem.setProductTable(activityAdviceBaseDto.getAdviceTableName());// 产品所在表 - chargeItem.setProductId(activityAdviceBaseDto.getAdviceDefinitionId());// 收费项id - chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID - chargeItem.setConditionId(adviceSaveDto.getConditionId()); // 诊断id - chargeItem.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id - - chargeItem.setQuantityValue(quantity); // 数量 - chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 - chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 - // 计算总价,保留4位小数 - BigDecimal qty = quantity; - chargeItem.setTotalPrice( - qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 - iChargeItemService.saveOrUpdate(chargeItem); - } - } - } - } - } - } - /** * 处理诊疗子项信息 * @@ -451,6 +220,11 @@ public class AdviceUtils { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); ObjectMapper objectMapper = new ObjectMapper(); + // 注册 JavaTimeModule + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); + try { // 将JSON字符串转换为List List activityChildJsonDtoList = @@ -481,6 +255,7 @@ public class AdviceUtils { serviceRequest = new ServiceRequest(); serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 serviceRequest.setQuantity(quantity); // 请求数量 serviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 serviceRequest.setCategoryEnum(Integer.valueOf(activityAdviceBaseDto.getCategoryCode())); // 请求类型 @@ -498,10 +273,11 @@ public class AdviceUtils { if (TherapyTimeType.TEMPORARY.getValue().equals(therapyEnum)) { // 生成账单 chargeItem = new ChargeItem(); - chargeItem.setGenerateSourceEnum(ChargeItemGenerateSource.MEDICAL_ORDER_BINDING.getValue()); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem .setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setPatientId(activityChildrenJsonParams.getPatientId()); // 患者 chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 chargeItem.setEncounterId(activityChildrenJsonParams.getEncounterId()); // 就诊id @@ -521,7 +297,7 @@ public class AdviceUtils { // 计算总价,保留4位小数 BigDecimal qty = quantity; chargeItem.setTotalPrice( - qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 + qty.multiply(advicePriceDto.getPrice()).setScale(6, RoundingMode.HALF_UP)); // 总价 chargeItemList.add(chargeItem); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/DoctorStationSendApplyUtil.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/DoctorStationSendApplyUtil.java index 8bea5f32..c514abb9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/DoctorStationSendApplyUtil.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/DoctorStationSendApplyUtil.java @@ -14,7 +14,7 @@ import com.openhis.administration.domain.Practitioner; import com.openhis.administration.service.IOrganizationService; import com.openhis.administration.service.IPatientService; import com.openhis.administration.service.IPractitionerService; -import com.openhis.common.enums.ActivityDefCategory; +import com.openhis.common.enums.ActivityType; import com.openhis.common.enums.AdministrativeGender; import com.openhis.crosssystem.dto.LisApplyDto; import com.openhis.crosssystem.dto.LisApplyGroupDto; @@ -32,7 +32,7 @@ import lombok.extern.slf4j.Slf4j; /** * 跨系统发送申请工具类 * - * @author GuoRui + * @author Thanking * @date 2025-06-27 */ @Slf4j @@ -93,7 +93,7 @@ public class DoctorStationSendApplyUtil { } // 检验,发送LIS申请 - if (ActivityDefCategory.PROOF.getCode().equals(activityDefinition.getCategoryCode())) { + if (ActivityType.PROOF.getValue().equals(activityDefinition.getTypeEnum())) { // LIS性别转换 LisPatientSex lisPatientSex; if (patient.getGenderEnum() == null) { @@ -122,7 +122,7 @@ public class DoctorStationSendApplyUtil { crossSystemSendApplyUtil.sendApplyToLis(lisApplyDto); // 检查,发送PACS申请 - } else if (ActivityDefCategory.TEST.getCode().equals(activityDefinition.getCategoryCode())) { + } else if (ActivityType.TEST.getValue().equals(activityDefinition.getTypeEnum())) { // PACS性别转换 PacsPatientSex pacsPatientSex; if (patient.getGenderEnum() == null) { @@ -152,5 +152,4 @@ public class DoctorStationSendApplyUtil { crossSystemSendApplyUtil.sendApplyToPacs(pacsApplyDto); } } - } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java index 57c27f74..8c79ead7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/utils/PrescriptionUtils.java @@ -70,11 +70,80 @@ public class PrescriptionUtils { allGroups.forEach(group -> { finalGroups.addAll(splitByPriceLimit(group)); }); - // 2.5 分配处方号 - assignPrescriptionNumbers(finalGroups, pharmaGroup.get(0).getPharmacologyCategoryCode()); + + /** + * 如下文字适用 2.5 前提条件: 当 groupedMedicines 和 ungroupedMedicines都不为空的情况下 可以得知 finalGroups + * 的size至少是2(有组号的集合,无组号的集合) 假设有组号的集合为 groupList1 (也可能还有groupList2,groupList3 ...) 假设无组号的集合为 noGroupList1 + * (也可能还有noGroupList2,noGroupList3 ...) 注意:上述的groupList1和noGroupList1只是为了方便描述finalGroups的组成部分,实际并不存在这样的变量 + * + * 需求:对finalGroups的数据结构进行重新整合(groupList1,groupList2,groupList3,noGroupList1,noGroupList2,noGroupList3 + * 这些集合集合不可以被拆分) 当finalGroups里的集合size < MAX_SINGLE_PRESCRIPTION_NUM + * 时,groupList1,noGroupList1这些集合元素进行整合,保证每个重新组合的size依旧 <= MAX_SINGLE_PRESCRIPTION_NUM; + */ + + // 2.5 重新整合小的分组(保持原有分组不被拆分) + List> mergedGroups = mergeSmallGroups(finalGroups); + // 2.6 分配处方号 + assignPrescriptionNumbers(mergedGroups, pharmaGroup.get(0).getPharmacologyCategoryCode()); }); } + /** + * 合并小的分组(保持原有分组不被拆分) + */ + private List> mergeSmallGroups(List> groups) { + if (groups.size() <= 1) { + return groups; + } + List> result = new ArrayList<>(); + List currentMergedGroup = new ArrayList<>(); + for (List group : groups) { + // 检查当前分组是否可以合并到现有组中 + if (canMerge(currentMergedGroup, group)) { + currentMergedGroup.addAll(group); + } else { + // 如果不能合并,先保存当前合并组(如果不为空) + if (!currentMergedGroup.isEmpty()) { + result.add(new ArrayList<>(currentMergedGroup)); + } + // 开始新的合并组 + currentMergedGroup = new ArrayList<>(group); + } + } + // 添加最后一个合并组 + if (!currentMergedGroup.isEmpty()) { + result.add(currentMergedGroup); + } + return result; + } + + /** + * 检查两个分组是否可以合并(合并后不超过最大限制) + */ + private boolean canMerge(List currentGroup, List newGroup) { + if (currentGroup.isEmpty()) { + return true; // 当前组合为空,可以直接添加 + } + // 检查合并后的药品数量是否超过限制 + int mergedSize = currentGroup.size() + newGroup.size(); + if (mergedSize > MAX_SINGLE_PRESCRIPTION_NUM) { + return false; + } + // 检查合并后的总金额是否超过限制 + BigDecimal currentTotal = calculateTotalPrice(currentGroup); + BigDecimal newGroupTotal = calculateTotalPrice(newGroup); + BigDecimal mergedTotal = currentTotal.add(newGroupTotal); + return mergedTotal.compareTo(MAX_SINGLE_PRESCRIPTION_PRICE) <= 0; + } + + /** + * 计算分组的总金额 + */ + private BigDecimal calculateTotalPrice(List medicines) { + return medicines.stream().map(medicine -> medicine.getUnitPrice().multiply(medicine.getQuantity())) + .reduce(BigDecimal.ZERO, BigDecimal::add); + } + /** * 按药品种类上限拆分(仅用于无分组ID药品) */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocDefinitionController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocDefinitionController.java index 6ac50b75..da1a529b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocDefinitionController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocDefinitionController.java @@ -13,7 +13,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -44,8 +46,9 @@ public class DocDefinitionController { // 获取权限枚举列表 map.put("permissions", EnumUtil.toMapList(DocPermissionEnum.class)); //使用范围枚举 - - map.put("useRanges", EnumUtil.toMapList(DocUseRangeEnum.class)); + List noInUseCodes=new ArrayList<>(); + noInUseCodes.add(DocUseRangeEnum.USE_BY_SELF.getCode()); + map.put("useRanges", EnumUtil.toMapListFilter(DocUseRangeEnum.class, noInUseCodes)); return R.ok(map); } @@ -85,7 +88,7 @@ public class DocDefinitionController { } /** - * 获取文书定义详情 + * 删除文书定义 * * @param id 文书定义ID * @return 文书定义详情 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocTemplateController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocTemplateController.java index 670483b7..46f888f9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocTemplateController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/controller/DocTemplateController.java @@ -18,7 +18,7 @@ import lombok.extern.slf4j.Slf4j; import javax.servlet.http.HttpServletRequest; /** - * 文书模板 controller + * 文书模板/病历模板 controller * * @author wanghaiming * @date 2025-08-12 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitonParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitonParam.java index d82544ca..81742f4e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitonParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/dto/DocDefinitonParam.java @@ -13,6 +13,7 @@ import java.util.List; @Accessors(chain = true) public class DocDefinitonParam { + // 文书类型 一级菜单 ,从枚举中获取 DocTypeEnum private Integer primaryMenuEnum; @JsonSerialize(using = ToStringSerializer.class) private Long organizationId; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/EnumUtil.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/EnumUtil.java index c8608696..c1ac3aae 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/EnumUtil.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/document/util/EnumUtil.java @@ -2,11 +2,7 @@ package com.openhis.web.document.util; import com.openhis.common.enums.HisEnumInterface; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -29,7 +25,37 @@ public class EnumUtil { .map(EnumUtil::convertEnumToMap) .collect(Collectors.toList()); } + /** + * 将枚举转换为包含 value、code、info 的 Map 列表 + * + * @param enumClass 枚举类 + * @param filterCodes 接收 code 集合(如 List) + * @return 包含枚举属性的 Map 列表 + */ + public static List> toMapListFilter( + Class enumClass, + Collection filterCodes // 接收 code 集合(如 List) + ) { + // 入参校验:enumClass 非法 或 filterCodes 为 null/空,直接返回空列表(或原枚举列表,按需调整) + if (enumClass == null || !enumClass.isEnum()) { + return Collections.emptyList(); + } + // 若过滤集合为 null/空,返回所有枚举项(避免误过滤) + if (filterCodes == null || filterCodes.isEmpty()) { + return Arrays.stream(enumClass.getEnumConstants()) + .map(EnumUtil::convertEnumToMap) + .collect(Collectors.toList()); + } + // 核心逻辑:过滤掉 code 在 filterCodes 中的枚举项 + return Arrays.stream(enumClass.getEnumConstants()) + // 过滤条件:枚举的 code 不在过滤集合中 + .filter(item -> !filterCodes.contains(item.getCode())) + // 转换为 Map + .map(EnumUtil::convertEnumToMap) + // 收集为 List + .collect(Collectors.toList()); + } /** * 将枚举项转换为 Map * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/IBankPosCloudAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/IBankPosCloudAppService.java index 78b831cb..462e1b26 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/IBankPosCloudAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/IBankPosCloudAppService.java @@ -1,11 +1,107 @@ package com.openhis.web.externalintegration.appservice; +import com.core.common.core.domain.R; + /** * BPC商户接口Service接口 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ public interface IBankPosCloudAppService { + /** + * 被扫消费 + * + * @param txnAmt 交易金额 + * @param merTradeNo 商户系统订单号 + * @param scanCode 二维码信息 + * @param posNo 设备终端编号 + * @return 结果 + */ + R processConsumerScan(String txnAmt, String merTradeNo, String scanCode, String posNo); + + /** + * 主扫下单 + * + * @param txnAmt 交易金额 + * @param merTradeNo 商户系统订单号 + * @param posNo 设备终端编号 + * @return 结果 + */ + R createMerchantScanOrder(String txnAmt, String merTradeNo, String posNo); + + /** + * 消费订单查询 + * + * @param merTradeNo 商户系统订单号 + * @param tradeNo 原交易订单号 + * @param posNo 设备终端编号 + * @return 结果 + */ + R queryPaymentOrder(String merTradeNo, String tradeNo, String posNo); + + /** + * 关闭订单 + * + * @param merTradeNo 商户系统订单号 + * @param tradeNo 原交易订单号 + * @param posNo 设备终端编号 + * @return 结果 + */ + R closeOrder(String merTradeNo, String tradeNo, String posNo); + + /** + * 申请退货 + * + * @param txnAmt 交易金额 + * @param vfTradeNo 退款退订定金单号 + * @param merTradeNo 商户系统订单号 + * @param tradeNo 原交易订单号 + * @param posNo 设备终端编号 + * @return 结果 + */ + R applyForRefund(String txnAmt, String vfTradeNo, String merTradeNo, String tradeNo, String posNo); + + /** + * 查询退货订单 + * + * @param vfTradeNo 退款退订定金单号 + * @param posNo 设备终端编号 + * @return 结果 + */ + R queryRefundOrder(String vfTradeNo, String posNo); + + /** + * 消费撤销 + * + * @param txnAmt 交易金额 + * @param vfTradeNo 退款退订定金单号 + * @param merTradeNo 商户系统订单号 + * @param tradeNo 原交易订单号 + * @param posNo 设备终端编号 + * @return 结果 + */ + R reversePayment(String txnAmt, String vfTradeNo, String merTradeNo, String tradeNo, String posNo); + + /** + * 查询撤销订单 + * + * @param merTradeNo 商户系统订单号 + * @param posNo 设备终端编号 + * @return 结果 + */ + R queryReversalOrder(String merTradeNo, String posNo); + + /** + * 银行卡退货功能 + * + * @param txnAmt 交易金额 + * @param pan 银行卡号 + * @param vfTradeNo 退款退订定金单号 + * @param posNo 设备终端编号 + * @return 结果 + */ + R processCardRefund(String txnAmt, String pan, String vfTradeNo, String posNo); + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/IFoodborneAcquisitionAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/IFoodborneAcquisitionAppService.java index fc15f5ef..e428537e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/IFoodborneAcquisitionAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/IFoodborneAcquisitionAppService.java @@ -5,7 +5,7 @@ import com.core.common.core.domain.R; /** * 食源性疾病病例数据智能采集Service接口 * - * @author GuoRui + * @author Thanking * @date 2025-10-10 */ public interface IFoodborneAcquisitionAppService { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/impl/BankPosCloudAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/impl/BankPosCloudAppServiceImpl.java index af70afcf..d9cc456d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/impl/BankPosCloudAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/impl/BankPosCloudAppServiceImpl.java @@ -20,7 +20,7 @@ import lombok.extern.slf4j.Slf4j; /** * BPC商户接口Service业务层处理 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ @Slf4j @@ -36,6 +36,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R processConsumerScan(String txnAmt, String merTradeNo, String scanCode, String posNo) { // 参数验证 if (StringUtils.isEmpty(txnAmt)) { @@ -75,6 +76,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R createMerchantScanOrder(String txnAmt, String merTradeNo, String posNo) { // 参数验证 if (StringUtils.isEmpty(txnAmt)) { @@ -109,6 +111,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R queryPaymentOrder(String merTradeNo, String tradeNo, String posNo) { // 参数验证 if (StringUtils.isEmpty(merTradeNo)) { @@ -143,6 +146,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R closeOrder(String merTradeNo, String tradeNo, String posNo) { // 参数验证 if (StringUtils.isEmpty(merTradeNo)) { @@ -179,6 +183,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R applyForRefund(String txnAmt, String vfTradeNo, String merTradeNo, String tradeNo, String posNo) { // 参数验证 if (StringUtils.isEmpty(txnAmt)) { @@ -223,6 +228,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R queryRefundOrder(String vfTradeNo, String posNo) { // 参数验证 if (StringUtils.isEmpty(vfTradeNo)) { @@ -254,6 +260,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R reversePayment(String txnAmt, String vfTradeNo, String merTradeNo, String tradeNo, String posNo) { // 参数验证 if (StringUtils.isEmpty(txnAmt)) { @@ -298,6 +305,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R queryReversalOrder(String merTradeNo, String posNo) { // 参数验证 if (StringUtils.isEmpty(merTradeNo)) { @@ -328,6 +336,7 @@ public class BankPosCloudAppServiceImpl implements IBankPosCloudAppService { * @param posNo 设备终端编号 * @return 结果 */ + @Override public R processCardRefund(String txnAmt, String pan, String vfTradeNo, String posNo) { // 参数验证 if (StringUtils.isEmpty(txnAmt)) { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/impl/FoodborneAcquisitionAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/impl/FoodborneAcquisitionAppServiceImpl.java index af560706..f87507ab 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/impl/FoodborneAcquisitionAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/appservice/impl/FoodborneAcquisitionAppServiceImpl.java @@ -33,7 +33,7 @@ import lombok.extern.slf4j.Slf4j; /** * 食源性疾病病例数据智能采集Service业务层处理 * - * @author GuoRui + * @author Thanking * @date 2025-10-10 */ @Slf4j @@ -74,7 +74,7 @@ public class FoodborneAcquisitionAppServiceImpl implements IFoodborneAcquisition // 定义诊断列表参数 List diagnosisNameList = new ArrayList<>(); - // TODO:郭睿 等待从doc_statistics表取主诉诊断 + // TODO: 等待从doc_statistics表取主诉诊断 // 查询就诊诊断内容列表 List encounterDiagnosisConditionNameList = diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/controller/FoodborneAcquisitionAppController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/controller/FoodborneAcquisitionAppController.java index 3d4bd70c..6a2169e1 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/controller/FoodborneAcquisitionAppController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/controller/FoodborneAcquisitionAppController.java @@ -12,7 +12,7 @@ import com.openhis.web.externalintegration.appservice.IFoodborneAcquisitionAppSe /** * 食源性疾病病例数据智能采集Controller * - * @author GuoRui + * @author Thanking * @date 2025-10-10 */ @RestController diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcDataElementDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcDataElementDto.java index 4e1fab55..ccc89d2e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcDataElementDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcDataElementDto.java @@ -9,7 +9,7 @@ import lombok.Data; /** * 【BPC】数据元 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ @Data diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcPaymentScanNotifyDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcPaymentScanNotifyDto.java index a516fb57..dae6eec3 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcPaymentScanNotifyDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcPaymentScanNotifyDto.java @@ -9,7 +9,7 @@ import lombok.Data; /** * 【BPC】主扫支付结果通知 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ @Data diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcTransactionRequestDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcTransactionRequestDto.java index a59fe041..bd0334be 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcTransactionRequestDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcTransactionRequestDto.java @@ -10,7 +10,7 @@ import lombok.experimental.Accessors; /** * 【BPC】交易请求 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ @Data diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcTransactionResponseDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcTransactionResponseDto.java index 2b35902b..a779ce69 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcTransactionResponseDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/BpcTransactionResponseDto.java @@ -9,7 +9,7 @@ import lombok.Data; /** * 【BPC】交易回应 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ @Data diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/FaSimplediseaseAddNopwParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/FaSimplediseaseAddNopwParam.java index c7e99d4f..6a3ef9a7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/FaSimplediseaseAddNopwParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/dto/FaSimplediseaseAddNopwParam.java @@ -5,7 +5,7 @@ import lombok.Data; /** * 【食源性】跳转页面所需参数 * - * @author GuoRui + * @author Thanking * @date 2025-10-10 */ @Data diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcPayType.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcPayType.java index ef09f8f0..bfc9e206 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcPayType.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcPayType.java @@ -3,7 +3,7 @@ package com.openhis.web.externalintegration.enums; /** * 【BPC】支付方式 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ public enum BpcPayType { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcPayerIdType.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcPayerIdType.java index 85246531..ef791b12 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcPayerIdType.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcPayerIdType.java @@ -3,7 +3,7 @@ package com.openhis.web.externalintegration.enums; /** * 【BPC】付款人身份证件类型 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ public enum BpcPayerIdType { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcRealNameAuthFlag.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcRealNameAuthFlag.java index aa3b8b85..8e8a26d9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcRealNameAuthFlag.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcRealNameAuthFlag.java @@ -3,7 +3,7 @@ package com.openhis.web.externalintegration.enums; /** * 【BPC】实名认证标志 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ public enum BpcRealNameAuthFlag { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcRespType.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcRespType.java index 4be7f614..0e6bdbb8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcRespType.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcRespType.java @@ -3,7 +3,7 @@ package com.openhis.web.externalintegration.enums; /** * 【BPC】交易返回应答码 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ public enum BpcRespType { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcTranType.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcTranType.java index 23c2705a..f0ef1329 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcTranType.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/enums/BpcTranType.java @@ -3,7 +3,7 @@ package com.openhis.web.externalintegration.enums; /** * 【BPC】交易类型 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ public enum BpcTranType { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/mapper/FoodborneAcquisitionAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/mapper/FoodborneAcquisitionAppMapper.java index 290e206e..3d646f61 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/mapper/FoodborneAcquisitionAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/mapper/FoodborneAcquisitionAppMapper.java @@ -10,7 +10,7 @@ import com.openhis.web.externalintegration.dto.FaSimplediseaseAddNopwParam; /** * 食源性疾病病例数据智能采集Mapper * - * @author GuoRui + * @author Thanking * @date 2025-10-10 */ @Repository diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/utils/BpcHttpUtil.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/utils/BpcHttpUtil.java index c03ced6d..3f37415d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/utils/BpcHttpUtil.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/utils/BpcHttpUtil.java @@ -22,7 +22,7 @@ import lombok.extern.slf4j.Slf4j; /** * 【BPC】HTTP请求共通方法 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ @Slf4j diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/utils/BpcTraceNoGenerator.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/utils/BpcTraceNoGenerator.java index ef3462f1..ff764211 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/utils/BpcTraceNoGenerator.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/externalintegration/utils/BpcTraceNoGenerator.java @@ -5,7 +5,7 @@ import java.util.concurrent.atomic.AtomicInteger; /** * 【BPC】终端流水号生成器 * - * @author GuoRui + * @author Thanking * @date 2025-10-16 */ public class BpcTraceNoGenerator { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/appservice/impl/InHospitalRegisterAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/appservice/impl/InHospitalRegisterAppServiceImpl.java index c6070867..7cc2b908 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/appservice/impl/InHospitalRegisterAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/appservice/impl/InHospitalRegisterAppServiceImpl.java @@ -33,6 +33,7 @@ import com.openhis.web.inhospitalcharge.dto.*; import com.openhis.web.inhospitalcharge.mapper.InHospitalRegisterAppMapper; import com.openhis.web.patientmanage.appservice.IPatientInformationService; import com.openhis.web.patientmanage.dto.PatientInformationDto; +import com.openhis.yb.service.YbManager; import lombok.extern.slf4j.Slf4j; @@ -79,6 +80,9 @@ public class InHospitalRegisterAppServiceImpl implements IInHospitalRegisterAppS @Resource IPatientService iPatientService; + @Resource + private YbManager ybManager; + /** * 门诊医生开住院申请 * @@ -96,7 +100,7 @@ public class InHospitalRegisterAppServiceImpl implements IInHospitalRegisterAppS // 获取执行科室 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Encounter::getAmbEncounterId, ambEncounterId); - if (iEncounterService.list(queryWrapper).size() > 0) { + if (!iEncounterService.list(queryWrapper).isEmpty()) { return R.fail(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00008, null)); } @@ -447,7 +451,8 @@ public class InHospitalRegisterAppServiceImpl implements IInHospitalRegisterAppS zYEncounterDiagnosis.setIptDiseTypeCode(YbIptDiseTypeCode.ADMISSION_DIAGNOSIS.getValue()); // 住院患者疾病诊断类型代码 iEncounterDiagnosisService.save(zYEncounterDiagnosis); } - + // 调用医保入院办理 + ybManager.hospitalAdmission(); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/mapper/AdvancePaymentManageAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/mapper/AdvancePaymentManageAppMapper.java index 83adb7ed..5a02b65b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/mapper/AdvancePaymentManageAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalcharge/mapper/AdvancePaymentManageAppMapper.java @@ -25,7 +25,7 @@ public interface AdvancePaymentManageAppMapper { * @param wardEnum 病区 * @param houseEnum 病房 * @param bedEnum 床位 - * @param encounterLocationStatus 使用状态 + * @param encounterActivityStatus 使用状态 * @param status1 待结算 * @param status2 已收费 * @param status3 已退费 @@ -35,7 +35,7 @@ public interface AdvancePaymentManageAppMapper { */ IPage getAdvancePaymentInfo(@Param("page") Page page, @Param("kindEnum") Integer kindEnum, @Param("wardEnum") Integer wardEnum, @Param("houseEnum") Integer houseEnum, - @Param("bedEnum") Integer bedEnum, @Param("encounterLocationStatus") Integer encounterLocationStatus, + @Param("bedEnum") Integer bedEnum, @Param("encounterActivityStatus") Integer encounterActivityStatus, @Param("status1") Integer status1, @Param("status2") Integer status2, @Param("status3") Integer status3, @Param("classEnum") Integer classEnum, @Param("accountTypeCode") String accountTypeCode, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IATDManageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IATDManageAppService.java index 06e9c808..a353f97c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IATDManageAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IATDManageAppService.java @@ -17,6 +17,13 @@ import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientInfoDto; */ public interface IATDManageAppService { + /** + * 入出转管理页面初始化 + * + * @return 初始化信息 + */ + R atdManageInit(); + /** * 入院患者分页列表 * @@ -49,11 +56,12 @@ public interface IATDManageAppService { R getAdmissionPatientInfo(Long encounterId); /** - * 入出转管理页面初始化 + * 住院患者待处理信息列表 * - * @return 初始化信息 + * @param encounterId 住院id + * @return 待处理信息列表 */ - R atdManageInit(); + R getInPatientPendingList(Long encounterId); /** * 入科床位分配 @@ -62,4 +70,20 @@ public interface IATDManageAppService { * @return 结果 */ R admissionBedAssignment(AdmissionPatientInfoDto admissionPatientInfoDto); + + /** + * 转科 + * + * @param encounterId 住院id + * @return 结果 + */ + R transferDepartment(Long encounterId); + + /** + * 出院 + * + * @param encounterId 住院id + * @return 结果 + */ + R hospitalDischarge(Long encounterId); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IMedicineSummaryAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IMedicineSummaryAppService.java index 6d581d5c..1ff28a3e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IMedicineSummaryAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IMedicineSummaryAppService.java @@ -5,8 +5,8 @@ import java.util.List; import javax.servlet.http.HttpServletRequest; import com.core.common.core.domain.R; -import com.openhis.web.inhospitalnursestation.dto.InpatientMedicinePrescriptionInfoDto; -import com.openhis.web.inhospitalnursestation.dto.InpatientMedicineSearchParam; +import com.openhis.web.inhospitalnursestation.dto.DispenseFormSearchParam; +import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryParam; /** * 住院领药 应用实现接口 @@ -17,48 +17,45 @@ import com.openhis.web.inhospitalnursestation.dto.InpatientMedicineSearchParam; public interface IMedicineSummaryAppService { /** - * 分页查询在科病人列表 + * 查询发药单信息 * - * @param searchParam 查询条件 - * @param searchKey 模糊查询关键字 + * @param dispenseFormSearchParam 查询条件 * @param pageNo 当前页码 * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 + * @param request 请求 + * @return 发药单信息 */ - R getEncounterInfoListPage(InpatientMedicineSearchParam searchParam, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request); + R getMedicineDispenseFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo, Integer pageSize, + HttpServletRequest request); /** - * 查询医嘱列表 + * 查询药品汇总单 * - * @param searchParam 查询条件 - * @param searchKey 模糊查询关键字 + * @param dispenseFormSearchParam 查询条件 * @param pageNo 当前页码 * @param pageSize 查询条数 - * @param request 请求数据 - * @return 处方单列表 + * @param searchKey 模糊查询关键字 + * @param request 请求 + * @return 药品汇总单 */ - R getPrescriptionInfo(InpatientMedicineSearchParam searchParam, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request); + R getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); /** - * 显示汇总发药单(生成之前的确认,此刻还没生成汇总单) + * 查询药品汇总单详情 * - * @param searchParam 查询条件 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处理结果 + * @param summaryNo 汇总单号 + * @return 药品汇总单详情 */ - R showMedicineSummary(List searchParam, Integer pageNo, Integer pageSize); + R getMedicineSummaryFormDetail(String summaryNo); /** * 生成汇总发药单 * - * @param prescriptionInfo 汇总发药单 + * @param medicineSummaryParamList 汇总发申请参数 * @return 处理结果 */ - R medicineSummary(List prescriptionInfo); + R medicineSummary(List medicineSummaryParamList); /** * 校验库存 @@ -68,4 +65,12 @@ public interface IMedicineSummaryAppService { * @return 处理结果 */ R checkInventoryItem(List devDispenseId, List medDispenseId); + + /** + * 取消汇总 + * + * @param summaryNo 汇总单号 + * @return 处理结果 + */ + R cancelSummary(String summaryNo); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/INurseBillingAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/INurseBillingAppService.java new file mode 100644 index 00000000..891d2dec --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/INurseBillingAppService.java @@ -0,0 +1,39 @@ +package com.openhis.web.inhospitalnursestation.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.regdoctorstation.dto.RegAdviceSaveParam; + +public interface INurseBillingAppService { + /* + * 住院护士 划价添加 + * @return + */ + public R addInNurseBilling(RegAdviceSaveParam regAdviceSaveParam); + /* + * 住院护士 划价列表 根据护士encounterId查询 + * @return + */ + public R getBillingListByEncounterId(); + /* + * 住院护士撤销划价 + * @return + */ + public R deleteInNurseBilling(); + /* + * 医嘱计费添加 诊疗 耗材 + */ + public R addOrderBilling(); + /* + * 医嘱计费删除 诊疗 耗材 + */ + public R deleteOrderBilling(); + /* + * 医嘱计费修改 诊疗 耗材 + */ + public R updateOrderBilling(); + /* + 根据医嘱id查询已计费的 耗材列表 + * @return + */ + public R getOrderBillingByRequestId(); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IOrgDeviceStockTakeAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IOrgDeviceStockTakeAppService.java new file mode 100644 index 00000000..075bbdd2 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/IOrgDeviceStockTakeAppService.java @@ -0,0 +1,40 @@ +package com.openhis.web.inhospitalnursestation.appservice; + +import com.core.common.core.domain.R; +import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryParam; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.servlet.http.HttpServletRequest; + +/** + * 科室耗材盘点 应用实现接口 + * + * @author wuyan + * @date 2025/11/05 + */ +public interface IOrgDeviceStockTakeAppService { + + /** + * 查询科室耗材汇总 + * + * @param orgDeviceSummaryParam 查询条件 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求 + * @return 科室耗材汇总单 + */ + R getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, String startTime, String endTime, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey, + HttpServletRequest request); + + /** + * 科室耗材汇总 + * + * @return 科室耗材汇总单 + */ + R orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java index 2681baaf..ae052730 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/ATDManageAppServiceImpl.java @@ -182,6 +182,22 @@ public class ATDManageAppServiceImpl implements IATDManageAppService { return R.ok(admissionPatientInfoDto); } + /** + * 住院患者待处理信息列表 + * + * @param encounterId 住院id + * @return 待处理信息列表 + */ + @Override + public R getInPatientPendingList(Long encounterId) { +// List inPatientPendingList = +// atdManageAppMapper.selectInPatientPendingList(encounterId, EncounterActivityStatus.ACTIVE.getValue(), +// LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue(), +// ParticipantType.PRIMARY_NURSE.getCode(), ParticipantType.ATTENDING_DOCTOR.getCode(), +// ParticipantType.ADMITTING_DOCTOR.getCode()); + return null; + } + /** * 入科床位分配 * @@ -329,4 +345,26 @@ public class ATDManageAppServiceImpl implements IATDManageAppService { } return R.ok("床位分配成功"); } + + /** + * 转科 + * + * @param encounterId 住院id + * @return 结果 + */ + @Override + public R transferDepartment(Long encounterId) { + return null; + } + + /** + * 出院 + * + * @param encounterId 住院id + * @return 结果 + */ + @Override + public R hospitalDischarge(Long encounterId) { + return null; + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java index f692f8e7..a3de5ab4 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java @@ -21,9 +21,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; -import com.core.common.utils.AgeCalculatorUtil; -import com.core.common.utils.MessageUtils; -import com.core.common.utils.SecurityUtils; +import com.core.common.exception.ServiceException; +import com.core.common.utils.*; import com.core.common.utils.bean.BeanUtils; import com.openhis.administration.domain.ChargeItem; import com.openhis.administration.service.IChargeItemService; @@ -44,17 +43,20 @@ import com.openhis.medication.service.IMedicationRequestService; import com.openhis.web.common.dto.PerformInfoDto; import com.openhis.web.common.dto.PerformRecordDto; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; +import com.openhis.web.doctorstation.dto.ActivityBindDeviceDetailDto; import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdviceInventoryDto; import com.openhis.web.doctorstation.dto.AdvicePriceDto; +import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper; import com.openhis.web.doctorstation.utils.AdviceUtils; import com.openhis.web.inhospitalnursestation.appservice.IAdviceProcessAppService; import com.openhis.web.inhospitalnursestation.dto.*; import com.openhis.web.inhospitalnursestation.mapper.AdviceProcessAppMapper; import com.openhis.web.outpatientmanage.mapper.OutpatientTreatmentAppMapper; import com.openhis.workflow.domain.DeviceDispense; +import com.openhis.workflow.domain.DeviceRequest; import com.openhis.workflow.domain.ServiceRequest; -import com.openhis.workflow.service.IDeviceDispenseService; -import com.openhis.workflow.service.IServiceRequestService; +import com.openhis.workflow.service.*; /** * 护士站医嘱处理实现类 @@ -65,9 +67,15 @@ import com.openhis.workflow.service.IServiceRequestService; @Service public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { + @Resource + AssignSeqUtil assignSeqUtil; + @Resource private AdviceProcessAppMapper adviceProcessAppMapper; + @Resource + private DoctorStationAdviceAppMapper doctorStationAdviceAppMapper; + @Resource private IProcedureService procedureService; @@ -86,6 +94,9 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { @Resource private IDeviceDispenseService deviceDispenseService; + @Resource + private IDeviceRequestService deviceRequestService; + @Resource private IEncounterService encounterService; @@ -99,7 +110,13 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { private AdviceUtils adviceUtils; @Resource - private IDoctorStationAdviceAppService iDoctorStationAdviceAppService; + private IDoctorStationAdviceAppService doctorStationAdviceAppService; + + @Resource + private ISupplyRequestService supplyRequestService; + + @Resource + private ISupplyDeliveryService supplyDeliveryService; /** * 住院患者分页列表 @@ -156,10 +173,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { Integer exeStatus = inpatientAdviceParam.getExeStatus(); inpatientAdviceParam.setExeStatus(null); // 构建查询条件 - QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientWbStr, CommonConstants.FieldName.PatientPyStr, - CommonConstants.FieldName.PatientName, CommonConstants.FieldName.BusNo)), - null); + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null); // 手动拼接住院患者id条件 if (encounterIds != null && !encounterIds.isEmpty()) { @@ -167,7 +182,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList(); queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList); } - // 入院患者分页列表 + // 患者医嘱分页列表 Page inpatientAdvicePage = adviceProcessAppMapper.selectInpatientAdvicePage(new Page<>(pageNo, pageSize), queryWrapper, CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_SERVICE_REQUEST, @@ -408,39 +423,41 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { .filter(x -> x.getTherapyEnum().equals(TherapyTimeType.TEMPORARY.getValue())) .map(AdviceExecuteDetailParam::getProcedureId).distinct().toList(); + // 合并长期和临时的执行记录 + List procedureIdList = new ArrayList<>(longProcIdList); + procedureIdList.addAll(tempProcIdList); + // 查询执行记录 + List procedureList = procedureService.listByIds(procedureIdList); + Map procedureIdMap = new HashMap<>(); + if (procedureList != null && !procedureList.isEmpty()) { + for (Procedure procedure : procedureList) { + // 根据执行记录新增取消执行记录 + Long newProcedureId = procedureService.addProcedureRecord(procedure.getEncounterId(), + procedure.getPatientId(), procedure.getRequestId(), procedure.getRequestTable(), EventStatus.CANCEL, + ProcedureCategory.INPATIENT_ADVICE, null, procedure.getOccurrenceTime(), procedure.getGroupId(), + procedure.getId()); + // 将旧的执行Id和新的执行Id存入map + procedureIdMap.put(procedure.getId(), newProcedureId); + } + } // 分别处理长期和临时的医嘱 // 长期已发放药品 List longMedDispensedList = new ArrayList<>(); // 长期未发放药品 List longMedUndispenseList = new ArrayList<>(); - // 长期已发放耗材 - List longDevDispensedList = new ArrayList<>(); - // 长期未发放耗材 - List longDevUndispenseList = new ArrayList<>(); // 处理长期医嘱 if (!longProcIdList.isEmpty()) { // 长期药品 List longMedDispenseList = medicationDispenseService.getMedDispenseByProcedureId(longProcIdList); - // 长期耗材 - List longDevDispenseList = - deviceDispenseService.getDevDispenseByProcedureId(longProcIdList); // 分离已发药发药单和未发药发药单 for (MedicationDispense medicationDispense : longMedDispenseList) { - if (DispenseStatus.COMPLETED.getValue().equals(medicationDispense.getDispenseEnum())) { + if (DispenseStatus.COMPLETED.getValue().equals(medicationDispense.getStatusEnum())) { longMedDispensedList.add(medicationDispense); - } else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getDispenseEnum())) { + } else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())) { longMedUndispenseList.add(medicationDispense); } } - // 分离已发耗材单和未发耗材单 - for (DeviceDispense deviceDispense : longDevDispenseList) { - if (DispenseStatus.COMPLETED.getValue().equals(deviceDispense.getStatusEnum())) { - longDevDispensedList.add(deviceDispense); - } else if (DispenseStatus.PREPARATION.getValue().equals(deviceDispense.getStatusEnum())) { - longDevUndispenseList.add(deviceDispense); - } - } // 查询账单 List chargeItemList = chargeItemService.getChargeItemByProcedureId(longProcIdList); if (chargeItemList != null && !chargeItemList.isEmpty()) { @@ -455,34 +472,19 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { List tempMedDispensedList = new ArrayList<>(); // 临时未发放药品 List tempMedUndispenseList = new ArrayList<>(); - // 临时已发放耗材 - List tempDevDispensedList = new ArrayList<>(); - // 临时未发放耗材 - List tempDevUndispenseList = new ArrayList<>(); // 处理临时医嘱 if (!tempProcIdList.isEmpty()) { - // 长期药品 + // 临时药品 List tempMedDispenseList = medicationDispenseService.getMedDispenseByProcedureId(tempProcIdList); - // 长期耗材 - List tempDevDispenseList = - deviceDispenseService.getDevDispenseByProcedureId(tempProcIdList); // 分离已发药发药单和未发药发药单 for (MedicationDispense medicationDispense : tempMedDispenseList) { - if (DispenseStatus.COMPLETED.getValue().equals(medicationDispense.getDispenseEnum())) { + if (DispenseStatus.COMPLETED.getValue().equals(medicationDispense.getStatusEnum())) { tempMedDispensedList.add(medicationDispense); - } else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getDispenseEnum())) { + } else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())) { tempMedUndispenseList.add(medicationDispense); } } - // 分离已发耗材单和未发耗材单 - for (DeviceDispense deviceDispense : tempDevDispenseList) { - if (DispenseStatus.COMPLETED.getValue().equals(deviceDispense.getStatusEnum())) { - tempDevDispensedList.add(deviceDispense); - } else if (DispenseStatus.PREPARATION.getValue().equals(deviceDispense.getStatusEnum())) { - tempDevUndispenseList.add(deviceDispense); - } - } // 查询账单 List chargeItemList = chargeItemService.getChargeItemByProcedureId(tempProcIdList); if (chargeItemList != null && !chargeItemList.isEmpty()) { @@ -491,27 +493,152 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { .updatePlannedChargeStatus(chargeItemList.stream().map(ChargeItem::getProcedureId).toList()); } } - // 统一处理已发放药品或耗材 - List medDispensedList = new ArrayList<>(tempMedDispensedList); - medDispensedList.addAll(longMedDispensedList); - // 统一处理已发放药品或耗材 - List devDispensedList = new ArrayList<>(tempDevDispensedList); - devDispensedList.addAll(longDevDispensedList); - // 合并长期和临时的执行记录 - List procedureIdList = new ArrayList<>(longProcIdList); - procedureIdList.addAll(tempProcIdList); - // 查询执行记录 - List procedureList = procedureService.listByIds(procedureIdList); - if (procedureList != null && !procedureList.isEmpty()) { - for (Procedure procedure : procedureList) { - // 根据执行记录新增取消执行记录 - procedureService.addProcedureRecord(procedure.getEncounterId(), procedure.getPatientId(), - procedure.getRequestId(), procedure.getRequestTable(), EventStatus.CANCEL, - ProcedureCategory.INPATIENT_ADVICE, null, procedure.getOccurrenceTime(), procedure.getGroupId(), - procedure.getId()); + // 处理长期已发放的药品 + if (!longMedDispensedList.isEmpty()) { + // 生成退药单 + this.creatRefundMedicationList(tempMedDispensedList, procedureIdMap); + } + // 处理临时已发放药品 + if (!tempMedDispensedList.isEmpty()) { + // 生成退药单 + this.creatRefundMedicationList(tempMedDispensedList, procedureIdMap); + // 药品退药请求状态变更(待退药) + medicationRequestService.updateCancelledStatusBatch( + tempMedDispensedList.stream().map(MedicationDispense::getMedReqId).toList(), null, null); + } + // 未发放药品需先判断是否申请汇总 + List medUndispenseList = new ArrayList<>(tempMedUndispenseList); + medUndispenseList.addAll(longMedUndispenseList); + // 重新生成汇总发药单 + if (!medUndispenseList.isEmpty()) { + // 查询所有汇总单号 + List summaryNoList = + medUndispenseList.stream().filter(x -> x.getSummaryNo() != null && !x.getSummaryNo().isEmpty()) + .map(MedicationDispense::getSummaryNo).distinct().toList(); + if (!summaryNoList.isEmpty()) { + // 查询所有被汇总的药品发放 + List medSummaryList = + medicationDispenseService.getMedDispenseBySummaryNo(summaryNoList); + // 被汇总的发药单 + Map> medSummaryMap = + medSummaryList.stream().filter(x -> x.getSummaryNo() != null) + .collect(Collectors.groupingBy(MedicationDispense::getSummaryNo)); + // 被取消汇总的发药单 + Map> medSummaryCancelMap = + medUndispenseList.stream().filter(x -> x.getSummaryNo() != null) + .collect(Collectors.groupingBy(MedicationDispense::getSummaryNo)); + // 过滤掉被取消汇总的发药单,重新做成汇总单 + Map> reSummaryMap = new HashMap<>(); + // 遍历所有被汇总的发药单 + for (Map.Entry> entry : medSummaryMap.entrySet()) { + String summaryNo = entry.getKey(); + List allDispenses = entry.getValue(); + // 检查是否存在对应的取消汇总记录 + if (medSummaryCancelMap.containsKey(summaryNo)) { + // 如果存在取消记录,需要过滤掉被取消的发药单 + List cancelDispenses = medSummaryCancelMap.get(summaryNo); + // 创建被取消的发药单ID集合,便于快速查找 + Set cancelIds = + cancelDispenses.stream().map(MedicationDispense::getId).collect(Collectors.toSet()); + // 过滤出未被取消的发药单 + List remainingDispenses = allDispenses.stream() + .filter(dispense -> !cancelIds.contains(dispense.getId())).collect(Collectors.toList()); + // 只有当还有剩余的发药单时才加入结果 + if (!remainingDispenses.isEmpty()) { + reSummaryMap.put(summaryNo, remainingDispenses); + } + } + } + if (!reSummaryMap.isEmpty()) { + for (Map.Entry> entry : reSummaryMap.entrySet()) { + List medicationDispenses = entry.getValue(); + // 查询药品信息 + List medicationDefinitions = medicationDefinitionService + .listByIds(medicationDispenses.stream().map(MedicationDispense::getMedicationId).toList()); + // 汇总单据号 + String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICINE_SUMMARY_NO.getPrefix(), 4); + // 根据相同批号的同一药品进行汇总 + Map> medicationSummaryInfoMap = + medicationDispenses.stream().collect(Collectors + .groupingBy(x -> x.getMedicationId() + CommonConstants.Common.DASH + x.getLotNumber())); + for (Map.Entry> medicationSummaryInfoList : medicationSummaryInfoMap.entrySet()) { + List medicationSummaryList = medicationSummaryInfoList.getValue(); + MedicationDispense medicationDispense = medicationSummaryList.get(0); + Long medicationId = medicationDispense.getMedicationId(); + Long locationId = medicationDispense.getLocationId(); + String lotNumber = medicationDispense.getLotNumber(); + Long patientId = medicationDispense.getPatientId(); + // 拆零比例 + BigDecimal partPercent = BigDecimal.ONE; + // 最小单位 + String minUnitCode = null; + // 单位 + String unitCode = null; + // 根据药品id获取对应的药品信息 + Optional medicationDefinition = + medicationDefinitions.stream().filter(x -> x.getId().equals(medicationId)).findFirst(); + if (medicationDefinition.isPresent()) { + partPercent = medicationDefinition.get().getPartPercent(); + minUnitCode = medicationDefinition.get().getMinUnitCode(); + unitCode = medicationDefinition.get().getUnitCode(); + } + if (minUnitCode == null || unitCode == null || partPercent == null) { + throw new ServiceException("药品信息有误,请联系管理员"); + } + // 最小单位数量 + BigDecimal minQuantity = BigDecimal.ZERO; + for (MedicationDispense medicationSummaryInfo : medicationSummaryList) { + BigDecimal quantity = medicationSummaryInfo.getQuantity(); + if (unitCode.equals(medicationDispense.getUnitCode())) { + // 转换为小单位进行累加 + quantity = medicationSummaryInfo.getQuantity().multiply(partPercent); + } + minQuantity = minQuantity.add(quantity); + } + Long supplyRequestId = supplyRequestService.createSummarySupplyRequest(medicationId, + locationId, lotNumber, patientId, minQuantity, minUnitCode, null, null, busNo); + supplyDeliveryService.createSummarySupplyDelivery(medicationId, lotNumber, patientId, + minQuantity, minUnitCode, null, supplyRequestId); + } + } + // 删除原汇总单 + List delSummaryNoList = reSummaryMap.keySet().stream().toList(); + // 取消汇总申请(软删除) + List requestIdList = supplyRequestService.cancelSummarySupplyRequest(delSummaryNoList); + // 软删除汇总发放 + supplyDeliveryService.deleteSupplyDeliveryByReqId(requestIdList); + // 取消药品汇总 + medicationDispenseService.cancelMedicationSummary(delSummaryNoList); + } } } - return R.ok("取消执行成功"); + // 处理临时未发放的药品 + if (!tempMedUndispenseList.isEmpty()) { + // 排除已汇总的药品 + List medicationDispenseList = + tempMedUndispenseList.stream().filter(x -> x.getSummaryNo() == null).toList(); + // 更新状态为草稿 + medicationDispenseService.updateDispenseStatus( + medicationDispenseList.stream().map(MedicationDispense::getId).toList(), + DispenseStatus.DRAFT.getValue()); + } + // 处理长期未发的药品 + if (!longMedUndispenseList.isEmpty()) { + // 排除已汇总的药品 + List medicationDispenseList = + tempMedUndispenseList.stream().filter(x -> x.getSummaryNo() == null).toList(); + medicationDispenseService + .removeByIds(medicationDispenseList.stream().map(MedicationDispense::getId).toList()); + } + // 根据执行记录查询生成的耗材发放单 + List deviceDispenseList = deviceDispenseService.getDevDispenseByProcedureId(procedureIdList); + if (deviceDispenseList != null && !deviceDispenseList.isEmpty()) { + // 软删除对应的耗材申请,耗材发放 + deviceDispenseService.removeByIds(deviceDispenseList.stream().map(DeviceDispense::getId).toList()); + deviceRequestService.removeByIds(deviceDispenseList.stream().map(DeviceDispense::getDeviceReqId).toList()); + } + return R.ok("取消执行成功,相关汇总领药单已重新生成"); } /** @@ -522,11 +649,29 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { */ @Override public R adviceVoid(AdviceExecuteParam adviceExecuteParam) { - // 长期临时都可以不执行,长期不执行的是某一时间点,也可以不执行这一整个医嘱(更新serviceRequest状态为7) - // 已执行的时间点不能不执行,需要先取消 - // 增加不执行记录 - // 不执行的医嘱还可以再执行(暂时不做限制) - return null; + List adviceExecuteDetailList = adviceExecuteParam.getAdviceExecuteDetailList(); + + // 判断是否有空的pID + for (AdviceExecuteDetailParam adviceExecuteDetailParam : adviceExecuteDetailList) + if (adviceExecuteDetailParam.getProcedureId() != null) + return R.fail("执行失败"); + + for (AdviceExecuteDetailParam adviceExecuteDetailParam : adviceExecuteDetailList) { + for (String executeTime : adviceExecuteDetailParam.getExecuteTimes()) { + // 生成执行记录 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + // 转换为 LocalDateTime + LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter); + // 转换为 Date + Date exeDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + // 根据执行记录新增不执行记录 + procedureService.addProcedureRecord(adviceExecuteDetailParam.getEncounterId(), + adviceExecuteDetailParam.getPatientId(), adviceExecuteDetailParam.getRequestId(), + adviceExecuteDetailParam.getAdviceTable(), EventStatus.STOPPED, ProcedureCategory.INPATIENT_ADVICE, + null, exeDate, adviceExecuteDetailParam.getGroupId(), null); + } + } + return R.ok("不执行成功"); } /** @@ -537,15 +682,15 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { private void exeMedication(List medUseExeList) { // 长期医嘱 List longMedication = medUseExeList.stream() - .filter(e -> TherapyTimeType.LONG_TERM.getValue().equals(e.getTherapyEnum())).collect(Collectors.toList()); + .filter(e -> TherapyTimeType.LONG_TERM.getValue().equals(e.getTherapyEnum())).toList(); // 临时医嘱 List tempMedication = medUseExeList.stream() - .filter(e -> TherapyTimeType.TEMPORARY.getValue().equals(e.getTherapyEnum())).collect(Collectors.toList()); + .filter(e -> TherapyTimeType.TEMPORARY.getValue().equals(e.getTherapyEnum())).toList(); // 药品定义id集合 List medicationDefinitionIdList = medUseExeList.stream().map(MedicationRequestUseExe::getMedicationId).collect(Collectors.toList()); // 医嘱详细信息 - List medicationInfos = iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, + List medicationInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, medicationDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(1)).getRecords(); // 当前时间 @@ -576,12 +721,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { ProcedureCategory.INPATIENT_ADVICE, null, exeDate, longMedicationRequest.getGroupId(), null); // 生成药品发放 - medicationDispenseService.generateMedicationDispense(longMedicationRequest, procedureId); + Long dispenseId = + medicationDispenseService.generateMedicationDispense(longMedicationRequest, procedureId, exeDate); // 生成账单 chargeItem = new ChargeItem(); chargeItem.setStatusEnum(ChargeItemStatus.BILLABLE.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(longMedicationRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.ORDER_EXECUTE.getValue()); // 生成来源 chargeItem.setPrescriptionNo(longMedicationRequest.getPrescriptionNo()); // 处方号 chargeItem.setPatientId(longMedicationRequest.getPatientId()); // 患者 chargeItem.setContextEnum(ChargeItemContext.MEDICATION.getValue()); // 类型 @@ -596,7 +743,10 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { chargeItem.setAccountId(medicationRequestUseExe.getAccountId());// 关联账户ID chargeItem.setConditionId(longMedicationRequest.getConditionId()); // 诊断id chargeItem.setEncounterDiagnosisId(longMedicationRequest.getEncounterDiagnosisId()); // 就诊诊断id - chargeItem.setProcedureId(procedureId); + chargeItem.setProcedureId(procedureId); // 执行id + chargeItem.setDispenseTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE); // 发放表名 + // chargeItem.setDispenseId(dispenseId); // 发放ID + // ------------------------------ 匹配定价信息 // 根据 medicationId 查找对应的医嘱信息 MedicationRequest finalLongMedicationRequest = longMedicationRequest; @@ -604,7 +754,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { .filter( advice -> finalLongMedicationRequest.getMedicationId().equals(advice.getAdviceDefinitionId())) .findFirst(); - if (!matchedAdvice.isPresent()) { + if (matchedAdvice.isEmpty()) { throw new RuntimeException( "未找到对应的医嘱信息,medicationId: " + finalLongMedicationRequest.getMedicationId()); } @@ -616,18 +766,18 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { Optional matchedPrice = advice.getPriceList().stream() .filter(price -> finalLongMedicationRequest.getLotNumber().equals(price.getConditionValue())) .findFirst(); - if (!matchedPrice.isPresent()) { + if (matchedPrice.isEmpty()) { throw new RuntimeException("未找到匹配的定价信息,lotNumber: " + finalLongMedicationRequest.getLotNumber()); } AdvicePriceDto priceDto = matchedPrice.get(); // 计算价格 BigDecimal price; if (finalLongMedicationRequest.getUnitCode().equals(priceDto.getUnitCode())) { - // unitCode 匹配,直接取 price + // (大单位)unitCode 匹配,直接取 price price = priceDto.getPrice(); } else { - // unitCode 不匹配,计算 price / partPercent - price = priceDto.getPrice().divide(partPercent, RoundingMode.HALF_UP); + // (小单位)unitCode 不匹配,计算 price / partPercent + price = priceDto.getPrice().divide(partPercent, 6, RoundingMode.HALF_UP); } chargeItem.setDefinitionId(priceDto.getDefinitionId()); // 费用定价ID chargeItem.setDefDetailId(priceDto.getDefinitionDetailId()); // 定价子表主键 @@ -635,7 +785,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { chargeItem.setQuantityUnit(longMedicationRequest.getUnitCode()); // 单位 chargeItem.setUnitPrice(price); // 单价 chargeItem.setTotalPrice( - longMedicationRequest.getQuantity().multiply(price).setScale(4, RoundingMode.HALF_UP)); // 总价 + longMedicationRequest.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价 chargeItemService.saveOrUpdate(chargeItem); } @@ -683,15 +833,15 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { private void exeActivity(List actUseExeList) { // 长期医嘱 List longActivity = actUseExeList.stream() - .filter(e -> TherapyTimeType.LONG_TERM.getValue().equals(e.getTherapyEnum())).collect(Collectors.toList()); + .filter(e -> TherapyTimeType.LONG_TERM.getValue().equals(e.getTherapyEnum())).toList(); // 临时医嘱 List tempActivity = actUseExeList.stream() - .filter(e -> TherapyTimeType.TEMPORARY.getValue().equals(e.getTherapyEnum())).collect(Collectors.toList()); + .filter(e -> TherapyTimeType.TEMPORARY.getValue().equals(e.getTherapyEnum())).toList(); // 诊疗定义id集合 List activityDefinitionIdList = actUseExeList.stream().map(ServiceRequestUseExe::getActivityId).collect(Collectors.toList()); // 医嘱详细信息 - List activityInfos = iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, + List activityInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, activityDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(3)).getRecords(); // 当前时间 @@ -701,10 +851,15 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); + Date clickDate = new Date(); + // 长期 ServiceRequest longServiceRequest; ChargeItem chargeItem; for (ServiceRequestUseExe serviceRequestUseExe : longActivity) { + // 查询耗材的取药科室 + Long takeDeviceLocationId = doctorStationAdviceAppMapper + .getTakeDeviceLocationId(serviceRequestUseExe.getEncounterId(), ItemCategoryCode.DEVICE.getCode()); for (String executeTime : serviceRequestUseExe.getExecuteTimes()) { longServiceRequest = new ServiceRequest(); BeanUtils.copyProperties(serviceRequestUseExe, longServiceRequest); @@ -725,6 +880,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { chargeItem = new ChargeItem(); chargeItem.setStatusEnum(ChargeItemStatus.BILLABLE.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(longServiceRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.ORDER_EXECUTE.getValue()); // 生成来源 chargeItem.setPatientId(longServiceRequest.getPatientId()); // 患者 chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型 chargeItem.setEncounterId(longServiceRequest.getEncounterId()); // 就诊id @@ -745,7 +901,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { Optional matchedAdvice = activityInfos.stream() .filter(advice -> finalLongServiceRequest.getActivityId().equals(advice.getAdviceDefinitionId())) .findFirst(); - if (!matchedAdvice.isPresent()) { + if (matchedAdvice.isEmpty()) { throw new RuntimeException("未找到对应的医嘱信息,activityId: " + finalLongServiceRequest.getActivityId()); } // 医嘱信息 @@ -760,14 +916,21 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { chargeItem.setQuantityUnit(longServiceRequest.getUnitCode()); // 单位 chargeItem.setUnitPrice(price); // 单价 chargeItem - .setTotalPrice(longServiceRequest.getQuantity().multiply(price).setScale(4, RoundingMode.HALF_UP)); // 总价 + .setTotalPrice(longServiceRequest.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价 chargeItemService.saveOrUpdate(chargeItem); + + // 处理诊疗绑定耗材 + this.handleBindDevice(longServiceRequest, procedureId, takeDeviceLocationId, curDate, practitionerId, + orgId, serviceRequestUseExe.getAccountId(), exeDate, clickDate); } } // 临时 ServiceRequest tempServiceRequest; for (ServiceRequestUseExe serviceRequestUseExe : tempActivity) { + // 查询耗材的取药科室 + Long takeDeviceLocationId = doctorStationAdviceAppMapper + .getTakeDeviceLocationId(serviceRequestUseExe.getEncounterId(), ItemCategoryCode.DEVICE.getCode()); for (String executeTime : serviceRequestUseExe.getExecuteTimes()) { tempServiceRequest = new ServiceRequest(); BeanUtils.copyProperties(serviceRequestUseExe, tempServiceRequest); @@ -789,11 +952,201 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { new LambdaUpdateWrapper().eq(ChargeItem::getServiceId, tempServiceRequest.getId()) .set(ChargeItem::getProcedureId, procedureId) .set(ChargeItem::getStatusEnum, ChargeItemStatus.BILLABLE.getValue())); + + // 处理诊疗绑定耗材 + this.handleBindDevice(tempServiceRequest, procedureId, takeDeviceLocationId, curDate, practitionerId, + orgId, serviceRequestUseExe.getAccountId(), exeDate, clickDate); } } } + /** + * 处理诊疗绑定耗材 + * + * @param serviceRequest 诊疗请求 + * @param procedureId 执行id + * @param locationId 取耗材的库房id + * @param curDate 时间 + * @param practitionerId 参与者id + * @param orgId 当前登录账号的科室id + * @param accountId 支付账号ID + * @param exeDate 执行时间(页面传的) + * @param clickDate 执行时间(实际点击时间) + */ + private void handleBindDevice(ServiceRequest serviceRequest, Long procedureId, Long locationId, Date curDate, + Long practitionerId, Long orgId, Long accountId, Date exeDate, Date clickDate) { + // 查询诊疗绑定耗材的信息 + List activityBindDevice = + doctorStationAdviceAppMapper.getActivityBindDevice(serviceRequest.getActivityId() + "", + PublicationStatus.ACTIVE.getValue(), CommonConstants.TableName.ADM_DEVICE_DEFINITION); + // 满足此条件,说明诊疗绑了耗材 + if (!activityBindDevice.isEmpty()) { + if (locationId == null) { + throw new RuntimeException("【" + serviceRequest.getBusNo() + "】诊疗请求,绑定的耗材未配置发放耗材房"); + } + // 耗材定义id集合 + List deviceIds = + activityBindDevice.stream().map(ActivityBindDeviceDetailDto::getDeviceId).collect(Collectors.toList()); + // 耗材库存集合 + List adviceInventoryList = doctorStationAdviceAppMapper.getAdviceInventory(locationId, + deviceIds, CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue()); + // 待发放个数信息 + List adviceDraftInventoryList = doctorStationAdviceAppMapper.getAdviceDraftInventory( + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, + DispenseStatus.DRAFT.getValue(), DispenseStatus.PREPARATION.getValue()); + // 预减库存 + List adviceInventory = + adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList); + + // 耗材医嘱详细信息 + List deviceInfos = doctorStationAdviceAppService + .getAdviceBaseInfo(null, null, null, deviceIds, 0L, 1, 500, Whether.NO.getValue(), List.of(2)) + .getRecords(); + + DeviceRequest deviceRequest; + BigDecimal minUnitCodeQuantity; + ChargeItem chargeItem; + for (ActivityBindDeviceDetailDto activityBindDeviceDetailDto : activityBindDevice) { + Optional matchedInventory = adviceInventory.stream() + .filter(inventoryDto -> activityBindDeviceDetailDto.getDeviceId().equals(inventoryDto.getItemId()) + && CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(inventoryDto.getItemTable()) + && locationId.equals(inventoryDto.getLocationId())) + .findFirst(); + // 匹配到库存信息,并校验 + if (matchedInventory.isPresent()) { + AdviceInventoryDto inventoryDto = matchedInventory.get(); + if (activityBindDeviceDetailDto.getMinUnitCodeQuantity() + .compareTo(inventoryDto.getQuantity()) > 0) { + throw new RuntimeException("【" + serviceRequest.getBusNo() + "】诊疗请求,绑定的耗材数量不足"); + } + } else { + throw new RuntimeException("【" + serviceRequest.getBusNo() + "】诊疗请求,绑定的耗材未匹配到库存信息"); + } + // 根据 deviceId 查找对应的医嘱信息 + Optional deviceAdvice = deviceInfos.stream() + .filter(advice -> activityBindDeviceDetailDto.getDeviceId().equals(advice.getAdviceDefinitionId())) + .findFirst(); + if (deviceAdvice.isEmpty()) { + throw new RuntimeException("未找到对应的医嘱信息,deviceId: " + activityBindDeviceDetailDto.getDeviceId()); + } + AdviceBaseDto advice = deviceAdvice.get(); + + // 生成耗材请求 + deviceRequest = new DeviceRequest(); + deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4)); // 耗材请求编码 + deviceRequest.setGenerateSourceEnum(GenerateSource.ORDER_EXECUTE.getValue()); // 生成来源 + deviceRequest.setStatusEnum(RequestStatus.COMPLETED.getValue()); // 请求状态 + deviceRequest.setBasedOnId(serviceRequest.getId()); + deviceRequest.setBasedOnTable(CommonConstants.TableName.WOR_SERVICE_REQUEST); + deviceRequest.setQuantity(activityBindDeviceDetailDto.getQuantity()); // 请求数量 + deviceRequest.setUnitCode(activityBindDeviceDetailDto.getUnitCode()); // 请求单位编码 + // deviceRequest.setLotNumber();// 产品批号 + deviceRequest.setCategoryEnum(Integer.valueOf(advice.getCategoryCode())); // 请求类型 + deviceRequest.setDeviceDefId(activityBindDeviceDetailDto.getDeviceId());// 耗材定义id + deviceRequest.setPatientId(serviceRequest.getPatientId()); // 患者 + deviceRequest.setRequesterId(practitionerId); // 开方人 + deviceRequest.setOrgId(orgId);// 开方人科室 + deviceRequest.setReqAuthoredTime(clickDate); // 请求开始时间 + deviceRequest.setPerformLocation(locationId); // 发放耗材房 + deviceRequest.setEncounterId(serviceRequest.getEncounterId()); // 就诊id + deviceRequest.setConditionId(serviceRequest.getConditionId()); // 诊断id + deviceRequest.setEncounterDiagnosisId(serviceRequest.getEncounterDiagnosisId()); // 就诊诊断id + + deviceRequestService.save(deviceRequest); + + // 需要的耗材数量(小单位) + minUnitCodeQuantity = activityBindDeviceDetailDto.getMinUnitCodeQuantity(); + // 单位(小单位) + // String minUnitCode = activityBindDeviceDetailDto.getMinUnitCode(); + // 库存集合 + List inventoryList = advice.getInventoryList(); + // 价格集合 + List priceList = advice.getPriceList(); + // 剩余需要分配的数量 + BigDecimal remainingQuantity = minUnitCodeQuantity; + // 按批次循环分配数量 + for (AdviceInventoryDto inventory : inventoryList) { + if (remainingQuantity.compareTo(BigDecimal.ZERO) <= 0) { + break; + } + // 可用量 + BigDecimal availableQuantity = inventory.getQuantity(); + // 实际供应量 + BigDecimal actualQuantity; + if (availableQuantity.compareTo(remainingQuantity) >= 0) { + // 当前批次足够满足剩余需求 + actualQuantity = remainingQuantity; + remainingQuantity = BigDecimal.ZERO; + } else { + // 当前批次全部用完 + actualQuantity = availableQuantity; + remainingQuantity = remainingQuantity.subtract(availableQuantity); + } + // 批次号 + String lotNumber = inventory.getLotNumber(); + // 查找对应批次的价格 + AdvicePriceDto priceInfos = findPriceByLotNumber(inventory.getLotNumber(), priceList); + + // 根据批次库存量,生成耗材发放 + deviceRequest.setQuantity(actualQuantity); + deviceRequest.setLotNumber(lotNumber); + // 发放ID + Long dispenseId = + deviceDispenseService.generateDeviceDispense(deviceRequest, procedureId, locationId, exeDate); + + // 根据批次库存量,生成账单 + chargeItem = new ChargeItem(); + chargeItem.setStatusEnum(ChargeItemStatus.BILLABLE.getValue()); // 收费状态 + chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.ORDER_EXECUTE.getValue()); // 生成来源 + chargeItem.setPatientId(deviceRequest.getPatientId()); // 患者 + chargeItem.setContextEnum(ChargeItemContext.DEVICE.getValue()); // 类型 + chargeItem.setEncounterId(deviceRequest.getEncounterId()); // 就诊id + chargeItem.setDefinitionId(priceInfos.getDefinitionId()); // 费用定价ID + chargeItem.setDefDetailId(priceInfos.getDefinitionDetailId()); // 定价子表主键 + chargeItem.setEntererId(practitionerId);// 开立人ID + chargeItem.setRequestingOrgId(orgId); // 开立科室 + chargeItem.setEnteredDate(curDate); // 开立时间 + chargeItem.setServiceTable(CommonConstants.TableName.WOR_DEVICE_REQUEST);// 医疗服务类型 + chargeItem.setServiceId(deviceRequest.getId()); // 医疗服务ID + chargeItem.setProductTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION);// 产品所在表 + chargeItem.setProductId(activityBindDeviceDetailDto.getDeviceId());// 收费项id + chargeItem.setAccountId(accountId);// 关联账户ID + chargeItem.setConditionId(deviceRequest.getConditionId()); // 诊断id + chargeItem.setEncounterDiagnosisId(deviceRequest.getEncounterDiagnosisId()); // 就诊诊断id + chargeItem.setDispenseTable(CommonConstants.TableName.WOR_DEVICE_DISPENSE); // 发放表名 + // chargeItem.setDispenseId(dispenseId); // 发放ID + + chargeItem.setQuantityValue(actualQuantity); // 数量 + chargeItem.setQuantityUnit(priceInfos.getUnitCode()); // 单位 + chargeItem.setUnitPrice(priceInfos.getPrice()); // 单价 + chargeItem.setTotalPrice( + actualQuantity.multiply(priceInfos.getPrice()).setScale(6, RoundingMode.HALF_UP)); // 总价 + + chargeItemService.save(chargeItem); + + } + } + } + } + + /** + * 根据批次号查找价格 + * + * @param lotNumber 批次号 + * @param priceList 价格列表 + * @return 价格信息,如果找不到则返回null + */ + private AdvicePriceDto findPriceByLotNumber(String lotNumber, List priceList) { + if (priceList == null || priceList.isEmpty()) { + return null; + } + return priceList.stream().filter(price -> Objects.equals(price.getConditionValue(), lotNumber)).findFirst() + .get(); + + } + /** * 组装药品请求用于执行的数据结构 * @@ -900,4 +1253,31 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { return actUseExeList; } + /** + * 生成退药单 + * + * @param longMedDispensedList 已发放的药品列表 + * @param procedureIdMap 执行idMap + */ + private void creatRefundMedicationList(List longMedDispensedList, + Map procedureIdMap) { + List medicationRefundList = new ArrayList<>(); + // 根据发药单对应生成退药单 + for (MedicationDispense medicationDispense : longMedDispensedList) { + // 药品发放编码 + medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4)); + // 退药状态 + medicationDispense.setStatusEnum(DispenseStatus.PREPARATION.getValue()); + // 状态变更时间 + medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); + // 取消执行id + Long newProcedureId = procedureIdMap.get(medicationDispense.getProcedureId()); + if (newProcedureId != null) { + medicationDispense.setProcedureId(newProcedureId); + } + medicationDispense.setId(null); + medicationRefundList.add(medicationDispense); + } + medicationDispenseService.saveBatch(medicationRefundList); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/MedicineSummaryAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/MedicineSummaryAppServiceImpl.java index 898a8458..d0e0479b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/MedicineSummaryAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/MedicineSummaryAppServiceImpl.java @@ -7,33 +7,31 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.core.common.constant.HttpStatus; import com.core.common.core.domain.R; import com.core.common.exception.ServiceException; import com.core.common.utils.*; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; -import com.openhis.common.enums.ybenums.YbDrordType; import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.HisQueryUtils; +import com.openhis.medication.domain.MedicationDefinition; +import com.openhis.medication.domain.MedicationDispense; +import com.openhis.medication.service.IMedicationDefinitionService; import com.openhis.medication.service.IMedicationDispenseService; import com.openhis.web.inhospitalnursestation.appservice.IMedicineSummaryAppService; -import com.openhis.web.inhospitalnursestation.dto.InpatientMedicineEncounterInfoDto; -import com.openhis.web.inhospitalnursestation.dto.InpatientMedicinePrescriptionInfoDto; -import com.openhis.web.inhospitalnursestation.dto.InpatientMedicineSearchParam; -import com.openhis.web.inhospitalnursestation.mapper.InpatientMedicineCollectionMapper; -import com.openhis.web.pharmacymanage.dto.InventoryDto; +import com.openhis.web.inhospitalnursestation.dto.DispenseFormSearchParam; +import com.openhis.web.inhospitalnursestation.dto.MedicineDispenseFormDto; +import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryFormDto; +import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryParam; +import com.openhis.web.inhospitalnursestation.mapper.MedicineSummaryAppMapper; +import com.openhis.web.pharmacymanage.dto.UnDispenseInventoryDto; import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; import com.openhis.workflow.domain.InventoryItem; -import com.openhis.workflow.domain.SupplyDelivery; -import com.openhis.workflow.domain.SupplyRequest; -import com.openhis.workflow.service.IDeviceDispenseService; import com.openhis.workflow.service.ISupplyDeliveryService; import com.openhis.workflow.service.ISupplyRequestService; @@ -49,236 +47,200 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService @Resource private AssignSeqUtil assignSeqUtil; - @Autowired + @Resource private IMedicationDispenseService medicationDispenseService; - @Autowired - private IDeviceDispenseService deviceDispenseService; + @Resource + private MedicineSummaryAppMapper medicineSummaryAppMapper; - @Autowired - private InpatientMedicineCollectionMapper inpatientMedicineCollectionMapper; @Resource private ISupplyRequestService supplyRequestService; @Resource private ISupplyDeliveryService supplyDeliveryService; - @Autowired + + @Resource + private IMedicationDefinitionService medicationDefinitionService; + + @Resource private ReturnMedicineMapper returnMedicineMapper; /** - * 分页查询在科病人列表 + * 查询发药单信息 * - * @param searchParam 查询条件 - * @param searchKey 模糊查询关键字 + * @param dispenseFormSearchParam 查询条件 * @param pageNo 当前页码 * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 + * @param request 请求 + * @return 发药单信息 */ @Override - public R getEncounterInfoListPage(InpatientMedicineSearchParam searchParam, String searchKey, Integer pageNo, + public R getMedicineDispenseFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo, Integer pageSize, HttpServletRequest request) { - // 参与者科室id - Long orgId = SecurityUtils.getLoginUser().getOrgId(); - searchParam.setOrganizationId(orgId); - + // 初始化查询参数 + String encounterIds = dispenseFormSearchParam.getEncounterIds(); + dispenseFormSearchParam.setEncounterIds(null); // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(searchParam, searchKey, - new HashSet<>( - Arrays.asList(CommonConstants.FieldName.PatientWbStr, CommonConstants.FieldName.PatientPyStr, - CommonConstants.FieldName.PatientName, CommonConstants.FieldName.InpatientBed)), - request); - queryWrapper.orderByDesc(CommonConstants.FieldName.EncounterId); + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(dispenseFormSearchParam, null, null, request); - // 查询就诊病人列表 - Page encounterInfoPageDto = inpatientMedicineCollectionMapper - .selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.IMP.getValue()); - - // 个别项目设定 - encounterInfoPageDto.getRecords().forEach(patientInfoDto -> { - // 性别 - patientInfoDto.setGenderEnum_enumText( - EnumUtils.getInfoByValue(AdministrativeGender.class, patientInfoDto.getGenderEnum())); - // 年龄 - patientInfoDto.setAge(AgeCalculatorUtil.getAge(patientInfoDto.getBirthDate())); + // 手动拼接住院患者id条件 + if (encounterIds != null && !encounterIds.isEmpty()) { + List encounterIdList = + Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList(); + queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList); + } + // 领药信息列表 + Page medicineDispenseFormPage = + medicineSummaryAppMapper.selectMedicineDispenseFormPage(new Page<>(pageNo, pageSize), queryWrapper, + RequestStatus.COMPLETED.getValue(), EncounterActivityStatus.ACTIVE.getValue(), + LocationForm.BED.getValue(), ParticipantType.ADMITTING_DOCTOR.getCode(), + AccountType.PERSONAL_CASH_ACCOUNT.getCode(), ChargeItemStatus.BILLABLE.getValue(), + ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDED.getValue(), + DispenseStatus.SUMMARIZED.getValue()); + medicineDispenseFormPage.getRecords().forEach(e -> { + // 是否皮试 + e.setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getSkinTestFlag())); + // 是否为注射药物 + e.setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getInjectFlag())); + // 医嘱类型 + e.setTherapyEnum_enumText(EnumUtils.getInfoByValue(TherapyTimeType.class, e.getTherapyEnum())); + // 性别枚举 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 计算年龄 + if (e.getBirthDate() != null) { + e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); + } }); - - return R.ok(encounterInfoPageDto); + return R.ok(medicineDispenseFormPage); } /** - * 查询医嘱列表 + * 查询药品汇总单 * - * @param searchParam 查询条件 - * @param searchKey 模糊查询关键字 + * @param dispenseFormSearchParam 查询条件 * @param pageNo 当前页码 * @param pageSize 查询条数 - * @param request 请求数据 - * @return 处方单列表 + * @param searchKey 模糊查询关键字 + * @param request 请求 + * @return 药品汇总单 */ @Override - public R getPrescriptionInfo(InpatientMedicineSearchParam searchParam, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request) { - - // 就诊id - List encounterIdList = searchParam.getEncounterIdList(); - searchParam.setEncounterIdList(null); - + public R getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request) { // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(searchParam, searchKey, null, request); - queryWrapper.orderByDesc(CommonConstants.FieldName.BusNo); - queryWrapper.le(CommonConstants.FieldName.PlannedDispenseTime, searchParam.getPlannedDispenseTime()); - // queryWrapper.in(CommonConstants.FieldName.encounterId,encounterIdList); - searchParam.setPlannedDispenseTime(null); + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(dispenseFormSearchParam, + searchKey, new HashSet<>(List.of(CommonConstants.FieldName.BusNo)), request); - // 查询医嘱列表 - Page prescriptionInfoPageDto = - inpatientMedicineCollectionMapper.selectPrescriptionInfoListPage(new Page<>(pageNo, pageSize), queryWrapper, - encounterIdList, DispenseStatus.IN_PROGRESS.getValue(), - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); - // 个别项目设定 - prescriptionInfoPageDto.getRecords().forEach(prescriptionInfo -> { - // 治疗类型 - prescriptionInfo.setTherapyEnum_enumText( - EnumUtils.getInfoByValue(YbDrordType.class, prescriptionInfo.getTherapyEnum())); - // 状态 - prescriptionInfo.setStatusEnum_enumText( - EnumUtils.getInfoByValue(DispenseStatus.class, prescriptionInfo.getStatusEnum())); + // 汇总单分页列表 + Page medicineSummaryFormPage = medicineSummaryAppMapper.selectMedicineSummaryFormPage( + new Page<>(pageNo, pageSize), queryWrapper, DispenseStatus.COMPLETED.getValue(), + DispenseStatus.IN_PROGRESS.getValue(), SupplyType.SUMMARY_DISPENSE.getValue()); + medicineSummaryFormPage.getRecords().forEach(e -> { + // 发药状态 + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, e.getStatusEnum())); }); - - return R.ok(prescriptionInfoPageDto); + return R.ok(medicineSummaryFormPage); } /** - * 显示汇总发药单(生成之前的确认,此刻还没生成汇总单) + * 查询药品汇总单详情 * - * @param searchParam 查询条件 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处理结果 + * @param summaryNo 汇总单号 + * @return 药品汇总单详情 */ @Override - public R showMedicineSummary(List searchParam, Integer pageNo, Integer pageSize) { - // 药品发放id - List medDispenseId = searchParam.stream() - .filter(param -> param != null - && Objects.equals(param.getItemTable(), CommonConstants.TableName.MED_MEDICATION_DEFINITION)) - .map(InpatientMedicineSearchParam::getDispenseId).collect(Collectors.toList()); - // 耗材发放id - List devDispenseId = searchParam.stream() - .filter(param -> param != null - && Objects.equals(param.getItemTable(), CommonConstants.TableName.ADM_DEVICE_DEFINITION)) - .map(InpatientMedicineSearchParam::getDispenseId).collect(Collectors.toList()); - - // 构建查询条件 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.orderByAsc(CommonConstants.FieldName.itemId); - - // 查询汇总医嘱列表 - Page prescriptionSummaryInfoPageDto = - inpatientMedicineCollectionMapper.selectPrescriptionSummaryInfoListPage(new Page<>(pageNo, pageSize), - queryWrapper, medDispenseId, devDispenseId, CommonConstants.TableName.MED_MEDICATION_DEFINITION, - CommonConstants.TableName.ADM_DEVICE_DEFINITION); - // 个别项目设定 - prescriptionSummaryInfoPageDto.getRecords().forEach(prescriptionInfo -> { - // 地点类型 - prescriptionInfo.setLocationEnum_enumText( - EnumUtils.getInfoByValue(LocationForm.class, prescriptionInfo.getLocationEnum())); - }); - - return R.ok(prescriptionSummaryInfoPageDto); + public R getMedicineSummaryFormDetail(String summaryNo) { + // 药品汇总单详情 + return R.ok(medicineSummaryAppMapper.selectMedicineSummaryFormDetail(summaryNo)); } /** * 生成汇总发药单 * - * @param prescriptionInfo 汇总发药单 + * @param medicineSummaryParamList 汇总发药申请参数 * @return 处理结果 */ @Override - public R medicineSummary(List prescriptionInfo) { - // 药品发放id - List medDispenseId = new ArrayList<>(); - // 耗材发放id - List devDispenseId = new ArrayList<>(); - // 供应申请 - List supplyRequestList = new ArrayList<>(); - SupplyRequest supplyRequest; - // 供应发放 - List supplyDeliveryList = new ArrayList<>(); - SupplyDelivery supplyDelivery; + public R medicineSummary(List medicineSummaryParamList) { + // 领药人 + Long receiverId = medicineSummaryParamList.get(0).getReceiverId(); + // 申请时间 Date now = DateUtils.getNowDate(); - - // 校验库存 - R checkInventoryReturn = this.checkInventoryItem(devDispenseId, medDispenseId); - if (checkInventoryReturn.getCode() != HttpStatus.SUCCESS) { - return checkInventoryReturn; + // 申请人 + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 药品发放id + List medDispenseIdList = + medicineSummaryParamList.stream().map(MedicineSummaryParam::getDispenseId).toList(); + // 药品发放信息列表 + List medicationDispenseList = medicationDispenseService.listByIds(medDispenseIdList); + if (medicationDispenseList == null || medicationDispenseList.isEmpty()) { + throw new ServiceException("未找到药品发放信息"); } - - // 单据号 - String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.DISPENSING_ORDER.getPrefix(), 4); - if (prescriptionInfo.stream().map(InpatientMedicinePrescriptionInfoDto::getStatusEnum) + if (medicationDispenseList.stream().map(MedicationDispense::getStatusEnum) .anyMatch(x -> x.equals(DispenseStatus.SUMMARIZED.getValue()))) { throw new ServiceException("药品已汇总,请勿重复汇总"); - } else { - for (InpatientMedicinePrescriptionInfoDto item : prescriptionInfo) { - // 供应申请 - supplyRequest = new SupplyRequest().setBusNo(busNo).setTypeEnum(SupplyType.DISPENSING_ORDER.getValue()) - .setStatusEnum(SupplyStatus.SEND.getValue()) - .setCategoryEnum(SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue()) - .setItemTable(item.getItemTable()).setItemId(item.getItemId()).setUnitCode(item.getUnitCode()) - .setItemQuantity(new BigDecimal(item.getQuantity())).setLotNumber(item.getLotNumber()) - .setSourceTypeEnum(item.getLocationEnum()).setSourceLocationId(item.getLocationId()) - .setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) - .setPurposeLocationId(SecurityUtils.getLoginUser().getOrgId()) - .setApplicantId(SecurityUtils.getLoginUser().getPractitionerId()).setApplyTime(now); - supplyRequestList.add(supplyRequest); + } + // 查询药品信息 + List medicationDefinitions = medicationDefinitionService + .listByIds(medicationDispenseList.stream().map(MedicationDispense::getMedicationId).toList()); + // 根据发放药房分组 + Map> medicationLocationMap = + medicationDispenseList.stream().collect(Collectors.groupingBy(MedicationDispense::getLocationId)); + // 循环每个药房 + for (Map.Entry> entry : medicationLocationMap.entrySet()) { + // 汇总单据号 + String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICINE_SUMMARY_NO.getPrefix(), 4); - // 供应发放 - supplyDelivery = new SupplyDelivery().setRequestId(supplyRequest.getId()) - .setStatusEnum(DispenseStatus.IN_PROGRESS.getValue()).setTypeEnum(supplyRequest.getTypeEnum()) - .setItemTable(supplyRequest.getItemTable()).setItemId(supplyRequest.getItemId()) - .setBasedOnIds(item.getDispenseIds()).setUnitCode(supplyRequest.getUnitCode()) - .setQuantity(supplyRequest.getItemQuantity()).setLotNumber(supplyRequest.getLotNumber()) - .setReceiverId(SecurityUtils.getLoginUser().getPractitionerId()); - if (item.getItemTable().equals(CommonConstants.TableName.MED_MEDICATION_DEFINITION)) { - // 设置供应发放信息 - supplyDelivery.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE); - // 设置药品发放id - medDispenseId.addAll(Arrays.stream(item.getDispenseIds().split(",")).map(String::trim) // 去除每个ID前后的空格 - .filter(s -> !s.isEmpty()) // 过滤空字符串 - .map(Long::parseLong) // 转换为Long类型 - .toList()); - } else { - // 设置供应发放信息 - supplyDelivery.setBasedOnTable(CommonConstants.TableName.WOR_DEVICE_DISPENSE); - // 设置耗材发放id - devDispenseId.addAll(Arrays.stream(item.getDispenseIds().split(",")).map(String::trim) // 去除每个ID前后的空格 - .filter(s -> !s.isEmpty()) // 过滤空字符串 - .map(Long::parseLong) // 转换为Long类型 - .toList()); + List medicationDispenses = entry.getValue(); + // 根据相同批号的同一药品进行汇总 + Map> medicationSummaryInfoMap = medicationDispenses.stream().collect( + Collectors.groupingBy(x -> x.getMedicationId() + CommonConstants.Common.DASH + x.getLotNumber())); + for (Map.Entry> medicationSummaryInfoList : medicationSummaryInfoMap + .entrySet()) { + List medicationSummaryList = medicationSummaryInfoList.getValue(); + MedicationDispense medicationDispense = medicationSummaryList.get(0); + Long medicationId = medicationDispense.getMedicationId(); + Long locationId = medicationDispense.getLocationId(); + String lotNumber = medicationDispense.getLotNumber(); + Long patientId = medicationDispense.getPatientId(); + // 拆零比例 + BigDecimal partPercent = BigDecimal.ONE; + // 最小单位 + String minUnitCode = null; + // 单位 + String unitCode = null; + // 根据药品id获取对应的药品信息 + Optional medicationDefinition = + medicationDefinitions.stream().filter(x -> x.getId().equals(medicationId)).findFirst(); + if (medicationDefinition.isPresent()) { + partPercent = medicationDefinition.get().getPartPercent(); + minUnitCode = medicationDefinition.get().getMinUnitCode(); + unitCode = medicationDefinition.get().getUnitCode(); } - supplyDeliveryList.add(supplyDelivery); - } - // 供应申请更新 - boolean requestFlg = supplyRequestService.saveBatch(supplyRequestList); - if (!requestFlg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); - } - // 供应发放更新 - boolean deliveryFlg = supplyDeliveryService.saveBatch(supplyDeliveryList); - if (!deliveryFlg) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + if (minUnitCode == null || unitCode == null || partPercent == null) { + throw new ServiceException("药品信息有误,请联系管理员"); + } + // 最小单位数量 + BigDecimal minQuantity = BigDecimal.ZERO; + for (MedicationDispense medicationSummaryInfo : medicationSummaryList) { + BigDecimal quantity = medicationSummaryInfo.getQuantity(); + if (unitCode.equals(medicationDispense.getUnitCode())) { + // 转换为小单位进行累加 + quantity = medicationSummaryInfo.getQuantity().multiply(partPercent); + } + minQuantity = minQuantity.add(quantity); + } + Long supplyRequestId = supplyRequestService.createSummarySupplyRequest(medicationId, locationId, + lotNumber, patientId, minQuantity, minUnitCode, practitionerId, now, busNo); + supplyDeliveryService.createSummarySupplyDelivery(medicationId, lotNumber, patientId, minQuantity, + minUnitCode, receiverId, supplyRequestId); } // 药品发放状态更新 - medicationDispenseService.updateDispenseStatusSummarized(medDispenseId); - // 耗材发放状态更新 - deviceDispenseService.updateDispenseStatusSummarized(devDispenseId); + medicationDispenseService.updateDispenseStatusSummarized( + medicationDispenses.stream().map(MedicationDispense::getId).toList(), busNo); } - - return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"汇总申请"})); } /** @@ -293,45 +255,45 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService List inventoryItemList = new ArrayList<>(); // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseId, medDispenseId, + List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseId, medDispenseId, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); // 按每个药品分组 - Map> groupedByItemId = - inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId)); // 遍历每个分组校验库存状态 - for (Map.Entry> entry : groupedByItemId.entrySet()) { - List groupItems = entry.getValue(); - if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum) .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { // 库存停供校验 return R.fail(groupItems.get(0).getItemName() + "库存已停供"); } } if (!inventoryList.isEmpty()) { - for (InventoryDto inventoryDto : inventoryList) { - if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { + for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) { InventoryItem inventoryItem = new InventoryItem(); // 库存数量判定 - if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { + if (unDispenseInventoryDto.getDispenseUnit().equals(unDispenseInventoryDto.getInventoryUnitCode())) { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract(unDispenseInventoryDto.getQuantity()); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); } } else { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - BigDecimal quantity = inventoryDto.getInventoryQuantity() - .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity() + .subtract(unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity())); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); } } inventoryItemList.add(inventoryItem); @@ -341,4 +303,27 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService return R.ok(inventoryItemList); } + /** + * 取消汇总 + * + * @param summaryNo 汇总单号 + * @return 处理结果 + */ + @Override + public R cancelSummary(String summaryNo) { + // 取消汇总申请(软删除) + List requestIdList = supplyRequestService.cancelSummarySupplyRequest(List.of(summaryNo)); + if (requestIdList.isEmpty()) { + return R.fail("取消汇总申请失败"); + } + // 软删除汇总发放 + supplyDeliveryService.deleteSupplyDeliveryByReqId(requestIdList); + // 取消药品汇总 + boolean result = medicationDispenseService.cancelMedicationSummary(List.of(summaryNo)); + if (!result) { + return R.fail("取消汇总申请失败"); + } + return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"取消"})); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/NurseBillingAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/NurseBillingAppService.java new file mode 100644 index 00000000..42a3201d --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/NurseBillingAppService.java @@ -0,0 +1,428 @@ +package com.openhis.web.inhospitalnursestation.appservice.impl; + +import com.core.common.core.domain.R; +import com.core.common.core.domain.model.LoginUser; +import com.core.common.exception.ServiceException; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.service.IChargeItemService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.*; +import com.openhis.web.doctorstation.dto.AdviceSaveDto; +import com.openhis.web.doctorstation.utils.AdviceUtils; +import com.openhis.web.inhospitalnursestation.appservice.INurseBillingAppService; +import com.openhis.web.regdoctorstation.dto.RegAdviceSaveDto; +import com.openhis.web.regdoctorstation.dto.RegAdviceSaveParam; +import com.openhis.workflow.domain.DeviceRequest; +import com.openhis.workflow.service.IDeviceDispenseService; +import com.openhis.workflow.service.IDeviceRequestService; +import com.openhis.workflow.service.IServiceRequestService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 住院护士站划价服务实现类 + * 核心功能:临时耗材/诊疗活动划价签发、关联费用项管理、库存校验、医嘱删除(已收费校验)等 + */ +@Service +public class NurseBillingAppService implements INurseBillingAppService { + + // 依赖注入:保留@Resource注解,按原有方式注入依赖 + @Resource + private AdviceUtils adviceUtils; + @Resource + private AssignSeqUtil assignSeqUtil; + @Resource + private IDeviceRequestService iDeviceRequestService; + @Resource + private IServiceRequestService iServiceRequestService; + @Resource + private IChargeItemService iChargeItemService; + @Resource + private IDeviceDispenseService iDeviceDispenseService; + + // 常量提取:避免魔法值,提高代码可维护性和可读性 + /** 耗材请求服务表名(关联费用项使用) */ + private static final String SERVICE_TABLE_DEVICE_REQUEST = CommonConstants.TableName.WOR_DEVICE_REQUEST; + private static final String SERVICE_TABLE_SERVICE_REQUEST = CommonConstants.TableName.WOR_SERVICE_REQUEST; + /** 费用项业务编号前缀 */ + private static final String CHARGE_ITEM_BUS_NO_PREFIX = AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(); + /** 耗材申请单号序列号长度(按日生成) */ + private static final int DEVICE_RES_NO_SEQ_LENGTH = 4; + /** 医嘱签发编码序列号长度 */ + private static final int ADVICE_SIGN_SEQ_LENGTH = 10; + + /** + * 新增住院护士站划价 + * 完整流程:参数初始化 → 入参校验 → 医嘱分类(耗材/诊疗活动)→ 生成签发编码 → 处理耗材划价 → 处理诊疗活动划价 + * + * @param regAdviceSaveParam 划价请求参数(含患者信息、医嘱列表、科室ID等核心数据) + * @return R 划价结果响应(成功/失败信息、状态码) + */ + @Override + @Transactional(rollbackFor = Exception.class) // 事务管理:划价相关操作原子性,任一环节失败整体回滚 + public R addInNurseBilling(RegAdviceSaveParam regAdviceSaveParam) { + // 1. 时间参数初始化:默认使用当前时间,支持入参指定 + Date curDate = new Date(); + Date startTime = regAdviceSaveParam.getStartTime() == null ? curDate : regAdviceSaveParam.getStartTime(); + Date authoredTime = regAdviceSaveParam.getAuthoredTime() == null ? curDate : regAdviceSaveParam.getAuthoredTime(); + + // 2. 入参校验:非空校验 + 库存校验,校验失败直接返回错误响应 + R checkResult = checkNurseBillingParam(regAdviceSaveParam); + if (checkResult.getCode() != R.SUCCESS) { + return checkResult; + } + + // 3. 提取核心业务参数 + Long organizationId = regAdviceSaveParam.getOrganizationId(); // 患者住院科室ID + List allAdviceList = regAdviceSaveParam.getRegAdviceSaveList(); // 所有待处理医嘱列表 + + // 4. 按医嘱类型分类:拆分耗材类和诊疗活动类(分别处理) + List deviceAdviceList = filterDeviceAdvice(allAdviceList); // 耗材类医嘱 + List activityAdviceList = filterActivityAdvice(allAdviceList); // 诊疗活动类医嘱 + + // 5. 生成全局唯一的医嘱签发编码 + String signCode = assignSeqUtil.getSeq(AssignSeqEnum.ADVICE_SIGN.getPrefix(), ADVICE_SIGN_SEQ_LENGTH); + + // 6. 处理耗材类医嘱划价(新增/修改/删除逻辑) + handleDeviceBilling(deviceAdviceList, null, signCode, organizationId, curDate); + + // 7. 处理诊疗活动类医嘱划价(原代码未实现,保留扩展入口) + handleActivityBilling(activityAdviceList, signCode, organizationId, curDate, startTime, authoredTime); + + // 8. 划价成功返回响应 + return R.ok("住院划价签发成功"); + } + + /** + * 筛选耗材类医嘱 + * 按医嘱类型枚举(ItemType.DEVICE)过滤,仅保留耗材相关医嘱 + * + * @param allAdviceList 所有待处理医嘱列表 + * @return List 耗材类医嘱列表 + */ + private List filterDeviceAdvice(List allAdviceList) { + return allAdviceList.stream() + .filter(advice -> ItemType.DEVICE.getValue().equals(advice.getAdviceType())) + .collect(Collectors.toList()); + } + + /** + * 筛选诊疗活动类医嘱 + * 按医嘱类型枚举(ItemType.ACTIVITY)过滤,仅保留诊疗活动相关医嘱 + * + * @param allAdviceList 所有待处理医嘱列表 + * @return List 诊疗活动类医嘱列表 + */ + private List filterActivityAdvice(List allAdviceList) { + return allAdviceList.stream() + .filter(advice -> ItemType.ACTIVITY.getValue().equals(advice.getAdviceType())) + .collect(Collectors.toList()); + } + + /** + * 处理耗材类医嘱划价 + * 核心流程:筛选临时耗材 → 处理删除(已收费校验)→ 新增/修改耗材记录 → 同步发放+费用项 + * + * @param deviceAdviceList 耗材类医嘱列表 + * @param deleteList 待删除的耗材医嘱列表(可为null,暂无删除场景传null) + * @param signCode 医嘱签发编码(全局唯一) + * @param organizationId 患者住院科室ID + * @param curDate 当前操作时间 + */ + private void handleDeviceBilling(List deviceAdviceList, List deleteList, + String signCode, Long organizationId, Date curDate) { + // 1. 筛选临时类型耗材:仅处理临时医嘱(TherapyTimeType.TEMPORARY)的新增/修改 + List tempDeviceList = deviceAdviceList.stream() + .filter(advice -> TherapyTimeType.TEMPORARY.getValue().equals(advice.getTherapyEnum())) + .collect(Collectors.toList()); + + // 2. 处理耗材删除:校验已收费状态 + 关联数据删除 + handleDelRequest(deleteList,SERVICE_TABLE_DEVICE_REQUEST); + + // 3. 处理耗材新增/修改:同步保存耗材请求、发放记录、费用项 + handleDeviceInsertOrUpdate(tempDeviceList, organizationId, curDate); + } + + /** + * 处理诊疗活动类医嘱划价 + * (扩展入口:原代码未实现,可参考耗材处理逻辑,关联服务请求表、费用项等) + * + * @param activityAdviceList 诊疗活动类医嘱列表 + * @param signCode 医嘱签发编码 + * @param organizationId 住院科室ID + * @param curDate 当前操作时间 + * @param startTime 医嘱开始时间 + * @param authoredTime 医嘱签发时间 + */ + private void handleActivityBilling(List activityAdviceList, String signCode, + Long organizationId, Date curDate, Date startTime, Date authoredTime) { + // 注:诊疗活动划价逻辑待实现,建议流程: + // 1. 筛选临时类型诊疗活动 + // 2. 处理删除(如需) + // 3. 新增/修改服务请求记录(IServiceRequestService) + // 4. 同步生成/更新费用项(IChargeItemService) + } + + /** + * 处理耗材删除逻辑 + * 关键校验:已收费的耗材项目不允许删除 + * 关联删除:耗材请求表 → 耗材发放记录 → 费用项表(级联删除关联数据) + * + * @param deleteList 待删除的耗材医嘱列表(可为null) + */ + private void handleDelRequest(List deleteList,String serviceTable) { + // 空列表直接返回,避免无效循环和查询 + if (deleteList == null || deleteList.isEmpty()) { + return; + } + // 提取待删除请求ID列表(用于查询费用状态) + List delRequestIds = deleteList.stream() + .map(AdviceSaveDto::getRequestId) + .collect(Collectors.toList()); + + // 校验:待删除项是否已收费,已收费则抛出异常阻止删除 + checkDeletedDeviceChargeStatus(delRequestIds); + + // 执行级联删除:循环处理每个待删除项的关联数据 + for (AdviceSaveDto deleteDto : deleteList) { + Long requestId = deleteDto.getRequestId(); + if (serviceTable.equals(SERVICE_TABLE_DEVICE_REQUEST)){ + iDeviceRequestService.removeById(requestId); // 删除耗材请求主记录 + iDeviceDispenseService.deleteDeviceDispense(requestId); // 删除关联的耗材发放记录 + } + // 删除关联的费用项(按服务表+服务ID关联) + iChargeItemService.deleteByServiceTableAndId(SERVICE_TABLE_DEVICE_REQUEST, requestId); + } + } + + /** + * 校验待删除耗材的费用状态 + * 查询待删除项对应的费用项,若存在已收费(ChargeItemStatus.BILLED)状态则抛出业务异常 + * + * @param delRequestIds 待删除的耗材请求ID列表 + */ + private void checkDeletedDeviceChargeStatus(List delRequestIds) { + if (delRequestIds.isEmpty()) { + return; + } + + // 查询待删除耗材对应的费用项列表 + List chargeItemList = iChargeItemService.getChargeItemInfoByReqId(delRequestIds); + if (chargeItemList == null || chargeItemList.isEmpty()) { + return; // 无关联费用项,直接允许删除 + } + + // 校验是否存在已收费项:使用stream.anyMatch简化循环判断 + boolean hasBilledItem = chargeItemList.stream() + .anyMatch(ci -> ChargeItemStatus.BILLED.getValue().equals(ci.getStatusEnum())); + if (hasBilledItem) { + throw new ServiceException("删除失败:部分项目已完成收费,不支持直接删除,请联系收费人员处理后重试"); + } + } + + /** + * 处理耗材新增/修改 + * 流程:构建耗材请求对象 → 保存/更新 → 处理耗材发放 → 构建费用项 → 保存/更新费用项 + * + * @param tempDeviceList 临时耗材医嘱列表(新增/修改) + * @param organizationId 住院科室ID + * @param curDate 当前操作时间 + */ + private void handleDeviceInsertOrUpdate(List tempDeviceList, Long organizationId, Date curDate) { + if (tempDeviceList.isEmpty()) { + return; // 无临时耗材需处理,直接返回 + } + + // 循环处理每个临时耗材医嘱 + for (AdviceSaveDto adviceDto : tempDeviceList) { + // 1. 构建耗材请求对象(DeviceRequest)并执行保存/更新 + if (adviceDto.getRequestId() == null) { + adviceDto.setDbOpType(DbOpType.INSERT.getCode()); // 新增时设置操作类型 + }else { + adviceDto.setDbOpType(DbOpType.UPDATE.getCode()); // 修改时设置操作类型 + } + DeviceRequest deviceRequest = buildDeviceRequest(adviceDto, curDate); + iDeviceRequestService.saveOrUpdate(deviceRequest); + + // 2. 同步处理耗材发放:根据操作类型(新增/修改)执行发放逻辑 + iDeviceDispenseService.handleDeviceDispense(deviceRequest, adviceDto.getDbOpType()); + + // 3. 构建费用项对象(ChargeItem)并执行保存/更新 + ChargeItem chargeItem = buildChargeItem(adviceDto, deviceRequest, curDate); + iChargeItemService.saveOrUpdate(chargeItem); + } + } + + /** + * 构建耗材请求对象(DeviceRequest) + * 功能:将医嘱DTO(AdviceSaveDto)的属性映射到耗材请求实体,设置默认状态和业务编号 + * + * @param adviceDto 耗材医嘱DTO(含请求参数) + * @param curDate 当前操作时间 + * @return DeviceRequest 构建完成的耗材请求实体 + */ + private DeviceRequest buildDeviceRequest(AdviceSaveDto adviceDto, Date curDate) { + DeviceRequest deviceRequest = new DeviceRequest(); + + // 基础配置:主键、状态、业务编号 + deviceRequest.setId(adviceDto.getRequestId()); // 主键ID(新增为null,修改为已有ID) + deviceRequest.setStatusEnum(RequestStatus.ACTIVE.getValue()); // 划价时直接签发,状态为"激活" + // 按日生成业务编号:前缀+4位序列号(确保每日唯一) + deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), DEVICE_RES_NO_SEQ_LENGTH)); + deviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源:医生处方 + + // 业务属性映射:从DTO映射到实体 + deviceRequest.setQuantity(adviceDto.getQuantity()); // 请求数量 + deviceRequest.setUnitCode(adviceDto.getUnitCode()); // 单位编码 + deviceRequest.setLotNumber(adviceDto.getLotNumber()); // 产品批号 + deviceRequest.setCategoryEnum(adviceDto.getCategoryEnum()); // 请求类型(枚举) + deviceRequest.setDeviceDefId(adviceDto.getAdviceDefinitionId()); // 耗材定义ID + deviceRequest.setPatientId(adviceDto.getPatientId()); // 患者ID + deviceRequest.setRequesterId(adviceDto.getPractitionerId()); // 开方医生ID + deviceRequest.setOrgId(adviceDto.getFounderOrgId()); // 开方人科室ID + deviceRequest.setReqAuthoredTime(curDate); // 请求开始时间 + deviceRequest.setPerformLocation(adviceDto.getLocationId()); // 发放耗材房ID + deviceRequest.setEncounterId(adviceDto.getEncounterId()); // 就诊ID + deviceRequest.setPackageId(adviceDto.getPackageId()); // 组套ID + deviceRequest.setContentJson(adviceDto.getContentJson()); // 请求内容JSON(扩展信息) + deviceRequest.setYbClassEnum(adviceDto.getYbClassEnum()); // 医保类别编码 + deviceRequest.setConditionId(adviceDto.getConditionId()); // 诊断ID + deviceRequest.setEncounterDiagnosisId(adviceDto.getEncounterDiagnosisId()); // 就诊诊断ID + + return deviceRequest; + } + + /** + * 构建费用项对象(ChargeItem) + * 功能:关联耗材请求实体和医嘱DTO,映射费用相关属性,设置默认状态和业务编号 + * + * @param adviceDto 耗材医嘱DTO(含费用参数) + * @param deviceRequest 已保存的耗材请求实体(关联服务ID) + * @param curDate 当前操作时间 + * @return ChargeItem 构建完成的费用项实体 + */ + private ChargeItem buildChargeItem(AdviceSaveDto adviceDto, DeviceRequest deviceRequest,Date curDate) { + ChargeItem chargeItem = new ChargeItem(); + + // 基础配置:主键、状态、业务编号 + chargeItem.setId(adviceDto.getChargeItemId()); // 费用项ID(新增为null,修改为已有ID) + chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 初始状态:草稿(未收费) + // 业务编号:费用项前缀+耗材请求编号(确保与耗材请求一一关联) + chargeItem.setBusNo(CHARGE_ITEM_BUS_NO_PREFIX.concat(deviceRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源:医生处方 + + // 业务属性映射:患者、就诊、定价相关信息 + chargeItem.setPatientId(adviceDto.getPatientId()); // 患者ID + chargeItem.setContextEnum(adviceDto.getAdviceType()); // 费用类型(耗材) + chargeItem.setEncounterId(adviceDto.getEncounterId()); // 就诊ID + chargeItem.setDefinitionId(adviceDto.getDefinitionId()); // 费用定价ID + chargeItem.setDefDetailId(adviceDto.getDefinitionDetailId()); // 定价子表主键(明细定价) + chargeItem.setEntererId(adviceDto.getPractitionerId()); // 开立人ID(开方医生) + chargeItem.setRequestingOrgId(SecurityUtils.getLoginUser().getOrgId()); // 开立科室ID + chargeItem.setEnteredDate(curDate); // 开立时间 + chargeItem.setServiceTable(SERVICE_TABLE_DEVICE_REQUEST); // 医疗服务类型(关联耗材请求表) + chargeItem.setServiceId(deviceRequest.getId()); // 医疗服务ID(关联耗材请求ID) + chargeItem.setProductTable(SERVICE_TABLE_DEVICE_REQUEST);// 产品所在表(耗材表) + chargeItem.setProductId(adviceDto.getAdviceDefinitionId());// 产品ID(耗材定义ID) + chargeItem.setAccountId(adviceDto.getAccountId()); // 关联账户ID(患者账户) + chargeItem.setConditionId(adviceDto.getConditionId()); // 诊断ID + chargeItem.setEncounterDiagnosisId(adviceDto.getEncounterDiagnosisId()); // 就诊诊断ID + + // 费用核心属性:数量、单位、单价、总价 + chargeItem.setQuantityValue(adviceDto.getQuantity()); // 数量(与耗材请求一致) + chargeItem.setQuantityUnit(adviceDto.getUnitCode()); // 单位(与耗材请求一致) + chargeItem.setUnitPrice(adviceDto.getUnitPrice()); // 单价(从DTO传入,已定价) + chargeItem.setTotalPrice(adviceDto.getTotalPrice()); // 总价(数量×单价,DTO已计算) + + return chargeItem; + } + + /** + * 划价入参校验 + * 校验规则:1. 参数非空 2. 科室ID非空 3. 医嘱列表非空 4. 临时耗材库存校验 + * + * @param regAdviceSaveParam 划价请求参数 + * @return R 校验结果(成功返回R.ok(),失败返回R.fail()) + */ + private R checkNurseBillingParam(RegAdviceSaveParam regAdviceSaveParam) { + // 1. 整体参数非空校验 + if (regAdviceSaveParam == null) { + return R.fail("划价请求失败:未获取到有效请求数据,请重新提交"); + } + + // 2. 核心字段非空校验:患者住院科室ID + if (regAdviceSaveParam.getOrganizationId() == null) { + return R.fail("划价请求失败:患者住院科室信息缺失,请确认患者科室后重试"); + } + + // 3. 医嘱列表非空校验 + List adviceList = regAdviceSaveParam.getRegAdviceSaveList(); + if (adviceList == null || adviceList.isEmpty()) { + return R.fail("划价请求失败:未选择任何待划价项目,请添加医嘱后提交"); + } + + // 4. 临时耗材库存校验:仅校验非删除、非诊疗活动的临时医嘱 + List needCheckInventoryList = adviceList.stream() + .filter(advice -> TherapyTimeType.TEMPORARY.getValue().equals(advice.getTherapyEnum()) + && !DbOpType.DELETE.getCode().equals(advice.getDbOpType()) + && !ItemType.ACTIVITY.getValue().equals(advice.getAdviceType())) + .collect(Collectors.toList()); + + // 调用工具类校验库存,返回非null则表示库存不足 + String inventoryTip = adviceUtils.checkInventory(new ArrayList<>(needCheckInventoryList)); + if (inventoryTip != null) { + // 库存提示已包含具体耗材名称和短缺数量,直接拼接操作建议 + return R.fail("划价失败:" + inventoryTip + ",请联系库房确认库存或调整申请数量"); + } + + // 所有校验通过 + return R.ok(); + } + + // ======================== 以下方法原代码未实现,保留接口方法签名 ======================== + + @Override + public R getBillingListByEncounterId() { + // 功能:根据就诊ID查询划价列表(待实现) + return null; + } + + @Override + public R deleteInNurseBilling() { + // 功能:删除住院划价记录(待实现) +// List deleteList + return null; + } + + @Override + public R addOrderBilling() { + // 功能:新增订单划价(待实现) + return null; + } + + @Override + public R deleteOrderBilling() { + // 功能:删除订单划价(待实现) + return null; + } + + @Override + public R updateOrderBilling() { + // 功能:修改订单划价(待实现) + return null; + } + + @Override + public R getOrderBillingByRequestId() { + // 功能:根据请求ID查询订单划价(待实现) + return null; + } +} \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/OrgDeviceStockTakeAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/OrgDeviceStockTakeAppServiceImpl.java new file mode 100644 index 00000000..f388a7b0 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/OrgDeviceStockTakeAppServiceImpl.java @@ -0,0 +1,248 @@ +package com.openhis.web.inhospitalnursestation.appservice.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.DateUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.AssignSeqEnum; +import com.openhis.common.enums.PublicationStatus; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.common.dto.UnitDto; +import com.openhis.web.inhospitalnursestation.appservice.IOrgDeviceStockTakeAppService; +import com.openhis.web.inhospitalnursestation.dto.OrgDeviceDto; +import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryFromDto; +import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryParam; +import com.openhis.web.inhospitalnursestation.mapper.OrgDeviceStockTakeAppMapper; +import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; +import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.mapper.InventoryItemMapper; +import com.openhis.workflow.service.IDeviceDispenseService; +import com.openhis.workflow.service.IInventoryItemService; +import com.openhis.workflow.service.ISupplyDeliveryService; +import com.openhis.workflow.service.ISupplyRequestService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 科室耗材盘点 应用实现类 + * + * @author wuyan + * @date 2025/11/05 + */ +@Service +public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppService { + + @Resource + private OrgDeviceStockTakeAppMapper orgDeviceStockTakeAppMapper; + + @Resource + private IInventoryItemService inventoryItemService; + + @Resource + private ISupplyRequestService supplyRequestService; + + @Resource + private ISupplyDeliveryService supplyDeliveryService; + + @Resource + private AssignSeqUtil assignSeqUtil; + + @Resource + private IDeviceDispenseService deviceDispenseService; + + @Resource + private InventoryItemMapper inventoryItemMapper; + + /** + * 查询科室耗材汇总 + * + * @param orgDeviceSummaryParam 查询条件 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求 + * @return 科室耗材汇总单 + */ + @Override + public R getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, String startTime, + String endTime, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + pageSize = Integer.MAX_VALUE; + + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(orgDeviceSummaryParam, searchKey, + new HashSet<>(List.of(CommonConstants.FieldName.ItemName)), request); + if (!(startTime == null || endTime == null)) { + queryWrapper.between(CommonConstants.FieldName.ApplyTime, LocalDate.parse(startTime), + LocalDate.parse(endTime)); + } + + Page orgDeviceDtoPage = + orgDeviceStockTakeAppMapper.selectOrgDeviceInfo(new Page<>(pageNo, pageSize), queryWrapper); + + List orgDeviceList = + new ArrayList<>(orgDeviceDtoPage.getRecords()).stream().filter(x -> x.getDispenseId() != null).toList(); + + // 根据项目id + 批次号 + 库房号分组 + Map> orgDeviceGroupBy = + orgDeviceList.stream().collect(Collectors.groupingBy(item -> item.getItemId() + CommonConstants.Common.DASH + + item.getLotNumber() + CommonConstants.Common.DASH + item.getSourceLocationId())); + + ArrayList orgDeviceSummaryFromDtoList = new ArrayList<>(); + + orgDeviceGroupBy.forEach((k, v) -> { + OrgDeviceSummaryFromDto orgDeviceSummaryFromDto = new OrgDeviceSummaryFromDto(); + + String itemId = k.split(CommonConstants.Common.DASH)[0]; + String lotNumber = k.split(CommonConstants.Common.DASH)[1]; + String sourceLocationId = k.split(CommonConstants.Common.DASH)[2]; + + OrgDeviceDto orgDeviceDtoFirst = v.get(0); + // 拆零比例 + BigDecimal partPercent = orgDeviceDtoFirst.getPartPercent(); + // 最小单位 + String minUnitCode = orgDeviceDtoFirst.getMinUnitCode(); + // 常规单位 + String unitCode = orgDeviceDtoFirst.getMaxUnitCode(); + if (minUnitCode == null || unitCode == null || partPercent == null) { + throw new ServiceException("耗材信息有误,请联系管理员"); + } + + List dispenseIdList = new ArrayList<>(); + + // 最小单位数量 + BigDecimal minQuantity = BigDecimal.ZERO; + for (OrgDeviceDto orgDeviceDto : v) { + BigDecimal quantity = orgDeviceDto.getQuantity(); + if (unitCode.equals(orgDeviceDto.getUnitCode())) { + // 转换为小单位进行累加 + quantity = orgDeviceDto.getQuantity().multiply(partPercent); + } + minQuantity = minQuantity.add(quantity); + dispenseIdList.add(orgDeviceDto.getDispenseId()); + } + + List unitList = new ArrayList<>(); + UnitDto unitDto = new UnitDto(); + // 单位列表 + unitDto.setUnitCode(orgDeviceDtoFirst.getUnitCode()).setMinUnitCode(minUnitCode); + unitList.add(unitDto); + + orgDeviceSummaryFromDto.setItemId(Long.valueOf(itemId)) // 器材id + .setName(orgDeviceDtoFirst.getItemName()) // 器材名称 + .setTotalVolume(orgDeviceDtoFirst.getTotalVolume()) // 规格 + .setManufacturer(orgDeviceDtoFirst.getManufacturer()) // 厂家 + .setLotNumber(lotNumber) // 批号 + .setUnitPrice(orgDeviceDtoFirst.getUnitPrice()) // 单价 + .setDispenseQuantity(minQuantity) // 发放数量 + .setUnitCode(orgDeviceDtoFirst.getUnitCode()) // 单位 + .setMinUnitCode(minUnitCode) // 最小单位 + .setPartPercent(partPercent) // 拆零比 + .setUnitCode_dictText(orgDeviceDtoFirst.getUnitCode_dictText()) // 单位文字 + .setSourceLocationId(Long.valueOf(sourceLocationId)) // 发放地点 + .setDispenseIdList(dispenseIdList) // 发放id列表 + .setUnitList(unitList); // 单位列表 + + orgDeviceSummaryFromDtoList.add(orgDeviceSummaryFromDto); + }); + + List itemIdList = orgDeviceSummaryFromDtoList.stream().map(OrgDeviceSummaryFromDto::getItemId).toList(); + List inventoryItemList = inventoryItemService.selectInventoryByItemIdList(itemIdList, 1); + for (InventoryItem inventoryItem : inventoryItemList) + for (OrgDeviceSummaryFromDto orgDeviceSummaryFromDto : orgDeviceSummaryFromDtoList) + if (orgDeviceSummaryFromDto.getItemId().equals(inventoryItem.getItemId()) + && orgDeviceSummaryFromDto.getLotNumber().equals(inventoryItem.getLotNumber()) + && orgDeviceSummaryFromDto.getSourceLocationId().equals(inventoryItem.getLocationId())) { + // 库存数量 + orgDeviceSummaryFromDto.setQuantity(inventoryItem.getQuantity()); + // 库存id + orgDeviceSummaryFromDto.setInventoryItemId(inventoryItem.getId()); + } + + return R.ok(orgDeviceSummaryFromDtoList); + } + + /** + * 科室耗材汇总 + * + * @return 科室耗材汇总单 + */ + @Override + public R orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam) { + // 申请时间 + Date now = DateUtils.getNowDate(); + // 申请人 + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 汇总单据号 + String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_SUMMARY_NO.getPrefix(), 4); + + // 数量 + BigDecimal stockTakeQuantity = orgDeviceSummaryParam.getStockTakeQuantity(); + // 使用单位 + String useUnitCode = orgDeviceSummaryParam.getUseUnitCode(); + // 最小单位 + String minUnitCode = orgDeviceSummaryParam.getMinUnitCode(); + // 拆零比 + BigDecimal partPercent = orgDeviceSummaryParam.getPartPercent(); + // 发放id列表 + List dispenseIdList = orgDeviceSummaryParam.getDispenseIdList(); + + if (orgDeviceSummaryParam.getInventoryItemId() == null) { + return R.ok("未匹配到库存"); + } + List inventoryItemList = new ArrayList<>(); + // 获取库存信息 + InventoryItem inventoryItem = inventoryItemMapper.selectById(orgDeviceSummaryParam.getInventoryItemId()); + if (inventoryItem != null) { + if (PublicationStatus.ACTIVE.getValue().equals(inventoryItem.getInventoryStatusEnum())) { + // 库存数量判定 + if (useUnitCode.equals(inventoryItem.getUnitCode())) { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 + BigDecimal quantity = inventoryItem.getQuantity().subtract(stockTakeQuantity); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail("当前库存数量不足"); + } else { + inventoryItem.setQuantity(quantity); + } + } else { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) + BigDecimal quantity = inventoryItem.getQuantity().subtract(partPercent.multiply(stockTakeQuantity)); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail("当前库存数量不足"); + } else { + inventoryItem.setQuantity(quantity); + } + } + inventoryItemList.add(inventoryItem); + } + // 库存更新 + inventoryItemService.updateBatchById(inventoryItemList); + // 添加汇总单 + Long supplyRequestId = supplyRequestService.createDeviceSummarySupplyRequest( + orgDeviceSummaryParam.getItemId(), orgDeviceSummaryParam.getSourceLocationId(), + orgDeviceSummaryParam.getLotNumber(), stockTakeQuantity, minUnitCode, practitionerId, now, busNo); + supplyDeliveryService.createDeviceSummarySupplyDelivery(orgDeviceSummaryParam.getItemId(), + orgDeviceSummaryParam.getLotNumber(), stockTakeQuantity, minUnitCode, supplyRequestId); + + // 耗材发放状态更新 + deviceDispenseService.updateDispenseStatusSummarized(dispenseIdList, busNo); + return R.ok("盘点成功"); + } + return R.fail("未找到对应库存数据"); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/ATDManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/ATDManageController.java index 013282e2..c62aa97e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/ATDManageController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/ATDManageController.java @@ -85,6 +85,17 @@ public class ATDManageController { return atdManageAppService.getAdmissionPatientInfo(encounterId); } + /** + * 住院患者待处理信息列表 + * + * @param encounterId 住院id + * @return 待处理信息列表 + */ + @GetMapping(value = "/patient-pending") + public R getInPatientPendingList(Long encounterId) { + return atdManageAppService.getInPatientPendingList(encounterId); + } + /** * 入科床位分配 * @@ -95,4 +106,26 @@ public class ATDManageController { public R admissionBedAssignment(@RequestBody AdmissionPatientInfoDto admissionPatientInfoDto) { return atdManageAppService.admissionBedAssignment(admissionPatientInfoDto); } + + /** + * 转科 + * + * @param encounterId 住院id + * @return 结果 + */ + @PutMapping(value = "/transfer-department") + public R transferDepartment(Long encounterId) { + return atdManageAppService.transferDepartment(encounterId); + } + + /** + * 出院 + * + * @param encounterId 住院id + * @return 结果 + */ + @PutMapping(value = "/hospital-discharge") + public R hospitalDischarge(Long encounterId) { + return atdManageAppService.hospitalDischarge(encounterId); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/AdviceProcessController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/AdviceProcessController.java index c7703b1e..eaec376b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/AdviceProcessController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/AdviceProcessController.java @@ -107,7 +107,7 @@ public class AdviceProcessController { * @param adviceExecuteParam 取消执行参数 * @return 操作结果 */ - @PostMapping(value = "/advice-cancel") + @PutMapping(value = "/advice-cancel") public R adviceCancel(@RequestBody AdviceExecuteParam adviceExecuteParam) { return adviceProcessAppService.adviceCancel(adviceExecuteParam); } @@ -118,8 +118,8 @@ public class AdviceProcessController { * @param adviceExecuteParam 不执行参数 * @return 操作结果 */ - @PostMapping(value = "/advice-void") - public R adviceVoid(AdviceExecuteParam adviceExecuteParam) { + @PutMapping(value = "/advice-void") + public R adviceVoid(@RequestBody AdviceExecuteParam adviceExecuteParam) { return adviceProcessAppService.adviceVoid(adviceExecuteParam); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/MedicineSummaryController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/MedicineSummaryController.java index 4d8ccd7f..8b835c8a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/MedicineSummaryController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/MedicineSummaryController.java @@ -5,12 +5,12 @@ import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import com.openhis.web.inhospitalnursestation.appservice.IMedicineSummaryAppService; -import com.openhis.web.inhospitalnursestation.dto.InpatientMedicinePrescriptionInfoDto; import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; -import com.openhis.web.inhospitalnursestation.dto.InpatientMedicineSearchParam; +import com.openhis.web.inhospitalnursestation.appservice.IMedicineSummaryAppService; +import com.openhis.web.inhospitalnursestation.dto.DispenseFormSearchParam; +import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -28,64 +28,74 @@ import lombok.extern.slf4j.Slf4j; public class MedicineSummaryController { @Resource - public IMedicineSummaryAppService medicineCollectionService; + public IMedicineSummaryAppService medicineSummaryAppService; /** - * 分页查询在科病人列表 + * 查询发药单信息 * - * @param searchParam 查询条件 - * @param searchKey 模糊查询关键字 + * @param dispenseFormSearchParam 查询条件 * @param pageNo 当前页码 * @param pageSize 查询条数 - * @param request 请求数据 - * @return 发药病人列表 + * @param request 请求 + * @return 发药单信息 */ - @GetMapping("/encounter-list") - public R getEncounterInfoList(InpatientMedicineSearchParam searchParam, String searchKey, + @GetMapping(value = "/dispensing-form") + public R getMedicineDispenseFormPage(DispenseFormSearchParam dispenseFormSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return medicineCollectionService.getEncounterInfoListPage(searchParam, searchKey, pageNo, pageSize, request); + return medicineSummaryAppService.getMedicineDispenseFormPage(dispenseFormSearchParam, pageNo, pageSize, + request); } /** - * 医嘱查询 + * 查询药品汇总单 * - * @param searchParam 查询条件 - * @param searchKey 模糊查询关键字 + * @param dispenseFormSearchParam 查询条件 * @param pageNo 当前页码 * @param pageSize 查询条数 - * @param request 请求数据 + * @param searchKey 模糊查询关键字 + * @param request 请求 + * @return 药品汇总单 */ - @GetMapping("/advice-list") - public R getPatientInfoList(InpatientMedicineSearchParam searchParam, String searchKey, + @GetMapping(value = "/summary-form") + public R getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return medicineCollectionService.getPrescriptionInfo(searchParam, searchKey, pageNo, pageSize, request); + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey, + HttpServletRequest request) { + return medicineSummaryAppService.getMedicineSummaryFormPage(dispenseFormSearchParam, pageNo, pageSize, + searchKey, request); } /** - * 显示汇总发药单(生成之前的确认,此刻还没生成汇总单) + * 查询药品汇总单详情 * - * @param searchParam 查询条件 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @return 处理结果 + * @param summaryNo 汇总单号 + * @return 药品汇总单详情 */ - @GetMapping("/show-medicine-summary") - public R showMedicineSummary(@RequestBody List searchParam, - @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return medicineCollectionService.showMedicineSummary(searchParam, pageNo, pageSize); + @GetMapping(value = "/summary-form-detail") + public R getMedicineSummaryFormDetail(String summaryNo) { + return medicineSummaryAppService.getMedicineSummaryFormDetail(summaryNo); } /** * 生成汇总发药单 * - * @param prescriptionInfo 汇总发药单 + * @param medicineSummaryParamList 汇总发药申请参数 * @return 处理结果 */ @PostMapping("/medicine-summary") - public R medicineSummary(@RequestBody List prescriptionInfo) { - return medicineCollectionService.medicineSummary(prescriptionInfo); + public R medicineSummary(@RequestBody List medicineSummaryParamList) { + return medicineSummaryAppService.medicineSummary(medicineSummaryParamList); + } + + /** + * 取消汇总 + * + * @param summaryNo 汇总单号 + * @return 处理结果 + */ + @PutMapping("/cancel-summary") + public R cancelSummary(String summaryNo) { + return medicineSummaryAppService.cancelSummary(summaryNo); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/NurseBillingController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/NurseBillingController.java new file mode 100644 index 00000000..5895906a --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/NurseBillingController.java @@ -0,0 +1,69 @@ +package com.openhis.web.inhospitalnursestation.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.regdoctorstation.dto.RegAdviceSaveParam; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author whm + * @date 2025/11/10 16:00 + * @description 住院护士 患者划价、医嘱计费 + */ + +@RestController +@RequestMapping("/inhospitalnursestation/innursebilling") +@Slf4j +@AllArgsConstructor +public class NurseBillingController { + // TODO: Implement InNurseBillingController + /* + * 新增住院护士划价 + * @return + */ + public R addInNurseBilling(RegAdviceSaveParam regAdviceSaveParam) { + return R.ok(); + } + /* + * 住院护士 划价列表 根据护士encounterId查询 + * @return + */ + public R getBillingListByEncounterId() { + return R.ok(); + } + /* + * 住院护士撤销划价 + * @return + */ + public R deleteInNurseBilling() { + return R.ok(); + } + /* + * 医嘱计费添加 诊疗 耗材 + */ + public R addOrderBilling() { + return R.ok(); + } + /* + * 医嘱计费删除 诊疗 耗材 + */ + public R deleteOrderBilling() { + return R.ok(); + } + /* + * 医嘱计费修改 诊疗 耗材 + */ + public R updateOrderBilling() { + return R.ok(); + } + /* + 根据医嘱id查询已计费的 耗材列表 + * @return + */ + public R getOrderBillingByRequestId() { + return R.ok(); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/OrgDeviceStockTakeController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/OrgDeviceStockTakeController.java new file mode 100644 index 00000000..97f10e2c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/controller/OrgDeviceStockTakeController.java @@ -0,0 +1,59 @@ +package com.openhis.web.inhospitalnursestation.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.inhospitalnursestation.appservice.IOrgDeviceStockTakeAppService; +import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryParam; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +/** + * 科室耗材盘点 + * + * @author wuyan + * @date 2025/11/05 + */ +@RestController +@RequestMapping("/nurse-station/orgdevice-stocktake") +@Slf4j +@AllArgsConstructor +public class OrgDeviceStockTakeController { + + @Resource + private IOrgDeviceStockTakeAppService orgDeviceStockTakeService; + + /** + * 查询科室耗材汇总 + * + * @param orgDeviceSummaryParam 查询条件 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求 + * @return 科室耗材汇总单 + */ + @GetMapping(value = "/summary-from") + public R getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, String startTime, + String endTime, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey, + HttpServletRequest request) { + return orgDeviceStockTakeService.getOrgDeviceSummaryFromPage(orgDeviceSummaryParam, startTime, endTime, pageNo, + pageSize, searchKey, request); + } + + /** + * 科室耗材汇总 + * + * @return 科室耗材汇总单 + */ + @PutMapping(value = "/orgdevice-summary") + public R orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam) { + return orgDeviceStockTakeService.orgDeviceSummary(orgDeviceSummaryParam); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteDetailParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteDetailParam.java index 9a2456fc..23cac9a2 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteDetailParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/AdviceExecuteDetailParam.java @@ -25,6 +25,12 @@ public class AdviceExecuteDetailParam { @JsonSerialize(using = ToStringSerializer.class) private Long requestId; + /** 就诊Id */ + private Long encounterId; + + /** 患者Id */ + private Long patientId; + /** 账号id */ @JsonSerialize(using = ToStringSerializer.class) private Long accountId; @@ -39,6 +45,9 @@ public class AdviceExecuteDetailParam { /** 医嘱请求所在表 */ private String adviceTable; + /** 组号 */ + private Long groupId; + /** 执行时间点集合 */ private List executeTimes; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/DispenseFormSearchParam.java similarity index 59% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineSearchParam.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/DispenseFormSearchParam.java index bdf0bd3b..c4406c15 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineSearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/DispenseFormSearchParam.java @@ -5,7 +5,6 @@ package com.openhis.web.inhospitalnursestation.dto; import java.io.Serializable; import java.util.Date; -import java.util.List; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -16,35 +15,34 @@ import lombok.experimental.Accessors; /** * 患者列表查询条件 * - * @author yuxj + * @author zwh * @date 2025-06-03 */ @Data @Accessors(chain = true) -public class InpatientMedicineSearchParam implements Serializable { +public class DispenseFormSearchParam implements Serializable { - /** 科室 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long organizationId; + /** 汇总状态 */ + private Integer SummaryStatus; + + /** 中药标识 */ + private Integer tcmFlag; /** 医嘱类型 */ - private Integer therapyEnum; + private Integer therapyEnum; - /** - * 领药至哪天 - * */ - private Date plannedDispenseTime; - - /** 就诊id */ + /** 就诊ids */ @JsonSerialize(using = ToStringSerializer.class) - private List encounterIdList; + private String encounterIds; - /** 发放id */ + /** 发放药房id */ @JsonSerialize(using = ToStringSerializer.class) - private Long dispenseId; + private Long locationId; - /** - * 项目表 - */ - private String itemTable; + /** 执行时间 */ + private Date exeTime; + + /** 汇总人id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long applicantId; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceParam.java index 3a363cc2..3b11a4d8 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceParam.java @@ -3,8 +3,6 @@ */ package com.openhis.web.inhospitalnursestation.dto; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import lombok.experimental.Accessors; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineEncounterInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineEncounterInfoDto.java deleted file mode 100644 index 7a4f4c91..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineEncounterInfoDto.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.inhospitalnursestation.dto; - -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 yuxj - * @date 2025-06-03 - */ -@Data -@Accessors(chain = true) -public class InpatientMedicineEncounterInfoDto { - - /** 科室 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long organizationId; - - /** 科室 */ - private String organizationName; - - /** 就诊id */ - @JsonSerialize(using = ToStringSerializer.class) - private Long encounterId; - /** 住院号 */ - private String busNo; - - /** 患者姓名 */ - private String patientName; - - /** 拼音码 */ - private String patientPyStr; - - /** 五笔码 */ - private String patientWbStr; - - /** 性别 */ - private Integer genderEnum; - private String genderEnum_enumText; - - /** 生日 */ - private Date birthDate; - - /** 年龄 */ - private String age; - - /** 床位 */ - private String inpatientBed; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineInitDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineInitDto.java deleted file mode 100644 index 77586762..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicineInitDto.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.inhospitalnursestation.dto; - -import java.util.List; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.openhis.administration.domain.Practitioner; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - *住院领药初期dto - * - * @author yuxj - * @date 2025-06-03 - */ -@Data -@Accessors(chain = true) -public class InpatientMedicineInitDto { - - /** 科室列表 */ - private List departmentOptions; - /** 领药人列表 */ - private List applicantOptions; - - /** 发药状态 */ - private List dispenseStatusOptions; - - @Data - public static class LongOptions { - @JsonSerialize(using = ToStringSerializer.class) - private Long value; - private String label; - - public LongOptions(Long value, String label) { - this.value = value; - this.label = label; - } - } - - @Data - public static class IntegerOptions { - private Integer value; - private String label; - - public IntegerOptions(Integer value, String label) { - this.value = value; - this.label = label; - } - } -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicinePrescriptionInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicinePrescriptionInfoDto.java deleted file mode 100644 index 634ec378..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientMedicinePrescriptionInfoDto.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.inhospitalnursestation.dto; - -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 lombok.Data; -import lombok.experimental.Accessors; - -/** - * 医嘱列表 - * - * @author yuxj - * @date 2025-06-03 - */ -@Data -@Accessors(chain = true) -public class InpatientMedicinePrescriptionInfoDto { - - /** - * 药品发放id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long dispenseId; - - /** - * 药品发放id - */ - private String dispenseIds; - - /** - * 治疗类型 - */ - private Integer therapyEnum; - private String therapyEnum_enumText; - - /** - * 预定发药时间 - */ - private Date plannedDispenseTime; - - /** - * 就诊id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long encounterId; - - /** - * 患者姓名 - */ - private String patientName; - - /** - * 发放状态 - */ - private Integer statusEnum; - private String statusEnum_enumText; - - /** - * 项目表 - */ - private String itemTable; - - /** - * 项目id - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long itemId; - - /** - * 项目名 - */ - private String itemName; - - /** - * 请求数量 - */ - private Integer quantity; - - /** - * 请求单位编码 - */ - @Dict(dictCode = "unit_code") - private String unitCode; - private String unitCode_dictText; - - /** - * 发放地点 - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long locationId; - /** - * 发放地点 - */ - private String locationName; - /** - * 地点类型 - */ - private Integer locationEnum; - private String locationEnum_enumText; - - /** - * 批号 - */ - private String lotNumber; - /** - * 规格 - */ - private String totalVolume; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineDispenseFormDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineDispenseFormDto.java new file mode 100644 index 00000000..be201efb --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineDispenseFormDto.java @@ -0,0 +1,177 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inhospitalnursestation.dto; + +import java.math.BigDecimal; +import java.util.Date; +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; + +/** + * 领药单信息 + * + * @author zwh + * @date 2025-10-17 + */ +@Data +@Accessors(chain = true) +public class MedicineDispenseFormDto { + + /** 住院患者id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** + * 诊断定义名称 + */ + private String conditionDefinitionName; + + /** + * 分组id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long groupId; + + /** + * 医嘱id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long adviceId; + + /** 医嘱名称 */ + private String adviceName; + + /** + * 项目id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** + * 规格 + */ + private String volume; + + /** 产品批号 */ + private String lotNumber; + + /** 请求数量 */ + private Integer quantity; + + /** 请求单位编码 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 是否皮试 */ + private Integer skinTestFlag; + private String skinTestFlag_enumText; + + /** 是否为注射药物 */ + private Integer injectFlag; + private String injectFlag_enumText; + + /** + * 用法 + */ + @Dict(dictCode = "method_code") + private String methodCode; + private String methodCode_dictText; + + /** + * 使用频次 + */ + @Dict(dictCode = "rate_code") + private String rateCode; + private String rateCode_dictText; + + /** + * 单次剂量 + */ + private BigDecimal dose; + + /** 剂量单位 */ + @Dict(dictCode = "unit_code") + private String doseUnitCode; + private String doseUnitCode_dictText; + + /** + * 物理位置id | 可能是 发药药房id,耗材房id,执行科室id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long positionId; + + /** + * 物理位置| 可能是 发药药房,耗材房,执行科室 + */ + private String positionName; + + /** + * 中药付数 + */ + private Integer chineseHerbsDoseQuantity; + + /** + * 代煎标识 | 0:否 , 1:是 + */ + private Integer sufferingFlag; + + /** + * 中药标识 | 0:否 , 1:是 + */ + private Integer tcmFlag; + + /** + * 排序号 + */ + private Integer sortNumber; + + /** 医嘱类型 */ + private Integer therapyEnum; + private String therapyEnum_enumText; + + /** 住院号 */ + private String BusNo; + + /** 患者名称 */ + private String patientName; + + /** 床位名称 */ + private String bedName; + + /** 性别 */ + private Integer genderEnum; + private String genderEnum_enumText; + + /** + * 生日 + */ + private Date birthDate; + + /** + * 年龄 + */ + private String age; + + /** 费别 */ + private String contractName; + + /** 诊断 */ + private String conditionNames; + + /** 住院医生 */ + private String admittingDoctorName; + + /** 余额 */ + private BigDecimal balanceAmount; + + /** 汇总参数list */ + List medicineSummaryParamList; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryFormDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryFormDto.java new file mode 100644 index 00000000..6ce49de4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryFormDto.java @@ -0,0 +1,56 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inhospitalnursestation.dto; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 汇总单dto + * + * @author zwh + * @date 2025-06-03 + */ +@Data +@Accessors(chain = true) +public class MedicineSummaryFormDto { + + /** 汇总单号 */ + private String busNo; + + /** 汇总人id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long applicantId; + + /** 汇总人 */ + private String applicantName; + + /** 领药人id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long receiverId; + + /** 领药人 */ + private String receiverName; + + /** 汇总时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date applyTime; + + /** 发放状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 发放药房 */ + private String locationName; + + /** 发放时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private String dispenseTime; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryInfoDto.java new file mode 100644 index 00000000..c08c1c6b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryInfoDto.java @@ -0,0 +1,59 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inhospitalnursestation.dto; + +import java.math.BigDecimal; + +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 汇总药品信息dto + * + * @author zwh + * @date 2025-06-03 + */ +@Data +@Accessors(chain = true) +public class MedicineSummaryInfoDto { + + /** + * 项目名 + */ + private String itemName; + + /** + * 请求数量 + */ + private Integer itemQuantity; + + /** + * 请求单位 + */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** + * 批号 + */ + private String lotNumber; + + /** + * 规格 + */ + private String totalVolume; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** + * 包装单位 + */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryParam.java new file mode 100644 index 00000000..c7da6415 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/MedicineSummaryParam.java @@ -0,0 +1,53 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inhospitalnursestation.dto; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 药品汇总参数 + * + * @author zwh + * @date 2025-10-21 + */ +@Data +@Accessors(chain = true) +public class MedicineSummaryParam { + + /** + * 领药时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date dispenseTime; + + /** + * 发放id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long dispenseId; + + /** + * 执行id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long procedureId; + + /** + * 发放状态 + */ + private Integer dispenseStatus; + + /** + * 领药人id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long receiverId; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceDto.java new file mode 100644 index 00000000..aa041dab --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceDto.java @@ -0,0 +1,95 @@ +package com.openhis.web.inhospitalnursestation.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; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 科室耗材dto + * + * @author wuyan + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class OrgDeviceDto { + + /** 单据号 */ + private String busNo; + + /** 供应请求id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requestId; + + /** 供应发放id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long dispenseId; + + /** 项目名 */ + private String itemName; + + /** 项目id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 规格 */ + private String totalVolume; + + /** 批号 */ + private String lotNumber; + + /** 请求数 */ + private BigDecimal quantity; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 单价 */ + private BigDecimal unitPrice; + + /** 常规单位 */ + @Dict(dictCode = "unit_code") + private String maxUnitCode; + private String maxUnitCode_dictText; + + /** 最小单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** 发放地点 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + private String sourceLocationName; + + /** 申请科室 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + private String orgName; + + /** 领药人 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long requesterId; + private String requesterName; + + /** 厂家 */ + private String manufacturer; + + /** 申请时间 */ + private Date applyTime; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceSummaryFromDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceSummaryFromDto.java new file mode 100644 index 00000000..1ec942ea --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceSummaryFromDto.java @@ -0,0 +1,75 @@ +package com.openhis.web.inhospitalnursestation.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.common.annotation.Dict; +import com.openhis.web.common.dto.UnitDto; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 科室耗材汇总dto + * + * @author wuyan + * @date 2025-11-05 + */ +@Data +@Accessors(chain = true) +public class OrgDeviceSummaryFromDto { + + /** 项目id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 器材名称 */ + private String name; + + /** 规格 */ + private String totalVolume; + + /** 厂家 */ + private String manufacturer; + + /** 批号 */ + private String lotNumber; + + /** 单价 */ + private BigDecimal unitPrice; + + /** 发放数量 */ + private BigDecimal dispenseQuantity; + + /** 库存数量 */ + private BigDecimal quantity; + + /** 单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 最小单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 发放地点 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + + /** 库存id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long inventoryItemId; + + /** 发放id列表 */ + private List dispenseIdList; + + /** 单位列表 */ + private List unitList; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceSummaryParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceSummaryParam.java new file mode 100644 index 00000000..67ce3349 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/OrgDeviceSummaryParam.java @@ -0,0 +1,59 @@ +package com.openhis.web.inhospitalnursestation.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; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 科室耗材参数 + * + * @author wuayn + * @date 2025-11-07 + */ +@Data +@Accessors(chain = true) +public class OrgDeviceSummaryParam { + + /** 项目id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + + /** 库存id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long inventoryItemId; + + /** 发放数量 */ + private BigDecimal dispenseQuantity; + + /** 盈亏数量 */ + private BigDecimal stockTakeQuantity; + + /** 批号 */ + private String lotNumber; + + /** 发放地点 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + + /** 使用单位 */ + @Dict(dictCode = "unit_code") + private String useUnitCode; + private String useUnitCode_dictText; + + /** 最小单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 发放id列表 */ + private List dispenseIdList; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/InpatientMedicineCollectionMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/InpatientMedicineCollectionMapper.java deleted file mode 100644 index ad0bc00e..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/InpatientMedicineCollectionMapper.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.inhospitalnursestation.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.toolkit.Constants; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.openhis.web.inhospitalnursestation.dto.*; - -@Repository -public interface InpatientMedicineCollectionMapper { - - /** - * 就诊病人列表分页查询 - * - * @param page 分页 - * @param queryWrapper 查询条件 - * @param amb 住院 - * @return 就诊病人列表 - */ - Page selectEncounterInfoListPage( - @Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb); - - /** - * 医嘱列表查询 - * - * @param page 分页 - * @param queryWrapper 查询条件 - * @param encounterIdList 就诊id - * @return 医嘱信息 - */ - Page selectPrescriptionInfoListPage( - @Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, - @Param("encounterIdList") List encounterIdList, - @Param("statusEnum") Integer statusEnum, - @Param("medMedicationDefinition") String medMedicationDefinition, - @Param("admDeviceDefinition") String admDeviceDefinition); - - /** - * 医嘱汇总列表查询 - * - * @param page 分页 - * @param medDispenseIdList 药品发放id - * @param medDispenseIdList 耗材发放id - * @return 医嘱信息 - */ - Page selectPrescriptionSummaryInfoListPage( - @Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, - @Param("dispenseIdList") List medDispenseIdList, - @Param("dispenseIdList") List devDispenseIdList, - @Param("medMedicationDefinition") String medMedicationDispense, - @Param("admDeviceDefinition") String admDeviceDispense); -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/MedicineSummaryAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/MedicineSummaryAppMapper.java new file mode 100644 index 00000000..e9ff5085 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/MedicineSummaryAppMapper.java @@ -0,0 +1,67 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inhospitalnursestation.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.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.web.inhospitalnursestation.dto.DispenseFormSearchParam; +import com.openhis.web.inhospitalnursestation.dto.MedicineDispenseFormDto; +import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryFormDto; +import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryInfoDto; + +@Repository +public interface MedicineSummaryAppMapper { + + /** + * 查询领药列表 + * + * @param page 分页信息 + * @param queryWrapper 查询条件 + * @param completed 医嘱状态:已完成 + * @param active 住院位置状态:使用中 + * @param bed 位置类型:病床 + * @param admittingDoctor 住院医生 + * @param personalCashAccount 个人现金账户 + * @param billable 收费状态:待结算 + * @param billed 收费状态:已结算 + * @param refunded 收费状态:已退费 + * @param summarized 发药状态:已汇总 + * @return 领药列表 + */ + Page selectMedicineDispenseFormPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("completed") Integer completed, @Param("active") Integer active, @Param("bed") Integer bed, + @Param("admittingDoctor") String admittingDoctor, @Param("personalCashAccount") String personalCashAccount, + @Param("billable") Integer billable, @Param("billed") Integer billed, @Param("refunded") Integer refunded, + @Param("summarized") Integer summarized); + + /** + * 查询汇总单分页列表 + * + * @param page 分页信息 + * @param queryWrapper 查询条件 + * @param completed 发药状态:已完成 + * @param inProgress 发药状态:待发药 + * @param summaryDispense 单据类型:汇总发药 + * @return 汇总单列表 + */ + Page selectMedicineSummaryFormPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("completed") Integer completed, @Param("inProgress") Integer inProgress, + @Param("summaryDispense") Integer summaryDispense); + + /** + * 获取汇总单详情 + * + * @param summaryNo 汇总单号 + * @return 汇总单详情 + */ + List selectMedicineSummaryFormDetail(@Param("summaryNo") String summaryNo); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/NurseBillingAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/NurseBillingAppMapper.java new file mode 100644 index 00000000..1bef006f --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/NurseBillingAppMapper.java @@ -0,0 +1,7 @@ +package com.openhis.web.inhospitalnursestation.mapper; + +import org.springframework.stereotype.Repository; + +@Repository +public interface NurseBillingAppMapper { +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/OrgDeviceStockTakeAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/OrgDeviceStockTakeAppMapper.java new file mode 100644 index 00000000..00e8d9a6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/mapper/OrgDeviceStockTakeAppMapper.java @@ -0,0 +1,22 @@ +package com.openhis.web.inhospitalnursestation.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.web.inhospitalnursestation.dto.OrgDeviceDto; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +@Repository +public interface OrgDeviceStockTakeAppMapper { + + /** + * 科室耗材信息列表查询 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 科室耗材信息 + */ + Page selectOrgDeviceInfo(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IInventoryAdjustPriceService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IInventoryAdjustPriceService.java new file mode 100644 index 00000000..e2d7513a --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IInventoryAdjustPriceService.java @@ -0,0 +1,60 @@ +package com.openhis.web.inventorymanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; +import com.openhis.web.adjustprice.dto.AdjustPriceManagerSearchParam; + +/** + * Desc: + * + * @Author raymond + * @Date 14:54 2025/10/23 + * @return + **/ +public interface IInventoryAdjustPriceService { + /** + * Desc: 查询所有 未审核的调价单 + * + * @param adjustPriceManagerSearchParam + * @param pageNo + * @param pageSize + * @param searchKey + * @param request + * @Author raymond + * @Date 14:20 2025/10/23 + * @return com.core.common.core.domain.R + **/ + R getPageByExamineList(AdjustPriceManagerSearchParam adjustPriceManagerSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * Desc: 根据业务单据号 进行审核通过操作 + * + * @param busNo + * @Author raymond + * @Date 18:10 2025/10/18 + * @return com.core.common.core.domain.R + **/ + R updateExamineByApproved(String busNo); + + /** + * Desc: 根据业务单据号 进行审核拒绝操作 + * + * @param busNo + * @Author raymond + * @Date 19:17 2025/10/18 + * @return com.core.common.core.domain.R + **/ + R updateExamineByRejected(String busNo); + + /** + * Desc: 初始化 + * + * @param + * @Author raymond + * @Date 19:22 2025/10/23 + * @return com.core.common.core.domain.R + **/ + R adjustPriceInit(); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/ILossReportFormAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/ILossReportFormAppService.java index 2ce43aea..c7bae117 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/ILossReportFormAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/ILossReportFormAppService.java @@ -3,14 +3,14 @@ */ package com.openhis.web.inventorymanage.appservice; +import java.util.List; + import javax.servlet.http.HttpServletRequest; import com.core.common.core.domain.R; import com.openhis.web.inventorymanage.dto.LossReportFormDto; import com.openhis.web.inventorymanage.dto.LossReportSearchParam; -import java.util.List; - /** * 报损单 appService * @@ -85,6 +85,7 @@ public interface ILossReportFormAppService { * @return 操作结果 */ R withdrawApproval(String busNo); + /** * 报损单据详情 * @@ -95,6 +96,6 @@ public interface ILossReportFormAppService { * @param pageSize 查询条数 * @return 单据详情 */ - R getMonthlySettlementDetail(Long locationId, String startTime, String endTime,Integer pageNo, Integer pageSize); - + R getMonthlySettlementDetail(Long locationId, String startTime, String endTime, Integer pageNo, + Integer pageSize); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailAppService.java new file mode 100644 index 00000000..af35fcf5 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailAppService.java @@ -0,0 +1,76 @@ +package com.openhis.web.inventorymanage.appservice; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.core.common.core.domain.R; +import com.openhis.web.inventorymanage.dto.ProductDetailSearchParam; + +/** + * 库存商品明细 appService + * + * @author yuanzs + * @date 2025-04-24 + */ +public interface IProductDetailAppService { + + /** + * 库存商品明细初始化 + * + * @return 下拉列表值 + */ + R getInit(); + + /** + * 查询库存商品明细分页列表 + * + * @param productDetailSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细分页列表 + */ + R getProductDetailPage(ProductDetailSearchParam productDetailSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request); + + /** + * 操作:停供 + * + * @param inventoryId 库存项目管理ID + * @return 操作结果 + */ + R stopSupplyById(Long inventoryId); + + /** + * 操作:取消停供 + * + * @param inventoryId 库存项目管理ID + * @return 操作结果 + */ + R cancelSupplyById(Long inventoryId); + + + /** + * 库存明细表导出 + * + * @param productDetailSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @param response 响应数据 + */ + void makeExcelFile(ProductDetailSearchParam productDetailSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletRequest request, HttpServletResponse response); + + /** + * 查询库存商品明细统计数据 + * + * @param productDetailSearchParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细统计数据 + */ + R getProductDetailStatistics(ProductDetailSearchParam productDetailSearchParam, String searchKey, HttpServletRequest request); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailsAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailsAppService.java deleted file mode 100644 index 6314a42e..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/IProductDetailsAppService.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.openhis.web.inventorymanage.appservice; - -import javax.servlet.http.HttpServletRequest; - -import com.core.common.core.domain.R; -import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; -import org.springframework.web.bind.annotation.PutMapping; - -/** - * 库存商品明细 appService - * - * @author yuanzs - * @date 2025-04-24 - */ -public interface IProductDetailsAppService { - - /** - * 库存商品明细初始化 - * - * @return 下拉列表值 - */ - R getInit(); - - /** - * 查询库存商品明细分页列表 - * - * @param productDetailsSearchParam 查询条件 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param searchKey 模糊查询关键字 - * @param request 请求数据 - * @return 库存商品明细分页列表 - */ - R getPage(ProductDetailsSearchParam productDetailsSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request); - - /** - * 查询库存商品明细分页列表合计 - * - * @param productDetailsSearchParam 查询条件 - * @param searchKey 模糊查询关键字 - * @return 库存商品明细分页列表合计 - */ - R getPageTotal(ProductDetailsSearchParam productDetailsSearchParam, String searchKey); - /** - * 操作:停供 - * - * @param id 库存项目管理ID - * @return 操作结果 - */ - R stopSupplyById(Long id); - - /** - * 操作:取消停供 - * - * @param id 库存项目管理ID - * @return 操作结果 - */ - R cancelSupplyById(Long id); - - /** - * 操作:效期预警 - * - * @param productDetailsSearchParam 查询条件 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param searchKey 模糊查询关键字 - * @param request 请求数据 - * @return 操作结果 - */ - R expirationWarning(ProductDetailsSearchParam productDetailsSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request); -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/IInventoryAdjustPriceServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/IInventoryAdjustPriceServiceImpl.java new file mode 100644 index 00000000..a01a0ec4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/IInventoryAdjustPriceServiceImpl.java @@ -0,0 +1,208 @@ +package com.openhis.web.inventorymanage.appservice.impl; + +import java.util.Date; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.openhis.administration.domain.ChangePriceRecord; +import com.openhis.administration.domain.ChargeItemDefDetail; +import com.openhis.administration.domain.ChargeItemDefinition; +import com.openhis.administration.dto.ChangePriceDataDto; +import com.openhis.administration.service.IChangePriceRecordService; +import com.openhis.administration.service.IChargeItemDefDetailService; +import com.openhis.administration.service.IChargeItemDefinitionService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.ConditionCode; +import com.openhis.common.enums.DelFlag; +import com.openhis.common.enums.SupplyStatus; +import com.openhis.common.enums.SupplyType; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.common.utils.RedisKeys; +import com.openhis.common.utils.RedisUtil; +import com.openhis.web.adjustprice.dto.AdjustPriceManagerSearchParam; +import com.openhis.web.adjustprice.dto.ChangePricePageDto; +import com.openhis.web.inventorymanage.appservice.IInventoryAdjustPriceService; +import com.openhis.web.inventorymanage.dto.ReceiptApprovalSearchParam; +import com.openhis.web.inventorymanage.dto.ReceiptInitDto; +import com.openhis.web.inventorymanage.mapper.InventoryAdjustPriceMapper; + +/** + * @ClassName IInventoryAdjustPriceServiceImpl + * @Description TODO + * @Author raymond + * @Date 2025/10/23 14:57 + * @Version 1.0 + **/ +@Service +public class IInventoryAdjustPriceServiceImpl implements IInventoryAdjustPriceService { + @Resource + private IChargeItemDefinitionService chargeItemDefinitionService; + @Resource + private IChargeItemDefDetailService chargeItemDefDetailService; + @Resource + private InventoryAdjustPriceMapper inventoryAdjustPriceMapper; + @Resource + private IChangePriceRecordService changePriceRecordService; + @Resource + private RedisUtil redisUtil; + + @Override + public R getPageByExamineList(AdjustPriceManagerSearchParam adjustPriceManagerSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request) { + // 设置模糊查询的字段名 + HashSet searchFields = new HashSet<>(); + searchFields.add(CommonConstants.FieldName.SupplyBusNo); + + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(adjustPriceManagerSearchParam, searchKey, searchFields, request); + // 查询单据分页列表 + Page receiptPage = inventoryAdjustPriceMapper.searchPageByExamine( + new Page<>(pageNo, pageSize), queryWrapper, SupplyStatus.APPROVAL.getValue(), SupplyStatus.AGREE.getValue(), + SupplyStatus.REJECT.getValue(), SupplyType.REQUEST_MEDICATION_CHANGE_PRICE.getValue(), + SupplyType.REQUEST_DEVICE_CHANGE_PRICE.getValue(), SupplyType.REQUEST_ACTIVITY_CHANGE_PRICE.getValue(), + SupplyType.REQUEST_HEALTH_CHANGE_PRICE.getValue()); + + receiptPage.getRecords().forEach(e -> { + e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum())); + // 调价类型 + e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getItemCategoryEnum())); + }); + return R.ok(receiptPage); + } + + @Override + public R updateExamineByRejected(String busNo) { + List changePriceRecordList = + this.changePriceRecordService.searchChangePriceDataForBusNo(busNo); + if (changePriceRecordList.isEmpty()) { + return R.fail(); + } + // 循环将数据进行填充 + for (ChangePriceRecord data : changePriceRecordList) { + if (this.redisUtil.hasKey(RedisKeys.getProductsKey(data.getItemId().toString()))) { + this.redisUtil.del(RedisKeys.getProductsKey(data.getItemId().toString())); + } + } + this.changePriceRecordService.rejectRequest(busNo); + + return R.ok(); + } + + @Override + public R adjustPriceInit() { + ReceiptInitDto initDto = new ReceiptInitDto(); + // 审批状态 + List supplyStatusOptions = Stream.of(SupplyStatus.values()) + .map(supplyStatus -> new ReceiptInitDto.supplyStatusOption(supplyStatus.getValue(), supplyStatus.getInfo())) + .collect(Collectors.toList()); + initDto.setSupplyStatusOptions(supplyStatusOptions); + return R.ok(initDto); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public R updateExamineByApproved(String busNo) { + List changePriceRecordList = + this.changePriceRecordService.searchChangePriceDataForBusNo(busNo); + if (changePriceRecordList.isEmpty()) { + return R.fail(); + } + // 循环将数据进行填充 + for (ChangePriceRecord data : changePriceRecordList) { + if (this.redisUtil.hasKey(RedisKeys.getProductsKey(data.getItemId().toString()))) { + this.redisUtil.del(RedisKeys.getProductsKey(data.getItemId().toString())); + } + } + this.executeBusiness(busNo); + this.changePriceRecordService.agreeRequest(busNo, new Date()); + return R.ok(); + } + + /** + * Desc: 处理审核通过后改价业务 + * + * @Author raymond + * @Date 22:16 2025/10/18 + * @return com.core.common.core.domain.R + **/ + public void executeBusiness(String busNo) { + List changePriceDataDtoList = + this.changePriceRecordService.searchChangePriceRecordDataByBusNo(busNo, SupplyStatus.APPROVAL.getValue()); + // 零售价 + List itemDefDetailRetailList = new LinkedList<>(); + // 进货价 + List itemDefDetailBuyingList = new LinkedList<>(); + // 进货价 + List itemDefDetailPurchaseList = new LinkedList<>(); + for (ChangePriceDataDto data : changePriceDataDtoList) { + // 更新价格主表信息 + ChargeItemDefinition chargeItemDefinition = this.chargeItemDefinitionService.getById(data.getChargeId()); + chargeItemDefinition.setPrice(data.getNewRetailPrice()); + this.chargeItemDefinitionService.updateById(chargeItemDefinition); + // 零售价 + List defDetailRetailList = + this.chargeItemDefDetailService.searchChargeItemDefDetailByIds(chargeItemDefinition.getId(), + ConditionCode.LOT_NUMBER_PRICE.getCode(), data.getLotNumber()); + // 进货价 + List defDetailBuyingList = + this.chargeItemDefDetailService.searchChargeItemDefDetailByIds(chargeItemDefinition.getId(), + ConditionCode.LOT_NUMBER_COST.getCode(), data.getLotNumber()); + // 采购价 + List purchasePriceList = this.chargeItemDefDetailService + .searchChargeItemDefDetailByIds(chargeItemDefinition.getId(), ConditionCode.PURCHASE.getCode(), null); + if (!defDetailRetailList.isEmpty()) { + for (ChargeItemDefDetail detail : defDetailRetailList) { + detail.setDeleteFlag(DelFlag.YES.getCode()); + this.chargeItemDefDetailService.deleteChargeItemDefApp(detail.getId()); + } + ChargeItemDefDetail chargeItemDefDetail = new ChargeItemDefDetail(); + chargeItemDefDetail.setDefinitionId(data.getChargeId()); + chargeItemDefDetail.setConditionCode(ConditionCode.LOT_NUMBER_PRICE.getCode()); + chargeItemDefDetail.setConditionValue(data.getLotNumber()); + chargeItemDefDetail.setAmount(data.getNewRetailPrice()); + itemDefDetailRetailList.add(chargeItemDefDetail); + } + if (!defDetailBuyingList.isEmpty()) { + for (ChargeItemDefDetail detail : defDetailBuyingList) { + detail.setDeleteFlag(DelFlag.YES.getCode()); + this.chargeItemDefDetailService.deleteChargeItemDefApp(detail.getId()); + } + ChargeItemDefDetail chargeItemDefDetail = new ChargeItemDefDetail(); + chargeItemDefDetail.setDefinitionId(data.getChargeId()); + chargeItemDefDetail.setConditionCode(ConditionCode.LOT_NUMBER_COST.getCode()); + chargeItemDefDetail.setConditionValue(data.getLotNumber()); + chargeItemDefDetail.setAmount(data.getNewBuyingPrice()); + itemDefDetailBuyingList.add(chargeItemDefDetail); + } + if (!purchasePriceList.isEmpty()) { + for (ChargeItemDefDetail detail : purchasePriceList) { + detail.setDeleteFlag(DelFlag.YES.getCode()); + this.chargeItemDefDetailService.deleteChargeItemDefApp(detail.getId()); + } + ChargeItemDefDetail chargeItemDefDetail = new ChargeItemDefDetail(); + chargeItemDefDetail.setDefinitionId(data.getChargeId()); + chargeItemDefDetail.setConditionCode(ConditionCode.PURCHASE.getCode()); + chargeItemDefDetail.setAmount(data.getNewBuyingPrice()); + itemDefDetailPurchaseList.add(chargeItemDefDetail); + } + } + // 批量插入价格子表 + this.chargeItemDefDetailService.saveOrUpdateBatch(itemDefDetailRetailList); + this.chargeItemDefDetailService.saveOrUpdateBatch(itemDefDetailBuyingList); + this.chargeItemDefDetailService.saveOrUpdateBatch(itemDefDetailPurchaseList); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailAppServiceImpl.java new file mode 100644 index 00000000..3d411068 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailAppServiceImpl.java @@ -0,0 +1,450 @@ +package com.openhis.web.inventorymanage.appservice.impl; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.core.common.utils.poi.ExcelUtil; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.core.domain.R; +import com.core.common.core.domain.model.LoginUser; +import com.core.common.enums.TenantOptionDict; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.core.web.util.TenantOptionUtil; +import com.openhis.administration.domain.ChargeItemDefDetail; +import com.openhis.administration.service.IChargeItemDefDetailService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbChrgitmLv; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.web.inventorymanage.appservice.IProductDetailAppService; +import com.openhis.web.inventorymanage.dto.ProductDetailInitDto; +import com.openhis.web.inventorymanage.dto.ProductDetailPageDto; +import com.openhis.web.inventorymanage.dto.ProductDetailSearchParam; +import com.openhis.web.inventorymanage.mapper.ProductDetailAppMapper; +import com.openhis.web.reportmanage.utils.ExcelFillerUtil; +import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.mapper.InventoryItemMapper; + +/** + * 库存商品明细 impl + * + * @author yuanzs + * @date 2025-04-24 + */ +@Service +public class ProductDetailAppServiceImpl extends ServiceImpl + implements IProductDetailAppService { + + @Resource + private ProductDetailAppMapper productDetailsMapper; + + @Resource + private IChargeItemDefDetailService chargeItemDefDetailService; + + /** + * 库存商品明细初始化 + * + * @return 下拉列表值 + */ + @Override + public R getInit() { + ProductDetailInitDto productDetailInitDto = new ProductDetailInitDto(); + // 医保等级List + List chrgitmLvOptions = Stream.of(InsuranceLevel.values()) + .map(status -> new ProductDetailInitDto.statusEnumOption(status.getValue(), status.getInfo())) + .collect(Collectors.toList()); + productDetailInitDto.setChrgitmLvOptions(chrgitmLvOptions); + return R.ok(productDetailInitDto); + } + + /** + * 查询库存商品明细分页列表 + * + * @param productDetailSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细分页列表 + */ + @Override + public R getProductDetailPage(ProductDetailSearchParam productDetailSearchParam, Integer pageNo, + Integer pageSize, String searchKey, HttpServletRequest request) { + // 项目类型 + Integer categoryCode = productDetailSearchParam.getCategoryCode(); + // 库存是否为零 + Integer zeroFlag = productDetailSearchParam.getZeroFlag(); + // 过期天数 + Integer remainingDays = productDetailSearchParam.getRemainingDays(); + // 所在库房 + List locationIds = productDetailSearchParam.getLocationIds(); + // 供应商 + List supplierIds = productDetailSearchParam.getSupplierIds(); + productDetailSearchParam.setCategoryCode(null).setZeroFlag(null).setRemainingDays(null).setLocationIds(null) + .setSupplierIds(null); + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper( + productDetailSearchParam, searchKey, new HashSet<>(Arrays.asList(CommonConstants.FieldName.ItemName, + CommonConstants.FieldName.BusNo, CommonConstants.FieldName.PyStr, CommonConstants.FieldName.WbStr)), + request); + // 根据不同分类拼接查询条件 + if (categoryCode != null) { + if (categoryCode.equals(ItemCategoryCode.CHINESE_PATENT_DRUG.getValue()) + || categoryCode.equals(ItemCategoryCode.WESTERN_MEDICINE.getValue()) + || categoryCode.equals(ItemCategoryCode.EXTERNALLY_PROCURED_DRUGS.getValue()) + || categoryCode.equals(ItemCategoryCode.CHINESE_HERBAL_MEDICINE.getValue())) { + queryWrapper.eq(CommonConstants.FieldName.ItemTable, + CommonConstants.TableName.MED_MEDICATION_DEFINITION); + queryWrapper.eq(CommonConstants.FieldName.MedCategoryCode, categoryCode.toString()); + } else if (categoryCode.equals(ItemCategoryCode.DEVICE.getValue())) { + queryWrapper.eq(CommonConstants.FieldName.ItemTable, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + } + } + // 库存是否为零 + if (zeroFlag != null) { + if (Whether.YES.getValue().equals(zeroFlag)) { + queryWrapper.eq(CommonConstants.FieldName.Quantity, BigDecimal.ZERO); + } else { + queryWrapper.gt(CommonConstants.FieldName.Quantity, BigDecimal.ZERO); + } + } + // 所在位置 + if (locationIds != null && !locationIds.isEmpty()) { + queryWrapper.in(CommonConstants.FieldName.LocationId, locationIds); + } + // 供应商 + if (supplierIds != null && !supplierIds.isEmpty()) { + queryWrapper.in(CommonConstants.FieldName.SupplierId, supplierIds); + } + // 过期天数 + if (remainingDays != null) { + queryWrapper.le(CommonConstants.FieldName.RemainingDays, remainingDays); + } + // 查询库存商品明细分页列表 + Page productDetailsPage = productDetailsMapper.selectProductDetailsPage( + new Page<>(pageNo, pageSize), queryWrapper, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION, ConditionCode.LOT_NUMBER_COST.getCode()); + // 库存明细 + List productDetailList = productDetailsPage.getRecords(); + if (productDetailList != null && !productDetailList.isEmpty()) { + // 医嘱定价来源 + String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE); + // 批次售价需查询定价子表 + if (OrderPricingSource.BATCH_SELLING_PRICE.getCode().equals(orderPricingSource)) { + // 收集所有定价ID + List chargeItemDefIdList = + productDetailList.stream().map(ProductDetailPageDto::getChargeItemDefId).filter(Objects::nonNull) + .distinct().collect(Collectors.toList()); + + // 查询批次售价信息 + if (!chargeItemDefIdList.isEmpty()) { + List lotNumberPriceList = + chargeItemDefDetailService.getLotNumberPriceByDefIds(chargeItemDefIdList); + if (lotNumberPriceList != null && !lotNumberPriceList.isEmpty()) { + // 创建批次号到售价的映射 + Map lotPriceMap = + lotNumberPriceList.stream().collect(Collectors.toMap(ChargeItemDefDetail::getConditionValue, + ChargeItemDefDetail::getAmount, (existing, replacement) -> existing)); // 处理重复键的情况 + + // 更新原始列表中的售价 + for (ProductDetailPageDto productDetail : productDetailList) { + BigDecimal price = lotPriceMap.get(productDetail.getLotNumber()); + if (price != null) { + productDetail.setTotalSalePrice(price); + } + } + } + } + } + + for (ProductDetailPageDto productDetailPageDto : productDetailList) { + // 医保等级 + productDetailPageDto.setChrgitmLv_enumText( + EnumUtils.getInfoByValue(YbChrgitmLv.class, productDetailPageDto.getChrgitmLv())); + // 停供状态 + productDetailPageDto.setInventoryStatusEnum_enumText( + EnumUtils.getInfoByValue(PublicationStatus.class, productDetailPageDto.getInventoryStatusEnum())); + + // 计算包装单位数量 + BigDecimal[] results = + productDetailPageDto.getQuantity().divideAndRemainder(productDetailPageDto.getPartPercent()); + // 整数 + productDetailPageDto.setNumber(results[0]); + // 余数 + productDetailPageDto.setRemainder(results[1]); + + // 计算采购总额 + if (productDetailPageDto.getPurchasePrice() != null) { + productDetailPageDto + .setTotalPurchasePrice(productDetailPageDto.getPurchasePrice().multiply(results[0]) + .add(productDetailPageDto.getPurchasePrice() + .divide(productDetailPageDto.getPartPercent(), 6, RoundingMode.HALF_UP) + .multiply(results[1]))); + } + + // 计算售价总额 + if (productDetailPageDto.getSalePrice() != null) { + productDetailPageDto.setTotalSalePrice(productDetailPageDto.getSalePrice().multiply(results[0]) + .add(productDetailPageDto.getSalePrice() + .divide(productDetailPageDto.getPartPercent(), 6, RoundingMode.HALF_UP) + .multiply(results[1]))); + } + } + } + return R.ok(productDetailsPage); + } + + /** + * 查询库存商品明细统计数据 + * + * @param productDetailSearchParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细统计数据 + */ + @Override + public R getProductDetailStatistics(ProductDetailSearchParam productDetailSearchParam, String searchKey, + HttpServletRequest request) { + // 查询库存商品明细分页列表 + R result = this.getProductDetailPage(productDetailSearchParam, 1, 30000, searchKey, request); + ProductDetailPageDto productDetail = new ProductDetailPageDto(); + if (result != null && result.getData() != null) { + Page productDetailPage = (Page)result.getData(); + List productDetailList = productDetailPage.getRecords(); + // 统计库房总金额 + productDetail + .setPurchasePriceStatistics(productDetailList.stream().map(ProductDetailPageDto::getTotalPurchasePrice) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)) + .setSalePriceStatistics(productDetailList.stream().map(ProductDetailPageDto::getTotalSalePrice) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)); + } + return R.ok(productDetail); + } + + /** + * 操作:停供 + * + * @param inventoryId 库存项目管理ID + * @return 操作结果 + */ + @Override + public R stopSupplyById(Long inventoryId) { + + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 当前登录账号 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // 停供按钮压下,更新库存项目管理表的库存状态:已停供 + int updateCount = baseMapper.update(null, + new LambdaUpdateWrapper().eq(InventoryItem::getId, inventoryId) + .set(InventoryItem::getUpdateTime, now).set(InventoryItem::getUpdateBy, loginUser.getUserId()) + .set(InventoryItem::getInventoryStatusEnum, PublicationStatus.RETIRED.getValue())); + + return updateCount > 0 ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 操作:取消停供 + * + * @param inventoryId 库存项目管理ID + * @return 操作结果 + */ + @Override + public R cancelSupplyById(Long inventoryId) { + + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 当前登录账号 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // 取消停供按钮压下,更新库存项目管理表的库存状态:未停供 + int updateCount = baseMapper.update(null, + new LambdaUpdateWrapper().eq(InventoryItem::getId, inventoryId) + .set(InventoryItem::getUpdateTime, now).set(InventoryItem::getUpdateBy, loginUser.getUserId()) + .set(InventoryItem::getInventoryStatusEnum, PublicationStatus.ACTIVE.getValue())); + + return updateCount > 0 ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) + : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + + /** + * 库存明细表导出 + * + * @param productDetailSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @param response 响应数据 + */ + public void makeExcelFile(ProductDetailSearchParam productDetailSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request, HttpServletResponse response) { + R result = this.getProductDetailPageX(productDetailSearchParam, 1, 10000, searchKey, request); + if (result != null && result.getData() != null) { + Page pageData = (Page)result.getData(); + List dataList = pageData.getRecords(); + + try { + for(ProductDetailPageDto productDetailPageDto : dataList) { + // 获取单位 + String unitCode = productDetailPageDto.getUnitCodeDictText(); + String minUnitCode = productDetailPageDto.getMinUnitCodeDictText(); + //获取数量 + BigDecimal number = productDetailPageDto.getNumber(); + BigDecimal remainder = productDetailPageDto.getRemainder(); + // 拼接 + if (remainder.compareTo(BigDecimal.ZERO) > 0) { + productDetailPageDto.setNumber_text(number.setScale(0, RoundingMode.HALF_UP) + unitCode + remainder.setScale(0, RoundingMode.HALF_UP) + minUnitCode); + } else { + productDetailPageDto.setNumber_text(number.setScale(0, RoundingMode.HALF_UP) + unitCode); + } + productDetailPageDto.setQuantity_text(productDetailPageDto.getQuantity().setScale(0, RoundingMode.HALF_UP) + minUnitCode); + + // 金额字段拼接 ‘元’ + BigDecimal purchasePrice = productDetailPageDto.getPurchasePrice(); + BigDecimal salePrice = productDetailPageDto.getSalePrice(); + BigDecimal totalPurchasePrice = productDetailPageDto.getTotalPurchasePrice(); + BigDecimal totalSalePrice = productDetailPageDto.getTotalSalePrice(); + if (salePrice != null) { + productDetailPageDto.setExcelSalePrice(salePrice.setScale(2, RoundingMode.HALF_UP) + "元"); + } + + if (purchasePrice != null) { + productDetailPageDto.setExcelPurchasePrice(purchasePrice.setScale(2, RoundingMode.HALF_UP) + "元"); + } + + if (totalPurchasePrice != null) { + productDetailPageDto.setExcelTotalPurchasePrice(totalPurchasePrice.setScale(2, RoundingMode.HALF_UP) + "元"); + } + + if (totalSalePrice != null) { + productDetailPageDto.setExcelTotalSalePrice(totalSalePrice.setScale(2, RoundingMode.HALF_UP) + "元"); + } + + // 判断项目类别 + String devCategoryCodeDictText = productDetailPageDto.getDevCategoryCodeDictText(); + String medCategoryCodeDictText = productDetailPageDto.getMedCategoryCodeDictText(); + String categoryCodeDictText = devCategoryCodeDictText == null ? medCategoryCodeDictText : devCategoryCodeDictText; + productDetailPageDto.setCategoryCodeDictText(categoryCodeDictText); + } + + //导出 + ExcelUtil util = new ExcelUtil(ProductDetailPageDto.class); + util.exportExcel(response, dataList, "库存明细记录"); + } catch (Exception e) { + e.printStackTrace(); + System.out.printf("导出Excel失败:" + e.getMessage()); + } + } + + } + + + /** + * 查询库存商品明细分页列表,联查数据字典 + * + * @param productDetailSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 库存商品明细分页列表 + */ + public R getProductDetailPageX(ProductDetailSearchParam productDetailSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + Integer categoryCode = productDetailSearchParam.getCategoryCode(); + Integer zeroFlag = productDetailSearchParam.getZeroFlag(); + Integer remainingDays = productDetailSearchParam.getRemainingDays(); + List locationIds = productDetailSearchParam.getLocationIds(); + List supplierIds = productDetailSearchParam.getSupplierIds(); + productDetailSearchParam.setCategoryCode((Integer)null).setZeroFlag((Integer)null).setRemainingDays((Integer)null).setLocationIds((List)null).setSupplierIds((List)null); + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(productDetailSearchParam, searchKey, new HashSet(Arrays.asList("item_name", "bus_no", "py_str", "wb_str")), request); + if (categoryCode != null) { + if (!categoryCode.equals(ItemCategoryCode.CHINESE_PATENT_DRUG.getValue()) && !categoryCode.equals(ItemCategoryCode.WESTERN_MEDICINE.getValue()) && !categoryCode.equals(ItemCategoryCode.EXTERNALLY_PROCURED_DRUGS.getValue()) && !categoryCode.equals(ItemCategoryCode.CHINESE_HERBAL_MEDICINE.getValue())) { + if (categoryCode.equals(ItemCategoryCode.DEVICE.getValue())) { + queryWrapper.eq("item_table", "adm_device_definition"); + } + } else { + queryWrapper.eq("item_table", "med_medication_definition"); + queryWrapper.eq("med_category_code", categoryCode.toString()); + } + } + + if (zeroFlag != null) { + if (Whether.YES.getValue().equals(zeroFlag)) { + queryWrapper.eq("quantity", BigDecimal.ZERO); + } else { + queryWrapper.gt("quantity", BigDecimal.ZERO); + } + } + + if (locationIds != null && !locationIds.isEmpty()) { + queryWrapper.in("location_id", locationIds); + } + + if (supplierIds != null && !supplierIds.isEmpty()) { + queryWrapper.in("supplier_id", supplierIds); + } + + if (remainingDays != null) { + queryWrapper.le("remaining_days", remainingDays); + } + + Page productDetailsPage = this.productDetailsMapper.selectProductDetailsPageX(new Page((long)pageNo, (long)pageSize), queryWrapper, "med_medication_definition", "adm_device_definition", ConditionCode.LOT_NUMBER_COST.getCode()); + List productDetailList = productDetailsPage.getRecords(); + if (productDetailList != null && !productDetailList.isEmpty()) { + String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE); + if (OrderPricingSource.BATCH_SELLING_PRICE.getCode().equals(orderPricingSource)) { + List chargeItemDefIdList = (List)productDetailList.stream().map(ProductDetailPageDto::getChargeItemDefId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + if (!chargeItemDefIdList.isEmpty()) { + List lotNumberPriceList = this.chargeItemDefDetailService.getLotNumberPriceByDefIds(chargeItemDefIdList); + if (lotNumberPriceList != null && !lotNumberPriceList.isEmpty()) { + Map lotPriceMap = (Map)lotNumberPriceList.stream().collect(Collectors.toMap(ChargeItemDefDetail::getConditionValue, ChargeItemDefDetail::getAmount, (existing, replacement) -> existing)); + + for(ProductDetailPageDto productDetail : productDetailList) { + BigDecimal price = (BigDecimal)lotPriceMap.get(productDetail.getLotNumber()); + if (price != null) { + productDetail.setTotalSalePrice(price); + } + } + } + } + } + + for(ProductDetailPageDto productDetailPageDto : productDetailList) { + productDetailPageDto.setChrgitmLv_enumText(EnumUtils.getInfoByValue(YbChrgitmLv.class, productDetailPageDto.getChrgitmLv())); + productDetailPageDto.setInventoryStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, productDetailPageDto.getInventoryStatusEnum())); + BigDecimal[] results = productDetailPageDto.getQuantity().divideAndRemainder(productDetailPageDto.getPartPercent()); + productDetailPageDto.setNumber(results[0]); + productDetailPageDto.setRemainder(results[1]); + if (productDetailPageDto.getPurchasePrice() != null) { + productDetailPageDto.setTotalPurchasePrice(productDetailPageDto.getPurchasePrice().multiply(results[0]).add(productDetailPageDto.getPurchasePrice().divide(productDetailPageDto.getPartPercent(), 4, RoundingMode.HALF_UP).multiply(results[1]))); + } + + if (productDetailPageDto.getSalePrice() != null) { + productDetailPageDto.setTotalSalePrice(productDetailPageDto.getSalePrice().multiply(results[0]).add(productDetailPageDto.getSalePrice().divide(productDetailPageDto.getPartPercent(), 4, RoundingMode.HALF_UP).multiply(results[1]))); + } + } + } + + return R.ok(productDetailsPage); + } + + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailsAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailsAppServiceImpl.java deleted file mode 100644 index 70a2a2c8..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ProductDetailsAppServiceImpl.java +++ /dev/null @@ -1,374 +0,0 @@ -package com.openhis.web.inventorymanage.appservice.impl; - -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.servlet.http.HttpServletRequest; - -import com.openhis.web.inventorymanage.dto.ProductDetailsTotalDto; -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.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.core.common.core.domain.R; -import com.core.common.core.domain.model.LoginUser; -import com.core.common.utils.DateUtils; -import com.core.common.utils.MessageUtils; -import com.core.common.utils.SecurityUtils; -import com.openhis.common.constant.PromptMsgConstant; -import com.openhis.common.enums.InsuranceLevel; -import com.openhis.common.enums.LocationForm; -import com.openhis.common.enums.PublicationStatus; -import com.openhis.common.enums.ybenums.YbChrgitmLv; -import com.openhis.common.utils.EnumUtils; -import com.openhis.common.utils.HisQueryUtils; -import com.openhis.web.inventorymanage.appservice.IProductDetailsAppService; -import com.openhis.web.inventorymanage.dto.ProductDetailsInitDto; -import com.openhis.web.inventorymanage.dto.ProductDetailsPageDto; -import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; -import com.openhis.web.inventorymanage.mapper.ProductDetailsMapper; -import com.openhis.workflow.domain.InventoryItem; -import com.openhis.workflow.mapper.InventoryItemMapper; - -/** - * 库存商品明细 impl - * - * @author yuanzs - * @date 2025-04-24 - */ -@Service -public class ProductDetailsAppServiceImpl extends ServiceImpl - implements IProductDetailsAppService { - - @Autowired - private ProductDetailsMapper productDetailsMapper; - - /** - * 库存商品明细初始化 - * - * @return 下拉列表值 - */ - @Override - public R getInit() { - - ProductDetailsInitDto productDetailsInitDto = new ProductDetailsInitDto(); - - // 医保等级List - List chrgitmLvOptions = Stream.of(InsuranceLevel.values()) - .map(status -> new ProductDetailsInitDto.statusEnumOption(status.getValue(), status.getInfo())) - .collect(Collectors.toList()); - - productDetailsInitDto.setChrgitmLvOptions(chrgitmLvOptions); - - return R.ok(productDetailsInitDto); - } - - /** - * 查询库存商品明细分页列表 - * - * @param productDetailsSearchParam 查询条件 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param searchKey 模糊查询关键字 - * @param request 请求数据 - * @return 库存商品明细分页列表 - */ - @Override - public R getPage(ProductDetailsSearchParam productDetailsSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request) { - - // 数据初始化,不使用eq条件拼接 - // 项目类型 - Integer categoryCode = productDetailsSearchParam.getCategoryCode(); - productDetailsSearchParam.setCategoryCode(null); - // 库存 - Integer warehouseScope = productDetailsSearchParam.getWarehouseScope(); - productDetailsSearchParam.setWarehouseScope(null); - // 剩余过期天数 - Integer remainingDays = productDetailsSearchParam.getRemainingDays(); - productDetailsSearchParam.setRemainingDays(null); - - // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(productDetailsSearchParam, searchKey, - new HashSet<>(Arrays.asList("medicine_name", "bus_no", "py_str", "supply_name")), request); - - // 项目类型为中成药(1)、西药(2)、外购药品(3)、中草药(4)时查药品表;为耗材(9)时查器材表 - if (categoryCode != null) { - if (categoryCode.equals(1) || categoryCode.equals(2) || categoryCode.equals(3) || categoryCode.equals(4)) { - queryWrapper.eq("item_type", "0"); - queryWrapper.eq("category_code", categoryCode.toString()); - } else if (categoryCode.equals(9)) { - queryWrapper.eq("item_type", "9"); - } - } - // 库存范围:无限制(1)、数量等于0(2)、数量大于0(3)、数量小于等于20(4)、数量小于等于50(5) - if (warehouseScope != null) { - if (warehouseScope.equals(2)) { - queryWrapper.eq("quantity", 0); - } else if (warehouseScope.equals(3)) { - queryWrapper.gt("quantity", 0); - } else if (warehouseScope.equals(4)) { - queryWrapper.le("quantity", 20); - } else if (warehouseScope.equals(5)) { - queryWrapper.le("quantity", 50); - } - } - // 查询条件为剩余过期天数=0时 - if (remainingDays != null) { - if (remainingDays.equals(0)) { - // 查询 <= 0天的数据 - queryWrapper.le("remaining_days", 0); - } else { - // 查询 <= remainingDays天的数据 - queryWrapper.le("remaining_days", remainingDays); - } - } - - // 查询库存商品明细分页列表 - Page productDetailsPage = - productDetailsMapper.selectProductDetailsPage(new Page<>(pageNo, pageSize), queryWrapper); - - productDetailsPage.getRecords().forEach(e -> { - // 医保等级 - e.setChrgitmLv_enumText(EnumUtils.getInfoByValue(YbChrgitmLv.class, e.getChrgitmLv())); - // 药品停用 - e.setStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, e.getStatusEnum())); - // 仓库类型 - e.setFormEnum_enumText(EnumUtils.getInfoByValue(LocationForm.class, e.getFormEnum())); - // 停供状态 - e.setInventoryStatusEnum_enumText( - EnumUtils.getInfoByValue(PublicationStatus.class, e.getInventoryStatusEnum())); - // 如果剩余天数小于0,显示为0 - if (e.getRemainingDays() != null && e.getRemainingDays().compareTo(0) <= 0) { - e.setRemainingDays(0); - } - }); - return R.ok(productDetailsPage); - } - - /** - * 查询库存商品明细分页列表合计 - * - * @param productDetailsSearchParam 查询条件 - * @param searchKey 模糊查询关键字 - * @return 库存商品明细分页列表合计 - */ - @Override - public R getPageTotal(ProductDetailsSearchParam productDetailsSearchParam, String searchKey) { - - String sqlWhere = ""; - Integer itemType = 99; - if (searchKey != null) { - sqlWhere = " (T2.name like '%" + searchKey + "%' or T2.bus_no like '%" + searchKey - + "%' or T2.py_str like '%" + searchKey + "%' or T5.name like '%" + searchKey + "%') "; - } - - // 项目类型 - Integer categoryCode = productDetailsSearchParam.getCategoryCode(); - // 项目类型为中成药(1)、西药(2)、外购药品(3)、中草药(4)时查药品表;为耗材(9)时查器材表 - if (categoryCode != null) { - if (sqlWhere != "") { - sqlWhere = sqlWhere + " and "; - } - if (categoryCode.equals(1) || categoryCode.equals(2) || categoryCode.equals(3) || categoryCode.equals(4)) { - itemType = 0; - sqlWhere = sqlWhere + "T2.category_code = '" + categoryCode + "'"; - } else if (categoryCode.equals(9)) { - itemType = 9; - sqlWhere = sqlWhere + "1 = 1"; - } else { - sqlWhere = sqlWhere + "1 = 1"; - } - } - // 库存 - Integer warehouseScope = productDetailsSearchParam.getWarehouseScope(); - // 库存范围:无限制(1)、数量等于0(2)、数量大于0(3)、数量小于等于20(4)、数量小于等于50(5) - if (warehouseScope != null) { - if (sqlWhere != "") { - sqlWhere = sqlWhere + " and "; - } - if (warehouseScope.equals(2)) { - sqlWhere = sqlWhere + "T1.quantity = 0"; - } else if (warehouseScope.equals(3)) { - sqlWhere = sqlWhere + "T1.quantity > 0"; - } else if (warehouseScope.equals(4)) { - sqlWhere = sqlWhere + "T1.quantity <= 20"; - } else if (warehouseScope.equals(5)) { - sqlWhere = sqlWhere + "T1.quantity <= 50"; - } else { - sqlWhere = sqlWhere + "1 = 1"; - } - } - // 剩余过期天数 - Integer remainingDays = productDetailsSearchParam.getRemainingDays(); - // 查询条件为剩余过期天数=0时 - if (remainingDays != null) { - if (sqlWhere != "") { - sqlWhere = sqlWhere + " and "; - } - if (remainingDays.equals(0)) { - // 查询 <= 0天的数据 - sqlWhere = sqlWhere + "(T1.expiration_date::date - CURRENT_DATE) = 0"; - } else { - // 查询 <= remainingDays天的数据 - sqlWhere = sqlWhere + "(T1.expiration_date::date - CURRENT_DATE) <= " + remainingDays; - } - } - // 医保等级 - Integer chrgitmLv = productDetailsSearchParam.getChrgitmLv(); - if (chrgitmLv != null) { - if (sqlWhere != "") { - sqlWhere = sqlWhere + " and "; - } - sqlWhere = sqlWhere + "T2.chrgitm_lv = " + chrgitmLv; - } - - // 仓库药房 - Long locationId = productDetailsSearchParam.getLocationId(); - if (locationId != null) { - if (sqlWhere != "") { - sqlWhere = sqlWhere + " and "; - } - sqlWhere = sqlWhere + "T1.location_id = " + locationId; - } - // 查询库存商品明细分页列表 - ProductDetailsTotalDto productDetailsTotal = - productDetailsMapper.selectProductDetailsPageTotal(sqlWhere, itemType); - - return R.ok(productDetailsTotal); - } - - /** - * 操作:停供 - * - * @param id 库存项目管理ID - * @return 操作结果 - */ - @Override - public R stopSupplyById(Long id) { - - // 获取当前时间 - Date now = DateUtils.getNowDate(); - // 当前登录账号 - LoginUser loginUser = SecurityUtils.getLoginUser(); - - // 停供按钮压下,更新库存项目管理表的库存状态:已停供 - int updateCount = baseMapper.update(null, - new LambdaUpdateWrapper().eq(InventoryItem::getId, id).set(InventoryItem::getUpdateTime, now) - .set(InventoryItem::getUpdateBy, loginUser.getUserId()) - .set(InventoryItem::getInventoryStatusEnum, PublicationStatus.RETIRED.getValue())); - - return updateCount > 0 ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) - : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - - /** - * 操作:取消停供 - * - * @param id 库存项目管理ID - * @return 操作结果 - */ - @Override - public R cancelSupplyById(Long id) { - - // 获取当前时间 - Date now = DateUtils.getNowDate(); - // 当前登录账号 - LoginUser loginUser = SecurityUtils.getLoginUser(); - - // 取消停供按钮压下,更新库存项目管理表的库存状态:未停供 - int updateCount = baseMapper.update(null, - new LambdaUpdateWrapper().eq(InventoryItem::getId, id).set(InventoryItem::getUpdateTime, now) - .set(InventoryItem::getUpdateBy, loginUser.getUserId()) - .set(InventoryItem::getInventoryStatusEnum, PublicationStatus.ACTIVE.getValue())); - - return updateCount > 0 ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)) - : R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - - /** - * 操作:效期预警 - * - * @param productDetailsSearchParam 查询条件 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param searchKey 模糊查询关键字 - * @param request 请求数据 - * @return 操作结果 - */ - @Override - public R expirationWarning(ProductDetailsSearchParam productDetailsSearchParam, Integer pageNo, Integer pageSize, - String searchKey, HttpServletRequest request) { - - // 数据初始化,不使用eq条件拼接 - // 项目类型 - Integer categoryCode = productDetailsSearchParam.getCategoryCode(); - productDetailsSearchParam.setCategoryCode(null); - - // 有效期小于(月) - Integer remainingDays = productDetailsSearchParam.getRemainingDays(); - productDetailsSearchParam.setRemainingDays(null); - - //设置件数查询flg - String flg = productDetailsSearchParam.getFlg(); - productDetailsSearchParam.setFlg(null); - - // 构建查询条件 - QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(productDetailsSearchParam, searchKey, - new HashSet<>(Arrays.asList("medicine_name", "bus_no", "py_str")), request); - - // 项目类型为中成药(1)、西药(2)、外购药品(3)、中草药(4)时查药品表;为耗材(9)时查器材表 - if (categoryCode != null) { - if (categoryCode.equals(1) || categoryCode.equals(2) || categoryCode.equals(3) || categoryCode.equals(4)) { - queryWrapper.eq("item_type", "0"); - queryWrapper.eq("category_code", categoryCode.toString()); - } else if (categoryCode.equals(9)) { - queryWrapper.eq("item_type", "9"); - } - } - - // 查询条件为有效期天数小于=180时 - if (remainingDays != null) { -// if (remainingDays.equals(0)) { -// // 查询 <= 180天的数据 -// queryWrapper.le("remaining_days", 180); -// } else { - // 查询 <= remainingMonth个月的数据 - queryWrapper.le("remaining_days", remainingDays); -// } - } else { - // 查询 <= 180天的数据 - queryWrapper.le("remaining_days", 180); - } - - Page productDetailsPage = - productDetailsMapper.selectExpirationWarning(new Page<>(pageNo, pageSize), queryWrapper, flg); - - productDetailsPage.getRecords().forEach(e -> { - // 药品停用 - e.setStatusEnum_enumText(EnumUtils.getInfoByValue(PublicationStatus.class, e.getStatusEnum())); - // 停供状态 - e.setInventoryStatusEnum_enumText( - EnumUtils.getInfoByValue(PublicationStatus.class, e.getInventoryStatusEnum())); - // 如果剩余天数小于0,显示为0 - if (e.getRemainingDays() != null && e.getRemainingDays().compareTo(0) <= 0) { - e.setRemainingDays(0); - } - // 如果剩余月数小于0,显示为0 - if (e.getRemainingMonth() != null && e.getRemainingMonth().compareTo(0) <= 0) { - e.setRemainingMonth(0); - } - }); - return R.ok(productDetailsPage); - } - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseInventoryAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseInventoryAppServiceImpl.java index d4cba6c3..134ba64e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseInventoryAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/PurchaseInventoryAppServiceImpl.java @@ -3,19 +3,22 @@ */ package com.openhis.web.inventorymanage.appservice.impl; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import com.core.common.exception.ServiceException; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.DateUtils; import com.core.common.utils.MessageUtils; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReceiptApprovalAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReceiptApprovalAppServiceImpl.java index 260b0305..c02db77c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReceiptApprovalAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/appservice/impl/ReceiptApprovalAppServiceImpl.java @@ -73,7 +73,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService @Autowired private ReceiptApprovalMapper receiptApprovalMapper; @Autowired - private YbManager ybService; + private YbManager ybManager; @Autowired private IMedicationDispenseService medicationDispenseService; @Autowired @@ -125,9 +125,13 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(receiptSearchParam, searchKey, searchFields, request); // 查询单据分页列表 - Page receiptPage = - receiptApprovalMapper.selectReceiptPage(new Page<>(pageNo, pageSize), queryWrapper, - SupplyStatus.APPROVAL.getValue(), SupplyStatus.AGREE.getValue(), SupplyStatus.REJECT.getValue()); + Page receiptPage = receiptApprovalMapper.selectReceiptPage(new Page<>(pageNo, pageSize), + queryWrapper, SupplyStatus.APPROVAL.getValue(), SupplyStatus.AGREE.getValue(), + SupplyStatus.REJECT.getValue(), SupplyType.LOSS_REPORT_FORM.getValue(), + SupplyType.ISSUE_INVENTORY.getValue(), SupplyType.PRODUCT_BATCH_STOCKTAKING.getValue(), + SupplyType.PRODUCT_STOCKTAKING.getValue(), SupplyType.PRODUCT_RETURN.getValue(), + SupplyType.RETURN_ISSUE.getValue(), SupplyType.PRODUCT_TRANSFER.getValue(), + SupplyType.PRODUCT_BATCH_TRANSFER.getValue(), SupplyType.PURCHASE_INVENTORY.getValue()); receiptPage.getRecords().forEach(e -> { // 单据状态 @@ -417,15 +421,22 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService // 分离出入库列表 List inList = new ArrayList<>(); List outList = new ArrayList<>(); - + // 暂时先取出全部的库存,循环查库存同一会有问题,后续优化 + List inventoryItems = inventoryItemService.selectAllInventory(); for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) { // 根据项目id,产品批号,源仓库id 查询源仓库库存表信息 - List inventoryItemSourceList = inventoryItemService.selectInventoryByItemId( - supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), - supplyItemDetailDto.getSourceLocationId(), SecurityUtils.getLoginUser().getTenantId()); + // List inventoryItemSourceList = inventoryItemService.selectInventoryByItemId( + // supplyItemDetailDto.getItemId(), supplyItemDetailDto.getLotNumber(), + // supplyItemDetailDto.getSourceLocationId(), SecurityUtils.getLoginUser().getTenantId()); + List filteredInventoryItems = inventoryItems.stream() + .filter(item -> item.getItemId().equals(supplyItemDetailDto.getItemId()) + && item.getLotNumber().equals(supplyItemDetailDto.getLotNumber()) + && item.getLocationId().equals(supplyItemDetailDto.getSourceLocationId())) + .collect(Collectors.toList()); + InventoryItem inventoryItemSource = new InventoryItem(); - if (!inventoryItemSourceList.isEmpty()) { - inventoryItemSource = inventoryItemSourceList.get(0); + if (!filteredInventoryItems.isEmpty()) { + inventoryItemSource = filteredInventoryItems.get(0); // 最小数量(最小单位库存数量) BigDecimal minQuantity = inventoryItemSource.getQuantity(); @@ -475,7 +486,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService if (inventoryItemPurpose == null) { // 供应申请的物品计量单位与最小单位相同 if (supplyItemDetailDto.getItemUnit().equals(supplyItemDetailDto.getMinUnitCode())) { - //todo:不理解的代码,可能会因为四舍五入影响总价值 + // todo:不理解的代码,可能会因为四舍五入影响总价值 // 采购单价=单价*拆零比 supplyItemDetailDto .setPrice(supplyItemDetailDto.getPrice().multiply(supplyItemDetailDto.getPartPercent())); @@ -956,7 +967,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService } if (!shouldSkip) { // 新增对应项目的价格定义子表 - resultList.add(this.addChargeItemDefApp(supplyRequest.getLotNumber(), supplyRequest.getPrice(), + resultList.addAll(this.addChargeItemDefApp(supplyRequest.getLotNumber(), supplyRequest.getPrice(), details.get(0).getDefinitionId())); } } @@ -971,18 +982,20 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService * @param definitionId 主表id * @return 子表信息 */ - private ChargeItemDefDetail addChargeItemDefApp(String conditionValue, BigDecimal sellPrice, Long definitionId) { - ChargeItemDefDetail chargeItemDefDetail = new ChargeItemDefDetail(); - chargeItemDefDetail - // 命中条件:批号 - .setConditionCode(ConditionCode.LOT_NUMBER_COST.getCode()) - // 命中值 - .setConditionValue(conditionValue) - // 主表id - .setDefinitionId(definitionId) - // 售价 - .setAmount(sellPrice); - return chargeItemDefDetail; + private List addChargeItemDefApp(String conditionValue, BigDecimal sellPrice, + Long definitionId) { + List resultList = new ArrayList<>(); + // 创建成本价记录 + ChargeItemDefDetail costDetail = new ChargeItemDefDetail(); + costDetail.setConditionCode(ConditionCode.LOT_NUMBER_COST.getCode()).setConditionValue(conditionValue) + .setDefinitionId(definitionId).setAmount(sellPrice); + resultList.add(costDetail); + // 创建销售价记录 + ChargeItemDefDetail priceDetail = new ChargeItemDefDetail(); + priceDetail.setConditionCode(ConditionCode.LOT_NUMBER_PRICE.getCode()).setConditionValue(conditionValue) + .setDefinitionId(definitionId).setAmount(sellPrice); + resultList.add(priceDetail); + return resultList; } /** @@ -1007,7 +1020,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService // 处理采购入库 if (ybInvChgType == YbInvChgType.PURCHASE_IN) { - R purchaseResult = ybService.procurement(getMedical3503Param(supplyItemDetailDto, now)); + R purchaseResult = ybManager.procurement(getMedical3503Param(supplyItemDetailDto, now)); if (purchaseResult.getCode() != 200) { uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo()); // 采购失败时跳过库存变更 @@ -1015,7 +1028,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService } // 处理采购退货 } else if (ybInvChgType == YbInvChgType.RETURN_OUT) { - R returnResult = ybService.cancelProcurement(getMedicalPurchase3504Param(supplyItemDetailDto, now)); + R returnResult = ybManager.cancelProcurement(getMedicalPurchase3504Param(supplyItemDetailDto, now)); if (returnResult.getCode() != 200) { uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo()); // 退货失败时跳过库存变更 @@ -1025,7 +1038,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService // 所有类型都需要调用库存变更(特殊类型失败时跳过) if (!skipInventoryUpdate) { - result = ybService.updateInventoryCount( + result = ybManager.updateInventoryCount( getMedicalInventory3502Param(supplyItemDetailDto, now, ybInvChgType.getValue())); if (result.getCode() != 200) { uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java index e0830153..7dd32e0f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java @@ -54,8 +54,6 @@ public class InventoryManageAssembler { .setWbStr(supplyItemDetailDto.getWbStr()) // 最小单位 .setUnitCode(supplyItemDetailDto.getMinUnitCode()) - // 采购价格 - .setPrice(supplyItemDetailDto.getPrice()) // 仓库 .setLocationId(supplyItemDetailDto.getPurposeLocationId()) // 库位 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java index 41a0b3b7..4d98917f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/LossReportFormController.java @@ -3,6 +3,8 @@ */ package com.openhis.web.inventorymanage.controller; +import java.util.List; + import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; @@ -16,8 +18,6 @@ import com.openhis.web.inventorymanage.dto.LossReportSearchParam; import lombok.extern.slf4j.Slf4j; -import java.util.List; - /** * 报损单 controller * @@ -125,20 +125,21 @@ public class LossReportFormController { return lossReportFormAppService.withdrawApproval(busNo); } -// /** -// * 报损单据详情 -// * -// * @param locationId 库房id -// * @param startTime 开始时间 -// * @param endTime 结束时间 -// * @param pageNo 当前页码 -// * @param pageSize 查询条数 -// * @return 单据详情 -// */ -// @GetMapping(value = "/loss-receipt-monthly-settlement") -// public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String startTime,@RequestParam String endTime, -// @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, -// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { -// return lossReportFormAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); -// } + // /** + // * 报损单据详情 + // * + // * @param locationId 库房id + // * @param startTime 开始时间 + // * @param endTime 结束时间 + // * @param pageNo 当前页码 + // * @param pageSize 查询条数 + // * @return 单据详情 + // */ + // @GetMapping(value = "/loss-receipt-monthly-settlement") + // public R getMonthlySettlementDetail(@RequestParam Long locationId, @RequestParam String + // startTime,@RequestParam String endTime, + // @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + // @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + // return lossReportFormAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize); + // } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PriceAdjustmentFormController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PriceAdjustmentFormController.java new file mode 100644 index 00000000..bb1d5006 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/PriceAdjustmentFormController.java @@ -0,0 +1,145 @@ +package com.openhis.web.inventorymanage.controller; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.bind.annotation.*; + +import com.core.common.core.domain.R; +import com.core.common.utils.StringUtils; +import com.openhis.web.adjustprice.appservice.IAdjustPriceService; +import com.openhis.web.adjustprice.dto.AdjustPriceManagerSearchParam; +import com.openhis.web.inventorymanage.appservice.IInventoryAdjustPriceService; + +import lombok.extern.slf4j.Slf4j; + +/** + * @ClassName AdjustPriceController + * @Description TODO + * @Author raymond + * @Date 2025/10/23 14:47 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/inventory-examine-page") +@Slf4j +public class PriceAdjustmentFormController { + + @Resource + private IInventoryAdjustPriceService inventoryAdjustPriceService; + @Resource + private IAdjustPriceService adjustPriceService; + + @GetMapping(value = "/init") + public R receiptApprovalInit() { + return inventoryAdjustPriceService.adjustPriceInit(); + } + + /** + * Desc: 查询所有未提交的调价单集合 + * + * @param + * @Author raymond + * @Date 16:55 2025/10/15 + * @return com.core.common.core.domain.R + **/ + @GetMapping(value = "getPageByExamine") + public R getPageByExamine(AdjustPriceManagerSearchParam adjustPriceManagerSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return this.inventoryAdjustPriceService.getPageByExamineList(adjustPriceManagerSearchParam, pageNo, pageSize, + searchKey, request); + } + + /** + * Desc: 根据单据号 进行审核通过操作 + * + * @param busNo + * @Author raymond + * @Date 18:09 2025/10/18 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "updateExamineByApproved") + public R updateExamineByApproved(@RequestParam String busNo) { + return this.inventoryAdjustPriceService.updateExamineByApproved(busNo); + } + + /** + * Desc: 根据单据号 进行审核驳回操作 + * + * @param busNo + * @Author raymond + * @Date 19:24 2025/10/18 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "updateExamineByRejected") + public R updateExamineByRejected(@RequestParam String busNo) { + return this.inventoryAdjustPriceService.updateExamineByRejected(busNo); + } + + /** + * Desc: 根据 单据号 查询详情 + * + * @param busNo + * @Author raymond + * @Date 12:01 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "searchSupplyRequestByMed") + public R searchSupplyRequestByMed(@RequestParam String busNo) { + if (StringUtils.isEmpty(busNo)) { + return R.fail(); + } + return this.adjustPriceService.searchChangePriceDataByMed(busNo); + } + + /** + * Desc: 根据 单据号 查询详情 + * + * @param busNo + * @Author raymond + * @Date 12:01 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "searchSupplyRequestByDevice") + public R searchSupplyRequestByDevice(@RequestParam String busNo) { + if (StringUtils.isEmpty(busNo)) { + return R.fail(); + } + return this.adjustPriceService.searchChangePriceDataByDevice(busNo); + } + + /** + * Desc: 根据 单据号 查询详情 + * + * @param busNo + * @Author raymond + * @Date 12:01 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "searchSupplyRequestByActivity") + public R searchSupplyRequestByActivity(@RequestParam String busNo) { + if (StringUtils.isEmpty(busNo)) { + return R.fail(); + } + return this.adjustPriceService.searchChangePriceDataByActivity(busNo); + } + + /** + * Desc: 根据 单据号 查询详情 + * + * @param busNo + * @Author raymond + * @Date 12:01 2025/10/21 + * @return com.core.common.core.domain.R + **/ + @PostMapping(value = "searchSupplyRequestByHealth") + public R searchSupplyRequestByHealth(@RequestParam String busNo) { + if (StringUtils.isEmpty(busNo)) { + return R.fail(); + } + return this.adjustPriceService.searchChangePriceDataByHealth(busNo); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailsController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailController.java similarity index 50% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailsController.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailController.java index 2e2a0051..7c34286c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailsController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/controller/ProductDetailController.java @@ -1,13 +1,14 @@ package com.openhis.web.inventorymanage.controller; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; -import com.openhis.web.inventorymanage.appservice.IProductDetailsAppService; -import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; +import com.openhis.web.inventorymanage.appservice.IProductDetailAppService; +import com.openhis.web.inventorymanage.dto.ProductDetailSearchParam; import lombok.extern.slf4j.Slf4j; @@ -20,10 +21,10 @@ import lombok.extern.slf4j.Slf4j; @RestController @RequestMapping("/inventory-manage/product") @Slf4j -public class ProductDetailsController { +public class ProductDetailController { - @Autowired - private IProductDetailsAppService productDetailsAppService; + @Resource + private IProductDetailAppService productDetailsAppService; /** * 库存商品明细初始化 @@ -38,7 +39,7 @@ public class ProductDetailsController { /** * 查询库存商品明细分页列表 * - * @param productDetailsSearchParam 查询条件 + * @param productDetailSearchParam 查询条件 * @param pageNo 当前页码 * @param pageSize 查询条数 * @param searchKey 模糊查询关键字 @@ -46,64 +47,67 @@ public class ProductDetailsController { * @return 库存商品明细分页列表 */ @GetMapping(value = "/product-page") - public R getPage(ProductDetailsSearchParam productDetailsSearchParam, + public R getProductDetailPage(ProductDetailSearchParam productDetailSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(value = "pageSize", defaultValue = "1000") Integer pageSize, @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return productDetailsAppService.getPage(productDetailsSearchParam, pageNo, pageSize, searchKey, request); + return productDetailsAppService.getProductDetailPage(productDetailSearchParam, pageNo, pageSize, searchKey, + request); } + /** - * 查询库存商品明细分页列表合计 + * 查询库存商品明细统计数据 * - * @param productDetailsSearchParam 查询条件 + * @param productDetailSearchParam 查询条件 * @param searchKey 模糊查询关键字 - * @return 库存商品明细分页列表合计 + * @param request 请求数据 + * @return 库存商品明细统计数据 */ - @GetMapping(value = "/product-page-total") - public R getPageTotal(ProductDetailsSearchParam productDetailsSearchParam, - @RequestParam(name = "searchKey", required = false) String searchKey) { - return productDetailsAppService.getPageTotal(productDetailsSearchParam, searchKey ); + @GetMapping(value = "/product-statistics") + public R getProductDetailStatistics(ProductDetailSearchParam productDetailSearchParam, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return productDetailsAppService.getProductDetailStatistics(productDetailSearchParam, searchKey, request); } /** * 操作:停供 * - * @param id 库存项目管理ID + * @param inventoryId 库存项目管理ID * @return 操作结果 */ @PutMapping("/stop-supply") - public R stopSupplyById(@RequestBody Long id) { - return productDetailsAppService.stopSupplyById(id); + public R stopSupplyById(@RequestBody Long inventoryId) { + return productDetailsAppService.stopSupplyById(inventoryId); } /** * 操作:取消停供 * - * @param id 库存项目管理ID + * @param inventoryId 库存项目管理ID * @return 操作结果 */ @PutMapping("/cancel-supply") - public R cancelSupplyById(@RequestBody Long id) { - return productDetailsAppService.cancelSupplyById(id); + public R cancelSupplyById(@RequestBody Long inventoryId) { + return productDetailsAppService.cancelSupplyById(inventoryId); } /** - * 操作:效期预警 + * 库存明细表导出 * - * @param productDetailsSearchParam 查询条件 + * @param productDetailSearchParam 查询条件 * @param pageNo 当前页码 * @param pageSize 查询条数 * @param searchKey 模糊查询关键字 * @param request 请求数据 - * @return 操作结果 + * @param response 响应数据 */ - @GetMapping("/expiration-warning") - public R expirationWarning(ProductDetailsSearchParam productDetailsSearchParam, + @GetMapping(value = "/excel-out") + public void makeExcelFile(ProductDetailSearchParam productDetailSearchParam, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(value = "pageSize", defaultValue = "50") Integer pageSize, - @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { - return productDetailsAppService.expirationWarning(productDetailsSearchParam, pageNo, pageSize, searchKey, - request); + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request, + HttpServletResponse response) { + productDetailsAppService.makeExcelFile(productDetailSearchParam, pageNo, pageSize, searchKey, request, + response); } - } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryAdjustPriceDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryAdjustPriceDto.java new file mode 100644 index 00000000..9e15c7c5 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/InventoryAdjustPriceDto.java @@ -0,0 +1,108 @@ +package com.openhis.web.inventorymanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; +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; + +/** + * @ClassName InventoryAdjustPriceDto + * @Description TODO + * @Author raymond + * @Date 2025/10/24 17:02 + * @Version 1.0 + **/ +@Data +@Accessors(chain = true) +public class InventoryAdjustPriceDto { + /** 单据号 */ + private String supplyBusNo; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /** 退货状态 */ + private Integer returnStatus; + + /** 类型 */ + private Integer typeEnum; + private String typeEnum_enumText; + + /** 供应商 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier") + @JsonSerialize(using = ToStringSerializer.class) + private Long supplierId; + private String supplierId_dictText; + + /** 目的仓库 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_location") + private Long purposeLocationId; + private String purposeLocationId_dictText; + + /** 目的仓位 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_location") + private Long purposeLocationStoreId; + private String purposeLocationStoreId_dictText; + + /** 盈亏金额 */ + private BigDecimal breakevenPrice; + + /** 经手人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + @JsonSerialize(using = ToStringSerializer.class) + private Long practitionerId; + private String practitionerId_dictText; + + /** 审批人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** 审批时间 */ + private Date approvalTime; + + /** 申请人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long applicantId; + private String applicantId_dictText; + + /** 申请时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date applyTime; + + /** 制单日期 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 备注 */ + private String remake; + + /** 项目所在表名 */ + private String itemTable; + + /** 药品类型 */ + private Integer itemType; + + /** 目的仓库类型 */ + private Integer purposeTypeEnum; + private String purposeTypeEnum_enumText; + + /** 追溯码 */ + private String traceNo; + /** + * 24、药品 + */ + private Integer categoryEnum; + private String categoryEnum_enumText; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsInitDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailInitDto.java similarity index 85% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsInitDto.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailInitDto.java index 2852a9a8..52569ecc 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsInitDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailInitDto.java @@ -1,6 +1,5 @@ package com.openhis.web.inventorymanage.dto; -import com.openhis.web.datadictionary.dto.MedicationManageInitDto; import lombok.Data; import lombok.experimental.Accessors; @@ -14,7 +13,7 @@ import java.util.List; */ @Data @Accessors(chain = true) -public class ProductDetailsInitDto { +public class ProductDetailInitDto { /** 医保等级 */ private List chrgitmLvOptions; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailPageDto.java new file mode 100644 index 00000000..72cb6671 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailPageDto.java @@ -0,0 +1,202 @@ +package com.openhis.web.inventorymanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import com.core.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +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 + * + * @author yuanzs + * @date 2025-04-24 + */ +@Data + +@Accessors(chain = true) +public class ProductDetailPageDto { + + /** 库存项目管理ID(停供用) */ + @JsonSerialize(using = ToStringSerializer.class) + private Long inventoryId; + + /** 生产日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + @Excel(name = "生产日期", sort = 19, dateFormat = "yyyy-MM-dd") + private Date productionDate; + + /** 失效日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") + @Excel(name = "有效期至", sort = 20, dateFormat = "yyyy-MM-dd") + private Date expirationDate; + + /** 库存状态 */ + private Integer inventoryStatusEnum; + private String inventoryStatusEnum_enumText; + + /** 仓库 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + + /** 仓库名称 */ + @Excel(name = "仓库", sort = 4) + private String locationName; + + /** 货位 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationStoreId; + + /** 货位名称 */ + @Excel(name = "货位", sort = 22) + private String locationStoreName; + + /** 生产批号 */ + @Excel(name = "生产批号", sort = 7) + private String lotNumber; + + /** 库存数量 */ + private BigDecimal quantity; + @Excel(name = "库存(最小单位)", sort = 9) + private String quantity_text; + + /** 包装单位数量(整数部分) */ + private BigDecimal number; + @Excel(name = "库存(包装单位)", sort = 8) + private String number_text; + + /** 包装单位数量(余数部分) */ + private BigDecimal remainder; + + /** 供应商 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long supplierId; + + /** 供应商名称 */ + @Excel(name = "供应商", sort = 17) + private String supplierName; + + /** 项目名称 */ + @Excel(name = "项目名称", sort = 2) + private String itemName; + + /** 项目名称 */ + private String itemTable; + + /** 项目编码 */ + @Excel(name = "药品编码", sort = 1) + private String busNo; + + /** 耗材类型 */ + @Dict(dictCode = "device_category_code") + private String devCategoryCode; + private String devCategoryCode_dictText; + private String devCategoryCodeDictText; + + /** 药品类型 */ + @Dict(dictCode = "med_category_code") + private String medCategoryCode; + private String medCategoryCode_dictText; + private String medCategoryCodeDictText; + + /** 项目类别 */ + @Excel(name = "项目类别", sort = 3) + private String CategoryCodeDictText; + + /** 医保等级 */ + private Integer chrgitmLv; + @Excel(name = "医保等级", sort = 18) + private String chrgitmLv_enumText; + + /** 厂家 */ + @Excel(name = "厂家/产地", sort = 6) + private String manufacturerText; + + /** 医保码 */ + private String ybNo; + + /** 五笔码 */ + private String wbStr; + + /** 拼音码 */ + private String pyStr; + + /** 包装单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + private String unitCodeDictText; + + /** 库存单位 */ + @Dict(dictCode = "unit_code") + private String minUnitCode; + private String minUnitCode_dictText; + private String minUnitCodeDictText; + + /** 拆零比 */ + @Excel(name = "拆零比", sort = 10, scale = 0) + private BigDecimal partPercent; + + /** 批准文号/国药准字 */ + @Excel(name = "国药准字", sort = 16) + private String approvalNumber; + + /** 剂型 */ + @Dict(dictCode = "dose_form_code") + private String doseFormCode; + private String doseFormCode_dictText; + @Excel(name = "剂型", sort = 15) + private String doseFormCodeDictText; + + /** 规格 */ + @Excel(name = "规格", sort = 5) + private String totalVolume; + + /** 零售价 */ + private BigDecimal salePrice; + @Excel(name = "零售价", sort = 12) + private String excelSalePrice = ""; + + /** 定价id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long chargeItemDefId; + + /** 进价 */ + private BigDecimal purchasePrice; + @Excel(name = "采购价格", sort = 11) + private String excelPurchasePrice = ""; + + /** 剩余过期天数 */ + @Excel(name = "剩余过期天数", sort = 21) + private Integer remainingDays; + + /** 总零售价 */ + private BigDecimal totalSalePrice; + @Excel(name = "零售价总额", sort = 14) + private String excelTotalSalePrice = ""; + + /** 总进价 */ + private BigDecimal totalPurchasePrice; + @Excel(name = "进价总额", sort = 13, scale = 2) + private String excelTotalPurchasePrice = ""; + + /** 售价统计 */ + private BigDecimal salePriceStatistics; + + /** 进价统计 */ + private BigDecimal purchasePriceStatistics; + + // 设置统计金额默认值为零 + public ProductDetailPageDto() { + this.totalSalePrice = BigDecimal.ZERO; + this.totalPurchasePrice = BigDecimal.ZERO; + this.salePriceStatistics = BigDecimal.ZERO; + this.purchasePriceStatistics = BigDecimal.ZERO; + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailSearchParam.java new file mode 100644 index 00000000..9d85f13a --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailSearchParam.java @@ -0,0 +1,41 @@ +package com.openhis.web.inventorymanage.dto; + +import java.util.List; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 库存商品明细分页查询条件 + * + * @author yuanzs + * @date 2025-04-24 + */ +@Data +@Accessors(chain = true) +public class ProductDetailSearchParam { + + /** 剩余过期天数 */ + private Integer remainingDays; + + /** 项目类型 */ + private Integer categoryCode; + + /** 医保等级 */ + private Integer chrgitmLv; + + /** 仓库药房列表 */ + private List locationIds; + + /** 供应商列表 */ + private List supplierIds; + + /** 是否为零 */ + private Integer zeroFlag; + + /** 停用状态 */ + private Integer inventoryStatusEnum; + + /** 项目所在表 */ + private String itemTable; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsPageDto.java deleted file mode 100644 index 5f76d0e2..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsPageDto.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.openhis.web.inventorymanage.dto; - -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.openhis.common.annotation.Dict; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 库存商品明细分页列表 dto - * - * @author yuanzs - * @date 2025-04-24 - */ -@Data -@Accessors(chain = true) -public class ProductDetailsPageDto { - - /** 库存项目管理ID(停供用) */ - @JsonSerialize(using = ToStringSerializer.class) - private Long id; - - /** 药品编码 */ - private String busNo; - - /** 药品名称 */ - private String medicineName; - - /** 药品拼音 */ - private String pyStr; - - /** 规格 */ - private String totalVolume; - - /** 医保等级 */ - private Integer chrgitmLv; - private String chrgitmLv_enumText; - - /** 厂家 */ - private String manufacturerText; - - /** 生产批号 */ - private String lotNumber; - - /** 药品类型 */ - @Dict(dictCode = "med_category_code") - private String categoryCode; - private String categoryCode_dictText; - - /** 药品单位(采购单位) */ - @Dict(dictCode = "unit_code") - private String unitCode; - private String unitCode_dictText; - - /** 库存数量 */ - private BigDecimal quantity; - - /** 规格库存数量 */ - private BigDecimal specificationQuantity; - - /** 最小库存警戒数量 */ - private BigDecimal itemMinQuantity; - - /** 最大库存警戒数量 */ - private BigDecimal itemMaxQuantity; - - /** 拆零比 */ - private BigDecimal partPercent; - - /** 库存单位 */ - @Dict(dictCode = "unit_code") - private String minUnitCode; - private String minUnitCode_dictText; - - /** 采购价格 */ - private BigDecimal price; - - /** 生产日期 */ - private Date productionDate; - - /** 失效日期 */ - private Date expirationDate; - - /** 剩余过期天数 */ - private Integer remainingDays; - - /** 药品追溯码 */ - private String traceNo; - - /** 药品停用 */ - private Integer statusEnum; - private String statusEnum_enumText; - - /** 仓库 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long locationId; - private String locationName; - - /** 货位 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long locationStoreId; - private String locationStoreName; - - /** 仓库类型 */ - private Integer formEnum; - private String formEnum_enumText; - - /** 供应商 */ - @JsonSerialize(using = ToStringSerializer.class) - private Long supplyId; - private String supplyName; - - /** 停供状态 */ - private Integer inventoryStatusEnum; - private String inventoryStatusEnum_enumText; - - /** 有效期小于(月) */ - private Integer remainingMonth; - - /** 剂型 */ - @Dict(dictCode = "dose_form_code") - private Integer doseFormCode; - private String doseFormCode_dictText; - - /** 批准文号/国药准字 */ - private String approvalNumber; - - /** 零售价 */ - private BigDecimal retailPrice; - - /** 总零售价 */ - private BigDecimal totalSalePrice; - - /** 总进价 */ - private BigDecimal totalPrice; - - /** 追溯码入库数 */ - private BigDecimal inCount; - /** 追溯码出库数 */ - private BigDecimal outCount; - - /** 项目id */ - @JsonSerialize(using = ToStringSerializer.class) - private Long itemId; - private String itemTable; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java deleted file mode 100644 index 76d592d2..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsSearchParam.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.openhis.web.inventorymanage.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * 库存商品明细分页查询条件 - * - * @author yuanzs - * @date 2025-04-24 - */ -@Data -@Accessors(chain = true) -public class ProductDetailsSearchParam { - - /** 剩余过期天数 */ - private Integer remainingDays; - - /** 项目类型 */ - private Integer categoryCode; - - /** 医保等级 */ - private Integer chrgitmLv; - - /** 仓库药房 */ - private Long locationId; - - /** 库存范围 */ - private Integer warehouseScope; - - /** 有效期小于(月) */ - private Integer remainingMonth; - - /** 供应商 */ - private String supplyName; - - /** 停用状态 */ - private Integer inventoryStatusEnum; - - /** 查询flg */ - private String flg; - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsTotalDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsTotalDto.java deleted file mode 100644 index 7678c159..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ProductDetailsTotalDto.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.openhis.web.inventorymanage.dto; - -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.openhis.common.annotation.Dict; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 库存商品明细分页列表合计 dto - * - * @author yuxj - * @date 2025-07-16 - */ -@Data -@Accessors(chain = true) -public class ProductDetailsTotalDto { - /** 总零售价 */ - private BigDecimal totalSalePrice; - /** 总进价 */ - private BigDecimal totalPurchasePrice; -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ReceiptPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ReceiptPageDto.java index 0096d5df..a93dc02c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ReceiptPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/dto/ReceiptPageDto.java @@ -8,6 +8,7 @@ import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; @@ -15,6 +16,7 @@ import com.openhis.common.annotation.Dict; import lombok.Data; import lombok.experimental.Accessors; import org.apache.poi.hpsf.Decimal; +import org.springframework.format.annotation.DateTimeFormat; /** * 单据分页列表 dto @@ -79,9 +81,13 @@ public class ReceiptPageDto { private String applicantId_dictText; /** 申请时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date applyTime; /** 制单日期 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** 备注 */ @@ -99,5 +105,15 @@ public class ReceiptPageDto { /** 追溯码 */ private String traceNo; + /** + * 24、药品 + */ + private Integer categoryEnum; + private String categoryEnum_enumText; + + /* + * 总金额 + */ + private BigDecimal totalAmount; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/InventoryAdjustPriceMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/InventoryAdjustPriceMapper.java new file mode 100644 index 00000000..a4b7d5e7 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/InventoryAdjustPriceMapper.java @@ -0,0 +1,37 @@ +package com.openhis.web.inventorymanage.mapper; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.web.adjustprice.dto.ChangePricePageDto; +import com.openhis.web.inventorymanage.dto.ReceiptApprovalSearchParam; +import com.openhis.web.inventorymanage.dto.ReceiptPageDto; + +/** + * @ClassName AdjustPriceMapper + * @Description TODO + * @Author raymond + * @Date 2025/10/23 14:41 + * @Version 1.0 + **/ +@Component +public interface InventoryAdjustPriceMapper { + /** + * 查询单据审批分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param approval 单据状态:审核中 + * @param agree 单据状态:同意 + * @param reject 单据状态:驳回 + * @return 单据审批分页列表 + */ + Page searchPageByExamine(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("approval") Integer approval, @Param("agree") Integer agree, @Param("reject") Integer reject, + @Param("medCategory") Integer medTypeEnum, @Param("deviceCategory") Integer deviceTypeEnum, + @Param("activityCategory") Integer activityTypeEnum, @Param("healthCategory") Integer healthTypeEnum); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/LossReportFormMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/LossReportFormMapper.java index 8800028f..70cbbaac 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/LossReportFormMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/LossReportFormMapper.java @@ -5,7 +5,6 @@ package com.openhis.web.inventorymanage.mapper; import java.util.List; -import com.openhis.web.inventorymanage.dto.ProductTransferDetailDto; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailAppMapper.java new file mode 100644 index 00000000..47e96cd6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailAppMapper.java @@ -0,0 +1,52 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.inventorymanage.mapper; + +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; +import com.openhis.web.inventorymanage.dto.ProductDetailPageDto; +import com.openhis.web.inventorymanage.dto.ProductDetailSearchParam; + +/** + * 库存商品明细查询用 mapper + * + * @author yuanzs + * @date 2025-04-25 + */ +@Repository +public interface ProductDetailAppMapper { + + /** + * 查询库存商品明细分页列表 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medMedicationDefinition 药品 + * @param admDeviceDefinition 耗材 + * @param lotNumberCost 批号进价 + * @return 库存商品明细分页列表 + */ + Page selectProductDetailsPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medMedicationDefinition") String medMedicationDefinition, + @Param("admDeviceDefinition") String admDeviceDefinition, @Param("lotNumberCost") String lotNumberCost); + /** + * 查询库存商品明细分页列表,联查数据字典 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @param medMedicationDefinition 药品 + * @param admDeviceDefinition 耗材 + * @param lotNumberCost 批号进价 + * @return 库存商品明细分页列表 + */ + Page selectProductDetailsPageX(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, + @Param("medMedicationDefinition") String medMedicationDefinition, + @Param("admDeviceDefinition") String admDeviceDefinition, @Param("lotNumberCost") String lotNumberCost); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailsMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailsMapper.java deleted file mode 100644 index 382a84a4..00000000 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ProductDetailsMapper.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.web.inventorymanage.mapper; - -import com.openhis.web.inventorymanage.dto.ProductDetailsTotalDto; -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; -import com.openhis.web.inventorymanage.dto.ProductDetailsPageDto; -import com.openhis.web.inventorymanage.dto.ProductDetailsSearchParam; - -import java.util.List; - -/** - * 库存商品明细查询用 mapper - * - * @author yuanzs - * @date 2025-04-25 - */ -@Repository -public interface ProductDetailsMapper { - - /** - * 查询库存商品明细分页列表 - * - * @param page 分页 - * @param queryWrapper 查询条件 - * @return 库存商品明细分页列表 - */ - Page selectProductDetailsPage(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper); - /** - * 查询库存商品明细分页列表 - * - * @param sqlWhere 查询条件 - * @param itemType 查询条件 - * @return 库存商品明细分页列表 - */ - ProductDetailsTotalDto selectProductDetailsPageTotal(@Param("sqlWhere") String sqlWhere, @Param("itemType") Integer itemType); - - /** - * 查询效期预警分页列表 - * - * @param page 分页 - * @param queryWrapper 查询条件 - * @return 库存商品明细分页列表 - */ - Page selectExpirationWarning(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("flg") String flg); - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ReceiptApprovalMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ReceiptApprovalMapper.java index ac0e065d..f2b538ec 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ReceiptApprovalMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inventorymanage/mapper/ReceiptApprovalMapper.java @@ -52,9 +52,24 @@ public interface ReceiptApprovalMapper extends BaseMapper { * @param approval 单据状态:审核中 * @param agree 单据状态:同意 * @param reject 单据状态:驳回 + * @param lossReportForm 单据类型:报损 + * @param issueInventory 单据类型:领用 + * @param productBatchStocktaking 单据类型:批量盘点 + * @param productStocktaking 单据类型:盘点 + * @param productReturn 单据类型:退货 + * @param returnIssue 单据类型:领用退货 + * @param productTransfer 单据类型:调拨 + * @param productBatchTransfer 单据类型:批量调拨 + * @param purchaseInventory 单据类型:采购入库 * @return 单据审批分页列表 */ Page selectReceiptPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, - @Param("approval") Integer approval, @Param("agree") Integer agree, @Param("reject") Integer reject); + @Param("approval") Integer approval, @Param("agree") Integer agree, @Param("reject") Integer reject, + @Param("lossReportForm") Integer lossReportForm, @Param("issueInventory") Integer issueInventory, + @Param("productBatchStocktaking") Integer productBatchStocktaking, + @Param("productStocktaking") Integer productStocktaking, @Param("productReturn") Integer productReturn, + @Param("returnIssue") Integer returnIssue, @Param("productTransfer") Integer productTransfer, + @Param("productBatchTransfer") Integer productBatchTransfer, + @Param("purchaseInventory") Integer purchaseInventory); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialProfitLossOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialProfitLossOrderServiceImpl.java index 458ea3a5..70bad1e6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialProfitLossOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialProfitLossOrderServiceImpl.java @@ -60,10 +60,10 @@ public class MaterialProfitLossOrderServiceImpl implements IMaterialProfitLossOr // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), - SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), - SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); +// supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), +// SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); +// supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), +// SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialPurchaseOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialPurchaseOrderServiceImpl.java index 29923db2..cdd738aa 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialPurchaseOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialPurchaseOrderServiceImpl.java @@ -58,10 +58,10 @@ public class MaterialPurchaseOrderServiceImpl implements IMaterialPurchaseOrderS // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.PURCHASE_PLAN_GENERATION.getValue(), - SupplyCategory.PURCHASE_PLAN_GENERATION.getInfo())); +// supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); +// supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.PURCHASE_PLAN_GENERATION.getValue(), +// SupplyCategory.PURCHASE_PLAN_GENERATION.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReturnOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReturnOrderServiceImpl.java index 5c328002..5ca69579 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReturnOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReturnOrderServiceImpl.java @@ -25,7 +25,6 @@ import com.openhis.web.materialmanage.appservice.IMaterialReturnOrderService; import com.openhis.web.materialmanage.dto.MaterialDetailDto; import com.openhis.web.materialmanage.dto.MaterialInitDto; import com.openhis.web.materialmanage.mapper.MaterialCommonMapper; -import com.openhis.web.materialmanage.mapper.MaterialReturnOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -59,8 +58,8 @@ public class MaterialReturnOrderServiceImpl implements IMaterialReturnOrderServi // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -134,10 +133,11 @@ public class MaterialReturnOrderServiceImpl implements IMaterialReturnOrderServi // 单据信息删除 supplyRequestService.removeByIds(requestIdList); } - //添加原始单据号 - if(returnOrderDtoList.get(0).getOriginalBusNo()!=null){ + // 添加原始单据号 + if (returnOrderDtoList.get(0).getOriginalBusNo() != null) { // 审批单据并返回单据详情 - List agreedList = supplyRequestService.addOriginalBusNo(returnOrderDtoList.get(0).getOriginalBusNo(), returnOrderDtoList.get(0).getBusNo()); + List agreedList = supplyRequestService + .addOriginalBusNo(returnOrderDtoList.get(0).getOriginalBusNo(), returnOrderDtoList.get(0).getBusNo()); if (agreedList.isEmpty()) { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReturnToWarehouseOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReturnToWarehouseOrderServiceImpl.java index 31e21df5..c38b6629 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReturnToWarehouseOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialReturnToWarehouseOrderServiceImpl.java @@ -25,7 +25,6 @@ import com.openhis.web.materialmanage.appservice.IMaterialReturnToWarehouseOrder import com.openhis.web.materialmanage.dto.MaterialDetailDto; import com.openhis.web.materialmanage.dto.MaterialInitDto; import com.openhis.web.materialmanage.mapper.MaterialCommonMapper; -import com.openhis.web.materialmanage.mapper.MaterialReturnToWarehouseOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -36,8 +35,7 @@ import com.openhis.workflow.service.ISupplyRequestService; * @date 2025-07-22 */ @Service -public class MaterialReturnToWarehouseOrderServiceImpl implements - IMaterialReturnToWarehouseOrderService { +public class MaterialReturnToWarehouseOrderServiceImpl implements IMaterialReturnToWarehouseOrderService { @Resource private AssignSeqUtil assignSeqUtil; @@ -49,6 +47,7 @@ public class MaterialReturnToWarehouseOrderServiceImpl implements private IMaterialCommonService materialCommonService; @Autowired private MaterialCommonMapper materialCommonMapper; + /** * 初始化 * @@ -61,8 +60,8 @@ public class MaterialReturnToWarehouseOrderServiceImpl implements // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -95,16 +94,14 @@ public class MaterialReturnToWarehouseOrderServiceImpl implements List unitList; for (MaterialDetailDto item : returnToWarehouseOrderDtoDetailPage.getRecords()) { unitList = new ArrayList<>(); - unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText())); - unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText() - )); + unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); item.setUnitList(unitList); } return R.ok(returnToWarehouseOrderDtoDetailPage); } - /** * 获取单据号 * @@ -130,17 +127,20 @@ public class MaterialReturnToWarehouseOrderServiceImpl implements @Override public R addOrEditReturnToWarehouseOrder(List returnToWarehouseOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(returnToWarehouseOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(returnToWarehouseOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); // 单据信息删除 supplyRequestService.removeByIds(requestIdList); } - //添加原始单据号 - if(returnToWarehouseOrderDtoList.get(0).getOriginalBusNo()!=null){ + // 添加原始单据号 + if (returnToWarehouseOrderDtoList.get(0).getOriginalBusNo() != null) { // 审批单据并返回单据详情 - List agreedList = supplyRequestService.addOriginalBusNo(returnToWarehouseOrderDtoList.get(0).getOriginalBusNo(), returnToWarehouseOrderDtoList.get(0).getBusNo()); + List agreedList = + supplyRequestService.addOriginalBusNo(returnToWarehouseOrderDtoList.get(0).getOriginalBusNo(), + returnToWarehouseOrderDtoList.get(0).getBusNo()); if (agreedList.isEmpty()) { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } @@ -162,8 +162,8 @@ public class MaterialReturnToWarehouseOrderServiceImpl implements .setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId()) .setReason(item.getReason()).setSourceTypeEnum(LocationForm.DEPARTMENT.getValue()) .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue()) - .setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStockInOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStockInOrderServiceImpl.java index 136dc888..6fedf641 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStockInOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStockInOrderServiceImpl.java @@ -61,11 +61,11 @@ public class MaterialStockInOrderServiceImpl implements IMaterialStockInOrderSer // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption - .add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption( - SupplyCategory.PRESENT.getValue(), SupplyCategory.PRESENT.getInfo())); +// supplyCategoryOption +// .add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); +// supplyCategoryOption.add(new MaterialInitDto.IntegerOption( +// SupplyCategory.PRESENT.getValue(), SupplyCategory.PRESENT.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStockOutOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStockOutOrderServiceImpl.java index 2925a3c2..6fa2d1db 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStockOutOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStockOutOrderServiceImpl.java @@ -25,7 +25,6 @@ import com.openhis.web.materialmanage.appservice.IMaterialStockOutOrderService; import com.openhis.web.materialmanage.dto.MaterialDetailDto; import com.openhis.web.materialmanage.dto.MaterialInitDto; import com.openhis.web.materialmanage.mapper.MaterialCommonMapper; -import com.openhis.web.materialmanage.mapper.MaterialStockOutOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -47,6 +46,7 @@ public class MaterialStockOutOrderServiceImpl implements IMaterialStockOutOrderS private IMaterialCommonService materialCommonService; @Autowired private MaterialCommonMapper materialCommonMapper; + /** * 初始化 * @@ -59,12 +59,13 @@ public class MaterialStockOutOrderServiceImpl implements IMaterialStockOutOrderS // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.IN_HOSPITAL_OUTBOUND.getValue(), - SupplyCategory.IN_HOSPITAL_OUTBOUND.getInfo())); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getValue(), - SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getInfo())); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.OPTICAL_MATERIALS.getValue(), - SupplyCategory.OPTICAL_MATERIALS.getInfo())); + // supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.IN_HOSPITAL_OUTBOUND.getValue(), + // SupplyCategory.IN_HOSPITAL_OUTBOUND.getInfo())); + // supplyCategoryOption.add(new + // MaterialInitDto.IntegerOption(SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getValue(), + // SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getInfo())); + // supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.OPTICAL_MATERIALS.getValue(), + // SupplyCategory.OPTICAL_MATERIALS.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -97,9 +98,8 @@ public class MaterialStockOutOrderServiceImpl implements IMaterialStockOutOrderS List unitList; for (MaterialDetailDto item : stockOutOrderDtoDetailPage.getRecords()) { unitList = new ArrayList<>(); - unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText())); - unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText() - )); + unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); item.setUnitList(unitList); } @@ -107,7 +107,6 @@ public class MaterialStockOutOrderServiceImpl implements IMaterialStockOutOrderS return R.ok(stockOutOrderDtoDetailPage); } - /** * 获取单据号 * @@ -140,10 +139,11 @@ public class MaterialStockOutOrderServiceImpl implements IMaterialStockOutOrderS // 单据信息删除 supplyRequestService.removeByIds(requestIdList); } - //添加原始单据号 - if(stockOutOrderDtoList.get(0).getOriginalBusNo()!=null){ + // 添加原始单据号 + if (stockOutOrderDtoList.get(0).getOriginalBusNo() != null) { // 审批单据并返回单据详情 - List agreedList = supplyRequestService.addOriginalBusNo(stockOutOrderDtoList.get(0).getOriginalBusNo(), stockOutOrderDtoList.get(0).getBusNo()); + List agreedList = supplyRequestService.addOriginalBusNo( + stockOutOrderDtoList.get(0).getOriginalBusNo(), stockOutOrderDtoList.get(0).getBusNo()); if (agreedList.isEmpty()) { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } @@ -165,8 +165,8 @@ public class MaterialStockOutOrderServiceImpl implements IMaterialStockOutOrderS .setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId()) .setReason(item.getReason()).setSourceTypeEnum(LocationForm.WAREHOUSE.getValue()) .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) - .setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStocktakingOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStocktakingOrderServiceImpl.java index 134a5ce8..b9c0814b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStocktakingOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialStocktakingOrderServiceImpl.java @@ -60,10 +60,10 @@ public class MaterialStocktakingOrderServiceImpl implements IMaterialStocktaking // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption( - SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption( - SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); +// supplyCategoryOption.add(new MaterialInitDto.IntegerOption( +// SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); +// supplyCategoryOption.add(new MaterialInitDto.IntegerOption( +// SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialTransferInOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialTransferInOrderServiceImpl.java index 459a4851..879fa62b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialTransferInOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialTransferInOrderServiceImpl.java @@ -25,7 +25,6 @@ import com.openhis.web.materialmanage.appservice.IMaterialTransferInOrderService import com.openhis.web.materialmanage.dto.MaterialDetailDto; import com.openhis.web.materialmanage.dto.MaterialInitDto; import com.openhis.web.materialmanage.mapper.MaterialCommonMapper; -import com.openhis.web.materialmanage.mapper.MaterialTransferInOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -59,8 +58,8 @@ public class MaterialTransferInOrderServiceImpl implements IMaterialTransferInOr // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -127,7 +126,8 @@ public class MaterialTransferInOrderServiceImpl implements IMaterialTransferInOr @Override public R addOrEditTransferInOrder(List transferInOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); @@ -149,8 +149,8 @@ public class MaterialTransferInOrderServiceImpl implements IMaterialTransferInOr .setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId()) .setReason(item.getReason()).setSourceTypeEnum(LocationForm.WAREHOUSE.getValue()) .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue()) - .setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialTransferOutOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialTransferOutOrderServiceImpl.java index c09ccd81..81eb728b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialTransferOutOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/materialmanage/appservice/impl/MaterialTransferOutOrderServiceImpl.java @@ -59,8 +59,8 @@ public class MaterialTransferOutOrderServiceImpl implements IMaterialTransferOut // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); +// supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfRatioApplicationRecordAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfRatioApplicationRecordAppService.java new file mode 100644 index 00000000..1bb55ecf --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfRatioApplicationRecordAppService.java @@ -0,0 +1,86 @@ +package com.openhis.web.nenu.appservice; + +import java.util.List; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.web.nenu.dto.GfRatioApplicationDefinitionSelectDto; +import com.openhis.web.nenu.dto.GfRatioApplicationPrintDto; +import com.openhis.web.nenu.dto.GfRatioApplicationProcessDto; +import com.openhis.web.nenu.dto.GfRatioApplicationRecordDto; + +/** + * 公费医疗-比例调整申请记录 AppService + * + * @author Thanking + * @date 2025-10-21 + */ +public interface IGfRatioApplicationRecordAppService { + + /** + * 查询比例调整申请记录分页 + * + * @param searchParam 查询参数 + * @param printable 申请单是否可打印 + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 比例调整申请记录分页 + */ + R> getPage(GfRatioApplicationRecordDto searchParam, String printable, + String searchKey, Integer pageNo, Integer pageSize); + + /** + * 查询比例调整申请记录详情 + * + * @param id ID + * @return 比例调整申请记录详情 + */ + R getDetail(Long id); + + /** + * 创建比例调整申请 + * + * @param gfRatioApplicationRecordDto 比例调整申请记录Dto + * @return 结果 + */ + R add(GfRatioApplicationRecordDto gfRatioApplicationRecordDto); + + /** + * 取消比例调整申请 + * + * @param id ID + * @return 结果 + */ + R cancel(Long id); + + /** + * 处理比例调整申请 + * + * @param gfRatioApplicationProcessDto 比例调整申请处理Dto + * @return 结果 + */ + R process(GfRatioApplicationProcessDto gfRatioApplicationProcessDto); + + /** + * 查询申请项目选择弹窗分页 + * + * @param searchParam 查询参数 + * @param searchKey 模糊查询关键字 + * @param itemType 项目分类 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 申请项目选择弹窗分页 + */ + R> getDefinitionSelectPage( + GfRatioApplicationDefinitionSelectDto searchParam, String searchKey, Integer itemType, Integer pageNo, + Integer pageSize); + + /** + * 查询申请单打印列表 + * + * @param ids 多个ID逗号拼接 + * @return 申请单打印列表 + */ + R> getPrintList(String ids); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfRatioManageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfRatioManageAppService.java new file mode 100644 index 00000000..38746631 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfRatioManageAppService.java @@ -0,0 +1,45 @@ +package com.openhis.web.nenu.appservice; + +import java.util.List; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.nenu.dto.GfTypeRatioDto; +import com.openhis.web.nenu.dto.GfIndividualRatioDto; + +/** + * 公费医疗-自付比例管理 AppService + * + * @author Thanking + * @date 2025-10-21 + */ +public interface IGfRatioManageAppService { + + /** + * 查询大项比例列表 + * + * @return 大项比例列表 + */ + R> getTypeRatioList(); + + /** + * 保存大项比例列表 + * + * @param typeRatioList 大项比例列表 + * @return 结果 + */ + R saveTypeRatioList(List typeRatioList); + + /** + * 查询单项比例分页 + * + * @param searchParam 查询参数 + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 单项比例分页 + */ + R> getIndividualRatioPage(GfIndividualRatioDto searchParam, String searchKey, + Integer pageNo, Integer pageSize); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfStudentListAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfStudentListAppService.java new file mode 100644 index 00000000..c9a91294 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/IGfStudentListAppService.java @@ -0,0 +1,77 @@ +package com.openhis.web.nenu.appservice; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.multipart.MultipartFile; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.web.nenu.dto.GfStudentListDto; + +/** + * 公费医疗-学生名单管理 AppService + * + * @author Thanking + * @date 2025-10-21 + */ +public interface IGfStudentListAppService { + + /** + * 查询学生名单分页 + * + * @param searchParam 查询参数 + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 学生名单分页 + */ + R> getPage(GfStudentListDto searchParam, String searchKey, Integer pageNo, + Integer pageSize); + + /** + * 查询学生名单详情 + * + * @param id ID + * @return 学生名单详情 + */ + R getDetail(Long id); + + /** + * 添加学生名单 + * + * @param gfStudentListDto 学生名单Dto + * @return 结果 + */ + R add(GfStudentListDto gfStudentListDto); + + /** + * 编辑学生名单 + * + * @param gfStudentListDto 学生名单Dto + * @return 结果 + */ + R edit(GfStudentListDto gfStudentListDto); + + /** + * 删除学生名单 + * + * @param id ID + * @return 结果 + */ + R delete(Long id); + + /** + * 导入学生名单 + * + * @param file 文件 + * @return 结果 + */ + R importData(MultipartFile file); + + /** + * 获取导入模板 + * + * @param response 响应 + */ + void importTemplate(HttpServletResponse response); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfRatioApplicationRecordAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfRatioApplicationRecordAppServiceImpl.java new file mode 100644 index 00000000..f3950b49 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfRatioApplicationRecordAppServiceImpl.java @@ -0,0 +1,572 @@ +package com.openhis.web.nenu.appservice.impl; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.beans.factory.annotation.Autowired; +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.conditions.update.LambdaUpdateWrapper; +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.enums.DeleteFlag; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.DateUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.ChargeItemDefinition; +import com.openhis.administration.service.IChargeItemDefinitionService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbChrgitmLv; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.medication.domain.MedicationDefinition; +import com.openhis.medication.service.IMedicationDefinitionService; +import com.openhis.nenu.domain.GfRatio; +import com.openhis.nenu.domain.GfRatioApplication; +import com.openhis.nenu.service.IGfRatioApplicationService; +import com.openhis.nenu.service.IGfRatioService; +import com.openhis.web.nenu.appservice.IGfRatioApplicationRecordAppService; +import com.openhis.web.nenu.dto.GfRatioApplicationDefinitionSelectDto; +import com.openhis.web.nenu.dto.GfRatioApplicationPrintDto; +import com.openhis.web.nenu.dto.GfRatioApplicationProcessDto; +import com.openhis.web.nenu.dto.GfRatioApplicationRecordDto; +import com.openhis.web.nenu.mapper.GfRatioApplicationRecordAppMapper; +import com.openhis.workflow.domain.ActivityDefinition; +import com.openhis.workflow.service.IActivityDefinitionService; + +/** + * 公费医疗-比例调整申请记录 AppServiceImpl + * + * @author Thanking + * @date 2025-10-21 + */ +@Service +public class GfRatioApplicationRecordAppServiceImpl implements IGfRatioApplicationRecordAppService { + + @Autowired + private IGfRatioService gfRatioService; + @Autowired + private IGfRatioApplicationService gfRatioApplicationService; + @Autowired + private IMedicationDefinitionService medicationDefinitionService; + @Autowired + private IActivityDefinitionService activityDefinitionService; + @Autowired + private IChargeItemDefinitionService chargeItemDefinitionService; + @Autowired + private GfRatioApplicationRecordAppMapper gfRatioApplicationRecordAppMapper; + @Autowired + private AssignSeqUtil assignSeqUtil; + + /** + * 查询比例调整申请记录分页 + * + * @param searchParam 查询参数 + * @param printable 申请单是否可打印 + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 比例调整申请记录分页 + */ + @Override + public R> getPage(GfRatioApplicationRecordDto searchParam, String printable, + String searchKey, Integer pageNo, Integer pageSize) { + // 构造查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, searchKey, + new HashSet<>(Set.of("application_no", "bus_no", "name", "py_str", "wb_str", "yb_no")), null); + // 可打印筛选 + if (Whether.YES.getCode().equals(printable)) { + queryWrapper.eq("application_status", GfApplicationStatus.PROCESSING.getValue()).eq("final_approval_result", + GfApplicationStatus.PROCESSING.getValue()); + } + // 查询比例调整申请记录分页 + IPage page = gfRatioApplicationRecordAppMapper + .selectGfRatioApplicationRecordPage(new Page<>(pageNo, pageSize), queryWrapper); + for (GfRatioApplicationRecordDto r : page.getRecords()) { + // 翻译非字典枚举 + GfItemType gfItemType = GfItemType.getByValue(r.getItemType()); + if (gfItemType != null) { + r.setItemTypeName(gfItemType.getInfo()); + } + } + return R.ok(page); + } + + /** + * 查询比例调整申请记录详情 + * + * @param id ID + * @return 比例调整申请记录详情 + */ + @Override + public R getDetail(Long id) { + // 查询比例调整申请记录详情 + GfRatioApplication gfRatioApplication = gfRatioApplicationService.getById(id); + if (gfRatioApplication == null) { + return R.fail(); + } + // 定义返回Dto + GfRatioApplicationRecordDto gfRatioApplicationRecordDto = new GfRatioApplicationRecordDto(); + String defTableName = CommonConstants.TableName.MED_MEDICATION_DEFINITION; + String chrgitmLv = YbChrgitmLv.SELF_PAY.getCode(); + String ybNo = null; + if (GfItemType.MEDICATION.getValue().equals(gfRatioApplication.getItemType())) { + // 如果是药品,获取并设置药品定义信息 + MedicationDefinition medicationDefinition = + medicationDefinitionService.getById(gfRatioApplication.getDefinitionId()); + if (medicationDefinition != null) { + gfRatioApplicationRecordDto.setBusNo(medicationDefinition.getBusNo()) + .setName(medicationDefinition.getName()).setYbNo(medicationDefinition.getYbNo()) + // 公费项目分类:药品 + .setItemTypeName(GfItemType.MEDICATION.getInfo()); + chrgitmLv = + Optional.of(medicationDefinition.getChrgitmLv()).orElse(YbChrgitmLv.SELF_PAY.getValue()).toString(); + ybNo = medicationDefinition.getYbNo(); + } + } else if (GfItemType.ACTIVITY.getValue().equals(gfRatioApplication.getItemType())) { + // 如果是诊疗,获取并设置诊疗定义信息 + ActivityDefinition activityDefinition = + activityDefinitionService.getById(gfRatioApplication.getDefinitionId()); + if (activityDefinition != null) { + gfRatioApplicationRecordDto.setBusNo(activityDefinition.getBusNo()) + .setName(activityDefinition.getName()).setYbNo(activityDefinition.getYbNo()) + // 公费项目分类:诊疗 + .setItemTypeName(GfItemType.ACTIVITY.getInfo()); + chrgitmLv = + Optional.of(activityDefinition.getChrgitmLv()).orElse(YbChrgitmLv.SELF_PAY.getValue()).toString(); + ybNo = activityDefinition.getYbNo(); + } + defTableName = CommonConstants.TableName.WOR_ACTIVITY_DEFINITION; + } + YbChrgitmLv ybChrgitmLv = YbChrgitmLv.getByCode(chrgitmLv); + // 查询原支付比例 + Pair, BigDecimal> oldRatiosAndPrice = + this.getOldRatiosAndPrice(gfRatioApplication.getDefinitionId(), defTableName, chrgitmLv); + // Dto赋值返回 + gfRatioApplicationRecordDto.setId(gfRatioApplication.getId()).setApplicationNo(gfRatioApplication.getBusNo()) + .setItemType(gfRatioApplication.getItemType()) + // 医保编号 + .setYbNo(ybNo) + // 医保等级名称 + .setChrgitmLvName(ybChrgitmLv == null ? null : ybChrgitmLv.getInfo()) + .setApplicationRatio(gfRatioApplication.getApplicationRatio()) + .setOldRatio(oldRatiosAndPrice.getLeft().getLeft()).setTotalPrice(oldRatiosAndPrice.getRight()) + // 价格差:计算得出 + .setPriceDiff(oldRatiosAndPrice.getLeft().getLeft() != null + && gfRatioApplication.getApplicationRatio() != null && oldRatiosAndPrice.getRight() != null + ? gfRatioApplication.getApplicationRatio().subtract(oldRatiosAndPrice.getLeft().getLeft()) + .multiply(oldRatiosAndPrice.getRight()).divide(new BigDecimal(100), RoundingMode.UNNECESSARY) + : null) + .setTwiceRatio(gfRatioApplication.getTwiceRatio()).setOldTwiceRatio(oldRatiosAndPrice.getLeft().getRight()) + .setStartDate(gfRatioApplication.getStartDate()).setEndDate(gfRatioApplication.getEndDate()) + .setApplicationStatus(gfRatioApplication.getApplicationStatus()) + .setApplicant(gfRatioApplication.getApplicant()).setApplicationTime(gfRatioApplication.getApplicationTime()) + .setApplicationReason(gfRatioApplication.getApplicationReason()) + .setInitialApprover(gfRatioApplication.getInitialApprover()) + .setInitialApprovalResult(gfRatioApplication.getInitialApprovalResult()) + .setInitialApprovalTime(gfRatioApplication.getInitialApprovalTime()) + .setInitialApprovalOpinion(gfRatioApplication.getInitialApprovalOpinion()) + .setFinanceApprover(gfRatioApplication.getFinanceApprover()) + .setFinanceApprovalResult(gfRatioApplication.getFinanceApprovalResult()) + .setFinanceApprovalTime(gfRatioApplication.getFinanceApprovalTime()) + .setFinanceApprovalOpinion(gfRatioApplication.getFinanceApprovalOpinion()) + .setFinalRecorder(gfRatioApplication.getFinalRecorder()) + .setFinalApprovalResult(gfRatioApplication.getFinalApprovalResult()) + .setFinalRecordTime(gfRatioApplication.getFinalRecordTime()) + .setFinalApprovalOpinion(gfRatioApplication.getFinalApprovalOpinion()); + return R.ok(gfRatioApplicationRecordDto); + } + + /** + * 创建比例调整申请 + * + * @param gfRatioApplicationRecordDto 比例调整申请记录Dto + * @return 结果 + */ + @Override + public R add(GfRatioApplicationRecordDto gfRatioApplicationRecordDto) { + // 查询指定项目现行比例 + List gfRatioList = gfRatioService.list(new LambdaQueryWrapper() + .eq(GfRatio::getDefinitionId, gfRatioApplicationRecordDto.getDefinitionId()) + .eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + // 验证时间是否重叠 + if (!gfRatioList.isEmpty()) { + for (GfRatio r : gfRatioList) { + if (!r.getStartDate().after(gfRatioApplicationRecordDto.getEndDate()) + && !r.getEndDate().before(gfRatioApplicationRecordDto.getStartDate())) { + return R.fail("该项目此次申请的开始结束时间与现行比例开始结束时间有重叠,请确认"); + } + } + } + // 创建申请 + GfRatioApplication gfRatioApplication = new GfRatioApplication() + .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.GF_RATIO_APPLICATION.getPrefix(), 4)) + .setItemType(gfRatioApplicationRecordDto.getItemType()) + .setApplicationRatio(gfRatioApplicationRecordDto.getApplicationRatio()) + .setTwiceRatio(gfRatioApplicationRecordDto.getTwiceRatio()) + .setStartDate(gfRatioApplicationRecordDto.getStartDate()) + // 结束时间:调整为当天23点59分59秒 + .setEndDate(DateUtils.addSeconds(DateUtils.addDays(gfRatioApplicationRecordDto.getEndDate(), 1), -1)) + // 申请状态:处理中 + .setApplicationStatus(GfApplicationStatus.PROCESSING.getValue()).setApplicant(SecurityUtils.getNickName()) + .setApplicationTime(DateUtils.getNowDate()) + .setApplicationReason(gfRatioApplicationRecordDto.getApplicationReason()) + // 测算通过or驳回:处理中 + .setInitialApprovalResult(GfApplicationStatus.PROCESSING.getValue()) + .setDefinitionId(gfRatioApplicationRecordDto.getDefinitionId()); + gfRatioApplicationService.save(gfRatioApplication); + return R.ok(); + } + + /** + * 取消比例调整申请 + * + * @param id ID + * @return 结果 + */ + @Override + public R cancel(Long id) { + // 存在验证 + GfRatioApplication gfRatioApplication = gfRatioApplicationService.getById(id); + if (gfRatioApplication == null) { + return R.fail("申请不存在"); + } + // 状态验证 + if (!GfApplicationStatus.PROCESSING.getValue().equals(gfRatioApplication.getApplicationStatus()) + && !GfApplicationStatus.PROCESSING.getValue().equals(gfRatioApplication.getInitialApprovalResult())) { + return R.fail("该申请已不可取消"); + } + // 更新申请记录 + gfRatioApplicationService.update(new GfRatioApplication(), new LambdaUpdateWrapper() + // 申请状态:取消 + .set(GfRatioApplication::getApplicationStatus, GfApplicationStatus.CANCELLED.getValue()) + // 测算通过or驳回:NULL + .set(GfRatioApplication::getInitialApprovalResult, null).eq(GfRatioApplication::getId, id)); + + return null; + } + + /** + * 处理比例调整申请 + * + * @param gfRatioApplicationProcessDto 比例调整申请处理Dto + * @return 结果 + */ + @Override + public R process(GfRatioApplicationProcessDto gfRatioApplicationProcessDto) { + // 存在验证 + GfRatioApplication gfRatioApplication = gfRatioApplicationService.getById(gfRatioApplicationProcessDto.getId()); + if (gfRatioApplication == null) { + return R.fail("申请不存在"); + } + // 状态验证 + if (GfApplicationStatus.APPROVED.getValue().equals(gfRatioApplication.getApplicationStatus())) { + return R.fail("该申请已被通过,无需处理"); + } + if (GfApplicationStatus.REJECTED.getValue().equals(gfRatioApplication.getApplicationStatus())) { + return R.fail("该申请已被驳回,不可处理"); + } + if (GfApplicationStatus.CANCELLED.getValue().equals(gfRatioApplication.getApplicationStatus())) { + return R.fail("该申请已被取消,不可处理"); + } + // 根据执行操作的角色分别处理 + String loginUserName = SecurityUtils.getNickName(); + Date now = DateUtils.getNowDate(); + + // 【测算盈亏】 + if (GfApprovalRole.INITIAL_APPROVER.getValue().equals(gfRatioApplicationProcessDto.getApprovalRole())) { + if (!GfApplicationStatus.PROCESSING.getValue().equals(gfRatioApplication.getInitialApprovalResult())) { + return R.fail("该节点已被处理,不可再处理"); + } + + // 申请通过 + if (GfApplicationStatus.APPROVED.getValue().equals(gfRatioApplicationProcessDto.getApprovalResult())) { + // 更新申请记录 + gfRatioApplicationService.update(new GfRatioApplication(), + new LambdaUpdateWrapper() + .set(GfRatioApplication::getInitialApprover, loginUserName) + // 测算通过or驳回:通过 + .set(GfRatioApplication::getInitialApprovalResult, GfApplicationStatus.APPROVED.getValue()) + .set(GfRatioApplication::getInitialApprovalTime, now) + .set(GfRatioApplication::getInitialApprovalOpinion, + gfRatioApplicationProcessDto.getApprovalOpinion()) + // 财务科通过or驳回:处理中 + .set(GfRatioApplication::getFinanceApprovalResult, GfApplicationStatus.PROCESSING.getValue()) + .eq(GfRatioApplication::getId, gfRatioApplicationProcessDto.getId())); + + // 申请驳回 + } else if (GfApplicationStatus.REJECTED.getValue() + .equals(gfRatioApplicationProcessDto.getApprovalResult())) { + // 更新申请记录 + gfRatioApplicationService.update(new GfRatioApplication(), + new LambdaUpdateWrapper() + .set(GfRatioApplication::getInitialApprover, loginUserName) + // 测算通过or驳回:驳回 + .set(GfRatioApplication::getInitialApprovalResult, GfApplicationStatus.REJECTED.getValue()) + .set(GfRatioApplication::getInitialApprovalTime, now) + .set(GfRatioApplication::getInitialApprovalOpinion, + gfRatioApplicationProcessDto.getApprovalOpinion()) + // 申请状态:驳回 + .set(GfRatioApplication::getApplicationStatus, GfApplicationStatus.REJECTED.getValue()) + .eq(GfRatioApplication::getId, gfRatioApplicationProcessDto.getId())); + } else { + return R.fail("通过or驳回指定错误"); + } + + // 【财务科报批】 + } else if (GfApprovalRole.FINANCE_APPROVER.getValue().equals(gfRatioApplicationProcessDto.getApprovalRole())) { + if (!GfApplicationStatus.PROCESSING.getValue().equals(gfRatioApplication.getFinanceApprovalResult())) { + return R.fail("该节点已被处理,不可再处理"); + } + + // 申请通过 + if (GfApplicationStatus.APPROVED.getValue().equals(gfRatioApplicationProcessDto.getApprovalResult())) { + // 更新申请记录 + gfRatioApplicationService.update(new GfRatioApplication(), + new LambdaUpdateWrapper() + .set(GfRatioApplication::getFinanceApprover, loginUserName) + // 财务科通过or驳回:通过 + .set(GfRatioApplication::getFinanceApprovalResult, GfApplicationStatus.APPROVED.getValue()) + .set(GfRatioApplication::getFinanceApprovalTime, now) + .set(GfRatioApplication::getFinanceApprovalOpinion, + gfRatioApplicationProcessDto.getApprovalOpinion()) + // 会议通过or驳回:处理中 + .set(GfRatioApplication::getFinalApprovalResult, GfApplicationStatus.PROCESSING.getValue()) + .eq(GfRatioApplication::getId, gfRatioApplicationProcessDto.getId())); + + // 申请驳回 + } else if (GfApplicationStatus.REJECTED.getValue() + .equals(gfRatioApplicationProcessDto.getApprovalResult())) { + // 更新申请记录 + gfRatioApplicationService.update(new GfRatioApplication(), + new LambdaUpdateWrapper() + .set(GfRatioApplication::getFinanceApprover, loginUserName) + // 财务科通过or驳回:驳回 + .set(GfRatioApplication::getFinanceApprovalResult, GfApplicationStatus.REJECTED.getValue()) + .set(GfRatioApplication::getFinanceApprovalTime, now) + .set(GfRatioApplication::getFinanceApprovalOpinion, + gfRatioApplicationProcessDto.getApprovalOpinion()) + // 申请状态:驳回 + .set(GfRatioApplication::getApplicationStatus, GfApplicationStatus.REJECTED.getValue()) + .eq(GfRatioApplication::getId, gfRatioApplicationProcessDto.getId())); + } else { + return R.fail("通过or驳回指定错误"); + } + + // 【会议结果录入】 + } else if (GfApprovalRole.FINAL_RECORDER.getValue().equals(gfRatioApplicationProcessDto.getApprovalRole())) { + if (!GfApplicationStatus.PROCESSING.getValue().equals(gfRatioApplication.getFinalApprovalResult())) { + return R.fail("该节点已被处理,不可再处理"); + } + + // 申请通过 + if (GfApplicationStatus.APPROVED.getValue().equals(gfRatioApplicationProcessDto.getApprovalResult())) { + // 更新申请记录 + gfRatioApplicationService.update(new GfRatioApplication(), new LambdaUpdateWrapper() + .set(GfRatioApplication::getFinalRecorder, loginUserName) + // 会议通过or驳回:通过 + .set(GfRatioApplication::getFinalApprovalResult, GfApplicationStatus.APPROVED.getValue()) + .set(GfRatioApplication::getFinalRecordTime, now) + .set(GfRatioApplication::getFinalApprovalOpinion, gfRatioApplicationProcessDto.getApprovalOpinion()) + // 申请状态:通过 + .set(GfRatioApplication::getApplicationStatus, GfApplicationStatus.APPROVED.getValue()) + .eq(GfRatioApplication::getId, gfRatioApplicationProcessDto.getId())); + // 创建现行自付比例 + GfRatio gfRatio = new GfRatio() + // 比例类型:单项比例 + .setRatioType(GfRatioType.INDIVIDUAL_RATIO.getValue()).setItemType(gfRatioApplication.getItemType()) + .setSelfRatio(gfRatioApplication.getApplicationRatio()) + .setTwiceRatio(gfRatioApplication.getTwiceRatio()).setStartDate(gfRatioApplication.getStartDate()) + .setEndDate(gfRatioApplication.getEndDate()).setDefinitionId(gfRatioApplication.getDefinitionId()); + gfRatioService.save(gfRatio); + + // 申请驳回 + } else if (GfApplicationStatus.REJECTED.getValue() + .equals(gfRatioApplicationProcessDto.getApprovalResult())) { + // 申请驳回,更新申请记录 + gfRatioApplicationService.update(new GfRatioApplication(), new LambdaUpdateWrapper() + .set(GfRatioApplication::getFinalRecorder, loginUserName) + // 财务科通过or驳回:驳回 + .set(GfRatioApplication::getFinalApprovalResult, GfApplicationStatus.REJECTED.getValue()) + .set(GfRatioApplication::getFinalRecordTime, now) + .set(GfRatioApplication::getFinalApprovalOpinion, gfRatioApplicationProcessDto.getApprovalOpinion()) + // 申请状态:驳回 + .set(GfRatioApplication::getApplicationStatus, GfApplicationStatus.REJECTED.getValue()) + .eq(GfRatioApplication::getId, gfRatioApplicationProcessDto.getId())); + } else { + return R.fail("通过or驳回指定错误"); + } + } else { + return R.fail("角色指定错误"); + } + return R.ok(); + } + + /** + * 查询申请项目选择弹窗分页 + * + * @param searchParam 查询参数 + * @param searchKey 模糊查询关键字 + * @param itemType 项目分类 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 申请项目选择弹窗分页 + */ + @Override + public R> getDefinitionSelectPage( + GfRatioApplicationDefinitionSelectDto searchParam, String searchKey, Integer itemType, Integer pageNo, + Integer pageSize) { + // 构造查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, + searchKey, new HashSet<>(Set.of("bus_no", "name", "py_str", "wb_str", "yb_no")), null); + // 查询比例调整申请记录分页 + IPage page = gfRatioApplicationRecordAppMapper + .selectGfRatioApplicationDefinitionSelectPage(itemType, new Page<>(pageNo, pageSize), queryWrapper); + // 翻译非字典枚举 + for (GfRatioApplicationDefinitionSelectDto dto : page.getRecords()) { + YbChrgitmLv ybChrgitmLv = YbChrgitmLv.getByValue(dto.getChrgitmLv()); + if (ybChrgitmLv != null) { + dto.setChrgitmLvName(ybChrgitmLv.getInfo()); + } + } + return R.ok(page); + } + + /** + * 查询申请单打印列表 + * + * @param ids 多个ID逗号拼接 + * @return 申请单打印列表 + */ + @Override + public R> getPrintList(String ids) { + // 切割读取多个ID + List idList; + try { + idList = Arrays.stream(ids.split(",")).map(String::trim).filter(s -> !s.isEmpty()).map(Long::valueOf) + .collect(Collectors.toList()); + } catch (NumberFormatException e) { + return R.fail("传参有误"); + } + if (idList.isEmpty()) { + return R.ok(Collections.emptyList()); + } + // 查询要打印的申请单 + List applicationList = + gfRatioApplicationService.list(new LambdaQueryWrapper() + .in(GfRatioApplication::getId, idList).orderByDesc(GfRatioApplication::getId)); + if (applicationList.isEmpty()) { + return R.ok(Collections.emptyList()); + } + // 循环做出打印信息列表 + List printDtoList = new ArrayList<>(); + GfRatioApplicationPrintDto printDto; + for (GfRatioApplication application : applicationList) { + printDto = new GfRatioApplicationPrintDto(); + String itemName = ""; + String ybLv = YbChrgitmLv.SELF_PAY.getCode(); + String defTableName = CommonConstants.TableName.MED_MEDICATION_DEFINITION; + if (GfItemType.MEDICATION.getValue().equals(application.getItemType())) { + // 获取药品名称和医保等级 + MedicationDefinition medicationDefinition = + medicationDefinitionService.getById(application.getDefinitionId()); + if (medicationDefinition != null) { + itemName = medicationDefinition.getName(); + ybLv = Optional.of(medicationDefinition.getChrgitmLv()).orElse(YbChrgitmLv.SELF_PAY.getValue()) + .toString(); + } + } else if (GfItemType.ACTIVITY.getValue().equals(application.getItemType())) { + // 获取诊疗名称和医保等级 + ActivityDefinition activityDefinition = + activityDefinitionService.getById(application.getDefinitionId()); + if (activityDefinition != null) { + itemName = activityDefinition.getName(); + ybLv = Optional.of(activityDefinition.getChrgitmLv()).orElse(YbChrgitmLv.SELF_PAY.getValue()) + .toString(); + } + defTableName = CommonConstants.TableName.WOR_ACTIVITY_DEFINITION; + } + YbChrgitmLv ybChrgitmLv = YbChrgitmLv.getByCode(ybLv); + // 查询原支付比例和价格(包括二次比例) + Pair, BigDecimal> oldRatiosAndPrice = + this.getOldRatiosAndPrice(application.getDefinitionId(), defTableName, ybLv); + BigDecimal oldRatio = oldRatiosAndPrice.getLeft().getLeft(); + BigDecimal oldTwiceRatio = oldRatiosAndPrice.getLeft().getRight(); + BigDecimal totalPrice = oldRatiosAndPrice.getRight(); + // 作成返回Dto + printDto.setItemName(itemName) + // 全价 + .setTotalPrice(totalPrice == null ? "" : totalPrice.stripTrailingZeros().toPlainString()) + // 医保等级 + .setChrgitmLv(ybChrgitmLv == null ? "" : ybChrgitmLv.getInfo()) + // 原支付比例 + .setOldRatio(oldRatio == null ? "" : oldRatio.stripTrailingZeros().toPlainString()) + // 新支付比例 + .setNewRatio(application.getApplicationRatio() == null ? "" + : application.getApplicationRatio().stripTrailingZeros().toPlainString()) + // 价格差 + .setPriceDiff(oldRatio != null && application.getApplicationRatio() != null && totalPrice != null + ? application.getApplicationRatio().subtract(oldRatio).multiply(totalPrice) + .divide(new BigDecimal(100), RoundingMode.UNNECESSARY).stripTrailingZeros().toPlainString() + : "") + // 原二次支付比例 + .setOldTwiceRatio(oldTwiceRatio == null ? "" : oldTwiceRatio.stripTrailingZeros().toPlainString()) + // 新二次支付比例 + .setNewTwiceRatio(application.getTwiceRatio() == null ? "" + : application.getTwiceRatio().stripTrailingZeros().toPlainString()); + printDtoList.add(printDto); + } + return R.ok(printDtoList); + } + + /** + * 查询原支付比例和价格(包括二次比例) + * + * @param definitionId 定义ID + * @param definitionTableName 定义表名 + * @param ybLv 医保等级 + * @return 原支付比例和价格(包括二次比例) + */ + private Pair, BigDecimal> getOldRatiosAndPrice(Long definitionId, + String definitionTableName, String ybLv) { + BigDecimal oldRatio = null; + BigDecimal price = null; + // 查询费用定价 + List chargeItemDefinitionList = chargeItemDefinitionService + .list(new LambdaQueryWrapper().eq(ChargeItemDefinition::getInstanceId, definitionId) + .eq(ChargeItemDefinition::getInstanceTable, definitionTableName) + .orderByDesc(ChargeItemDefinition::getId)); + if (!chargeItemDefinitionList.isEmpty()) { + price = chargeItemDefinitionList.get(0).getPrice(); + // 查询现行大类比例 + List typeRatioList = gfRatioService + .list(new LambdaQueryWrapper().eq(GfRatio::getRatioType, GfRatioType.TYPE_RATIO.getValue()) + .eq(GfRatio::getYbClass, chargeItemDefinitionList.get(0).getYbType()).eq(GfRatio::getYbLv, ybLv) + .eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + if (!typeRatioList.isEmpty()) { + oldRatio = typeRatioList.get(0).getSelfRatio(); + } + } + // 查询历史小项比例 + List historicalRatioList = + gfRatioService.list(new LambdaQueryWrapper().eq(GfRatio::getDefinitionId, definitionId) + .eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()).orderByDesc(GfRatio::getId)); + BigDecimal oldTwiceRatio = null; + if (!historicalRatioList.isEmpty()) { + GfRatio latestRatio = historicalRatioList.get(0); + Date now = DateUtils.getNowDate(); + // 只获取还在生效中的历史小项比例 + if (latestRatio.getStartDate().before(now) && latestRatio.getEndDate().after(now)) { + oldRatio = latestRatio.getSelfRatio(); + oldTwiceRatio = latestRatio.getTwiceRatio(); + } + } + return Pair.of(Pair.of(oldRatio, oldTwiceRatio), price); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfRatioManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfRatioManageAppServiceImpl.java new file mode 100644 index 00000000..52823703 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfRatioManageAppServiceImpl.java @@ -0,0 +1,123 @@ +package com.openhis.web.nenu.appservice.impl; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +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.enums.DeleteFlag; +import com.openhis.common.enums.GfItemType; +import com.openhis.common.enums.GfRatioType; +import com.openhis.common.enums.ybenums.YbChrgitmLv; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.nenu.domain.GfRatio; +import com.openhis.nenu.dto.GfTypeRatioDto; +import com.openhis.nenu.service.IGfRatioService; +import com.openhis.web.nenu.appservice.IGfRatioManageAppService; +import com.openhis.web.nenu.dto.GfIndividualRatioDto; +import com.openhis.web.nenu.mapper.GfRatioManageAppMapper; + +/** + * 公费医疗-自付比例管理 AppServiceImpl + * + * @author Thanking + * @date 2025-10-21 + */ +@Service +public class GfRatioManageAppServiceImpl implements IGfRatioManageAppService { + + @Autowired + private IGfRatioService gfRatioService; + @Autowired + private GfRatioManageAppMapper gfRatioManageAppMapper; + + /** + * 查询大项比例列表 + * + * @return 大项比例列表 + */ + @Override + public R> getTypeRatioList() { + return R.ok(gfRatioService.getTypeRatioList()); + } + + /** + * 保存大项比例列表 + * + * @param typeRatioList 大项比例列表 + * @return 结果 + */ + @Override + public R saveTypeRatioList(List typeRatioList) { + // 查询DB中的所有大项比例 + List gfRatioList = gfRatioService + .list(new LambdaQueryWrapper().eq(GfRatio::getRatioType, GfRatioType.TYPE_RATIO.getValue()) + .eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + // 做成医保分项+医保等级拼接的Map + Map gfRatioMap = + gfRatioList.stream().collect(Collectors.toMap(e -> e.getYbClass() + e.getYbLv(), Function.identity())); + // 遍历输入项 + List addGfRatioList = new ArrayList<>(); + List editGfRatioList = new ArrayList<>(); + for (GfTypeRatioDto dto : typeRatioList) { + if (dto.getSelfRatio() == null) { + continue; + } + GfRatio editGfRatio = gfRatioMap.get(dto.getYbClass() + dto.getYbLv()); + if (editGfRatio == null) { + // DB不存在时新增 + GfRatio addGfRatio = new GfRatio().setRatioType(GfRatioType.TYPE_RATIO.getValue()) + .setYbClass(dto.getYbClass()).setYbLv(dto.getYbLv()).setSelfRatio(dto.getSelfRatio()); + addGfRatioList.add(addGfRatio); + } else { + // DB存在时修改 + editGfRatio.setSelfRatio(dto.getSelfRatio()); + editGfRatioList.add(editGfRatio); + } + } + // 批量DB处理 + if (!addGfRatioList.isEmpty()) { + gfRatioService.saveBatch(addGfRatioList); + } + if (!editGfRatioList.isEmpty()) { + gfRatioService.updateBatchById(editGfRatioList); + } + return R.ok(); + } + + /** + * 查询单项比例分页 + * + * @param searchParam 查询参数 + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 单项比例分页 + */ + @Override + public R> getIndividualRatioPage(GfIndividualRatioDto searchParam, String searchKey, + Integer pageNo, Integer pageSize) { + // 构造查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, searchKey, + new HashSet<>(Set.of("bus_no", "name", "py_str", "wb_str", "yb_no")), null); + // 查询单项比例分页 + IPage page = + gfRatioManageAppMapper.selectGfIndividualRatioPage(new Page<>(pageNo, pageSize), queryWrapper); + // 设置公费项目分类名称 + for (GfIndividualRatioDto dto : page.getRecords()) { + dto.setItemTypeName(GfItemType.getByValue(dto.getItemType()).getInfo()); + YbChrgitmLv ybChrgitmLv = YbChrgitmLv.getByValue(dto.getChrgitmLv()); + if (ybChrgitmLv != null) { + dto.setChrgitmLvName(ybChrgitmLv.getInfo()); + } + } + return R.ok(page); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfStudentListAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfStudentListAppServiceImpl.java new file mode 100644 index 00000000..f05345a8 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/appservice/impl/GfStudentListAppServiceImpl.java @@ -0,0 +1,443 @@ +package com.openhis.web.nenu.appservice.impl; + +import java.time.format.DateTimeParseException; +import java.util.*; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +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.enums.DeleteFlag; +import com.core.common.utils.*; +import com.core.common.utils.poi.ExcelUtil; +import com.openhis.administration.domain.Patient; +import com.openhis.administration.domain.PatientStudent; +import com.openhis.administration.service.IPatientService; +import com.openhis.administration.service.IPatientStudentService; +import com.openhis.common.enums.AssignSeqEnum; +import com.openhis.common.enums.PhysicalExamResult; +import com.openhis.common.enums.StudentStatus; +import com.openhis.common.utils.CommonUtil; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.common.utils.IdCardUtil; +import com.openhis.web.nenu.appservice.IGfStudentListAppService; +import com.openhis.web.nenu.dto.GfStudentListDto; +import com.openhis.web.nenu.dto.GfStudentListImportDto; +import com.openhis.web.nenu.mapper.GfStudentListAppMapper; + +/** + * 公费医疗-学生名单管理 AppServiceImpl + * + * @author Thanking + * @date 2025-10-21 + */ +@Service +public class GfStudentListAppServiceImpl implements IGfStudentListAppService { + + @Autowired + private IPatientStudentService patientStudentService; + @Autowired + private IPatientService patientService; + @Autowired + private GfStudentListAppMapper gfStudentListAppMapper; + @Autowired + private AssignSeqUtil assignSeqUtil; + + /** + * 查询学生名单分页 + * + * @param searchParam 查询参数 + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 学生名单分页 + */ + @Override + public R> getPage(GfStudentListDto searchParam, String searchKey, Integer pageNo, + Integer pageSize) { + // 构造查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, searchKey, + new HashSet<>(Set.of("name", "py_str", "wb_str", "student_id", "id_number")), null); + // 查询学生名单分页 + IPage page = + gfStudentListAppMapper.selectGfStudentListPage(new Page<>(pageNo, pageSize), queryWrapper); + return R.ok(page); + } + + /** + * 查询学生名单详情 + * + * @param id ID + * @return 学生名单详情 + */ + @Override + public R getDetail(Long id) { + // 查询学生名单详情 + PatientStudent patientStudent = patientStudentService.getById(id); + if (patientStudent == null) { + return R.fail(); + } + // 返回Dto赋值 + GfStudentListDto gfStudentListDto = new GfStudentListDto().setId(patientStudent.getId()) + .setName(patientStudent.getName()).setGender(patientStudent.getGender()).setAge(patientStudent.getAge()) + .setStudentId(patientStudent.getStudentId()).setIdNumber(patientStudent.getIdNumber()) + .setPhone(patientStudent.getPhone()).setCollege(patientStudent.getCollege()) + .setMajor(patientStudent.getMajor()).setEducationLevel(patientStudent.getEducationLevel()) + .setEnrollmentDate(patientStudent.getEnrollmentDate()).setGraduationDate(patientStudent.getGraduationDate()) + .setGrade(patientStudent.getGrade()).setStudyMode(patientStudent.getStudyMode()) + .setStudentStatus(patientStudent.getStudentStatus()) + .setPhysicalExamResult(patientStudent.getPhysicalExamResult()).setCounselor(patientStudent.getCounselor()) + .setCounselorPhone(patientStudent.getCounselorPhone()).setPatientId(patientStudent.getPatientId()); + return R.ok(gfStudentListDto); + } + + /** + * 添加学生名单 + * + * @param gfStudentListDto 学生名单Dto + * @return 结果 + */ + @Override + public R add(GfStudentListDto gfStudentListDto) { + // 学号重复验证 + List sameStudentIdStudents = patientStudentService.list( + new LambdaQueryWrapper().eq(PatientStudent::getStudentId, gfStudentListDto.getStudentId()) + .eq(PatientStudent::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + if (!sameStudentIdStudents.isEmpty()) { + return R.fail("学号" + gfStudentListDto.getStudentId() + "在系统中已存在"); + } + // 学生信息重复校验 + List sameIdNumberStudents = patientStudentService.list( + new LambdaQueryWrapper().eq(PatientStudent::getIdNumber, gfStudentListDto.getIdNumber()) + .eq(PatientStudent::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + Long existingPatientId = null; + if (!sameIdNumberStudents.isEmpty()) { + for (PatientStudent ps : sameIdNumberStudents) { + if (!ps.getEnrollmentDate().after(gfStudentListDto.getGraduationDate()) + && !ps.getGraduationDate().before(gfStudentListDto.getEnrollmentDate())) { + return R.fail("该身份证在系统中已录入过学生信息,此次录入的入校离校时间与既存数据有重叠,请确认"); + } + } + existingPatientId = sameIdNumberStudents.get(0).getPatientId(); + } + // 从身份证中获取生日和年龄 + Date birthDate = null; + Integer age = null; + try { + birthDate = IdCardUtil.extractBirthdayFromIdCard(gfStudentListDto.getIdNumber()); + age = IdCardUtil.calculateAgeFromIdCard(gfStudentListDto.getIdNumber()); + } catch (Exception ignored) { + } + // 生成姓名的拼音码和五笔码 + String pyStr = ChineseConvertUtils.toPinyinFirstLetter(gfStudentListDto.getName()); + String wbStr = ChineseConvertUtils.toWBFirstLetter(gfStudentListDto.getName()); + // 系统中不存在历史学生信息时 + if (existingPatientId == null) { + // 判断患者信息是否有重复 + List sameIdNumberPatients = patientService + .list(new LambdaQueryWrapper().eq(Patient::getIdCard, gfStudentListDto.getIdNumber()) + .eq(Patient::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + if (!sameIdNumberPatients.isEmpty()) { + // 已存在则取存在的 + existingPatientId = sameIdNumberPatients.get(0).getId(); + } else { + // 不存在则新建患者 + Patient patient = + new Patient().setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.PATIENT_NUM.getPrefix(), 10)) + .setName(gfStudentListDto.getName()).setGenderEnum(gfStudentListDto.getGender()) + .setBirthDate(birthDate).setPhone(gfStudentListDto.getPhone()) + .setIdCard(gfStudentListDto.getIdNumber()).setPyStr(pyStr).setWbStr(wbStr) + .setOrganizationId(SecurityUtils.getLoginUser().getOrgId()); + patientService.save(patient); + existingPatientId = patient.getId(); + } + } + // 创建学生信息 + PatientStudent patientStudent = new PatientStudent().setName(gfStudentListDto.getName()).setPyStr(pyStr) + .setWbStr(wbStr).setGender(gfStudentListDto.getGender()).setAge(age) + .setStudentId(gfStudentListDto.getStudentId()).setIdNumber(gfStudentListDto.getIdNumber()) + .setPhone(gfStudentListDto.getPhone()).setCollege(gfStudentListDto.getCollege()) + .setMajor(gfStudentListDto.getMajor()).setEducationLevel(gfStudentListDto.getEducationLevel()) + .setEnrollmentDate(gfStudentListDto.getEnrollmentDate()) + .setGraduationDate(gfStudentListDto.getGraduationDate()).setGrade(gfStudentListDto.getGrade()) + .setStudyMode(gfStudentListDto.getStudyMode()).setStudentStatus(gfStudentListDto.getStudentStatus()) + .setPhysicalExamResult(gfStudentListDto.getPhysicalExamResult()) + .setCounselor(gfStudentListDto.getCounselor()).setCounselorPhone(gfStudentListDto.getCounselorPhone()) + .setPatientId(existingPatientId); + patientStudentService.save(patientStudent); + return R.ok(); + } + + /** + * 编辑学生名单 + * + * @param gfStudentListDto 学生名单Dto + * @return 结果 + */ + @Override + public R edit(GfStudentListDto gfStudentListDto) { + // 查询学生信息 + PatientStudent patientStudent = patientStudentService.getById(gfStudentListDto.getId()); + if (patientStudent == null) { + return R.fail("学生信息不存在"); + } + // 从身份证中获取生日和年龄 + Date birthDate = null; + Integer age = null; + try { + birthDate = IdCardUtil.extractBirthdayFromIdCard(gfStudentListDto.getIdNumber()); + age = IdCardUtil.calculateAgeFromIdCard(gfStudentListDto.getIdNumber()); + } catch (Exception ignored) { + } + // 生成姓名的拼音码和五笔码 + String pyStr = ChineseConvertUtils.toPinyinFirstLetter(gfStudentListDto.getName()); + String wbStr = ChineseConvertUtils.toWBFirstLetter(gfStudentListDto.getName()); + // 更新学生信息 + patientStudentService.update(new LambdaUpdateWrapper() + .set(PatientStudent::getName, gfStudentListDto.getName()).set(PatientStudent::getPyStr, pyStr) + .set(PatientStudent::getWbStr, wbStr).set(PatientStudent::getGender, gfStudentListDto.getGender()) + .set(PatientStudent::getAge, age).set(PatientStudent::getStudentId, gfStudentListDto.getStudentId()) + .set(PatientStudent::getIdNumber, gfStudentListDto.getIdNumber()) + .set(PatientStudent::getPhone, gfStudentListDto.getPhone()) + .set(PatientStudent::getCollege, gfStudentListDto.getCollege()) + .set(PatientStudent::getMajor, gfStudentListDto.getMajor()) + .set(PatientStudent::getEducationLevel, gfStudentListDto.getEducationLevel()) + .set(PatientStudent::getEnrollmentDate, gfStudentListDto.getEnrollmentDate()) + .set(PatientStudent::getGraduationDate, gfStudentListDto.getGraduationDate()) + .set(PatientStudent::getGrade, gfStudentListDto.getGrade()) + .set(PatientStudent::getStudyMode, gfStudentListDto.getStudyMode()) + .set(PatientStudent::getStudentStatus, gfStudentListDto.getStudentStatus()) + .set(PatientStudent::getPhysicalExamResult, gfStudentListDto.getPhysicalExamResult()) + .set(PatientStudent::getCounselor, gfStudentListDto.getCounselor()) + .set(PatientStudent::getCounselorPhone, gfStudentListDto.getCounselorPhone()) + .eq(PatientStudent::getId, gfStudentListDto.getId())); + // 同步更新患者信息 + patientService.update(new Patient(), new LambdaUpdateWrapper() + .set(Patient::getName, gfStudentListDto.getName()).set(Patient::getPyStr, pyStr) + .set(Patient::getWbStr, wbStr).set(Patient::getGenderEnum, gfStudentListDto.getGender()) + .set(Patient::getBirthDate, birthDate).set(Patient::getPhone, gfStudentListDto.getPhone()) + .set(Patient::getIdCard, gfStudentListDto.getIdNumber()).eq(Patient::getId, patientStudent.getPatientId())); + return R.ok(); + } + + /** + * 删除学生名单 + * + * @param id ID + * @return 结果 + */ + @Override + public R delete(Long id) { + patientStudentService.update(new LambdaUpdateWrapper() + .set(PatientStudent::getDeleteFlag, DeleteFlag.DELETED.getCode()).eq(PatientStudent::getId, id)); + return R.ok(); + } + + /** + * 导入学生名单 + * + * @param file 文件 + * @return 结果 + */ + @Override + public R importData(MultipartFile file) { + // 读取文件 + R> readResult = + CommonUtil.readImportedExcelFile(file, GfStudentListImportDto.class); + if (R.SUCCESS != readResult.getCode()) { + return readResult; + } + List importDtoList = readResult.getData(); + // 导入信息校验 + R validateResult = validateImportDtoList(importDtoList); + if (R.SUCCESS != validateResult.getCode()) { + return validateResult; + } + // 查询机构ID + Long orgId = SecurityUtils.getLoginUser().getOrgId(); + for (GfStudentListImportDto importDto : importDtoList) { + // 从身份证中获取生日和年龄 + Date birthDate = null; + Integer age = null; + try { + birthDate = IdCardUtil.extractBirthdayFromIdCard(importDto.getIdNumber()); + age = IdCardUtil.calculateAgeFromIdCard(importDto.getIdNumber()); + } catch (Exception ignored) { + } + // 生成姓名的拼音码和五笔码 + String pyStr = ChineseConvertUtils.toPinyinFirstLetter(importDto.getName()); + String wbStr = ChineseConvertUtils.toWBFirstLetter(importDto.getName()); + // 患者未创建时,创建患者 + if (importDto.getPatientId() == null) { + Patient patient = + new Patient().setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.PATIENT_NUM.getPrefix(), 10)) + .setName(importDto.getName()).setGenderEnum(CommonUtil.tryParseInt(importDto.getGender())) + .setBirthDate(birthDate).setPhone(importDto.getPhone()).setIdCard(importDto.getIdNumber()) + .setPyStr(pyStr).setWbStr(wbStr).setOrganizationId(orgId); + patientService.save(patient); + importDto.setPatientId(patient.getId()); + } + // 创建学生信息 + PatientStudent patientStudent = new PatientStudent().setName(importDto.getName()).setPyStr(pyStr) + .setWbStr(wbStr).setGender(CommonUtil.tryParseInt(importDto.getGender())).setAge(age) + .setStudentId(importDto.getStudentId()).setIdNumber(importDto.getIdNumber()) + .setPhone(importDto.getPhone()).setCollege(importDto.getCollege()).setMajor(importDto.getMajor()) + .setEducationLevel(CommonUtil.tryParseInt(importDto.getEducationLevel())) + .setEnrollmentDate(importDto.getEnrollmentDate()).setGraduationDate(importDto.getGraduationDate()) + .setGrade(importDto.getGrade()).setStudyMode(CommonUtil.tryParseInt(importDto.getStudyMode())) + // 在校状态:在校 + .setStudentStatus(StudentStatus.IN_SCHOOL.getValue()) + // 体检结果:体检合格 + .setPhysicalExamResult(PhysicalExamResult.EXAMINATION_PASSED.getValue()) + .setCounselor(importDto.getCounselor()).setCounselorPhone(importDto.getCounselorPhone()) + .setPatientId(importDto.getPatientId()); + patientStudentService.save(patientStudent); + } + return R.ok(); + } + + /** + * 获取导入模板 + * + * @param response 响应 + */ + @Override + public void importTemplate(HttpServletResponse response) { + ExcelUtil util = new ExcelUtil<>(GfStudentListImportDto.class); + util.importTemplateExcel(response, "学生名单"); + } + + /** + * 导入信息校验 + * + * @param importDtoList 学生名单导入数据列表 + */ + private R validateImportDtoList(List importDtoList) { + // 字段校验(必填及数值类型) + List fieldValidateMsgList = new ArrayList<>(); + for (int i = 0; i < importDtoList.size(); i++) { + GfStudentListImportDto importDto = importDtoList.get(i); + importDto.setLineNumber(i + 2); + List lineValidateMsgList = new ArrayList<>(); + if (StringUtils.isEmpty(importDto.getName())) { + lineValidateMsgList.add("姓名必填"); + } + if (StringUtils.isEmpty(importDto.getGender())) { + lineValidateMsgList.add("性别必填"); + } + if (StringUtils.isEmpty(importDto.getStudentId())) { + lineValidateMsgList.add("学号必填"); + } + if (StringUtils.isEmpty(importDto.getIdNumber())) { + lineValidateMsgList.add("身份证号必填"); + } + if (StringUtils.isEmpty(importDto.getPhone())) { + lineValidateMsgList.add("电话必填"); + } + if (StringUtils.isEmpty(importDto.getCollege())) { + lineValidateMsgList.add("学院必填"); + } + if (StringUtils.isEmpty(importDto.getMajor())) { + lineValidateMsgList.add("专业必填"); + } + if (StringUtils.isEmpty(importDto.getEducationLevel())) { + lineValidateMsgList.add("学历层次必填"); + } + if (StringUtils.isEmpty(importDto.getEnrollmentDateStr())) { + lineValidateMsgList.add("入校时间必填"); + } + try { + importDto.setEnrollmentDate(DateUtils.parseDate(importDto.getEnrollmentDateStr())); + } catch (Exception e) { + lineValidateMsgList.add("入校时间格式错误"); + } + if (StringUtils.isEmpty(importDto.getGraduationDateStr())) { + lineValidateMsgList.add("离校时间必填"); + } + try { + importDto.setGraduationDate(DateUtils.parseDate(importDto.getGraduationDateStr())); + } catch (DateTimeParseException e) { + lineValidateMsgList.add("离校时间格式错误"); + } + if (StringUtils.isEmpty(importDto.getGrade())) { + lineValidateMsgList.add("年级必填"); + } + if (StringUtils.isEmpty(importDto.getStudyMode())) { + lineValidateMsgList.add("学习形式必填"); + } + if (StringUtils.isEmpty(importDto.getCounselor())) { + lineValidateMsgList.add("辅导员必填"); + } + if (StringUtils.isEmpty(importDto.getCounselorPhone())) { + lineValidateMsgList.add("辅导员电话必填"); + } + if (!lineValidateMsgList.isEmpty()) { + fieldValidateMsgList + .add("■ 第" + importDto.getLineNumber() + "行:" + String.join(",", lineValidateMsgList) + ";"); + } + } + if (!fieldValidateMsgList.isEmpty()) { + return R.fail("导入失败!学生名单填写有误:" + String.join(" ", fieldValidateMsgList) + " ■ ※如遇到模板中不存在的字段,请重新下载模板"); + } + // 重复校验(文件行重复) + List lineRepeatedValidateMsgList = new ArrayList<>(); + Map> fileSameStudentIdMap = + importDtoList.stream().collect(Collectors.groupingBy(GfStudentListImportDto::getStudentId)); + for (Map.Entry> entry : fileSameStudentIdMap.entrySet()) { + if (entry.getValue().size() > 1) { + lineRepeatedValidateMsgList + .add("■ 第" + entry.getValue().stream().map(GfStudentListImportDto::getLineNumber).sorted() + .map(Object::toString).collect(Collectors.joining(",")) + "行的学号重复;"); + } + } + Map> fileSameIdNumberMap = + importDtoList.stream().collect(Collectors.groupingBy(GfStudentListImportDto::getIdNumber)); + for (Map.Entry> entry : fileSameIdNumberMap.entrySet()) { + if (entry.getValue().size() > 1) { + lineRepeatedValidateMsgList + .add("■ 第" + entry.getValue().stream().map(GfStudentListImportDto::getLineNumber).sorted() + .map(Object::toString).collect(Collectors.joining(",")) + "行的身份证号重复;"); + } + } + if (!lineRepeatedValidateMsgList.isEmpty()) { + return R.fail("导入失败!文件中存在重复数据:" + String.join(" ", lineRepeatedValidateMsgList)); + } + // 重复校验(文件与数据库重复) + List dbRepeatedValidateMsgList = new ArrayList<>(); + for (GfStudentListImportDto importDto : importDtoList) { + List sameStudentIdStudents = patientStudentService.list( + new LambdaQueryWrapper().eq(PatientStudent::getStudentId, importDto.getStudentId()) + .eq(PatientStudent::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + if (!sameStudentIdStudents.isEmpty()) { + dbRepeatedValidateMsgList.add("■ 第" + importDto.getLineNumber() + "行的学号在系统中已存在;"); + } + List sameIdNumberStudents = patientStudentService + .list(new LambdaQueryWrapper().eq(PatientStudent::getIdNumber, importDto.getIdNumber()) + .eq(PatientStudent::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + if (!sameIdNumberStudents.isEmpty()) { + for (PatientStudent ps : sameIdNumberStudents) { + if (!ps.getEnrollmentDate().after(importDto.getGraduationDate()) + && !ps.getGraduationDate().before(importDto.getEnrollmentDate())) { + dbRepeatedValidateMsgList + .add("■ 第" + importDto.getLineNumber() + "行的身份证在系统中已录入过学生信息,此次录入的入校离校时间与既存数据有重叠,请确认;"); + } + } + importDto.setPatientId(sameIdNumberStudents.get(0).getPatientId()); + } + } + if (!dbRepeatedValidateMsgList.isEmpty()) { + return R.fail("导入失败!系统中存在重复数据:" + String.join(" ", dbRepeatedValidateMsgList)); + } + return R.ok(); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfRatioApplicationRecordController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfRatioApplicationRecordController.java new file mode 100644 index 00000000..ea5b76f9 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfRatioApplicationRecordController.java @@ -0,0 +1,124 @@ +package com.openhis.web.nenu.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.web.nenu.appservice.IGfRatioApplicationRecordAppService; +import com.openhis.web.nenu.dto.GfRatioApplicationDefinitionSelectDto; +import com.openhis.web.nenu.dto.GfRatioApplicationPrintDto; +import com.openhis.web.nenu.dto.GfRatioApplicationProcessDto; +import com.openhis.web.nenu.dto.GfRatioApplicationRecordDto; + +/** + * 公费医疗-比例调整申请记录 Controller + * + * @author Thanking + * @date 2025-10-21 + */ +@RestController +@RequestMapping("/nenu/gf-ratio-application-record") +public class GfRatioApplicationRecordController { + + @Autowired + private IGfRatioApplicationRecordAppService gfRatioApplicationRecordAppService; + + /** + * 查询比例调整申请记录分页 + * + * @param searchParam 查询参数 + * @param printable 申请单是否可打印 + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 比例调整申请记录分页 + */ + @GetMapping("/page") + public R> getPage(GfRatioApplicationRecordDto searchParam, + @RequestParam(value = "printable", defaultValue = "") String printable, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return gfRatioApplicationRecordAppService.getPage(searchParam, printable, searchKey, pageNo, pageSize); + } + + /** + * 查询比例调整申请记录详情 + * + * @param id ID + * @return 比例调整申请记录详情 + */ + @GetMapping("/{id}") + public R getDetail(@PathVariable(value = "id") Long id) { + return gfRatioApplicationRecordAppService.getDetail(id); + } + + /** + * 创建比例调整申请 + * + * @param gfRatioApplicationRecordDto 比例调整申请记录Dto + * @return 结果 + */ + @PostMapping + public R add(@Validated @RequestBody GfRatioApplicationRecordDto gfRatioApplicationRecordDto) { + return gfRatioApplicationRecordAppService.add(gfRatioApplicationRecordDto); + } + + /** + * 取消比例调整申请 + * + * @param id ID + * @return 结果 + */ + @DeleteMapping("/{id}") + public R cancel(@PathVariable(value = "id") Long id) { + return gfRatioApplicationRecordAppService.cancel(id); + } + + /** + * 处理比例调整申请 + * + * @param gfRatioApplicationProcessDto 比例调整申请处理Dto + * @return 结果 + */ + @PutMapping + public R process(@Validated @RequestBody GfRatioApplicationProcessDto gfRatioApplicationProcessDto) { + return gfRatioApplicationRecordAppService.process(gfRatioApplicationProcessDto); + } + + /** + * 查询申请项目选择弹窗分页 + * + * @param searchParam 查询参数 + * @param searchKey 模糊查询关键字 + * @param itemType 项目分类 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 申请项目选择弹窗分页 + */ + @GetMapping("/definition-select-page") + public R> getDefinitionSelectPage( + GfRatioApplicationDefinitionSelectDto searchParam, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "itemType") Integer itemType, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return gfRatioApplicationRecordAppService.getDefinitionSelectPage(searchParam, searchKey, itemType, pageNo, + pageSize); + } + + /** + * 查询申请单打印列表 + * + * @param ids 多个ID逗号拼接 + * @return 申请单打印列表 + */ + @GetMapping("/print-list") + public R> getPrintList(@RequestParam(value = "ids") String ids) { + return gfRatioApplicationRecordAppService.getPrintList(ids); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfRatioManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfRatioManageController.java new file mode 100644 index 00000000..fd49c15e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfRatioManageController.java @@ -0,0 +1,65 @@ +package com.openhis.web.nenu.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.nenu.dto.GfTypeRatioDto; +import com.openhis.web.nenu.appservice.IGfRatioManageAppService; +import com.openhis.web.nenu.dto.GfIndividualRatioDto; +import com.openhis.web.nenu.dto.GfTypeRatioSaveDto; + +/** + * 公费医疗-自付比例管理 Controller + * + * @author Thanking + * @date 2025-10-21 + */ +@RestController +@RequestMapping("/nenu/gf-ratio-manage") +public class GfRatioManageController { + + @Autowired + private IGfRatioManageAppService gfRatioManageAppService; + + /** + * 查询大项比例列表 + * + * @return 大项比例列表 + */ + @GetMapping("/type-ratio-list") + public R> getTypeRatioList() { + return gfRatioManageAppService.getTypeRatioList(); + } + + /** + * 保存大项比例列表 + * + * @param gfTypeRatioSaveDto 大项比例保存Dto + * @return 结果 + */ + @PutMapping("/type-ratio-list") + public R saveTypeRatioList(@RequestBody GfTypeRatioSaveDto gfTypeRatioSaveDto) { + return gfRatioManageAppService.saveTypeRatioList(gfTypeRatioSaveDto.getTypeRatioList()); + } + + /** + * 查询单项比例分页 + * + * @param searchParam 查询参数 + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 单项比例分页 + */ + @GetMapping("/individual-ratio-page") + public R> getIndividualRatioPage(GfIndividualRatioDto searchParam, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return gfRatioManageAppService.getIndividualRatioPage(searchParam, searchKey, pageNo, pageSize); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfStudentListController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfStudentListController.java new file mode 100644 index 00000000..069e3ed4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/controller/GfStudentListController.java @@ -0,0 +1,108 @@ +package com.openhis.web.nenu.controller; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.web.nenu.appservice.IGfStudentListAppService; +import com.openhis.web.nenu.dto.GfStudentListDto; + +/** + * 公费医疗-学生名单管理 Controller + * + * @author Thanking + * @date 2025-10-21 + */ +@RestController +@RequestMapping("/nenu/gf-student-list") +public class GfStudentListController { + + @Autowired + private IGfStudentListAppService gfStudentListAppService; + + /** + * 查询学生名单分页 + * + * @param searchKey 模糊查询关键字 + * @param pageNo 页码 + * @param pageSize 行数 + * @return 学生名单分页 + */ + @GetMapping("/page") + public R> getPage(GfStudentListDto searchParam, + @RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return gfStudentListAppService.getPage(searchParam, searchKey, pageNo, pageSize); + } + + /** + * 查询学生名单详情 + * + * @param id ID + * @return 学生名单详情 + */ + @GetMapping("/{id}") + public R getDetail(@PathVariable(value = "id") Long id) { + return gfStudentListAppService.getDetail(id); + } + + /** + * 添加学生名单 + * + * @param gfStudentListDto 学生名单Dto + * @return 结果 + */ + @PostMapping + public R add(@Validated @RequestBody GfStudentListDto gfStudentListDto) { + return gfStudentListAppService.add(gfStudentListDto); + } + + /** + * 编辑学生名单 + * + * @param gfStudentListDto 学生名单Dto + * @return 结果 + */ + @PutMapping + public R edit(@Validated @RequestBody GfStudentListDto gfStudentListDto) { + return gfStudentListAppService.edit(gfStudentListDto); + } + + /** + * 删除学生名单 + * + * @param id ID + * @return 结果 + */ + @DeleteMapping("/{id}") + public R delete(@PathVariable(value = "id") Long id) { + return gfStudentListAppService.delete(id); + } + + /** + * 导入学生名单 + * + * @param file 文件 + * @return 结果 + */ + @PostMapping("/import-data") + public R importData(MultipartFile file) { + return gfStudentListAppService.importData(file); + } + + /** + * 获取导入模板 + * + * @param response 响应 + */ + @PostMapping("/import-template") + public void importTemplate(HttpServletResponse response) { + gfStudentListAppService.importTemplate(response); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfIndividualRatioDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfIndividualRatioDto.java new file mode 100644 index 00000000..ed3b38e8 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfIndividualRatioDto.java @@ -0,0 +1,73 @@ +package com.openhis.web.nenu.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗-单项比例Dto + * + * @author Thanking + * @date 2025-10-24 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfIndividualRatioDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 公费项目分类(1药品2诊疗) */ + private Integer itemType; + + /** 公费项目分类名称(1药品2诊疗) */ + private String itemTypeName; + + /** 自付比例 */ + private BigDecimal selfRatio; + + /** 二次报销的自付比例 */ + private BigDecimal twiceRatio; + + /** 开始时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date startDate; + + /** 结束时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date endDate; + + /** 项目编号 */ + private String busNo; + + /** 项目名称 */ + private String name; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 医保编码 */ + private String ybNo; + + /** 医保等级 */ + private Integer chrgitmLv; + + /** 医保等级名称 */ + private String chrgitmLvName; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationDefinitionSelectDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationDefinitionSelectDto.java new file mode 100644 index 00000000..0733c31c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationDefinitionSelectDto.java @@ -0,0 +1,51 @@ +package com.openhis.web.nenu.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗-比例调整申请项目定义选择Dto + * + * @author Thanking + * @date 2025-10-29 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfRatioApplicationDefinitionSelectDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 项目编号 */ + private String busNo; + + /** 项目名称 */ + private String name; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 医保编码 */ + private String ybNo; + + /** 医保等级 */ + private Integer chrgitmLv; + + /** 医保等级名称 */ + private String chrgitmLvName; + + /** 生产厂家 */ + private String manufacturerText; + + /** 规格 */ + private String totalVolume; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationPrintDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationPrintDto.java new file mode 100644 index 00000000..6e167ccd --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationPrintDto.java @@ -0,0 +1,42 @@ +package com.openhis.web.nenu.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗-比例调整申请打印Dto + * + * @author Thanking + * @date 2025-10-30 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfRatioApplicationPrintDto { + + /** 项目名称 */ + private String itemName; + + /** 全价 */ + private String totalPrice; + + /** 医保等级 */ + private String chrgitmLv; + + /** 原支付比例 */ + private String oldRatio; + + /** 新支付比例 */ + private String newRatio; + + /** 价格差 */ + private String priceDiff; + + /** 原二次支付比例 */ + private String oldTwiceRatio; + + /** 新二次支付比例 */ + private String newTwiceRatio; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationProcessDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationProcessDto.java new file mode 100644 index 00000000..1bbb9caa --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationProcessDto.java @@ -0,0 +1,40 @@ +package com.openhis.web.nenu.dto; + +import javax.validation.constraints.NotNull; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗-比例调整申请处理Dto + * + * @author Thanking + * @date 2025-10-28 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfRatioApplicationProcessDto { + + /** ID */ + @NotNull(message = "ID不能为空") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 角色 */ + @NotNull(message = "角色不能为空") + private Integer approvalRole; + + /** 通过or驳回(1通过2驳回) */ + @NotNull(message = "通过or驳回不能为空") + private Integer approvalResult; + + /** 意见 */ + @NotNull(message = "意见不能为空") + private String approvalOpinion; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationRecordDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationRecordDto.java new file mode 100644 index 00000000..82ea42dc --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfRatioApplicationRecordDto.java @@ -0,0 +1,167 @@ +package com.openhis.web.nenu.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; +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.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗-比例调整申请记录Dto + * + * @author Thanking + * @date 2025-10-27 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfRatioApplicationRecordDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 申请编号 */ + private String applicationNo; + + /** 公费项目分类(1药品2诊疗) */ + @NotNull(message = "项目分类不能为空") + private Integer itemType; + private String itemTypeName; + + /** 医保等级名称 */ + private String chrgitmLvName; + + /** 医保分项 */ + private String ybClass; + + /** 医保等级 */ + private String ybLv; + + /** 申请比例 */ + @NotNull(message = "申请比例不能为空") + private BigDecimal applicationRatio; + + /** 原自付比例 */ + private BigDecimal oldRatio; + + /** 全价 */ + private BigDecimal totalPrice; + + /** 价格差 */ + private BigDecimal priceDiff; + + /** 二次报销的自付比例 */ + private BigDecimal twiceRatio; + + /** 原二次自付比例 */ + private BigDecimal oldTwiceRatio; + + /** 开始时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "开始时间不能为空") + private Date startDate; + + /** 结束时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "结束时间不能为空") + private Date endDate; + + /** 申请状态(0处理中1通过2驳回3取消) */ + @Dict(dictCode = "application_status") + private Integer applicationStatus; + private String applicationStatus_dictText; + + /** 申请人 */ + private String applicant; + + /** 申请时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date applicationTime; + + /** 申请原因 */ + @NotBlank(message = "申请原因不能为空") + private String applicationReason; + + /** 测算盈亏负责人 */ + private String initialApprover; + + /** 测算通过or驳回(0处理中1通过2驳回) */ + @Dict(dictCode = "application_status") + private Integer initialApprovalResult; + private String initialApprovalResult_dictText; + + /** 测算时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date initialApprovalTime; + + /** 测算意见 */ + private String initialApprovalOpinion; + + /** 财务科负责人 */ + private String financeApprover; + + /** 财务科通过or驳回(0处理中1通过2驳回) */ + @Dict(dictCode = "application_status") + private Integer financeApprovalResult; + private String financeApprovalResult_dictText; + + /** 报批时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date financeApprovalTime; + + /** 报批意见 */ + private String financeApprovalOpinion; + + /** 会议结果录入人 */ + private String finalRecorder; + + /** 会议通过or驳回(0处理中1通过2驳回) */ + @Dict(dictCode = "application_status") + private Integer finalApprovalResult; + private String finalApprovalResult_dictText; + + /** 录入时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date finalRecordTime; + + /** 录入意见 */ + private String finalApprovalOpinion; + + /** 表id */ + @NotNull(message = "定义ID不能为空") + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionId; + + /** 项目编号 */ + private String busNo; + + /** 项目名称 */ + private String name; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 医保编码 */ + private String ybNo; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfStudentListDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfStudentListDto.java new file mode 100644 index 00000000..1f5fff87 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfStudentListDto.java @@ -0,0 +1,120 @@ +package com.openhis.web.nenu.dto; + +import java.util.Date; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; +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.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗-学生名单Dto + * + * @author Thanking + * @date 2025-10-21 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfStudentListDto { + + /** ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 姓名 */ + @NotBlank(message = "姓名不能为空") + private String name; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 性别 */ + @Dict(dictCode = "sys_user_sex") + @NotNull(message = "性别不能为空") + private Integer gender; + private String gender_dictText; + + /** 年龄 */ + private Integer age; + + /** 学号 */ + @NotBlank(message = "学号不能为空") + private String studentId; + + /** 身份证号 */ + @NotBlank(message = "身份证号不能为空") + private String idNumber; + + /** 电话 */ + @NotBlank(message = "电话不能为空") + private String phone; + + /** 学院 */ + @NotBlank(message = "学院不能为空") + private String college; + + /** 专业 */ + @NotBlank(message = "专业不能为空") + private String major; + + /** 学历层次(0预科生1本科生2硕士研究生3博士研究生) */ + @Dict(dictCode = "education_level") + @NotNull(message = "学历层次不能为空") + private Integer educationLevel; + private String educationLevel_dictText; + + /** 入校时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "入校时间不能为空") + private Date enrollmentDate; + + /** 离校时间 */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @NotNull(message = "离校时间不能为空") + private Date graduationDate; + + /** 年级 */ + @NotBlank(message = "年级不能为空") + private String grade; + + /** 学习形式(1全日制2非全日制) */ + @Dict(dictCode = "study_mode") + @NotNull(message = "学习形式不能为空") + private Integer studyMode; + private String studyMode_dictText; + + /** 在校状态(0在校1休学2离校) */ + @Dict(dictCode = "student_status") + private Integer studentStatus; + private String studentStatus_dictText; + + /** 体检结果(0未体检1体检不合格2体检合格) */ + @Dict(dictCode = "physical_exam_result") + private Integer physicalExamResult; + private String physicalExamResult_dictText; + + /** 辅导员 */ + private String counselor; + + /** 辅导员电话 */ + private String counselorPhone; + + /** 患者ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfStudentListImportDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfStudentListImportDto.java new file mode 100644 index 00000000..e23a24e6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfStudentListImportDto.java @@ -0,0 +1,81 @@ +package com.openhis.web.nenu.dto; + +import java.util.Date; + +import com.core.common.annotation.Excel; + +import lombok.Data; + +/** + * 公费医疗-学生名单导入Dto + * + * @author Thanking + * @date 2025-10-21 + */ +@Data +public class GfStudentListImportDto { + + /** 行号 */ + private Integer lineNumber; + + /** 患者ID */ + private Long patientId; + + /** 姓名 */ + @Excel(name = "姓名", prompt = "必填") + private String name; + + /** 性别 */ + @Excel(name = "性别", prompt = "必填", readConverterExp = "0=男性,1=女性,2=未知", combo = "男性,女性,未知") + private String gender; + + /** 学号 */ + @Excel(name = "学号", prompt = "必填") + private String studentId; + + /** 身份证号 */ + @Excel(name = "身份证号", prompt = "必填") + private String idNumber; + + /** 电话 */ + @Excel(name = "电话", prompt = "必填") + private String phone; + + /** 学院 */ + @Excel(name = "学院", prompt = "必填") + private String college; + + /** 专业 */ + @Excel(name = "专业", prompt = "必填") + private String major; + + /** 学历层次(0预科生1本科生2硕士研究生3博士研究生) */ + @Excel(name = "学历层次", prompt = "必填", dictType = "education_level", comboReadDict = true) + private String educationLevel; + + /** 入校时间 */ + @Excel(name = "入校时间", prompt = "必填,格式:yyyy-MM-dd", dateFormat = "yyyy-MM-dd") + private String enrollmentDateStr; + private Date enrollmentDate; + + /** 离校时间 */ + @Excel(name = "离校时间", prompt = "必填,格式:yyyy-MM-dd", dateFormat = "yyyy-MM-dd") + private String graduationDateStr; + private Date graduationDate; + + /** 年级 */ + @Excel(name = "年级", prompt = "必填") + private String grade; + + /** 学习形式(1全日制2非全日制) */ + @Excel(name = "学习形式", prompt = "必填", dictType = "study_mode", comboReadDict = true) + private String studyMode; + + /** 辅导员 */ + @Excel(name = "辅导员") + private String counselor; + + /** 辅导员电话 */ + @Excel(name = "辅导员电话") + private String counselorPhone; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfTypeRatioSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfTypeRatioSaveDto.java new file mode 100644 index 00000000..e3faa7e2 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/dto/GfTypeRatioSaveDto.java @@ -0,0 +1,24 @@ +package com.openhis.web.nenu.dto; + +import java.util.List; + +import com.openhis.nenu.dto.GfTypeRatioDto; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗-大项比例保存Dto + * + * @author Thanking + * @date 2025-10-24 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfTypeRatioSaveDto { + + /** 大项比例列表 */ + private List typeRatioList; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfRatioApplicationRecordAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfRatioApplicationRecordAppMapper.java new file mode 100644 index 00000000..fb579831 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfRatioApplicationRecordAppMapper.java @@ -0,0 +1,45 @@ +package com.openhis.web.nenu.mapper; + +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.nenu.dto.GfRatioApplicationDefinitionSelectDto; +import com.openhis.web.nenu.dto.GfRatioApplicationRecordDto; + +/** + * 公费医疗-比例调整申请记录 Mapper + * + * @author Thanking + * @date 2025-10-27 + */ +@Repository +public interface GfRatioApplicationRecordAppMapper { + + /** + * 查询比例调整申请记录分页 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @return 比例调整申请记录分页 + */ + IPage selectGfRatioApplicationRecordPage( + @Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 查询申请项目选择弹窗分页 + * + * @param itemType 项目分类 + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @return 申请项目选择弹窗分页 + */ + IPage selectGfRatioApplicationDefinitionSelectPage( + @Param("itemType") Integer itemType, @Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfRatioManageAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfRatioManageAppMapper.java new file mode 100644 index 00000000..31a5beca --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfRatioManageAppMapper.java @@ -0,0 +1,31 @@ +package com.openhis.web.nenu.mapper; + +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.nenu.dto.GfIndividualRatioDto; + +/** + * 公费医疗-自付比例管理 Mapper + * + * @author Thanking + * @date 2025-10-24 + */ +@Repository +public interface GfRatioManageAppMapper { + + /** + * 查询单项比例分页 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @return 单项比例分页 + */ + IPage selectGfIndividualRatioPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfStudentListAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfStudentListAppMapper.java new file mode 100644 index 00000000..bcd98746 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/nenu/mapper/GfStudentListAppMapper.java @@ -0,0 +1,31 @@ +package com.openhis.web.nenu.mapper; + +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.nenu.dto.GfStudentListDto; + +/** + * 公费医疗-学生名单管理 Mapper + * + * @author Thanking + * @date 2025-10-21 + */ +@Repository +public interface GfStudentListAppMapper { + + /** + * 查询学生名单分页 + * + * @param page 分页参数 + * @param queryWrapper 查询条件 + * @return 学生名单分页 + */ + IPage selectGfStudentListPage(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientTreatmentAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientTreatmentAppServiceImpl.java index 6cc2c89b..6fef096e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientTreatmentAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/appservice/impl/OutpatientTreatmentAppServiceImpl.java @@ -16,6 +16,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.core.common.exception.ServiceException; import com.core.common.utils.*; +import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.service.IChargeItemService; import com.openhis.clinical.domain.Procedure; import com.openhis.clinical.service.IProcedureService; import com.openhis.common.constant.CommonConstants; @@ -35,7 +37,7 @@ import com.openhis.web.outpatientmanage.dto.OutpatientTreatmentInfoDto; import com.openhis.web.outpatientmanage.mapper.OutpatientTreatmentAppMapper; import com.openhis.web.pharmacymanage.appservice.impl.ReturnMedicineAppServiceImpl; import com.openhis.web.pharmacymanage.appservice.impl.WesternMedicineDispenseAppServiceImpl; -import com.openhis.web.pharmacymanage.dto.InventoryDto; +import com.openhis.web.pharmacymanage.dto.UnDispenseInventoryDto; import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; import com.openhis.workflow.domain.DeviceDispense; import com.openhis.workflow.domain.DeviceRequest; @@ -87,6 +89,9 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp @Resource private ReturnMedicineAppServiceImpl returnedMedicineAppServiceImpl; + @Resource + private IChargeItemService chargeItemService; + @Resource private AssignSeqUtil assignSeqUtil; @@ -134,8 +139,9 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp HisQueryUtils.buildQueryWrapper(outpatientTreatmentEncounterDto, searchKey, searchFields, request); // 查询就诊病人列表 - Page encounterInfoPageDto = outpatientTreatmentAppMapper - .selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.AMB.getValue()); + Page encounterInfoPageDto = + outpatientTreatmentAppMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper, + EncounterClass.AMB.getValue(), RequestStatus.COMPLETED.getValue(), RequestStatus.CANCELLED.getValue()); encounterInfoPageDto.getRecords().forEach(prescriptionPatientInfoDto -> { // 性别 prescriptionPatientInfoDto.setGenderEnum_enumText( @@ -253,16 +259,28 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp List devicePerformList = new ArrayList<>(); for (PerformInfoDto item : performInfoList) { if (CommonConstants.TableName.WOR_SERVICE_REQUEST.equals(item.getRequestTable()) - || CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(item.getRequestTable()) - || CommonConstants.TableName.WOR_DEVICE_REQUEST.equals(item.getRequestTable())) { + || CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(item.getRequestTable())) { serviceMedPerformList.add(item); + } else if (CommonConstants.TableName.WOR_DEVICE_REQUEST.equals(item.getRequestTable())) { + devicePerformList.add(item); } - // else if (CommonConstants.TableName.WOR_DEVICE_REQUEST.equals(item.getRequestTable())) { - // devicePerformList.add(item); - // } } // 分别处理诊疗/药品执行和耗材发放 if (!serviceMedPerformList.isEmpty()) { + List chargeItemList = chargeItemService.getChargeItemInfoByReqId( + serviceMedPerformList.stream().map(PerformInfoDto::getRequestId).collect(Collectors.toList())); + if (chargeItemList == null || chargeItemList.isEmpty()) { + throw new ServiceException("未找到对应的收费项,请联系管理员"); + } + // 按requestId分组收费项 + Map> chargeItemMap = + chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getServiceId)); + // 过滤出已收费的执行项目 + serviceMedPerformList = serviceMedPerformList.stream().filter(performInfo -> { + List chargeItems = chargeItemMap.get(performInfo.getRequestId()); + return chargeItems != null && chargeItems.stream() + .anyMatch(chargeItem -> ChargeItemStatus.BILLED.getValue().equals(chargeItem.getStatusEnum())); + }).toList(); // 处理诊疗执行 for (PerformInfoDto performInfoDto : serviceMedPerformList) { Long groupId = performInfoDto.getGroupId(); @@ -323,107 +341,110 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp } } } - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } - // todo:因长大农大在执行的时候都不发耗材,暂时注释掉 - // // 返回信息 - // String returnMsg = null; - // if (!devicePerformList.isEmpty()) { - // // 耗材请求id列表 - // List devRequestIdList = devicePerformList.stream().map(PerformInfoDto::getRequestId).toList(); - // // 获取耗材发放id列表 - // List devDispenseIdList = performInfoList.stream().map(PerformInfoDto::getDispenseId).toList(); - // // 获取库存信息 - // List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, - // CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); - // // 按每个耗材分组 - // Map> groupedByItemId = - // inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); - // // 遍历每个分组校验库存状态 - // for (Map.Entry> entry : groupedByItemId.entrySet()) { - // List groupItems = entry.getValue(); - // if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) - // .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { - // // 库存停供校验 - // return R.fail(groupItems.get(0).getItemName() + "库存已停供"); - // } - // } - // List inventoryItemList = new ArrayList<>(); - // if (!inventoryList.isEmpty()) { - // for (InventoryDto inventoryDto : inventoryList) { - // if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { - // InventoryItem inventoryItem = new InventoryItem(); - // // 库存数量判定 - // if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { - // // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - // BigDecimal quantity = - // inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); - // // 库存数量判定 - // if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // // 库存数量不足 - // return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); - // } else { - // inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); - // } - // } else { - // // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - // BigDecimal quantity = inventoryDto.getInventoryQuantity() - // .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); - // // 库存数量判定 - // if (quantity.compareTo(BigDecimal.ZERO) < 0) { - // // 库存数量不足 - // return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); - // } else { - // inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); - // } - // } - // inventoryItemList.add(inventoryItem); - // } - // } - // } - // // 发耗材信息查询 - // List dispenseList = deviceDispenseService - // .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); - // if (dispenseList != null) { - // for (DeviceDispense deviceDispense : dispenseList) { - // if (deviceDispense.getStatusEnum().equals(DispenseStatus.PREPARATION.getValue())) { - // // 耗材发放状态 - // deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); - // // 发药数量 - // deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); - // // 发药时间 - // deviceDispense.setDispenseTime(DateUtils.getNowDate()); - // // 发药人 - // deviceDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); - // // 根据数量设置追溯码 - // deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, - // Collections.nCopies(deviceDispense.getQuantity().intValue(), CommonConstants.Common.DEV_TRACE_NO))); - // } - // } - // // 药品发放更新 - // deviceDispenseService.updateBatchById(dispenseList); - // } else { - // return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - // } - // // 库存更新 - // inventoryItemService.updateBatchById(inventoryItemList); - // // 更新请求状态为已完成 - // deviceRequestService.updateCompletedStatusBatch(devRequestIdList); - // // 调用医保商品销售接口 - // String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); - // // 医保开关 - // if (Whether.YES.getCode().equals(ybSwitch)) { - // List uploadFailedNoList = - // westernMedicineDispenseAppServiceImpl.ybMedicineIntegrated(null, devDispenseIdList); - // if (uploadFailedNoList != null) { - // returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; - // } else { - // returnMsg = "3505商品销售上传成功"; - // } - // } - // } + // 返回信息 + String returnMsg = null; + if (!devicePerformList.isEmpty()) { + // 耗材请求id列表 + List devRequestIdList = devicePerformList.stream().map(PerformInfoDto::getRequestId).toList(); + // 获取耗材发放id列表 + List devDispenseIdList = performInfoList.stream().map(PerformInfoDto::getDispenseId).toList(); + // 发耗材信息查询 + List dispenseList = deviceDispenseService + .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); + // 获取耗材待发放id列表 + List devUnDispenseIdList = new ArrayList<>(); + if (dispenseList != null) { + List unDispenseList = dispenseList.stream() + .filter(x -> DispenseStatus.PREPARATION.getValue().equals(x.getStatusEnum())).toList(); + for (DeviceDispense deviceDispense : unDispenseList) { + // 耗材发放状态 + deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); + // 发药数量 + deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); + // 发药时间 + deviceDispense.setDispenseTime(DateUtils.getNowDate()); + // 发药人 + deviceDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); + // 根据数量设置追溯码 + deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, Collections + .nCopies(deviceDispense.getQuantity().intValue(), CommonConstants.Common.DEV_TRACE_NO))); + devUnDispenseIdList.add(deviceDispense.getId()); + } + // 药品发放更新 + deviceDispenseService.updateBatchById(dispenseList); + } else { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + // 获取库存信息 + List inventoryList = returnMedicineMapper.selectInventoryInfoList( + devUnDispenseIdList, null, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION); + // 按每个耗材分组 + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId)); + // 遍历每个分组校验库存状态 + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum) + .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { + // 库存停供校验 + return R.fail(groupItems.get(0).getItemName() + "库存已停供"); + } + } + List inventoryItemList = new ArrayList<>(); + if (!inventoryList.isEmpty()) { + for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) { + InventoryItem inventoryItem = new InventoryItem(); + // 库存数量判定 + if (unDispenseInventoryDto.getDispenseUnit() + .equals(unDispenseInventoryDto.getInventoryUnitCode())) { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity() + .subtract(unDispenseInventoryDto.getQuantity()); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); + } else { + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); + } + } else { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract( + unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity())); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); + } else { + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); + } + } + inventoryItemList.add(inventoryItem); + } + } + } + // 库存更新 + inventoryItemService.updateBatchById(inventoryItemList); + // 更新请求状态为已完成 + deviceRequestService.updateCompletedStatusBatch(devRequestIdList); + + // 调用医保商品销售接口 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); + // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch)) { + List uploadFailedNoList = + westernMedicineDispenseAppServiceImpl.ybMedicineIntegrated(null, devDispenseIdList); + if (uploadFailedNoList != null) { + returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; + } else { + returnMsg = "3505商品销售上传成功"; + } + } + } return R.ok("执行成功"); } @@ -479,8 +500,6 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp } } } - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } // 返回信息 @@ -501,7 +520,7 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp .eq(DeviceRequest::getRefundDeviceId, performInfoDto.getRequestId()) .eq(DeviceRequest::getDeleteFlag, DelFlag.NO.getCode())); if (deviceRefundRequest != null) { - if (deviceRefundRequest.getStatusEnum().equals(EventStatus.CANCEL.getValue())) { + if (deviceRefundRequest.getStatusEnum().equals(RequestStatus.CANCELLED.getValue())) { // 获取待退的耗材请求id devRefundRequestIdList.add(deviceRefundRequest.getId()); devRequestIdPairList.add(new Pair<>(requestId, deviceRefundRequest.getId())); @@ -550,11 +569,12 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp List inventoryItemList = new ArrayList<>(); // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, + null, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION); if (inventoryList != null && !inventoryList.isEmpty()) { // 设置库存数量 - for (InventoryDto inventory : inventoryList) { + for (UnDispenseInventoryDto inventory : inventoryList) { // 库存表项目设定 InventoryItem inventoryItem = new InventoryItem(); // id diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientInfusionController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientInfusionController.java index 2d049693..83e1a658 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientInfusionController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/controller/OutpatientInfusionController.java @@ -66,10 +66,10 @@ public class OutpatientInfusionController { * @return 门诊输液待执行记录列表 */ @GetMapping(value = "/infusion-pending-record") - public R getInfusionPendingRecord(@RequestParam Long encounterId,@RequestParam Integer serviceStatus, + public R getInfusionPendingRecord(@RequestParam Long encounterId, @RequestParam Integer serviceStatus, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { - return outpatientInfusionAppService.getInfusionPendingRecord(encounterId, serviceStatus,pageNo, pageSize); + return outpatientInfusionAppService.getInfusionPendingRecord(encounterId, serviceStatus, pageNo, pageSize); } /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientTreatmentAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientTreatmentAppMapper.java index 6d2a0980..c8df7a0c 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientTreatmentAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatientmanage/mapper/OutpatientTreatmentAppMapper.java @@ -5,16 +5,16 @@ package com.openhis.web.outpatientmanage.mapper; import java.util.List; -import com.openhis.web.outpatientmanage.dto.BloodTransfusionPatchDto; 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; +import com.openhis.web.common.dto.PerformRecordDto; +import com.openhis.web.outpatientmanage.dto.BloodTransfusionPatchDto; import com.openhis.web.outpatientmanage.dto.OutpatientTreatmentEncounterDto; import com.openhis.web.outpatientmanage.dto.OutpatientTreatmentInfoDto; -import com.openhis.web.common.dto.PerformRecordDto; @Repository public interface OutpatientTreatmentAppMapper { @@ -25,12 +25,14 @@ public interface OutpatientTreatmentAppMapper { * @param page 分页 * @param queryWrapper 查询条件 * @param amb 就诊类型:门诊 + * @param completed 请求状态:已完成 + * @param cancelled 请求状态:取消 * @return 就诊病人列表 */ Page selectEncounterInfoListPage( @Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, - @Param("amb") Integer amb); + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb, + @Param("completed") Integer completed, @Param("cancelled") Integer cancelled); /** * 处置项目查询 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/OutpatientRecordServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/OutpatientRecordServiceImpl.java index dcf55f25..a24f1392 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/OutpatientRecordServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/appservice/impl/OutpatientRecordServiceImpl.java @@ -50,7 +50,7 @@ public class OutpatientRecordServiceImpl implements IOutpatientRecordService { // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(outpatientRecordSearchParam, searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.idCard, CommonConstants.FieldName.Name, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.IdCard, CommonConstants.FieldName.Name, CommonConstants.FieldName.PatientBusNo, CommonConstants.FieldName.EncounterBusNo)), request); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChangePriceService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChangePriceService.java new file mode 100644 index 00000000..a12f03e2 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IChangePriceService.java @@ -0,0 +1,17 @@ +package com.openhis.web.paymentmanage.appservice; + +import com.github.pagehelper.PageInfo; +import com.openhis.web.paymentmanage.dto.ChangePriceListDto; + +import java.util.List; + +/** + * Desc: + * @Author raymond + * @Date 16:09 2025/10/15 + * @return + **/ +public interface IChangePriceService { + + PageInfo searchMedicationList(Integer pageNo, Integer pageSize); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IPaymentRecService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IPaymentRecService.java index 93964438..d811d900 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IPaymentRecService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/IPaymentRecService.java @@ -13,6 +13,7 @@ import com.openhis.web.chargemanage.dto.OutpatientRegistrationAddParam; import com.openhis.web.chargemanage.dto.OutpatientRegistrationSettleParam; import com.openhis.web.paymentmanage.dto.CancelPaymentDto; import com.openhis.web.paymentmanage.dto.InpatientPreSettleResultDto; +import com.openhis.web.paymentmanage.dto.NenuBpcPayDto; import com.openhis.web.paymentmanage.dto.PaymentVO; import com.openhis.yb.dto.PaymentDetailDto; import com.openhis.yb.dto.PaymentDto; @@ -59,7 +60,7 @@ public interface IPaymentRecService { * @param request 请求参数 * @return 结果 */ - IPage getPage(String searchKey, Integer kingEnum,String invoiceNo, Integer pageNo, Integer pageSize, + IPage getPage(String searchKey, Integer kingEnum, String invoiceNo, Integer pageNo, Integer pageSize, HttpServletRequest request); /** @@ -126,4 +127,12 @@ public interface IPaymentRecService { * @return 操作结果 */ R inpatientUnPay(Long paymentId); + + /** + * BPC支付 + * + * @param nenuBpcPayDto bpc支付参数 + * @return 结果 + */ + String nenuBpcPay(NenuBpcPayDto nenuBpcPayDto); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/ThreePartPayService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/ThreePartPayService.java new file mode 100644 index 00000000..c4c58e30 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/ThreePartPayService.java @@ -0,0 +1,14 @@ +package com.openhis.web.paymentmanage.appservice; + +import com.core.common.core.domain.R; +import com.openhis.yb.dto.ThreePartPayDto; + +/** + * 第三方支付应用层Service + * + * @author SunJQ + * @date 2025-03-29 + */ +public interface ThreePartPayService { + R payFor(ThreePartPayDto threePartPayDto); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ChangePriceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ChangePriceImpl.java new file mode 100644 index 00000000..ede44f32 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ChangePriceImpl.java @@ -0,0 +1,33 @@ +package com.openhis.web.paymentmanage.appservice.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.openhis.medication.domain.MedicationDefinition; +import com.openhis.web.paymentmanage.appservice.IChangePriceService; +import com.openhis.web.paymentmanage.dto.ChangePriceListDto; +import com.openhis.web.paymentmanage.mapper.ChangePriceMapper; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @ClassName ChangePriceImpl + * @Description TODO + * @Author raymond + * @Date 2025/10/15 16:10 + * @Version 1.0 + **/ +@Component +public class ChangePriceImpl implements IChangePriceService { + + @Resource + private ChangePriceMapper changePriceMapper; + @Override + public PageInfo searchMedicationList(Integer pageNo, Integer pageSize) { +// PageHelper.startPage(pageNo,pageSize); + List medicationDefinitions = this.changePriceMapper.searchMedicationList(); +// PageInfo pageInfo = new PageInfo<>(list); + return null; + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/EleInvoiceServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/EleInvoiceServiceImpl.java index 72782595..fb343598 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/EleInvoiceServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/EleInvoiceServiceImpl.java @@ -11,31 +11,49 @@ import java.nio.charset.StandardCharsets; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; -import cn.hutool.core.date.DateUtil; -import com.alibaba.fastjson.JSON; -import com.core.common.exception.ServiceException; -import com.openhis.administration.domain.*; -import com.openhis.administration.service.*; -import com.openhis.common.constant.CommonConstants; -import com.openhis.common.enums.ybenums.YbEncounterClass; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.core.domain.R; import com.core.common.core.domain.model.LoginUser; +import com.core.common.exception.ServiceException; import com.core.common.utils.*; import com.fasterxml.jackson.databind.ObjectMapper; +import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.domain.Encounter; +import com.openhis.administration.domain.Invoice; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IChargeItemService; +import com.openhis.administration.service.IEncounterService; +import com.openhis.administration.service.IInvoiceService; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbEncounterClass; import com.openhis.common.enums.ybenums.YbPayment; import com.openhis.config.HttpConfig; import com.openhis.financial.domain.PaymentRecDetail; @@ -48,24 +66,8 @@ import com.openhis.web.paymentmanage.mapper.EleInvoiceMapper; import com.openhis.yb.domain.ClinicReg; import com.openhis.yb.service.IClinicSettleService; import com.openhis.yb.service.IRegService; -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.alibaba.fastjson2.JSONObject; -import com.core.common.core.domain.R; -import com.openhis.common.constant.PromptMsgConstant; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; /** * 电子发票接口Service @@ -76,6 +78,7 @@ import org.springframework.web.bind.annotation.ResponseBody; @Component @Slf4j public class EleInvoiceServiceImpl implements IEleInvoiceService { + private static final BigDecimal ZERO = new BigDecimal("0.00"); Logger logger = LoggerFactory.getLogger(EleInvoiceServiceImpl.class); @Resource EleInvoiceMapper eleInvoiceMapper; @@ -83,9 +86,6 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { IInvoiceService invoiceService; @Resource IPractitionerService practitionerService; - - @Resource - private AssignSeqUtil assignSeqUtil; @Resource IRegService regService; @Resource @@ -98,10 +98,155 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { IChargeItemService chargeItemService; @Resource IEncounterService encounterService; - + @Resource + private AssignSeqUtil assignSeqUtil; @Autowired private HttpConfig httpConfig; - private static final BigDecimal ZERO = new BigDecimal("0.00"); + + public static JSONObject PreInvoicePostForward(JSONObject bill, String endpoint) { + String resultString = ""; + // JSONObject result = new JSONObject(); + // 获取当前租户的option信息 + JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); + String baseUrl = optionJson.getString(CommonConstants.Option.URL); + String appID = optionJson.getString(CommonConstants.Option.APP_ID); + String appKey = optionJson.getString(CommonConstants.Option.KEY); + + EleInvioceBillDto eleInvioceBillDto = new EleInvioceBillDto(); + eleInvioceBillDto.setBaseUrl(baseUrl); + eleInvioceBillDto.setEndpoint(endpoint); + eleInvioceBillDto.setAppKey(appKey); + eleInvioceBillDto.setAppID(appID); + eleInvioceBillDto.setJsonObject(bill); + + // 创建Http请求 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000).setConnectionRequestTimeout(30000) + .setSocketTimeout(30000).build(); + CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build(); + CloseableHttpResponse response = null; + // 发送请求 + try { + HttpPost httpPost = new HttpPost(optionJson.getString("invoiceUrl") + "/eleInvoice/forward"); + System.out.println(optionJson.getString("invoiceUrl") + "/eleInvoice/forward"); + StringEntity stringEntity = new StringEntity(com.alibaba.fastjson2.JSON.toJSONString(eleInvioceBillDto), + ContentType.APPLICATION_JSON); + httpPost.setEntity(stringEntity); + // 执行http请求 + response = httpClient.execute(httpPost); + if (response == null) { + throw new ServiceException("Http请求异常,未接受返回参数"); + } + resultString = EntityUtils.toString(response.getEntity(), "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("Http请求异常,请稍后再试。"); + } finally { + if (response != null) { + try { + response.close(); + } catch (IOException e) { + // logger.error("关闭响应异常", e); + throw new ServiceException("未关闭系统资源:" + e.getStackTrace()); + } + } + } + return JSONObject.parseObject(resultString); + } + + /** + * 发送请求 + * + * @param bill 请求参数 + * @param endpoint 请求后缀url + * @return 返回值 + */ + public static JSONObject PreInvoicePost(JSONObject bill, String endpoint) { + + JSONObject result = new JSONObject(); + // 获取当前租户的option信息 + JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); + + String baseUrl = optionJson.getString(CommonConstants.Option.URL); + // 拼接成完整 URL(作为路径) + String cleanUrl = baseUrl + "/" + endpoint; // 确保用 "/" 分隔 + String url = cleanUrl.trim().replaceAll("^\"|\"$", "") // 去除首尾引号 + .replaceAll("\\s+", "")// 去除首尾引号 + .replaceAll("\"", ""); // 去除中间引号 + + String appID = optionJson.getString(CommonConstants.Option.APP_ID); + String appKey = optionJson.getString(CommonConstants.Option.KEY); + String data = bill.toJSONString(); + String version = "1.0"; + // 请求随机标识 noise + String noise = UUID.randomUUID().toString(); + + data = Base64.getEncoder().encodeToString(data.getBytes(StandardCharsets.UTF_8)); + + StringBuilder str = new StringBuilder(); + str.append("appid=").append(appID); + str.append("&data=").append(data); + str.append("&noise=").append(noise); + str.append("&key=").append(appKey); + str.append("&version=").append(version); + String sign = DigestUtils.md5Hex(str.toString().getBytes(Charset.forName("UTF-8"))).toUpperCase(); + + Map map = new HashMap<>(); + map.put("appid", appID); + map.put("data", data); + map.put("noise", noise); + map.put("sign", sign); + map.put("version", version); + + try { + HttpPost httpPost = new HttpPost(url); + CloseableHttpClient client = HttpClients.createDefault(); + String respContent = null; + // 请求参数转JOSN字符串 + StringEntity entity = new StringEntity(new ObjectMapper().writeValueAsString(map), "utf-8"); + entity.setContentEncoding("UTF-8"); + entity.setContentType("application/json"); + httpPost.setEntity(entity); + HttpResponse resp = client.execute(httpPost); + + if (resp.getStatusLine().getStatusCode() == 200) { + String rev = EntityUtils.toString(resp.getEntity()); + // System.out.println("返回串--》"+rev); + Map resultData = new ObjectMapper().readValue(rev, Map.class); + String rdata = resultData.get("data").toString(); + String rnoise = resultData.get("noise").toString(); + // 1、拼接返回验签参数 + StringBuilder str1 = new StringBuilder(); + str1.append("appid=").append(appID); + str1.append("&data=").append(rdata); + str1.append("&noise=").append(rnoise); + str1.append("&key=").append(appKey); + str1.append("&version=").append(version); + // 3.MD5加密 生成sign + String rmd5 = DigestUtils.md5Hex(str1.toString().getBytes(Charset.forName("UTF-8"))).toUpperCase(); + String rsign = resultData.get("sign").toString(); + System.out.println("验签-》" + (StringUtils.equals(rsign, rmd5))); + String busData = + new String(Base64.getDecoder().decode(resultData.get("data").toString()), StandardCharsets.UTF_8); + System.out.println("返回业务数据--》" + busData); + Map busDataMap = new ObjectMapper().readValue(busData, Map.class); + System.out + .println("业务信息解密--》" + new String(Base64.getDecoder().decode(busDataMap.get("message").toString()), + StandardCharsets.UTF_8)); + + JSONObject resobj = JSONObject.parseObject(busData); + result.put("success", true); + result.put("result", resobj); + } else { + result.put("msg", "web响应失败!"); + result.put("success", false); + } + } catch (Exception e) { + result.put("msg", e.getMessage()); + result.put("success", false); + } + return result; + + } /** * 电子票据补开接口 @@ -247,7 +392,7 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { chargeDetail.put("unit", "项"); // std 收费标准 Number 14,2 是 BigDecimal std = - detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 2, RoundingMode.HALF_UP); + detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 6, RoundingMode.HALF_UP); // 精确表示,避免科学计数法 chargeDetail.put("std", df.format(std)); // number 数量 Number 14,2 是 @@ -308,9 +453,9 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { System.out.println(JSON.toJSONString(bill)); JSONObject resobj; - if("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))){ + if ("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) { resobj = PreInvoicePostForward(bill, "api/medical/invEBillRegistration"); - }else{ + } else { resobj = PreInvoicePost(bill, "api/medical/invEBillRegistration"); } if (resobj.getBooleanValue("success")) { @@ -321,7 +466,7 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { redata64 = rejson.getString("message").toString(); srcdata = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); redata = JSONObject.parseObject(srcdata); - logger.info("挂号信息:"+JSON.toJSONString(redata)); + logger.info("挂号信息:" + JSON.toJSONString(redata)); // 获取发票管理表信息 Invoice invoice = invoiceService.getById(paymentInfo.getInvoiceId()); // 状态 @@ -498,13 +643,22 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { otherInfo.put("infoValue", clinicSettle.getHospPartAmt() == null ? ZERO : clinicSettle.getHospPartAmt()); otherInfos.add(otherInfo); + // 师大公费医疗 + BigDecimal otherPay = clinicSettle.getOthPay() == null ? ZERO : clinicSettle.getOthPay(); + BigDecimal gfRatio = clinicSettle.getGfRatio() == null ? ZERO : clinicSettle.getGfRatio(); + otherInfo = new JSONObject(); otherInfo.put("infoNo", "1"); otherInfo.put("infoName", "其他支出"); - otherInfo.put("infoValue", clinicSettle.getOthPay() == null ? ZERO : clinicSettle.getOthPay()); + otherInfo.put("infoValue", otherPay.add(gfRatio)); otherInfos.add(otherInfo); bill.put("otherInfo", otherInfos); + // 师大remark记录 + if (gfRatio.compareTo(BigDecimal.ZERO) > 0) { + bill.put("remark", "学校垫支金额:" + gfRatio); + } + // ------项目------ // 医疗收费项目类别 // 01 床位费,02 诊察费,03 检查费,04 化验费,05 治疗费,06 手术费,07 护理费,08 卫生材料费,09 西药费,10 中药饮片费,11 中成药费,12 一般诊疗费,13 挂号费,14 其他费 @@ -536,7 +690,7 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { chargeDetail.put("unit", "项"); // std 收费标准 Number 14,2 是 BigDecimal std = - detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 2, RoundingMode.HALF_UP); + detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 6, RoundingMode.HALF_UP); chargeDetail.put("std", df.format(std)); // number 数量 Number 14,2 是 chargeDetail.put("number", detail.getNumber()); @@ -595,9 +749,9 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { String srcmsg; System.out.println(JSON.toJSONString(bill)); JSONObject resobj; - if("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))){ + if ("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) { resobj = PreInvoicePostForward(bill, "api/medical/invoiceEBillOutpatient"); - }else{ + } else { resobj = PreInvoicePost(bill, "api/medical/invoiceEBillOutpatient"); } if (resobj.getBooleanValue("success")) { @@ -607,7 +761,7 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { redata64 = rejson.getString("message").toString(); srcdata = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); redata = JSONObject.parseObject(srcdata); - logger.info("门诊信息:"+JSON.toJSONString(redata)); + logger.info("门诊信息:" + JSON.toJSONString(redata)); // 获取发票管理表信息 Invoice invoice = invoiceService.getById(paymentInfo.getInvoiceId()); // 状态 @@ -874,7 +1028,7 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { chargeDetail.put("unit", "项"); // std 收费标准 Number 14,2 是 BigDecimal std = - detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 2, RoundingMode.HALF_UP); + detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 6, RoundingMode.HALF_UP); // 精确表示,避免科学计数法 chargeDetail.put("std", df.format(std)); // number 数量 Number 14,2 是 @@ -894,11 +1048,11 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { String redata64; String srcdata; String srcmsg; - //JSONObject resobj = PreInvoicePostForward(bill, "api/medical/invEBillHospitalized"); + // JSONObject resobj = PreInvoicePostForward(bill, "api/medical/invEBillHospitalized"); JSONObject resobj; - if("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))){ + if ("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) { resobj = PreInvoicePostForward(bill, "api/medical/invEBillHospitalized"); - }else{ + } else { resobj = PreInvoicePost(bill, "api/medical/invEBillHospitalized"); } if (resobj.getBooleanValue("success")) { @@ -908,7 +1062,7 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { redata64 = rejson.getString("message").toString(); srcdata = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); redata = JSONObject.parseObject(srcdata); - logger.info("住院信息:"+JSON.toJSONString(redata)); + logger.info("住院信息:" + JSON.toJSONString(redata)); // 获取发票管理表信息 Invoice invoice = invoiceService.getById(paymentInfo.getInvoiceId()); // 状态 @@ -1222,10 +1376,13 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { } } else { // 医保 + // 2025/10/20 长大异常情况 24.24+29.05+4.15》53.29,猜测实际医保段otherpay是包含在fundpay或者zhpay的某一个 payChannelDetail = new JSONObject(); payChannelDetail.put("payChannelCode", "11"); - payChannelDetail.put("payChannelValue", df.format(paymentInfo.getYbFundPayAmount().add(paymentInfo - .getOtherPayAmount().add(paymentInfo.getZhPayAmount()).add(paymentInfo.getAelfYbZhGjValue())))); + // payChannelDetail.put("payChannelValue", df.format(paymentInfo.getYbFundPayAmount().add(paymentInfo + // .getOtherPayAmount().add(paymentInfo.getZhPayAmount()).add(paymentInfo.getAelfYbZhGjValue())))); + payChannelDetail.put("payChannelValue", df.format(paymentInfo.getYbFundPayAmount() + .add(paymentInfo.getZhPayAmount()).add(paymentInfo.getAelfYbZhGjValue()))); payChannelDetails.add(payChannelDetail); // 现金 @@ -1328,12 +1485,12 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { String srcdata; String srcmsg; - //JSONObject resobj = PreInvoicePostForward(bill, "api/medical/writeOffEBill"); + // JSONObject resobj = PreInvoicePostForward(bill, "api/medical/writeOffEBill"); JSONObject resobj; - logger.info("冲红信息入参:"+JSON.toJSONString(bill)); - if("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))){ + logger.info("冲红信息入参:" + JSON.toJSONString(bill)); + if ("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) { resobj = PreInvoicePostForward(bill, "api/medical/writeOffEBill"); - }else{ + } else { resobj = PreInvoicePost(bill, "api/medical/writeOffEBill"); } if (resobj.getBooleanValue("success")) { @@ -1343,7 +1500,7 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { redata64 = rejson.getString("message").toString(); srcdata = new String(Base64.getDecoder().decode(redata64), StandardCharsets.UTF_8); redata = JSONObject.parseObject(srcdata); - logger.info("冲红信息:"+JSON.toJSONString(redata)); + logger.info("冲红信息:" + JSON.toJSONString(redata)); // 修改发票管理表数据 // 状态 invoice.setStatusEnum(InvoiceStatus.CANCELLED); @@ -1431,151 +1588,6 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { } } - public static JSONObject PreInvoicePostForward(JSONObject bill, String endpoint) { - String resultString = ""; - //JSONObject result = new JSONObject(); - // 获取当前租户的option信息 - JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); - String baseUrl = optionJson.getString(CommonConstants.Option.URL); - String appID = optionJson.getString(CommonConstants.Option.APP_ID); - String appKey = optionJson.getString(CommonConstants.Option.KEY); - - EleInvioceBillDto eleInvioceBillDto = new EleInvioceBillDto(); - eleInvioceBillDto.setBaseUrl(baseUrl); - eleInvioceBillDto.setEndpoint(endpoint); - eleInvioceBillDto.setAppKey(appKey); - eleInvioceBillDto.setAppID(appID); - eleInvioceBillDto.setJsonObject(bill); - - // 创建Http请求 - RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000).setConnectionRequestTimeout(30000) - .setSocketTimeout(30000).build(); - CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build(); - CloseableHttpResponse response = null; - // 发送请求 - try { - HttpPost httpPost = new HttpPost(optionJson.getString("invoiceUrl")+"/eleInvoice/forward"); - System.out.println(optionJson.getString("invoiceUrl")+"/eleInvoice/forward"); - StringEntity stringEntity = new StringEntity(com.alibaba.fastjson2.JSON.toJSONString(eleInvioceBillDto), ContentType.APPLICATION_JSON); - httpPost.setEntity(stringEntity); - // 执行http请求 - response = httpClient.execute(httpPost); - if(response==null){ - throw new ServiceException("Http请求异常,未接受返回参数"); - } - resultString = EntityUtils.toString(response.getEntity(), "utf-8"); - } catch (Exception e) { - e.printStackTrace(); - throw new ServiceException("Http请求异常,请稍后再试。"); - } - finally { - if (response != null) { - try { - response.close(); - } catch (IOException e) { - //logger.error("关闭响应异常", e); - throw new ServiceException("未关闭系统资源:"+e.getStackTrace()); - } - } - } - return JSONObject.parseObject(resultString); - } - - /** - * 发送请求 - * - * @param bill 请求参数 - * @param endpoint 请求后缀url - * @return 返回值 - */ - public static JSONObject PreInvoicePost(JSONObject bill, String endpoint) { - - JSONObject result = new JSONObject(); - // 获取当前租户的option信息 - JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); - - String baseUrl = optionJson.getString(CommonConstants.Option.URL); - // 拼接成完整 URL(作为路径) - String cleanUrl = baseUrl + "/" + endpoint; // 确保用 "/" 分隔 - String url = cleanUrl.trim().replaceAll("^\"|\"$", "") // 去除首尾引号 - .replaceAll("\\s+", "")// 去除首尾引号 - .replaceAll("\"", ""); // 去除中间引号 - - String appID = optionJson.getString(CommonConstants.Option.APP_ID); - String appKey = optionJson.getString(CommonConstants.Option.KEY); - String data = bill.toJSONString(); - String version = "1.0"; - // 请求随机标识 noise - String noise = UUID.randomUUID().toString(); - - data = Base64.getEncoder().encodeToString(data.getBytes(StandardCharsets.UTF_8)); - - StringBuilder str = new StringBuilder(); - str.append("appid=").append(appID); - str.append("&data=").append(data); - str.append("&noise=").append(noise); - str.append("&key=").append(appKey); - str.append("&version=").append(version); - String sign = DigestUtils.md5Hex(str.toString().getBytes(Charset.forName("UTF-8"))).toUpperCase(); - - Map map = new HashMap<>(); - map.put("appid", appID); - map.put("data", data); - map.put("noise", noise); - map.put("sign", sign); - map.put("version", version); - - try { - HttpPost httpPost = new HttpPost(url); - CloseableHttpClient client = HttpClients.createDefault(); - String respContent = null; - // 请求参数转JOSN字符串 - StringEntity entity = new StringEntity(new ObjectMapper().writeValueAsString(map), "utf-8"); - entity.setContentEncoding("UTF-8"); - entity.setContentType("application/json"); - httpPost.setEntity(entity); - HttpResponse resp = client.execute(httpPost); - - if (resp.getStatusLine().getStatusCode() == 200) { - String rev = EntityUtils.toString(resp.getEntity()); - // System.out.println("返回串--》"+rev); - Map resultData = new ObjectMapper().readValue(rev, Map.class); - String rdata = resultData.get("data").toString(); - String rnoise = resultData.get("noise").toString(); - // 1、拼接返回验签参数 - StringBuilder str1 = new StringBuilder(); - str1.append("appid=").append(appID); - str1.append("&data=").append(rdata); - str1.append("&noise=").append(rnoise); - str1.append("&key=").append(appKey); - str1.append("&version=").append(version); - // 3.MD5加密 生成sign - String rmd5 = DigestUtils.md5Hex(str1.toString().getBytes(Charset.forName("UTF-8"))).toUpperCase(); - String rsign = resultData.get("sign").toString(); - System.out.println("验签-》" + (StringUtils.equals(rsign, rmd5))); - String busData = - new String(Base64.getDecoder().decode(resultData.get("data").toString()), StandardCharsets.UTF_8); - System.out.println("返回业务数据--》" + busData); - Map busDataMap = new ObjectMapper().readValue(busData, Map.class); - System.out - .println("业务信息解密--》" + new String(Base64.getDecoder().decode(busDataMap.get("message").toString()), - StandardCharsets.UTF_8)); - - JSONObject resobj = JSONObject.parseObject(busData); - result.put("success", true); - result.put("result", resobj); - } else { - result.put("msg", "web响应失败!"); - result.put("success", false); - } - } catch (Exception e) { - result.put("msg", e.getMessage()); - result.put("success", false); - } - return result; - - } - /** * 通过paymentId获取医保结算实体 * @@ -1631,6 +1643,10 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService { if (YbPayment.OVERLMT_SELFPAY.getValue().equals(detail.getPayEnum())) { invoiceBaseInfoDto.setOverlmtSelfpay(detail.getAmount()); } + // 学校垫支 + if (YbPayment.SCHOOL_GF_PAY.getValue().equals(detail.getPayEnum())) { + invoiceBaseInfoDto.setGfRatio(detail.getAmount()); + } } return invoiceBaseInfoDto; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java index 4dc66cc6..9f9e7c1b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/IChargeBillServiceImpl.java @@ -182,6 +182,9 @@ public class IChargeBillServiceImpl implements IChargeBillService { if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_ALI_VALUE.getValue())) { map.put("aliCash", paymentRecDetail.getAmount());// 现金(支付宝) } + if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.INSCP_SCP_AMT.getValue())) { + map.put("FHZCAmount", paymentRecDetail.getAmount());// 符合政策金额 + } } Invoice invoice = iInvoiceService.getOne(new LambdaQueryWrapper() @@ -1440,6 +1443,7 @@ public class IChargeBillServiceImpl implements IChargeBillService { BigDecimal uniSum = BigDecimal.ZERO;// 银行卡总数 BigDecimal SelfCashSum = BigDecimal.ZERO;// 自费现金总额 BigDecimal YbCashSum = BigDecimal.ZERO;// 医保现金总额 + BigDecimal discountSum = BigDecimal.ZERO;// 优惠金额 // 长大版本要显示出来省市医保的区别 List redisContractList = iContractService.getRedisContractList(); Map> contractMapByBusNo = @@ -1480,6 +1484,9 @@ public class IChargeBillServiceImpl implements IChargeBillService { if (YbPayment.SELF_YB_ZH_PAY.getValue().equals(paymentRecDetailAccountResult.getPayEnum())) { zhSum = zhSum.add(paymentRecDetailAccountResult.getAmount()); } + if (YbPayment.DISCOUNT_PAY.getValue().equals(paymentRecDetailAccountResult.getPayEnum())) { + discountSum = discountSum.add(paymentRecDetailAccountResult.getAmount()); + } // 其他的大病支付或者慢病特病支付往下接if map.put( contractMapByBusNo.get(key) == null ? key : contractMapByBusNo.get(key).get(0).getBusNo() + "cash", @@ -1500,6 +1507,7 @@ public class IChargeBillServiceImpl implements IChargeBillService { map.put("vxCashSum", vxCashSum);// 自费现金vx map.put("uniCashSum", uniCashSum);// 自费现金银联 map.put("aliCashSum", aliCashSum);// 自费现金ali + map.put("discountSum", discountSum);// 优惠金额 // 将所有的payment分组进行单独处理(业务注释:处理不同财务分类的金额,如西药费中药费等) List paymentList = new ArrayList<>(); @@ -1727,7 +1735,7 @@ public class IChargeBillServiceImpl implements IChargeBillService { map.put("OTHER_FEE", otherFee);// 其他费用 sum = bedFee.add(diagnosticFee).add(checkFee).add(diagnosticTestFee).add(medicalExpenseFee).add(operationFee) .add(nursingFee).add(sanitaryMaterialsFee).add(westMedicine).add(chineseMedicineFee) - .add(chineseMedicineSlicesFee).add(generalConsultationFee).add(registrationFee).add(otherFee); + .add(chineseMedicineSlicesFee).add(generalConsultationFee).add(registrationFee).add(otherFee).subtract(discountSum); map.put("SUM", sum);// 合计费用 Map> chargeItemDefKVByTypeCode = diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java index 1b2093f2..6e52e4d3 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/PaymentRecServiceImpl.java @@ -37,6 +37,7 @@ import com.core.common.utils.bean.BeanUtils; import com.openhis.administration.domain.*; import com.openhis.administration.dto.ChargeItemBaseInfoDto; import com.openhis.administration.service.*; +import com.openhis.administration.service.impl.PatientStudentServiceImpl; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; @@ -55,12 +56,15 @@ import com.openhis.financial.service.*; import com.openhis.medication.domain.MedicationRequest; import com.openhis.medication.service.IMedicationDispenseService; import com.openhis.medication.service.IMedicationRequestService; +import com.openhis.nenu.domain.TransactionResponse; +import com.openhis.nenu.service.ITransactionResponseService; import com.openhis.web.chargemanage.appservice.impl.OutpatientRegistrationAppServiceImpl; import com.openhis.web.chargemanage.dto.*; import com.openhis.web.chargemanage.mapper.OutpatientRegistrationAppMapper; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; import com.openhis.web.doctorstation.dto.AdviceBaseDto; import com.openhis.web.doctorstation.dto.AdvicePriceDto; +import com.openhis.web.externalintegration.appservice.IBankPosCloudAppService; import com.openhis.web.paymentmanage.appservice.IPaymentRecService; import com.openhis.web.paymentmanage.dto.*; import com.openhis.web.paymentmanage.dto.CancelPaymentDto; @@ -98,6 +102,12 @@ public class PaymentRecServiceImpl implements IPaymentRecService { @Resource private IPaymentNoticeService paymentNoticeService; @Resource + private ITransactionResponseService transactionResponseService; + @Resource + private IBankPosCloudAppService bankPosCloudAppService; + @Resource + private IPractitionerService practitionerService; + @Resource private IAccountService iAccountService; @Resource private IContractService iContractService; @@ -116,6 +126,10 @@ public class PaymentRecServiceImpl implements IPaymentRecService { @Resource private IChargeItemService chargeItemService; @Resource + private IChargeItemDefinitionService chargeItemDefinitionService; + @Resource + private IHealthcareServiceService healthcareServiceService; + @Resource private AssignSeqUtil assignSeqUtil; @Resource private PaymentMapper paymentMapper; @@ -139,6 +153,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService { private IRegService iRegService; @Resource private IPatientService iPatientService; + @Resource + private PatientStudentServiceImpl patientStudentService; @Autowired private IPractitionerService iPractitionerService; @Autowired @@ -358,6 +374,35 @@ public class PaymentRecServiceImpl implements IPaymentRecService { return R.fail("收费项目变动,请重新预结算"); } + //2025.11.4 长大发生异常,相同的chargeItem存在两个payment并重复收费,要求在此处增加校验 + // 经研究最优解为在数据库中查询本次就诊的所有的chargeItemIds,与现有chargeItemId进行匹配 + List paymentReconciliationList = paymentReconciliationService.getListByEncounterId(paymentDto.getEncounterId(), PaymentKind.OUTPATIENT_CLINIC); + + List chargeItemIds = paymentDto.getChargeItemIds(); + + if(!paymentReconciliationList.isEmpty()){ + // 收集所有元素(包含重复) + List allElements = paymentReconciliationList.stream() + .map(PaymentReconciliation::getChargeItemIds) // 获取逗号拼接的字符串 + .filter(str -> str != null && !str.trim().isEmpty()) // 过滤空值 + .flatMap(str -> Arrays.stream(str.split(","))) // 拆分成单个元素 + .map(String::trim) // 去除空格 + .filter(s -> !s.isEmpty()) // 过滤空字符串 + .collect(Collectors.toList()); + + for (Long chargeItemId : chargeItemIds) { + Optional first = allElements.stream() + .filter(item -> item.equals(chargeItemId.toString())) + .findFirst(); + + if(first.isPresent()){ + throw new ServiceException("收费项目id:"+chargeItemId+"已经收费过了,请确认"); + } + } + } + + + // 校验金额:前台输入金额与仍需支付的现金部分进行比较 BigDecimal sum = BigDecimal.ZERO; PaymentRecDetail paymentRecDetailDemo = new PaymentRecDetail(); @@ -382,7 +427,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { .setAmount(paymentDetail.getAmount()); list.add(newPaymentRecDetail); } - // 前台传入数据可能会精度丢失,后天临时处理使用近似 + // 前台传入数据可能会精度丢失,后台临时处理使用近似 11.11要求后台全部改为6位小数,但是实际患者缴费只到1.67,但是我后台是1.666667,所以只能1.67=1.67 if (sum.setScale(2, BigDecimal.ROUND_HALF_UP) .compareTo(chargeAmount.setScale(2, BigDecimal.ROUND_HALF_UP)) != 0) { throw new ServiceException("交款金额与预结算金额不相等"); @@ -497,8 +542,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService { chargeItemService.updatePaymentStatus(chargeItemIdList, ChargeItemStatus.BILLED.getValue()); // 保存付款快照信息 2025/08/08 - // paymentRecStaticService.savePaymentRecStatics(paymentReconciliation.getId(), PaymentType.PAY, null, - // chargeItemService.getChargeItemDefInfoByIds(chargeItemIdList)); + paymentRecStaticService.savePaymentRecStatics(paymentReconciliation.getId(), PaymentType.PAY, null, + chargeItemService.getChargeItemDefInfoByIdList(chargeItemIdList)); // 生成发票信息 Invoice invoice = new Invoice(); @@ -703,9 +748,9 @@ public class PaymentRecServiceImpl implements IPaymentRecService { logger.info( "部分退款:原payment:" + JSON.toJSONString(paymentReconciliation) + "新payment:" + JSON.toJSONString(payment)); if (chargedPay.compareTo(payAmount) >= 0) { - return R.ok("请患者补交" + chargedPay.subtract(payAmount).setScale(1, RoundingMode.HALF_UP) + "元"); + return R.ok("请患者补交" + chargedPay.subtract(payAmount).setScale(6, RoundingMode.HALF_UP) + "元"); } else { - return R.ok("请返还患者" + payAmount.subtract(chargedPay).setScale(1, RoundingMode.HALF_UP) + "元"); + return R.ok("请返还患者" + payAmount.subtract(chargedPay).setScale(6, RoundingMode.HALF_UP) + "元"); } } // 更新收费状态:已退费 @@ -749,15 +794,22 @@ public class PaymentRecServiceImpl implements IPaymentRecService { * @return 结果 */ @Override - public IPage getPage(String searchKey, Integer kingEnum, String invoiceNo,Integer pageNo, Integer pageSize, - HttpServletRequest request) { + public IPage getPage(String searchKey, Integer kingEnum, String invoiceNo, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + + String invoiceStatus = request.getParameter("invoiceStatus"); + PaymentVO paymentVO = new PaymentVO(); + if (invoiceStatus != null) { + paymentVO.setInvoiceStatus(Integer.parseInt(invoiceStatus)); + } // 构建查询条件 - QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(new PaymentVO(), searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.paymentNo)), + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(paymentVO, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.PaymentNo)), request); // queryWrapper.eq(PaymentVO::getStatusEnum,PaymentStatus.SUCCESS.getValue()).or().eq(PaymentVO::getStatusEnum,PaymentStatus.REFUND_ALL.getValue()); queryWrapper.in("status_enum", PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue()); - IPage paymentDtoIPage = paymentMapper.getPage(new Page<>(pageNo, pageSize), kingEnum, invoiceNo,queryWrapper); + IPage paymentDtoIPage = + paymentMapper.getPage(new Page<>(pageNo, pageSize), kingEnum, invoiceNo, queryWrapper); for (PaymentVO record : paymentDtoIPage.getRecords()) { record.setPaymentId(record.getId().toString()); @@ -848,15 +900,15 @@ public class PaymentRecServiceImpl implements IPaymentRecService { logger.info("退款payment:" + JSON.toJSONString(paymentReconciliation)); // 保存付款快照信息 2025/08/08 - // List chargeItemIds = new ArrayList<>(); - // for (String s : paymentReconciliation.getChargeItemIds().split(",")) { - // chargeItemIds.add(Long.parseLong(s)); - // } - // if (chargeItemIds.isEmpty()) { - // throw new ServiceException("payment数据未关联收费项信息,异常数据payment" + id); - // } - // paymentRecStaticService.savePaymentRecStatics(paymentReconciliation.getId(), PaymentType.PAY, null, - // chargeItemService.getChargeItemDefInfoByIds(chargeItemIds)); + List chargeItemIds = new ArrayList<>(); + for (String s : paymentReconciliation.getChargeItemIds().split(",")) { + chargeItemIds.add(Long.parseLong(s)); + } + if (chargeItemIds.isEmpty()) { + throw new ServiceException("payment数据未关联收费项信息,异常数据payment" + id); + } + paymentRecStaticService.savePaymentRecStatics(paymentReconciliation.getId(), PaymentType.PAY, null, + chargeItemService.getChargeItemDefInfoByIdList(chargeItemIds)); return paymentReconciliation; } @@ -869,6 +921,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { */ private List savePaymentDetail(List prePaymentResults, PaymentReconciliation payment) { + //11.11 paymentDetail的amount在11.7日按照同一的异常日结单,要求改为保留两位小数,后于11.11又被要求改为保留六位小数 // 保存付款详情 List paymentRecDetails = new ArrayList<>(); for (PrePaymentResult prePaymentResult : prePaymentResults) { @@ -878,7 +931,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { if (psnCashPay != null) { PaymentRecDetail paymentRecDetail10 = new PaymentRecDetail(); paymentRecDetail10.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_CASH_PAY.getValue()) - .setPayLevelEnum(YbPayment.SELF_CASH_PAY.getLevel()).setAmount(psnCashPay) + .setPayLevelEnum(YbPayment.SELF_CASH_PAY.getLevel()).setAmount(psnCashPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail10); @@ -886,21 +939,21 @@ public class PaymentRecServiceImpl implements IPaymentRecService { // 个人负担总金额 BigDecimal psnPartAmt = prePaymentResult.getPsnPartAmt(); - if (psnCashPay != null) { + if (psnPartAmt != null) { PaymentRecDetail paymentRecDetail1 = new PaymentRecDetail(); paymentRecDetail1.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_PAY.getValue()) - .setPayLevelEnum(YbPayment.SELF_PAY.getLevel()).setAmount(psnPartAmt) + .setPayLevelEnum(YbPayment.SELF_PAY.getLevel()).setAmount(psnPartAmt.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail1); } // 基本医疗保险统筹基金支出 BigDecimal hifpPay = prePaymentResult.getHifpPay(); - if (psnCashPay != null) { + if (hifpPay != null) { PaymentRecDetail paymentRecDetail2 = new PaymentRecDetail(); paymentRecDetail2.setReconciliationId(payment.getId()) .setPayEnum(YbPayment.YB_TC_FUND_AMOUNT.getValue()) - .setPayLevelEnum(YbPayment.YB_TC_FUND_AMOUNT.getLevel()).setAmount(hifpPay) + .setPayLevelEnum(YbPayment.YB_TC_FUND_AMOUNT.getLevel()).setAmount(hifpPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail2); @@ -908,126 +961,126 @@ public class PaymentRecServiceImpl implements IPaymentRecService { // 公务员医疗补助资金支出 BigDecimal cvlservPay = prePaymentResult.getCvlservPay(); - if (psnCashPay != null) { + if (cvlservPay != null) { PaymentRecDetail paymentRecDetail3 = new PaymentRecDetail(); paymentRecDetail3.setReconciliationId(payment.getId()) .setPayEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getValue()) - .setPayLevelEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getLevel()).setAmount(cvlservPay) + .setPayLevelEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getLevel()).setAmount(cvlservPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail3); } // 企业补充医疗保险基金支出 BigDecimal hifesPay = prePaymentResult.getHifesPay(); - if (psnCashPay != null) { + if (hifesPay != null) { PaymentRecDetail paymentRecDetail4 = new PaymentRecDetail(); paymentRecDetail4.setReconciliationId(payment.getId()) .setPayEnum(YbPayment.YB_BC_FUND_AMOUNT.getValue()) - .setPayLevelEnum(YbPayment.YB_BC_FUND_AMOUNT.getLevel()).setAmount(hifesPay) + .setPayLevelEnum(YbPayment.YB_BC_FUND_AMOUNT.getLevel()).setAmount(hifesPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail4); } // 居民大病保险资金支出 BigDecimal hifmiPay = prePaymentResult.getHifmiPay(); - if (psnCashPay != null) { + if (hifmiPay != null) { PaymentRecDetail paymentRecDetail5 = new PaymentRecDetail(); paymentRecDetail5.setReconciliationId(payment.getId()) .setPayEnum(YbPayment.YB_BC_JM_DB_VALUE.getValue()) - .setPayLevelEnum(YbPayment.YB_BC_JM_DB_VALUE.getLevel()).setAmount(hifmiPay) + .setPayLevelEnum(YbPayment.YB_BC_JM_DB_VALUE.getLevel()).setAmount(hifmiPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail5); } // 职工大额医疗费用补助基金支出 BigDecimal hifobPay = prePaymentResult.getHifobPay(); - if (psnCashPay != null) { + if (hifobPay != null) { PaymentRecDetail paymentRecDetail6 = new PaymentRecDetail(); paymentRecDetail6.setReconciliationId(payment.getId()).setPayTransNo(prePaymentResult.getChrgBchno()) - .setPayLevelEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getLevel()).setAmount(hifobPay) + .setPayLevelEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getLevel()).setAmount(hifobPay.setScale(6,RoundingMode.HALF_UP)) .setPayEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getValue()) .setResultEnum(PaymentResult.UNPAID.getValue()).setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail6); } // 医疗救助基金支出 BigDecimal mafPay = prePaymentResult.getMafPay(); - if (psnCashPay != null) { + if (mafPay != null) { PaymentRecDetail paymentRecDetail7 = new PaymentRecDetail(); paymentRecDetail7.setReconciliationId(payment.getId()) .setPayEnum(YbPayment.YB_JZ_FUND_AMOUNT.getValue()) - .setPayLevelEnum(YbPayment.YB_JZ_FUND_AMOUNT.getLevel()).setAmount(mafPay) + .setPayLevelEnum(YbPayment.YB_JZ_FUND_AMOUNT.getLevel()).setAmount(mafPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail7); } // 其他支出 BigDecimal othPay = prePaymentResult.getOthPay(); - if (psnCashPay != null) { + if (othPay != null) { PaymentRecDetail paymentRecDetail8 = new PaymentRecDetail(); paymentRecDetail8.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OTHER_PAY.getValue()) - .setPayLevelEnum(YbPayment.OTHER_PAY.getLevel()).setAmount(othPay) + .setPayLevelEnum(YbPayment.OTHER_PAY.getLevel()).setAmount(othPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail8); } // 基金支付总额 BigDecimal fundPaySumamt = prePaymentResult.getFundPaySumamt(); - if (psnCashPay != null) { + if (fundPaySumamt != null) { PaymentRecDetail paymentRecDetail9 = new PaymentRecDetail(); paymentRecDetail9.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_FUND_PAY.getValue()) - .setPayLevelEnum(YbPayment.YB_FUND_PAY.getLevel()).setAmount(fundPaySumamt) + .setPayLevelEnum(YbPayment.YB_FUND_PAY.getLevel()).setAmount(fundPaySumamt.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail9); } // 个人账户支出 BigDecimal acctPay = prePaymentResult.getAcctPay(); - if (psnCashPay != null) { + if (acctPay != null) { PaymentRecDetail paymentRecDetail11 = new PaymentRecDetail(); paymentRecDetail11.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_YB_ZH_PAY.getValue()) - .setPayLevelEnum(YbPayment.SELF_YB_ZH_PAY.getLevel()).setAmount(acctPay) + .setPayLevelEnum(YbPayment.SELF_YB_ZH_PAY.getLevel()).setAmount(acctPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail11); } // 医院负担金额 BigDecimal hospPartAmt = prePaymentResult.getHospPartAmt(); - if (psnCashPay != null) { + if (hospPartAmt != null) { PaymentRecDetail paymentRecDetail12 = new PaymentRecDetail(); paymentRecDetail12.setReconciliationId(payment.getId()).setPayEnum(YbPayment.HOSP_PART_AMT.getValue()) - .setPayLevelEnum(YbPayment.HOSP_PART_AMT.getLevel()).setAmount(hospPartAmt) + .setPayLevelEnum(YbPayment.HOSP_PART_AMT.getLevel()).setAmount(hospPartAmt.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail12); } // 个人账户共济支付金额 BigDecimal acctMulaidPay = prePaymentResult.getAcctMulaidPay(); - if (psnCashPay != null) { + if (acctMulaidPay != null) { PaymentRecDetail paymentRecDetail13 = new PaymentRecDetail(); paymentRecDetail13.setReconciliationId(payment.getId()) .setPayEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getValue()) - .setPayLevelEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getLevel()).setAmount(acctMulaidPay) + .setPayLevelEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getLevel()).setAmount(acctMulaidPay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail13); } // 全自费金额 BigDecimal fulamtOwnpayAmt = prePaymentResult.getFulamtOwnpayAmt(); - if (psnCashPay != null) { + if (fulamtOwnpayAmt != null) { PaymentRecDetail paymentRecDetail14 = new PaymentRecDetail(); paymentRecDetail14.setReconciliationId(payment.getId()) .setPayEnum(YbPayment.FULAMT_OWNPAY_AMT.getValue()) - .setPayLevelEnum(YbPayment.FULAMT_OWNPAY_AMT.getLevel()).setAmount(fulamtOwnpayAmt) + .setPayLevelEnum(YbPayment.FULAMT_OWNPAY_AMT.getLevel()).setAmount(fulamtOwnpayAmt.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail14); } // 超限价自费费用 BigDecimal overlmtSelfpay = prePaymentResult.getOverlmtSelfpay(); - if (psnCashPay != null) { + if (overlmtSelfpay != null) { PaymentRecDetail paymentRecDetail15 = new PaymentRecDetail(); paymentRecDetail15.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OVERLMT_SELFPAY.getValue()) - .setPayLevelEnum(YbPayment.OVERLMT_SELFPAY.getLevel()).setAmount(overlmtSelfpay) + .setPayLevelEnum(YbPayment.OVERLMT_SELFPAY.getLevel()).setAmount(overlmtSelfpay.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail15); @@ -1039,32 +1092,41 @@ public class PaymentRecServiceImpl implements IPaymentRecService { // .setResultEnum(PaymentResult.PAID.getValue()).setAccountId(clinicOrder2207Result.getAccountId()); // paymentRecDetails.add(paymentRecDetail16); BigDecimal preselfpayAmt = prePaymentResult.getPreselfpayAmt(); - if (psnCashPay != null) { + if (preselfpayAmt != null) { PaymentRecDetail paymentRecDetail17 = new PaymentRecDetail(); paymentRecDetail17.setReconciliationId(payment.getId()).setPayEnum(YbPayment.PRESELFPAY_AMT.getValue()) - .setPayLevelEnum(YbPayment.PRESELFPAY_AMT.getLevel()).setAmount(preselfpayAmt) + .setPayLevelEnum(YbPayment.PRESELFPAY_AMT.getLevel()).setAmount(preselfpayAmt.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail17); } BigDecimal inscpScpAmt = prePaymentResult.getInscpScpAmt(); - if (psnCashPay != null) { + if (inscpScpAmt != null) { PaymentRecDetail paymentRecDetail18 = new PaymentRecDetail(); paymentRecDetail18.setReconciliationId(payment.getId()).setPayEnum(YbPayment.INSCP_SCP_AMT.getValue()) - .setPayLevelEnum(YbPayment.INSCP_SCP_AMT.getLevel()).setAmount(inscpScpAmt) + .setPayLevelEnum(YbPayment.INSCP_SCP_AMT.getLevel()).setAmount(inscpScpAmt.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail18); } BigDecimal actPayDedc = prePaymentResult.getActPayDedc(); - if (psnCashPay != null) { + if (actPayDedc != null) { PaymentRecDetail paymentRecDetail19 = new PaymentRecDetail(); paymentRecDetail19.setReconciliationId(payment.getId()).setPayEnum(YbPayment.ACT_PAY_DEDC.getValue()) - .setPayLevelEnum(YbPayment.ACT_PAY_DEDC.getLevel()).setAmount(actPayDedc) + .setPayLevelEnum(YbPayment.ACT_PAY_DEDC.getLevel()).setAmount(actPayDedc.setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail19); } + BigDecimal gfRatio = prePaymentResult.getGfRatio(); + if (gfRatio != null && gfRatio.compareTo(BigDecimal.ZERO) > 0) { + PaymentRecDetail paymentRecDetail20 = new PaymentRecDetail(); + paymentRecDetail20.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SCHOOL_GF_PAY.getValue()) + .setPayLevelEnum(YbPayment.SCHOOL_GF_PAY.getLevel()).setAmount(gfRatio.setScale(6,RoundingMode.HALF_UP)) + .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) + .setAccountId(prePaymentResult.getAccountId()); + paymentRecDetails.add(paymentRecDetail20); + } if (prePaymentResult.getSetldetail() != null && !prePaymentResult.getSetldetail().isEmpty()) { PaymentRecDetail paymentRecDetail20; for (Clinic2206FundPaymentResult clinic2206FundPaymentResult : prePaymentResult.getSetldetail()) { @@ -1075,7 +1137,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { } paymentRecDetail20 = new PaymentRecDetail(); paymentRecDetail20.setReconciliationId(payment.getId()).setPayEnum(ybPayment.getValue()) - .setPayLevelEnum(ybPayment.getLevel()).setAmount(clinic2206FundPaymentResult.getFundPayamt()) + .setPayLevelEnum(ybPayment.getLevel()).setAmount(clinic2206FundPaymentResult.getFundPayamt().setScale(6,RoundingMode.HALF_UP)) .setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue()) .setAccountId(prePaymentResult.getAccountId()); paymentRecDetails.add(paymentRecDetail20); @@ -1530,6 +1592,13 @@ public class PaymentRecServiceImpl implements IPaymentRecService { if (patient == null) { throw new ServiceException("未查询到患者信息"); } + + // 挂学生号前需要校验(校医院) + if (outpatientRegistrationAddParam.getAccountFormData().getContractNo() + .contains(CommonConstants.BusinessName.CONTRACT_STUDENT)) { + patientStudentService.checkStatus(patient); + } + // 定义日期时间格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH-mm-ss.SSS+08"); @@ -1579,16 +1648,30 @@ public class PaymentRecServiceImpl implements IPaymentRecService { } } + // 查询挂号信息的医保码等 + HealthcareService healthcareService = + healthcareServiceService.getById(outpatientRegistrationAddParam.getChargeItemFormData().getServiceId()); + if (healthcareService == null) { + throw new ServiceException("未查询到号源信息!"); + } + if (healthcareService.getYbNo() == null) { + throw new ServiceException("该号源未对码或未查询到医保码信息!"); + } + Clinic2206OrderOutput clinic2206OrderResult; if ("1".equals(SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH)) - && !CommonConstants.BusinessName.DEFAULT_CONTRACT_NO - .equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo())) { + && !(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO + .equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo()) + || CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO + .equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo()))) { OutpatientRegistrationModel model = new OutpatientRegistrationModel(); model.setMdtrtCertType(outpatientRegistrationAddParam.getYbMdtrtCertType()); model.setBusiCardInfo(outpatientRegistrationAddParam.getBusiCardInfo()); model.setPsnSetlWay(outpatientRegistrationAddParam.getYbPsnSetlWay()); model.setTotalPrice(outpatientRegistrationAddParam.getChargeItemFormData().getTotalPrice()); model.setContractNo(outpatientRegistrationAddParam.getAccountFormData().getContractNo()); + model.setBusNo(healthcareService.getBusNo()); + model.setYbNo(healthcareService.getYbNo()); // 进入医保挂号及预结算流程 clinic2206OrderResult = ybManager.getPreSettleInfo(model, patient, organization, doctor); } else { @@ -1651,10 +1734,16 @@ public class PaymentRecServiceImpl implements IPaymentRecService { return R.fail(null, "当日已挂号此服务"); } + Contract contract = + contractService.getContract(outpatientRegistrationAddParam.getAccountFormData().getContractNo()); + if (contract == null) { + throw new ServiceException("请选择合适的费用性质"); + } com.openhis.financial.model.PaymentResult paymentResult; if ("1".equals(SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH)) && !CommonConstants.BusinessName.DEFAULT_CONTRACT_NO - .equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo())) { + .equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo()) + && contract.getYbFlag() == 1) { // 医保结算 paymentResult = ybManager.settle( contractService.getContract(outpatientRegistrationAddParam.getAccountFormData().getContractNo()), @@ -1664,7 +1753,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { paymentResult = new com.openhis.financial.model.PaymentResult(); paymentResult.setChrgBchno(chrgBchno).setMedfeeSumamt(chargeItem.getTotalPrice()) .setFulamtOwnpayAmt(chargeItem.getTotalPrice()).setPsnPartAmt(chargeItem.getTotalPrice()) - .setPsnCashPay(chargeItem.getTotalPrice()).setSetlId(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO); + .setPsnCashPay(chargeItem.getTotalPrice()).setSetlId(contract.getBusNo()); } // 生成payment @@ -1698,6 +1787,11 @@ public class PaymentRecServiceImpl implements IPaymentRecService { iEncounterParticipantService.saveEncounterParticipant(encounterParticipant); } // 保存就诊账户信息 + // 1.自费挂号,创建一个自费ACCOUNT + // 2.省医保挂号,创建两个:自费ACCOUNT,省医保ACCOUNT + // 3.市医保挂号,创建两个:自费ACCOUNT,市医保ACCOUNT + // 4.学生公费挂号,创建两个:自费ACCOUNT,学生自费ACCOUNT + // 5.学生医保公费挂号,创建四个:自费ACCOUNT,学生医保ACCOUNT,学生自费ACCOUNT,该学生对应的医保ACCOUNT accountFormData.setEncounterId(encounterId); Account account = new Account(); BeanUtils.copyProperties(accountFormData, account); @@ -1716,6 +1810,33 @@ public class PaymentRecServiceImpl implements IPaymentRecService { : outpatientRegistrationAddParam.getYbMdtrtCertType()); iAccountService.save(accountZf); } + if (!CommonConstants.BusinessName.DEFAULT_CONTRACT_NO + .equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo()) + && !CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO + .equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo()) + && outpatientRegistrationAddParam.getAccountFormData().getContractNo().length() > 11) { + // 建立学生自费ACCOUNT + Account accountStudentZf = new Account(); + BeanUtils.copyProperties(accountFormData, accountStudentZf); + accountStudentZf.setContractNo(CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO).setEncounterFlag(0) + .setTypeCode(outpatientRegistrationAddParam.getYbMdtrtCertType() == null + ? YbMdtrtCertType.MDTRT_CERT_TYPE02.getValue() + : outpatientRegistrationAddParam.getYbMdtrtCertType()); + iAccountService.save(accountStudentZf); + + Contract contractYb = contractService.getContract( + outpatientRegistrationAddParam.getAccountFormData().getContractNo().substring("STUDENT".length())); + if (contractYb != null && 1 == contractYb.getYbFlag()) { + // 建立纯医保ACCOUNT + Account accountYb = new Account(); + BeanUtils.copyProperties(accountFormData, accountYb); + accountYb.setContractNo(contractYb.getBusNo()).setEncounterFlag(0) + .setTypeCode(outpatientRegistrationAddParam.getYbMdtrtCertType() == null + ? YbMdtrtCertType.MDTRT_CERT_TYPE02.getValue() + : outpatientRegistrationAddParam.getYbMdtrtCertType()); + iAccountService.save(accountYb); + } + } // 保存挂号费 chargeItem.setEncounterId(encounterId); chargeItem.setAccountId(accountId); @@ -1756,8 +1877,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService { chargeItemService.updatePaymentStatus(chargeItemIds, ChargeItemStatus.BILLED.getValue()); // 保存付款快照信息 2025/08/08 - // paymentRecStaticService.savePaymentRecStatics(payment.getId(), PaymentType.PAY, null, - // chargeItemService.getChargeItemDefInfoByIds(chargeItemIds)); + paymentRecStaticService.savePaymentRecStatics(payment.getId(), PaymentType.PAY, null, + chargeItemService.getChargeItemDefInfoByIdList(chargeItemIds)); // 生成发票信息 Invoice invoice = new Invoice(); @@ -1804,6 +1925,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { serviceRequest = new ServiceRequest(); serviceRequest.setStatusEnum(RequestStatus.COMPLETED.getValue());// 请求状态,默认已完成 serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setGenerateSourceEnum(GenerateSource.REGISTRATION_REGISTER.getValue()); // 生成来源 serviceRequest.setQuantity(quantity); // 请求数量 serviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 serviceRequest.setCategoryEnum(EncounterClass.AMB.getValue()); // 请求类型,默认-门诊 @@ -1817,7 +1939,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { // 生成账单 chargeItem = new ChargeItem(); - chargeItem.setGenerateSourceEnum(ChargeItemGenerateSource.MEDICAL_ORDER_BINDING.getValue()); + chargeItem.setGenerateSourceEnum(GenerateSource.REGISTRATION_REGISTER.getValue()); // 生成来源 chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 待收费 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); chargeItem.setPatientId(encounter.getPatientId()); // 患者 @@ -1835,9 +1957,9 @@ public class PaymentRecServiceImpl implements IPaymentRecService { chargeItem.setQuantityValue(quantity); // 数量 chargeItem.setQuantityUnit(activityAdviceBaseDto.getUnitCode()); // 单位 chargeItem.setUnitPrice(advicePriceDto.getPrice()); // 单价 - // 计算总价,保留4位小数 + // 计算总价,保留6位小数 BigDecimal qty = quantity; - chargeItem.setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(4, RoundingMode.HALF_UP)); // 总价 + chargeItem.setTotalPrice(qty.multiply(advicePriceDto.getPrice()).setScale(6, RoundingMode.HALF_UP)); // 总价 iChargeItemService.save(chargeItem); chargeItemIdList.add(chargeItem.getId().toString()); @@ -1882,7 +2004,17 @@ public class PaymentRecServiceImpl implements IPaymentRecService { piModel.setMedType(encounterDiagnosis.getMedTypeCode()); piModel.setTotalPrice(chargeItem.getTotalPrice()); piModel.setEncounterId(chargeItem.getEncounterId()); - piModel.setChargeItemId(chargeItem.getId()); + piModel.setServiceId(chargeItem.getServiceId()); + piModel.setServiceTable(chargeItem.getServiceTable()); + piModel.setProductId(chargeItem.getProductId()); + piModel.setProductTable(chargeItem.getProductTable()); + piModel.setEntererId(chargeItem.getEntererId()); + piModel.setRequestingOrgId(chargeItem.getRequestingOrgId()); + piModel.setEnteredDate(chargeItem.getEnteredDate()); + piModel.setQuantityValue(chargeItem.getQuantityValue()); + piModel.setQuantityUnit(chargeItem.getQuantityUnit()); + piModel.setUnitPrice(chargeItem.getUnitPrice()); + piModel.setDefinitionId(chargeItem.getDefinitionId()); return piModel; } @@ -1930,15 +2062,19 @@ public class PaymentRecServiceImpl implements IPaymentRecService { * @return 预结算集合 */ public InpatientPreSettleResultDto inpatientPreSettle(PrePaymentDto prePaymentDto) { + List chargeItemBaseInfoByIds = iChargeItemService.getChargeItemBaseInfoByIds(prePaymentDto.getChargeItemIds()); + Map> chargeItemKVByContractNo = chargeItemBaseInfoByIds.stream().collect(Collectors.groupingBy(ChargeItemBaseInfoDto::getContractNo)); + List yb2303OutputSetInfos = new ArrayList<>(); Yb2303OutputSetInfo yb2303OutputSetInfo; InpatientPreSettleDto inpatientPreSettleDto; for (Map.Entry> stringListEntry : chargeItemKVByContractNo.entrySet()) { if (!CommonConstants.BusinessName.DEFAULT_CONTRACT_NO.equals(stringListEntry.getKey())) { + inpatientPreSettleDto = new InpatientPreSettleDto(); yb2303OutputSetInfo = ybManager.preSettleInpatient(prePaymentDto); BeanUtils.copyProperties(yb2303OutputSetInfo, inpatientPreSettleDto); @@ -1946,14 +2082,17 @@ public class PaymentRecServiceImpl implements IPaymentRecService { yb2303OutputSetInfos.add(inpatientPreSettleDto); } else { + inpatientPreSettleDto = preSettleInpatientBySelf(prePaymentDto.getEncounterId(), stringListEntry.getValue()); yb2303OutputSetInfos.add(inpatientPreSettleDto); + } } // 生成业务参数 paymentDetail - // PS:2025/08/12同李电话沟通确认,住院患者结算常规情况是会生成三个个payment,特殊情况两条payment,所以结算的时候的支付详情一定是和最初预交金的那条payment绑定,且若开始中途结算功能的话必须要按照payment成对出现的规则执行即正 + // PS:2025/08/12同李电话沟通确认,住院患者结算常规情况是会生成三个个payment,特殊情况两条payment,所以结算的时候的支付详情一定是和最初预交金的那条payment绑定,且若开始中途结算功能的话必须要按照payment成对出现的规则执行 + // 三个payment分别对应,预交金,结算金额,预交金和结算金额多退少补的金额 // 生成业务参数payment PaymentReconciliation paymentReconciliation = getPaymentReconciliation(chargeItemBaseInfoByIds); iPaymentReconciliationService.save(paymentReconciliation); @@ -2166,7 +2305,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService { // 保存付款快照信息 2025/08/08 paymentRecStaticService.savePaymentRecStatics(paymentReconciliation.getId(), PaymentType.PAY, null, - chargeItemService.getChargeItemDefInfoByIds(paymentDto.getChargeItemIds())); + chargeItemService.getChargeItemDefInfoByIdList(paymentDto.getChargeItemIds())); // 生成发票信息 Invoice invoice = new Invoice(); @@ -2599,4 +2738,32 @@ public class PaymentRecServiceImpl implements IPaymentRecService { return inpatientPreSettleDto; } + /** + * BPC支付 + * + * @param nenuBpcPayDto bpc支付参数 + * @return 结果 + */ + @Override + public String nenuBpcPay(NenuBpcPayDto nenuBpcPayDto) { + + Practitioner practitioner = practitionerService.getById(SecurityUtils.getLoginUser().getPractitionerId()); + if (practitioner == null || practitioner.getPosNo() == null) { + throw new ServiceException("未配置POS机编号!"); + } + + TransactionResponse transactionResponse = new TransactionResponse() + .setTxnAmt(nenuBpcPayDto.getBpcPayAmount().multiply(new BigDecimal("100")).toString()) + .setPaymentId(nenuBpcPayDto.getPaymentId()).setScanCode(nenuBpcPayDto.getBpcCode()) + .setIndex(nenuBpcPayDto.getIndex()); + + transactionResponseService.save(transactionResponse); + + R r = bankPosCloudAppService.processConsumerScan( + String.valueOf(nenuBpcPayDto.getBpcPayAmount().multiply(new BigDecimal("100"))), + nenuBpcPayDto.getPaymentId() + "IND" + nenuBpcPayDto.getIndex() + "T" + new Date(), + nenuBpcPayDto.getBpcCode(), practitioner.getPosNo()); + + return r.getMsg(); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ThreePartPayServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ThreePartPayServiceImpl.java new file mode 100644 index 00000000..247dd65c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ThreePartPayServiceImpl.java @@ -0,0 +1,226 @@ +package com.openhis.web.paymentmanage.appservice.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.core.common.core.domain.R; +import com.core.common.enums.TenantOptionDict; +import com.core.common.exception.ServiceException; +import com.core.common.utils.SecurityUtils; +import com.core.web.util.TenantOptionUtil; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.domain.ThreePartPayCallBack; +import com.openhis.financial.service.IPaymentRecDetailService; +import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.financial.service.ThreePartPayCallBackService; +import com.openhis.web.paymentmanage.appservice.ThreePartPayService; +import com.openhis.yb.dto.BaseInfo; +import com.openhis.yb.dto.BaseParam; +import com.openhis.yb.dto.PaymentDetailDto; +import com.openhis.yb.dto.ThreePartPayDto; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; + +@Component +@Slf4j +public class ThreePartPayServiceImpl implements ThreePartPayService { + + @Autowired + private IPractitionerService practitionerService; + @Autowired + private IPaymentRecDetailService paymentRecDetailService; + @Autowired + private IPaymentReconciliationService paymentReconciliationService; + @Autowired + private ThreePartPayCallBackService threePartPayCallBackService; + @Autowired + private ThreePartSimpleFieldMappingService threePartSimpleFieldMappingService; + + + @Override + public R payFor(ThreePartPayDto threePartPayDto) { + String threePartUrl = TenantOptionUtil.getOptionContent(TenantOptionDict.THREE_PART_PAY_URL); + //String threePartUrl = "http://127.0.0.1:19994/?MSG=EXEC&yylx=02&posjh=&posygh=&jylx=00&je={je}&yjyrq=&yjyckh=&ypzh=&lrcjy=&cm={cm}&ysddh=&erpddh=&body="; + String threePartParam = TenantOptionUtil.getOptionContent(TenantOptionDict.THREE_PART_PARAM); + JSONObject jsonObject = JSON.parseObject(threePartParam); + + //订单号及订单信息 + Long paymentId = threePartPayDto.getId(); + PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentId); + + //金额处理 + BigDecimal amount = BigDecimal.ZERO; + for (PaymentDetailDto paymentDetail : threePartPayDto.getPaymentDetails()) { + if(threePartPayDto.getIndex().equals(paymentDetail.getPayEnum())){ + amount = paymentDetail.getAmount(); + } + } + amount = amount.multiply(new BigDecimal("100")); + String amountResult = String.format("%010d", Integer.parseInt(amount.toString())); + + //款员信息查询 + Practitioner practitioner = practitionerService.getPractitionerByUserId(SecurityUtils.getLoginUser().getUserId()); + + //获取支付码 + String txtCode = threePartPayDto.getTxtCode(); + + //获取参数 + Map paramMap = this.getParamMap(jsonObject, practitioner, null, paymentReconciliation, amountResult, txtCode); + + //获取完整url + String url = renderTemplateSafe(threePartUrl, paramMap); + + String result = httpGet(url); + + String threePartMapping = threePartSimpleFieldMappingService.reverseMap("threePartMapping", result); + + threePartPayCallBackService.save(JSON.parseObject(threePartMapping,ThreePartPayCallBack.class)); + + return R.ok(); + } + + + /** + * 拼接参数 + * @param jsonObject 配置信息 + * @param practitioner 款员信息 + * @param threePartPayCallBack 原订单 + * @param amountResult 金额 + * @param txtCode 支付码 + * @return + */ + private Map getParamMap(JSONObject jsonObject,Practitioner practitioner, ThreePartPayCallBack threePartPayCallBack,PaymentReconciliation paymentReconciliation,String amountResult,String txtCode){ + Map paramMap = new HashMap<>(); + + //款员信息 + if(practitioner!=null){ + String posNoKey = jsonObject.getString("posNo");//pos机编码 + if(posNoKey!=null){ + paramMap.put(posNoKey,practitioner.getPosNo()); + } + String userIdKey = jsonObject.getString("userId"); + if(userIdKey!=null){ + paramMap.put(userIdKey,practitioner.getId().toString()); + } + String userNameKey = jsonObject.getString("userName"); + if(userNameKey!=null){ + paramMap.put(userNameKey,practitioner.getName()); + } + } + + //原账单信息 + if(threePartPayCallBack!=null){ + String bankOrderIdKey = jsonObject.getString("bankOrderId"); + if(bankOrderIdKey!=null){ + paramMap.put(bankOrderIdKey,threePartPayCallBack.getTradeNo());//银行订单号 + } + String payWayOrderIdKey = jsonObject.getString("payWayOrderId"); + if(payWayOrderIdKey!=null){ + paramMap.put(payWayOrderIdKey,threePartPayCallBack.getTransNo());//支付渠道订单号 + } + String tranTypeKey = jsonObject.getString("tranType"); + if(tranTypeKey!=null){ + paramMap.put(tranTypeKey,threePartPayCallBack.getTranType());//交易类型 + } + String payTypeKey = jsonObject.getString("payType"); + if(payTypeKey!=null){ + paramMap.put(payTypeKey,threePartPayCallBack.getPayType());//支付方式 + } + String traceNoKey = jsonObject.getString("traceNo"); + if(payWayOrderIdKey!=null){ + paramMap.put(traceNoKey,threePartPayCallBack.getTraceNo());//终端流水号 + } + String txnTimeKey = jsonObject.getString("txnTime"); + if(payWayOrderIdKey!=null){ + paramMap.put(txnTimeKey,threePartPayCallBack.getTxnTime());//交易时间 + } + String merTradeNoKey = jsonObject.getString("merTradeNo"); + if(payWayOrderIdKey!=null){ + paramMap.put(merTradeNoKey,threePartPayCallBack.getMerTradeNo());//商户系统订单号 + } + } + + if(paymentReconciliation!=null){ + String paymentIdKey = jsonObject.getString("paymentId"); + if(paymentIdKey!=null){ + paramMap.put(paymentIdKey,paymentReconciliation.getId().toString());//his系统订单号 + } + } + + String amountResultKey = jsonObject.getString("amountResult"); + String txtCodeKey = jsonObject.getString("txtCode"); + + if(amountResult!=null){ + paramMap.put(amountResultKey,amountResult);//金额 + } + if(txtCode!=null){ + paramMap.put(txtCodeKey,txtCode);//扫码 + } + return paramMap; + } + /** + * 安全替换,避免空指针 + */ + private String renderTemplateSafe(String template, Map params) { + if (template == null) return ""; + if (params == null) params = new HashMap<>(); + + String result = template; + for (Map.Entry entry : params.entrySet()) { + String placeholder = "{" + entry.getKey() + "}"; + String value = entry.getValue() != null ? entry.getValue().toString() : ""; + // 使用 replace 而不是 replaceAll,避免正则表达式特殊字符问题 + result = result.replace(placeholder, value); + } + + return result; + } + + /** + * 发送http请求(2025/05/02经测试,若以自带的工具类发送请求失败,故使用原peis系统中成功调用的写法重新封装) + * + * @param url 路径 + * @return + */ + private String httpGet(String url) { + String resultString = ""; + // 创建Http请求(2025/10/13 师大会超时故此由30000-》60000) + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(90000).setConnectionRequestTimeout(90000) + .setSocketTimeout(90000).build(); + CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build(); + CloseableHttpResponse response = null; + // 发送请求 + try { + HttpGet httpGet = new HttpGet(url); + // 执行http请求 + response = httpClient.execute(httpGet); + resultString = EntityUtils.toString(response.getEntity(), "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("Http请求异常,请稍后再试。"); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultString; + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ThreePartSimpleFieldMappingService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ThreePartSimpleFieldMappingService.java new file mode 100644 index 00000000..cec86af2 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/appservice/impl/ThreePartSimpleFieldMappingService.java @@ -0,0 +1,121 @@ +package com.openhis.web.paymentmanage.appservice.impl; + + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.openhis.web.paymentmanage.util.ReverseMappingProperties; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + + +@Service +@ConfigurationProperties(prefix = "threepart.mapping") +@Data +@Slf4j +public class ThreePartSimpleFieldMappingService { + + + @Autowired + private ReverseMappingProperties properties; + + private final ObjectMapper objectMapper = new ObjectMapper(); + + /** + * 执行反向映射:三方JSON -> 我方JSON + */ + public String reverseMap(String businessType, String sourceJson) { + try { + // 1. 获取映射配置 + Map mappingConfig = properties.getMappingConfig(businessType); + if (mappingConfig.isEmpty()) { + log.warn("未找到业务类型[{}]的映射配置", businessType); + return sourceJson; // 返回原JSON + } + + // 2. 解析源JSON + Map sourceMap; + sourceMap = objectMapper.readValue(sourceJson, new TypeReference>(){}); + + // 3. 执行反向映射 + Map resultMap = reverseMap(mappingConfig, sourceMap); + + // 4. 生成结果JSON + return objectMapper.writeValueAsString(resultMap); + + } catch (Exception e) { + log.error("反向映射失败,业务类型: {}, JSON: {}", businessType, sourceJson, e); + throw new RuntimeException("反向映射失败", e); + } + } + + /** + * 执行反向映射:Map版本 + */ + public Map reverseMap(String businessType, Map sourceMap) { + Map mappingConfig = properties.getMappingConfig(businessType); + return reverseMap(mappingConfig, sourceMap); + } + + /** + * 核心映射逻辑 + */ + private Map reverseMap(Map mappingConfig, + Map sourceMap) { + Map resultMap = new HashMap<>(); + + for (Map.Entry entry : sourceMap.entrySet()) { + String sourceField = entry.getKey(); + Object value = entry.getValue(); + + // 查找映射关系 + String targetField = mappingConfig.get(sourceField); + + if (targetField != null) { + // 执行映射 + resultMap.put(targetField, value); + } else { + // 未配置映射的字段,可以选择保留或忽略 + // resultMap.put(sourceField, value); // 取消注释则保留未映射字段 + log.debug("字段[{}]未配置映射,已忽略", sourceField); + } + } + + log.debug("反向映射完成: {} -> {}", sourceMap.keySet(), resultMap.keySet()); + return resultMap; + } + + /** + * 批量处理 + */ + public List> reverseMapBatch(String businessType, + List> sourceList) { + return sourceList.stream() + .map(source -> reverseMap(businessType, source)) + .collect(Collectors.toList()); + } + + /** + * 检查字段是否已配置映射 + */ + public boolean isFieldMapped(String businessType, String fieldName) { + Map mappingConfig = properties.getMappingConfig(businessType); + return mappingConfig.containsKey(fieldName); + } + + /** + * 获取所有已配置的映射字段 + */ + public Set getMappedFields(String businessType) { + Map mappingConfig = properties.getMappingConfig(businessType); + return mappingConfig.keySet(); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java index f6f2f2fe..7e1f272a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ChargeBillController.java @@ -29,8 +29,8 @@ public class ChargeBillController { * * @param paymentId 付款实体 */ - @PostMapping("/getDetail") - public R getDetail(Long paymentId) { + @GetMapping("/getDetail") + public R getDetail(@RequestParam("paymentId") Long paymentId) { return R.ok(iChargeBillService.getDetail(paymentId)); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/PaymentReconciliationController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/PaymentReconciliationController.java index b77ea789..eee110f0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/PaymentReconciliationController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/PaymentReconciliationController.java @@ -3,19 +3,18 @@ */ package com.openhis.web.paymentmanage.controller; -import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; -import com.core.common.utils.SecurityUtils; -import com.openhis.web.paymentmanage.dto.CancelPaymentInpatientDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; +import com.core.common.enums.TenantOptionDict; +import com.core.web.util.TenantOptionUtil; import com.openhis.financial.domain.PaymentReconciliation; import com.openhis.web.chargemanage.dto.OutpatientRegistrationAddParam; import com.openhis.web.chargemanage.dto.OutpatientRegistrationSettleParam; @@ -23,6 +22,8 @@ import com.openhis.web.paymentmanage.appservice.IChargeBillService; import com.openhis.web.paymentmanage.appservice.IEleInvoiceService; import com.openhis.web.paymentmanage.appservice.IPaymentRecService; import com.openhis.web.paymentmanage.dto.CancelPaymentDto; +import com.openhis.web.paymentmanage.dto.CancelPaymentInpatientDto; +import com.openhis.web.paymentmanage.dto.NenuBpcPayDto; import com.openhis.yb.dto.PaymentDto; import com.openhis.yb.dto.PaymentInpatientDto; import com.openhis.yb.dto.PrePaymentDto; @@ -63,7 +64,7 @@ public class PaymentReconciliationController { /** * 取消预付款(该接口未被调用) - * + * * @param encounterId 就诊id * @return 操作结果 */ @@ -86,10 +87,10 @@ public class PaymentReconciliationController { if (PaymentReconciliation.class.isAssignableFrom(result.getData().getClass())) { paymentRecon = (PaymentReconciliation)result.getData(); } - Map detail=iChargeBillService.getDetail(paymentRecon.getId()); - if("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) { + Map detail = iChargeBillService.getDetail(paymentRecon.getId()); + if ("0".equals(TenantOptionUtil.getOptionContent(TenantOptionDict.INVOICE_SWITCH))) { return R.ok(detail); - }else { + } else { R eleResult = eleInvoiceService.invoiceMZMake(paymentRecon.getId(), paymentDto.getEncounterId()); if (eleResult.getCode() != 200) { // 因收费成功前端需要关闭弹窗,此处信息仅用于提示所以返回ok @@ -116,9 +117,11 @@ public class PaymentReconciliationController { if (PaymentReconciliation.class.isAssignableFrom(result.getData().getClass())) { paymentRecon = (PaymentReconciliation)result.getData(); } - if(!"0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) { + if ("0".equals(TenantOptionUtil.getOptionContent(TenantOptionDict.INVOICE_SWITCH))) { + return result; + } else { R eleResult = - eleInvoiceService.invoiceWriteoff(paymentRecon.getRelationId(), cancelPaymentDto.getReason()); + eleInvoiceService.invoiceWriteoff(paymentRecon.getRelationId(), cancelPaymentDto.getReason()); if (eleResult.getCode() != 200) { // 因取消付款成功前端需要关闭弹窗,此处信息仅用于提示所以返回ok return R.ok(null, " 取消付款成功,电子发票开具失败 :" + eleResult.getMsg()); @@ -144,7 +147,7 @@ public class PaymentReconciliationController { @RequestParam(value = "invoiceNo", defaultValue = "") String invoiceNo, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return R.ok(paymentReconciliationService.getPage(searchKey, kinsEnum, invoiceNo,pageNo, pageSize, request)); + return R.ok(paymentReconciliationService.getPage(searchKey, kinsEnum, invoiceNo, pageNo, pageSize, request)); } /** @@ -176,9 +179,15 @@ public class PaymentReconciliationController { * @return 操做结果 */ @PostMapping("/reg-pay") +<<<<<<< HEAD public R regPay(@Valid @RequestBody OutpatientRegistrationSettleParam outpatientRegistrationSettleParam) { R result = paymentReconciliationService.regPay(outpatientRegistrationSettleParam, outpatientRegistrationSettleParam.getChrgBchno(), outpatientRegistrationSettleParam.getPaymentDetails()); +======= + public R regPay(@Valid @RequestBody OutpatientRegistrationSettleParam outpatientRegistrationAddParam) { + R result = paymentReconciliationService.regPay(outpatientRegistrationAddParam, + outpatientRegistrationAddParam.getChrgBchno(), outpatientRegistrationAddParam.getPaymentDetails()); +>>>>>>> upstream/develop // 付款成功后,开具发票 if (result.getCode() == 200) { PaymentReconciliation paymentRecon = null; @@ -187,9 +196,9 @@ public class PaymentReconciliationController { } Map detail = iChargeBillService.getDetail(paymentRecon.getId()); Long encounterId = paymentRecon.getEncounterId(); - if("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) { + if ("0".equals(TenantOptionUtil.getOptionContent(TenantOptionDict.INVOICE_SWITCH))) { return R.ok(detail); - }else { + } else { R eleResult = eleInvoiceService.invoiceRegMake(paymentRecon.getId(), encounterId); if (eleResult.getCode() != 200) { // 因收费成功前端需要关闭弹窗,此处信息仅用于提示所以返回ok @@ -236,7 +245,7 @@ public class PaymentReconciliationController { } return R.ok(detail); } - return R.ok(); + return R.ok("收费未成功,请确认实际收款情况"); } /** @@ -254,13 +263,24 @@ public class PaymentReconciliationController { if (PaymentReconciliation.class.isAssignableFrom(r.getData().getClass())) { paymentRecon = (PaymentReconciliation)r.getData(); } - R eleResult = eleInvoiceService.invoiceWriteoff(paymentRecon.getRelationId(), cancelPaymentInpatientDto.getReason()); + R eleResult = + eleInvoiceService.invoiceWriteoff(paymentRecon.getRelationId(), cancelPaymentInpatientDto.getReason()); if (eleResult.getCode() != 200) { // 因取消付款成功前端需要关闭弹窗,此处信息仅用于提示所以返回ok return R.ok(null, " 取消付款成功,电子发票开具失败 :" + eleResult.getMsg()); } } - return R.ok(); + return R.ok("取消结算失败,请确认"); } + /** + * 师大bpc支付 + * + * @param nenuBpcPayDto 付款参数 + * @return 操作结果 + */ + @PostMapping("/nenu-bpc-pay") + public R nenuBpcPay(@RequestBody NenuBpcPayDto nenuBpcPayDto) { + return R.ok(paymentReconciliationService.nenuBpcPay(nenuBpcPayDto)); + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ThreePartPayController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ThreePartPayController.java new file mode 100644 index 00000000..8ac70a1f --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/controller/ThreePartPayController.java @@ -0,0 +1,59 @@ +package com.openhis.web.paymentmanage.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.core.common.core.domain.R; +import com.core.common.enums.TenantOptionDict; +import com.core.common.utils.SecurityUtils; +import com.core.web.util.TenantOptionUtil; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.administration.service.impl.PractitionerServiceImpl; +import com.openhis.financial.domain.PaymentRecDetail; +import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.service.IPaymentRecDetailService; +import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.web.paymentmanage.appservice.ThreePartPayService; +import com.openhis.yb.dto.PaymentDetailDto; +import com.openhis.yb.dto.PaymentDto; +import com.openhis.yb.dto.ThreePartPayDto; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +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 java.math.BigDecimal; +import java.security.Security; +import java.util.HashMap; +import java.util.Map; + +/** + * 第三方支付管理 + * + * @author SunJQ + * @date 2025-03-29 + */ +@RestController +@RequestMapping("/three-part/pay") +@Slf4j +@AllArgsConstructor +public class ThreePartPayController { + + @Autowired + private ThreePartPayService threePartPayService; + + /** + * 扫码付款 + * @return + */ + @PostMapping("/pay-for") + public R payFor(@RequestBody ThreePartPayDto threePartPayDto){ + return threePartPayService.payFor(threePartPayDto); + } + + + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChangePriceListDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChangePriceListDto.java new file mode 100644 index 00000000..cdd5a4e6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/ChangePriceListDto.java @@ -0,0 +1,83 @@ +package com.openhis.web.paymentmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @ClassName ChangePriceListDto + * @Description 药品调价dto + * @Author raymond + * @Date 2025/10/15 14:09 + * @Version 1.0 + **/ +@Data +@Accessors(chain = true) +public class ChangePriceListDto { + /** + * 药品ID + */ + private Long medicationId; + /** + * 药品编号 + */ + private Long busNo; + /** + * 供应商ID + */ + private Long supplyId; + /** + * 供应商名字 + */ + private String supplyName; + /** + * 药品规格 + */ + private String totalVolume; + /** + * 当前价格 + */ + private BigDecimal curPrice; + /** + * 调整后价格 + */ + private BigDecimal retailPrice; + /** + * 调价描述 + */ + private String description; + /** + * 调整时间 + */ + private Date retailTime; + /** + * 药品名称 + */ + private String name; + /** + * 药品英文名 + */ + private String nameEn; + /** + * 拼音 + */ + private String pyStr; + /** + * 五笔 + */ + private String wbStr; + /** + * 商品名 + */ + private String merchandiseName; + /** + * 商品名拼音 + */ + private String merchandisePyStr; + /** + * 商品名五笔 + */ + private String merchandiseWbStr; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/InvoiceBaseInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/InvoiceBaseInfoDto.java index e2265fce..3ee5c411 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/InvoiceBaseInfoDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/InvoiceBaseInfoDto.java @@ -3,15 +3,16 @@ */ package com.openhis.web.paymentmanage.dto; +import java.math.BigDecimal; +import java.util.Date; + import com.alibaba.fastjson2.annotation.JSONField; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; + import lombok.Data; import lombok.experimental.Accessors; -import java.math.BigDecimal; -import java.util.Date; - /** * 电子发票基础信息查询实体 * @@ -21,12 +22,12 @@ import java.util.Date; @Data @Accessors(chain = true) public class InvoiceBaseInfoDto { - //主键 + // 主键 @TableId(type = IdType.ASSIGN_ID) - @JSONField(serialize=false) + @JSONField(serialize = false) private String id; - private String setlId;//结算id + private String setlId;// 结算id private String mdtrtId; // 就诊ID @@ -100,5 +101,7 @@ public class InvoiceBaseInfoDto { private BigDecimal hifdmPay; // 伤残人员医疗保障基金支出 - private String paymentNo;//结算业务流水号 Payment与ClinicSettle是1:N + private String paymentNo;// 结算业务流水号 Payment与ClinicSettle是1:N + + private BigDecimal gfRatio; // 伤残人员医疗保障基金支出 } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/NenuBpcPayDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/NenuBpcPayDto.java new file mode 100644 index 00000000..f1fe3995 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/NenuBpcPayDto.java @@ -0,0 +1,37 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.paymentmanage.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 师大Bpc支付入参 + * + * @author SunJQ + * @date 2025-10-28 + */ +@Data +@Accessors(chain = true) +public class NenuBpcPayDto { + /** + * 二维码 + */ + private String bpcCode; + /** + * 金额 + */ + private BigDecimal bpcPayAmount; + /** + * 付款id + */ + private Long paymentId; + + /** + * 序号 + */ + private Long index; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentVO.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentVO.java index 70c9a1cc..1a1fabfe 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentVO.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/dto/PaymentVO.java @@ -3,15 +3,14 @@ */ package com.openhis.web.paymentmanage.dto; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; +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.openhis.common.annotation.Dict; -import lombok.Data; -import java.math.BigDecimal; -import java.util.Date; +import lombok.Data; /** * 映射对象 @@ -24,19 +23,19 @@ public class PaymentVO { /** ID */ @JsonSerialize(using = ToStringSerializer.class) - private Long id;//付款id + private Long id;// 付款id /** 状态 */ @Dict(dictCode = "payment_status") private Integer statusEnum; - private String statusEnum_dictText;//状态 + private String statusEnum_dictText;// 状态 /** 支付的业务标识符 */ - private String paymentNo;//业务流水 + private String paymentNo;// 业务流水 /** 付费/退款 */ @Dict(dictCode = "payment_enum") - private String paymentEnum;//付费/退款 + private String paymentEnum;// 付费/退款 private String paymentEnum_dictText; /** 关联ID */ @@ -44,53 +43,55 @@ public class PaymentVO { private String relationIdStr; /** 收款员 */ - private Long entererId;//收款员 + private Long entererId;// 收款员 /** 收款员 */ - private String entererName;//收款员 + private String entererName;// 收款员 /** 支付的患者ID */ - private Long patientId;//支付患者 + private Long patientId;// 支付患者 /** 支付的患者 */ - private String patientName;//支付患者 + private String patientName;// 支付患者 /** 付款结果 */ @Dict(dictCode = "outcome_enum") - private Integer outcomeEnum;//付款结果 + private Integer outcomeEnum;// 付款结果 private String outcomeEnum_dictText; /** 应收金额 */ - private BigDecimal tenderedAmount;//应收 + private BigDecimal tenderedAmount;// 应收 /** 找零金额 */ - private BigDecimal returnedAmount;//找零 + private BigDecimal returnedAmount;// 找零 /** 付款总额 */ - private BigDecimal displayAmount;//付款总额 + private BigDecimal displayAmount;// 付款总额 /** 打印标识 */ - private Integer printCount;//打印标志 + private Integer printCount;// 打印标志 /** 结算时间 */ - private Date billDate;//结算时间 + private Date billDate;// 结算时间 /** 发票编号 */ @JsonSerialize(using = ToStringSerializer.class) - private Long invoiceId;//发票id + private Long invoiceId;// 发票id /** 发票no */ - private String invoiceNo;//发票no + private String invoiceNo;// 发票no /** 发票no */ - private String encounterBusNo;//发票no + private String encounterBusNo;// 发票no @JsonSerialize(using = ToStringSerializer.class) - private Long encounterId;//就诊id - private String encounterIdStr;//就诊id + private Long encounterId;// 就诊id + private String encounterIdStr;// 就诊id @JsonSerialize(using = ToStringSerializer.class) - private String paymentId;//付款id + private String paymentId;// 付款id - private String ybSettleIds;//医保付款id + private String ybSettleIds;// 医保付款id + + private Integer invoiceStatus;// 发票状态 } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/ChangePriceMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/ChangePriceMapper.java new file mode 100644 index 00000000..7a66d53f --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/mapper/ChangePriceMapper.java @@ -0,0 +1,20 @@ +package com.openhis.web.paymentmanage.mapper; + +import com.openhis.medication.domain.MedicationDefinition; +import com.openhis.web.paymentmanage.dto.ChangePriceListDto; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Desc: + * @Author raymond + * @Date 14:37 2025/10/15 + * @return + **/ +@Component +public interface ChangePriceMapper { + + List searchMedicationList(); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/util/ReverseMappingProperties.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/util/ReverseMappingProperties.java new file mode 100644 index 00000000..bcc2f051 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/paymentmanage/util/ReverseMappingProperties.java @@ -0,0 +1,30 @@ +package com.openhis.web.paymentmanage.util; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +@ConfigurationProperties(prefix = "threepaymapping") +@Data +public class ReverseMappingProperties { + + private Map> reverseMappings = new HashMap<>(); + + /** + * 获取特定业务类型的映射配置 + */ + public Map getMappingConfig(String businessType) { + return reverseMappings.getOrDefault(businessType, new HashMap<>()); + } + + /** + * 获取所有映射配置 + */ + public Map> getAllMappings() { + return reverseMappings; + } +} \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java index 469c7211..b43238e9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/ActivityDeviceAppServiceImpl.java @@ -100,8 +100,6 @@ public class ActivityDeviceAppServiceImpl implements IActivityDeviceAppService { @Override public R getDevicePage(DeviceManageSelParam deviceManageSelParam, String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { - // 只查询单次消耗类耗材 - deviceManageSelParam.setCategoryCode(CommonConstants.BusinessName.SINGLE_CONSUMPTION); return deviceManageAppService.getDevicePage(deviceManageSelParam, searchKey, pageNo, pageSize, request); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java index 1db5df36..b95c860b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java @@ -92,6 +92,12 @@ public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppS ordersGroupPackageDetail.setOrderDefinitionTable(ordersGroupPackageDetailSaveDto.getOrderDefinitionTable());// 医嘱定义表名 ordersGroupPackageDetail.setQuantity(ordersGroupPackageDetailSaveDto.getQuantity()); // 数量 ordersGroupPackageDetail.setUnitCode(ordersGroupPackageDetailSaveDto.getUnitCode()); // 单位 + ordersGroupPackageDetail.setDose(ordersGroupPackageDetailSaveDto.getDose()); // 单次剂量 + ordersGroupPackageDetail.setRateCode(ordersGroupPackageDetailSaveDto.getRateCode()); // 用药频次 + ordersGroupPackageDetail.setDispensePerDuration(ordersGroupPackageDetailSaveDto.getDispensePerDuration()); // 用药天数 + ordersGroupPackageDetail.setMethodCode(ordersGroupPackageDetailSaveDto.getMethodCode()); // 给药途径 + ordersGroupPackageDetail.setDoseQuantity(ordersGroupPackageDetailSaveDto.getDoseQuantity()); // 小单位单次剂量 + ordersGroupPackageDetail.setGroupId(ordersGroupPackageDetailSaveDto.getGroupId()); // 组号 ordersGroupPackageDetailService.save(ordersGroupPackageDetail); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailQueryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailQueryDto.java index db2c9f15..0a49e1ff 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailQueryDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailQueryDto.java @@ -53,6 +53,27 @@ public class OrdersGroupPackageDetailQueryDto { private String unitCode_dictText; private String unitCodeName; + /** 单次剂量 */ + private BigDecimal dose; + + /** 用药频次 */ + @Dict(dictCode = "rate_code") + private String rateCode; + private String rateCode_dictText; + + /** 用药天数 */ + private Integer dispensePerDuration; + + /** 给药途径 */ + @Dict(dictCode = "method_code") + private String methodCode; + private String methodCode_dictText; + + /** + * 小单位单次剂量 + */ + private BigDecimal doseQuantity; + /** * 医嘱名称 */ @@ -63,4 +84,10 @@ public class OrdersGroupPackageDetailQueryDto { */ private AdviceBaseDto orderDetailInfos; + /** + * 组号 + */ + private Long groupId; + + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailSaveDto.java index e53c1559..1f8ea403 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailSaveDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDetailSaveDto.java @@ -42,4 +42,26 @@ public class OrdersGroupPackageDetailSaveDto { */ private String unitCode; + /** 单次剂量 */ + private BigDecimal dose; + + /** 用药频次 */ + private String rateCode; + + /** 用药天数 */ + private Integer dispensePerDuration; + + /** 给药途径 */ + private String methodCode; + + /** + * 小单位单次剂量 + */ + private BigDecimal doseQuantity; + + /** + * 组号 + */ + private Long groupId; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDto.java index 26f9b22b..0cf63895 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageDto.java @@ -8,6 +8,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; @@ -21,6 +22,13 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class OrdersGroupPackageDto { + /** + * 用于搭配Dict切面,无实际业务意义 + */ + @Dict(dictCode = "test_field") + private String testField; + private String testField_dictText; + /** * 组合套餐id */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageUseDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageUseDto.java index 82385a0f..82ac8a8e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageUseDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/dto/OrdersGroupPackageUseDto.java @@ -5,6 +5,7 @@ package com.openhis.web.personalization.dto; import java.util.List; +import com.openhis.common.annotation.Dict; import lombok.Data; import lombok.experimental.Accessors; @@ -18,6 +19,13 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class OrdersGroupPackageUseDto { + /** + * 用于搭配Dict切面,无实际业务意义 + */ + @Dict(dictCode = "test_field") + private String testField; + private String testField_dictText; + /** * 个人组套 */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryDispensingOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryDispensingOrderServiceImpl.java index caab158f..3f7ec952 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryDispensingOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryDispensingOrderServiceImpl.java @@ -1,39 +1,28 @@ package com.openhis.web.pharmacyDispensarymanage.appservice.impl; -import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.stream.Collectors; import javax.annotation.Resource; -import com.openhis.medication.domain.MedicationDispense; -import com.openhis.medication.domain.MedicationRequest; -import com.openhis.medication.service.IMedicationDispenseService; -import com.openhis.medication.service.IMedicationRequestService; -import com.openhis.workflow.domain.SupplyDelivery; -import com.openhis.workflow.service.ISupplyDeliveryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; -import com.core.common.utils.DateUtils; -import com.core.common.utils.MessageUtils; import com.openhis.common.constant.CommonConstants; -import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; -import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryCommonService; import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryDispensingOrderService; import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto; import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto; import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper; import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryDispensingOrderMapper; +import com.openhis.workflow.domain.SupplyDelivery; import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.service.ISupplyDeliveryService; import com.openhis.workflow.service.ISupplyRequestService; /** @@ -71,15 +60,15 @@ public class PharmacyDispensaryDispensingOrderServiceImpl implements IPharmacyDi // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption - .add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getValue(), - SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getInfo())); - supplyCategoryOption - .add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_DISPENSING.getValue(), - SupplyCategory.INPATIENT_PATIENT_DISPENSING.getInfo())); - supplyCategoryOption.add( - new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue(), - SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getInfo())); + // supplyCategoryOption + // .add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getValue(), + // SupplyCategory.OUTPATIENT_PATIENT_DISPENSING.getInfo())); + // supplyCategoryOption + // .add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_DISPENSING.getValue(), + // SupplyCategory.INPATIENT_PATIENT_DISPENSING.getInfo())); + // supplyCategoryOption.add( + // new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue(), + // SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -148,9 +137,8 @@ public class PharmacyDispensaryDispensingOrderServiceImpl implements IPharmacyDi .setStatusEnum(SupplyStatus.AGREE.getValue()).setCategoryEnum(item.getCategoryEnum()) .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) - .setLotNumber(item.getLotNumber()) - .setSourceTypeEnum(LocationForm.PHARMACY.getValue()).setSourceLocationId(item.getSourceLocationId()) - .setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) + .setLotNumber(item.getLotNumber()).setSourceTypeEnum(LocationForm.PHARMACY.getValue()) + .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue()) .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) .setApplyTime(item.getApplyTime()).setApproverId(item.getApproverId()) .setApprovalTime(item.getApprovalTime()); @@ -161,9 +149,9 @@ public class PharmacyDispensaryDispensingOrderServiceImpl implements IPharmacyDi .setItemTable(supplyRequest.getItemTable()).setItemId(supplyRequest.getItemId()) .setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE).setBasedOnIds(item.getDispenseIds()) .setUnitCode(supplyRequest.getUnitCode()).setQuantity(supplyRequest.getItemQuantity()) - .setLotNumber(supplyRequest.getLotNumber()) - .setPractitionerId(supplyRequest.getApplicantId()).setOccurrenceTime(supplyRequest.getApprovalTime()) - .setReceiverId(supplyRequest.getPurposeLocationId()).setReceiveTime(supplyRequest.getApprovalTime()); + .setLotNumber(supplyRequest.getLotNumber()).setPractitionerId(supplyRequest.getApplicantId()) + .setOccurrenceTime(supplyRequest.getApprovalTime()).setReceiverId(supplyRequest.getPurposeLocationId()) + .setReceiveTime(supplyRequest.getApprovalTime()); supplyDeliveryList.add(supplyDelivery); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryProfitLossOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryProfitLossOrderServiceImpl.java index 296d6020..12a0c6bb 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryProfitLossOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryProfitLossOrderServiceImpl.java @@ -25,7 +25,6 @@ import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryPr import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto; import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto; import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper; -import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryProfitLossOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -47,6 +46,7 @@ public class PharmacyDispensaryProfitLossOrderServiceImpl implements IPharmacyDi private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; @Autowired private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + /** * 初始化 * @@ -59,16 +59,21 @@ public class PharmacyDispensaryProfitLossOrderServiceImpl implements IPharmacyDi // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), - SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), - SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.STANDBY_RESCUE_MEDICINES.getValue(), - SupplyCategory.STANDBY_RESCUE_MEDICINES.getInfo())); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getValue(), - SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getInfo())); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.DONATED_MEDICINES.getValue(), - SupplyCategory.DONATED_MEDICINES.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), + // SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), + // SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.STANDBY_RESCUE_MEDICINES.getValue(), + // SupplyCategory.STANDBY_RESCUE_MEDICINES.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getValue(), + // SupplyCategory.DAMAGED_EXPIRED_MEDICINES.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.DONATED_MEDICINES.getValue(), + // SupplyCategory.DONATED_MEDICINES.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -101,16 +106,14 @@ public class PharmacyDispensaryProfitLossOrderServiceImpl implements IPharmacyDi List unitList; for (PharmacyDispensaryDetailDto item : profitLossOrderDtoDetailPage.getRecords()) { unitList = new ArrayList<>(); - unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText())); - unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText() - )); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); item.setUnitList(unitList); } return R.ok(profitLossOrderDtoDetailPage); } - /** * 获取单据号 * @@ -136,7 +139,8 @@ public class PharmacyDispensaryProfitLossOrderServiceImpl implements IPharmacyDi @Override public R addOrEditProfitLossOrder(List profitLossOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(profitLossOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(profitLossOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); @@ -147,19 +151,18 @@ public class PharmacyDispensaryProfitLossOrderServiceImpl implements IPharmacyDi List supplyRequestList = new ArrayList<>(); Date applyTime = DateUtils.getNowDate(); for (PharmacyDispensaryDetailDto item : profitLossOrderDtoList) { - SupplyRequest supplyRequest = - new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.PURCHASE_PRPFITLOSS.getValue()) - .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) - .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) - .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setPrice(item.getPrice()) - .setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice()) - .setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory()) - .setSpecificationInventory(item.getSpecificationInventory()).setStartTime(item.getStartTime()) - .setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo()) - .setTraceNoUnitCode(item.getTraceNoUnitCode()).setReason(item.getReason()) - .setPurposeTypeEnum(LocationForm.PHARMACY.getValue()).setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()) - .setApplyTime(applyTime).setRemake(item.getRemake()); + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_PRPFITLOSS.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setPrice(item.getPrice()) + .setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice()) + .setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory()) + .setSpecificationInventory(item.getSpecificationInventory()).setStartTime(item.getStartTime()) + .setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo()) + .setTraceNoUnitCode(item.getTraceNoUnitCode()).setReason(item.getReason()) + .setPurposeTypeEnum(LocationForm.PHARMACY.getValue()).setPurposeLocationId(item.getPurposeLocationId()) + .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryRequisitionOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryRequisitionOrderServiceImpl.java index f93c1fbc..5e9c1280 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryRequisitionOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryRequisitionOrderServiceImpl.java @@ -23,7 +23,6 @@ import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryRe import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto; import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto; import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper; -import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryRequisitionOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -47,6 +46,7 @@ public class PharmacyDispensaryRequisitionOrderServiceImpl implements IPharmacyD @Autowired private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + /** * 初始化 * @@ -59,10 +59,11 @@ public class PharmacyDispensaryRequisitionOrderServiceImpl implements IPharmacyD // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.PURCHASE_APPLICATION.getValue(), - SupplyCategory.PURCHASE_APPLICATION.getInfo())); + // supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new + // PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.PURCHASE_APPLICATION.getValue(), + // SupplyCategory.PURCHASE_APPLICATION.getInfo())); requisitionOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -95,9 +96,8 @@ public class PharmacyDispensaryRequisitionOrderServiceImpl implements IPharmacyD List unitList; for (PharmacyDispensaryDetailDto item : requisitionOrderDtoDetailPage.getRecords()) { unitList = new ArrayList<>(); - unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText())); - unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText() - )); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); item.setUnitList(unitList); } @@ -130,7 +130,8 @@ public class PharmacyDispensaryRequisitionOrderServiceImpl implements IPharmacyD @Override public R addOrEditRequisitionOrder(List requisitionOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(requisitionOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(requisitionOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); @@ -140,17 +141,17 @@ public class PharmacyDispensaryRequisitionOrderServiceImpl implements IPharmacyD List supplyRequestList = new ArrayList<>(); for (PharmacyDispensaryDetailDto item : requisitionOrderDtoList) { - SupplyRequest supplyRequest = - new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.PURCHASE_REQUISITION.getValue()) - .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) - .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) - .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) - .setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice()) - .setSpecificationInventory(item.getSpecificationInventory()).setSupplierId(item.getSupplierId()) - .setReason(item.getReason()).setSourceTypeEnum(LocationForm.CABINET.getValue()) - .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue()) - .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) - .setApplyTime(item.getApplyTime()).setRemake(item.getRemake()); + SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) + .setTypeEnum(SupplyType.PURCHASE_REQUISITION.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) + .setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice()) + .setSpecificationInventory(item.getSpecificationInventory()).setSupplierId(item.getSupplierId()) + .setReason(item.getReason()).setSourceTypeEnum(LocationForm.CABINET.getValue()) + .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue()) + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(item.getApplyTime()).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryReturnToWarehouseOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryReturnToWarehouseOrderServiceImpl.java index 05594601..8ea3b488 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryReturnToWarehouseOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryReturnToWarehouseOrderServiceImpl.java @@ -7,8 +7,6 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryReturnToWarehouseOrderService; -import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryReturnToWarehouseOrderMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,7 +25,6 @@ import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryRe import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto; import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto; import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper; -import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryReturnToWarehouseOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -38,8 +35,8 @@ import com.openhis.workflow.service.ISupplyRequestService; * @date 2025-07-22 */ @Service -public class PharmacyDispensaryReturnToWarehouseOrderServiceImpl implements - IPharmacyDispensaryReturnToWarehouseOrderService { +public class PharmacyDispensaryReturnToWarehouseOrderServiceImpl + implements IPharmacyDispensaryReturnToWarehouseOrderService { @Resource private AssignSeqUtil assignSeqUtil; @@ -51,6 +48,7 @@ public class PharmacyDispensaryReturnToWarehouseOrderServiceImpl implements private IPharmacyDispensaryCommonService pharmacyDispensaryCommonService; @Autowired private PharmacyDispensaryCommonMapper pharmacyDispensaryCommonMapper; + /** * 初始化 * @@ -63,8 +61,8 @@ public class PharmacyDispensaryReturnToWarehouseOrderServiceImpl implements // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -97,16 +95,14 @@ public class PharmacyDispensaryReturnToWarehouseOrderServiceImpl implements List unitList; for (PharmacyDispensaryDetailDto item : returnToDispensaryOrderDtoDetailPage.getRecords()) { unitList = new ArrayList<>(); - unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText())); - unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText() - )); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyDispensaryDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); item.setUnitList(unitList); } return R.ok(returnToDispensaryOrderDtoDetailPage); } - /** * 获取单据号 * @@ -132,7 +128,8 @@ public class PharmacyDispensaryReturnToWarehouseOrderServiceImpl implements @Override public R addOrEditReturnToWarehouseOrder(List returnToDispensaryOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(returnToDispensaryOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(returnToDispensaryOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryStockInOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryStockInOrderServiceImpl.java index f75939d4..f5d7f7fd 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryStockInOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryStockInOrderServiceImpl.java @@ -61,8 +61,8 @@ public class PharmacyDispensaryStockInOrderServiceImpl implements IPharmacyDispe // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); +// supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryStocktakingOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryStocktakingOrderServiceImpl.java index 5dc21506..7d1d1f62 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryStocktakingOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryStocktakingOrderServiceImpl.java @@ -61,10 +61,10 @@ public class PharmacyDispensaryStocktakingOrderServiceImpl implements IPharmacyD // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption( - SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption( - SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); +// supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption( +// SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); +// supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption( +// SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryTransferInOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryTransferInOrderServiceImpl.java index 68907a3a..a6c926cc 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryTransferInOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryTransferInOrderServiceImpl.java @@ -25,7 +25,6 @@ import com.openhis.web.pharmacyDispensarymanage.appservice.IPharmacyDispensaryTr import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryDetailDto; import com.openhis.web.pharmacyDispensarymanage.dto.PharmacyDispensaryInitDto; import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryCommonMapper; -import com.openhis.web.pharmacyDispensarymanage.mapper.PharmacyDispensaryTransferInOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -60,8 +59,8 @@ public class PharmacyDispensaryTransferInOrderServiceImpl implements IPharmacyDi // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -128,7 +127,8 @@ public class PharmacyDispensaryTransferInOrderServiceImpl implements IPharmacyDi @Override public R addOrEditTransferInOrder(List transferInOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); @@ -150,8 +150,8 @@ public class PharmacyDispensaryTransferInOrderServiceImpl implements IPharmacyDi .setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId()) .setReason(item.getReason()).setSourceTypeEnum(LocationForm.PHARMACY.getValue()) .setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.PHARMACY.getValue()) - .setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryTransferOutOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryTransferOutOrderServiceImpl.java index 7a3a3b7c..31c7e005 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryTransferOutOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyDispensarymanage/appservice/impl/PharmacyDispensaryTransferOutOrderServiceImpl.java @@ -59,8 +59,8 @@ public class PharmacyDispensaryTransferOutOrderServiceImpl implements IPharmacyD // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); +// supplyCategoryOption.add(new PharmacyDispensaryInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseProfitLossOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseProfitLossOrderServiceImpl.java index a2d19aaa..e2b40fdf 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseProfitLossOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseProfitLossOrderServiceImpl.java @@ -7,7 +7,6 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import com.openhis.common.enums.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -18,6 +17,7 @@ import com.core.common.utils.DateUtils; import com.core.common.utils.MessageUtils; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService; @@ -25,7 +25,6 @@ import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseProf import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto; import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto; import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper; -import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseProfitLossOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -47,6 +46,7 @@ public class PharmacyWarehouseProfitLossOrderServiceImpl implements IPharmacyWar private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService; @Autowired private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper; + /** * 初始化 * @@ -59,12 +59,15 @@ public class PharmacyWarehouseProfitLossOrderServiceImpl implements IPharmacyWar // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), - SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), - SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PREPARATION_CONSUMPTION.getValue(), - SupplyCategory.PREPARATION_CONSUMPTION.getInfo())); + // supplyCategoryOption.add(new + // PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(), + // SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo())); + // supplyCategoryOption.add(new + // PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(), + // SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo())); + // supplyCategoryOption.add(new + // PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PREPARATION_CONSUMPTION.getValue(), + // SupplyCategory.PREPARATION_CONSUMPTION.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -97,16 +100,14 @@ public class PharmacyWarehouseProfitLossOrderServiceImpl implements IPharmacyWar List unitList; for (PharmacyWarehouseDetailDto item : profitLossOrderDtoDetailPage.getRecords()) { unitList = new ArrayList<>(); - unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText())); - unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText() - )); + unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); item.setUnitList(unitList); } return R.ok(profitLossOrderDtoDetailPage); } - /** * 获取单据号 * @@ -132,7 +133,8 @@ public class PharmacyWarehouseProfitLossOrderServiceImpl implements IPharmacyWar @Override public R addOrEditProfitLossOrder(List profitLossOrderDtoList) { // 请求数据取得 - List requestList = supplyRequestService.getSupplyByBusNo(profitLossOrderDtoList.get(0).getBusNo()); + List requestList = + supplyRequestService.getSupplyByBusNo(profitLossOrderDtoList.get(0).getBusNo()); if (!requestList.isEmpty()) { // 请求id取得 List requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList()); @@ -154,8 +156,8 @@ public class PharmacyWarehouseProfitLossOrderServiceImpl implements IPharmacyWar .setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo()) .setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId()) .setReason(item.getReason()).setPurposeTypeEnum(LocationForm.CABINET.getValue()) - .setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehousePurchaseOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehousePurchaseOrderServiceImpl.java index b19fbeb3..5a2b7b1d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehousePurchaseOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehousePurchaseOrderServiceImpl.java @@ -1,38 +1,30 @@ package com.openhis.web.pharmacyWarehousemanage.appservice.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; -import com.core.common.utils.DateUtils; import com.core.common.utils.MessageUtils; -import com.openhis.administration.domain.Practitioner; -import com.openhis.administration.domain.Supplier; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; -import com.openhis.common.utils.HisQueryUtils; -import com.openhis.web.common.dto.LocationDto; -import com.openhis.web.common.dto.UnitDto; -import com.openhis.web.inventorymanage.dto.*; +import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService; import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehousePurchaseOrderService; -import com.openhis.web.pharmacyWarehousemanage.dto.*; +import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto; +import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto; import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper; -import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehousePurchaseOrderMapper; -import com.openhis.workflow.domain.SupplyDelivery; import com.openhis.workflow.domain.SupplyRequest; -import com.openhis.workflow.service.ISupplyDeliveryService; import com.openhis.workflow.service.ISupplyRequestService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** * 药库订货单 @@ -52,7 +44,8 @@ public class PharmacyWarehousePurchaseOrderServiceImpl implements IPharmacyWareh private IPharmacyWarehouseCommonService pharmacyWarehouseCommonService; @Autowired - private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper; + private PharmacyWarehouseCommonMapper pharmacyWarehouseCommonMapper; + /** * 初始化 * @@ -65,10 +58,11 @@ public class PharmacyWarehousePurchaseOrderServiceImpl implements IPharmacyWareh // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PURCHASE_PLAN_GENERATION.getValue(), - SupplyCategory.PURCHASE_PLAN_GENERATION.getInfo())); + // supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new + // PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PURCHASE_PLAN_GENERATION.getValue(), + // SupplyCategory.PURCHASE_PLAN_GENERATION.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -101,9 +95,8 @@ public class PharmacyWarehousePurchaseOrderServiceImpl implements IPharmacyWareh List unitList; for (PharmacyWarehouseDetailDto item : purchaseOrderDtoDetailPage.getRecords()) { unitList = new ArrayList<>(); - unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText())); - unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText() - )); + unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText())); + unitList.add(new PharmacyWarehouseDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText())); item.setUnitList(unitList); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReturnOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReturnOrderServiceImpl.java index 8a1fd8c6..849d4703 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReturnOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReturnOrderServiceImpl.java @@ -1,19 +1,15 @@ package com.openhis.web.pharmacyWarehousemanage.appservice.impl; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import com.openhis.common.enums.*; -import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService; -import com.openhis.web.pharmacyWarehousemanage.dto.*; -import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; @@ -21,11 +17,14 @@ import com.core.common.utils.DateUtils; import com.core.common.utils.MessageUtils; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; -import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService; import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseReturnOrderService; -import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseReturnOrderMapper; +import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto; +import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto; +import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -59,8 +58,8 @@ public class PharmacyWarehouseReturnOrderServiceImpl implements IPharmacyWarehou // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); + // supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), + // SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -134,10 +133,11 @@ public class PharmacyWarehouseReturnOrderServiceImpl implements IPharmacyWarehou // 单据信息删除 supplyRequestService.removeByIds(requestIdList); } - //添加原始单据号 - if(returnOrderDtoList.get(0).getOriginalBusNo()!=null){ + // 添加原始单据号 + if (returnOrderDtoList.get(0).getOriginalBusNo() != null) { // 审批单据并返回单据详情 - List agreedList = supplyRequestService.addOriginalBusNo(returnOrderDtoList.get(0).getOriginalBusNo(), returnOrderDtoList.get(0).getBusNo()); + List agreedList = supplyRequestService + .addOriginalBusNo(returnOrderDtoList.get(0).getOriginalBusNo(), returnOrderDtoList.get(0).getBusNo()); if (agreedList.isEmpty()) { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReturnToWarehouseOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReturnToWarehouseOrderServiceImpl.java index f2e19a70..cc73702a 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReturnToWarehouseOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseReturnToWarehouseOrderServiceImpl.java @@ -59,8 +59,8 @@ public class PharmacyWarehouseReturnToWarehouseOrderServiceImpl implements IPhar // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), - SupplyCategory.NORMAL.getInfo())); +// supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(), +// SupplyCategory.NORMAL.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStockInOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStockInOrderServiceImpl.java index 786d2804..e12e5313 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStockInOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStockInOrderServiceImpl.java @@ -1,30 +1,15 @@ package com.openhis.web.pharmacyWarehousemanage.appservice.impl; -import java.math.BigDecimal; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import com.core.common.exception.ServiceException; -import com.core.common.utils.SecurityUtils; -import com.openhis.administration.domain.ChargeItemDefDetail; -import com.openhis.common.enums.*; -import com.openhis.common.enums.ybenums.YbInvChgType; -import com.openhis.web.inventorymanage.assembler.InventoryManageAssembler; -import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto; -import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto; -import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService; -import com.openhis.web.pharmacyWarehousemanage.dto.*; -import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper; -import com.openhis.workflow.domain.InventoryItem; -import com.openhis.workflow.domain.SupplyDelivery; -import com.openhis.workflow.service.ISupplyDeliveryService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; import com.core.common.utils.AssignSeqUtil; @@ -32,11 +17,14 @@ import com.core.common.utils.DateUtils; import com.core.common.utils.MessageUtils; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; -import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; +import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService; import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseStockInOrderService; -import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseStockInOrderMapper; +import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto; +import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto; +import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -71,18 +59,18 @@ public class PharmacyWarehouseStockInOrderServiceImpl implements IPharmacyWareho // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption - .add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PURCHASED_DRUGS_WAREHOUSING.getValue(), - SupplyCategory.PURCHASED_DRUGS_WAREHOUSING.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( - SupplyCategory.HOMEMADE_DRUGS_WAREHOUSING.getValue(), SupplyCategory.HOMEMADE_DRUGS_WAREHOUSING.getInfo())); - supplyCategoryOption - .add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.CONSIGNMENT_DRUGS_WAREHOUSING.getValue(), - SupplyCategory.CONSIGNMENT_DRUGS_WAREHOUSING.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( - SupplyCategory.OTHER_DRUGS_WAREHOUSING.getValue(), SupplyCategory.OTHER_DRUGS_WAREHOUSING.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( - SupplyCategory.DONATED_DRUGS_WAREHOUSING.getValue(), SupplyCategory.DONATED_DRUGS_WAREHOUSING.getInfo())); + // supplyCategoryOption + // .add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.PURCHASED_DRUGS_WAREHOUSING.getValue(), + // SupplyCategory.PURCHASED_DRUGS_WAREHOUSING.getInfo())); + // supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( + // SupplyCategory.HOMEMADE_DRUGS_WAREHOUSING.getValue(), SupplyCategory.HOMEMADE_DRUGS_WAREHOUSING.getInfo())); + // supplyCategoryOption + // .add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.CONSIGNMENT_DRUGS_WAREHOUSING.getValue(), + // SupplyCategory.CONSIGNMENT_DRUGS_WAREHOUSING.getInfo())); + // supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( + // SupplyCategory.OTHER_DRUGS_WAREHOUSING.getValue(), SupplyCategory.OTHER_DRUGS_WAREHOUSING.getInfo())); + // supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( + // SupplyCategory.DONATED_DRUGS_WAREHOUSING.getValue(), SupplyCategory.DONATED_DRUGS_WAREHOUSING.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -161,10 +149,11 @@ public class PharmacyWarehouseStockInOrderServiceImpl implements IPharmacyWareho // 单据信息删除 supplyRequestService.removeByIds(requestIdList); } - //添加原始单据号 - if(stockInOrderDtoList.get(0).getOriginalBusNo()!=null){ + // 添加原始单据号 + if (stockInOrderDtoList.get(0).getOriginalBusNo() != null) { // 审批单据并返回单据详情 - List agreedList = supplyRequestService.addOriginalBusNo(stockInOrderDtoList.get(0).getOriginalBusNo(), stockInOrderDtoList.get(0).getBusNo()); + List agreedList = supplyRequestService + .addOriginalBusNo(stockInOrderDtoList.get(0).getOriginalBusNo(), stockInOrderDtoList.get(0).getBusNo()); if (agreedList.isEmpty()) { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } @@ -184,7 +173,8 @@ public class PharmacyWarehouseStockInOrderServiceImpl implements IPharmacyWareho .setEndTime(item.getEndTime()).setPractitionerId(item.getPractitionerId()) .setLotNumber(item.getLotNumber()).setInvoiceNo(item.getInvoiceNo()).setTraceNo(item.getTraceNo()) .setTraceNoUnitCode(item.getTraceNoUnitCode()).setPurposeTypeEnum(LocationForm.CABINET.getValue()) - .setPurposeLocationId(item.getPurposeLocationId()).setPackagingConditionEnum(item.getPackagingConditionEnum()) + .setPurposeLocationId(item.getPurposeLocationId()) + .setPackagingConditionEnum(item.getPackagingConditionEnum()) .setAcceptanceResultEnum(item.getAcceptanceResultEnum()).setSupplierId(item.getSupplierId()) .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setReason(item.getReason()) .setRemake(item.getRemake()); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStockOutOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStockOutOrderServiceImpl.java index 493da6ae..a470a972 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStockOutOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStockOutOrderServiceImpl.java @@ -59,12 +59,12 @@ public class PharmacyWarehouseStockOutOrderServiceImpl implements IPharmacyWareh // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.IN_HOSPITAL_OUTBOUND.getValue(), - SupplyCategory.IN_HOSPITAL_OUTBOUND.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getValue(), - SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.OTHER_OUTBOUND.getValue(), - SupplyCategory.OTHER_OUTBOUND.getInfo())); +// supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.IN_HOSPITAL_OUTBOUND.getValue(), +// SupplyCategory.IN_HOSPITAL_OUTBOUND.getInfo())); +// supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getValue(), +// SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getInfo())); +// supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption(SupplyCategory.OTHER_OUTBOUND.getValue(), +// SupplyCategory.OTHER_OUTBOUND.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStocktakingOrderServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStocktakingOrderServiceImpl.java index 5833ef50..62017fdf 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStocktakingOrderServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacyWarehousemanage/appservice/impl/PharmacyWarehouseStocktakingOrderServiceImpl.java @@ -7,7 +7,6 @@ import java.util.stream.Collectors; import javax.annotation.Resource; -import com.openhis.common.enums.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -18,6 +17,7 @@ import com.core.common.utils.DateUtils; import com.core.common.utils.MessageUtils; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto; import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseCommonService; @@ -25,7 +25,6 @@ import com.openhis.web.pharmacyWarehousemanage.appservice.IPharmacyWarehouseStoc import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseDetailDto; import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseInitDto; import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseCommonMapper; -import com.openhis.web.pharmacyWarehousemanage.mapper.PharmacyWarehouseStocktakingOrderMapper; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.service.ISupplyRequestService; @@ -60,10 +59,10 @@ public class PharmacyWarehouseStocktakingOrderServiceImpl implements IPharmacyWa // 单据分类 List supplyCategoryOption = new ArrayList<>(); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( - SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); - supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( - SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); + // supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( + // SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo())); + // supplyCategoryOption.add(new PharmacyWarehouseInitDto.IntegerOption( + // SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo())); purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption); @@ -141,18 +140,19 @@ public class PharmacyWarehouseStocktakingOrderServiceImpl implements IPharmacyWa List supplyRequestList = new ArrayList<>(); Date applyTime = DateUtils.getNowDate(); for (PharmacyWarehouseDetailDto item : stocktakingOrderDtoList) { - SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo()) - .setTypeEnum(SupplyType.CABINET_STOCKTAKING.getValue()) - .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) - .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) - .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) - .setTotalQuantity(item.getTotalQuantity()).setPrice(item.getPrice()).setTotalPrice(item.getTotalPrice()) - .setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice()) - .setBatchInventory(item.getBatchInventory()).setLotNumber(item.getLotNumber()).setSupplierId(item.getSupplierId()) - .setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode()) - .setReasonCode(item.getReasonCode()).setReason(item.getReason()) - .setPurposeTypeEnum(LocationForm.CABINET.getValue()).setPurposeLocationId(item.getPurposeLocationId()) - .setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake()); + SupplyRequest supplyRequest = + new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.CABINET_STOCKTAKING.getValue()) + .setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setItemId(item.getItemId()) + .setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()) + .setTotalQuantity(item.getTotalQuantity()).setPrice(item.getPrice()) + .setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice()) + .setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory()) + .setLotNumber(item.getLotNumber()).setSupplierId(item.getSupplierId()).setTraceNo(item.getTraceNo()) + .setTraceNoUnitCode(item.getTraceNoUnitCode()).setReasonCode(item.getReasonCode()) + .setReason(item.getReason()).setPurposeTypeEnum(LocationForm.CABINET.getValue()) + .setPurposeLocationId(item.getPurposeLocationId()).setApplicantId(item.getApplicantId()) + .setApplyTime(applyTime).setRemake(item.getRemake()); supplyRequestList.add(supplyRequest); } // 更新请求表 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicationDetailsAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicationDetailsAppService.java index 2eff34f5..bb0720e3 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicationDetailsAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/IMedicationDetailsAppService.java @@ -1,6 +1,7 @@ package com.openhis.web.pharmacymanage.appservice; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; import com.openhis.web.pharmacymanage.dto.MedDetailsSearchParam; @@ -33,6 +34,9 @@ public interface IMedicationDetailsAppService { R getAmbPractitionerDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + void makeExcelFile(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, String searchKey, + HttpServletResponse response, HttpServletRequest request); + /** * 门诊发药明细流水账 * @@ -45,6 +49,7 @@ public interface IMedicationDetailsAppService { */ R getAmbMedicationDispenseDetailPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); +} // /** // * 门诊/住院人员发药明细帐、住院耗材记账领用明细 @@ -71,5 +76,3 @@ public interface IMedicationDetailsAppService { // */ // R getMedRunningAccountPage(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, // String searchKey, HttpServletRequest request); - -} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/ISummaryDispenseMedicineAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/ISummaryDispenseMedicineAppService.java index 2c38eaff..2baeb074 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/ISummaryDispenseMedicineAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/ISummaryDispenseMedicineAppService.java @@ -3,9 +3,11 @@ package com.openhis.web.pharmacymanage.appservice; import java.util.List; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import com.core.common.core.domain.R; -import com.openhis.web.pharmacymanage.dto.MedicineSummarySearchParam; +import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam; +import com.openhis.web.pharmacymanage.dto.*; /** * 住院汇总发药 应用实现接口 @@ -23,31 +25,87 @@ public interface ISummaryDispenseMedicineAppService { R init(); /** - * 医嘱查询 + * 分页查询住院病人列表 + * + * @param admissionPageParam 查询条件 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 病人列表 + */ + R getEncounterInfoListPage(AdmissionPageParam admissionPageParam, String startTime, String endTime, + Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + + void makeExcelFile(MedicineSummarySearchParam searchParam, Integer pageNo, + Integer pageSize, String searchKey, + HttpServletRequest request, HttpServletResponse response); + + /** + * 住院汇总药品 + * + * @param searchParam 查询信息 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 药品汇总 + */ + R getSummaryMedicationInfo(MedicineSummarySearchParam searchParam, Integer pageNo, Integer pageSize); + + /** + * 住院汇总发药单 + * + * @param searchParam 查询信息 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 药品汇总 + */ + R getSummaryFromInfo(FromSummarySearchParam searchParam, String startTime, String endTime, String searchKey, + Integer pageNo, Integer pageSize, HttpServletRequest request); + + /** + * 住院药品汇总发药单详细 * * @param searchParam 查询条件 - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页码 - * @param pageSize 查询条数 - * @param request 请求数据 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 */ - R getMedicationSummaryInfo(MedicineSummarySearchParam searchParam, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request); + R getOrderInfo(FromSearchParam searchParam, String searchKey, Integer pageNo, Integer pageSize, + HttpServletRequest request); /** * 处方单核对发药 * - * @param searchParam 条件 + * @param dispenseMedicineList 发药信息 * @return 处理结果 */ - R SummaryDispenseMedicine(List searchParam); + R SummaryDispenseMedicine(List dispenseMedicineList); /** * 作废 * - * @param deliveryIdList 供应发放id - * @param notPerformedReasonEnum 未发原因 + * @param dispenseMedicineList 作废信息 * @return 处理结果 */ - R dispenseCancel(List deliveryIdList, Integer notPerformedReasonEnum); + R dispenseCancel(List dispenseMedicineList); + + /** + * 退药处理 + * + * @param dispenseMedicineList 退药清单 + * @return 处理结果 + */ + R medicineReturn(List dispenseMedicineList); + } + + + + diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java index 8523c351..355d9c52 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicalDeviceDispenseAppServiceImpl.java @@ -145,7 +145,7 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IdCard, CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), request); // 查询就诊病人列表 @@ -218,45 +218,45 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen List devDispenseIdList = dispenseDeviceList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, + List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); // 按每个药品分组 - Map> groupedByItemId = - inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId)); // 遍历每个分组校验库存状态 - for (Map.Entry> entry : groupedByItemId.entrySet()) { - List groupItems = entry.getValue(); - if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum) .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { // 库存停供校验 return R.fail(groupItems.get(0).getItemName() + "库存已停供"); } } if (!inventoryList.isEmpty()) { - for (InventoryDto inventoryDto : inventoryList) { - if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { + for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) { InventoryItem inventoryItem = new InventoryItem(); // 库存数量判定 - if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { + if (unDispenseInventoryDto.getDispenseUnit().equals(unDispenseInventoryDto.getInventoryUnitCode())) { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract(unDispenseInventoryDto.getQuantity()); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); } } else { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - BigDecimal quantity = inventoryDto.getInventoryQuantity() - .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity() + .subtract(unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity())); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); } } inventoryItemList.add(inventoryItem); @@ -396,45 +396,45 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen .list(new LambdaQueryWrapper().in(DeviceDispense::getDeviceReqId, devRequestIdList)) .stream().map(DeviceDispense::getId).collect(Collectors.toList()); // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, + List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); // 按每个耗材分组 - Map> groupedByItemId = - inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId)); // 遍历每个分组校验库存状态 - for (Map.Entry> entry : groupedByItemId.entrySet()) { - List groupItems = entry.getValue(); - if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum) .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { // 库存停供校验 return R.fail(groupItems.get(0).getItemName() + "库存已停供"); } } if (!inventoryList.isEmpty()) { - for (InventoryDto inventoryDto : inventoryList) { - if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { + for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) { InventoryItem inventoryItem = new InventoryItem(); // 库存数量判定 - if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { + if (unDispenseInventoryDto.getDispenseUnit().equals(unDispenseInventoryDto.getInventoryUnitCode())) { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract(unDispenseInventoryDto.getQuantity()); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); } } else { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - BigDecimal quantity = inventoryDto.getInventoryQuantity() - .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity() + .subtract(unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity())); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); } } inventoryItemList.add(inventoryItem); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java index 46dd4fc8..981b1ab4 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/MedicationDetailsAppServiceImpl.java @@ -1,27 +1,38 @@ package com.openhis.web.pharmacymanage.appservice.impl; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; -import com.openhis.administration.domain.Practitioner; -import com.openhis.administration.service.IPractitionerService; -import com.openhis.common.enums.*; -import com.openhis.web.pharmacymanage.dto.*; +import com.core.common.utils.poi.ExcelUtil; +import com.openhis.web.inventorymanage.dto.ReceiptPageDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; +import com.core.common.core.domain.entity.SysDictData; +import com.core.system.service.ISysDictTypeService; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IPractitionerService; import com.openhis.common.constant.CommonConstants; +import com.openhis.common.enums.DispenseStatus; +import com.openhis.common.enums.EncounterClass; +import com.openhis.common.enums.PublicationStatus; +import com.openhis.common.enums.RequestStatus; import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.pharmacymanage.appservice.IMedicationDetailsAppService; +import com.openhis.web.pharmacymanage.dto.MedDetailedAccountPageDto; +import com.openhis.web.pharmacymanage.dto.MedDetailsInitDto; +import com.openhis.web.pharmacymanage.dto.MedDetailsSearchParam; import com.openhis.web.pharmacymanage.mapper.MedicationDetailsMapper; +import com.openhis.web.reportmanage.utils.ExcelFillerUtil; /** * 发药明细 应用实现类 @@ -35,14 +46,17 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer @Autowired private MedicationDetailsMapper medicationDetailsMapper; + @Autowired + private ISysDictTypeService sysDictTypeService; + @Autowired private IPractitionerService iPractitionerService; /** * 获取页面初始化信息 - * - * @return 初始化信息 */ + + @Override public R init() { @@ -87,12 +101,150 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer Page medDetailsPage = medicationDetailsMapper.selectAmbPractitionerDetailPage(new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.AMB.getValue(), DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(), - DispenseStatus.REFUNDED.getValue(), 1, flg); + DispenseStatus.REFUNDED.getValue(), 1, flg, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION); return R.ok(medDetailsPage); } + /** + * 发药明细导出 + * + * @param medDetailsSearchParam 查询条件 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param response 响应数据 + * @param request 请求数据 + * + */ + @Override + public void makeExcelFile(MedDetailsSearchParam medDetailsSearchParam, Integer pageNo, Integer pageSize, + String searchKey, HttpServletResponse response, HttpServletRequest request) { + R result = this.getAmbPractitionerDetailPage(medDetailsSearchParam, 1, 10000, searchKey, request); + if (result != null && result.getData() != null) { + // 先获取Page对象,再获取其中的记录列表 + Page pageData = (Page)result.getData(); + List dataList = pageData.getRecords(); + + // 获取字典数据 + for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) { + String unitCode = medDetailedAccountPageDto.getUnitCode(); + // 添加空值检查 + if (unitCode != null && sysDictTypeService != null) { + // 缓存字典数据,避免重复查询 + List unitCodelist = sysDictTypeService.selectDictDataByType("unit_code"); + if (unitCodelist != null) { + for (SysDictData dictData : unitCodelist) { + if (dictData != null && dictData.getDictValue() != null + && dictData.getDictValue().equals(unitCode)) { + medDetailedAccountPageDto.setUnitCode_dictText(dictData.getDictLabel()); + break; + } + } + } + } + } + + // 将发药数量与单位拼接 + for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) { + String unitCode_dictText = medDetailedAccountPageDto.getUnitCode_dictText(); + Integer dispenseQuantity = medDetailedAccountPageDto.getDispenseQuantity(); + // 将发药数量与单位拼接 + medDetailedAccountPageDto.setDispenseQuantitystr(dispenseQuantity + unitCode_dictText); + } + + // 将退药数量与单位拼接 + for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) { + String unitCode_dictText = medDetailedAccountPageDto.getUnitCode_dictText(); + Integer refundQuantity = medDetailedAccountPageDto.getRefundQuantity(); + // 添加完整的空值检查和默认值处理 + String unitText = (unitCode_dictText != null) ? unitCode_dictText : ""; + if (refundQuantity == null) { + medDetailedAccountPageDto.setRefundQuantitystr("0.00" + unitCode_dictText); + } else if (refundQuantity == 0) { + medDetailedAccountPageDto.setRefundQuantitystr("0.00" + unitCode_dictText); + } else { + medDetailedAccountPageDto.setRefundQuantitystr(refundQuantity.toString() + unitCode_dictText); + } + } + + // 将退药金额 + for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) { + BigDecimal refundPrice = medDetailedAccountPageDto.getRefundPrice(); + if (refundPrice == null) { + medDetailedAccountPageDto.setRefundPricestr("0.00" ); + } else if (refundPrice.signum() == 0) { + medDetailedAccountPageDto.setRefundPricestr("0.00" ); + } else { + refundPrice = refundPrice.setScale(6, RoundingMode.HALF_UP); + medDetailedAccountPageDto.setRefundPricestr(refundPrice.toString() ); + } + + } + + //发药金额 + for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) { + BigDecimal dispensePrice = medDetailedAccountPageDto.getDispensePrice(); + if (dispensePrice == null) { + medDetailedAccountPageDto.setDispensePricestr("0.00" ); + } else if (dispensePrice.signum() == 0) { + medDetailedAccountPageDto.setDispensePricestr("0.00" ); + } else { + dispensePrice = dispensePrice.setScale(6, RoundingMode.HALF_UP); + medDetailedAccountPageDto.setDispensePricestr(dispensePrice.toString() ); + } + + } + // 添加项目类别 + for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) { + String itemTable = medDetailedAccountPageDto.getItemTable(); + if (itemTable != null) { + if(itemTable.equals("med_medication_definition")){ + medDetailedAccountPageDto.setItemTable("药品"); + } + if(itemTable.equals("adm_device_definition")){ + medDetailedAccountPageDto.setItemTable("耗材"); + } + } + else{ + medDetailedAccountPageDto.setItemTable("未知类型"); + } + } + + //判断项目类别 + + try { + // 准备表头(key对应DTO的字段名) + //Map headers = new LinkedHashMap<>(); +// headers.put("practitionerName", "发药人"); +// headers.put("dispenseNo", "发药单号"); +// headers.put("medicationName", "药品项目"); +// headers.put("itemTable", "项目类别"); +// headers.put("busNo", "药品编码"); +// headers.put("ybNo", "医保编码"); +// headers.put("totalVolume", "规格"); +// headers.put("dispenseQuantitystr", "发药数量"); +// headers.put("dispensePricestr", "发药金额"); +// headers.put("refundQuantitystr", "退药数量"); +// headers.put("refundPricestr", "退药金额"); +// headers.put("lotNumber", "生产批号"); +// headers.put("manufacturerText", "厂家/产地"); +// headers.put("supplierName", "供应商"); +// headers.put("dispenseTime", "发药时间"); + // 导出到Excel +// ExcelFillerUtil.makeExcelFile(response, dataList, headers, "发药明细", null); + // 导出到Excel + ExcelUtil util = new ExcelUtil(MedDetailedAccountPageDto.class); + util.exportExcel(response,dataList,"发药明细"); + } catch (Exception e) { + e.printStackTrace(); + System.out.printf("导出Excel失败:" + e.getMessage()); + } + } + } + /** * 门诊发药明细流水账 * @@ -117,7 +269,8 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer Page medDetailsPage = medicationDetailsMapper.selectAmbPractitionerDetailPage(new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.AMB.getValue(), DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(), - DispenseStatus.REFUNDED.getValue(), 2, flg); + DispenseStatus.REFUNDED.getValue(), 2, flg, CommonConstants.TableName.MED_MEDICATION_DEFINITION, + CommonConstants.TableName.ADM_DEVICE_DEFINITION); return R.ok(medDetailsPage); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java index 3621e582..effd76c6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/ReturnMedicineAppServiceImpl.java @@ -8,9 +8,6 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import com.openhis.yb.dto.MedicalInventory3511Output; -import com.openhis.yb.dto.MedicalInventory3511Param; -import com.openhis.yb.service.YbHttpUtils; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSONArray; @@ -51,7 +48,9 @@ import com.openhis.workflow.service.IDeviceRequestService; import com.openhis.workflow.service.IInventoryItemService; import com.openhis.yb.domain.ClinicSettle; import com.openhis.yb.dto.Medical3506Param; +import com.openhis.yb.dto.MedicalInventory3511Param; import com.openhis.yb.service.IClinicSettleService; +import com.openhis.yb.service.YbHttpUtils; import com.openhis.yb.service.YbManager; /** @@ -165,7 +164,7 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService { Integer pageSize, HttpServletRequest request) { // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(encounterInfoDto, searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IdCard, CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), request); // 查询退药患者分页列表 @@ -395,12 +394,12 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService { List inventoryItemList = new ArrayList<>(); // 获取库存信息 - List inventoryList = + List inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, medDispenseIdList, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); if (inventoryList != null && !inventoryList.isEmpty()) { // 设置库存数量 - for (InventoryDto inventory : inventoryList) { + for (UnDispenseInventoryDto inventory : inventoryList) { // 库存表项目设定 InventoryItem inventoryItem = new InventoryItem(); // id @@ -636,9 +635,6 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService { } else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(dispenseInventoryDto.getItemTable())) { medical3506Param.setFixmedinsHilistName(CommonConstants.TableName.ADM_DEVICE_DEFINITION); } - MedicalInventory3511Output medicalInventory3511Output = - ybHttpUtils.querySalesInfo(getMedical3511Param(dispenseInventoryDto)); - medical3506Param.setMedinsProdSelNo(medicalInventory3511Output.getMedinsProdSelNo()); return medical3506Param; } @@ -649,7 +645,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService { SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE); // TODO medicalInventory3511Param.setFixmedinsCode(fixmedinsCode).setMedinsListCodg(dispenseInventoryDto.getYbNo()) - .setFixmedinsBchno(dispenseInventoryDto.getLotNumber()).setBegndate(dispenseInventoryDto.getDispenseTime()).setEnddate(dispenseInventoryDto.getDispenseTime()); + .setFixmedinsBchno(dispenseInventoryDto.getLotNumber()).setBegndate(dispenseInventoryDto.getDispenseTime()) + .setEnddate(dispenseInventoryDto.getDispenseTime()); return medicalInventory3511Param; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/SummaryDispenseMedicineAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/SummaryDispenseMedicineAppServiceImpl.java index d1fe464a..3d9d2f05 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/SummaryDispenseMedicineAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/SummaryDispenseMedicineAppServiceImpl.java @@ -1,44 +1,64 @@ package com.openhis.web.pharmacymanage.appservice.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletResponse; +import com.core.common.core.domain.entity.SysDictData; +import com.core.common.utils.poi.ExcelUtil; +import com.core.system.mapper.SysDictDataMapper; +import com.core.system.service.ISysDictTypeService; +import com.openhis.web.reportmanage.utils.ExcelFillerUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; 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.constant.HttpStatus; import com.core.common.core.domain.R; import com.core.common.exception.ServiceException; -import com.core.common.utils.DateUtils; -import com.core.common.utils.MessageUtils; -import com.core.common.utils.SecurityUtils; -import com.openhis.administration.domain.Practitioner; +import com.core.common.utils.*; +import com.openhis.administration.domain.Organization; import com.openhis.administration.domain.TraceNoManage; import com.openhis.administration.service.ILocationService; +import com.openhis.administration.service.IOrganizationService; import com.openhis.administration.service.IPractitionerService; import com.openhis.administration.service.ITraceNoManageService; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.YbInvChgType; import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.HisQueryUtils; +import com.openhis.medication.domain.MedicationDefinition; import com.openhis.medication.domain.MedicationDispense; +import com.openhis.medication.service.IMedicationDefinitionService; import com.openhis.medication.service.IMedicationDispenseService; +import com.openhis.medication.service.impl.MedicationRequestServiceImpl; +import com.openhis.web.basedatamanage.appservice.IPractitionerAppService; +import com.openhis.web.basedatamanage.dto.PractitionerOrgAndLocationDto; +import com.openhis.web.basedatamanage.dto.UserAndPractitionerDto; import com.openhis.web.inhospitalnursestation.appservice.IMedicineSummaryAppService; +import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam; +import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientPageDto; +import com.openhis.web.inhospitalnursestation.mapper.AdviceProcessAppMapper; +import com.openhis.web.inventorymanage.appservice.impl.ReceiptApprovalAppServiceImpl; +import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto; import com.openhis.web.pharmacymanage.appservice.ISummaryDispenseMedicineAppService; -import com.openhis.web.pharmacymanage.dto.MedicineSummaryDto; -import com.openhis.web.pharmacymanage.dto.MedicineSummaryInitDto; -import com.openhis.web.pharmacymanage.dto.MedicineSummarySearchParam; +import com.openhis.web.pharmacymanage.dto.*; import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper; import com.openhis.web.pharmacymanage.mapper.SummaryDispenseMedicineMapper; -import com.openhis.workflow.domain.DeviceDispense; +import com.openhis.web.pharmacymanage.mapper.WesternMedicineDispenseMapper; import com.openhis.workflow.domain.InventoryItem; import com.openhis.workflow.domain.SupplyDelivery; import com.openhis.workflow.domain.SupplyRequest; @@ -56,37 +76,78 @@ import com.openhis.workflow.service.ISupplyRequestService; @Service public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMedicineAppService { - @Autowired + @Resource + private IPractitionerAppService practitionerAppService; + + @Resource private IMedicationDispenseService medicationDispenseService; - @Autowired + @Resource private IDeviceDispenseService deviceDispenseService; - @Autowired + @Resource private IInventoryItemService iInventoryItemService; - @Autowired + @Resource private SummaryDispenseMedicineMapper inpatientMedicineDispenseMapper; - @Autowired + @Resource private ReturnMedicineMapper returnMedicineMapper; @Autowired private ILocationService locationService; + @Resource private IPractitionerService practitionerService; + @Resource private ISupplyRequestService supplyRequestService; + @Resource private ISupplyDeliveryService supplyDeliveryService; - @Autowired + + @Resource private ITraceNoManageService traceNoManageService; - @Autowired + + @Resource private WesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppServiceImpl; - @Autowired + @Resource private IMedicineSummaryAppService inpatientMedicineCollectionAppService; + @Resource + private WesternMedicineDispenseMapper westernMedicineDispenseMapper; + + @Resource + private IOrganizationService organizationService; + + @Resource + private AdviceProcessAppMapper adviceProcessAppMapper; + + @Resource + private IInventoryItemService inventoryItemService; + + @Resource + private IMedicationDefinitionService medicationDefinitionService; + + @Resource + private ReceiptApprovalAppServiceImpl receiptApprovalAppService; + + @Resource + private WesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppService; + + @Resource + private MedicationRequestServiceImpl medicationRequestService; + + @Resource + private AssignSeqUtil assignSeqUtil; + + @Resource + private ReturnMedicineAppServiceImpl returnMedicineAppService; + private HttpServletResponse response; + @Autowired + private ISysDictTypeService sysDictTypeService; + /** * 获取页面初始化信息 * @@ -95,42 +156,305 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe @Override public R init() { - MedicineSummaryInitDto initDto = new MedicineSummaryInitDto(); + DispenseInitDto initDto = new DispenseInitDto(); - // // 获取科室下拉选列表 todo 前台直接调用共通方法 - // List organizationList = organizationService.getList(OrganizationType.DEPARTMENT.getValue(), - // OrganizationClass.INPATIENT.getValue()); - // List organizationOptions = organizationList.stream().map( - // organization -> new InpatientMedicineDispenseInitDto.LongOptions(organization.getId(), - // organization.getName())).collect(Collectors.toList()); - - // 未发药原因下拉选列表 - List notPerformedReasonOptions = - Stream.of(NotPerformedReasonEnum.values()) - .map(notPerformedReason -> new MedicineSummaryInitDto.IntegerOptions(notPerformedReason.getValue(), - notPerformedReason.getInfo())) + // 获取科室下拉选列表 + List organizationList = + organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue()); + List organizationOptions = organizationList.stream() + .map(organization -> new DispenseInitDto.DepartmentOption(organization.getId(), organization.getName())) .collect(Collectors.toList()); - // 查询领药人列表 - List applicantList = practitionerService.getList(); - - // 发药状态 - List dispenseStatusOptions = new ArrayList<>(); - dispenseStatusOptions.add(new MedicineSummaryInitDto.IntegerOptions(DispenseStatus.SUMMARIZED.getValue(), - DispenseStatus.SUMMARIZED.getInfo())); - dispenseStatusOptions.add(new MedicineSummaryInitDto.IntegerOptions(DispenseStatus.COMPLETED.getValue(), - DispenseStatus.COMPLETED.getInfo())); - dispenseStatusOptions.add(new MedicineSummaryInitDto.IntegerOptions(DispenseStatus.DECLINED.getValue(), - DispenseStatus.DECLINED.getInfo())); - - initDto// .setDepartmentOptions(organizationOptions) - .setApplicantOptions(applicantList).setDispenseStatusOptions(dispenseStatusOptions) - .setNotPerformedReasonOptions(notPerformedReasonOptions); + initDto.setDepartmentOptions(organizationOptions); return R.ok(initDto); } + @Override + public R getEncounterInfoListPage(AdmissionPageParam admissionPageParam, String startTime, String endTime, + Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(admissionPageParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientWbStr, CommonConstants.FieldName.PatientPyStr, + CommonConstants.FieldName.PatientName, CommonConstants.FieldName.BusNo)), + request); + // 入院患者分页列表 + Page admissionPatientPage = + adviceProcessAppMapper.selectInpatientPage(new Page<>(pageNo, pageSize), queryWrapper, + EncounterClass.IMP.getValue(), EncounterZyStatus.TO_BE_REGISTERED.getValue(), + EncounterZyStatus.REGISTERED.getValue(), EncounterActivityStatus.ACTIVE.getValue(), + LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue()); + admissionPatientPage.getRecords().forEach(e -> { + // 性别枚举 + e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); + // 病情 + e.setPriorityEnum_enumText(EnumUtils.getInfoByValue(PriorityLevel.class, e.getPriorityEnum())); + // 计算年龄 + if (e.getBirthDate() != null) { + e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate())); + } + // 住院状态 + e.setEncounterStatus_enumText(EnumUtils.getInfoByValue(EncounterZyStatus.class, e.getEncounterStatus())); + }); + return R.ok(admissionPatientPage); + } + /** - * 汇总医嘱查询 + * 住院汇总药品 + * + * @param searchParam 查询信息 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 药品汇总 + */ + @Override + public R getSummaryMedicationInfo(MedicineSummarySearchParam searchParam, Integer pageNo, Integer pageSize) { + ItemDispenseOrderDto itemDispenseOrderDto = new ItemDispenseOrderDto(); + itemDispenseOrderDto.setEncounterId(searchParam.getEncounterId()); + // 发药状态初始化 + Integer dispenseStatus = itemDispenseOrderDto.getStatusEnum(); + itemDispenseOrderDto.setStatusEnum(null); + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(itemDispenseOrderDto, null, null, null); + // 处方单信息查询 + Page medicineDispenseOrderPage = + westernMedicineDispenseMapper.selectMedicineDispenseOrderPage(new Page<>(pageNo, pageSize), queryWrapper, + DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(), + DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue(), dispenseStatus); + medicineDispenseOrderPage.getRecords().forEach(medicineDispenseOrder -> { + // 发药状态 + medicineDispenseOrder.setStatusEnum_enumText( + EnumUtils.getInfoByValue(DispenseStatus.class, medicineDispenseOrder.getStatusEnum())); + // 设置所在表名 + medicineDispenseOrder.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION); + }); + return R.ok(medicineDispenseOrderPage); + } + + + /** + * 导出住院发药信息到Excel + * + * @param searchParam 查询参数 + * @param searchKey 搜索关键字 + * @param pageNo 页码 + * @param pageSize 每页大小 + * @param request HTTP请求对象 + * @param response HTTP响应对象 + */ + @Override + public void makeExcelFile(MedicineSummarySearchParam searchParam, Integer pageNo, + Integer pageSize, String searchKey, + HttpServletRequest request, HttpServletResponse response) { + + // 获取发药数据 + R result = this.getSummaryMedicationInfo(searchParam,1, 10000); + + if (result != null && result.getCode() == 200 && result.getData() != null) { + // 获取Page对象中的记录列表 + Page pageData = (Page) result.getData(); + List dataList = pageData.getRecords(); + try { + //获取药品类型 + for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) { + String itemType = itemDispenseOrderDto.getItemType(); + if (itemType != null) { + List itemTypeList = sysDictTypeService.selectDictDataByType("med_category_code"); + if (itemTypeList != null) { + for (SysDictData dictData : itemTypeList) { + if (dictData != null && dictData.getDictValue() != null + && dictData.getDictValue().equals(itemType)) { + itemDispenseOrderDto.setItemType_dictText(dictData.getDictLabel()); + break; + } + + } + } + } + } + + + //用药频次 + for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) { + String rateCode = itemDispenseOrderDto.getRateCode(); + if (rateCode != null) { + List rateCodeList = sysDictTypeService.selectDictDataByType("rate_code"); + if (rateCodeList != null) { + for (SysDictData dictData : rateCodeList) { + if (dictData != null && dictData.getDictValue() != null + && dictData.getDictValue().equals(rateCode)) { + itemDispenseOrderDto.setRateCode_dictText(dictData.getDictLabel()); + break; + } + + } + } + } + } + + + //用法 + for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) { + String methodCode = itemDispenseOrderDto.getMethodCode(); + if (methodCode != null) { + List methodCodeList = sysDictTypeService.selectDictDataByType("method_code"); + if (methodCodeList != null) { + for (SysDictData dictData : methodCodeList) { + if (dictData != null && dictData.getDictValue() != null + && dictData.getDictValue().equals(methodCode)) { + itemDispenseOrderDto.setMethodCode_dictText(dictData.getDictLabel()); + break; + } + + } + } + } + } + + + // 计量单位 + for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) { + //获取计量单位翻译前的值 + String doseUnitCode = itemDispenseOrderDto.getDoseUnitCode(); + if (doseUnitCode != null) { + //从系统字典服务中查询计量单位的值 + List doseUnitCodeList = sysDictTypeService.selectDictDataByType("unit_code"); + if (doseUnitCodeList != null) { + for (SysDictData dictData : doseUnitCodeList) { + if (dictData != null && dictData.getDictValue() != null + && dictData.getDictValue().equals(doseUnitCode)) { + itemDispenseOrderDto.setDoseUnitCode_dictText(dictData.getDictLabel()); + break; + } + } + } + } + } + + + // 获取单位翻译值 + for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) { + //获取单位翻译前的值 + String unitCode = itemDispenseOrderDto.getUnitCode(); + if (unitCode != null) { + //从系统字典服务中查询单位的值 + List unitCodeList = sysDictTypeService.selectDictDataByType("unit_code"); + if (unitCodeList != null) { + for (SysDictData dictData : unitCodeList) { + if (dictData != null && dictData.getDictValue() != null + && dictData.getDictValue().equals(unitCode)) { + itemDispenseOrderDto.setUnitCode_dictText(dictData.getDictLabel()); + break; + } + } + } + } + } + + + // 金额保留两位小数 + for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) { + //获取金额的值 + BigDecimal totalPrice = itemDispenseOrderDto.getTotalPrice(); + //把金额值转换成double + double doubleValue = totalPrice.doubleValue(); + double value = Math.round(doubleValue * 100.0) / 100.0; + itemDispenseOrderDto.setTotalPrice(BigDecimal.valueOf(value)); + } + + // 单价保留两位小数 + for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) { + //获取单价的值 + BigDecimal unitPrice = itemDispenseOrderDto.getUnitPrice(); + //把单价值转换成double + double valueLis = unitPrice.doubleValue(); + double valuePis = Math.round(valueLis * 100.0) / 100.0; + itemDispenseOrderDto.setUnitPrice(BigDecimal.valueOf(valuePis)); + } + + //单次剂量保留两位小数 + for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) { + //获取单次剂量的值 + BigDecimal dose = itemDispenseOrderDto.getDose(); + //把单次剂量转换成double + double valuePas = dose.doubleValue(); + double valueRas = Math.round(valuePas * 100.0) / 100.0; + itemDispenseOrderDto.setDose(BigDecimal.valueOf(valueRas)); + } + + ExcelUtil util = new ExcelUtil(ItemDispenseOrderDto.class); + util.exportExcel(response, dataList, "住院发药单"); + } catch (Exception e) { + e.printStackTrace(); + System.out.printf("导出住院发药Excel失败:%s", e.getMessage()); + } + } + } + + + /** + * 住院汇总发药单 + * + * @param searchParam 查询信息 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 药品汇总 + */ + @Override + public R getSummaryFromInfo(FromSummarySearchParam searchParam, String startTime, String endTime, + String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + // 构建查询条件 + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, searchKey, + new HashSet<>(List.of(CommonConstants.FieldName.ApplicantName, CommonConstants.FieldName.BusNo)), request); + + // 查询医嘱详细信息 + Page prescriptionItemInfoPageDto = + inpatientMedicineDispenseMapper.selectMedicationSummaryInfo(new Page<>(pageNo, pageSize), queryWrapper); + + List medicineSummaryDtoList = prescriptionItemInfoPageDto.getRecords(); + + List unitList; + // 个别项目设定 + for (MedicineSummaryDto prescriptionInfoDto : medicineSummaryDtoList) { + // 状态 + prescriptionInfoDto.setStatusEnum_enumText( + EnumUtils.getInfoByValue(DispenseStatus.class, prescriptionInfoDto.getStatusEnum())); + // 追溯码单位列表 + unitList = new ArrayList<>(); + unitList.add(new MedicineSummaryDto.Option(prescriptionInfoDto.getMaxUnitCode(), + prescriptionInfoDto.getMaxUnitCode_dictText())); + unitList.add(new MedicineSummaryDto.Option(prescriptionInfoDto.getMinUnitCode(), + prescriptionInfoDto.getMinUnitCode_dictText())); + + prescriptionInfoDto.setUnitList(unitList); + } + + // 获取当前用户id + Long userId = SecurityUtils.getUserId(); + UserAndPractitionerDto userAndPractitionerDto = new UserAndPractitionerDto(); + userAndPractitionerDto.setUserId(userId); + IPage userPractitionerPage = + practitionerAppService.getUserPractitionerPage(userAndPractitionerDto, "", 1, 1); + // 查询该用户管理的药房 + List locationIdList = userPractitionerPage.getRecords().get(0).getManageMedicationLocationDtoList() + .stream().map(PractitionerOrgAndLocationDto::getLocationId).toList(); + + List fromSummaryDtoList = new ArrayList<>(); + for (MedicineSummaryDto medicineSummaryDto : medicineSummaryDtoList) { + + FromSummaryDto fromSummaryDto = new FromSummaryDto(); + BeanUtils.copyProperties(medicineSummaryDto, fromSummaryDto); + + if (!locationIdList.isEmpty() && locationIdList.contains(fromSummaryDto.getSourceLocationId())) + fromSummaryDtoList.add(fromSummaryDto); + } + + return R.ok(fromSummaryDtoList); + } + + /** + * 住院药品汇总发药单详细 * * @param searchParam 查询条件 * @param searchKey 模糊查询关键字 @@ -139,19 +463,16 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe * @param request 请求数据 */ @Override - public R getMedicationSummaryInfo(MedicineSummarySearchParam searchParam, String searchKey, Integer pageNo, - Integer pageSize, HttpServletRequest request) { + public R getOrderInfo(FromSearchParam searchParam, String searchKey, Integer pageNo, Integer pageSize, + HttpServletRequest request) { // 构建查询条件 - QueryWrapper queryWrapper = + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, searchKey, null, request); - queryWrapper.orderByDesc(CommonConstants.FieldName.applyTime); // 查询医嘱详细信息 Page prescriptionItemInfoPageDto = - inpatientMedicineDispenseMapper.selectMedicationSummaryInfo(new Page<>(pageNo, pageSize), queryWrapper, - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, - SupplyType.DISPENSING_ORDER.getValue(), SupplyCategory.INPATIENT_PATIENT_SUMMARY_DISPENSING.getValue()); + inpatientMedicineDispenseMapper.selectOrderInfo(new Page<>(pageNo, pageSize), queryWrapper); List unitList; // 个别项目设定 @@ -167,133 +488,113 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe prescriptionInfoDto.getMinUnitCode_dictText())); prescriptionInfoDto.setUnitList(unitList); - } ; + } return R.ok(prescriptionItemInfoPageDto); } /** * 处方单核对发药 * - * @param searchParam 条件 + * @param dispenseMedicineList 发药信息 * @return 处理结果 */ @Override - public R SummaryDispenseMedicine(List searchParam) { - // 构建供应发放Id到追溯码的映射 - Map traceNoMap = new HashMap<>(); - for (MedicineSummarySearchParam param : searchParam) { - if (param != null && param.getDeliveryId() != null) { - traceNoMap.put(param.getDeliveryId(), param.getTraceNo()); - } + public R SummaryDispenseMedicine(List dispenseMedicineList) { + // 汇总状态更新标志 + boolean summaryFlag = false; + List inventoryItemList = new ArrayList<>(); + + // 获取发药单id列表 + List medDispenseIdList = + dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); + + if (medDispenseIdList.stream().allMatch(Objects::isNull)) { + List busNoList = + dispenseMedicineList.stream().map(DispenseItemDto::getBusNo).collect(Collectors.toList()); + medDispenseIdList = medicationDispenseService.getMedDispenseBySummaryNo(busNoList).stream() + .map(MedicationDispense::getId).toList(); + summaryFlag = true; } - // 供应发放idList - List deliveryIdList = - searchParam.stream().map(MedicineSummarySearchParam::getDeliveryId).collect(Collectors.toList()); - // 获取供应发放信息列表 - List supplyDeliveryInfoList = supplyDeliveryService.selectByIdList(deliveryIdList); - // 供应申请idList - List requestIdList = supplyDeliveryInfoList.stream().map(SupplyDelivery::getRequestId).toList(); - // 耗材发放ID列表 - List devDispenseIdList = new ArrayList<>(); - // 药品发放ID列表 - List medDispenseIdList = new ArrayList<>(); - List idList; - String[] idArray; + // 获取库存信息 + List inventoryList = + returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); - // 构建项目发放Id到追溯码的映射 - Map medTraceNoMap = new HashMap<>(); - Map devTraceNoMap = new HashMap<>(); - - for (SupplyDelivery item : supplyDeliveryInfoList) { - // 按英文逗号分割字符串,得到数组 - idArray = item.getBasedOnIds().split(CommonConstants.Common.COMMA); - // 流式处理:过滤空值、去除空格、转换为Long - idList = Arrays.stream(idArray).map(String::trim) // 去除每个元素前后的空格 - .filter(str -> !str.isEmpty()) // 过滤空字符串(如连续逗号导致的空值) - .map(Long::parseLong) // 转换为Long类型 - .toList(); // 收集为List - // 设置发放ID列表,追溯码映射 - if (item.getBasedOnTable().equals(CommonConstants.TableName.MED_MEDICATION_DISPENSE)) { - // 耗材发放ID列表 - devDispenseIdList.addAll(idList); - // 追溯码映射 - for (Long id : idList) { - medTraceNoMap.put(id, traceNoMap.get(item.getId())); - } - } else { - // 药品发放ID列表 - medDispenseIdList.addAll(idList); - // 追溯码映射 - for (Long id : idList) { - devTraceNoMap.put(id, traceNoMap.get(item.getId())); + // 按每个药品分组 + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId)); + // 遍历每个分组校验库存状态 + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum) + .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { + // 库存停供校验 + return R.fail(groupItems.get(0).getItemName() + "库存已停供"); + } + } + if (!inventoryList.isEmpty()) { + for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) { + InventoryItem inventoryItem = new InventoryItem(); + // 库存数量判定 + if (unDispenseInventoryDto.getDispenseUnit() + .equals(unDispenseInventoryDto.getInventoryUnitCode())) { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity() + .subtract(unDispenseInventoryDto.getQuantity()); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); + } else { + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); + } + } else { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract( + unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity())); + // 库存数量判定 + if (quantity.compareTo(BigDecimal.ZERO) < 0) { + // 库存数量不足 + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); + } else { + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); + } + } + inventoryItemList.add(inventoryItem); } } } - - // 校验库存 - R checkInventoryReturn = - inpatientMedicineCollectionAppService.checkInventoryItem(devDispenseIdList, medDispenseIdList); - if (checkInventoryReturn.getCode() != HttpStatus.SUCCESS) { - return checkInventoryReturn; - } - // 库存信息 - List inventoryItemList = (List)checkInventoryReturn.getData(); - - // todo 上面一行代码好使的话,就将下面注释的代码删除 - // // 检查数据类型是否为List - // if (checkInventoryReturn.getData() instanceof List) { - // List rawList = (List)checkInventoryReturn.getData(); - // - // // 进一步检查列表中的元素类型 - // boolean isInventoryItemList = true; - // for (Object item : rawList) { - // if (!(item instanceof InventoryItem)) { - // isInventoryItemList = false; - // break; - // } - // } - // - // if (isInventoryItemList) { - // // 强制转换为List - // inventoryItemList = (List)rawList; - // } else { - // // 处理类型不匹配的情况 - // return R.fail("校验库存列表中包含非InventoryItem类型的元素"); - // } - // } else { - // // 处理数据不是List的情况 - // return R.fail("校验库存返回的数据不是List类型"); - // } - + // 药品发药信息查询 + List dispenseList = medicationDispenseService + .list(new LambdaQueryWrapper().in(MedicationDispense::getId, medDispenseIdList)); // 追溯码列表 List tracesNoManageList = new ArrayList<>(); TraceNoManage traceNoManage; - Date now = DateUtils.getNowDate(); - - // 药品发药信息查询 - List medDispenseList = medicationDispenseService - .list(new LambdaQueryWrapper().in(MedicationDispense::getId, medDispenseIdList)); - if (medDispenseList != null) { - if (medDispenseList.stream().map(MedicationDispense::getStatusEnum) - .anyMatch(x -> x.equals(DispenseStatus.COMPLETED.getValue()))) { - throw new ServiceException("药品已发放,请勿重复发放"); - } else { - for (MedicationDispense medicationDispense : medDispenseList) { - // 药品发放状态 - medicationDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); - // 状态变更时间 - medicationDispense.setStatusChangedTime(now); - // 发药数量 - medicationDispense.setDispenseQuantity(medicationDispense.getQuantity()); - // 发药时间 - medicationDispense.setDispenseTime(now); - // 发药人 - medicationDispense.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); - // 药品追溯码 - medicationDispense.setTraceNo(medTraceNoMap.get(medicationDispense.getId())); - - // 使用逗号分割追溯码并转换为List + List supplyItemDetailList = new ArrayList<>(); + if (dispenseList != null) { + // if (dispenseList.stream().map(MedicationDispense::getStatusEnum) + // .anyMatch(x -> !x.equals(DispenseStatus.PREPARED.getValue()))) { + // throw new ServiceException("发药失败,请检查发药单状态"); + // } else { + for (MedicationDispense medicationDispense : dispenseList) { + // 药品发放状态 + medicationDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); + // 状态变更时间 + medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); + // 发药数量 + medicationDispense.setDispenseQuantity(medicationDispense.getQuantity()); + // 发药时间 + medicationDispense.setDispenseTime(DateUtils.getNowDate()); + // 发药人 + medicationDispense.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); + // 设置库存变更参数 + supplyItemDetailList.add(new SupplyItemDetailDto().setItemId(medicationDispense.getMedicationId()) + .setLotNumber(medicationDispense.getLotNumber()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION)); + // 使用逗号分割追溯码并转换为List + if (medicationDispense.getTraceNo() != null) { String[] traceNoList = medicationDispense.getTraceNo().split(CommonConstants.Common.COMMA); for (String item : traceNoList) { traceNoManage = new TraceNoManage(); @@ -318,95 +619,62 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe tracesNoManageList.add(traceNoManage); } } - // 药品发放更新 - medicationDispenseService.updateBatchById(medDispenseList); } - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - - // 耗材发药信息查询 - List devDispenseList = deviceDispenseService - .list(new LambdaQueryWrapper().in(DeviceDispense::getId, devDispenseIdList)); - if (devDispenseList != null) { - if (devDispenseList.stream().map(DeviceDispense::getStatusEnum) - .anyMatch(x -> x.equals(DispenseStatus.COMPLETED.getValue()))) { - throw new ServiceException("耗材已发放,请勿重复发放"); - } else { - for (DeviceDispense deviceDispense : devDispenseList) { + // 药品发放更新 + medicationDispenseService.updateBatchById(dispenseList); + // 汇总发放更新 + if (summaryFlag) { + List requestId = supplyRequestService.getSupplyByBusNo(dispenseMedicineList.get(0).getBusNo()) + .stream().map(SupplyRequest::getId).collect(Collectors.toList()); + List supplyDeliveryList = supplyDeliveryService.selectByRequestIdList(requestId); + for (SupplyDelivery supplyDelivery : supplyDeliveryList) { // 药品发放状态 - deviceDispense.setStatusEnum(DispenseStatus.COMPLETED.getValue()); - // 发药数量 - deviceDispense.setDispenseQuantity(deviceDispense.getQuantity()); + supplyDelivery.setStatusEnum(DispenseStatus.COMPLETED.getValue()); // 发药时间 - deviceDispense.setDispenseTime(now); + supplyDelivery.setOccurrenceTime(DateUtils.getNowDate()); // 发药人 - deviceDispense.setPerformerId(SecurityUtils.getLoginUser().getPractitionerId()); - // 药品追溯码 - deviceDispense.setTraceNo(devTraceNoMap.get(deviceDispense.getId())); - // todo 下面注释的代码是从耗材发放copy过来的,不知道要不要用 - // // 发药人(长大写死发耗材人) - // deviceDispense.setPerformerId(CommonConstants.CCU.DisDeviceDoctor); - // // 根据数量设置追溯码 - // deviceDispense.setTraceNo(String.join(CommonConstants.Common.COMMA, - // Collections.nCopies(deviceDispense.getQuantity(), CommonConstants.Common.DEV_TRACE_NO))); - - // todo 耗材追溯码待定 - // 使用逗号分割追溯码并转换为List - String[] traceNoList = deviceDispense.getTraceNo().split(CommonConstants.Common.COMMA); - for (String item : traceNoList) { - traceNoManage = new TraceNoManage(); - // 追溯码处理 - traceNoManage.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION) - // 项目id - .setItemId(deviceDispense.getDeviceDefId()) - // 仓库类型 - .setLocationTypeEnum(LocationForm.WAREHOUSE.getValue()) - // 仓库 - .setLocationId(deviceDispense.getLocationId()) - // 产品批号 - .setLotNumber(deviceDispense.getLotNumber()) - // 追溯码 - .setTraceNo(item) - // 追溯码状态 - .setStatusEnum(TraceNoStatus.OUT.getValue()) - // 追溯码单位 - .setUnitCode(deviceDispense.getUnitCode()) - // 操作类型 - .setOperationType(SupplyType.DISPENSE_MEDICATION.getValue()); - tracesNoManageList.add(traceNoManage); - } + supplyDelivery.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); } - // 耗材发放更新 - deviceDispenseService.updateBatchById(devDispenseList); + supplyDeliveryService.updateBatchById(supplyDeliveryList); + List supplyRequestList = supplyRequestService.selectByIdList(requestId); + for (SupplyRequest supplyRequest : supplyRequestList) { + supplyRequest.setStatusEnum(DispenseStatus.COMPLETED.getValue()); + } + supplyRequestService.updateBatchById(supplyRequestList); } + // } } else { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } - - // 供应申请表更新 - supplyRequestService.updateCompletedStatusBatch(requestIdList); - - // 供应发放表更新 - supplyDeliveryService.updateCompletedStatusBatch(deliveryIdList); - // 库存更新 - iInventoryItemService.updateBatchById(inventoryItemList); - + inventoryItemService.updateBatchById(inventoryItemList); // 追溯码管理表数据追加 - boolean result = traceNoManageService.saveBatch(tracesNoManageList); - if (!result) { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - - // todo 医保进销存 不知道怎么改 + traceNoManageService.saveBatch(tracesNoManageList); // 返回信息 String returnMsg = null; + List uploadFailedNoList; // 调用医保商品销售接口 String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 if (Whether.YES.getCode().equals(ybSwitch)) { - List uploadFailedNoList = - westernMedicineDispenseAppServiceImpl.ybMedicineIntegrated(medDispenseIdList, null); + // 设置进销存参数 + List medicationDefinitions = medicationDefinitionService.listByIds( + supplyItemDetailList.stream().map(SupplyItemDetailDto::getItemId).collect(Collectors.toList())); + // 用itemId分组 + Map medicationMap = medicationDefinitions.stream() + .collect(Collectors.toMap(MedicationDefinition::getId, Function.identity())); + // 设置库存变更参数 + for (SupplyItemDetailDto dto : supplyItemDetailList) { + if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(dto.getItemTable())) { + MedicationDefinition med = medicationMap.get(dto.getItemId()); + if (med != null) { + dto.setItemBusNo(med.getBusNo()).setPartPercent(med.getPartPercent()).setRxFlag(med.getRxFlag()) + .setYbNo(med.getYbNo()); + } + } + } + uploadFailedNoList = westernMedicineDispenseAppService.ybMedicineIntegrated(medDispenseIdList, null); + uploadFailedNoList = receiptApprovalAppService.ybInventoryIntegrated(supplyItemDetailList, + YbInvChgType.OTHER_OUT, DateUtils.getNowDate()); if (uploadFailedNoList != null) { returnMsg = "3505商品销售上传错误,错误项目编码" + uploadFailedNoList; } else { @@ -419,102 +687,269 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe /** * 作废 * - * @param deliveryIdList 供应发放id - * @param notPerformedReasonEnum 未发原因 + * @param dispenseMedicineList 作废信息 * @return 处理结果 */ @Override - public R dispenseCancel(List deliveryIdList, Integer notPerformedReasonEnum) { - // 获取供应发放信息列表 - List supplyDeliveryInfoList = supplyDeliveryService.selectByIdList(deliveryIdList); - List supplyRequestInfoList; - // 耗材发放ID列表 - List devDispenseIdList = new ArrayList<>(); - // 药品发放ID列表 - List medDispenseIdList = new ArrayList<>(); - List idList; - String[] idArray; - if (supplyDeliveryInfoList != null) { - // 供应申请idList - List requestIdList = supplyDeliveryInfoList.stream().map(SupplyDelivery::getRequestId).toList(); - // 获取供应发放信息列表 - supplyRequestInfoList = supplyRequestService.selectByIdList(requestIdList); - for (SupplyDelivery item : supplyDeliveryInfoList) { - // 按英文逗号分割字符串,得到数组 - idArray = item.getBasedOnIds().split(CommonConstants.Common.COMMA); - // 流式处理:过滤空值、去除空格、转换为Long - idList = Arrays.stream(idArray).map(String::trim) // 去除每个元素前后的空格 - .filter(str -> !str.isEmpty()) // 过滤空字符串(如连续逗号导致的空值) - .map(Long::parseLong) // 转换为Long类型 - .toList(); // 收集为List - // 设置发放ID列表,追溯码映射 - if (item.getBasedOnTable().equals(CommonConstants.TableName.MED_MEDICATION_DISPENSE)) { - // 耗材发放ID列表 - devDispenseIdList.addAll(idList); - } else { - // 药品发放ID列表 - medDispenseIdList.addAll(idList); - } - } - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + public R dispenseCancel(List dispenseMedicineList) { + // 汇总状态更新标志 + boolean summaryFlag = false; + // 获取发药单id列表 + List medDispenseIdList = + dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); + + if (medDispenseIdList.isEmpty()) { + List busNoList = + dispenseMedicineList.stream().map(DispenseItemDto::getBusNo).collect(Collectors.toList()); + medDispenseIdList = medicationDispenseService.getMedDispenseBySummaryNo(busNoList).stream() + .map(MedicationDispense::getId).toList(); + summaryFlag = true; } - Date now = DateUtils.getNowDate(); - - // 获取发药单id列表 - List medDispenseInfoList = medicationDispenseService.selectByIdList(medDispenseIdList); - if (medDispenseInfoList != null) { - for (MedicationDispense medicationDispense : medDispenseInfoList) { + // 药品发药信息查询 + List dispenseList = medicationDispenseService + .list(new LambdaQueryWrapper().in(MedicationDispense::getId, medDispenseIdList)); + if (dispenseList != null) { + for (MedicationDispense medicationDispense : dispenseList) { // 药品发放状态 medicationDispense.setStatusEnum(DispenseStatus.DECLINED.getValue()); // 未发药原因 - medicationDispense.setNotPerformedReasonEnum(notPerformedReasonEnum); + medicationDispense.setNotPerformedReasonEnum(dispenseMedicineList.get(0).getNotPerformedReasonEnum()); // 状态变更时间 - medicationDispense.setStatusChangedTime(now); + medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); } // 药品发放更新 - medicationDispenseService.updateBatchById(medDispenseInfoList); - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - - // 获取发耗材单id列表 - List devDispenseInfoList = deviceDispenseService.listByIds(devDispenseIdList); - if (devDispenseInfoList != null) { - for (DeviceDispense deviceDispense : devDispenseInfoList) { - // 耗材发放状态 - deviceDispense.setStatusEnum(DispenseStatus.DECLINED.getValue()); - // 未发药原因 - deviceDispense.setNotPerformedReasonEnum(notPerformedReasonEnum); + medicationDispenseService.updateBatchById(dispenseList); + // 汇总发放更新 + if (summaryFlag) { + List requestId = supplyRequestService.getSupplyByBusNo(dispenseMedicineList.get(0).getBusNo()) + .stream().map(SupplyRequest::getId).collect(Collectors.toList()); + List supplyDeliveryList = supplyDeliveryService.selectByRequestIdList(requestId); + for (SupplyDelivery supplyDelivery : supplyDeliveryList) { + // 药品发放状态 + supplyDelivery.setStatusEnum(DispenseStatus.DECLINED.getValue()); + } + supplyDeliveryService.updateBatchById(supplyDeliveryList); } - // 耗材发放更新 - deviceDispenseService.updateBatchById(devDispenseInfoList); } else { return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); } - - // 更新供应发放信息 - for (SupplyDelivery deviceDispense : supplyDeliveryInfoList) { - // 状态 - deviceDispense.setStatusEnum(DispenseStatus.DECLINED.getValue()); - } - // 更新 - supplyDeliveryService.updateBatchById(supplyDeliveryInfoList); - - // 更新供应申请信息 - if (supplyRequestInfoList != null) { - for (SupplyRequest deviceDispense : supplyRequestInfoList) { - // 状态 - deviceDispense.setStatusEnum(DispenseStatus.DECLINED.getValue()); - } - // 更新 - supplyRequestService.updateBatchById(supplyRequestInfoList); - } else { - return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); - } - return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); } + /** + * 退药处理 + * + * @param dispenseMedicineList 退药清单 + * @return 处理结果 + */ + @Override + public R medicineReturn(List dispenseMedicineList) { + if (dispenseMedicineList == null || dispenseMedicineList.isEmpty()) { + return R.ok(); + } + + // 汇总状态更新标志 + boolean summaryFlag = false; + // 获取发药单id列表 + List medDispenseIdList = + dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); + + if (medDispenseIdList.stream().allMatch(Objects::isNull)) { + List busNoList = + dispenseMedicineList.stream().map(DispenseItemDto::getBusNo).collect(Collectors.toList()); + medDispenseIdList = medicationDispenseService.getMedDispenseBySummaryNo(busNoList).stream() + .map(MedicationDispense::getId).toList(); + summaryFlag = true; + } + + // 退药请求列表 + List returnMedicineList = new ArrayList<>(); + // 追溯码列表 + List traceNoManageList = new ArrayList<>(); + TraceNoManage traceNoManage; + + medDispenseIdList.forEach(dispenseId -> { + MedicationDispense medicationDispense = medicationDispenseService.getById(dispenseId); + returnMedicineList + .add(new ReturnMedicineDto().setDispenseId(dispenseId).setRequestId(medicationDispense.getMedReqId())); + }); + + // 获取药品退药请求id列表 + List medRequestIdList = + returnMedicineList.stream().map(ReturnMedicineDto::getRequestId).collect(Collectors.toList()); + + if (!medRequestIdList.isEmpty()) { + // 药品已退药信息查询 + List refundList = medicationDispenseService.list( + new LambdaQueryWrapper().in(MedicationDispense::getMedReqId, medRequestIdList)); + if (refundList != null) { + if (refundList.stream().map(MedicationDispense::getStatusEnum) + .anyMatch(x -> x.equals(DispenseStatus.REFUNDED.getValue()))) { + throw new ServiceException("药品已退药,请勿重复退药"); + } + } + } + + // 退药单列表 + List medicationRefundList = new ArrayList<>(); + List supplyItemDetailList = new ArrayList<>(); + if (!medDispenseIdList.isEmpty()) { + // 药品已发放信息查询 + List medicationDispenseList = medicationDispenseService + .list(new LambdaQueryWrapper().in(MedicationDispense::getId, medDispenseIdList)); + // 根据发药单对应生成退药单 + for (MedicationDispense medicationDispense : medicationDispenseList) { + // 退药的药品请求id + for (ReturnMedicineDto returnMedicineDto : returnMedicineList) { + if (returnMedicineDto.getDispenseId().equals(medicationDispense.getId())) { + medicationDispense.setMedReqId(returnMedicineDto.getRequestId()); + } + } + // 药品发放编码 + medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4)); + // 退药状态 + medicationDispense.setStatusEnum(DispenseStatus.REFUNDED.getValue()); + // 状态变更时间 + medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); + // 退药时间 + medicationDispense.setDispenseTime(DateUtils.getNowDate()); + // 退药人 + medicationDispense.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); + medicationDispense.setId(null); + medicationRefundList.add(medicationDispense); + // 设置库存变更参数 + supplyItemDetailList.add(new SupplyItemDetailDto() + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) + .setItemId(medicationDispense.getMedicationId()).setLotNumber(medicationDispense.getLotNumber())); + if (medicationDispense.getTraceNo() != null) { + // 使用逗号分割追溯码并转换为List + String[] traceNoList = medicationDispense.getTraceNo().split(CommonConstants.Common.COMMA); + for (String item : traceNoList) { + traceNoManage = new TraceNoManage(); + // 追溯码处理 + traceNoManage.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) + // 项目id + .setItemId(medicationDispense.getMedicationId()) + // 仓库类型 + .setLocationTypeEnum(null) + // 仓库 + .setLocationId(medicationDispense.getLocationId()) + // 仓位 + .setLocationStoreId(null) + // 产品批号 + .setLotNumber(medicationDispense.getLotNumber()) + // 追溯码 + .setTraceNo(item) + // 追溯码状态 + .setStatusEnum(TraceNoStatus.IN.getValue()) + // 追溯码单位 + .setUnitCode(medicationDispense.getUnitCode()) + // 操作类型 + .setOperationType(SupplyType.RETURN_MEDICATION.getValue()); + traceNoManageList.add(traceNoManage); + } + } + } + medicationDispenseService.saveBatch(medicationRefundList); + // 药品退药请求状态变更(待退药→已完成) + medicationRequestService.updateCompletedStatusBatch(medRequestIdList, null, null); + // 汇总退药更新 + if (summaryFlag) { + List requestId = supplyRequestService.getSupplyByBusNo(dispenseMedicineList.get(0).getBusNo()) + .stream().map(SupplyRequest::getId).collect(Collectors.toList()); + List supplyDeliveryList = supplyDeliveryService.selectByRequestIdList(requestId); + for (SupplyDelivery supplyDelivery : supplyDeliveryList) { + // 药品发放状态 + supplyDelivery.setStatusEnum(DispenseStatus.REFUNDED.getValue()); + // 发药时间 + supplyDelivery.setOccurrenceTime(DateUtils.getNowDate()); + // 发药人 + supplyDelivery.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); + } + supplyDeliveryService.updateBatchById(supplyDeliveryList); + List supplyRequestList = supplyRequestService.selectByIdList(requestId); + for (SupplyRequest supplyRequest : supplyRequestList) { + supplyRequest.setStatusEnum(DispenseStatus.REFUNDED.getValue()); + } + supplyRequestService.updateBatchById(supplyRequestList); + } + } + + List inventoryItemList = new ArrayList<>(); + // 获取库存信息 + List inventoryList = + returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + + if (inventoryList != null && !inventoryList.isEmpty()) { + // 设置库存数量 + for (UnDispenseInventoryDto inventory : inventoryList) { + // 库存表项目设定 + InventoryItem inventoryItem = new InventoryItem(); + // id + inventoryItem.setId(inventory.getInventoryId()); + // 库存数量 + if (inventory.getDispenseUnit().equals(inventory.getInventoryUnitCode())) { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)+待退数量 + inventoryItem.setQuantity(inventory.getInventoryQuantity().add(inventory.getDispenseQuantity())); + } else { + // 当前库存数量(拆零单位)=当前库存数量(拆零单位)+退药数量(拆零比×待退数量) + inventoryItem.setQuantity(inventory.getInventoryQuantity() + .add(inventory.getPartPercent().multiply(inventory.getDispenseQuantity()))); + } + inventoryItemList.add(inventoryItem); + } + // 库存更新 + iInventoryItemService.updateBatchById(inventoryItemList); + // 追溯码管理表数据追加 + traceNoManageService.saveBatch(traceNoManageList); + } + + // 返回信息 + String returnMsg = null; + List uploadFailedNoList; + // 调用医保商品销售退货接口 + String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关 + if (Whether.YES.getCode().equals(ybSwitch)) { + List medicationDefinitions = new ArrayList<>(); + if (!medicationRefundList.isEmpty()) { + // 设置进销存参数 + medicationDefinitions = medicationDefinitionService.listByIds(supplyItemDetailList.stream() + .filter(x -> x.getItemTable().equals(CommonConstants.TableName.MED_MEDICATION_DEFINITION)) + .map(SupplyItemDetailDto::getItemId).collect(Collectors.toList())); + } + + // 创建映射表,添加空集合保护 + Map medicationMap = + medicationDefinitions != null ? medicationDefinitions.stream().filter(Objects::nonNull) + .collect(Collectors.toMap(MedicationDefinition::getId, Function.identity())) : new HashMap<>(); + + // 设置库存变更参数,添加完整判空 + for (SupplyItemDetailDto dto : supplyItemDetailList) { + if (dto == null) + continue; + if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(dto.getItemTable())) { + if (dto.getItemId() != null) { + MedicationDefinition med = medicationMap.get(dto.getItemId()); + if (med != null) { + dto.setItemBusNo(med.getBusNo()).setPartPercent(med.getPartPercent()) + .setRxFlag(med.getRxFlag()).setYbNo(med.getYbNo()); + } + } + } + } + uploadFailedNoList = returnMedicineAppService.ybReturnIntegrated(medDispenseIdList, null); + uploadFailedNoList = receiptApprovalAppService.ybInventoryIntegrated(supplyItemDetailList, + YbInvChgType.OTHER_OUT, DateUtils.getNowDate()); + if (uploadFailedNoList != null) { + returnMsg = "3506商品销售退货上传错误,错误项目编码" + uploadFailedNoList; + } else { + returnMsg = "3506商品销售退货上传成功"; + } + } + // 返回退药成功信息 + return R.ok(returnMsg, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"退药"})); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java index d5b30dfa..d3663509 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java @@ -177,7 +177,7 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi // 构建查询条件 QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey, - new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.idCard, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IdCard, CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)), request); // 查询就诊病人列表 @@ -249,40 +249,43 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi List medDispenseIdList = dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList, - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + List inventoryList = + returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); // 按每个药品分组 - Map> groupedByItemId = - inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId)); // 遍历每个分组校验库存状态 - for (Map.Entry> entry : groupedByItemId.entrySet()) { - List groupItems = entry.getValue(); - if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum) .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { // 库存停供校验 return R.fail(groupItems.get(0).getItemName() + "库存已停供"); } } if (!inventoryList.isEmpty()) { - for (InventoryDto inventoryDto : inventoryList) { - if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { + for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) { // 库存数量判定 - if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { + if (unDispenseInventoryDto.getDispenseUnit() + .equals(unDispenseInventoryDto.getInventoryUnitCode())) { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity() + .subtract(unDispenseInventoryDto.getQuantity()); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } } else { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - BigDecimal quantity = inventoryDto.getInventoryQuantity() - .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract( + unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity())); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } } } @@ -332,46 +335,50 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi // 获取发药单id列表 List medDispenseIdList = dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList()); - // 获取库存信息 - List inventoryList = returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList, - CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); + + // 获取药品发放库存信息 + List inventoryList = + returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList, + CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION); // 按每个药品分组 - Map> groupedByItemId = - inventoryList.stream().collect(Collectors.groupingBy(InventoryDto::getItemId)); + Map> groupedByItemId = + inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId)); // 遍历每个分组校验库存状态 - for (Map.Entry> entry : groupedByItemId.entrySet()) { - List groupItems = entry.getValue(); - if (groupItems.stream().map(InventoryDto::getInventoryStatusEnum) + for (Map.Entry> entry : groupedByItemId.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum) .allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) { // 库存停供校验 return R.fail(groupItems.get(0).getItemName() + "库存已停供"); } } if (!inventoryList.isEmpty()) { - for (InventoryDto inventoryDto : inventoryList) { - if (PublicationStatus.ACTIVE.getValue().equals(inventoryDto.getInventoryStatusEnum())) { + for (UnDispenseInventoryDto unDispenseInventoryDto : inventoryList) { + if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())) { InventoryItem inventoryItem = new InventoryItem(); // 库存数量判定 - if (inventoryDto.getDispenseUnit().equals(inventoryDto.getInventoryUnitCode())) { + if (unDispenseInventoryDto.getDispenseUnit() + .equals(unDispenseInventoryDto.getInventoryUnitCode())) { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量 - BigDecimal quantity = inventoryDto.getInventoryQuantity().subtract(inventoryDto.getQuantity()); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity() + .subtract(unDispenseInventoryDto.getQuantity()); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); } } else { // 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量) - BigDecimal quantity = inventoryDto.getInventoryQuantity() - .subtract(inventoryDto.getPartPercent().multiply(inventoryDto.getQuantity())); + BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract( + unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity())); // 库存数量判定 if (quantity.compareTo(BigDecimal.ZERO) < 0) { // 库存数量不足 - return R.fail(inventoryDto.getItemName() + "当前库存数量不足"); + return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足"); } else { - inventoryItem.setId(inventoryDto.getInventoryId()).setQuantity(quantity); + inventoryItem.setId(unDispenseInventoryDto.getInventoryId()).setQuantity(quantity); } } inventoryItemList.add(inventoryItem); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicationDetailsController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicationDetailsController.java index 4d3aed2d..7bdebcef 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicationDetailsController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/MedicationDetailsController.java @@ -1,7 +1,9 @@ package com.openhis.web.pharmacymanage.controller; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import com.openhis.web.pharmacymanage.appservice.impl.MedicationDetailsAppServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -115,4 +117,14 @@ public class MedicationDetailsController { // return medicationDetailsAppService.getMedRunningAccountPage(medDetailsSearchParam, pageNo, pageSize, searchKey, // request); // } + @GetMapping(value = "/excel-out") + public void exportExcel(MedDetailsSearchParam medDetailsSearchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, + HttpServletRequest request, HttpServletResponse response) { + medicationDetailsAppService.makeExcelFile(medDetailsSearchParam, pageNo, pageSize, searchKey, response, request); + + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java index 93058a21..e9722233 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/ReturnMedicineController.java @@ -2,6 +2,7 @@ package com.openhis.web.pharmacymanage.controller; import java.util.List; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +28,7 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class ReturnMedicineController { - @Autowired + @Resource public IReturnMedicineAppService returnMedicineAppService; /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/SummaryDispenseMedicineController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/SummaryDispenseMedicineController.java index 4be5f20f..7c1bd1d4 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/SummaryDispenseMedicineController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/SummaryDispenseMedicineController.java @@ -4,16 +4,20 @@ import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam; +import com.openhis.web.pharmacymanage.dto.*; import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; import com.openhis.web.pharmacymanage.appservice.ISummaryDispenseMedicineAppService; -import com.openhis.web.pharmacymanage.dto.MedicineSummarySearchParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; + /** * 住院汇总发药 * @@ -40,7 +44,63 @@ public class SummaryDispenseMedicineController { } /** - * 住院药品汇总发药单查询 + * 分页查询住院病人列表 + * + * @param admissionPageParam 查询条件 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 病人列表 + */ + @GetMapping("/encounter-list") + public R getEncounterInfoList(AdmissionPageParam admissionPageParam, String startTime, String endTime, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return medicineSummaryDispenseService.getEncounterInfoListPage(admissionPageParam, startTime, endTime, pageNo, + pageSize, searchKey, request); + } + + /** + * 住院汇总药品 + * + * @param searchParam 查询信息 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @return 药品汇总 + */ + @GetMapping("/medication_summary-list") + public R getSummaryMedicationInfo(MedicineSummarySearchParam searchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { + return medicineSummaryDispenseService.getSummaryMedicationInfo(searchParam, pageNo, pageSize); + } + + /** + * 住院汇总发药单 + * + * @param searchParam 查询条件 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + * @return 汇总单汇总 + */ + @GetMapping("/from_summary-list") + public R getSummaryFromInfo(FromSummarySearchParam searchParam, String startTime, String endTime, + String searchKey, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return medicineSummaryDispenseService.getSummaryFromInfo(searchParam, startTime, endTime, searchKey, pageNo, + pageSize, request); + } + + /** + * 住院药品汇总发药单详细 * * @param searchParam 查询条件 * @param searchKey 模糊查询关键字 @@ -48,35 +108,77 @@ public class SummaryDispenseMedicineController { * @param pageSize 查询条数 * @param request 请求数据 */ - @GetMapping("/medication_summary-list") - public R getMedicationSummaryInfo(MedicineSummarySearchParam searchParam, String searchKey, + @GetMapping("/from-list") + public R getFromInfo(FromSearchParam searchParam, String searchKey, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { - return medicineSummaryDispenseService.getMedicationSummaryInfo(searchParam, searchKey, pageNo, pageSize, - request); + return medicineSummaryDispenseService.getOrderInfo(searchParam, searchKey, pageNo, pageSize, request); } /** - * 汇总发药 + * 药品发药 * - * @param searchParam 条件 + * @param dispenseMedicineList 发药信息 * @return 处理结果 */ @PutMapping("/summary-dispense-medicine") - public R SummaryDispenseMedicine(@RequestBody List searchParam) { - return medicineSummaryDispenseService.SummaryDispenseMedicine(searchParam); + public R SummaryDispenseMedicine(@RequestBody List dispenseMedicineList) { + return medicineSummaryDispenseService.SummaryDispenseMedicine(dispenseMedicineList); } /** * 作废 * - * @param deliveryIdList 供应发放id - * @param notPerformedReasonEnum 未发原因 + * @param dispenseMedicineList 作废信息 * @return 处理结果 */ @PutMapping("/dispense-cancel") - public R dispenseCancel(@RequestBody List deliveryIdList, Integer notPerformedReasonEnum) { - return medicineSummaryDispenseService.dispenseCancel(deliveryIdList, notPerformedReasonEnum); + public R dispenseCancel(@RequestBody List dispenseMedicineList) { + return medicineSummaryDispenseService.dispenseCancel(dispenseMedicineList); } + /** + * 退药处理 + * + * @param dispenseMedicineList 退药清单 + * @return 处理结果 + */ + @PutMapping("/medicine-return") + public R medicineReturn(@RequestBody List dispenseMedicineList) { + return medicineSummaryDispenseService.medicineReturn(dispenseMedicineList); + } + + /** + * 住院发药 + * + * @param searchParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + */ + + @GetMapping(value = "/excel-out") + public void excelOut(MedicineSummarySearchParam searchParam, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10000") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, + HttpServletRequest request,HttpServletResponse response) { + medicineSummaryDispenseService.makeExcelFile(searchParam, pageNo, pageSize, searchKey, request, response); + + } + /** + * 住院药品汇总 + * + * @param searchParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param request 请求数据 + */ + + + + + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/WesternMedicineDispenseController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/WesternMedicineDispenseController.java index 4c3fe659..30bd1e25 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/WesternMedicineDispenseController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/controller/WesternMedicineDispenseController.java @@ -2,6 +2,7 @@ package com.openhis.web.pharmacymanage.controller; import java.util.List; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +29,7 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class WesternMedicineDispenseController { - @Autowired + @Resource public IWesternMedicineDispenseAppService westernMedicineDispenseService; /** diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseItemDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseItemDto.java index 88064bac..5756b410 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseItemDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/DispenseItemDto.java @@ -27,6 +27,9 @@ public class DispenseItemDto { @JsonSerialize(using = ToStringSerializer.class) private Long dispenseId; + /** 单据号 */ + private String busNo; + /** 追溯码 */ private String traceNo; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSearchParam.java new file mode 100644 index 00000000..a2e8a172 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSearchParam.java @@ -0,0 +1,12 @@ +package com.openhis.web.pharmacymanage.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class FromSearchParam implements Serializable { + + /** 单据号 */ + private String busNo; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSummaryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSummaryDto.java new file mode 100644 index 00000000..585934ce --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSummaryDto.java @@ -0,0 +1,36 @@ +package com.openhis.web.pharmacymanage.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.util.Date; + +/** + * 汇总发药单信息 + * + */ +@Data +public class FromSummaryDto { + + /** 单据号 */ + private String busNo; + + /** 申请时间 */ + private Date applyTime; + + /** 领药人 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long applicantId; + private String applicantName; + + /** 发放地点 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long sourceLocationId; + private String sourceLocationName; + + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSummarySearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSummarySearchParam.java new file mode 100644 index 00000000..a520089a --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/FromSummarySearchParam.java @@ -0,0 +1,16 @@ +package com.openhis.web.pharmacymanage.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class FromSummarySearchParam implements Serializable { + + /** 单据号 */ + private String busNo; + + /** 发药状态 */ + private Integer statusEnum; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ItemDispenseOrderDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ItemDispenseOrderDto.java index 6f7f8a4a..82aaa00d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ItemDispenseOrderDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/ItemDispenseOrderDto.java @@ -6,6 +6,7 @@ package com.openhis.web.pharmacymanage.dto; import java.math.BigDecimal; import java.util.Date; +import com.core.common.annotation.Excel; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -57,26 +58,37 @@ public class ItemDispenseOrderDto { /** * 发放药房 */ + @Excel(name = "发放药房",sort = 3) private String locationName; /** * 批次号 */ + @Excel(name = "批次号",sort = 4) private String lotNumber; /** * 科室 */ + @Excel(name = "科室",sort = 5) private String departmentName; + /** + * 开单医生ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long doctorId; + /** * 开单医生 */ + @Excel(name = "开单医生",sort = 6) private String doctorName; /** * 发药医生 */ + @Excel(name = "发药医生",sort = 7) private String dispenseDoctorName; /** @@ -84,37 +96,46 @@ public class ItemDispenseOrderDto { */ @Dict(dictCode = "med_category_code") private String itemType; + @Excel(name = "项目类型",sort = 8) private String itemType_dictText; + + /** * 发药状态 */ private Integer statusEnum; + @Excel(name = "发药状态",sort = 9) private String statusEnum_enumText; /** * 诊断名称 */ + @Excel(name = "诊断名称",sort = 10) private String conditionName; /** * 处方号 */ + @Excel(name = "处方号",sort = 11) private String prescriptionNo; /** * 项目名称 */ + @Excel(name = "项目名称",sort = 1,width = 30) private String itemName; /** * 规格 */ + @Excel(name = "规格",sort = 2,width = 30) private String totalVolume; /** * 单次剂量 */ + @Excel(name = "单次剂量",sort = 12) private BigDecimal dose; /** @@ -122,6 +143,7 @@ public class ItemDispenseOrderDto { */ @Dict(dictCode = "rate_code") private String rateCode; + @Excel(name = "用药频次",sort = 13) private String rateCode_dictText; /** @@ -129,45 +151,58 @@ public class ItemDispenseOrderDto { */ @Dict(dictCode = "method_code") private String methodCode; + @Excel(name = "用法",sort = 14) private String methodCode_dictText; + + /** * 剂量单位 */ @Dict(dictCode = "unit_code") private String doseUnitCode; + @Excel(name = "剂量单位",sort = 15) private String doseUnitCode_dictText; + + /** * 单位 */ @Dict(dictCode = "unit_code") private String unitCode; + @Excel(name = "单位",sort = 16) private String unitCode_dictText; + /** * 单次发药数 */ + @Excel(name = "单次发药数",sort = 17) private Integer dispensePerQuantity; /** * 每次发药供应天数 */ + @Excel(name = "每次发药供应天数",sort = 18) private Integer dispensePerDuration; /** * 数量 */ + @Excel(name = "数量",sort = 19) private Integer quantity; /** * 单价 */ + @Excel(name = "单价",sort = 20) private BigDecimal unitPrice; /** * 金额 */ + @Excel(name = "金额",sort = 21) private BigDecimal totalPrice; /** * 组合号 @@ -179,28 +214,35 @@ public class ItemDispenseOrderDto { * 就诊NO */ @JsonSerialize(using = ToStringSerializer.class) + @Excel(name = "就诊NO",sort = 24) private String encounterBusNo; /** 开具日期 */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "开具日期",sort = 25, dateFormat = "yyyy-MM-dd HH:mm:ss",width = 25) private Date reqAuthoredTime; /** 皮试标志 */ + @Excel(name = "皮试标志",sort = 26) private Integer skinTestFlag; /** 中药标识 */ + @Excel(name = "中药标识",sort = 27) private Integer tcmFlag; /** 所在表 */ + @Excel(name = "所在表",sort = 28,width = 30) private String itemTable; /** * 生产厂家 */ + @Excel(name = "生产厂家",sort = 22,width = 35) private String manufacturerText; /** * 追溯码 */ + @Excel(name = "追溯码",sort = 23) private String traceNo; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailedAccountPageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailedAccountPageDto.java index 67922669..389588a0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailedAccountPageDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailedAccountPageDto.java @@ -1,5 +1,9 @@ package com.openhis.web.pharmacymanage.dto; +import java.math.BigDecimal; +import java.util.Date; + +import com.core.common.annotation.Excel; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.annotation.Dict; @@ -7,9 +11,6 @@ import com.openhis.common.annotation.Dict; import lombok.Data; import lombok.experimental.Accessors; -import java.math.BigDecimal; -import java.util.Date; - /** * 发药明细账分页列表 dto * @@ -19,7 +20,6 @@ import java.util.Date; @Data @Accessors(chain = true) public class MedDetailedAccountPageDto { - /** 门诊号 */ private String outpatientNo; @@ -29,29 +29,54 @@ public class MedDetailedAccountPageDto { /** 患者 */ private String patientName; + /** 项目类别 */ + private String pinYin; + + /** 接收发药数量 */ + @Excel(name = "发药数量") + private String dispenseQuantitystr; + + /** 接收发药金额 */ + @Excel(name = "发药金额") + private String dispensePricestr; + + /** 接收退药数量 */ + @Excel(name = "退药数量") + private String refundQuantitystr; + + /** 接收退药金额 */ + @Excel(name = "退药金额") + private String refundPricestr; + /** 发药人 */ @JsonSerialize(using = ToStringSerializer.class) private String practitionerId; /** 发药人名称 */ + @Excel(name = "发药人") private String practitionerName; /** 药品项目 */ + @Excel(name = "药品项目") private String medicationName; /** 药品拼音 */ private String pyStr; /** 项目编码 */ + @Excel(name = "药品编码") private String busNo; /** 发药编码 */ + @Excel(name = "发药单号") private String dispenseNo; /** 医保编码 */ + @Excel(name = "医保编码") private String ybNo; /** 规格 */ + @Excel(name = "规格") private String totalVolume; /** 发药数量 */ @@ -67,12 +92,15 @@ public class MedDetailedAccountPageDto { private BigDecimal refundPrice; /** 批号 */ + @Excel(name = "生产批号") private String lotNumber; /** 厂商 */ + @Excel(name = "厂家/产地") private String manufacturerText; /** 供应商 */ + @Excel(name = "供应商") private String supplierName; /** 发药单位 */ @@ -86,6 +114,10 @@ public class MedDetailedAccountPageDto { private String refundUnitCode_dictText; /** 发药时间 */ + @Excel(name = "发药时间", dateFormat="yyyy-MM-dd HH:mm:ss") private Date dispenseTime; + /** 项目所在表 */ +// @Excel(name = "项目类别") + private String itemTable; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java index f85cb1da..e0ed7424 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedDetailsSearchParam.java @@ -23,7 +23,6 @@ public class MedDetailsSearchParam { private Long locationId; /** 患者姓名 */ - @Length(max = 2000) private String patientName; /** 发药人 */ @@ -40,4 +39,7 @@ public class MedDetailsSearchParam { /** 门诊住院flg */ private Integer flag; + + /** 项目所在表 */ + private String itemTable; } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedicineSummaryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedicineSummaryDto.java index 9ade4172..3e92522e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedicineSummaryDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedicineSummaryDto.java @@ -4,6 +4,7 @@ package com.openhis.web.pharmacymanage.dto; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -97,7 +98,7 @@ public class MedicineSummaryDto { private String applicantName; /** 申请时间 */ - private Data applyTime; + private Date applyTime; /** * 状态 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedicineSummarySearchParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedicineSummarySearchParam.java index 6d5e13ad..900b118d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedicineSummarySearchParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/MedicineSummarySearchParam.java @@ -21,6 +21,10 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class MedicineSummarySearchParam implements Serializable { + /** 就诊ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + /** 科室 */ @JsonSerialize(using = ToStringSerializer.class) private Long orgId; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InventoryDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/UnDispenseInventoryDto.java similarity index 84% rename from openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InventoryDto.java rename to openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/UnDispenseInventoryDto.java index 270574ff..5a9f7c17 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/InventoryDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/dto/UnDispenseInventoryDto.java @@ -11,14 +11,14 @@ import lombok.Data; import lombok.experimental.Accessors; /** - * 库存信息 + * 待发放库存信息 * * @author yangmo * @date 2025-04-08 */ @Data @Accessors(chain = true) -public class InventoryDto implements Serializable { +public class UnDispenseInventoryDto implements Serializable { /** 库存ID */ private Long inventoryId; @@ -29,6 +29,12 @@ public class InventoryDto implements Serializable { /** 项目ID */ private Long itemId; + /** 批号 */ + private String lotNumber; + + /** 发放药房id */ + private Long locationId; + /** 拆零单位 */ private String inventoryUnitCode; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java index 17dc3dd1..6d237488 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/MedicationDetailsMapper.java @@ -24,12 +24,16 @@ public interface MedicationDetailsMapper { * @param completed 发药状态:已发药 * @param refunded 发药状态:已退药 * @param dispenseEnum 统计类型 + * @param medMedicationDefinition 药品 + * @param admDeviceDefinition 耗材 * @return 门诊人员发药明细表 */ Page selectAmbPractitionerDetailPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb, @Param("completed") Integer completed, @Param("agree") Integer agree, @Param("refunded") Integer refunded, - @Param("dispenseEnum") Integer dispenseEnum, @Param("flg") Integer flg); + @Param("dispenseEnum") Integer dispenseEnum, @Param("flg") Integer flg, + @Param("medMedicationDefinition") String medMedicationDefinition, + @Param("admDeviceDefinition") String admDeviceDefinition); // /** // * 门诊发药明细流水账 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java index d37da68a..5a892280 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/ReturnMedicineMapper.java @@ -11,7 +11,10 @@ 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; -import com.openhis.web.pharmacymanage.dto.*; +import com.openhis.web.pharmacymanage.dto.DispenseInventoryDto; +import com.openhis.web.pharmacymanage.dto.EncounterInfoDto; +import com.openhis.web.pharmacymanage.dto.ReturnMedicineInfoDto; +import com.openhis.web.pharmacymanage.dto.UnDispenseInventoryDto; @Repository public interface ReturnMedicineMapper { @@ -25,7 +28,7 @@ public interface ReturnMedicineMapper { * @return 退药患者分页列表 */ Page selectEncounterInfoListPage(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb); + @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("amb") Integer amb); /** * 申请退药清单查询 @@ -55,7 +58,7 @@ public interface ReturnMedicineMapper { * @param admDeviceDefinition 耗材定义表 * @return 待发药信息 */ - List selectInventoryInfoList(@Param("devDispenseIdList") List devDispenseIdList, + List selectInventoryInfoList(@Param("devDispenseIdList") List devDispenseIdList, @Param("medDispenseIdList") List medDispenseIdList, @Param("medMedicationDefinition") String medMedicationDefinition, @Param("admDeviceDefinition") String admDeviceDefinition); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/SummaryDispenseMedicineMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/SummaryDispenseMedicineMapper.java index 838b4cbc..e3c7037d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/SummaryDispenseMedicineMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/pharmacymanage/mapper/SummaryDispenseMedicineMapper.java @@ -3,6 +3,7 @@ */ package com.openhis.web.pharmacymanage.mapper; +import com.openhis.web.pharmacymanage.dto.FromSearchParam; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -20,12 +21,18 @@ public interface SummaryDispenseMedicineMapper { * * @param page 分页 * @param queryWrapper 查询条件 - * @param medicationDefinition 药品定义 - * @param deviceDefinition 耗材定义 * @return 汇总药品信息 */ Page selectMedicationSummaryInfo(@Param("page") Page page, - @Param(Constants.WRAPPER) QueryWrapper queryWrapper, - @Param("medicationDefinition") String medicationDefinition, @Param("deviceDefinition") String deviceDefinition, - @Param("typeEnum") Integer typeEnum, @Param("categoryEnum") Integer categoryEnum); + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 汇总药品信息列表查询 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 汇总药品信息 + */ + Page selectOrderInfo(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/INurseManageService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/INurseManageService.java new file mode 100644 index 00000000..1a674ab4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/INurseManageService.java @@ -0,0 +1,30 @@ +package com.openhis.web.regdoctorstation.appservice; + +import com.core.common.core.domain.R; + +/** + * Desc: 护士站 业务层 + * @Author raymond + * @Date 15:25 2025/10/27 + * @return + **/ +public interface INurseManageService { + /** + * Desc: 划价确费业务 + * @param + * @Author raymond + * @Date 15:31 2025/10/27 + * @return com.core.common.core.domain.R + **/ + R pricingBusiness(String searchKeyWord); + + /** + * Desc: 医嘱计费业务 + * @param + * @Author raymond + * @Date 15:31 2025/10/27 + * @return com.core.common.core.domain.R + **/ + R medicalDeviceBusiness(); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/ISpecialAdviceAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/ISpecialAdviceAppService.java index d27f6afe..37f6fe93 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/ISpecialAdviceAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/ISpecialAdviceAppService.java @@ -1,10 +1,7 @@ package com.openhis.web.regdoctorstation.appservice; import com.core.common.core.domain.R; -import com.openhis.web.regdoctorstation.dto.NursingOrdersDto; -import com.openhis.web.regdoctorstation.dto.NursingOrdersEncounterDto; -import com.openhis.web.regdoctorstation.dto.NursingOrdersSaveDto; -import com.openhis.web.regdoctorstation.dto.TransferOrganizationParam; +import com.openhis.web.regdoctorstation.dto.*; /** * 特殊医嘱 应用Service @@ -42,4 +39,12 @@ public interface ISpecialAdviceAppService { */ R saveTransferOrganizationOrders(TransferOrganizationParam transferOrganizationParam); + /** + * 保存离院医嘱 + * + * @param leaveHospitalParam 转科离院参数 + * @return 结果 + */ + R saveLeaveHospitalOrders(LeaveHospitalParam leaveHospitalParam); + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java index 8bc51a18..d69d772f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java @@ -1,14 +1,5 @@ package com.openhis.web.regdoctorstation.appservice.impl; -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -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.conditions.update.LambdaUpdateWrapper; @@ -41,8 +32,14 @@ import com.openhis.workflow.domain.ActivityDefinition; import com.openhis.workflow.domain.ServiceRequest; import com.openhis.workflow.service.IActivityDefinitionService; import com.openhis.workflow.service.IServiceRequestService; - import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** * 医嘱管理 应用实现类 @@ -82,25 +79,25 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { * 查询住院患者信息 * * @param regPatientMainInfoDto 住院患者信息 dto - * @param searchKey 模糊查询关键字 - * @param pageNo 当前页 - * @param pageSize 每页多少条 - * @param request 请求 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param request 请求 * @return 住院患者信息 */ @Override public IPage getRegPatientMainInfo(RegPatientMainInfoDto regPatientMainInfoDto, - Integer status, String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { + Integer status, String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) { // 构建查询条件 QueryWrapper queryWrapper = - HisQueryUtils.buildQueryWrapper(regPatientMainInfoDto, searchKey, - new HashSet<>(Arrays.asList("bus_no", "patient_name", "inHospital_org_name", "house_name")), request); + HisQueryUtils.buildQueryWrapper(regPatientMainInfoDto, searchKey, + new HashSet<>(Arrays.asList("bus_no", "patient_name", "inHospital_org_name", "house_name")), request); IPage regPatientMainInfo = adviceManageAppMapper.getRegPatientMainInfo( - new Page<>(pageNo, pageSize), SecurityUtils.getLoginUser().getPractitionerId(), - LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue(), - EncounterActivityStatus.ACTIVE.getValue(), EncounterClass.IMP.getValue(), status, Whether.YES.getValue(), - AccountType.PERSONAL_CASH_ACCOUNT.getCode(), queryWrapper); + new Page<>(pageNo, pageSize), SecurityUtils.getLoginUser().getPractitionerId(), + LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue(), + EncounterActivityStatus.ACTIVE.getValue(), EncounterClass.IMP.getValue(), status, Whether.YES.getValue(), + AccountType.PERSONAL_CASH_ACCOUNT.getCode(), queryWrapper); regPatientMainInfo.getRecords().forEach(e -> { // 性别 e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum())); @@ -114,7 +111,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { * 住院保存医嘱 * * @param regAdviceSaveParam 住院医嘱表单信息 - * @param adviceOpType 医嘱操作类型 + * @param adviceOpType 医嘱操作类型 * @return 结果 */ @Override @@ -138,21 +135,21 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { List regAdviceSaveList = regAdviceSaveParam.getRegAdviceSaveList(); // 药品 List medicineList = regAdviceSaveList.stream() - .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); // 耗材 // List deviceList = regAdviceSaveList.stream() // .filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); // 诊疗活动 List activityList = regAdviceSaveList.stream() - .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); // 保存时,校验临时医嘱库存 if (AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType)) { List tempCheckList = regAdviceSaveList.stream() - .filter(e -> TherapyTimeType.TEMPORARY.getValue().equals(e.getTherapyEnum()) - && !DbOpType.DELETE.getCode().equals(e.getDbOpType()) - && !ItemType.ACTIVITY.getValue().equals(e.getAdviceType())) - .collect(Collectors.toList()); + .filter(e -> TherapyTimeType.TEMPORARY.getValue().equals(e.getTherapyEnum()) + && !DbOpType.DELETE.getCode().equals(e.getDbOpType()) + && !ItemType.ACTIVITY.getValue().equals(e.getAdviceType())) + .collect(Collectors.toList()); List needCheckList = new ArrayList<>(tempCheckList); // 校验库存 String tipRes = adviceUtils.checkInventory(needCheckList); @@ -177,24 +174,24 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { if (AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType) && !regAdviceSaveList.isEmpty()) { // 签发的医嘱id集合 List requestIds = regAdviceSaveList.stream() - .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null) - .collect(Collectors.toList()).stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); + .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null) + .collect(Collectors.toList()).stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); Long encounterId = regAdviceSaveList.get(0).getEncounterId();// 就诊id iChargeItemService.update(new LambdaUpdateWrapper() - .set(ChargeItem::getStatusEnum, ChargeItemStatus.PLANNED.getValue()) - .eq(ChargeItem::getEncounterId, encounterId) - .eq(ChargeItem::getStatusEnum, ChargeItemStatus.DRAFT.getValue()) - .in(ChargeItem::getServiceId, requestIds)); + .set(ChargeItem::getStatusEnum, ChargeItemStatus.PLANNED.getValue()) + .eq(ChargeItem::getEncounterId, encounterId) + .eq(ChargeItem::getStatusEnum, ChargeItemStatus.DRAFT.getValue()) + .in(ChargeItem::getServiceId, requestIds)); } - return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"住院医嘱"})); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"住院医嘱"})); } /** * 处理药品 */ private void handMedication(List medicineList, Date startTime, Date authoredTime, Date curDate, - String adviceOpType, Long organizationId, String signCode) { + String adviceOpType, Long organizationId, String signCode) { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); // 保存操作 @@ -204,34 +201,19 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 删除 List deleteList = medicineList.stream() - .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); for (RegAdviceSaveDto regAdviceSaveDto : deleteList) { iMedicationRequestService.removeById(regAdviceSaveDto.getRequestId()); // 删除已经产生的药品发放信息 iMedicationDispenseService.deleteMedicationDispense(regAdviceSaveDto.getRequestId()); // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.MED_MEDICATION_REQUEST, - regAdviceSaveDto.getRequestId()); + regAdviceSaveDto.getRequestId()); } - - // 当前时间毫秒值 - Long currentTimeMillis = System.currentTimeMillis(); // 签发时统一处理组号 (排除删除操作,包括长期和临时) List exceptDelList = medicineList.stream() - .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); if (is_sign) { - Long i = 1L; - for (RegAdviceSaveDto regAdviceSaveDto : exceptDelList) { - // 输液标记 - if (Whether.YES.getValue().equals(regAdviceSaveDto.getInjectFlag())) { - if (regAdviceSaveDto.getGroupId() == null) { - regAdviceSaveDto.setGroupId(currentTimeMillis + i); - } else { - regAdviceSaveDto.setGroupId(currentTimeMillis + regAdviceSaveDto.getGroupId()); - } - } - i = ++i; - } // 生成住院处方号 regPrescriptionUtils.generatePrescriptionNumbers(exceptDelList); } @@ -240,15 +222,15 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { MedicationRequest longMedicationRequest; // 新增 + 修改 (长期医嘱) List longInsertOrUpdateList = medicineList.stream().filter(e -> TherapyTimeType.LONG_TERM - .getValue().equals(e.getTherapyEnum()) - && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) - .collect(Collectors.toList()); + .getValue().equals(e.getTherapyEnum()) + && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) + .collect(Collectors.toList()); for (RegAdviceSaveDto regAdviceSaveDto : longInsertOrUpdateList) { longMedicationRequest = new MedicationRequest(); longMedicationRequest.setId(regAdviceSaveDto.getRequestId()); // 主键id longMedicationRequest - .setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态 + .setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态 longMedicationRequest.setPrescriptionNo(regAdviceSaveDto.getPrescriptionNo()); // 处方号 longMedicationRequest.setGroupId(regAdviceSaveDto.getGroupId()); // 组号 if (is_sign) { @@ -259,7 +241,8 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { if (is_save) { longMedicationRequest.setEffectiveDoseStart(startTime); // 医嘱开始时间 longMedicationRequest - .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); + .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); + longMedicationRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 longMedicationRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量 longMedicationRequest.setExecuteNum(regAdviceSaveDto.getExecuteNum()); // 执行次数 longMedicationRequest.setUnitCode(regAdviceSaveDto.getUnitCode()); // 请求单位编码 @@ -296,14 +279,14 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { ChargeItem chargeItem; // 新增 + 修改 (临时医嘱) List tempInsertOrUpdateList = medicineList.stream().filter(e -> TherapyTimeType.TEMPORARY - .getValue().equals(e.getTherapyEnum()) - && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) - .collect(Collectors.toList()); + .getValue().equals(e.getTherapyEnum()) + && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) + .collect(Collectors.toList()); for (RegAdviceSaveDto regAdviceSaveDto : tempInsertOrUpdateList) { tempMedicationRequest = new MedicationRequest(); tempMedicationRequest.setId(regAdviceSaveDto.getRequestId()); // 主键id tempMedicationRequest - .setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态 + .setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态 tempMedicationRequest.setPrescriptionNo(regAdviceSaveDto.getPrescriptionNo()); // 处方号 tempMedicationRequest.setGroupId(regAdviceSaveDto.getGroupId()); // 组号 if (is_sign) { @@ -314,7 +297,8 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { if (is_save) { tempMedicationRequest.setEffectiveDoseStart(startTime); // 医嘱开始时间 tempMedicationRequest - .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); + .setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4)); + tempMedicationRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 tempMedicationRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量 tempMedicationRequest.setExecuteNum(regAdviceSaveDto.getExecuteNum()); // 执行次数 tempMedicationRequest.setUnitCode(regAdviceSaveDto.getUnitCode()); // 请求单位编码 @@ -342,26 +326,17 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { tempMedicationRequest.setSortNumber(regAdviceSaveDto.getSortNumber()); // 排序号 } iMedicationRequestService.saveOrUpdate(tempMedicationRequest); - // 第一次保存时,如果药品请求为皮试或输液,自动开立对应绑定的诊疗请求 - if (regAdviceSaveDto.getRequestId() == null) { - if (is_save && (Whether.YES.getValue().equals(regAdviceSaveDto.getSkinTestFlag()) - || Whether.YES.getValue().equals(regAdviceSaveDto.getInjectFlag()))) { - // 查询已经存在的当前数据 - tempMedicationRequest = iMedicationRequestService.getById(tempMedicationRequest.getId()); - adviceUtils.generateActRequestByMedicationFlag(tempMedicationRequest, organizationId, - regAdviceSaveDto); - } - } - // 保存时 处理药品发放 和 保存药品费用项 if (is_save) { // 处理药品发放 - iMedicationDispenseService.handleMedicationDispense(tempMedicationRequest, - regAdviceSaveDto.getDbOpType()); + Long dispenseId = iMedicationDispenseService.handleMedicationDispense(tempMedicationRequest, + regAdviceSaveDto.getDbOpType()); + // 保存药品费用项 chargeItem = new ChargeItem(); chargeItem.setId(regAdviceSaveDto.getChargeItemId()); // 费用项id chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(tempMedicationRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setPrescriptionNo(regAdviceSaveDto.getPrescriptionNo()); // 处方号 chargeItem.setPatientId(regAdviceSaveDto.getPatientId()); // 患者 chargeItem.setContextEnum(regAdviceSaveDto.getAdviceType()); // 类型 @@ -378,6 +353,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { chargeItem.setAccountId(regAdviceSaveDto.getAccountId());// 关联账户ID chargeItem.setConditionId(regAdviceSaveDto.getConditionId()); // 诊断id chargeItem.setEncounterDiagnosisId(regAdviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id + // chargeItem.setDispenseId(dispenseId); // 发放ID chargeItem.setQuantityValue(regAdviceSaveDto.getQuantity()); // 数量 chargeItem.setQuantityUnit(regAdviceSaveDto.getUnitCode()); // 单位 @@ -393,7 +369,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { * 处理诊疗 */ private void handService(List activityList, Date startTime, Date authoredTime, Date curDate, - String adviceOpType, Long organizationId, String signCode) { + String adviceOpType, Long organizationId, String signCode) { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); // 保存操作 @@ -403,26 +379,26 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 删除 List deleteList = activityList.stream() - .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); + .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); for (AdviceSaveDto adviceSaveDto : deleteList) { iServiceRequestService.removeById(adviceSaveDto.getRequestId()); // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, - adviceSaveDto.getRequestId()); + adviceSaveDto.getRequestId()); } // 声明长期医嘱诊疗请求 ServiceRequest longServiceRequest; // 新增 + 修改 (长期医嘱) List longInsertOrUpdateList = activityList.stream().filter(e -> TherapyTimeType.LONG_TERM - .getValue().equals(e.getTherapyEnum()) - && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) - .collect(Collectors.toList()); + .getValue().equals(e.getTherapyEnum()) + && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) + .collect(Collectors.toList()); for (RegAdviceSaveDto regAdviceSaveDto : longInsertOrUpdateList) { longServiceRequest = new ServiceRequest(); longServiceRequest.setId(regAdviceSaveDto.getRequestId()); // 主键id longServiceRequest - .setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue());// 请求状态 + .setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue());// 请求状态 if (is_sign) { longServiceRequest.setAuthoredTime(authoredTime); // 医嘱签发时间 longServiceRequest.setSignCode(signCode); @@ -431,6 +407,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { if (is_save) { longServiceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 longServiceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + longServiceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 longServiceRequest.setQuantity(new BigDecimal("1")); // 请求数量 | 诊疗的长期医嘱数量都是1 longServiceRequest.setUnitCode(regAdviceSaveDto.getUnitCode()); // 请求单位编码 longServiceRequest.setRateCode(regAdviceSaveDto.getRateCode()); // 用药频次 @@ -456,14 +433,14 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 新增 + 修改 (临时医嘱) List tempInsertOrUpdateList = activityList.stream().filter(e -> TherapyTimeType.TEMPORARY - .getValue().equals(e.getTherapyEnum()) - && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) - .collect(Collectors.toList()); + .getValue().equals(e.getTherapyEnum()) + && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) + .collect(Collectors.toList()); for (RegAdviceSaveDto regAdviceSaveDto : tempInsertOrUpdateList) { tempServiceRequest = new ServiceRequest(); tempServiceRequest.setId(regAdviceSaveDto.getRequestId()); // 主键id tempServiceRequest - .setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue());// 请求状态 + .setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue());// 请求状态 if (is_sign) { tempServiceRequest.setAuthoredTime(authoredTime); // 医嘱签发时间 tempServiceRequest.setSignCode(signCode); @@ -472,6 +449,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { if (is_save) { tempServiceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 tempServiceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + tempServiceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 tempServiceRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量 tempServiceRequest.setUnitCode(regAdviceSaveDto.getUnitCode()); // 请求单位编码 tempServiceRequest.setCategoryEnum(regAdviceSaveDto.getCategoryEnum()); // 请求类型 @@ -495,6 +473,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { chargeItem.setId(regAdviceSaveDto.getChargeItemId()); // 费用项id chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(tempServiceRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setPatientId(regAdviceSaveDto.getPatientId()); // 患者 chargeItem.setContextEnum(regAdviceSaveDto.getAdviceType()); // 类型 chargeItem.setEncounterId(regAdviceSaveDto.getEncounterId()); // 就诊id @@ -520,7 +499,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 第一次保存时,处理诊疗套餐的子项信息 if (regAdviceSaveDto.getRequestId() == null) { ActivityDefinition activityDefinition = - iActivityDefinitionService.getById(regAdviceSaveDto.getAdviceDefinitionId()); + iActivityDefinitionService.getById(regAdviceSaveDto.getAdviceDefinitionId()); String childrenJson = activityDefinition.getChildrenJson(); if (childrenJson != null) { // 诊疗子项参数类 @@ -551,29 +530,30 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); // 住院医嘱请求数据 List regRequestBaseInfo = adviceManageAppMapper.getRegRequestBaseInfo(encounterId, null, - CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, - CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode()); + CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, + CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(), + GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 根据 requestId 过滤重复医嘱信息 List distinctList = regRequestBaseInfo.stream() - .collect(Collectors.toMap(RegRequestBaseDto::getRequestId, dto -> dto, (existing, replacement) -> existing // 如果key冲突,保留已存在的(第一条) - )).values().stream().collect(Collectors.toList()); + .collect(Collectors.toMap(RegRequestBaseDto::getRequestId, dto -> dto, (existing, replacement) -> existing // 如果key冲突,保留已存在的(第一条) + )).values().stream().collect(Collectors.toList()); for (RegRequestBaseDto regRequestBaseDto : distinctList) { // 请求状态 regRequestBaseDto.setStatusEnum_enumText( - EnumUtils.getInfoByValue(RequestStatus.class, regRequestBaseDto.getStatusEnum())); + EnumUtils.getInfoByValue(RequestStatus.class, regRequestBaseDto.getStatusEnum())); // 是否皮试 regRequestBaseDto - .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, regRequestBaseDto.getSkinTestFlag())); + .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, regRequestBaseDto.getSkinTestFlag())); // 是否为注射药物 regRequestBaseDto - .setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, regRequestBaseDto.getInjectFlag())); + .setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, regRequestBaseDto.getInjectFlag())); // 收费状态 regRequestBaseDto.setChargeStatus_enumText( - EnumUtils.getInfoByValue(ChargeItemStatus.class, regRequestBaseDto.getChargeStatus())); + EnumUtils.getInfoByValue(ChargeItemStatus.class, regRequestBaseDto.getChargeStatus())); // 治疗类型 regRequestBaseDto.setTherapyEnum_enumText( - EnumUtils.getInfoByValue(TherapyTimeType.class, regRequestBaseDto.getTherapyEnum())); + EnumUtils.getInfoByValue(TherapyTimeType.class, regRequestBaseDto.getTherapyEnum())); } return R.ok(distinctList); } @@ -582,7 +562,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { * 查询历史住院医嘱请求数据 * * @param encounterId 就诊id - * @param patientId 病人id + * @param patientId 病人id * @return 历史住院医嘱请求数据 */ @Override @@ -591,24 +571,25 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); // 住院医嘱请求数据 List regRequestBaseInfo = adviceManageAppMapper.getRegRequestBaseInfo(encounterId, patientId, - CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, - CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode()); + CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST, + CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode(), + GenerateSource.DOCTOR_PRESCRIPTION.getValue()); for (RegRequestBaseDto regRequestBaseDto : regRequestBaseInfo) { // 请求状态 regRequestBaseDto.setStatusEnum_enumText( - EnumUtils.getInfoByValue(RequestStatus.class, regRequestBaseDto.getStatusEnum())); + EnumUtils.getInfoByValue(RequestStatus.class, regRequestBaseDto.getStatusEnum())); // 是否皮试 regRequestBaseDto - .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, regRequestBaseDto.getSkinTestFlag())); + .setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, regRequestBaseDto.getSkinTestFlag())); // 是否为注射药物 regRequestBaseDto - .setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, regRequestBaseDto.getInjectFlag())); + .setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, regRequestBaseDto.getInjectFlag())); // 收费状态 regRequestBaseDto.setChargeStatus_enumText( - EnumUtils.getInfoByValue(ChargeItemStatus.class, regRequestBaseDto.getChargeStatus())); + EnumUtils.getInfoByValue(ChargeItemStatus.class, regRequestBaseDto.getChargeStatus())); // 治疗类型 regRequestBaseDto.setTherapyEnum_enumText( - EnumUtils.getInfoByValue(TherapyTimeType.class, regRequestBaseDto.getTherapyEnum())); + EnumUtils.getInfoByValue(TherapyTimeType.class, regRequestBaseDto.getTherapyEnum())); } return R.ok(regRequestBaseInfo); } @@ -623,27 +604,27 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { public R signOffRegAdvice(List paramList) { // 药品 List medicineList = paramList.stream() - .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); List medicineRequestIds = - medicineList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); + medicineList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); // 诊疗 List activityList = paramList.stream() - .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); List activityRequestIds = - activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); + activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); // 查询已完成的药品请求 List medicineCompleteList = new ArrayList<>(); if (!medicineRequestIds.isEmpty()) { medicineCompleteList = iMedicationRequestService.list(new LambdaQueryWrapper() - .eq(MedicationRequest::getStatusEnum, RequestStatus.COMPLETED.getValue()) - .in(MedicationRequest::getId, medicineRequestIds)); + .eq(MedicationRequest::getStatusEnum, RequestStatus.COMPLETED.getValue()) + .in(MedicationRequest::getId, medicineRequestIds)); } // 查询已完成的诊疗请求 List activityCompleteList = new ArrayList<>(); if (!activityRequestIds.isEmpty()) { activityCompleteList = iServiceRequestService.list(new LambdaQueryWrapper() - .eq(ServiceRequest::getStatusEnum, RequestStatus.COMPLETED.getValue()) - .in(ServiceRequest::getId, activityRequestIds)); + .eq(ServiceRequest::getStatusEnum, RequestStatus.COMPLETED.getValue()) + .in(ServiceRequest::getId, activityRequestIds)); } if (!medicineCompleteList.isEmpty() || !activityCompleteList.isEmpty()) { throw new ServiceException("存在已完成的医嘱,请重新选择"); @@ -666,7 +647,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { if (!chargeItemIdList.isEmpty()) { iChargeItemService.updatePaymentStatus(chargeItemIdList, ChargeItemStatus.DRAFT.getValue()); } - return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"医嘱签退"})); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"医嘱签退"})); } /** @@ -681,25 +662,25 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { Date date = new Date(); // 药品 List medicineList = paramList.stream() - .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); List medicineRequestIds = - medicineList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); + medicineList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); // 诊疗 List activityList = paramList.stream() - .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); List activityRequestIds = - activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); + activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); if (!medicineRequestIds.isEmpty()) { iMedicationRequestService.update(new LambdaUpdateWrapper() - .in(MedicationRequest::getId, medicineRequestIds).set(MedicationRequest::getEffectiveDoseEnd, date) - .set(MedicationRequest::getStatusEnum, RequestStatus.STOPPED.getValue())); + .in(MedicationRequest::getId, medicineRequestIds).set(MedicationRequest::getEffectiveDoseEnd, date) + .set(MedicationRequest::getStatusEnum, RequestStatus.STOPPED.getValue())); } if (!activityRequestIds.isEmpty()) { iServiceRequestService.update(new LambdaUpdateWrapper() - .in(ServiceRequest::getId, activityRequestIds).set(ServiceRequest::getOccurrenceEndTime, date) - .set(ServiceRequest::getStatusEnum, RequestStatus.STOPPED.getValue())); + .in(ServiceRequest::getId, activityRequestIds).set(ServiceRequest::getOccurrenceEndTime, date) + .set(ServiceRequest::getStatusEnum, RequestStatus.STOPPED.getValue())); } - return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"医嘱停止"})); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"医嘱停止"})); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/NurseManageServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/NurseManageServiceImpl.java new file mode 100644 index 00000000..4fe1f0a2 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/NurseManageServiceImpl.java @@ -0,0 +1,121 @@ +package com.openhis.web.regdoctorstation.appservice.impl; + +import java.util.LinkedList; +import java.util.List; + +import javax.annotation.Resource; + +import com.core.common.utils.AgeCalculatorUtil; +import com.core.common.utils.StringUtils; +import com.core.common.utils.bean.BeanUtils; +import org.springframework.stereotype.Service; + +import com.core.common.core.domain.R; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.Patient; +import com.openhis.administration.dto.EncounterDataDto; +import com.openhis.administration.dto.LocationDataDto; +import com.openhis.administration.dto.PatientBedInfoDto; +import com.openhis.administration.mapper.EncounterLocationMapper; +import com.openhis.administration.mapper.LocationMapper; +import com.openhis.administration.service.IEncounterService; +import com.openhis.administration.service.ILocationService; +import com.openhis.administration.service.IPatientService; +import com.openhis.administration.service.IPractitionerRoleService; +import com.openhis.common.enums.*; +import com.openhis.common.utils.EnumUtils; +import com.openhis.web.regdoctorstation.appservice.INurseManageService; + +import lombok.extern.slf4j.Slf4j; + +/** + * @ClassName NurseManageServiceImpl + * @Description 护士站 业务实现类 + * @Author raymond + * @Date 2025/10/27 15:26 + * @Version 1.0 + **/ +@Slf4j +@Service +public class NurseManageServiceImpl implements INurseManageService { + + @Resource + private IPractitionerRoleService practitionerRoleService; + @Resource + private ILocationService locationService; + @Resource + private LocationMapper locationMapper; + @Resource + private EncounterLocationMapper encounterLocationMapper; + @Resource + private IEncounterService encounterService; + @Resource + private IPatientService patientService; + + @Override + public R pricingBusiness(String searchKeyWord) { + // TODO 一、基础数据 1、获取 当前护士负责的 病区 和 病区下的患者数据;2、护士点击 患者姓名时,获取患者基础数据(床号,姓名等); + // 此处应该提供两个接口,策略模式, 如果从 门诊过来,new 门诊的用户来源,如果从 住院来,那么 new 住院的用户来源; + // 获取当前人 SecurityUtils.getLoginUser().getPractitionerId(); + Long practitionerId = 2L; + // 获取当前角色的负责的区域id数组 + List roleLocationIds = practitionerRoleService.searchPractitionerRoleLocationIds(practitionerId, + PractitionerRoles.NURSE.getCode()); + // 根据 roleLocationIds 获取病区集合 + List locationAreaDataList = this.locationService.searchLocationDataByIds(roleLocationIds); + for (LocationDataDto data : locationAreaDataList) { + List locationBedDataList = this.exeEncapsulation(data); + if (!StringUtils.isEmpty(searchKeyWord) && !locationBedDataList.isEmpty()) { + List searchResultDataList = new LinkedList<>(); + for (PatientBedInfoDto bedInfoDto : locationBedDataList) { + // 根据 换着姓名和 患者床位号查询 + if (bedInfoDto.getBedName().equals(searchKeyWord) + || bedInfoDto.getPatientName().matches(searchKeyWord)) { + PatientBedInfoDto searchResultData = new PatientBedInfoDto(); + BeanUtils.copyProperties(bedInfoDto, searchResultData); + searchResultDataList.add(searchResultData); + } + } + data.setPatientBedInfoDtoList(searchResultDataList); + } else { + data.setPatientBedInfoDtoList(locationBedDataList); + } + } + + return R.ok(locationAreaDataList); + } + + public List exeEncapsulation(LocationDataDto data) { + // 根据病区 找到 有效床位的信息 + List locationBedDataList = this.locationMapper.searchLocationDataByBusNo(data.getBusNo(), + LocationForm.BED.getValue(), LocationStatus.OCCUPY.getValue()); + List finalDataList = new LinkedList<>(); + if (!locationBedDataList.isEmpty()) { + int size = locationBedDataList.size(); + for (int i = 0; i < size; i++) { + PatientBedInfoDto bedInfoDto = locationBedDataList.get(i); + PatientBedInfoDto patientBedInfoDto = + this.encounterLocationMapper.searchEncounterDataByLocationId(bedInfoDto.getBedLocationId(), + EncounterActivityStatus.ACTIVE.getValue(), LocationForm.BED.getValue()); + EncounterDataDto encounterDataDto = this.encounterService + .getPatientIdByParam(EncounterClass.IMP.getValue(), patientBedInfoDto.getEncounterId()); + Patient patient = this.patientService.getById(encounterDataDto.getPatientId()); + bedInfoDto.setPatientName(patient.getName()); + bedInfoDto.setPatientNumber(patient.getIdCard()); + bedInfoDto.setPatientAgeText( + patient.getBirthDate() != null ? AgeCalculatorUtil.getAge(patient.getBirthDate()) : null); + bedInfoDto.setPatientGenderText( + EnumUtils.getInfoByValue(AdministrativeGender.class, patient.getGenderEnum())); + finalDataList.add(bedInfoDto); + } + } + return finalDataList; + } + + @Override + public R medicalDeviceBusiness() { + // 获取当前人 + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + return null; + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java index 12ff22ca..e3273e3d 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.MessageUtils; import com.core.common.utils.SecurityUtils; @@ -17,19 +18,13 @@ import com.openhis.administration.domain.ChargeItem; import com.openhis.administration.service.IChargeItemService; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.PromptMsgConstant; -import com.openhis.common.enums.AssignSeqEnum; -import com.openhis.common.enums.ChargeItemStatus; -import com.openhis.common.enums.RequestStatus; -import com.openhis.common.enums.TherapyTimeType; +import com.openhis.common.enums.*; import com.openhis.document.domain.RequestForm; import com.openhis.document.service.IRequestFormService; import com.openhis.web.doctorstation.dto.ActivityChildrenJsonParams; import com.openhis.web.doctorstation.utils.AdviceUtils; import com.openhis.web.regdoctorstation.appservice.IRequestFormManageAppService; -import com.openhis.web.regdoctorstation.dto.ActivitySaveDto; -import com.openhis.web.regdoctorstation.dto.RequestFormDetailQueryDto; -import com.openhis.web.regdoctorstation.dto.RequestFormQueryDto; -import com.openhis.web.regdoctorstation.dto.RequestFormSaveDto; +import com.openhis.web.regdoctorstation.dto.*; import com.openhis.web.regdoctorstation.mapper.RequestFormManageAppMapper; import com.openhis.workflow.domain.ActivityDefinition; import com.openhis.workflow.domain.ServiceRequest; @@ -138,10 +133,18 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer ChargeItem chargeItem; // 诊疗集合 List activityList = requestFormSaveDto.getActivityList(); + // 诊疗执行科室配置 + List activityOrganizationConfig = + requestFormManageAppMapper.getActivityOrganizationConfig(typeCode); + if (activityOrganizationConfig.isEmpty()) { + throw new ServiceException("请先配置当前时间段的执行科室"); + } + for (ActivitySaveDto activitySaveDto : activityList) { serviceRequest = new ServiceRequest(); serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue()); serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 serviceRequest.setPrescriptionNo(prescriptionNo); serviceRequest.setTherapyEnum(TherapyTimeType.TEMPORARY.getValue());// 治疗类型 serviceRequest.setQuantity(activitySaveDto.getQuantity()); // 请求数量 @@ -152,7 +155,15 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer serviceRequest.setRequesterId(practitionerId); // 开方医生 serviceRequest.setEncounterId(encounterId); // 就诊id serviceRequest.setAuthoredTime(curDate); // 请求签发时间 - serviceRequest.setOrgId(activitySaveDto.getPositionId()); // 执行科室 + + Long positionId = activityOrganizationConfig.stream() + .filter(dto -> activitySaveDto.getAdviceDefinitionId().equals(dto.getActivityDefinitionId())) + .map(ActivityOrganizationConfigDto::getOrganizationId).findFirst().orElse(null); + if (positionId == null) { + throw new ServiceException(activitySaveDto.getAdviceDefinitionName() + "未配置当前时间段的执行科室"); + } + serviceRequest.setOrgId(positionId); // 执行科室 + serviceRequest.setYbClassEnum(activitySaveDto.getYbClassEnum());// 类别医保编码 serviceRequest.setConditionId(activitySaveDto.getConditionId()); // 诊断id serviceRequest.setEncounterDiagnosisId(activitySaveDto.getEncounterDiagnosisId()); // 就诊诊断id @@ -161,6 +172,7 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer chargeItem = new ChargeItem(); chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); + chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 chargeItem.setPatientId(patientId); // 患者 chargeItem.setContextEnum(activitySaveDto.getAdviceType()); // 类型 chargeItem.setEncounterId(encounterId); // 就诊id diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java index 54ae4c77..38c98d33 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/SpecialAdviceAppServiceImpl.java @@ -169,6 +169,7 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { longServiceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 longServiceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 longServiceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + longServiceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 longServiceRequest.setQuantity(new BigDecimal("1")); // 请求数量 longServiceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 longServiceRequest.setCategoryEnum(categoryEnum); // 请求类型 @@ -216,6 +217,7 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { longServiceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 longServiceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 longServiceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + longServiceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 longServiceRequest.setQuantity(new BigDecimal("1")); // 请求数量 longServiceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 longServiceRequest.setCategoryEnum(categoryEnum); // 请求类型 @@ -347,7 +349,7 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { } AdviceBaseDto adviceBaseDto = new AdviceBaseDto(); adviceBaseDto.setAdviceDefinitionId(transferOrganizationDefinitionId); // 医嘱定义id - // 对应的诊疗医嘱信息 + // 转科的医嘱信息 AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService .getAdviceBaseInfo(adviceBaseDto, null, null, null, null, 1, 1, Whether.NO.getValue(), List.of(3)) .getRecords().get(0); @@ -356,6 +358,7 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 serviceRequest.setOccurrenceStartTime(startTime); // 医嘱开始时间 serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 serviceRequest.setQuantity(new BigDecimal("1")); // 请求数量 serviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 serviceRequest.setCategoryEnum(Integer.valueOf(activityAdviceBaseDto.getCategoryCode())); // 请求类型 @@ -385,4 +388,83 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService { return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"转科医嘱"})); } + /** + * 保存离院医嘱 + * + * @param leaveHospitalParam 转科离院参数 + * @return 结果 + */ + @Override + public R saveLeaveHospitalOrders(LeaveHospitalParam leaveHospitalParam) { + // 当前登录账号参与者id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 当前时间 + Date curDate = new Date(); + // 计划出院时间 + Date endTime = leaveHospitalParam.getEndTime(); + if (endTime == null) { + endTime = endTime; + } + // 就诊id + Long encounterId = leaveHospitalParam.getEncounterId(); + // 患者 + Long patientId = leaveHospitalParam.getPatientId(); + // 诊断ID + Long conditionId = leaveHospitalParam.getConditionId(); + // 就诊诊断id + Long encounterDiagnosisId = leaveHospitalParam.getEncounterDiagnosisId(); + + // 出院的医嘱定义id + Long transferOrganizationDefinitionId = + iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.LEAVE_HOSPITAL); + if (transferOrganizationDefinitionId == null) { + return R.fail("请先在诊疗目录维护出院医嘱"); + } + + // 校验重复开立 + LambdaQueryWrapper lambdaQuery = new LambdaQueryWrapper<>(); + lambdaQuery.eq(ServiceRequest::getEncounterId, encounterId) + .eq(ServiceRequest::getActivityId, transferOrganizationDefinitionId) + .and(wrapper -> wrapper.eq(ServiceRequest::getStatusEnum, RequestStatus.DRAFT.getValue()).or() + .eq(ServiceRequest::getStatusEnum, RequestStatus.ACTIVE.getValue()).or()); + if (!iServiceRequestService.list(lambdaQuery).isEmpty()) { + return R.fail("请勿重复开立出院医嘱"); + } + + // 出院的医嘱信息 + AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, + List.of(transferOrganizationDefinitionId), null, 1, 1, Whether.NO.getValue(), List.of(3)).getRecords() + .get(0); + // 保存出院医嘱请求 + ServiceRequest serviceRequest = new ServiceRequest(); + serviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue());// 请求状态 + serviceRequest.setOccurrenceStartTime(endTime); // 预计执行时间 + serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4)); + serviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 + serviceRequest.setQuantity(new BigDecimal("1")); // 请求数量 + serviceRequest.setUnitCode(activityAdviceBaseDto.getUnitCode()); // 请求单位编码 + serviceRequest.setCategoryEnum(Integer.valueOf(activityAdviceBaseDto.getCategoryCode())); // 请求类型 + serviceRequest.setTherapyEnum(TherapyTimeType.TEMPORARY.getValue()); // 治疗类型 + serviceRequest.setReasonText(leaveHospitalParam.getReasonText()); // 理由 + serviceRequest.setActivityId(transferOrganizationDefinitionId);// 诊疗定义id + serviceRequest.setPatientId(patientId); // 患者 + serviceRequest.setRequesterId(practitionerId); // 开方医生 + serviceRequest.setEncounterId(encounterId); // 就诊id + serviceRequest.setOrgId(activityAdviceBaseDto.getPositionId()); // 执行科室 + serviceRequest.setConditionId(conditionId); // 诊断id + serviceRequest.setEncounterDiagnosisId(encounterDiagnosisId); // 就诊诊断id + iServiceRequestService.save(serviceRequest); + + // 保存出院医嘱请求的过程数据 + OrderProcess orderProcess = new OrderProcess(); + orderProcess.setName(CommonConstants.BusinessName.TRANSFER_ORGANIZATION); // 名称 + orderProcess.setEncounterId(encounterId); // 就诊id + orderProcess.setRequestId(serviceRequest.getId()); // 请求id + orderProcess.setRequestTableName(CommonConstants.TableName.WOR_SERVICE_REQUEST); // 请求表名 + orderProcess.setOutWayCode(leaveHospitalParam.getOutWayCode()); // 出院方式 + iOrderProcessService.save(orderProcess); + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"出院医嘱"})); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/NurseManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/NurseManageController.java new file mode 100644 index 00000000..77c05ee4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/NurseManageController.java @@ -0,0 +1,66 @@ +package com.openhis.web.regdoctorstation.controller; + +import com.core.common.core.domain.R; +import com.openhis.web.regdoctorstation.appservice.INurseManageService; +import com.openhis.web.regdoctorstation.dto.NurseStationRequestParam; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +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 javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +/** + * @ClassName NurseManageController + * @Description 护士站 + * @Author raymond + * @Date 2025/10/27 10:07 + * @Version 1.0 + **/ +@RestController +@RequestMapping("/reg-nurse-station/operation") +@Slf4j +@AllArgsConstructor +public class NurseManageController { + @Resource + private INurseManageService nurseManageService; + /** + * Desc: 加载 当前人 负责的区域和患者信息 + * @param + * @Author raymond + * @Date 15:06 2025/10/27 + * @return com.core.common.core.domain.R + **/ + @GetMapping(value = "/searchOrgAndPatientData") + public R searchOrgAndPatientData(@RequestParam(name = "searchKeyWord", required = false) String searchKeyWord){ + return this.nurseManageService.pricingBusiness(searchKeyWord); + } + public R getPatientInfo(@RequestParam(name = "patientId") Long patientId){ + return null; + } + + /** + * Desc: 护士站 划价接口 + * @param nurseStationRequestParam + * @param request + * @Author raymond + * @Date 10:16 2025/10/27 + * @return com.core.common.core.domain.R + **/ + public R searchDataListByPricing(NurseStationRequestParam nurseStationRequestParam,HttpServletRequest request){ + /** + * TODO 一、基础数据 1、获取 当前护士负责的 病区 和 病区下的患者数据;2、护士点击 患者姓名时,获取患者基础数据(床号,姓名等); + * TODO 二、核心数据 1、护士点击 患者姓名时,默认返回 由当前"护士" 添加的 当前"患者" "今日"的诊疗和耗材数据; + * TODO 三、划价:护士在执行时发现有需要独立收费的项,直接增加。 + * TODO 四:计费:护士在执行时医嘱时,发现有需要增加的项,直接增加。 + * TODO 先执行 request -> 操作记录->发放、账单 + * TODO 问题:1、是否增加 标识:数据为划价; + */ + + return R.ok(); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java index 952b2d4b..e7a25d5f 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java @@ -6,7 +6,7 @@ package com.openhis.web.regdoctorstation.controller; import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; -import com.openhis.common.enums.RequestFormType; +import com.openhis.common.enums.ActivityDefCategory; import com.openhis.web.regdoctorstation.appservice.IRequestFormManageAppService; import com.openhis.web.regdoctorstation.dto.RequestFormSaveDto; @@ -32,7 +32,7 @@ public class RequestFormManageController { */ @PostMapping(value = "/save-check") public R saveCheckRequestForm(@RequestBody RequestFormSaveDto requestFormSaveDto) { - return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto, RequestFormType.CHECK.getCode()); + return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto, ActivityDefCategory.TEST.getCode()); } /** @@ -43,7 +43,7 @@ public class RequestFormManageController { */ @PostMapping(value = "/save-inspection") public R saveInspectionRequestForm(@RequestBody RequestFormSaveDto requestFormSaveDto) { - return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto, RequestFormType.INSPECTION.getCode()); + return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto, ActivityDefCategory.PROOF.getCode()); } /** @@ -55,7 +55,7 @@ public class RequestFormManageController { @PostMapping(value = "/save-blood-transfusion") public R saveBloodTransfusionRequestForm(@RequestBody RequestFormSaveDto requestFormSaveDto) { return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto, - RequestFormType.BLOOD_TRANSFUSION.getCode()); + ActivityDefCategory.METACHYSIS.getCode()); } /** @@ -66,7 +66,8 @@ public class RequestFormManageController { */ @PostMapping(value = "/save-surgery") public R saveSurgeryRequestForm(@RequestBody RequestFormSaveDto requestFormSaveDto) { - return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto, RequestFormType.SURGERY.getCode()); + return iRequestFormManageAppService.saveRequestForm(requestFormSaveDto, + ActivityDefCategory.PROCEDURE.getCode()); } /** @@ -77,7 +78,7 @@ public class RequestFormManageController { */ @GetMapping(value = "/get-check") public R getCheckRequestForm(@RequestParam Long encounterId) { - return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, RequestFormType.CHECK.getCode())); + return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, ActivityDefCategory.TEST.getCode())); } /** @@ -88,7 +89,7 @@ public class RequestFormManageController { */ @GetMapping(value = "/get-inspection") public R getInspectionRequestForm(@RequestParam Long encounterId) { - return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, RequestFormType.INSPECTION.getCode())); + return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, ActivityDefCategory.PROOF.getCode())); } /** @@ -99,8 +100,7 @@ public class RequestFormManageController { */ @GetMapping(value = "/get-blood-transfusion") public R getBloodTransfusionRequestForm(@RequestParam Long encounterId) { - return R - .ok(iRequestFormManageAppService.getRequestForm(encounterId, RequestFormType.BLOOD_TRANSFUSION.getCode())); + return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, ActivityDefCategory.METACHYSIS.getCode())); } /** @@ -111,7 +111,7 @@ public class RequestFormManageController { */ @GetMapping(value = "/get-surgery") public R getSurgeryRequestForm(@RequestParam Long encounterId) { - return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, RequestFormType.SURGERY.getCode())); + return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, ActivityDefCategory.PROCEDURE.getCode())); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/SpecialAdviceController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/SpecialAdviceController.java index e0aeb8c2..298ef586 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/SpecialAdviceController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/SpecialAdviceController.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; import com.openhis.web.regdoctorstation.appservice.ISpecialAdviceAppService; +import com.openhis.web.regdoctorstation.dto.LeaveHospitalParam; import com.openhis.web.regdoctorstation.dto.NursingOrdersSaveDto; import com.openhis.web.regdoctorstation.dto.TransferOrganizationParam; @@ -67,4 +68,15 @@ public class SpecialAdviceController { return iSpecialAdviceAppService.saveTransferOrganizationOrders(transferOrganizationParam); } + /** + * 保存出院医嘱 + * + * @param leaveHospitalParam 转科医嘱参数 + * @return 结果 + */ + @PostMapping(value = "/leave-hospital-orders") + public R saveLeaveHospitalOrders(@RequestBody LeaveHospitalParam leaveHospitalParam) { + return iSpecialAdviceAppService.saveLeaveHospitalOrders(leaveHospitalParam); + } + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivityOrganizationConfigDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivityOrganizationConfigDto.java new file mode 100644 index 00000000..b16e2fba --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivityOrganizationConfigDto.java @@ -0,0 +1,28 @@ +package com.openhis.web.regdoctorstation.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 诊疗执行科室配置 dto + */ +@Data +@Accessors(chain = true) +public class ActivityOrganizationConfigDto { + + /** + * 执行科室id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long organizationId; + + /** + * 诊疗定义id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long activityDefinitionId; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivitySaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivitySaveDto.java index 6e44e4d0..f718dba0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivitySaveDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/ActivitySaveDto.java @@ -20,6 +20,11 @@ public class ActivitySaveDto { @JsonSerialize(using = ToStringSerializer.class) private Long adviceDefinitionId; + /** + * 诊疗定义名称 + */ + private String adviceDefinitionName; + /** 请求数量 */ private BigDecimal quantity; diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/LeaveHospitalParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/LeaveHospitalParam.java index 6b22377d..cb25b54e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/LeaveHospitalParam.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/LeaveHospitalParam.java @@ -1,5 +1,13 @@ package com.openhis.web.regdoctorstation.dto; +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + import lombok.Data; import lombok.experimental.Accessors; @@ -10,4 +18,41 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class LeaveHospitalParam { + /** 就诊id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** 患者 */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** + * 诊断ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long conditionId; + + /** + * 就诊诊断id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterDiagnosisId; + + /** + * 计划出院时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + /** + * 出院方式 + */ + private String outWayCode; + + /** + * 理由 + */ + private String reasonText; + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/NurseStationRequestParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/NurseStationRequestParam.java new file mode 100644 index 00000000..f0a7599c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/dto/NurseStationRequestParam.java @@ -0,0 +1,49 @@ +package com.openhis.web.regdoctorstation.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @ClassName NurseRequestParam + * @Description 护士站 查询条件 + * @Author raymond + * @Date 2025/10/27 10:17 + * @Version 1.0 + **/ +@Data +@Accessors(chain = true) +public class NurseStationRequestParam { + + /** + * 患者住院入科室id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long organizationId; + /** + * 患者id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + + /** + * 开始时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + /** + * 结束时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/AdviceManageAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/AdviceManageAppMapper.java index 939dabe6..c7ce2702 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/AdviceManageAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/AdviceManageAppMapper.java @@ -52,12 +52,13 @@ public interface AdviceManageAppMapper { * @param WOR_SERVICE_REQUEST 诊疗请求表名 * @param practitionerId 当前账号的参与者id * @param historyFlag 历史医嘱标记 + * @param generateSourceEnum 生成来源 * @return 住院医嘱请求数据 */ List getRegRequestBaseInfo(@Param("encounterId") Long encounterId, @Param("patientId") Long patientId, @Param("MED_MEDICATION_REQUEST") String MED_MEDICATION_REQUEST, @Param("WOR_DEVICE_REQUEST") String WOR_DEVICE_REQUEST, @Param("WOR_SERVICE_REQUEST") String WOR_SERVICE_REQUEST, @Param("practitionerId") Long practitionerId, - @Param("historyFlag") String historyFlag); + @Param("historyFlag") String historyFlag, @Param("generateSourceEnum") Integer generateSourceEnum); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/RequestFormManageAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/RequestFormManageAppMapper.java index 96407418..6c7a90c6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/RequestFormManageAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/RequestFormManageAppMapper.java @@ -1,11 +1,13 @@ package com.openhis.web.regdoctorstation.mapper; -import com.openhis.web.regdoctorstation.dto.RequestFormDetailQueryDto; -import com.openhis.web.regdoctorstation.dto.RequestFormQueryDto; +import java.util.List; + import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; -import java.util.List; +import com.openhis.web.regdoctorstation.dto.ActivityOrganizationConfigDto; +import com.openhis.web.regdoctorstation.dto.RequestFormDetailQueryDto; +import com.openhis.web.regdoctorstation.dto.RequestFormQueryDto; /** * 申请单管理 应用Mapper @@ -31,4 +33,13 @@ public interface RequestFormManageAppMapper { */ List getRequestFormDetail(@Param("prescriptionNo") String prescriptionNo); + /** + * 查询诊疗执行科室配置 + * + * @param activityCategoryCode 诊疗类型编码 + * @return 诊疗执行科室配置 + */ + List + getActivityOrganizationConfig(@Param("activityCategoryCode") String activityCategoryCode); + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReportAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReportAppService.java new file mode 100644 index 00000000..74ccf015 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/IReportAppService.java @@ -0,0 +1,140 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice; + +import javax.servlet.http.HttpServletRequest; + +import com.core.common.core.domain.R; + +/** + * 报表 appService + * + * @author liuhr + * @date 2025-11-06 + */ +public interface IReportAppService { + + /**例子 + * 药剂科报表_常规报表:出库明细表 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 出库明细表 + */ + R getStockOutDetailPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表:患者明细主表 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 患者明细主表 + */ + R getPatientMasterDetailPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表:线下采购占比 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 线下采购占比报表 + */ + R getOfflinePurchaseRatioPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表:药品使用情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品使用情况报表 + */ + R getMedicationUsagePage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表:患者明细 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 患者明细报表 + */ + R getPatientDetailsPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表_常规报表:药品费用增长率 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品费用增长率 + */ + R getDrugExpensesGrowthRate(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表_结余留用:30天回款率 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 30天回款率 + */ + R getThirtyDayCollectionRate(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表:基本情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 基本情况报表 + */ + R getBasicInformationDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表:药品出库情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品出库情况报表 + */ + R getMedicationStockOutDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表:产品使用情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 产品使用情况报表 + */ + R getProductUsageDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + /** + * 药剂科报表:非中选产品采购量占比 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 非中选产品采购量占比报表 + */ + R getNonWinQtyRatio(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request); + + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ChargeReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ChargeReportAppServiceImpl.java index ef4f1054..8fa58955 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ChargeReportAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ChargeReportAppServiceImpl.java @@ -11,29 +11,24 @@ import java.util.stream.Stream; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.core.common.utils.AgeCalculatorUtil; -import com.openhis.common.constant.PromptMsgConstant; -import com.openhis.common.utils.EnumUtils; -import com.openhis.web.basedatamanage.dto.UserAndPractitionerDto; -import com.openhis.web.pharmacymanage.dto.MedDetailedAccountPageDto; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.core.common.core.domain.R; -import com.openhis.administration.domain.Organization; +import com.core.common.utils.AgeCalculatorUtil; import com.openhis.administration.domain.Practitioner; -import com.openhis.administration.service.IOrganizationService; import com.openhis.administration.service.IPractitionerService; import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; import com.openhis.common.enums.*; +import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.HisQueryUtils; import com.openhis.web.reportmanage.appservice.IChargeReportAppService; -import com.openhis.web.reportmanage.dto.*; +import com.openhis.web.reportmanage.dto.ChargeReportInitDto; +import com.openhis.web.reportmanage.dto.ChargeReportPageDto; +import com.openhis.web.reportmanage.dto.ChargeReportSearchParam; import com.openhis.web.reportmanage.mapper.ChargeReportMapper; /** @@ -73,8 +68,8 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService { ChargeItemContext.getInfo())) .collect(Collectors.toList()); - initDto.setStatisticsTypeOptions(statisticsTypeOptions) - .setIssuerOptions(applicantList).setPayeeOptions(applicantList).setClinicalTypeOptions(clinicalTypeOptions); + initDto.setStatisticsTypeOptions(statisticsTypeOptions).setIssuerOptions(applicantList) + .setPayeeOptions(applicantList).setClinicalTypeOptions(clinicalTypeOptions); return R.ok(initDto); } @@ -103,34 +98,33 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService { CommonConstants.FieldName.ClinicalNo)), request); queryWrapper.orderByDesc(CommonConstants.FieldName.BusNo).orderByAsc(CommonConstants.FieldName.ChargeId) - .orderByAsc(CommonConstants.FieldName.ChargeTime); - + .orderByAsc(CommonConstants.FieldName.ChargeTime); // 最终返回结果 Page chargeReportList; // 判断统计类型 if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_REVENUE.getCode())) { // 门诊整体收入明细 - chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize),queryWrapper, + chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize), queryWrapper, PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 2); } else if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_YB_REVENUE.getCode())) { // 门诊医保收入明细 - chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize),queryWrapper, + chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize), queryWrapper, PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 1); } else if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_SELF_REVENUE.getCode())) { // 门诊自费收入明细 - chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize),queryWrapper, + chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize), queryWrapper, PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 0); } else if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_REFUND.getCode())) { // 门诊退费明细 - chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize),queryWrapper, + chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize), queryWrapper, PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(), ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 3); @@ -141,7 +135,9 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService { // 年龄 性别 医保等级 状态转换 chargeReportList.getRecords().forEach(infoDto -> { - infoDto.setAge(AgeCalculatorUtil.getAge(infoDto.getBirthDate())); + if (infoDto.getBirthDate() != null) { + infoDto.setAge(AgeCalculatorUtil.getAge(infoDto.getBirthDate())); + } infoDto .setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, infoDto.getGenderEnum())); infoDto.setChrgitmLv_enumText(EnumUtils.getInfoByValue(InsuranceLevel.class, infoDto.getChrgitmLv())); @@ -151,14 +147,10 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService { List content = chargeReportList.getRecords(); // 按 busNo 分组,并合计 totalPrice Map subtotalAmount = content.stream() - .collect(Collectors.groupingBy( - ChargeReportPageDto::getBusNo, - Collectors.reducing( - BigDecimal.ZERO, // 初始值 - dto -> dto.getTotalPrice() != null ? dto.getTotalPrice() : BigDecimal.ZERO, - BigDecimal::add) // 累加操作 - ) - ); + // 过滤掉 busNo 为 null 的元素,否则会报错但实际上不会出现这个情况 element cannot be mapped to a null key + .filter(dto -> dto.getBusNo() != null) + .collect(Collectors.groupingBy(ChargeReportPageDto::getBusNo, Collectors.reducing(BigDecimal.ZERO, + dto -> dto.getTotalPrice() != null ? dto.getTotalPrice() : BigDecimal.ZERO, BigDecimal::add))); // 更新每条数据的 Price 字段 for (ChargeReportPageDto dto : content) { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReportAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReportAppServiceImpl.java new file mode 100644 index 00000000..38ffee9b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/appservice/impl/ReportAppServiceImpl.java @@ -0,0 +1,179 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.appservice.impl; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Service; + +import com.core.common.core.domain.R; +import com.openhis.web.reportmanage.appservice.IReportAppService; + +/** + * 报表 impl + * + * @author liuhr + * @date 2025-11-06 + */ +@Service +public class ReportAppServiceImpl implements IReportAppService { + + /**例子 + * 药剂科报表_常规报表:出库明细表 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 出库明细表 + */ + @Override + public R getStockOutDetailPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表:患者明细主表 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 患者明细主表 + */ + @Override + public R getPatientMasterDetailPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表:线下采购占比 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 线下采购占比报表 + */ + @Override + public R getOfflinePurchaseRatioPage(Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request) { + return null; + } + /** + * 药剂科报表:药品使用情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品使用情况报表 + */ + @Override + public R getMedicationUsagePage(Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表:患者明细 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 患者明细报表 + */ + @Override + public R getPatientDetailsPage(Integer pageNo, Integer pageSize, String searchKey, + HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表_常规报表:药品费用增长率 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品费用增长率 + */ + @Override + public R getDrugExpensesGrowthRate(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表_结余留用:30天回款率 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 30天回款率 + */ + @Override + public R getThirtyDayCollectionRate(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表:基本情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 基本情况报表 + */ + @Override + public R getBasicInformationDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表:药品出库情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品出库情况报表 + */ + @Override + public R getMedicationStockOutDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表:产品使用情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 产品使用情况报表 + */ + @Override + public R getProductUsageDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + return null; + } + + /** + * 药剂科报表:非中选产品采购量占比 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 非中选产品采购量占比报表 + */ + @Override + public R getNonWinQtyRatio(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) { + return null; + } + + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReportController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReportController.java new file mode 100644 index 00000000..9ce1db1d --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/controller/ReportController.java @@ -0,0 +1,210 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.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.reportmanage.appservice.IReportAppService; + +import lombok.extern.slf4j.Slf4j; + +/** + * 报表 controller + * + * @author liuhr + * @date 2025-11-06 + */ +@RestController +@RequestMapping("/report-manage/report") +@Slf4j +public class ReportController { + + @Autowired + private IReportAppService reportAppService; + + + /**例子,Dto例子参考:ReportStockOutDetailDto + * 药剂科报表_常规报表:出库明细表 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 出库明细表 + */ + @GetMapping(value = "/stock-out-detail-page") + public R getStockOutDetailPage(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getStockOutDetailPage(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportPatientMasterDetailDto + * 药剂科报表:患者明细主表 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 患者明细主报表 + */ + @GetMapping(value = "/patient-master-detail") + public R getPatientMasterDetailPage(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getPatientMasterDetailPage(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportOfflinePurchaseRatioDto + * 药剂科报表:线下采购占比 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 线下采购占比报表 + */ + @GetMapping(value = "/offline-purchase-ratio") + public R getOfflinePurchaseRatioPage(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getOfflinePurchaseRatioPage(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportMedicationUsageDto + * 药剂科报表:药品使用情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品使用情况报表 + */ + @GetMapping(value = "/medication-usage") + public R getMedicationUsagePage(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getMedicationUsagePage(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportPatientDetailsDto + * 药剂科报表:患者明细 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 患者明细报表 + */ + @GetMapping(value = "/patient-details") + public R getPatientDetailsPage(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getPatientDetailsPage(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportDrugCostGrowthDto + * 药剂科报表:药品费用增长率 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品费用增长率 + */ + @GetMapping(value = "/drug-expenses-growth-rate") + public R getDrugExpensesGrowthRate(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getDrugExpensesGrowthRate(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportThirtyDayCollectionRateDto + * 药剂科报表:30天回款率 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 30天回款率 + */ + @GetMapping(value = "/thirty-day-collection-rate") + public R getThirtyDayCollectionRate(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getThirtyDayCollectionRate(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportBasicInformationDetailsDto + * 药剂科报表:基本情况报表 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 基本情况报表 + */ + @GetMapping(value = "/basic-information-details") + public R getBasicInformationDetails(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getBasicInformationDetails(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportMedicationStockOutDetailsDto + * 药剂科报表:药品出库情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 药品出库情况报表 + */ + @GetMapping(value = "/medication-stock-out-details") + public R getMedicationStockOutDetails(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getMedicationStockOutDetails(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportProductUsageDto + * 药剂科报表:产品使用情况 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 产品使用情况报表 + */ + @GetMapping(value = "/product-usage-details") + public R getProductUsageDetails(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getProductUsageDetails(pageNo,pageSize,searchKey,request); + } + + /**Dto参考:ReportNonWinQtyRatioDto + * 药剂科报表:非中选产品采购量占比 + * + * @param pageNo 当前页码 + * @param pageSize 查询条数 + * @param searchKey 模糊查询关键字 + * @param request 请求数据 + * @return 非中选产品采购量占比报表 + */ + @GetMapping(value = "/non-win-qty-ratio") + public R getNonWinQtyRatio(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) { + return reportAppService.getNonWinQtyRatio(pageNo,pageSize,searchKey,request); + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportBasicInformationDetailsDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportBasicInformationDetailsDto.java new file mode 100644 index 00000000..461c45ef --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportBasicInformationDetailsDto.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * 基本情况 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportBasicInformationDetailsDto { + + /** 序号 */ + private String no; + + /** 数据上报日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private String dataReportingDate; + + /** 省级行政区划代码 */ + private String provinceCodes; + + /** 组织机构代码 */ + private String organizationCode; + + /** 医疗机构代码 */ + private String medicalCode; + + /** 组织机构名称 */ + private String organizationName; + + /** 年度药品总收入(元) */ + private BigDecimal yearMedicineTotalRevenue; + + /** 实有床位数 */ + private BigDecimal actualBedsNo; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportDrugCostGrowthDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportDrugCostGrowthDto.java new file mode 100644 index 00000000..97b3e0cf --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportDrugCostGrowthDto.java @@ -0,0 +1,33 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 药品费用增长率 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportDrugCostGrowthDto { + + /** 项目名称 */ + private String name; + + /** 医疗机构名 */ + private String medinsName; + + /** 本年度药品支出额(元) */ + private BigDecimal currentYearExpenditure; + + /** 上一年度药品支出额(元) */ + private BigDecimal lastYearExpenditure; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportMedicationStockOutDetailsDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportMedicationStockOutDetailsDto.java new file mode 100644 index 00000000..307cdf3d --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportMedicationStockOutDetailsDto.java @@ -0,0 +1,45 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 药品出库情况 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportMedicationStockOutDetailsDto { + + /** 医疗机构代码 */ + private String medicalInstitutionCode; + + /** 组织机构名称 */ + private String organizationName; + + /** 国家药品编码(YPID) */ + private String nationalMedicineCode; + + /** 院内药品唯一码 */ + private String busNo; + + /** 省级药品集中采购平台药品编码 */ + private String provincialMedicineConcentratedCode; + + /** 产品名称 */ + private String lotName; + + /** 出库数量(最小销售包装单位) */ + private BigDecimal quantitySales; + + /** 出库数量(最小制剂单位) */ + private BigDecimal quantityPreparation; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportMedicationUsageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportMedicationUsageDto.java new file mode 100644 index 00000000..1acb8d67 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportMedicationUsageDto.java @@ -0,0 +1,48 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 药品使用情况报表始化 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportMedicationUsageDto { + + /** 医疗机构代码 */ + private String orgId; + + /** 组织机构名称 */ + private String orgName; + + /** 国家药品编码(YPID) */ + private String nationalDrugCode; + + /** 院内药品唯一码 */ + private String busNo; + + /** 省级药品集中采购平台药品编码 */ + private String provincialDrugCode; + + /** 产品名称 */ + private String itemName; + + /** 销售总金额(元) */ + private BigDecimal totalSalesPrice; + + /** 销售数量(最小销售包装单位) */ + private BigDecimal packageSalesQuantity; + + /** 销售数量(最小制剂单位) */ + private BigDecimal dosageSalesQuantity; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportNonWinQtyRatioDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportNonWinQtyRatioDto.java new file mode 100644 index 00000000..17c47beb --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportNonWinQtyRatioDto.java @@ -0,0 +1,42 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 非中选产品采购量占比 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportNonWinQtyRatioDto { + + /** 项目名称 */ + private String itemName; + + /** 医疗机构名称 */ + private String orgName; + + /** 药品通用名 */ + private String medName; + + /** 非中选产品采购数量(片袋支) */ + private BigDecimal nonWinQty; + + /** 通用名药品采购数量(片袋支) */ + private BigDecimal quantity; + + /** 非中选产品采购金额(元) */ + private BigDecimal nonWinAmt; + + /** 通用名药品采购金额(元) */ + private BigDecimal amount; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportOfflinePurchaseRatioDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportOfflinePurchaseRatioDto.java new file mode 100644 index 00000000..ae3bca5e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportOfflinePurchaseRatioDto.java @@ -0,0 +1,36 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 线下采购占比报表初始化 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportOfflinePurchaseRatioDto { + + /** 项目名称 */ + private String itemName; + + /** 医疗机构名称 */ + private String orgName; + + /** 实际药品采购金额(元) */ + private BigDecimal actualDrugPurchasePrice; + + /** 平台采购金额(元) */ + private BigDecimal platformPurchasePrice; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportPatientDetailsDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportPatientDetailsDto.java new file mode 100644 index 00000000..86740d35 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportPatientDetailsDto.java @@ -0,0 +1,68 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; + +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 报表例子:患者明细初始化 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportPatientDetailsDto { + + /** 门诊住院号 */ + private String encounterBusNo; + + /** 药品通用名 */ + private String medName; + + /** 药品医保编码 */ + private String medYbNo; + + /** 药品类别 */ + @Dict(dictCode = "med_category_code") + private String categoryCode; + private String categoryCode_dictText; + + /** 剂型 */ + @Dict(dictCode = "dose_form_code") + private String doseFormCode; + private String doseFormCode_dictText; + + /** 规格 */ + private String totalVolume; + + /** 包装 */ + private String packageUnit; + + /** 计价单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 是否中选产品 */ + private String isSelected; + + /** 生产企业 */ + private String manufacturerText; + + /** 单价(元) */ + private BigDecimal price; + + /** 使用数量(片袋支) */ + private BigDecimal quantity; + + /** 使用总金额(元) */ + private BigDecimal totalPrice; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportPatientMasterDetailDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportPatientMasterDetailDto.java new file mode 100644 index 00000000..fce46c7c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportPatientMasterDetailDto.java @@ -0,0 +1,66 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 报表例子:患者明细主表初始化 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportPatientMasterDetailDto { + + /** 门诊住院号 */ + private String encounterBusNo; + + /** 患者姓名 */ + private String patientName; + + /** 身份证号 */ + private String idCard; + + /** 人员编码 */ + private String psnNo; + + /** 参保地区编码 */ + private String insuPlcNo; + + /** 参保类型 */ + private String ybType; + + /** 入院时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date encounterStartTime; + + /** 出院时间 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date encounterEndTime; + + /** 处方日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date issueTime; + + /** 出院诊断 */ + private String outDiagnoseName; + + /** 总费用(元) */ + private BigDecimal feeAmount; + + /** 政策范围内 */ + private BigDecimal inscpScpAmt; + + /** 基本医保统筹支付金额(元) */ + private BigDecimal tcPayAmount; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportProductUsageDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportProductUsageDto.java new file mode 100644 index 00000000..7e963c84 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportProductUsageDto.java @@ -0,0 +1,69 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; + +import com.openhis.common.annotation.Dict; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 产品使用情况始化 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportProductUsageDto { + + /** 编码 */ + private String busNo; + + /** 药品通用名 */ + private String medName; + + /** 产品名称 */ + private String productName; + + /** 剂型 */ + @Dict(dictCode = "dose_form_code") + private String doseFormCode; + private String doseFormCode_dictText; + + /** 规格 */ + private String totalVolume; + + /** 包装 */ + private String packageUnit; + + /** 计价单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 生产企业 */ + private String manufacturerText; + + /** 价格(每盒瓶/元) */ + private BigDecimal price; + + /** 是否医保患者使用 */ + private String isUsed; + + /** 患者参保地 */ + private String insuplcName; + + /** 参保类型 */ + private String ybType; + + /** 使用数量(片袋支) */ + private BigDecimal quantity; + + /** 使用金额(片袋支) */ + private BigDecimal totalPrice; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportStockOutDetailDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportStockOutDetailDto.java new file mode 100644 index 00000000..8a425f8e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportStockOutDetailDto.java @@ -0,0 +1,93 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +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 + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportStockOutDetailDto { + + /** 单据号 */ + private String supplyBusNo; + + /** 出库类型 */ + private String type; + + /** 药品名称 */ + private String medName; + + /** 院内药品唯一码 */ + private String busNo; + + /** 药品类型 */ + private String itemTableText; + + /** 产品批号 */ + private String lotNumber; + + /** 存放仓库(目的仓库) */ + private String locationName; + + /** 仓库货位 */ + private String locationStoreName; + + /** 计量单位 */ + @Dict(dictCode = "unit_code") + private String unitCode; + private String unitCode_dictText; + + /** 出库数量 */ + private BigDecimal quantity; + + /** 采购单价 */ + private BigDecimal price; + + /** 采购金额 */ + private BigDecimal totalPrice; + + /** 售价 */ + private BigDecimal salePrice; + + /** 售价金额 */ + private BigDecimal totalSalePrice; + + /** 出库科室 */ + @Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name") + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + private String orgId_dictText; + + /** 供应商 */ + private String supplier; + + /** 审核人 */ + @Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner") + private Long approverId; + private String approverId_dictText; + + /** 审批日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date approvalTime; + + /** 出库原因 */ + private String reason; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportThirtyDayCollectionRateDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportThirtyDayCollectionRateDto.java new file mode 100644 index 00000000..648b2601 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/dto/ReportThirtyDayCollectionRateDto.java @@ -0,0 +1,33 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.reportmanage.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 报表例子:30天回款率 dto + * + * @author liuhr + * @date 2025-11-06 + */ +@Data +@Accessors(chain = true) +public class ReportThirtyDayCollectionRateDto { + + /** 项目名称 */ + private String name; + + /** 医疗机构名 */ + private String medinsName; + + /** 药品通用名 */ + private String drugGenname; + + /** 30天回款率(%) */ + private BigDecimal collectionRate; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/ExcelFillerUtil.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/ExcelFillerUtil.java index 032986a3..a19fd7d5 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/ExcelFillerUtil.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/reportmanage/utils/ExcelFillerUtil.java @@ -40,7 +40,6 @@ public final class ExcelFillerUtil { * @param dataList DTO对象列表 * @param headers 表头信息,key为DTO字段名,value为列标题 * @param fileName 导出的文件名称 - * @param outputPath 导出的文件所在文件夹 * @param totalValues 表头上的数据,key为DTO字段名,value为值 * @throws IOException IO异常 * @throws IllegalAccessException 反射访问异常 @@ -194,7 +193,7 @@ public final class ExcelFillerUtil { // 根据值的类型设置单元格内容 if (value instanceof BigDecimal) { // 保留3位小数,使用HALF_UP模式四舍五入 - BigDecimal scaled = ((BigDecimal)value).setScale(5, RoundingMode.HALF_UP); + BigDecimal scaled = ((BigDecimal)value).setScale(6, RoundingMode.HALF_UP); String bdStr = scaled.toPlainString(); cell.setCellValue(bdStr); // 用字符串写入,避免科学计数法 } else if (value instanceof Number) { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java index f649f721..a0146333 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java @@ -21,6 +21,19 @@ import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.core.common.annotation.Anonymous; +import com.openhis.web.ybmanage.dto.*; +import com.openhis.yb.domain.InpatientDischarge; +import com.openhis.yb.domain.InpatientReg; +import com.openhis.yb.dto.Catalogue1312Output; +import com.openhis.yb.dto.Clinic2208UnSetlInfoOutput; +import com.openhis.yb.dto.Financial3203AWebParam; +import com.openhis.yb.dto.Info1101Output; +import com.openhis.yb.dto.PatientInfoDto; +import com.openhis.yb.dto.Result; +import com.openhis.yb.dto.Settlement3201WebParam; +import com.openhis.yb.dto.Settlement3202WebParam; +import com.openhis.yb.dto.Settlement3209AWebParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @@ -43,10 +56,6 @@ import com.openhis.clinical.service.IConditionDefinitionService; import com.openhis.common.constant.CommonConstants; import com.openhis.financial.domain.Contract; import com.openhis.financial.service.IContractService; -import com.openhis.web.ybmanage.dto.Financial3202WebParam; -import com.openhis.web.ybmanage.dto.FinancialHand3201WebParam; -import com.openhis.web.ybmanage.dto.FinancialHand3203AWebParam; -import com.openhis.web.ybmanage.dto.Yb5205SpecialDiseaseWebParam; import com.openhis.web.ybmanage.service.IYbService; import com.openhis.yb.domain.FinancialApplyRecord; import com.openhis.yb.domain.InfoPerson; @@ -887,6 +896,116 @@ public class YbController { } return R.ok(yb5205OutputSpecialDiseases); + } + /** + * 【2208】医保门诊退费 + * + * @param psnNo 医保人员编号 + * @param mdtrtId 医保就诊id + * @param settleId 医保结算id + * @param insuplcAdmdvs 参保地 + * @param contractNo 合同编号 + * @return 结果 + */ + @GetMapping("/yb-return-settle") + @Anonymous + public R ybReturnSettle(@RequestParam("psnNo") String psnNo, @RequestParam("mdtrtId") String mdtrtId, + @RequestParam("settleId") String settleId, @RequestParam("insuplcAdmdvs") String insuplcAdmdvs, + @RequestParam("contractNo") String contractNo){ + + Clinic2208UnSetlInfoParam clinicSetl = new Clinic2208UnSetlInfoParam(); + clinicSetl.setPsnNo(psnNo).setMdtrtId(mdtrtId).setSetlId(settleId) + .setInsuplcAdmdvs(insuplcAdmdvs); + + Clinic2208UnSetlInfoOutput clinic2208UnSetlInfoOutput = ybHttpUtils.unSettle(clinicSetl, iContractService.getContract(contractNo)); + + return R.ok(clinic2208UnSetlInfoOutput); + } + + /** + * 【目录下载】 + * + * @param address 接口 + * @return 结果 + */ + @GetMapping("/query-catalog") + public R queryCatalog(@RequestParam("address") String address, @RequestParam("v") String version) { + + CatalogFileInput catalogFileInput = new CatalogFileInput(); + catalogFileInput.setAddress(address); + catalogFileInput.setVer(version); + + FileResult fileResult = ybHttpUtils.queryCatalog(catalogFileInput); + + fileResult = ybHttpUtils.downLoadFile(fileResult); + + if (fileResult == null) { + return R.fail("获取失败"); + } + + return R.ok(fileResult); + } + + /** + * 【2401】入院办理 + * @return + */ + @PostMapping("/inpatient-reg") + public R inpatientReg(Yb2401InpatientRegParamDto yb2401InpatientRegParamDto){ + + Yb2401InputInpatientMdtrtInfo yb2401InputInpatientMdtrtInfo = ybDao.getYb2401InputInpatientMdtrtInfo(yb2401InpatientRegParamDto.getEncounterId()); + + yb2401InputInpatientMdtrtInfo.setMdtrtCertType(yb2401InpatientRegParamDto.getYbMdtrtCertType()); + yb2401InputInpatientMdtrtInfo.setMdtrtCertNo(yb2401InpatientRegParamDto.getBusiCardInfo()); + + InpatientReg inpatientReg = ybHttpUtils.inpatientReg(yb2401InputInpatientMdtrtInfo); + + if(inpatientReg!=null){ + + inpatientReg.setInputParam(JSON.toJSONString(yb2401InputInpatientMdtrtInfo)); + ybDao.save2401InpatientReg(inpatientReg); + return R.ok("医保入院办理成功!"); + + } + return R.fail("医保入院办理失败!"); + } + + /** + * 【2402】入院办理 + * @return + */ + @PostMapping("/inpatient-dis-charge") + public R inpatientCheckOut(Long encounterId){ + + Contract contract = new Contract(); + Yb2402InputParam yb2402InputInpatientDscgInfo = ybDao.getYb2402InputInpatientDscgInfo(encounterId,contract); + + InpatientDischarge inpatientReg = ybHttpUtils.inpatientCheckOut(contract,yb2402InputInpatientDscgInfo); + + if(inpatientReg!=null){ + + inpatientReg.setInputParam(JSON.toJSONString(yb2402InputInpatientDscgInfo)); + ybDao.save2402InpatientDscg(inpatientReg); + return R.ok("医保出院办理成功!"); + + } + return R.fail("医保出院办理失败!"); + } + + /** + * 【2403】入院办理 + * @return + */ + @PostMapping("/update-inpatient-info") + public R updateInpatientInfo(Long encounterId){ + + Yb2403InputParam yb2403InputParam = ybDao.getYb2403InputParam(encounterId); + + ybHttpUtils.updateInpatientInfo(yb2403InputParam); + + ybDao.save2403InputInpatient(yb2403InputParam); + + return R.fail("医保出院办理失败!"); } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2401InpatientRegParamDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2401InpatientRegParamDto.java new file mode 100644 index 00000000..0c6c1658 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2401InpatientRegParamDto.java @@ -0,0 +1,23 @@ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; + +@Data +public class Yb2401InpatientRegParamDto { + + /** + * 密钥 医保挂号时使用 + */ + private String busiCardInfo;// 2025/05/16 前后端一致,前端大写,后端保持大写 + + /** + * 类型 医保挂号时使用 + */ + private String ybMdtrtCertType; + + /** + * 就诊id + */ + private Long encounterId; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbMapper.java index e7050d0b..0d97916b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbMapper.java @@ -10,7 +10,7 @@ import com.openhis.yb.dto.*; /** * 医保Mapper * - * @author GuoRui + * @author Thanking */ @Repository public interface YbMapper { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbService.java index f5fc7ab7..d4364a22 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbService.java @@ -5,7 +5,7 @@ import com.core.common.core.domain.R; /** * 医保Service * - * @author GuoRui + * @author Thanking */ public interface IYbService { diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbServiceImpl.java index 20e20120..3d99c6b6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbServiceImpl.java @@ -28,7 +28,7 @@ import com.openhis.yb.service.YbHttpUtils; /** * 医保ServiceImpl * - * @author GuoRui + * @author Thanking */ @Service public class YbServiceImpl implements IYbService { @@ -298,7 +298,7 @@ public class YbServiceImpl implements IYbService { // 医疗服务机构类型:参考字典表 .setMedinsType(YbMedinsType.FIXMEDINS_TYPE1.getValue()) // 医疗机构等级:参考字典表 - .setMedinsLv(TenantOptionUtil.getOptionContent(TenantOptionDict.MEDINS_LV)) + .setMedinsLv(TenantOptionUtil.getOptionContent(TenantOptionDict.YB_MEDINS_LV)) // 入院日期 .setAdmDate(encounterPatientInfo.getAdmDate()) // 出院日期 diff --git a/openhis-server-new/openhis-application/src/main/resources/application-test.yml b/openhis-server-new/openhis-application/src/main/resources/application-test.yml index b4401162..ce841649 100644 --- a/openhis-server-new/openhis-application/src/main/resources/application-test.yml +++ b/openhis-server-new/openhis-application/src/main/resources/application-test.yml @@ -62,7 +62,11 @@ spring: # redis 配置 redis: # 地址 +<<<<<<< HEAD:openhis-server-new/openhis-application/src/main/resources/application-test.yml host: 192.168.110.252 +======= + host: localhost +>>>>>>> upstream/develop:openhis-server-new/openhis-application/src/main/resources/application-local.yml # 端口,默认为6379 port: 6379 # 数据库索引 diff --git a/openhis-server-new/openhis-application/src/main/resources/application.yml b/openhis-server-new/openhis-application/src/main/resources/application.yml index a8228c06..35c92f6d 100644 --- a/openhis-server-new/openhis-application/src/main/resources/application.yml +++ b/openhis-server-new/openhis-application/src/main/resources/application.yml @@ -49,7 +49,11 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: +<<<<<<< HEAD active: dev +======= + active: local # (本地)local (生产)prod +>>>>>>> upstream/develop # 文件上传 servlet: multipart: diff --git a/openhis-server-new/openhis-application/src/main/resources/i18n/messages.properties b/openhis-server-new/openhis-application/src/main/resources/i18n/messages.properties index 09a1d5b4..67955d33 100644 --- a/openhis-server-new/openhis-application/src/main/resources/i18n/messages.properties +++ b/openhis-server-new/openhis-application/src/main/resources/i18n/messages.properties @@ -1,53 +1,55 @@ -#错误消息 -not.null=* 必须填写 -user.jcaptcha.error=验证码错误 -user.jcaptcha.expire=验证码已失效 -user.not.exists=用户不存在/密码错误 -user.password.not.match=用户不存在/密码错误 -user.password.retry.limit.count=密码输入错误{0}次 -user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟 -user.password.delete=对不起,您的账号已被删除 -user.blocked=用户已封禁,请联系管理员 -role.blocked=角色已封禁,请联系管理员 -login.blocked=很遗憾,访问IP已被列入系统黑名单 -user.logout.success=退出成功 -length.not.valid=长度必须在{min}到{max}个字符之间 -user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 -user.password.not.valid=* 5-50个字符 -user.email.not.valid=邮箱格式错误 -user.mobile.phone.number.not.valid=手机号格式错误 -user.login.success=登录成功 -user.register.success=注册成功 -user.notfound=请重新登录 -user.forcelogout=管理员强制退出,请重新登录 -user.unknown.error=未知错误,请重新登录 -##文件上传消息 -upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB! -upload.filename.exceed.length=上传的文件名最长{0}个字符 -##权限 -no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] -no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] -no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}] -no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] -no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}] -no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] -apl.common.M00001={0}添加成功 -apl.common.M00002={0}保存成功 -apl.common.M00003={0}已经存在 -apl.common.M00004={0}操作成功 -apl.common.M00005={0}删除成功 -apl.common.M00006=操作失败,该数据已被他人删除,请刷新后重试 -apl.common.M00007=操作失败,该数据已被他人更改,请刷新后重试 -apl.common.M00008=请勿重复提交 -apl.common.M00009=查询成功 -apl.common.M00010=操作失败,请联系管理员 -apl.chargeRefund.M00001=该收费单相关{0}已经发出,请先退药后再进行退费 -apl.payment.M00001=各缴费渠道实收金额合计不等于实收金额 -apl.payment.M00002=实收金额合计不等于应收金额 -apl.payment.M00003=请选择支付方式 -apl.payment.M00004=查询成功 -apl.payment.M00005=操作失败,请联系管理员 -apl.payment.M00006=成功收费 -apl.payment.M00007=未查询到收费项目 -apl.payment.M00008=未查询到{0}账户信息 -apl.payment.M00009=未查询到收费项目,不需要转换账户 \ No newline at end of file +#\u9519\u8BEF\u6D88\u606F +not.null=* \u5FC5\u987B\u586B\u5199 +user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF +user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548 +user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF +user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF +user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21 +user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F +user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664 +user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +login.blocked=\u5F88\u9057\u61BE\uFF0C\u8BBF\u95EEIP\u5DF2\u88AB\u5217\u5165\u7CFB\u7EDF\u9ED1\u540D\u5355 +user.logout.success=\u9000\u51FA\u6210\u529F +length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4 +user.username.not.valid=* 2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934 +user.password.not.valid=* 5-50\u4E2A\u5B57\u7B26 +user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF +user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF +user.login.success=\u767B\u5F55\u6210\u529F +user.register.success=\u6CE8\u518C\u6210\u529F +user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55 +user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 +user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 +##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F +upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01
\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01 +upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26 +##\u6743\u9650 +no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}] +apl.common.M00001={0}\u6DFB\u52A0\u6210\u529F +apl.common.M00002={0}\u4FDD\u5B58\u6210\u529F +apl.common.M00003={0}\u5DF2\u7ECF\u5B58\u5728 +apl.common.M00004={0}\u64CD\u4F5C\u6210\u529F +apl.common.M00005={0}\u5220\u9664\u6210\u529F +apl.common.M00006=\u64CD\u4F5C\u5931\u8D25,\u8BE5\u6570\u636E\u5DF2\u88AB\u4ED6\u4EBA\u5220\u9664,\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5 +apl.common.M00007=\u64CD\u4F5C\u5931\u8D25,\u8BE5\u6570\u636E\u5DF2\u88AB\u4ED6\u4EBA\u66F4\u6539,\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5 +apl.common.M00008=\u8BF7\u52FF\u91CD\u590D\u63D0\u4EA4 +apl.common.M00009=\u67E5\u8BE2\u6210\u529F +apl.common.M00010=\u64CD\u4F5C\u5931\u8D25,\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +apl.chargeRefund.M00001=\u8BE5\u6536\u8D39\u5355\u76F8\u5173{0}\u5DF2\u7ECF\u53D1\u51FA\uFF0C\u8BF7\u5148\u9000\u836F\u540E\u518D\u8FDB\u884C\u9000\u8D39 +apl.payment.M00001=\u5404\u7F34\u8D39\u6E20\u9053\u5B9E\u6536\u91D1\u989D\u5408\u8BA1\u4E0D\u7B49\u4E8E\u5B9E\u6536\u91D1\u989D +apl.payment.M00002=\u5B9E\u6536\u91D1\u989D\u5408\u8BA1\u4E0D\u7B49\u4E8E\u5E94\u6536\u91D1\u989D +apl.payment.M00003=\u8BF7\u9009\u62E9\u652F\u4ED8\u65B9\u5F0F +apl.payment.M00004=\u67E5\u8BE2\u6210\u529F +apl.payment.M00005=\u64CD\u4F5C\u5931\u8D25,\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458 +apl.payment.M00006=\u6210\u529F\u6536\u8D39 +apl.payment.M00007=\u672A\u67E5\u8BE2\u5230\u6536\u8D39\u9879\u76EE +apl.payment.M00008=\u672A\u67E5\u8BE2\u5230{0}\u8D26\u6237\u4FE1\u606F +apl.payment.M00009=\u672A\u67E5\u8BE2\u5230\u6536\u8D39\u9879\u76EE\uFF0C\u4E0D\u9700\u8981\u8F6C\u6362\u8D26\u6237 +apl.adjustPrice.M00001=\u6267\u884C\u5931\u8D25\uFF0C\u672A\u52A0\u8F7D\u5230\u4EFB\u4F55\u6570\u636E\uFF01 +apl.adjustPrice.M00002=\u6267\u884C\u5931\u8D25\uFF0C\u6539\u4EF7\u5355\u4E2D\u6709\u6B63\u5728\u5BA1\u6838\u4E2D\u7684\u8D27\u54C1\uFF0C\u8BF7\u68C0\u67E5\u540E\u91CD\u65B0\u63D0\u4EA4\uFF01 \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/InventoryAdjustPriceMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/InventoryAdjustPriceMapper.xml new file mode 100644 index 00000000..0c74ce55 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/InventoryAdjustPriceMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailAppMapper.xml new file mode 100644 index 00000000..18aedec2 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailAppMapper.xml @@ -0,0 +1,324 @@ + + + + + + + + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailsMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailsMapper.xml deleted file mode 100644 index a23c4b9b..00000000 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ProductDetailsMapper.xml +++ /dev/null @@ -1,523 +0,0 @@ - - - - - - - - diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseInventoryMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseInventoryMapper.xml index 819b9364..0bf5f91f 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseInventoryMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/PurchaseInventoryMapper.xml @@ -15,6 +15,7 @@ T2.practitioner_id, T2.item_table, T2.purpose_type_enum, + T2.category_enum, CASE WHEN EXISTS ( SELECT 1 @@ -36,7 +37,8 @@ T1.practitioner_id, T1.item_table, T1.purpose_type_enum, - T1.tenant_id + T1.tenant_id, + T1.category_enum FROM wor_supply_request AS T1 WHERE type_enum = #{purchaseInventory} AND T1.delete_flag = '0' @@ -50,10 +52,11 @@ T1.practitioner_id, T1.item_table, T1.purpose_type_enum, - T1.tenant_id + T1.tenant_id, + T1.category_enum ORDER BY T1.bus_no desc - ) AS T2 - ${ew.customSqlSegment} + ) AS T2 + ${ew.customSqlSegment} + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReceiptApprovalMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReceiptApprovalMapper.xml index 2729cbd2..a57b5d95 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReceiptApprovalMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/Inventorymanage/ReceiptApprovalMapper.xml @@ -146,7 +146,10 @@ T2.applicant_id, T2.apply_time, T2.practitioner_id, - T2.tenant_id + T2.tenant_id, + T2.supplier_id, + T2.purpose_location_id, + T2.total_amount FROM (SELECT T1.bus_no AS supply_bus_no, T1.status_enum, T1.type_enum, @@ -155,19 +158,34 @@ T1.applicant_id, T1.apply_time, T1.practitioner_id, - T1.tenant_id + T1.tenant_id, + T1.supplier_id, + T1.purpose_location_id, + SUM ( T1.total_price ) as total_amount FROM wor_supply_request AS T1 + LEFT JOIN adm_supplier T3 + ON T3.id = T1.supplier_id + AND T3.delete_flag = '0' + LEFT JOIN adm_location T4 + ON T4.id = T1.purpose_location_id + AND T4.delete_flag = '0' WHERE T1.status_enum IN (#{approval},#{agree},#{reject}) - AND T1.delete_flag != '1' - GROUP BY T1.bus_no, - T1.status_enum, - T1.type_enum, - T1.approver_id, - T1.approval_time, - T1.applicant_id, - T1.apply_time, - T1.practitioner_id, - T1.tenant_id + AND T1.type_enum IN (#{productBatchTransfer},#{productTransfer},#{productReturn},#{productStocktaking}, + #{productBatchStocktaking},#{purchaseInventory},#{lossReportForm},#{issueInventory},#{returnIssue}) + AND T1.delete_flag = '0' + GROUP BY + T1.bus_no, + T1.status_enum, + T1.type_enum, + T1.approver_id, + T1.approval_time, + T1.applicant_id, + T1.apply_time, + T1.practitioner_id, + T1.tenant_id, + T1.summary_id, + T1.supplier_id, + T1.purpose_location_id ORDER BY T1.apply_time desc ) AS T2 ${ew.customSqlSegment} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/adjustprice/AdjustPriceMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/adjustprice/AdjustPriceMapper.xml new file mode 100644 index 00000000..fd67328d --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/adjustprice/AdjustPriceMapper.xml @@ -0,0 +1,95 @@ + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/adjustprice/SupplyMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/adjustprice/SupplyMapper.xml deleted file mode 100644 index edc0a494..00000000 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/adjustprice/SupplyMapper.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml index 6ce5ac7e..7612803d 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientChargeAppMapper.xml @@ -77,6 +77,11 @@ T1.unit_price, T1.total_price, mmr.prescription_no, + mmr.prescription_no, + mmr.method_code, + mmr.rate_code, + mmr.dose, + mmr.dose_unit_code, T1.bus_no, T1.entered_date, T1.account_id, @@ -84,6 +89,7 @@ T1.service_id, T5.enterer_id, T5.bill_date, + T5.id AS payment_id, T6.contract_no, T7.med_type_code, T8.contract_name, diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRefundAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRefundAppMapper.xml index df6ed970..5d028643 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRefundAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRefundAppMapper.xml @@ -43,7 +43,7 @@ SELECT ae.yb_class_enum AS encounter_yb_class, - mmr.prescription_no , - fc.contract_name , - ap."name" AS patient_name, - ap.gender_enum , - ap.birth_date , - ae.bus_no AS encounter_no, - ao."name" AS department_name, - ccd."name" AS condition_name, - ap.phone , - mmr.req_authored_time AS req_time, - ap2."name" AS doctor_name, - ap3."name" AS dispense_doctor_name, - ap4."name" AS charge_doctor_name, - ap5."name" AS preparer_doctor_name, - mmd2."name" AS item_name, - mm.total_volume , - mmr.dose , - mmr.method_code , - aci.unit_price , - aci.total_price , - mmr.quantity, - mmr.rate_code , - mmr.unit_code , - mmr.dose_unit_code, - mmr.sort_number, - mmr.group_id + mmr.prescription_no , + fc.contract_name , + ap."name" AS patient_name, + ap.gender_enum , + ap.birth_date , + ae.bus_no AS encounter_no, + ao."name" AS department_name, + ccd."name" AS condition_name, + ap.phone , + mmr.req_authored_time AS req_time, + ap2."name" AS doctor_name, + ap3."name" AS dispense_doctor_name, + ap4."name" AS charge_doctor_name, + ap5."name" AS preparer_doctor_name, + mmd2."name" AS item_name, + mm.total_volume , + mmr.dose , + mmr.method_code , + aci.unit_price , + aci.total_price , + mmr.quantity, + mmr.rate_code , + mmr.unit_code , + mmr.dose_unit_code, + mmr.sort_number, + mmr.group_id FROM med_medication_request mmr - LEFT JOIN med_medication_dispense mmd - ON mmd.med_req_id = mmr.id - AND mmd.delete_flag = '0' - LEFT JOIN med_medication_definition mmd2 - ON mmr.medication_id = mmd2.id - AND mmd2.delete_flag = '0' - LEFT JOIN med_medication mm - ON mmd2.id = mm.medication_def_id - AND mm.delete_flag = '0' - LEFT JOIN adm_charge_item aci - ON aci.service_id = mmr.id - AND aci.delete_flag = '0' - LEFT JOIN cli_condition AS cc - ON mmr.condition_id = cc.id - AND cc.delete_flag = '0' - LEFT JOIN cli_condition_definition AS ccd - ON cc.definition_id = ccd.id - AND ccd.delete_flag = '0' - LEFT JOIN adm_encounter ae - ON mmr.encounter_id = ae.id - AND ae.delete_flag = '0' - LEFT JOIN adm_patient ap - ON ae.patient_id = ap.id - AND ap.delete_flag = '0' - LEFT JOIN adm_organization ao - ON ao.id = ae.organization_id - AND ao.delete_flag = '0' - LEFT JOIN adm_account aa - ON ae.id = aa.encounter_id - AND aa.encounter_flag = 1 - AND aa.delete_flag = '0' - LEFT JOIN fin_contract fc - ON aa.contract_no = fc.bus_no - AND fc.delete_flag = '0' - LEFT JOIN adm_practitioner ap2 - ON ap2.id = mmr.practitioner_id - AND ap2.delete_flag = '0' - LEFT JOIN adm_practitioner ap3 - ON ap3.id = mmd.practitioner_id - AND ap3.delete_flag = '0' - LEFT JOIN adm_practitioner ap4 - ON ap4.id = aci.performer_id - AND ap4.delete_flag = '0' - LEFT JOIN adm_practitioner ap5 - ON ap5.id = mmd.preparer_id - AND ap5.delete_flag = '0' + LEFT JOIN med_medication_dispense mmd + ON mmd.med_req_id = mmr.id + AND mmd.delete_flag = '0' + LEFT JOIN med_medication_definition mmd2 + ON mmr.medication_id = mmd2.id + AND mmd2.delete_flag = '0' + LEFT JOIN med_medication mm + ON mmd2.id = mm.medication_def_id + AND mm.delete_flag = '0' + LEFT JOIN adm_charge_item aci + ON aci.service_id = mmr.id + AND aci.delete_flag = '0' + LEFT JOIN cli_condition AS cc + ON mmr.condition_id = cc.id + AND cc.delete_flag = '0' + LEFT JOIN cli_condition_definition AS ccd + ON cc.definition_id = ccd.id + AND ccd.delete_flag = '0' + LEFT JOIN adm_encounter ae + ON mmr.encounter_id = ae.id + AND ae.delete_flag = '0' + LEFT JOIN adm_patient ap + ON ae.patient_id = ap.id + AND ap.delete_flag = '0' + LEFT JOIN adm_organization ao + ON ao.id = ae.organization_id + AND ao.delete_flag = '0' + LEFT JOIN adm_account aa + ON ae.id = aa.encounter_id + AND aa.encounter_flag = 1 + AND aa.delete_flag = '0' + LEFT JOIN fin_contract fc + ON aa.contract_no = fc.bus_no + AND fc.delete_flag = '0' + LEFT JOIN adm_practitioner ap2 + ON ap2.id = mmr.practitioner_id + AND ap2.delete_flag = '0' + LEFT JOIN adm_practitioner ap3 + ON ap3.id = mmd.practitioner_id + AND ap3.delete_flag = '0' + LEFT JOIN adm_practitioner ap4 + ON ap4.id = aci.performer_id + AND ap4.delete_flag = '0' + LEFT JOIN adm_practitioner ap5 + ON ap5.id = mmd.preparer_id + AND ap5.delete_flag = '0' WHERE mmr.delete_flag = '0' - AND mmr.id IN - - #{requestId} - + AND mmr.id IN + + #{requestId} + + + + + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml index c6cd4b42..ca161cf9 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml @@ -85,9 +85,12 @@ ( SELECT T4.amount FROM adm_charge_item_definition T5 LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T5.id - WHERE T4.condition_code = '2'--2:采购价 + WHERE T4.condition_code in ('1','2')--2:采购价 AND T5.instance_id = T1.id AND T5.instance_table = 'adm_device_definition' + AND T4.delete_flag='0' + ORDER BY T4.create_time desc + LIMIT 1 ) as purchase_price,--购入价 ( SELECT T4.amount FROM adm_charge_item_definition T5 @@ -101,6 +104,7 @@ T1.delete_flag = '0' AND T2.instance_table = 'adm_device_definition' + ORDER BY T1.bus_no ) AS T3 @@ -151,9 +155,12 @@ ( SELECT T4.amount FROM adm_charge_item_definition T5 LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T5.id - WHERE T4.condition_code = '2'--2:采购价 + WHERE T4.condition_code in ('1','2')--2:采购价 AND T5.instance_id = T1.id AND T5.instance_table = 'adm_device_definition' + AND T4.delete_flag='0' + ORDER BY T4.create_time desc + LIMIT 1 ) as purchase_price,--购入价 ( SELECT T4.amount FROM adm_charge_item_definition T5 diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/ICDCodeMpper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/ICDCodeMpper.xml new file mode 100644 index 00000000..23b85ee4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/ICDCodeMpper.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/MedicationManageSearchMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/MedicationManageSearchMapper.xml index 88142847..21ba1920 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/MedicationManageSearchMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/MedicationManageSearchMapper.xml @@ -150,9 +150,12 @@ (SELECT T7.amount FROM adm_charge_item_definition T5 LEFT JOIN adm_charge_item_def_detail T7 ON T7.definition_id = T5.id - WHERE T7.condition_code = '2'--2:采购价 + WHERE T7.condition_code in('1','2') AND T5.instance_id = T2.medication_def_id AND T5.instance_table = 'med_medication_definition' + AND T7.delete_flag='0' + ORDER BY T7.create_time desc + LIMIT 1 ) as purchase_price,--购入价 ( SELECT T7.amount @@ -164,7 +167,7 @@ ) as maximum_retail_price--最高零售价 FROM med_medication_definition T1 LEFT JOIN med_medication T2 ON T1.id = T2.medication_def_id AND T2.delete_flag = '0' - LEFT JOIN adm_charge_item_definition T5 ON T2.medication_def_id = T5.instance_id + LEFT JOIN adm_charge_item_definition T5 ON T2.medication_def_id = T5.instance_id AND T5.delete_flag = '0' T1.delete_flag = '0' AND T5.instance_table = 'med_medication_definition' @@ -241,15 +244,19 @@ T1.rx_flag,--处方标志 T1.item_min_quantity,--最小库存警戒数量(常规单位) T1.item_max_quantity,--最大库存警戒数量(常规单位) + T1.dosage_instruction, T3.type_code, T3.yb_type, T3.price as retail_price,--零售价 (SELECT T4.amount FROM adm_charge_item_definition T3 LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T3.id - WHERE T4.condition_code = '2'--2:采购价 + WHERE T4.condition_code in ('1','2')--2:采购价 AND T3.instance_id = T2.medication_def_id AND T3.instance_table = 'med_medication_definition' + AND T4.delete_flag='0' + ORDER BY T4.create_time desc + LIMIT 1 ) as purchase_price,--购入价 ( SELECT T4.amount diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml index 711a26e3..8ed55751 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml @@ -7,6 +7,7 @@ @@ -492,6 +695,17 @@ AND (CURRENT_TIME :: TIME ( 6 ) BETWEEN aol.start_time AND aol.end_time) + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationChineseMedicalAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationChineseMedicalAppMapper.xml index 1a6eb91e..ace99456 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationChineseMedicalAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationChineseMedicalAppMapper.xml @@ -57,6 +57,7 @@ T1.dispense_per_duration AS dispense_per_duration, T1.chinese_herbs_dose_quantity AS chinese_herbs_dose_quantity, T1.suffering_flag AS suffering_flag, + T1.dosage_instruction AS dosage_instruction, T2.part_percent AS part_percent, ccd.name AS condition_definition_name FROM med_medication_request AS T1 @@ -69,7 +70,7 @@ LEFT JOIN adm_location AS al ON al.ID = T1.perform_location AND al.delete_flag = '0' LEFT JOIN cli_condition AS cc ON cc.id = T1.condition_id AND cc.delete_flag = '0' LEFT JOIN cli_condition_definition AS ccd ON ccd.id = cc.definition_id - WHERE T1.delete_flag = '0' AND T1.tcm_flag = 1 + WHERE T1.delete_flag = '0' AND T1.tcm_flag = 1 AND T1.generate_source_enum = #{generateSourceEnum} AND T1.encounter_id = #{encounterId} @@ -122,7 +123,7 @@ LEFT JOIN adm_location AS al ON al.ID = T1.perform_location AND al.delete_flag = '0' LEFT JOIN cli_condition AS cc ON cc.id = T1.condition_id AND cc.delete_flag = '0' LEFT JOIN cli_condition_definition AS ccd ON ccd.id = cc.definition_id - WHERE T1.delete_flag = '0' AND T1.tcm_flag = 1 + WHERE T1.delete_flag = '0' AND T1.tcm_flag = 1 AND T1.generate_source_enum = #{generateSourceEnum} AND T1.encounter_id = #{encounterId} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml index 43777621..2eb0ee24 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml @@ -23,7 +23,8 @@ T10.register_time, T10.reception_time, T10.practitioner_user_id, - T10.jz_practitioner_user_id + T10.jz_practitioner_user_id, + T10.bus_no from ( SELECT T1.tenant_id AS tenant_id, @@ -48,6 +49,7 @@ T1.create_time AS register_time, T1.reception_time AS reception_time, T1.organization_id AS org_id, + T8.bus_no AS bus_no, CASE WHEN T9.patient_id IS NOT NULL THEN 1 ELSE 0 @@ -59,6 +61,7 @@ ON T1.ID = T4.encounter_id AND T4.type_code = #{participantType} AND T4.status_enum = #{activityStatus} AND T4.delete_flag = '0' + AND T1.status_enum = #{encounterStatus} LEFT JOIN adm_practitioner AS T5 ON T5.ID = T4.practitioner_id AND T5.delete_flag = '0' LEFT JOIN adm_encounter_participant AS aep ON T1.ID = aep.encounter_id AND aep.type_code = #{participantType2} @@ -75,8 +78,11 @@ T1.delete_flag = '0' - AND ( T5.user_id = #{userId} - OR (T1.organization_id = #{currentUserOrganizationId}) ) + AND ( + (T4.encounter_id IS NOT NULL AND T5.user_id = #{userId}) + OR + (T4.encounter_id IS NULL AND T1.organization_id = #{currentUserOrganizationId}) + ) AND T1.status_enum != #{encounterStatus} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/document/DocDefinitionAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/document/DocDefinitionAppMapper.xml index d504c505..8efadbbb 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/document/DocDefinitionAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/document/DocDefinitionAppMapper.xml @@ -33,7 +33,7 @@ - AND ddo.organization_id = #{organizationId} OR dd.use_range_enum = 1 + AND (ddo.organization_id = #{organizationId} OR dd.use_range_enum = 1) AND dd.name LIKE CONCAT('%',#{name},'%') diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/InpatientMedicineCollectionMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/InpatientMedicineCollectionMapper.xml deleted file mode 100644 index 12e119a1..00000000 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/InpatientMedicineCollectionMapper.xml +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/MedicineSummaryAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/MedicineSummaryAppMapper.xml new file mode 100644 index 00000000..1198aee0 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/MedicineSummaryAppMapper.xml @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/NurseBillingAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/NurseBillingAppMapper.xml new file mode 100644 index 00000000..e8c452a8 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/NurseBillingAppMapper.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/OrgDeviceStockTakeAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/OrgDeviceStockTakeAppMapper.xml new file mode 100644 index 00000000..fd82cb3c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/inhospitalnursestation/OrgDeviceStockTakeAppMapper.xml @@ -0,0 +1,69 @@ + + + + + + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfRatioApplicationRecordAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfRatioApplicationRecordAppMapper.xml new file mode 100644 index 00000000..a8fa5050 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfRatioApplicationRecordAppMapper.xml @@ -0,0 +1,155 @@ + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfRatioManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfRatioManageAppMapper.xml new file mode 100644 index 00000000..086edffc --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfRatioManageAppMapper.xml @@ -0,0 +1,73 @@ + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfStudentListAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfStudentListAppMapper.xml new file mode 100644 index 00000000..1af616d8 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/nenu/GfStudentListAppMapper.xml @@ -0,0 +1,68 @@ + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientTreatmentAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientTreatmentAppMapper.xml index 9aa0af87..d930e55c 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientTreatmentAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/outpatientmanage/OutpatientTreatmentAppMapper.xml @@ -10,8 +10,7 @@ ii.patient_name, ii.patient_py_str, ii.patient_wb_str, - ii.birth_date, - ii.status_enum + ii.birth_date FROM ( SELECT T1.tenant_id, T1.id AS encounter_id, @@ -21,8 +20,7 @@ T2."name" AS patient_name, T2.py_str AS patient_py_str, T2.wb_str AS patient_wb_str, - T2.birth_date, - T3.status_enum + T2.birth_date FROM adm_encounter AS T1 INNER JOIN adm_patient AS T2 ON T1.patient_id = T2.id @@ -32,6 +30,7 @@ AND T3.refund_service_id IS NULL AND T3.delete_flag = '0' WHERE T1.class_enum = #{amb} + AND T3.status_enum IN (#{completed},#{cancelled}) AND T1.delete_flag = '0' GROUP BY T1.tenant_id, T1.id, @@ -41,8 +40,7 @@ T2.name, T2.py_str, T2.wb_str, - T2.birth_date, - T3.status_enum + T2.birth_date ORDER BY T1.bus_no DESC ) AS ii ${ew.customSqlSegment} @@ -245,7 +243,7 @@ ap.gender_enum, ap.birth_date, wad.NAME AS activity_name, - SUBSTRING(wad.bus_no FROM 3) AS bus_no, + SUBSTRING(wsr.bus_no FROM 3) AS bus_no, aper.name AS practitioner_name, ao.name AS org_name FROM wor_service_request AS wsr diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/paymentmanage/ChangePriceMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/paymentmanage/ChangePriceMapper.xml new file mode 100644 index 00000000..e351aa05 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/paymentmanage/ChangePriceMapper.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/paymentmanage/PaymentMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/paymentmanage/PaymentMapper.xml index a0b6bf02..ee3cef8c 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/paymentmanage/PaymentMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/paymentmanage/PaymentMapper.xml @@ -4,63 +4,65 @@ diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml index 40f6b351..a436d1c2 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/ReturnMedicineMapper.xml @@ -63,7 +63,7 @@ ORDER BY ii.reception_time DESC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/WesternMedicineDispenseMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/WesternMedicineDispenseMapper.xml index cc779a83..298dcbe6 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/WesternMedicineDispenseMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/pharmacymanage/WesternMedicineDispenseMapper.xml @@ -50,43 +50,6 @@ T4.status_enum = #{completed} - UNION - SELECT T1.tenant_id, - T1.id AS encounter_id, - T1.bus_no AS encounter_no, - T1.reception_time, - T1.organization_id AS department_id, - T1.class_enum, - T2.gender_enum, - T2.name AS patient_name, - T2.wb_str AS patient_wb_str, - T2.py_str AS patient_py_str, - T2.id_card, - T2.birth_date, - T3.name AS department_name, - T4.status_enum - FROM adm_encounter AS T1 - INNER JOIN adm_patient AS T2 - ON T1.patient_id = T2.id - AND T2.delete_flag = '0' - LEFT JOIN adm_organization AS T3 - ON T1.organization_id = T3.id - AND T3.delete_flag = '0' - INNER JOIN wor_device_dispense AS T4 - ON T4.encounter_id = T1.id - AND T4.delete_flag = '0' - INNER JOIN wor_device_request AS T5 - ON T4.device_req_id = T5.id - AND T5.delete_flag = '0' - WHERE - T4.status_enum IN (#{inProgress},#{completed},#{preparation},#{prepared}) - - - T4.status_enum IN (#{inProgress},#{preparation},#{prepared}) - - - T4.status_enum = #{completed} - ) AS ii ${ew.customSqlSegment} GROUP BY ii.encounter_id, @@ -105,6 +68,7 @@ + + \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/ChargeReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/ChargeReportMapper.xml index ab40d692..8099a01b 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/ChargeReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/ChargeReportMapper.xml @@ -101,6 +101,7 @@ LEFT JOIN adm_encounter T2 ON T2.id = T1.encounter_id AND T2.delete_flag = '0' + AND T2.class_enum = 2 LEFT JOIN adm_patient AS T15 ON T1.patient_id = T15.id AND T15.delete_flag = '0' diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/InventoryProductReportMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/InventoryProductReportMapper.xml index 51a5213b..b259f5bd 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/InventoryProductReportMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/reportmanage/InventoryProductReportMapper.xml @@ -4,6 +4,7 @@ diff --git a/openhis-server-new/openhis-common/pom.xml b/openhis-server-new/openhis-common/pom.xml index aaafbc70..8cee3957 100644 --- a/openhis-server-new/openhis-common/pom.xml +++ b/openhis-server-new/openhis-common/pom.xml @@ -25,7 +25,8 @@ com.core core-admin - + 0.0.1-SNAPSHOT + diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/aspectj/OperLogAspect.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/aspectj/OperLogAspect.java new file mode 100644 index 00000000..1f3d13c4 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/aspectj/OperLogAspect.java @@ -0,0 +1,194 @@ + +package com.openhis.common.aspectj; + +import java.lang.reflect.Method; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; + +import com.alibaba.fastjson2.JSON; +import com.core.common.core.domain.R; +import com.core.common.utils.SecurityUtils; +import com.core.system.domain.SysOperLog; + +import lombok.extern.slf4j.Slf4j; + +@Aspect +@Component +@Slf4j +public class OperLogAspect { + + @Autowired + private JdbcTemplate jdbcTemplate; + + // 线程局部变量,用于在方法调用前后传递数据 + private final ThreadLocal operLogThreadLocal = new ThreadLocal<>(); + private final ThreadLocal startTimeThreadLocal = new ThreadLocal<>(); + + /** + * 定义切点:所有Controller包下的方法,排除login接口 + */ + @Pointcut("execution(* com.openhis.web..controller..*.*(..)) " + + "&& !execution(* com.openhis.web..controller..*.login(..)) ") + public void operLogPointCut() {} + + /** + * 前置通知:在方法执行前记录请求信息 + */ + @Before("operLogPointCut()") + public void doBefore(JoinPoint joinPoint) { + try { + ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); + if (attributes == null) { + return; + } + + HttpServletRequest request = attributes.getRequest(); + MethodSignature signature = (MethodSignature)joinPoint.getSignature(); + Method method = signature.getMethod(); + + // 创建操作日志对象 + SysOperLog operLog = new SysOperLog(); + operLog.setOperTime(new Date()); + operLog.setOperUrl(request.getRequestURI()); + operLog.setRequestMethod(request.getMethod()); + + // 获取请求参数 + String operParam = getRequestParams(joinPoint, request); + operLog.setOperParam(operParam); + + // 设置操作方法名 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = method.getName(); + operLog.setMethod(className + "." + methodName + "()"); + + // 保存到线程局部变量 + operLogThreadLocal.set(operLog); + + // 记录开始时间 + startTimeThreadLocal.set(System.currentTimeMillis()); + + } catch (Exception e) { + log.error("操作日志前置通知异常", e); + } + } + + /** + * 返回通知:在方法成功执行后记录结果 + */ + @AfterReturning(pointcut = "operLogPointCut()", returning = "result") + public void doAfterReturning(JoinPoint joinPoint, Object result) { + try { + SysOperLog operLog = operLogThreadLocal.get(); + if (operLog == null) { + return; + } + + // 计算消耗时间 + Long startTime = startTimeThreadLocal.get(); + if (startTime != null) { + Long costTime = System.currentTimeMillis() - startTime; + operLog.setCostTime(costTime); + } + + // 设置操作结果 + if (result instanceof R) { + R r = (R)result; + operLog.setJsonResult(JSON.toJSONString(r)); + // 根据R的code判断操作状态 + if (r.getCode() != 200) { // 假设200是成功状态码 + operLog.setStatus(1); // 失败 + operLog.setErrorMsg(r.getMsg()); + } + } else { + operLog.setJsonResult(result != null ? JSON.toJSONString(result) : "null"); + } + // 插入数据库 + insertOperLog(operLog); + + } catch (Exception e) { + log.error("操作日志返回通知异常", e); + } finally { + // 清理线程局部变量 + operLogThreadLocal.remove(); + } + } + + /** + * 获取请求参数 + */ + private String getRequestParams(JoinPoint joinPoint, HttpServletRequest request) { + Map params = new HashMap<>(); + + // 添加基本请求信息 + params.put("url", request.getRequestURL().toString()); + params.put("method", request.getMethod()); + + // 获取Query参数 + Map parameterMap = request.getParameterMap(); + if (!parameterMap.isEmpty()) { + Map queryParams = new HashMap<>(); + parameterMap.forEach((key, values) -> { + if (values.length == 1) { + queryParams.put(key, values[0]); + } else { + queryParams.put(key, values); + } + }); + params.put("query", queryParams); + } + + // 获取Body参数(排除文件上传和响应对象) + Object[] args = joinPoint.getArgs(); + if (args.length > 0) { + for (Object arg : args) { + if (isValidRequestBody(arg)) { + params.put("body", arg); + break; // 通常只有一个RequestBody + } + } + } + return JSON.toJSONString(params); + } + + /** + * 判断是否为有效的请求体参数 + */ + private boolean isValidRequestBody(Object arg) { + return arg != null && !(arg instanceof HttpServletRequest) && !(arg instanceof HttpServletResponse) + && !(arg instanceof MultipartFile) && !(arg instanceof MultipartFile[]); + } + + /** + * 插入操作日志到数据库 + */ + private void insertOperLog(SysOperLog operLog) { + String username = SecurityUtils.getLoginUser().getUsername(); + String sql = "INSERT INTO sys_oper_log " + + "(title,oper_time,method,request_method,oper_name,oper_url,oper_param,json_result,error_msg,cost_time) " + + "VALUES (?, ?, ?,?, ?, ?, ?, ?,?, ?)"; + try { + jdbcTemplate.update(sql, "OperLogAspect切面生成", operLog.getOperTime(), operLog.getMethod(), + operLog.getRequestMethod(), username, operLog.getOperUrl(), operLog.getOperParam(), + operLog.getJsonResult(), operLog.getErrorMsg(), operLog.getCostTime()); + } catch (Exception e) { + log.error("插入操作日志失败", e); + } + } +} \ No newline at end of file diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/constant/CommonConstants.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/constant/CommonConstants.java index 49b8d5f0..2ea21400 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/constant/CommonConstants.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/constant/CommonConstants.java @@ -169,7 +169,7 @@ public class CommonConstants { /** * 身份证号 */ - String idCard = "id_card"; + String IdCard = "id_card"; /** * 拼音码 @@ -235,6 +235,7 @@ public class CommonConstants { * 请求基于什么的ID */ String BasedOnTable = "based_on_table"; + /** * 药品id */ @@ -253,11 +254,12 @@ public class CommonConstants { /** * 支付流水 */ - String paymentNo = "payment_no"; + String PaymentNo = "payment_no"; /** * 拼音码 */ String PyStr = "py_str"; + /** * 五笔码 */ @@ -279,14 +281,15 @@ public class CommonConstants { String PrescriptionNo = "prescription_no"; /** - * 机构枚举 + * 项目分类 */ - String TYPE_ENUM = "type_enum"; + String MedCategoryCode = "med_category_code"; /** * 门诊号 */ String IptOtpNo = "ipt_otp_no"; + /** * 医保号 */ @@ -315,35 +318,80 @@ public class CommonConstants { * 费用项id */ String ChargeId = "charge_id"; + /** * 费用项时间 */ String ChargeTime = "charge_time"; + /** - * 采购员 + * 审批时间 */ String ApplicantName = "applicant_name"; + /** * 病床 */ String InpatientBed = "inpatient_bed"; + /** - * 病床 + * 预计发药时间 */ String PlannedDispenseTime = "planned_dispense_time"; + /** * 项目id */ - String itemId = "item_id"; + String ItemId = "item_id"; + + /** + * 项目所在表 + */ + String ItemTable = "item_table"; + + /** + * 项目名 + */ + String ItemName = "item_name"; + /** * 申请时间 */ - String applyTime = "apply_time"; + String ApplyTime = "apply_time"; /** * 校对人Id */ String PerformerCheckId = "performer_check_id"; + /** + * 单位 + */ + String UnitCode = "unit_code"; + + /** + * 住院开始时间 + */ + String StartTime = "start_time"; + + /** + * 数量 + */ + String Quantity = "quantity"; + + /** + * 所在位置 + */ + String LocationId = "location_id"; + + /** + * 供应商 + */ + String SupplierId = "supplier_id"; + + /** + * 过期天数 + */ + String RemainingDays = "remaining_days"; } /** @@ -376,6 +424,16 @@ public class CommonConstants { */ String DEFAULT_CONTRACT_NO = "0000"; + /** + * 默认合同编码 + */ + String DEFAULT_STUDENT_CONTRACT_NO = "STUDENT0000"; + + /** + * 默认合同编码 + */ + String CONTRACT_STUDENT = "STUDENT"; + /** * 皮试检查 */ diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/constant/PromptMsgConstant.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/constant/PromptMsgConstant.java index d56e5d7c..6a830da8 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/constant/PromptMsgConstant.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/constant/PromptMsgConstant.java @@ -253,4 +253,20 @@ public class PromptMsgConstant { String M00002 = "apl.report.M00002"; } + + /** + * 修改价格 + */ + public interface AdjustPrice { + + /** + * 数据异常 + */ + String M00001 = "apl.adjustPrice.M00001"; + /** + * 已经提交过正在审核中 + */ + String M00002 = "apl.adjustPrice.M00002"; + + } } diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/AssignSeqEnum.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/AssignSeqEnum.java index 1b3e061e..8c478bb1 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/AssignSeqEnum.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/AssignSeqEnum.java @@ -194,26 +194,32 @@ public enum AssignSeqEnum { * 订货单单号 */ PHARMACY_WAREHOUSE_PURCHASE("36", "药库订货单", "PWP"), + /** * 药房请领单单号 */ PURCHASE_REQUISITION("37", "药房请领单", "PRE"), + /** * 药房入库单单号 */ PURCHASE_STOCKIN("38", "药房入库单", "PST"), + /** * 药房退库单单号 */ PURCHASE_RETURN("39", "药房退库单", "PET"), + /** * 发药单单号 */ DISPENSING_ORDER("40", "发药单", "DIO"), + /** * 药房损益单单号 */ PURCHASE_PRPFITLOSS("41", "药房损益单", "PPR"), + /** * 药房盘点单单号 */ @@ -222,6 +228,7 @@ public enum AssignSeqEnum { * 药房调入单单号 */ PURCHASE_TRANSFERIN("43", "药房调入单", "PTI"), + /** * 药房调出单单号 */ @@ -241,18 +248,22 @@ public enum AssignSeqEnum { * 物资进货单 */ MATERIAL_STOCKIN("47", "物资进货单", "MSI"), + /** * 物资退货单 */ MATERIAL_RETURN("48", "物资退货单", "MRE"), + /** * 物资出库单 */ MATERIAL_STOCKOUT("49", "物资出库单", "MSO"), + /** * 物资退库单 */ MATERIAL_PRODUCT_RETURN("50", "物资退库单", "MPR"), + /** * 物资损益单 */ @@ -262,10 +273,12 @@ public enum AssignSeqEnum { * 物资盘点单 */ MATERIAL_STOCKTAKING("52", "物资盘点单", "MST"), + /** * 物资调入单 */ MATERIAL_TRANSFERIN("53", "物资调入单", "MTI"), + /** * 物资调出单 */ @@ -275,43 +288,77 @@ public enum AssignSeqEnum { * 科室请领单单号 */ DEPARTMENT_REQUISITION("55", "科室请领单", "DRE"), + /** * 科室入库单单号 */ DEPARTMENT_STOCKIN("56", "科室入库单", "DST"), + /** * 科室退库单单号 */ DEPARTMENT_RETURN("57", "科室退库单", "DET"), + /** * 科室损益单单号 */ DEPARTMENT_PRPFITLOSS("58", "科室损益单", "DPR"), + /** * 科室盘点单单号 */ DEPARTMENT_STOCKTAKING("59", "科室盘点单", "DTO"), + /** * 科室调入单单号 */ DEPARTMENT_TRANSFERIN("60", "科室调入单", "DTI"), + /** * 科室调出单单号 */ DEPARTMENT_TRANSFEROUT("61", "科室调出单", "DTU"), + /** * 诊疗处方号 */ ACTIVITY_PSYCHOTROPIC_NO("62", "诊疗处方号", "PAR"), + /** - * b - * 病历文书 + * b 病历文书 */ PURCHASE_DOCUMENT("63", "病历文书", "DOC"), + /** * 调价单 */ - CHANGE_PRICE_BUZ("64", "调整零售价", "CPB"); + CHANGE_PRICE_BUZ("64", "调整零售价", "CPB"), + + /** + * 药品汇总单号 + */ + MEDICINE_SUMMARY_NO("65", "药品汇总单号", "MSY"), + + /** + * 公费医疗自付比例调整申请编号 + */ + GF_RATIO_APPLICATION("66", "公费医疗自付比例调整申请编号", "GRA"), + + /** + * 参与者编码 + */ + PRACTITIONER_NO("67", "参与者编码", "PER"), + + /** + * 号源编码 + */ + HEALTHCARE_SERVICE_NO("68", "号源编码", "HS"), + + /** + * 耗材汇总单号 + */ + DEVICE_SUMMARY_NO("69", "耗材汇总单号", "DSN"); + private final String code; private final String info; private final String prefix; diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ConditionCode.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ConditionCode.java index 85d8baf9..efd73d40 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ConditionCode.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ConditionCode.java @@ -33,7 +33,7 @@ public enum ConditionCode implements HisEnumInterface { LIMIT(4, "4", "限制"), /** - * 限制 + * 产品批号售价 */ LOT_NUMBER_PRICE(5, "5", "产品批号售价"); diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EducationLevel.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EducationLevel.java new file mode 100644 index 00000000..1f3f10ac --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/EducationLevel.java @@ -0,0 +1,50 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 学历层次 + * + * @author Thanking + * @date 2025-10-21 + */ +@Getter +@AllArgsConstructor +public enum EducationLevel implements HisEnumInterface { + /** + * 预科生 + */ + PREPARATORY(0, "0", "预科生"), + /** + * 本科生 + */ + UNDERGRADUATE(1, "1", "本科生"), + /** + * 硕士研究生 + */ + POSTGRADUATE(2, "2", "硕士研究生"), + /** + * 博士研究生 + */ + DOCTORAL(3, "3", "博士研究生"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static EducationLevel getByValue(Integer value) { + if (value == null) { + return null; + } + for (EducationLevel val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ChargeItemGenerateSource.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GenerateSource.java similarity index 61% rename from openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ChargeItemGenerateSource.java rename to openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GenerateSource.java index 0f69a707..8b21120d 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ChargeItemGenerateSource.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GenerateSource.java @@ -7,14 +7,14 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * 账单生成来源 + * 生成来源 | 适用医嘱请求和账单 * * @author zwh * @date 2025-03-10 */ @Getter @AllArgsConstructor -public enum ChargeItemGenerateSource implements HisEnumInterface { +public enum GenerateSource implements HisEnumInterface { /** * 医生开立 @@ -27,19 +27,29 @@ public enum ChargeItemGenerateSource implements HisEnumInterface { NURSE_PRICING(2, "2", "护士划价"), /** - * 医嘱绑定 + * 挂号登记 */ - MEDICAL_ORDER_BINDING(3, "3", "医嘱绑定"); + REGISTRATION_REGISTER(3, "3", "挂号登记"), + + /** + * 医嘱执行 + */ + ORDER_EXECUTE(4, "4", "医嘱执行"), + + /** + * 自动滚费 + */ + AUTO_ROLL_FEES(5, "5", "自动滚费"); private final Integer value; private final String code; private final String info; - public static ChargeItemGenerateSource getByValue(Integer value) { + public static GenerateSource getByValue(Integer value) { if (value == null) { return null; } - for (ChargeItemGenerateSource val : values()) { + for (GenerateSource val : values()) { if (val.getValue().equals(value)) { return val; } diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfApplicationStatus.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfApplicationStatus.java new file mode 100644 index 00000000..89db9c9f --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfApplicationStatus.java @@ -0,0 +1,50 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 公费申请状态 + * + * @author Thanking + * @date 2025-10-21 + */ +@Getter +@AllArgsConstructor +public enum GfApplicationStatus implements HisEnumInterface { + /** + * 处理中 + */ + PROCESSING(0, "0", "处理中"), + /** + * 通过 + */ + APPROVED(1, "1", "通过"), + /** + * 驳回 + */ + REJECTED(2, "2", "驳回"), + /** + * 取消 + */ + CANCELLED(3, "3", "取消"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static GfApplicationStatus getByValue(Integer value) { + if (value == null) { + return null; + } + for (GfApplicationStatus val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfApprovalRole.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfApprovalRole.java new file mode 100644 index 00000000..fbbcd0d8 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfApprovalRole.java @@ -0,0 +1,46 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 公费申请处理角色 + * + * @author Thanking + * @date 2025-10-21 + */ +@Getter +@AllArgsConstructor +public enum GfApprovalRole implements HisEnumInterface { + /** + * 测算盈亏人 + */ + INITIAL_APPROVER(1, "1", "测算盈亏人"), + /** + * 财务报批人 + */ + FINANCE_APPROVER(2, "2", "财务报批人"), + /** + * 会议结果录入人 + */ + FINAL_RECORDER(3, "3", "会议结果录入人"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static GfApprovalRole getByValue(Integer value) { + if (value == null) { + return null; + } + for (GfApprovalRole val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfItemType.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfItemType.java new file mode 100644 index 00000000..a3f5428b --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfItemType.java @@ -0,0 +1,42 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 公费项目分类 + * + * @author Thanking + * @date 2025-10-24 + */ +@Getter +@AllArgsConstructor +public enum GfItemType implements HisEnumInterface { + /** + * 药品 + */ + MEDICATION(1, "1", "药品"), + /** + * 诊疗 + */ + ACTIVITY(2, "2", "诊疗"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static GfItemType getByValue(Integer value) { + if (value == null) { + return null; + } + for (GfItemType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfRatioType.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfRatioType.java new file mode 100644 index 00000000..f82f6b61 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/GfRatioType.java @@ -0,0 +1,42 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 公费比例类型 + * + * @author Thanking + * @date 2025-10-22 + */ +@Getter +@AllArgsConstructor +public enum GfRatioType implements HisEnumInterface { + /** + * 大项比例 + */ + TYPE_RATIO(1, "1", "大项比例"), + /** + * 单项比例 + */ + INDIVIDUAL_RATIO(2, "2", "单项比例"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static GfRatioType getByValue(Integer value) { + if (value == null) { + return null; + } + for (GfRatioType val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ItemCategoryCode.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ItemCategoryCode.java new file mode 100644 index 00000000..c9cdbe5d --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ItemCategoryCode.java @@ -0,0 +1,63 @@ +package com.openhis.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 项目类型 + */ +@Getter +@AllArgsConstructor +public enum ItemCategoryCode implements HisEnumInterface { + + /** + * 中成药 + */ + CHINESE_PATENT_DRUG(1, "1", "中成药"), + + /** + * 西药 + */ + WESTERN_MEDICINE(2, "2", "西药"), + + /** + * 外购药品 + */ + EXTERNALLY_PROCURED_DRUGS(3, "3", "外购药品"), + + /** + * 中草药 + */ + CHINESE_HERBAL_MEDICINE(4, "4", "中草药"), + + /** + * 耗材 + */ + DEVICE(7, "7", "耗材"), + + /** + * 诊疗 + */ + SERVICE(8, "8", "诊疗"), + + /** + * 其他 + */ + OTHER(9, "9", "其他"); + + private final Integer value; + private final String code; + private final String info; + + public static ItemCategoryCode getByValue(Integer value) { + if (value == null) { + return null; + } + for (ItemCategoryCode val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/OrderPricingSource.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/OrderPricingSource.java new file mode 100644 index 00000000..b991cdd5 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/OrderPricingSource.java @@ -0,0 +1,58 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.common.enums; + +import com.core.common.utils.StringUtils; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 医嘱定价来源 + * + * @author SunJQ + * @date 2025-04-28 + */ +@Getter +@AllArgsConstructor +public enum OrderPricingSource { + + /** + * 批次售价 + */ + BATCH_SELLING_PRICE(1, + "batchSellingPrice", "批次售价"), + /** + * 零售价 + */ + RETAIL_PRICE(2, "retailPrice", "零售价"); + + private Integer value; + private String code; + private String info; + + public static OrderPricingSource getByValue(Integer value) { + if (value == null) { + return null; + } + for (OrderPricingSource val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } + + public static OrderPricingSource getByCode(String code) { + if (StringUtils.isEmpty(code)) { + return null; + } + for (OrderPricingSource val : values()) { + if (val.getCode().equals(code)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/PaymentOutcome.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/PaymentOutcome.java index 9e376dda..7e1e8d7d 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/PaymentOutcome.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/PaymentOutcome.java @@ -25,14 +25,15 @@ public enum PaymentOutcome { * 完整 */ COMPLETED("1", 1, "完整"), + //2025/10/21 长大数据发现此处value和code没对应上,ERROR的value是2,code是3,PARTIAL是3和4.经确认这个枚举目前都是getCode,所以现在将value与code同步 /** * 错误 */ - ERROR("2", 3,"错误"), + ERROR("3", 3,"错误"), /** * 部分 */ - PARTIAL("3", 4, "部分"); + PARTIAL("4", 4, "部分"); private String value; private Integer code; diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/PhysicalExamResult.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/PhysicalExamResult.java new file mode 100644 index 00000000..6a209877 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/PhysicalExamResult.java @@ -0,0 +1,46 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 体检结果 + * + * @author Thanking + * @date 2025-10-21 + */ +@Getter +@AllArgsConstructor +public enum PhysicalExamResult implements HisEnumInterface { + /** + * 未体检 + */ + NOT_EXAMINED(0, "0", "未体检"), + /** + * 体检不合格 + */ + EXAMINATION_FAILED(1, "1", "体检不合格"), + /** + * 体检合格 + */ + EXAMINATION_PASSED(2, "2", "体检合格"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static PhysicalExamResult getByValue(Integer value) { + if (value == null) { + return null; + } + for (PhysicalExamResult val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestFormType.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestFormType.java deleted file mode 100644 index 4e646b4e..00000000 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestFormType.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright ©2023 CJB-CNIT Team. All rights reserved - */ -package com.openhis.common.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 申请单管理类型 - * - * @author zwh - * @date 2025-03-10 - */ -@Getter -@AllArgsConstructor -public enum RequestFormType implements HisEnumInterface { - - /** - * 检查 - */ - CHECK(1, "1", "检查"), - - /** - * 检验 - */ - INSPECTION(2, "2", "检验"), - - /** - * 输血 - */ - BLOOD_TRANSFUSION(3, "3", "输血"), - - /** - * 手术 - */ - SURGERY(4, "4", "手术"); - - private final Integer value; - private final String code; - private final String info; - - public static RequestFormType getByValue(Integer value) { - if (value == null) { - return null; - } - for (RequestFormType val : values()) { - if (val.getValue().equals(value)) { - return val; - } - } - return null; - } -} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/StudentStatus.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/StudentStatus.java new file mode 100644 index 00000000..7236a9c4 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/StudentStatus.java @@ -0,0 +1,46 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 在校状态 + * + * @author Thanking + * @date 2025-10-21 + */ +@Getter +@AllArgsConstructor +public enum StudentStatus implements HisEnumInterface { + /** + * 在校 + */ + IN_SCHOOL(0, "0", "在校"), + /** + * 休学 + */ + ON_LEAVE(1, "1", "休学"), + /** + * 离校 + */ + LEFT_SCHOOL(2, "2", "离校"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static StudentStatus getByValue(Integer value) { + if (value == null) { + return null; + } + for (StudentStatus val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/StudyMode.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/StudyMode.java new file mode 100644 index 00000000..11ca5265 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/StudyMode.java @@ -0,0 +1,42 @@ +package com.openhis.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 学习形式 + * + * @author Thanking + * @date 2025-10-21 + */ +@Getter +@AllArgsConstructor +public enum StudyMode implements HisEnumInterface { + /** + * 全日制 + */ + FULL_TIME(1, "1", "全日制"), + /** + * 非全日制 + */ + PART_TIME(2, "2", "非全日制"); + + @EnumValue + private final Integer value; + private final String code; + private final String info; + + public static StudyMode getByValue(Integer value) { + if (value == null) { + return null; + } + for (StudyMode val : values()) { + if (val.getValue().equals(value)) { + return val; + } + } + return null; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplierType.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplierType.java index 21fd4e5c..eb3c8c69 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplierType.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplierType.java @@ -8,9 +8,10 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum SupplierType implements HisEnumInterface { - DRAFT(1, "1", "生产商"), - ACTIVE(2, "2", "供应商"); + MANUFACTURER(1, "1", "生产商"), + + SUPPLIER(2, "2", "供应商"); @EnumValue private final Integer value; diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyCategory.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyCategory.java index 21ed9b57..1fec199b 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyCategory.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyCategory.java @@ -14,113 +14,130 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum SupplyCategory implements HisEnumInterface{ +public enum SupplyCategory implements HisEnumInterface { /** * 库存供应 */ - STOCK_SUPPLY(1, "1","库存供应"), + STOCK_SUPPLY(1, "1", "库存供应"), /** * 非库存供应 */ - NON_STOCK(2, "2","非库存供应"), - /** - * 普通 - */ - NORMAL(3, "3","0.普通"), - /** - * 采购计划生成 - */ - PURCHASE_PLAN_GENERATION(4, "4","1.采购计划生成"), - /** - * 外购药品入库 - */ - PURCHASED_DRUGS_WAREHOUSING(5, "5","0.外购药品入库"), - /** - * 自制药品入库 - */ - HOMEMADE_DRUGS_WAREHOUSING(6, "6","1.自制药品入库"), - /** - * 代销药品入库 - */ - CONSIGNMENT_DRUGS_WAREHOUSING(7, "7","2.代销药品入库"), - /** - * 其他药品入库 - */ - OTHER_DRUGS_WAREHOUSING(8, "8","3.其他药品入库"), - /** - * 赠送药品入库 - */ - DONATED_DRUGS_WAREHOUSING(9, "9","4.赠送药品入库"), - /** - * 申请采购 - */ - PURCHASE_APPLICATION(10, "10","1.申请采购"), - /** - * 院内出库 - */ - IN_HOSPITAL_OUTBOUND(11, "11","0.院内出库"), - /** - * 院外出库 - */ - OUT_OF_HOSPITAL_OUTBOUND(12, "12","1.院外出库"), - /** - * 其他出库 - */ - OTHER_OUTBOUND(13, "13","2.其他出库"), - /** - * 普通损益 - */ - GENERAL_PROFIT_AND_LOSS(14, "14","0.普通损益"), - /** - * 盘点损益 - */ - STOCKTAKING_PROFIT_AND_LOSS(15, "15","1.盘点损益"), - /** - * 制剂消耗 - */ - PREPARATION_CONSUMPTION(16, "16","2.制剂消耗"), - /** - * 常备抢救药品 - */ - STANDBY_RESCUE_MEDICINES(16, "16","2.常备抢救药品"), - /** - * 破损过期药品 - */ - DAMAGED_EXPIRED_MEDICINES(16, "16","3.破损过期药品"), - /** - * 捐赠药品 - */ - DONATED_MEDICINES(16, "16","4.捐赠药品"), - /** - * 普通盘点 - */ - GENERAL_STOCKTAKING(17, "17","0.普通盘点"), - /** - * 月度盘点 - */ - MONTHLY_STOCKTAKING(18, "18","1.月度盘点"), - /** - * 门诊病人发药 - */ - OUTPATIENT_PATIENT_DISPENSING(19, "19","0.门诊病人发药"), - /** - * 住院病人发药 - */ - INPATIENT_PATIENT_DISPENSING(20, "20","1.住院病人发药"), - /** - * 住院病人汇总发药 - */ - INPATIENT_PATIENT_SUMMARY_DISPENSING(21, "21","2.住院病人汇总发药"), - /** - * 赠送 - */ - PRESENT(22, "22","1.赠送"), - /** - * 视光材料 - */ - OPTICAL_MATERIALS(23, "23","2.视光材料"); + NON_STOCK(2, "2", "非库存供应"); + + // /** + // * 普通 + // */ + // NORMAL(3, "3","0.普通"), + // /** + // * 采购计划生成 + // */ + // PURCHASE_PLAN_GENERATION(4, "4","1.采购计划生成"), + // /** + // * 外购药品入库 + // */ + // PURCHASED_DRUGS_WAREHOUSING(5, "5","0.外购药品入库"), + // /** + // * 自制药品入库 + // */ + // HOMEMADE_DRUGS_WAREHOUSING(6, "6","1.自制药品入库"), + // /** + // * 代销药品入库 + // */ + // CONSIGNMENT_DRUGS_WAREHOUSING(7, "7","2.代销药品入库"), + // /** + // * 其他药品入库 + // */ + // OTHER_DRUGS_WAREHOUSING(8, "8","3.其他药品入库"), + // /** + // * 赠送药品入库 + // */ + // DONATED_DRUGS_WAREHOUSING(9, "9","4.赠送药品入库"), + // /** + // * 申请采购 + // */ + // PURCHASE_APPLICATION(10, "10","1.申请采购"), + // /** + // * 院内出库 + // */ + // IN_HOSPITAL_OUTBOUND(11, "11","0.院内出库"), + // /** + // * 院外出库 + // */ + // OUT_OF_HOSPITAL_OUTBOUND(12, "12","1.院外出库"), + // /** + // * 其他出库 + // */ + // OTHER_OUTBOUND(13, "13","2.其他出库"), + // /** + // * 普通损益 + // */ + // GENERAL_PROFIT_AND_LOSS(14, "14","0.普通损益"), + // /** + // * 盘点损益 + // */ + // STOCKTAKING_PROFIT_AND_LOSS(15, "15","1.盘点损益"), + // /** + // * 制剂消耗 + // */ + // PREPARATION_CONSUMPTION(16, "16","2.制剂消耗"), + // /** + // * 常备抢救药品 + // */ + // STANDBY_RESCUE_MEDICINES(16, "16","2.常备抢救药品"), + // /** + // * 破损过期药品 + // */ + // DAMAGED_EXPIRED_MEDICINES(16, "16","3.破损过期药品"), + // /** + // * 捐赠药品 + // */ + // DONATED_MEDICINES(16, "16","4.捐赠药品"), + // /** + // * 普通盘点 + // */ + // GENERAL_STOCKTAKING(17, "17","0.普通盘点"), + // /** + // * 月度盘点 + // */ + // MONTHLY_STOCKTAKING(18, "18","1.月度盘点"), + // /** + // * 门诊病人发药 + // */ + // OUTPATIENT_PATIENT_DISPENSING(19, "19","0.门诊病人发药"), + // /** + // * 住院病人发药 + // */ + // INPATIENT_PATIENT_DISPENSING(20, "20","1.住院病人发药"), + // /** + // * 住院病人汇总发药 + // */ + // INPATIENT_PATIENT_SUMMARY_DISPENSING(21, "21","2.住院病人汇总发药"), + // /** + // * 赠送 + // */ + // PRESENT(22, "22","1.赠送"), + // /** + // * 视光材料 + // */ + // OPTICAL_MATERIALS(23, "23","2.视光材料"), + // /** + // * 调价分类 药品 + // */ + // REQUEST_CATEGORY_CHANGE_PRICE_MEDICATION(24, "24","药品调价单"), + // /** + // * 调价分类 耗材 + // */ + // REQUEST_CATEGORY_CHANGE_PRICE_DEVICE(25, "25","耗材调价单"), + // /** + // * 调价分类 诊疗 + // */ + // REQUEST_CATEGORY_CHANGE_PRICE_ACTIVITY(26, "26","诊疗调价单"), + // /** + // * 调价分类 挂号 + // */ + // REQUEST_CATEGORY_CHANGE_PRICE_HEALTH(27, "27","挂号调价单"); private Integer value; private String code; diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyStatus.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyStatus.java index 3e341092..240e3fb6 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyStatus.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyStatus.java @@ -45,6 +45,7 @@ public enum SupplyStatus implements HisEnumInterface { * 待审请 */ PENDING_REVIEW(10, "6", "待审请"), + /** * 已失效 */ diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java index 22fee4c2..161a1e3c 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/SupplyType.java @@ -29,7 +29,7 @@ public enum SupplyType implements HisEnumInterface { /** * 汇总发药 */ - DISPENSING_AGGREGATION(3, "3", "汇总发药"), + SUMMARY_DISPENSE(3, "3", "汇总发药"), /** * 商品盘点 @@ -73,7 +73,7 @@ public enum SupplyType implements HisEnumInterface { /** * 退药 */ - RETURN_MEDICATION(12, "12", "退药") , + RETURN_MEDICATION(12, "12", "退药"), /** * 药库订货单 @@ -113,31 +113,31 @@ public enum SupplyType implements HisEnumInterface { /** * 药房入库单 */ - PURCHASE_STOCKIN(21,"21", "药房入库单" ), + PURCHASE_STOCKIN(21, "21", "药房入库单"), /** * 药房退库单 */ - PURCHASE_RETURN(22,"22", "药房退库单"), + PURCHASE_RETURN(22, "22", "药房退库单"), /** * 发药单 */ - DISPENSING_ORDER(23,"23", "发药单"), + DISPENSING_ORDER(23, "23", "发药单"), /** * 药房损益单 */ - PURCHASE_PRPFITLOSS(24,"24", "药房损益单"), + PURCHASE_PRPFITLOSS(24, "24", "药房损益单"), /** * 药房盘点单 */ - PURCHASE_STOCKTAKING(25,"25", "药房盘点单"), + PURCHASE_STOCKTAKING(25, "25", "药房盘点单"), /** * 药房调入单 */ - PURCHASE_TRANSFERIN(26,"26", "药房调入单"), + PURCHASE_TRANSFERIN(26, "26", "药房调入单"), /** * 药房调出单 */ - PURCHASE_TRANSFEROUT(27,"27", "药房调出单"), + PURCHASE_TRANSFEROUT(27, "27", "药房调出单"), /** * 物资订货单 @@ -172,11 +172,11 @@ public enum SupplyType implements HisEnumInterface { /** * 物资调入单 */ - MATERIAL_TRANSFERIN(35,"35", "物资调入单"), + MATERIAL_TRANSFERIN(35, "35", "物资调入单"), /** * 物资调出单 */ - MATERIAL_TRANSFEROUT(36,"36", "物资调出单"), + MATERIAL_TRANSFEROUT(36, "36", "物资调出单"), /** * 科室请领单 @@ -185,27 +185,27 @@ public enum SupplyType implements HisEnumInterface { /** * 科室入库单 */ - DEPARTMENT_STOCKIN(38,"38", "科室入库单" ), + DEPARTMENT_STOCKIN(38, "38", "科室入库单"), /** * 科室退库单 */ - DEPARTMENT_RETURN(39,"39", "科室退库单"), + DEPARTMENT_RETURN(39, "39", "科室退库单"), /** * 科室损益单 */ - DEPARTMENT_PRPFITLOSS(40,"40", "科室损益单"), + DEPARTMENT_PRPFITLOSS(40, "40", "科室损益单"), /** * 科室盘点单 */ - DEPARTMENT_STOCKTAKING(41,"41", "科室盘点单"), + DEPARTMENT_STOCKTAKING(41, "41", "科室盘点单"), /** * 科室调入单 */ - DEPARTMENT_TRANSFERIN(42,"42", "科室调入单"), + DEPARTMENT_TRANSFERIN(42, "42", "科室调入单"), /** * 科室调出单 */ - DEPARTMENT_TRANSFEROUT(43,"43", "科室调出单"), + DEPARTMENT_TRANSFEROUT(43, "43", "科室调出单"), /** * 自动盘点 @@ -215,7 +215,31 @@ public enum SupplyType implements HisEnumInterface { /** * 库存明细 */ - INVENTORY_PRODUCT(45, "45", "库存明细"); + INVENTORY_PRODUCT(45, "45", "库存明细"), + /** + * 药品调价 + */ + REQUEST_MEDICATION_CHANGE_PRICE(46, "46", "药品调价"), + /** + * 耗材调价 + */ + REQUEST_DEVICE_CHANGE_PRICE(47, "47", "耗材调价"), + /** + * 诊疗调价 + */ + REQUEST_ACTIVITY_CHANGE_PRICE(48, "48", "诊疗调价"), + /** + * 挂号调价 + */ + REQUEST_HEALTH_CHANGE_PRICE(49, "49", "挂号调价"), + /** + * 挂号调价 + */ + REQUEST_CHANGE_PRICE(50, "50", "货品调价"), + /** + * 耗材盘点 + */ + DEVICE_STOCKTAKING(51, "51", "耗材盘点"); private Integer value; private String code; diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbChrgitmLv.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbChrgitmLv.java index 3b29ea19..f80c97bd 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbChrgitmLv.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbChrgitmLv.java @@ -4,6 +4,7 @@ package com.openhis.common.enums.ybenums; import com.baomidou.mybatisplus.annotation.EnumValue; +import com.core.common.utils.StringUtils; import com.openhis.common.enums.HisEnumInterface; import lombok.AllArgsConstructor; @@ -45,4 +46,16 @@ public enum YbChrgitmLv implements HisEnumInterface { return null; } + public static YbChrgitmLv getByCode(String code) { + if (StringUtils.isEmpty(code)) { + return null; + } + for (YbChrgitmLv val : values()) { + if (val.getCode().equals(code)) { + return val; + } + } + return null; + } + } diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDspoWay.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDspoWay.java index f7ce0902..7ec60362 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDspoWay.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbDspoWay.java @@ -8,7 +8,7 @@ import lombok.Getter; /** * 处理方式 * - * @author GuoRui + * @author Thanking */ @Getter @AllArgsConstructor diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedinsLv.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedinsLv.java index e65be1e4..d4151c50 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedinsLv.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbMedinsLv.java @@ -8,7 +8,7 @@ import lombok.Getter; /** * 医疗机构等级 * - * @author GuoRui + * @author Thanking */ @Getter @AllArgsConstructor diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayment.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayment.java index 98b7762d..3fa16896 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayment.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbPayment.java @@ -4,6 +4,7 @@ package com.openhis.common.enums.ybenums; import com.baomidou.mybatisplus.annotation.EnumValue; + import lombok.AllArgsConstructor; import lombok.Getter; @@ -17,299 +18,297 @@ import lombok.Getter; @AllArgsConstructor public enum YbPayment { - YB_FUND_PAY( 100000 ,1,null,"基金支付总额"), + YB_FUND_PAY(100000, 1, null, "基金支付总额"), - SELF_PAY(200000,1,null,"个人负担总金额"), + SELF_PAY(200000, 1, null, "个人负担总金额"), - OTHER_PAY(300000,1,null,"其他(如医院负担金额)"), + OTHER_PAY(300000, 1, null, "其他(如医院负担金额)"), /** * 基本医保统筹基金支出 */ - YB_TC_FUND_AMOUNT(110000,2,YB_FUND_PAY,"基本医保统筹基金支出"), + YB_TC_FUND_AMOUNT(110000, 2, YB_FUND_PAY, "基本医保统筹基金支出"), /** * 补充医疗保险基金支出 */ - YB_BC_FUND_AMOUNT(120000,2,YB_FUND_PAY,"补充医疗保险基金支出"), + YB_BC_FUND_AMOUNT(120000, 2, YB_FUND_PAY, "补充医疗保险基金支出"), /** * 医疗救助基金支出 */ - YB_JZ_FUND_AMOUNT(130000,2,YB_FUND_PAY,"医疗救助基金支出"), + YB_JZ_FUND_AMOUNT(130000, 2, YB_FUND_PAY, "医疗救助基金支出"), /** * 其他支出 */ - YB_OTHER_AMOUNT(140000,2,YB_FUND_PAY,"其他支出"), + YB_OTHER_AMOUNT(140000, 2, YB_FUND_PAY, "其他支出"), /** * 职工基本医疗保险 */ - YB_TC_ZG_FUND_VALUE(110100,3,YB_TC_FUND_AMOUNT,"职工基本医疗保险"), + YB_TC_ZG_FUND_VALUE(110100, 3, YB_TC_FUND_AMOUNT, "职工基本医疗保险"), /** * 居民基本医疗保险 */ - YB_TC_JM_FUND_VALUE(110200,3,YB_TC_FUND_AMOUNT,"居民基本医疗保险"), + YB_TC_JM_FUND_VALUE(110200, 3, YB_TC_FUND_AMOUNT, "居民基本医疗保险"), /** * 全体参保人的居民大病保险 */ - YB_BC_JM_DB_VALUE(120100,3,YB_BC_FUND_AMOUNT,"全体参保人的居民大病保险"), + YB_BC_JM_DB_VALUE(120100, 3, YB_BC_FUND_AMOUNT, "全体参保人的居民大病保险"), /** * 大额医疗费用补助 */ - YB_BC_DE_BZ_VALUE(120200,3,YB_BC_FUND_AMOUNT,"大额医疗费用补助"), + YB_BC_DE_BZ_VALUE(120200, 3, YB_BC_FUND_AMOUNT, "大额医疗费用补助"), /** * 企业职工大额医疗费用补助 */ - YB_BC_ZG_DE_BZ_VALUE(120300,3,YB_BC_FUND_AMOUNT,"企业职工大额医疗费用补助"), + YB_BC_ZG_DE_BZ_VALUE(120300, 3, YB_BC_FUND_AMOUNT, "企业职工大额医疗费用补助"), /** * 公务员医疗补助 */ - YB_BC_GWY_BZ_VALUE(120400,3,YB_BC_FUND_AMOUNT,"公务员医疗补助"), + YB_BC_GWY_BZ_VALUE(120400, 3, YB_BC_FUND_AMOUNT, "公务员医疗补助"), /** * 伤残人员医疗保障基金支出 */ - YB_OTHER_SC_BZ_FUND_VALUE(130100,3,YB_OTHER_AMOUNT,"伤残人员医疗保障基金支出"), + YB_OTHER_SC_BZ_FUND_VALUE(130100, 3, YB_OTHER_AMOUNT, "伤残人员医疗保障基金支出"), /** * */ - SELF_YB_ZH_PAY(210000,2,SELF_PAY,"个人医保账户支付"), + SELF_YB_ZH_PAY(210000, 2, SELF_PAY, "个人医保账户支付"), /** * */ - SELF_YB_ZH_GJ_VALUE(210100,3,SELF_YB_ZH_PAY,"账户共济支付金额"), + SELF_YB_ZH_GJ_VALUE(210100, 3, SELF_YB_ZH_PAY, "账户共济支付金额"), /** * */ - SELF_CASH_PAY(220000,2,SELF_PAY,"个人现金支付金额"), + SELF_CASH_PAY(220000, 2, SELF_PAY, "个人现金支付金额"), /** * */ - SELF_VX_PAY(230000,2,SELF_PAY,"微信支付金额"), + SELF_VX_PAY(230000, 2, SELF_PAY, "微信支付金额"), /** * */ - SELF_ALI_PAY(240000,2,SELF_PAY,"阿里支付金额"), + SELF_ALI_PAY(240000, 2, SELF_PAY, "阿里支付金额"), /** * */ - SELF_CASH_VALUE(220400,3,SELF_CASH_PAY,"个人现金支付金额(现金)"), + DISCOUNT_PAY(220500, 2, OTHER_PAY, "优惠金额"), /** * */ - SELF_CASH_VX_VALUE(220100,3,SELF_CASH_PAY,"个人现金支付金额(微信)"), + SELF_CASH_VALUE(220400, 3, SELF_CASH_PAY, "个人现金支付金额(现金)"), /** * */ - SELF_CASH_ALI_VALUE(220200,3,SELF_CASH_PAY,"个人现金支付金额(支付宝)"), + SELF_CASH_VX_VALUE(220100, 3, SELF_CASH_PAY, "个人现金支付金额(微信)"), /** * */ - SELF_CASH_UNION_VALUE(220300,3,SELF_CASH_PAY,"个人现金支付金额(银联)"), + SELF_CASH_ALI_VALUE(220200, 3, SELF_CASH_PAY, "个人现金支付金额(支付宝)"), + /** + * + */ + SELF_CASH_UNION_VALUE(220300, 3, SELF_CASH_PAY, "个人现金支付金额(银联)"), /** * 兜底基金支出 */ - OTHER_PAY_DD_FUND_VALUE(300001,2,OTHER_PAY,"兜底基金支出"), + OTHER_PAY_DD_FUND_VALUE(300001, 2, OTHER_PAY, "兜底基金支出"), /** * 意外伤害基金支出 */ - OTHER_PAY_YW_SH_FUND_VALUE(300002,2,OTHER_PAY,"意外伤害基金支出"), + OTHER_PAY_YW_SH_FUND_VALUE(300002, 2, OTHER_PAY, "意外伤害基金支出"), /** * 离休人员医疗保障金支出 */ - OTHER_PAY_LX_YL_FUND_VALUE(300003,2,OTHER_PAY,"离休人员医疗保障金支出"), + OTHER_PAY_LX_YL_FUND_VALUE(300003, 2, OTHER_PAY, "离休人员医疗保障金支出"), /** * 离休人员优惠金支出 */ - OTHER_PAY_LX_YH_FUND_VALUE(300004,2,OTHER_PAY,"离休人员优惠金支出"), + OTHER_PAY_LX_YH_FUND_VALUE(300004, 2, OTHER_PAY, "离休人员优惠金支出"), /** * 财政基金支出 */ - OTHER_PAY_CZ_FUND_VALUE(300005,2,OTHER_PAY,"财政基金支出"), + OTHER_PAY_CZ_FUND_VALUE(300005, 2, OTHER_PAY, "财政基金支出"), /** * 财政预支支出 */ - OTHER_PAY_CZ_YZ_FUND_VALUE(300006,2,OTHER_PAY,"财政预支支出"), + OTHER_PAY_CZ_YZ_FUND_VALUE(300006, 2, OTHER_PAY, "财政预支支出"), /** * 职工大病基金支出 */ - OTHER_PAY_ZG_DB_FUND_VALUE(300007,2,OTHER_PAY,"职工大病基金支出"), + OTHER_PAY_ZG_DB_FUND_VALUE(300007, 2, OTHER_PAY, "职工大病基金支出"), /** * 二乙基金支出 */ - OTHER_PAY_EY_FUND_VALUE(300008,2,OTHER_PAY,"二乙基金支出"), + OTHER_PAY_EY_FUND_VALUE(300008, 2, OTHER_PAY, "二乙基金支出"), /** * 倾斜救助支出 */ - OTHER_PAY_QX_JZ_FUND_VALUE(300009,2,OTHER_PAY,"倾斜救助支出"), + OTHER_PAY_QX_JZ_FUND_VALUE(300009, 2, OTHER_PAY, "倾斜救助支出"), /** * 医疗救助再救助基金 */ - OTHER_PAY_YL_JZ_FUND_VALUE(300010,2,OTHER_PAY,"医疗救助再救助基金"), + OTHER_PAY_YL_JZ_FUND_VALUE(300010, 2, OTHER_PAY, "医疗救助再救助基金"), /** * 医院负担金额 */ - HOSP_PART_AMT(300011,2,OTHER_PAY,"医院负担金额"), + HOSP_PART_AMT(300011, 2, OTHER_PAY, "医院负担金额"), + // 医保结算返回值记录枚举 + FULAMT_OWNPAY_AMT(1, 2, null, "全自费金额"), + // PSN_PART_AMT(2,2,null,"个人负担总金额"), + OVERLMT_SELFPAY(3, 2, null, "超限价自费费用"), PRESELFPAY_AMT(4, 2, null, "先行自付金额"), INSCP_SCP_AMT(5, 2, null, "符合政策范围金额"), + ACT_PAY_DEDC(6, 2, null, "实际支付起付线"), POOL_PROP_SELFPAY(7, 2, null, "基本医疗保险统筹基金支付比例"), BALC(8, 2, null, "余额"), - //医保结算返回值记录枚举 - FULAMT_OWNPAY_AMT(1,2,null,"全自费金额"), - //PSN_PART_AMT(2,2,null,"个人负担总金额"), - OVERLMT_SELFPAY(3,2,null,"超限价自费费用"), - PRESELFPAY_AMT(4,2,null,"先行自付金额"), - INSCP_SCP_AMT(5,2,null,"符合政策范围金额"), - ACT_PAY_DEDC(6,2,null,"实际支付起付线"), - POOL_PROP_SELFPAY(7,2,null,"基本医疗保险统筹基金支付比例"), - BALC(8,2,null,"余额"), + // 基金类型,下述仅作记录 + BIRTH_FUND(510100, 2, YB_FUND_PAY, "生育基金"), RETIREE_MEDICAL(340100, 2, YB_FUND_PAY, "离休人员医疗保障基金"), + URBAN_BASIC_MEDICAL(390100, 2, YB_FUND_PAY, "城乡居民基本医疗保险基金"), + URBAN_SERIOUS_ILLNESS(390200, 2, YB_FUND_PAY, "城乡居民大病医疗保险基金"), MEDICAL_ASSISTANCE(610100, 2, YB_FUND_PAY, "医疗救助基金"), + GOVERNMENT_SUBSIDY(640100, 2, YB_FUND_PAY, "政府兜底基金"), ACCIDENT_INSURANCE(390400, 2, YB_FUND_PAY, "意外伤害基金"), + CARE_INSURANCE(620100, 2, YB_FUND_PAY, "照护保险基金"), FINANCIAL_FUND(360100, 2, YB_FUND_PAY, "财政基金"), + HOSPITAL_ADVANCE(999900, 2, YB_FUND_PAY, "医院垫付"), SUPPLEMENTARY_INSURANCE(390300, 2, YB_FUND_PAY, "城乡居民大病补充保险基金"), + BASIC_MEDICAL_INSURANCE_FOR_URBAN_EMPLOYEES(310201, 2, YB_FUND_PAY, "城镇职工基本医疗保险个人账户基金"), + E_WALLET(999981, 2, YB_FUND_PAY, "电子钱包"), HEALTHCARE_PREPAYMENT(360300, 2, YB_FUND_PAY, "保健预支基金"), + // 师大中银支付 + BPC_PAY(500000, 2, SELF_PAY, "BPC支付"), + // 师大专属 + SCHOOL_GF_PAY(400000, 1, null, "学校垫支"); - //基金类型,下述仅作记录 - BIRTH_FUND(510100,2,YB_FUND_PAY, "生育基金"), - RETIREE_MEDICAL(340100,2,YB_FUND_PAY, "离休人员医疗保障基金"), - URBAN_BASIC_MEDICAL(390100,2,YB_FUND_PAY, "城乡居民基本医疗保险基金"), - URBAN_SERIOUS_ILLNESS(390200,2,YB_FUND_PAY, "城乡居民大病医疗保险基金"), - MEDICAL_ASSISTANCE(610100,2,YB_FUND_PAY, "医疗救助基金"), - GOVERNMENT_SUBSIDY(640100,2,YB_FUND_PAY, "政府兜底基金"), - ACCIDENT_INSURANCE(390400,2,YB_FUND_PAY, "意外伤害基金"), - CARE_INSURANCE(620100,2,YB_FUND_PAY, "照护保险基金"), - FINANCIAL_FUND(360100, 2,YB_FUND_PAY,"财政基金"), - HOSPITAL_ADVANCE(999900,2,YB_FUND_PAY, "医院垫付"), - SUPPLEMENTARY_INSURANCE(390300,2,YB_FUND_PAY, "城乡居民大病补充保险基金"), - BASIC_MEDICAL_INSURANCE_FOR_URBAN_EMPLOYEES(310201,2,YB_FUND_PAY, "城镇职工基本医疗保险个人账户基金"), - E_WALLET(9999981,2,YB_FUND_PAY, "电子钱包"), - HEALTHCARE_PREPAYMENT(360300, 2,YB_FUND_PAY,"保健预支基金"); -// -// -// /** -// * 现金支付 -// */ -// CASH(1, 1, "现金支付"), -// -// /** -// * 微信支付 -// */ -// VX_PAY(2, 1, "微信支付"), -// -// /** -// * 支付宝支付 -// */ -// ALI_PAY(3, 1, "支付宝支付"), -// -// /** -// * 银联支付 -// */ -// UNION_PAY(4, 1, "银联支付"), -// -// /** -// * 医保账户支付 -// */ -// YB_ZH_PAY(5, 1, "医保账户支付"), -// -// /** -// * 医保统筹支付合计 -// */ -// YB_TC_SUM_PAY(6, 1, "医保统筹支付合计"), -// -// /** -// * 医保统筹支付 -// */ -// YB_TC_PAY(7, 2, "医保统筹支付"), -// -// /** -// * 医保公务员补助 -// */ -// YB_GWY_PAY(8, 2, "医保公务员补助"), -// -// /** -// * 先行自付金额 -// */ -// XX_SELF_PAY(9, 2, "先行自付金额"), -// -// /** -// * 全自费金额 -// */ -// ALL_SELF_PAY(10, 2, "先行自付金额"), -// -// /** -// * 医疗工伤支付 -// */ -// YL_GS_PAY(11, 2, "医疗工伤支付"), -// -// /** -// * 老红军支付 -// */ -// YB_HJ_PAY(12, 2, "老红军支付"), -// -// /** -// * 离休人员医疗保障基金支付金额 -// */ -// YB_LTX_PAY(13, 2, "离休人员医疗保障基金支付金额"), -// -// /** -// * 居民统筹 -// */ -// YB_JM_TC_PAY(14, 2, "居民统筹"), -// /** -// * 居民大病 -// */ -// YB_JM_DB_PAY(15, 2, "居民大病"), -// /** -// * 补充医疗补助基金支付金额 -// */ -// YB_BC_PAY(16, 2, "补充医疗补助基金支付金额"), -// /** -// * 其他扶贫报销金额 -// */ -// YB_OTHER_FP_PAY(17, 2, "其他扶贫报销金额"), -// /** -// * 健康扶贫医疗基金 -// */ -// YB_JK_FP_PAY(18, 2, "健康扶贫医疗基金"), -// /** -// * 精准脱贫保险金额 -// */ -// YB_JZ_TP_PAY(19, 2, "精准脱贫保险金额"), -// /** -// * 提交医保总额 -// */ -// YB_SUM_FEE(20, 2, "提交医保总额"), -// /** -// * 二乙医疗专项医疗基金支出 -// */ -// YB_EY_PAY(21, 2, "二乙医疗专项医疗基金支出"), -// /** -// * 慢特病支付 -// */ -// YB_TM_PAY(22, 2, "补充医疗补助基金支付金额"), -// /** -// * 定点医疗机构垫支 -// */ -// YB_ORG_PAY(23, 2, "定点医疗机构垫支"), -// /** -// * 起付线公务员返还 -// */ -// YB_RETURN_GWY_PAY(24, 2, "起付线公务员返还"), -// /** -// * 大额理赔金额 -// */ -// YB_DELP_PAY(25, 2, "大额理赔金额"), -// /** -// * 民政救助金额 -// */ -// YB_MZJZ_PAY(26, 2, "民政救助金额"), -// /** -// * 生育基金支付 -// */ -// BIRTH_TC_PAY_AMOUNT(27, 1, "生育基金支付"), -// /** -// * 生育账户支付 -// */ -// BIRTH_ZH_PAY_AMOUNT(28, 1, "生育账户支付"), -// /** -// * 符合范围金额 -// */ -// YB_FHFW_AMOUNT(29, 2, "符合范围金额"), -// /** -// * 财政兜底基金支出 -// */ -// YB_CZDD_AMOUNT(30, 2, "财政兜底基金支出"); + // + // + // /** + // * 现金支付 + // */ + // CASH(1, 1, "现金支付"), + // + // /** + // * 微信支付 + // */ + // VX_PAY(2, 1, "微信支付"), + // + // /** + // * 支付宝支付 + // */ + // ALI_PAY(3, 1, "支付宝支付"), + // + // /** + // * 银联支付 + // */ + // UNION_PAY(4, 1, "银联支付"), + // + // /** + // * 医保账户支付 + // */ + // YB_ZH_PAY(5, 1, "医保账户支付"), + // + // /** + // * 医保统筹支付合计 + // */ + // YB_TC_SUM_PAY(6, 1, "医保统筹支付合计"), + // + // /** + // * 医保统筹支付 + // */ + // YB_TC_PAY(7, 2, "医保统筹支付"), + // + // /** + // * 医保公务员补助 + // */ + // YB_GWY_PAY(8, 2, "医保公务员补助"), + // + // /** + // * 先行自付金额 + // */ + // XX_SELF_PAY(9, 2, "先行自付金额"), + // + // /** + // * 全自费金额 + // */ + // ALL_SELF_PAY(10, 2, "先行自付金额"), + // + // /** + // * 医疗工伤支付 + // */ + // YL_GS_PAY(11, 2, "医疗工伤支付"), + // + // /** + // * 老红军支付 + // */ + // YB_HJ_PAY(12, 2, "老红军支付"), + // + // /** + // * 离休人员医疗保障基金支付金额 + // */ + // YB_LTX_PAY(13, 2, "离休人员医疗保障基金支付金额"), + // + // /** + // * 居民统筹 + // */ + // YB_JM_TC_PAY(14, 2, "居民统筹"), + // /** + // * 居民大病 + // */ + // YB_JM_DB_PAY(15, 2, "居民大病"), + // /** + // * 补充医疗补助基金支付金额 + // */ + // YB_BC_PAY(16, 2, "补充医疗补助基金支付金额"), + // /** + // * 其他扶贫报销金额 + // */ + // YB_OTHER_FP_PAY(17, 2, "其他扶贫报销金额"), + // /** + // * 健康扶贫医疗基金 + // */ + // YB_JK_FP_PAY(18, 2, "健康扶贫医疗基金"), + // /** + // * 精准脱贫保险金额 + // */ + // YB_JZ_TP_PAY(19, 2, "精准脱贫保险金额"), + // /** + // * 提交医保总额 + // */ + // YB_SUM_FEE(20, 2, "提交医保总额"), + // /** + // * 二乙医疗专项医疗基金支出 + // */ + // YB_EY_PAY(21, 2, "二乙医疗专项医疗基金支出"), + // /** + // * 慢特病支付 + // */ + // YB_TM_PAY(22, 2, "补充医疗补助基金支付金额"), + // /** + // * 定点医疗机构垫支 + // */ + // YB_ORG_PAY(23, 2, "定点医疗机构垫支"), + // /** + // * 起付线公务员返还 + // */ + // YB_RETURN_GWY_PAY(24, 2, "起付线公务员返还"), + // /** + // * 大额理赔金额 + // */ + // YB_DELP_PAY(25, 2, "大额理赔金额"), + // /** + // * 民政救助金额 + // */ + // YB_MZJZ_PAY(26, 2, "民政救助金额"), + // /** + // * 生育基金支付 + // */ + // BIRTH_TC_PAY_AMOUNT(27, 1, "生育基金支付"), + // /** + // * 生育账户支付 + // */ + // BIRTH_ZH_PAY_AMOUNT(28, 1, "生育账户支付"), + // /** + // * 符合范围金额 + // */ + // YB_FHFW_AMOUNT(29, 2, "符合范围金额"), + // /** + // * 财政兜底基金支出 + // */ + // YB_CZDD_AMOUNT(30, 2, "财政兜底基金支出"); @EnumValue private Integer value; private Integer level; diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbTrigScen.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbTrigScen.java index b765afa8..b1c72599 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbTrigScen.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbTrigScen.java @@ -8,7 +8,7 @@ import lombok.Getter; /** * 触发场景 * - * @author GuoRui + * @author Thanking */ @Getter @AllArgsConstructor diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbWarnType.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbWarnType.java index e6718269..cfc81a71 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbWarnType.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/ybenums/YbWarnType.java @@ -8,7 +8,7 @@ import lombok.Getter; /** * 反馈类型 * - * @author GuoRui + * @author Thanking */ @Getter @AllArgsConstructor diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/DateTimeUtils.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/DateTimeUtils.java new file mode 100644 index 00000000..61fc8771 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/DateTimeUtils.java @@ -0,0 +1,20 @@ +package com.openhis.common.utils; + +import java.util.Date; + +public class DateTimeUtils { + + /** + * 判断时间是否重叠 + * + * @param start1 开始时间1 + * @param end1 开始时间1 + * @param start2 开始时间2 + * @param end2 开始时间2 + * @return 是否重叠 + */ + public static boolean isOverlap(Date start1, Date end1, Date start2, Date end2) { + // 判断是否重叠:start1 < end2 && end1 > start2 + return start1.before(end2) && end1.after(start2); + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/IdCardAgeCalculator.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/IdCardAgeCalculator.java new file mode 100644 index 00000000..2f6d8ed0 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/IdCardAgeCalculator.java @@ -0,0 +1,110 @@ +package com.openhis.common.utils; + +import java.time.LocalDate; +import java.time.Period; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +/** + * @ClassName IdCardAgeCalculator + * @Description 根据身份证号 计算年纪 + * @Author raymond + * @Date 2025/11/4 10:32 + * @Version 1.0 + **/ +public class IdCardAgeCalculator { + /** + * 根据身份证号计算年龄(支持15/18位) + * @param idCard 身份证号 + * @return 年龄(若身份证号非法,返回-1) + */ + public static int calculateAge(String idCard) { + // 1. 校验身份证号合法性(基础校验:长度、非空) + if (!isValidIdCard(idCard)) { + System.out.println("身份证号格式非法!"); + return -1; + } + + // 2. 提取出生日期字符串(15位转18位格式) + String birthDateStr = extractBirthDateStr(idCard); + + // 3. 解析出生日期为LocalDate(处理格式异常) + LocalDate birthDate; + try { + birthDate = LocalDate.parse(birthDateStr, DateTimeFormatter.ofPattern("yyyyMMdd")); + } catch (DateTimeParseException e) { + System.out.println("出生日期解析失败,身份证号可能非法!"); + return -1; + } + + // 4. 计算年龄(当前日期 - 出生日期) + LocalDate currentDate = LocalDate.now(); // 若需指定日期,替换为 LocalDate.of(2024, 5, 20) + return calculateAgeBetweenDates(birthDate, currentDate); + } + + /** + * 基础校验身份证号(非空、长度15或18位、数字/最后一位X) + */ + private static boolean isValidIdCard(String idCard) { + if (idCard == null || idCard.trim().isEmpty()) { + return false; + } + // 正则:15位纯数字,或18位数字(最后一位可大写X) + String regex = "^(\\d{15}|\\d{17}([0-9]|X))$"; + return idCard.matches(regex); + } + + /** + * 从身份证号中提取出生日期字符串(统一转为yyyyMMdd格式) + */ + private static String extractBirthDateStr(String idCard) { + String birthDateStr; + if (idCard.length() == 18) { + // 18位:第7-14位(索引6-13) + birthDateStr = idCard.substring(6, 14); + } else { + // 15位:第7-12位(索引6-11),补前两位年份(19xx或20xx,这里简化为19xx,实际需根据规则判断) + String year = "19" + idCard.substring(6, 8); + String monthDay = idCard.substring(8, 12); + birthDateStr = year + monthDay; + } + return birthDateStr; + } + + /** + * 根据出生日期和当前日期计算年龄(处理未过生日的情况) + */ + private static int calculateAgeBetweenDates(LocalDate birthDate, LocalDate currentDate) { + // 计算年份差 + Period period = Period.between(birthDate, currentDate); + int age = period.getYears(); + + // 检查当前日期是否已超过当年的出生日期(未超过则年龄减1) + LocalDate birthdayThisYear = birthDate.withYear(currentDate.getYear()); + if (currentDate.isBefore(birthdayThisYear)) { + age--; + } + + // 防止年龄为负数(如出生日期在当前日期之后,理论上身份证号不会出现此情况) + return Math.max(age, 0); + } + + // 测试示例 + public static void main(String[] args) { + // 测试1:18位身份证(出生日期2000-01-01,当前日期2024-05-20 → 年龄24) + String idCard18 = "110101200001011234"; + System.out.println("18位身份证年龄:" + calculateAge(idCard18)); + + // 测试2:15位身份证(出生日期2000-01-01 → 15位表示为000101,补全后20000101) + String idCard15 = "110101000101123"; + System.out.println("15位身份证年龄:" + calculateAge(idCard15)); + + // 测试3:未过生日的情况(出生日期2000-06-01,当前日期2024-05-20 → 年龄23) + String idCardNotBirthday = "110101200006011234"; + System.out.println("未过生日的年龄:" + calculateAge(idCardNotBirthday)); + + // 测试4:非法身份证号(长度错误) + String idCardInvalid = "11010120000101123"; // 17位 + System.out.println("非法身份证年龄:" + calculateAge(idCardInvalid)); + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/IdCardUtil.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/IdCardUtil.java index c9cc729a..a0cff496 100644 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/IdCardUtil.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/IdCardUtil.java @@ -3,15 +3,16 @@ */ package com.openhis.common.utils; -import com.openhis.common.constant.CommonConstants; - import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.Calendar; import java.util.Date; import java.util.concurrent.ThreadLocalRandom; +import com.openhis.common.constant.CommonConstants; + /** * 身份证号生成工具类 * @@ -98,4 +99,74 @@ public class IdCardUtil { throw new IllegalArgumentException("无法解析生日日期: " + e.getMessage()); } } + + /** + * 根据身份证号计算年龄 + * + * @param idCard 身份证号码(15位或18位) + * @return 计算得到的年龄(整数) + * @throws IllegalArgumentException 如果身份证号格式无效或包含非法字符 + */ + public static Integer calculateAgeFromIdCard(String idCard) { + // 验证身份证号基本格式 + if (idCard == null || (idCard.length() != 15 && idCard.length() != 18)) { + throw new IllegalArgumentException("身份证号码长度无效,必须是15位或18位"); + } + + // 验证身份证号字符合法性(仅包含数字和X) + if (!idCard.matches("^[0-9Xx]+$")) { + throw new IllegalArgumentException("身份证号码包含非法字符"); + } + + try { + // 提取出生日期 + String birthYearStr, birthMonthStr, birthDayStr; + + if (idCard.length() == 15) { + // 15位身份证:7-8位为年份(后两位),9-10位为月份,11-12位为日期 + birthYearStr = "19" + idCard.substring(6, 8); + birthMonthStr = idCard.substring(8, 10); + birthDayStr = idCard.substring(10, 12); + } else { + // 18位身份证:7-10位为年份,11-12位为月份,13-14位为日期 + birthYearStr = idCard.substring(6, 10); + birthMonthStr = idCard.substring(10, 12); + birthDayStr = idCard.substring(12, 14); + } + + // 转换为整数 + int birthYear = Integer.parseInt(birthYearStr); + int birthMonth = Integer.parseInt(birthMonthStr); + int birthDay = Integer.parseInt(birthDayStr); + + // 验证日期有效性 + if (birthMonth < 1 || birthMonth > 12 || birthDay < 1 || birthDay > 31) { + throw new IllegalArgumentException("身份证中的出生日期无效"); + } + + // 获取当前日期 + Calendar calendar = Calendar.getInstance(); + int currentYear = calendar.get(Calendar.YEAR); + int currentMonth = calendar.get(Calendar.MONTH) + 1; // Calendar月份从0开始 + int currentDay = calendar.get(Calendar.DAY_OF_MONTH); + + // 计算年龄 + int age = currentYear - birthYear; + + // 判断是否已过生日 + if (currentMonth < birthMonth || (currentMonth == birthMonth && currentDay < birthDay)) { + age--; // 未过生日,年龄减1 + } + + // 验证年龄合理性 + if (age < 0 || age > 150) { + throw new IllegalArgumentException("计算得到的年龄超出合理范围"); + } + + return age; + + } catch (NumberFormatException e) { + throw new IllegalArgumentException("身份证号码中的日期部分格式错误", e); + } + } } diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/RedisKeys.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/RedisKeys.java new file mode 100644 index 00000000..359fe80a --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/RedisKeys.java @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2016-2019 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.openhis.common.utils; + +/** + * Redis所有Keys + */ +public class RedisKeys { + + + /** + * 商品缓存 + * @param itemId + * @return + */ + public static String getProductsKey(String itemId){ + return "products_change_price:item_" + itemId + "_key"; + } +} diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/RedisUtil.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/RedisUtil.java new file mode 100644 index 00000000..36d62655 --- /dev/null +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/utils/RedisUtil.java @@ -0,0 +1,612 @@ +package com.openhis.common.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.*; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.data.redis.core.RedisTemplate; +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * redis 工具类 + * @Author Scott + * + */ +@Component +public class RedisUtil { + + @Autowired + private RedisTemplate redisTemplate; + @Autowired + private StringRedisTemplate stringRedisTemplate; + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete((Collection) CollectionUtils.arrayToList(key)); + } + } + } + + // ============================String============================= + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * + * @param key 键 + * @param by 要增加几(大于0) + * @return + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递减 + * + * @param key 键 + * @param by 要减少几(小于0) + * @return + */ + public long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + // ================================Map================================= + /** + * HashGet + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + /** + * 判断hash表中是否有该项的值 + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + // ============================set============================= + /** + * 根据key获取Set中的所有值 + * + * @param key 键 + * @return + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) { + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * + * @param key 键 + * @return + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + // ===============================list================================= + + /** + * 获取list缓存的内容 + * + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * + * @param key 键 + * @return + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除N个值为value + * + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取指定前缀的一系列key + * 使用scan命令代替keys, Redis是单线程处理,keys命令在KEY数量较多时, + * 操作效率极低【时间复杂度为O(N)】,该命令一旦执行会严重阻塞线上其它命令的正常请求 + * @param keyPrefix + * @return + */ + private Set keys(String keyPrefix) { + String realKey = keyPrefix + "*"; + + try { + return redisTemplate.execute((RedisCallback>) connection -> { + Set binaryKeys = new HashSet<>(); + Cursor cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(realKey).count(Integer.MAX_VALUE).build()); + while (cursor.hasNext()) { + binaryKeys.add(new String(cursor.next())); + } + + return binaryKeys; + }); + } catch (Throwable e) { + e.printStackTrace(); + } + + return null; + } + + /** + * 删除指定前缀的一系列key + * @param keyPrefix + */ + public void removeAll(String keyPrefix) { + try { + Set keys = keys(keyPrefix); + redisTemplate.delete(keys); + } catch (Throwable e) { + e.printStackTrace(); + } + } + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChangePriceRecord.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChangePriceRecord.java new file mode 100644 index 00000000..6c52f479 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChangePriceRecord.java @@ -0,0 +1,96 @@ +package com.openhis.administration.domain; + +import java.math.BigDecimal; +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; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 修改价格记录Entity实体 + * + * @author system + * @date 2025-10-31 + */ +@Data +@TableName("adm_change_price_record") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class ChangePriceRecord extends HisBaseEntity { + + /** 本表id */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 仓库位置 */ + private Long locationId; + + /** 改价申请人id */ + private Long applicantId; + + /** 目标枚举 药品、耗材、诊疗、挂号 */ + private Integer itemCategoryEnum; + + /** 药品ID、耗材ID、诊疗ID、挂号ID */ + private Long itemId; + + /** 原进货价 */ + private BigDecimal originBuyingPrice; + + /** 原新价格 */ + private BigDecimal originRetailPrice; + + /** 审批人ID */ + private Long approverId; + + /** 审批时间 */ + private Date approvalTime; + + /** 删除标识 默认 0 未删除 */ + private String deleteFlag; + + /** 当前品库存量 */ + private BigDecimal itemQuantity; + + /** 零售价盈负差*/ + private BigDecimal differenceRetailPrice; + /**进货价盈负差*/ + private BigDecimal differenceBuyingPrice; + + /** 当前业务批次号 */ + private String busNo; + + /** 改价原因 */ + private String description; + + /** 改价申请时间 */ + private Date applicantTime; + + /** 业务表名药品、耗材、诊疗、挂号 */ + private String itemTable; + + /** 新进货价 */ + private BigDecimal newBuyingPrice; + + /** 新零售价 */ + private BigDecimal newRetailPrice; + + /** 物品计量单位 */ + private String unitCode; + + /** 审批状态 */ + private Integer statusEnum; + + /** 批次号 */ + private String lotNumber; + + /** 条件理由 */ + private String reason; + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java index 7a35e522..f24816e1 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItem.java @@ -154,4 +154,10 @@ public class ChargeItem extends HisBaseEntity { /** 执行id */ private Long procedureId; + + /** 发放所在表 */ + private String dispenseTable; + + /** 发放ID */ + private Long dispenseId; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItemDefDetail.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItemDefDetail.java index 9c153422..fffcb643 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItemDefDetail.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/ChargeItemDefDetail.java @@ -1,6 +1,7 @@ package com.openhis.administration.domain; import java.math.BigDecimal; +import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/HealthcareService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/HealthcareService.java index 4febb00c..f4774a0a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/HealthcareService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/HealthcareService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.core.common.core.domain.HisBaseEntity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -27,6 +28,11 @@ public class HealthcareService extends HisBaseEntity { @JsonSerialize(using = ToStringSerializer.class) private Long id; + /** + * 编码 + */ + private String busNo; + /** 活动标记 */ private Integer activeFlag; diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/PatientStudent.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/PatientStudent.java new file mode 100644 index 00000000..b1062ad4 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/PatientStudent.java @@ -0,0 +1,90 @@ +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; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗学生名单管理表Entity实体 + * + * @author system + * @date 2025-02-20 + */ +@Data +@TableName("adm_patient_student") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class PatientStudent extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 姓名 */ + private String name; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 性别 */ + private Integer gender; + + /** 年龄 */ + private Integer age; + + /** 学号 */ + private String studentId; + + /** 身份证号 */ + private String idNumber; + + /** 电话 */ + private String phone; + + /** 学院 */ + private String college; + + /** 专业 */ + private String major; + + /** 学历层次(0预科生1本科生2硕士研究生3博士研究生) */ + private Integer educationLevel; + + /** 入校时间 */ + private Date enrollmentDate; + + /** 离校时间 */ + private Date graduationDate; + + /** 年级 */ + private String grade; + + /** 学习形式(1全日制2非全日制) */ + private Integer studyMode; + + /** 在校状态(0在校1休学2离校) */ + private Integer studentStatus; + + /** 体检结果(0未体检1体检不合格2体检合格) */ + private Integer physicalExamResult; + + /** 辅导员 */ + private String counselor; + + /** 辅导员电话 */ + private String counselorPhone; + + /** 患者ID */ + private Long patientId; + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Practitioner.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Practitioner.java index 819d4458..8a8910f2 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Practitioner.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/domain/Practitioner.java @@ -1,16 +1,14 @@ package com.openhis.administration.domain; -import java.math.BigDecimal; 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; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.openhis.common.enums.AdministrativeGender; + import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -90,7 +88,7 @@ public class Practitioner extends HisBaseEntity { private Long userId; /** 医生职称 */ - private String drProfttlCode ; + private String drProfttlCode; /** 证件类型 */ private String prscDrCertCode; @@ -103,4 +101,7 @@ public class Practitioner extends HisBaseEntity { /** 签名图片 */ private String signature; + + /** pos机编号 */ + private String posNo; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChangePriceDataDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChangePriceDataDto.java new file mode 100644 index 00000000..67a38e3a --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChangePriceDataDto.java @@ -0,0 +1,96 @@ +package com.openhis.administration.dto; + +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; + +/** + * @ClassName ChangePricePageDto + * @Description TODO + * @Author raymond + * @Date 2025/10/31 17:35 + * @Version 1.0 + **/ +@Data +public class ChangePriceDataDto { + + /** 批次号 */ + private String originLotNumber; + + /** 改价申请人id */ + private Long applicantId; + + /** 目标枚举 药品、耗材、诊疗、挂号 */ + private Integer itemCategoryEnum; + private String itemCategoryEnum_Text; + + /** 药品ID、耗材ID、诊疗ID、挂号ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long itemId; + /** + * 获取名称 + */ + private String itemName; + /** 原进货价 */ + private BigDecimal originBuyingPrice; + + /** 原零售价价格 */ + private BigDecimal originRetailPrice; + + /** 当前品库存量 */ + private BigDecimal itemQuantity; + + /** 当前业务批次号 */ + private String busNo; + + /** 改价申请时间 */ + private Date applicantTime; + + /** 新进货价 */ + private BigDecimal newBuyingPrice; + + /** 新零售价 */ + private BigDecimal newRetailPrice; + + /** 物品计量单位 */ + private String unitCode; + + /** 审批状态 */ + private Integer statusEnum; + private Integer statusEnum_Text; + + /** 批次号 */ + private String lotNumber; + + /** 条件理由 */ + private String reason; + + /** 零售价盈负差*/ + private BigDecimal differenceRetailPrice; + /**进货价盈负差*/ + private BigDecimal differenceBuyingPrice; + /** + * 科室名称 + */ + private String orgName; + /** + * 价格主表ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long chargeId; + /** + * 调价表ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long changePriceRecordId; + + private String label; + /** + * 规格 + */ + private String totalVolume; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChargeItemDefDetailPriceDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChargeItemDefDetailPriceDto.java new file mode 100644 index 00000000..35501d06 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/ChargeItemDefDetailPriceDto.java @@ -0,0 +1,24 @@ +package com.openhis.administration.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @ClassName ChargeItemDefDetailPriceDto + * @Description 获取 药品或耗材 进货价和零售价的DTO + * @Author raymond + * @Date 2025/11/1 21:40 + * @Version 1.0 + **/ +@Data +public class ChargeItemDefDetailPriceDto { + /** + * 进货价或者零售价 + */ + private BigDecimal price; + /** + * 拆零比 + */ + private BigDecimal partPercent; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/EncounterDataDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/EncounterDataDto.java new file mode 100644 index 00000000..ff7e203a --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/EncounterDataDto.java @@ -0,0 +1,27 @@ +package com.openhis.administration.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; + +/** + * @ClassName EncounterDataDto + * @Description + * @Author raymond + * @Date 2025/10/27 16:01 + * @Version 1.0 + **/ +@Data +public class EncounterDataDto { + /** + * 换着ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + /** + * 就诊表ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/EncounterLocationDataDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/EncounterLocationDataDto.java new file mode 100644 index 00000000..89efa457 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/EncounterLocationDataDto.java @@ -0,0 +1,27 @@ +package com.openhis.administration.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; + +/** + * @ClassName EncounterLocationDataDto + * @Description + * @Author raymond + * @Date 2025/10/27 16:01 + * @Version 1.0 + **/ +@Data +public class EncounterLocationDataDto { + /** + * 区域ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + /** + * 就诊表ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/HealthcareDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/HealthcareDto.java new file mode 100644 index 00000000..94d775fa --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/HealthcareDto.java @@ -0,0 +1,39 @@ +package com.openhis.administration.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +/** + * @ClassName HealcareDto + * @Description TODO + * @Author raymond + * @Date 2025/10/18 14:59 + * @Version 1.0 + **/ +@Data +public class HealthcareDto { + + private Long itemId; + /** + * 科室id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + /** + * 科室名称 + */ + private String orgName; + /** + * 项目名称 + */ + private String name; + /** + * 分类 + */ + private String categoryCode; + /** + * 服务类型 + */ + private String typeCode; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/LocationDataDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/LocationDataDto.java new file mode 100644 index 00000000..0d3237a5 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/LocationDataDto.java @@ -0,0 +1,49 @@ +package com.openhis.administration.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; + +import java.util.List; + +/** + * @ClassName roleDataList + * @Description 权限集合 + * @Author raymond + * @Date 2025/10/27 16:01 + * @Version 1.0 + **/ +@Data +public class LocationDataDto { + /** + * 区域ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + /** + * 状态 + */ + private Integer statusEnum; + /** + * 模式编码 + */ + private Integer modeEnum; + /** + * 操作状态 + */ + private Integer operationalEnum; + /** + * 岗位类型 + */ + private String busNo; + /** + * 区域名称 + */ + private String areaName; + /** + * 患者详细信息 + */ + private List patientBedInfoDtoList; + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/OrgDataDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/OrgDataDto.java new file mode 100644 index 00000000..56f3ce3f --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/OrgDataDto.java @@ -0,0 +1,32 @@ +package com.openhis.administration.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.medication.dto.AdjustPriceMedListDto; +import lombok.Data; + +import java.util.List; + +/** + * @ClassName OrgDataDto + * @Description TODO + * @Author raymond + * @Date 2025/10/22 09:44 + * @Version 1.0 + **/ +@Data +public class OrgDataDto { + /** + * id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + /** + * 科室名称 + */ + private String orgName; + /** + * 挂号集合 + */ + private List healthDataList; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/PatientBedInfoDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/PatientBedInfoDto.java new file mode 100644 index 00000000..dc77e751 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/PatientBedInfoDto.java @@ -0,0 +1,58 @@ +package com.openhis.administration.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.util.Date; + +/** + * @ClassName PatientBedInfoDto + * @Description 患者详细信息 + * @Author raymond + * @Date 2025/10/30 08:10 + * @Version 1.0 + **/ +@Data +public class PatientBedInfoDto { + + /** + * 床位 + */ + private String bedName; + /** + * 患者姓名 + */ + private String patientName; + /** + * 患者编号ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + /** + * 患者性别 + */ + private String patientGenderText; + /** + * 患者编号 + */ + private String patientNumber; + /** + * 就诊号ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + /** + * 床位ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long bedLocationId; + /** 生日 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date birthDate; + private String patientAgeText; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/PatientDataDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/PatientDataDto.java new file mode 100644 index 00000000..22aded41 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/PatientDataDto.java @@ -0,0 +1,26 @@ +package com.openhis.administration.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import lombok.Data; + +/** + * @ClassName EncounterDataDto + * @Description + * @Author raymond + * @Date 2025/10/27 16:01 + * @Version 1.0 + **/ +@Data +public class PatientDataDto { + /** + * 换着ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long patientId; + private String patientName; + private Integer gender; + private String idCard; + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/RoleDataDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/RoleDataDto.java new file mode 100644 index 00000000..41db68b6 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/dto/RoleDataDto.java @@ -0,0 +1,39 @@ +package com.openhis.administration.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +/** + * @ClassName roleDataList + * @Description 权限集合 + * @Author raymond + * @Date 2025/10/27 16:01 + * @Version 1.0 + **/ +@Data +public class RoleDataDto { + /** + * 权限表ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long roleId; + /** + * 科室ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long orgId; + /** + * 区域ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long locationId; + /** + * 专业编码枚举 + */ + private Integer specialtyEnum; + /** + * 岗位类型 + */ + private String typeCode; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChangePriceRecordMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChangePriceRecordMapper.java new file mode 100644 index 00000000..161db7bc --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChangePriceRecordMapper.java @@ -0,0 +1,120 @@ +package com.openhis.administration.mapper; + +import com.openhis.administration.dto.ChangePriceDataDto; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.administration.domain.ChangePriceRecord; + +import java.util.List; + +/** + * 修改价格记录Mapper接口 + * + * @author system + * @date 2025-10-15 + */ +@Repository +public interface ChangePriceRecordMapper extends BaseMapper { + /** + * Desc: 根据条件 查询 药品调价单 + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchMedChangePriceByBusNo(@Param("busNo") String busNo,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 药品调价单 + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:34 2025/11/4 + * @return java.util.List + **/ + List searchMedChangePriceByItemId(@Param("itemId") Long itemId,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 耗材调价单 + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchDeviceChangePriceByBusNo(@Param("busNo") String busNo,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 耗材调价单 + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:33 2025/11/4 + * @return java.util.List + **/ + List searchDeviceChangePriceByItemId(@Param("itemId") Long itemId,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + + /** + * Desc: 根据条件 查询 诊疗调价单 + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchActivityChangePriceByBusNo(@Param("busNo") String busNo,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 诊疗调价单 + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:32 2025/11/4 + * @return java.util.List + **/ + List searchActivityChangePriceByItemId(@Param("itemId") Long itemId,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + + /** + * Desc: 根据条件 查询 挂号调价单 + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchHealthChangePriceByBusNo(@Param("busNo") String busNo,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 挂号调价单 + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:31 2025/11/4 + * @return java.util.List + **/ + List searchHealthChangePriceByItemId(@Param("itemId") Long itemId,@Param("categoryEnum") Integer categoryEnum,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据条件 查询 审批单 审核中的数据 + * @param busNo + * @param statusEnum + * @Author raymond + * @Date 10:36 2025/11/2 + * @return java.util.List + **/ + List searchChangePriceRecordDataByBusNo(@Param("busNo") String busNo,@Param("statusEnum") Integer statusEnum); + /** + * Desc: 根据编号分组查询 数据 + * @param busNo + * @Author raymond + * @Date 09:39 2025/11/5 + * @return java.util.List + **/ + List searchChangePriceDataGroupByBusNo(@Param("busNo") String busNo); + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefDetailAppMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefDetailAppMapper.java new file mode 100644 index 00000000..c63c6041 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefDetailAppMapper.java @@ -0,0 +1,30 @@ +package com.openhis.administration.mapper; + +import com.openhis.administration.domain.ChargeItemDefDetail; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +/** + * 费用定价管理子Mapper接口 + * + * @author system + * @date 2025-02-20 + */ +@Repository +public interface ChargeItemDefDetailAppMapper extends BaseMapper { + + /** + * Desc: 根据 参数加载数据 + * @param value + * @param code + * @Author raymond + * @Date 08:13 2025/10/29 + * @return java.util.List + **/ + List searchChargeDetailDataByBusNo(@Param("value") String value, @Param("code") String code); + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefinitionMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefinitionMapper.java index a34e0486..44ba870b 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefinitionMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefinitionMapper.java @@ -1,9 +1,11 @@ package com.openhis.administration.mapper; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.ChargeItemDefinition; +import com.openhis.administration.dto.ChargeItemDefDetailPriceDto; /** * 费用定价管理Mapper接口 @@ -13,5 +15,40 @@ import com.openhis.administration.domain.ChargeItemDefinition; */ @Repository public interface ChargeItemDefinitionMapper extends BaseMapper { + /** + * Desc: 根据 conditionCode 和 药品ID 获取 原价和零售价 + * + * @param conditionCode + * @param instanceId + * @Author raymond + * @Date 21:44 2025/11/1 + * @return com.openhis.administration.domain.ChargeItemDefinition + **/ + ChargeItemDefDetailPriceDto getMedPriceByParam(@Param("conditionCode") String conditionCode, + @Param("instanceId") Long instanceId); + + /** + * Desc: 根据 conditionCode 和 耗材ID 获取 原价和零售价 + * + * @param conditionCode + * @param instanceId + * @Author raymond + * @Date 07:23 2025/11/4 + * @return com.openhis.administration.dto.ChargeItemDefDetailPriceDto + **/ + ChargeItemDefDetailPriceDto getDevicePriceByParam(@Param("conditionCode") String conditionCode, + @Param("instanceId") Long instanceId); + + /** + * Desc: 根据 状态和货品ID 加载诊疗或挂号的最新零售价 + * + * @param statusEnum + * @param instanceId + * @Author raymond + * @Date 22:02 2025/11/1 + * @return com.openhis.administration.dto.ChargeItemDefDetailPriceDto + **/ + ChargeItemDefDetailPriceDto getProductPrice(@Param("statusEnum") Integer statusEnum, + @Param("instanceId") Long instanceId); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/DeviceDefinitionMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/DeviceDefinitionMapper.java index 0971097d..19797f62 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/DeviceDefinitionMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/DeviceDefinitionMapper.java @@ -1,10 +1,14 @@ package com.openhis.administration.mapper; +import com.openhis.medication.dto.AdjustPriceMedListDto; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.DeviceDefinition; +import java.util.List; + /** * 器材定义管理Mapper接口 * @@ -13,5 +17,13 @@ import com.openhis.administration.domain.DeviceDefinition; */ @Repository public interface DeviceDefinitionMapper extends BaseMapper { + /** 根据关键字查询 如果关键字为空,查询10条,否则返回查询到的所有 + * Desc: + * @param keyWord + * @Author raymond + * @Date 20:23 2025/10/21 + * @return java.util.List + **/ + List searchDeviceListByKeyWord(@Param("keyWord") String keyWord); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/EncounterLocationMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/EncounterLocationMapper.java index fd67957f..e1752d16 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/EncounterLocationMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/EncounterLocationMapper.java @@ -1,9 +1,11 @@ package com.openhis.administration.mapper; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.EncounterLocation; +import com.openhis.administration.dto.PatientBedInfoDto; /** * 就诊位置管理Mapper接口 @@ -14,4 +16,17 @@ import com.openhis.administration.domain.EncounterLocation; @Repository public interface EncounterLocationMapper extends BaseMapper { + /** + * Desc: 根据区域ID查询所有 就诊信息 + * + * @param locationId + * @param statusEnum + * @param formEnum + * @Author raymond + * @Date 12:20 2025/10/28 + * @return java.util.List + **/ + PatientBedInfoDto searchEncounterDataByLocationId(@Param("locationId") Long locationId, + @Param("statusEnum") Integer statusEnum,@Param("formEnum") Integer formEnum); + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/EncounterMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/EncounterMapper.java index 061911fb..1012ec4a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/EncounterMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/EncounterMapper.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.Encounter; import com.openhis.administration.dto.EncounterAccountDto; +import com.openhis.administration.dto.EncounterDataDto; /** * 就诊管理Mapper接口 @@ -28,4 +29,26 @@ public interface EncounterMapper extends BaseMapper { */ List getEncounterInfoByTime(@Param("startDate") Date startDate, @Param("endDate") Date endDate); + /** + * Desc: 根据条件查询 encounter 数据 + * @param imp + * @param amb + * @param encounterStatus + * @param encounterIds + * @Author raymond + * @Date 12:36 2025/10/28 + * @return java.util.List + **/ + List searchEncounterDataByIds(@Param("imp") Integer imp, @Param("amb") Integer amb, + @Param("encounterStatus") Long encounterStatus, @Param("encounterIds") List encounterIds); + /** + * Desc: 根据参数加载 患者记录信息 + * @param classEnum + * @param encounterId + * @Author raymond + * @Date 12:34 2025/11/3 + * @return com.openhis.administration.dto.EncounterDataDto + **/ + EncounterDataDto getPatientIdByParam(@Param("classEnum") Integer classEnum, + @Param("encounterId") Long encounterId); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/HealthcareServiceMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/HealthcareServiceMapper.java index b666832f..31226fb3 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/HealthcareServiceMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/HealthcareServiceMapper.java @@ -1,9 +1,14 @@ package com.openhis.administration.mapper; +import java.util.List; + +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.HealthcareService; +import com.openhis.administration.dto.HealthcareDto; +import com.openhis.medication.dto.AdjustPriceMedListDto; /** * 服务项目管理Mapper接口 @@ -13,5 +18,22 @@ import com.openhis.administration.domain.HealthcareService; */ @Repository public interface HealthcareServiceMapper extends BaseMapper { + /** + * Desc: 根据 项目id数组 加载 挂号数据集合 + * + * @param itemIds + * @Author raymond + * @Date 15:36 2025/10/18 + * @return java.util.List + **/ + List searchHealthByIds(@Param("itemIds") List itemIds); + /** + * Desc: 查询所有 挂号数据 + * @param orgId + * @Author raymond + * @Date 08:32 2025/10/22 + * @return java.util.List + **/ + List searchAllHeathData(@Param("orgId") Long orgId,@Param("statusEnum") Integer statusEnum); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/LocationMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/LocationMapper.java index b525c6b8..3e992935 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/LocationMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/LocationMapper.java @@ -1,9 +1,14 @@ package com.openhis.administration.mapper; +import java.util.List; + +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.Location; +import com.openhis.administration.dto.LocationDataDto; +import com.openhis.administration.dto.PatientBedInfoDto; /** * 位置管理Mapper接口 @@ -13,5 +18,22 @@ import com.openhis.administration.domain.Location; */ @Repository public interface LocationMapper extends BaseMapper { + /** + * Desc: 根据区域id数组查询 区域表 + * @param locationIds + * @Author raymond + * @Date 07:46 2025/10/28 + * @return java.util.List + **/ + List searchLocationDataByIds(@Param("locationIds") List locationIds); + /** + * Desc: 根据病区bus_no 查询病床 + * @param busNo + * @param formEnum + * @Author raymond + * @Date 14:01 2025/10/28 + * @return java.util.List + **/ + List searchLocationDataByBusNo(@Param("busNo") String busNo, @Param("formEnum") Integer formEnum, @Param("statusEnum") Integer statusEnum); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/OrganizationMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/OrganizationMapper.java index c3622aca..c027796b 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/OrganizationMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/OrganizationMapper.java @@ -1,10 +1,13 @@ package com.openhis.administration.mapper; +import com.openhis.administration.dto.OrgDataDto; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.Organization; +import java.util.List; + /** * 机构管理Mapper接口 * @@ -13,5 +16,13 @@ import com.openhis.administration.domain.Organization; */ @Repository public interface OrganizationMapper extends BaseMapper { + /** + * Desc: + * @param + * @Author raymond + * @Date 09:46 2025/10/22 + * @return List + **/ + List searchOrgDataByHealth(); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PatientMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PatientMapper.java index dc2fde94..aac3507a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PatientMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PatientMapper.java @@ -1,10 +1,14 @@ package com.openhis.administration.mapper; +import com.openhis.administration.dto.PatientDataDto; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.Patient; +import java.util.List; + /** * 患者管理Mapper接口 * @@ -13,5 +17,14 @@ import com.openhis.administration.domain.Patient; */ @Repository public interface PatientMapper extends BaseMapper { + /** + * Desc: 根据属性查询用户信息 + * @param patientId + * @param activeFlag + * @Author raymond + * @Date 12:53 2025/10/28 + * @return java.util.List + **/ + List searchPatientDataByPatientId(@Param("patientId") Long patientId,@Param("activeFlag") Integer activeFlag); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefAppMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PatientStudentMapper.java similarity index 54% rename from openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefAppMapper.java rename to openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PatientStudentMapper.java index f1739704..957361cb 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/ChargeItemDefAppMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PatientStudentMapper.java @@ -1,17 +1,17 @@ package com.openhis.administration.mapper; -import com.openhis.administration.domain.ChargeItemDefDetail; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.administration.domain.PatientStudent; /** - * 费用定价管理子Mapper接口 + * 公费医疗学生名单管理表Mapper接口 * * @author system * @date 2025-02-20 */ @Repository -public interface ChargeItemDefAppMapper extends BaseMapper { +public interface PatientStudentMapper extends BaseMapper { } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PractitionerRoleMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PractitionerRoleMapper.java index f21fe449..37caa073 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PractitionerRoleMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/mapper/PractitionerRoleMapper.java @@ -1,9 +1,13 @@ package com.openhis.administration.mapper; +import java.util.List; + +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.administration.domain.PractitionerRole; +import com.openhis.administration.dto.RoleDataDto; /** * 岗位管理Mapper接口 @@ -13,5 +17,31 @@ import com.openhis.administration.domain.PractitionerRole; */ @Repository public interface PractitionerRoleMapper extends BaseMapper { + /** + * Desc: 根据员工ID 查询 + * @param practitionerId + * @param roleCode + * @Author raymond + * @Date 16:43 2025/10/27 + * @return java.util.List + **/ + List searchPractitionerRoleByPractitionerId(@Param("practitionerId") Long practitionerId,@Param("roleCode") String roleCode); + /** + * Desc: 根据员工ID数组 查询 + * @param practitionerIds + * @Author raymond + * @Date 16:49 2025/10/27 + * @return java.util.List + **/ + List searchPractitionerRoleByPractitionerIds(@Param("practitionerIds") Long practitionerIds); + /** + * Desc: 根据员工ID 查询 locationId数组 + * @param practitionerId + * @param roleCode + * @Author raymond + * @Date 16:50 2025/10/27 + * @return java.util.List + **/ + List searchPractitionerRoleLocationIds(@Param("practitionerId") Long practitionerId,@Param("roleCode") String roleCode); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IAccountService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IAccountService.java index 985e89d1..ba63524a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IAccountService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IAccountService.java @@ -84,4 +84,19 @@ public interface IAccountService extends IService { */ List getAccountListByEncounter(Long encounterId); + /** + * 学生医保转学生自费 + * + * @param encounterId 就诊id + * @return 账户id + */ + Long getStudentSelfAccount(Long encounterId); + + /** + * 学生自费转学生医保 + * + * @param encounterId 就诊id + * @return 账户id + */ + Long getStudentYbAccount(Long encounterId); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChangePriceRecordService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChangePriceRecordService.java new file mode 100644 index 00000000..57d40bde --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChangePriceRecordService.java @@ -0,0 +1,175 @@ +package com.openhis.administration.service; + +import java.util.Date; +import java.util.List; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.administration.domain.ChangePriceRecord; +import com.openhis.administration.dto.ChangePriceDataDto; + +/** + * 修改价格记录Service接口 + * + * @author system + * @date 2025-10-15 + */ +public interface IChangePriceRecordService extends IService { + /** + * Desc: 根据单据号 进行提交审核操作 + * + * @param busNo + * @Author raymond + * @Date 23:08 2025/11/1 + * @return boolean + **/ + boolean submitApproval(String busNo); + + /** + * Desc: 根据单据号 查询列表 + * + * @param busNo + * @Author raymond + * @Date 08:44 2025/11/2 + * @return java.util.List + **/ + List searchChangePriceDataForBusNo(String busNo); + + /** + * Desc: 根据条件 查询 药品调价单 + * + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchMedChangePriceByBusNo(String busNo, Integer categoryEnum, Integer statusEnum); + + /** + * Desc: 根据条件 查询 药品调价单 + * + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:34 2025/11/4 + * @return java.util.List + **/ + List searchMedChangePriceByItemId(Long itemId, Integer categoryEnum, Integer statusEnum); + + /** + * Desc: 根据条件 查询 耗材调价单 + * + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchDeviceChangePriceByBusNo(String busNo, Integer categoryEnum, Integer statusEnum); + + /** + * Desc: 根据条件 查询 耗材调价单 + * + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:33 2025/11/4 + * @return java.util.List + **/ + List searchDeviceChangePriceByItemId(Long itemId, Integer categoryEnum, Integer statusEnum); + + /** + * Desc: 根据条件 查询 诊疗调价单 + * + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchActivityChangePriceByBusNo(String busNo, Integer categoryEnum, Integer statusEnum); + + /** + * Desc: 根据条件 查询 诊疗调价单 + * + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:32 2025/11/4 + * @return java.util.List + **/ + List searchActivityChangePriceByItemId(Long itemId, Integer categoryEnum, Integer statusEnum); + + /** + * Desc: 根据条件 查询 挂号调价单 + * + * @param busNo + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 09:46 2025/11/2 + * @return java.util.List + **/ + List searchHealthChangePriceByBusNo(String busNo, Integer categoryEnum, Integer statusEnum); + + /** + * Desc: 根据条件 查询 挂号调价单 + * + * @param itemId + * @param categoryEnum + * @param statusEnum + * @Author raymond + * @Date 07:31 2025/11/4 + * @return java.util.List + **/ + List searchHealthChangePriceByItemId(Long itemId, Integer categoryEnum, Integer statusEnum); + + /** + * Desc: 审核通过操作 + * + * @param busNo + * @param now + * @Author raymond + * @Date 10:13 2025/11/2 + * @return void + **/ + void agreeRequest(String busNo, Date now); + + /** + * Desc: 审核驳回操作 + * + * @param busNo + * @Author raymond + * @Date 18:43 2025/11/3 + * @return boolean + **/ + boolean rejectRequest(String busNo); + + /** + * Desc: 根据条件 查询 审批单 审核中的数据 + * + * @param busNo + * @param statusEnum + * @Author raymond + * @Date 10:36 2025/11/2 + * @return java.util.List + **/ + List searchChangePriceRecordDataByBusNo(String busNo, Integer statusEnum); + + /** + * Desc: 根据编号分组查询 数据 + * + * @param busNo + * @Author raymond + * @Date 09:39 2025/11/5 + * @return java.util.List + **/ + List searchChangePriceDataGroupByBusNo(String busNo); + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemDefDetailService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemDefDetailService.java index ada5581f..805dd7ec 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemDefDetailService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemDefDetailService.java @@ -1,5 +1,7 @@ package com.openhis.administration.service; +import java.util.List; + import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.ChargeItemDefDetail; @@ -34,4 +36,33 @@ public interface IChargeItemDefDetailService extends IService + **/ + List searchChargeItemDefDetailByIds(Long chargeItemId,String code,String lotNumber); + + /** + * Desc: 根据 参数加载数据 + * + * @param value + * @param code + * @Author raymond + * @Date 08:13 2025/10/29 + * @return java.util.List + **/ + List searchChargeDetailDataByBusNo(String value, String code); + + /** + * 根据定价id查询批号售价 + * + * @param chargeItemDefIdList 定价ids + * @return 批号售价信息 + */ + List getLotNumberPriceByDefIds(List chargeItemDefIdList); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemDefinitionService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemDefinitionService.java index 90787307..86aff64c 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemDefinitionService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemDefinitionService.java @@ -1,11 +1,13 @@ package com.openhis.administration.service; import java.math.BigDecimal; +import java.util.List; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.ChargeItemDefinition; import com.openhis.administration.domain.HealthcareService; +import com.openhis.administration.dto.ChargeItemDefDetailPriceDto; /** * 费用定价管理Service接口 @@ -68,4 +70,59 @@ public interface IChargeItemDefinitionService extends IService + **/ + List searchChargeItemDefinitionByMedIds(List itemIds); + + /** + * Desc: 根据参数加载对象 + * + * @param instanceId + * @param instanceTable + * @param statusEnum + * @Author raymond + * @Date 11:15 2025/10/30 + * @return com.openhis.administration.domain.ChargeItemDefinition + **/ + ChargeItemDefinition getChargeItemDefinitionEntity(Long instanceId, String instanceTable, Integer statusEnum); + + /** + * Desc: 根据 conditionCode 和 货品ID 获取 原价和零售价 + * + * @param conditionCode + * @param instanceId + * @Author raymond + * @Date 21:44 2025/11/1 + * @return com.openhis.administration.domain.ChargeItemDefinition + **/ + ChargeItemDefDetailPriceDto getMedPriceByParam(String conditionCode, Long instanceId); + + /** + * Desc: 根据 conditionCode 和 耗材ID 获取 原价和零售价 + * + * @param conditionCode + * @param instanceId + * @Author raymond + * @Date 07:23 2025/11/4 + * @return com.openhis.administration.dto.ChargeItemDefDetailPriceDto + **/ + ChargeItemDefDetailPriceDto getDevicePriceByParam(String conditionCode, Long instanceId); + + /** + * Desc: 根据 状态和货品ID 加载诊疗或挂号的最新零售价 + * + * @param statusEnum + * @param instanceId + * @Author raymond + * @Date 22:02 2025/11/1 + * @return com.openhis.administration.dto.ChargeItemDefDetailPriceDto + **/ + ChargeItemDefDetailPriceDto getProductPrice(Integer statusEnum, Long instanceId); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java index a58092b2..f83a8f96 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IChargeItemService.java @@ -101,6 +101,14 @@ public interface IChargeItemService extends IService { */ List getChargeItemDefInfoByIds(List chargeItemIds); + /** + * 收费项关联Def项目集合(带组套) + * + * @param chargeItemIds 集合 + * @return 集合 + */ + List getChargeItemDefInfoByIdList(List chargeItemIds); + /** * 根据执行id查询收费项目信息 * diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IDeviceDefinitionService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IDeviceDefinitionService.java index 01cb6631..3b2552eb 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IDeviceDefinitionService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IDeviceDefinitionService.java @@ -1,7 +1,10 @@ package com.openhis.administration.service; +import java.util.List; + import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.DeviceDefinition; +import com.openhis.medication.dto.AdjustPriceMedListDto; /** * 器材定义管理Service接口 @@ -26,4 +29,13 @@ public interface IDeviceDefinitionService extends IService { * @return */ boolean addYbDevice(DeviceDefinition deviceDefinition); + + /** 根据关键字查询 如果关键字为空,查询10条,否则返回查询到的所有 + * Desc: + * @param keyWord + * @Author raymond + * @Date 20:23 2025/10/21 + * @return java.util.List + **/ + List searchDeviceListByKeyWord(String keyWord); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IEncounterService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IEncounterService.java index 916b1e67..562a2eb5 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IEncounterService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IEncounterService.java @@ -6,6 +6,8 @@ import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.Encounter; import com.openhis.administration.dto.EncounterAccountDto; +import com.openhis.administration.dto.EncounterDataDto; +import org.apache.ibatis.annotations.Param; /** * 就诊管理Service接口 @@ -69,4 +71,14 @@ public interface IEncounterService extends IService { * @return 集合 */ List getEncounterInfoByTime(Date startDate, Date endDate); + + /** + * Desc: 根据参数加载 患者记录信息 + * @param classEnum + * @param encounterId + * @Author raymond + * @Date 12:34 2025/11/3 + * @return com.openhis.administration.dto.EncounterDataDto + **/ + EncounterDataDto getPatientIdByParam(Integer classEnum,Long encounterId); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IHealthcareServiceService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IHealthcareServiceService.java index 42a29755..c2d36201 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IHealthcareServiceService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IHealthcareServiceService.java @@ -2,6 +2,12 @@ package com.openhis.administration.service; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.HealthcareService; +import com.openhis.administration.dto.HealthcareDto; +import com.openhis.medication.dto.AdjustPriceMedListDto; +import org.apache.ibatis.annotations.Param; +import org.springframework.security.core.parameters.P; + +import java.util.List; /** * 服务项目管理Service接口 @@ -24,5 +30,23 @@ public interface IHealthcareServiceService extends IService { * @return 编辑结果 */ boolean updateHealthcareService(HealthcareService healthcareService); + /** + * Desc: 根据 项目id数组 加载 挂号数据集合 + * @param itemIds + * @Author raymond + * @Date 15:36 2025/10/18 + * @return java.util.List + **/ + List searchHealthByIds(@Param("itemIds") List itemIds); + + /** + * Desc: 查询所有 挂号数据 + * @param + * @Author raymond + * @Date 08:32 2025/10/22 + * @return java.util.List + **/ + List searchAllHeathData(Long orgId,Integer statusEnum); + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/ILocationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/ILocationService.java index ab2c4e22..e27a53f7 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/ILocationService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/ILocationService.java @@ -4,6 +4,8 @@ import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.Location; +import com.openhis.administration.dto.LocationDataDto; +import org.apache.ibatis.annotations.Param; /** * 位置管理Service接口 @@ -99,4 +101,13 @@ public interface ILocationService extends IService { */ boolean updateStatusById(Long id, Integer status); + /** + * Desc: 根据区域id数组查询 区域表 + * @param locationIds + * @Author raymond + * @Date 07:46 2025/10/28 + * @return java.util.List + **/ + List searchLocationDataByIds(@Param("locationIds") List locationIds); + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationLocationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationLocationService.java index 4103c375..d8dec26a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationLocationService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationLocationService.java @@ -3,6 +3,8 @@ package com.openhis.administration.service; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.OrganizationLocation; +import java.util.List; + /** * 机构位置关系管理Service接口 * @@ -28,4 +30,12 @@ public interface IOrganizationLocationService extends IService getOrgLocListByOrgIdAndActivityDefinitionId(Long activityDefinitionId); + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationService.java index a4348d33..2bc6010f 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationService.java @@ -4,6 +4,7 @@ import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.Organization; +import com.openhis.administration.dto.OrgDataDto; /** * 机构管理Service接口 @@ -45,4 +46,13 @@ public interface IOrganizationService extends IService { * @return 科室集合 */ List getOrganizationListById(List collect); + + /** + * Desc: + * @param + * @Author raymond + * @Date 09:46 2025/10/22 + * @return List + **/ + List searchOrgDataByHealth(); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IPatientStudentService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IPatientStudentService.java new file mode 100644 index 00000000..e34a7236 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IPatientStudentService.java @@ -0,0 +1,14 @@ +package com.openhis.administration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.administration.domain.PatientStudent; + +/** + * 公费医疗学生名单管理表Service接口 + * + * @author system + * @date 2025-02-20 + */ +public interface IPatientStudentService extends IService { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IPractitionerRoleService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IPractitionerRoleService.java index d41d0316..a0b32868 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IPractitionerRoleService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IPractitionerRoleService.java @@ -3,6 +3,8 @@ package com.openhis.administration.service; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.administration.domain.Practitioner; import com.openhis.administration.domain.PractitionerRole; +import com.openhis.administration.dto.RoleDataDto; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -54,4 +56,31 @@ public interface IPractitionerRoleService extends IService { */ List getNurseList(Long orgId); + /** + * Desc: 根据员工ID 查询 + * @param practitionerId + * @param roleCode + * @Author raymond + * @Date 16:43 2025/10/27 + * @return java.util.List + **/ + List searchPractitionerRoleByPractitionerId(@Param("practitionerId") Long practitionerId, @Param("roleCode") String roleCode); + /** + * Desc: 根据员工ID数组 查询 + * @param practitionerIds + * @Author raymond + * @Date 16:49 2025/10/27 + * @return java.util.List + **/ + List searchPractitionerRoleByPractitionerIds(@Param("practitionerIds") Long practitionerIds); + /** + * Desc: 根据员工ID 查询 locationId数组 + * @param practitionerId + * @param roleCode + * @Author raymond + * @Date 16:50 2025/10/27 + * @return java.util.List + **/ + List searchPractitionerRoleLocationIds(@Param("practitionerId") Long practitionerId,@Param("roleCode") String roleCode); + } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/AccountServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/AccountServiceImpl.java index a029ecc2..6803a6ce 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/AccountServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/AccountServiceImpl.java @@ -69,6 +69,7 @@ public class AccountServiceImpl extends ServiceImpl impl .in(Account::getTypeCode, AccountType.MEDICAL_ELECTRONIC_CERTIFICATE.getCode(), AccountType.ID_CARD.getCode(), AccountType.SOCIAL_SECURITY_CARD.getCode()) .ne(Account::getContractNo, CommonConstants.BusinessName.DEFAULT_CONTRACT_NO) + .ne(Account::getContractNo, CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO) .last(YbCommonConstants.sqlConst.LIMIT1)); if (account != null) { return account.getId(); @@ -163,4 +164,47 @@ public class AccountServiceImpl extends ServiceImpl impl public List getAccountListByEncounter(Long encounterId) { return baseMapper.selectList(new LambdaQueryWrapper().eq(Account::getEncounterId, encounterId)); } + + /** + * 学生医保转学生自费 + * + * @param encounterId 就诊id + * @return 账户id + */ + @Override + public Long getStudentSelfAccount(Long encounterId) { + Account account = baseMapper + .selectOne(new LambdaQueryWrapper().select(Account::getId).eq(Account::getEncounterId, encounterId) + .in(Account::getTypeCode, AccountType.MEDICAL_ELECTRONIC_CERTIFICATE.getCode(), + AccountType.ID_CARD.getCode(), AccountType.SOCIAL_SECURITY_CARD.getCode()) + .ne(Account::getContractNo, CommonConstants.BusinessName.DEFAULT_CONTRACT_NO) + .eq(Account::getContractNo, CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO) + .last(YbCommonConstants.sqlConst.LIMIT1)); + if (account != null) { + return account.getId(); + } + return null; + } + + /** + * 学生自费转学生医保 + * + * @param encounterId 就诊id + * @return 账户id + */ + @Override + public Long getStudentYbAccount(Long encounterId) { + Account account = baseMapper + .selectOne(new LambdaQueryWrapper().select(Account::getId).eq(Account::getEncounterId, encounterId) + .in(Account::getTypeCode, AccountType.MEDICAL_ELECTRONIC_CERTIFICATE.getCode(), + AccountType.ID_CARD.getCode(), AccountType.SOCIAL_SECURITY_CARD.getCode()) + .ne(Account::getContractNo, CommonConstants.BusinessName.DEFAULT_CONTRACT_NO) + .ne(Account::getContractNo, CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO) + .like(Account::getContractNo, CommonConstants.BusinessName.CONTRACT_STUDENT) + .last(YbCommonConstants.sqlConst.LIMIT1)); + if (account != null) { + return account.getId(); + } + return null; + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChangePriceRecordServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChangePriceRecordServiceImpl.java new file mode 100644 index 00000000..0b0bb3b5 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChangePriceRecordServiceImpl.java @@ -0,0 +1,119 @@ +package com.openhis.administration.service.impl; + +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import com.core.common.core.domain.entity.SysDictData; +import com.openhis.common.constant.CommonConstants; +import com.openhis.workflow.domain.SupplyRequest; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.utils.DateUtils; +import com.core.common.utils.SecurityUtils; +import com.core.system.mapper.SysDictDataMapper; +import com.openhis.administration.domain.ChangePriceRecord; +import com.openhis.administration.dto.ChangePriceDataDto; +import com.openhis.administration.mapper.ChangePriceRecordMapper; +import com.openhis.administration.service.IChangePriceRecordService; +import com.openhis.common.enums.SupplyStatus; + +/** + * 修改价格记录Service业务层处理 + * + * @author system + * @date 2025-10-15 + */ +@Service +public class ChangePriceRecordServiceImpl extends ServiceImpl + implements IChangePriceRecordService { + + @Resource + private SysDictDataMapper sysDictDataMapper; + @Override + public boolean submitApproval(String busNo) { + int updateCount = baseMapper.update(null, + new LambdaUpdateWrapper().eq(ChangePriceRecord::getBusNo, busNo) + .set(ChangePriceRecord::getApplicantTime, DateUtils.getNowDate()) + .set(ChangePriceRecord::getStatusEnum, SupplyStatus.APPROVAL.getValue())); + return updateCount > 0; + } + + @Override + public List searchChangePriceDataForBusNo(String busNo) { + return this.baseMapper.selectList(new LambdaUpdateWrapper().eq(ChangePriceRecord::getBusNo,busNo)); + } + + @Override + public List searchMedChangePriceByBusNo(String busNo, Integer categoryEnum,Integer statusEnum) { + return this.baseMapper.searchMedChangePriceByBusNo(busNo, categoryEnum,statusEnum); + } + + @Override + public List searchMedChangePriceByItemId(Long itemId, Integer categoryEnum, Integer statusEnum) { + return this.baseMapper.searchMedChangePriceByItemId(itemId,categoryEnum,statusEnum); + } + + @Override + public List searchDeviceChangePriceByBusNo(String busNo, Integer categoryEnum,Integer statusEnum) { + return this.baseMapper.searchDeviceChangePriceByBusNo(busNo,categoryEnum, statusEnum); + } + + @Override + public List searchDeviceChangePriceByItemId(Long itemId, Integer categoryEnum, Integer statusEnum) { + return this.baseMapper.searchDeviceChangePriceByItemId(itemId,categoryEnum,statusEnum); + } + + @Override + public List searchActivityChangePriceByBusNo(String busNo, Integer categoryEnum,Integer statusEnum) { + return this.baseMapper.searchActivityChangePriceByBusNo(busNo,categoryEnum, statusEnum); + } + + @Override + public List searchActivityChangePriceByItemId(Long itemId, Integer categoryEnum, Integer statusEnum) { + return this.baseMapper.searchActivityChangePriceByItemId(itemId,categoryEnum,statusEnum); + } + + @Override + public List searchHealthChangePriceByBusNo(String busNo, Integer categoryEnum,Integer statusEnum) { + return this.baseMapper.searchHealthChangePriceByBusNo(busNo,categoryEnum,statusEnum); + } + + @Override + public List searchHealthChangePriceByItemId(Long itemId, Integer categoryEnum, Integer statusEnum) { + return this.baseMapper.searchHealthChangePriceByItemId(itemId,categoryEnum,statusEnum); + } + + @Override + public void agreeRequest(String busNo, Date now) { + baseMapper.update(null, + new LambdaUpdateWrapper().eq(ChangePriceRecord::getBusNo, busNo) + .set(ChangePriceRecord::getApprovalTime, now) + .set(ChangePriceRecord::getApproverId, SecurityUtils.getLoginUser().getPractitionerId()) + .set(ChangePriceRecord::getStatusEnum, SupplyStatus.AGREE.getValue())); + } + + @Override + public boolean rejectRequest(String busNo) { + int updateCount = baseMapper.update(null, + new LambdaUpdateWrapper().eq(ChangePriceRecord::getBusNo, busNo) + .set(ChangePriceRecord::getApprovalTime, DateUtils.getNowDate()) + .set(ChangePriceRecord::getApproverId, SecurityUtils.getLoginUser().getPractitionerId()) + .set(ChangePriceRecord::getStatusEnum, SupplyStatus.REJECT.getValue())); + return updateCount > 0; + } + + @Override + public List searchChangePriceRecordDataByBusNo(String busNo, Integer statusEnum) { + return this.baseMapper.searchChangePriceRecordDataByBusNo(busNo,statusEnum); + } + + @Override + public List searchChangePriceDataGroupByBusNo(String busNo) { + return this.baseMapper.searchChangePriceDataGroupByBusNo(busNo); + } + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefDetailServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefDetailServiceImpl.java index 6da90303..1bf1ea5a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefDetailServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefDetailServiceImpl.java @@ -1,11 +1,16 @@ package com.openhis.administration.service.impl; -import com.openhis.administration.domain.ChargeItemDefDetail; +import java.util.List; + import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.openhis.administration.mapper.ChargeItemDefAppMapper; +import com.openhis.administration.domain.ChargeItemDefDetail; +import com.openhis.administration.mapper.ChargeItemDefDetailAppMapper; import com.openhis.administration.service.IChargeItemDefDetailService; +import com.openhis.common.enums.ConditionCode; +import com.openhis.common.enums.DelFlag; /** * 费用定价管理子Service业务层处理 @@ -14,7 +19,7 @@ import com.openhis.administration.service.IChargeItemDefDetailService; * @date 2025-02-20 */ @Service -public class ChargeItemDefDetailServiceImpl extends ServiceImpl +public class ChargeItemDefDetailServiceImpl extends ServiceImpl implements IChargeItemDefDetailService { /** @@ -31,7 +36,7 @@ public class ChargeItemDefDetailServiceImpl extends ServiceImpl 0; } } else { @@ -69,4 +74,33 @@ public class ChargeItemDefDetailServiceImpl extends ServiceImpl 0; } } + + @Override + public List searchChargeItemDefDetailByIds(Long chargeItemId, String code, String lotNumber) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(ChargeItemDefDetail::getDefinitionId, chargeItemId).eq(ChargeItemDefDetail::getConditionCode, code); + if (lotNumber != null) { + queryWrapper.eq(ChargeItemDefDetail::getConditionValue, lotNumber); + } + return baseMapper.selectList(queryWrapper); + } + + @Override + public List searchChargeDetailDataByBusNo(String value, String code) { + return this.baseMapper.searchChargeDetailDataByBusNo(value, code); + } + + /** + * 根据定价id查询批号售价 + * + * @param chargeItemDefIdList 定价ids + * @return 批号售价信息 + */ + @Override + public List getLotNumberPriceByDefIds(List chargeItemDefIdList) { + return baseMapper.selectList( + new LambdaQueryWrapper().in(ChargeItemDefDetail::getDefinitionId, chargeItemDefIdList) + .eq(ChargeItemDefDetail::getConditionCode, ConditionCode.LOT_NUMBER_PRICE.getCode()) + .eq(ChargeItemDefDetail::getDeleteFlag, DelFlag.NO.getCode())); + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefinitionServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefinitionServiceImpl.java index a17e3c05..f2f45630 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefinitionServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefinitionServiceImpl.java @@ -14,6 +14,7 @@ import com.core.common.utils.DateUtils; import com.openhis.administration.domain.ChargeItemDefDetail; import com.openhis.administration.domain.ChargeItemDefinition; import com.openhis.administration.domain.HealthcareService; +import com.openhis.administration.dto.ChargeItemDefDetailPriceDto; import com.openhis.administration.mapper.ChargeItemDefinitionMapper; import com.openhis.administration.service.IChargeItemDefDetailService; import com.openhis.administration.service.IChargeItemDefinitionService; @@ -154,4 +155,34 @@ public class ChargeItemDefinitionServiceImpl extends ServiceImpl searchChargeItemDefinitionByMedIds(List itemIds) { + return baseMapper.selectList( + new LambdaQueryWrapper().in(ChargeItemDefinition::getInstanceId, itemIds)); + } + + @Override + public ChargeItemDefinition getChargeItemDefinitionEntity(Long instanceId, String instanceTable, + Integer statusEnum) { + return baseMapper.selectOne( + new LambdaQueryWrapper().eq(ChargeItemDefinition::getInstanceId, instanceId) + .eq(ChargeItemDefinition::getInstanceTable, instanceTable) + .eq(ChargeItemDefinition::getStatusEnum, statusEnum)); + } + + @Override + public ChargeItemDefDetailPriceDto getMedPriceByParam(String conditionCode, Long instanceId) { + return this.baseMapper.getMedPriceByParam(conditionCode, instanceId); + } + + @Override + public ChargeItemDefDetailPriceDto getDevicePriceByParam(String conditionCode, Long instanceId) { + return this.baseMapper.getDevicePriceByParam(conditionCode,instanceId); + } + + @Override + public ChargeItemDefDetailPriceDto getProductPrice(Integer statusEnum, Long instanceId) { + return this.baseMapper.getProductPrice(statusEnum, instanceId); + } + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemServiceImpl.java index 2bfded66..513c7a7e 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemServiceImpl.java @@ -4,15 +4,22 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.exception.ServiceException; import com.core.common.utils.SecurityUtils; +import com.core.common.utils.StringUtils; import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.domain.ChargeItemDefinition; import com.openhis.administration.dto.ChargeItemBaseInfoDto; import com.openhis.administration.dto.ChargeItemDefInfo; +import com.openhis.administration.mapper.ChargeItemDefinitionMapper; import com.openhis.administration.mapper.ChargeItemMapper; import com.openhis.administration.service.IChargeItemService; import com.openhis.common.enums.ChargeItemContext; @@ -31,6 +38,9 @@ import lombok.AllArgsConstructor; @AllArgsConstructor public class ChargeItemServiceImpl extends ServiceImpl implements IChargeItemService { + @Autowired + ChargeItemDefinitionMapper chargeItemDefinitionMapper; + /** * 创建已计费的采购账单 * @@ -177,6 +187,47 @@ public class ChargeItemServiceImpl extends ServiceImpl getChargeItemDefInfoByIdList(List chargeItemIds) { + List chargeItemDefInfos = baseMapper.getChargeItemDefInfoByIds(chargeItemIds); + List chargeItemDefInfoChildren = new ArrayList<>(); + ChargeItemDefInfo chargeItemDefInfo; + for (ChargeItemDefInfo chargeItemDefInfoById : chargeItemDefInfos) { + + if (!StringUtils.isEmpty(chargeItemDefInfoById.getChildrenJson())) { + List childrenList = + JSON.parseArray(chargeItemDefInfoById.getChildrenJson(), ChargeItem.class); + for (ChargeItem chargeItem : childrenList) { + + ChargeItemDefinition chargeItemDefinition = + chargeItemDefinitionMapper.selectById(chargeItem.getDefinitionId()); + + if (chargeItemDefinition == null) { + throw new ServiceException("未查询到定价信息!提示信息:" + chargeItemDefInfoById.getChargeName() + "子项信息--" + + chargeItem.getDefinitionId()); + } + chargeItemDefInfo = new ChargeItemDefInfo(); + + BeanUtils.copyProperties(chargeItem, chargeItemDefInfo); + BeanUtils.copyProperties(chargeItemDefinition, chargeItemDefInfo); + + chargeItemDefInfoChildren.add(chargeItemDefInfo); + } + + } + } + if (!chargeItemDefInfoChildren.isEmpty()) { + chargeItemDefInfos.addAll(chargeItemDefInfoChildren); + } + return chargeItemDefInfos; + } + /** * 根据执行id查询收费项目信息 * diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/DeviceDefinitionServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/DeviceDefinitionServiceImpl.java index daefd57e..1c9b458d 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/DeviceDefinitionServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/DeviceDefinitionServiceImpl.java @@ -2,6 +2,7 @@ package com.openhis.administration.service.impl; import java.util.List; +import com.openhis.medication.dto.AdjustPriceMedListDto; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -47,4 +48,9 @@ public class DeviceDefinitionServiceImpl extends ServiceImpl searchDeviceListByKeyWord(String keyWord) { + return this.deviceDefinitionMapper.searchDeviceListByKeyWord(keyWord); + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/EncounterServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/EncounterServiceImpl.java index 6aab137a..7114d714 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/EncounterServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/EncounterServiceImpl.java @@ -5,6 +5,7 @@ import java.util.List; import javax.annotation.Resource; +import com.openhis.administration.dto.EncounterDataDto; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -145,4 +146,9 @@ public class EncounterServiceImpl extends ServiceImpl getEncounterInfoByTime(Date startDate, Date endDate) { return baseMapper.getEncounterInfoByTime(startDate, endDate); } + + @Override + public EncounterDataDto getPatientIdByParam(Integer classEnum, Long encounterId) { + return this.baseMapper.getPatientIdByParam(classEnum,encounterId); + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/HealthcareServiceServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/HealthcareServiceServiceImpl.java index 7868e289..e427e2d4 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/HealthcareServiceServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/HealthcareServiceServiceImpl.java @@ -2,11 +2,16 @@ package com.openhis.administration.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.openhis.administration.domain.HealthcareService; +import com.openhis.administration.dto.HealthcareDto; import com.openhis.administration.mapper.HealthcareServiceMapper; import com.openhis.administration.service.IHealthcareServiceService; +import com.openhis.medication.dto.AdjustPriceMedListDto; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 服务项目管理Service业务层处理 * @@ -14,8 +19,11 @@ import org.springframework.transaction.annotation.Transactional; * @date 2025-02-20 */ @Service +@AllArgsConstructor public class HealthcareServiceServiceImpl extends ServiceImpl implements IHealthcareServiceService { + private final HealthcareServiceMapper healthcareServiceMapper; + /** * 服务管理 新增 @@ -45,4 +53,14 @@ public class HealthcareServiceServiceImpl extends ServiceImpl searchHealthByIds(List itemIds) { + return this.healthcareServiceMapper.searchHealthByIds(itemIds); + } + + @Override + public List searchAllHeathData(Long orgId,Integer statusEnum) { + return this.healthcareServiceMapper.searchAllHeathData(orgId,statusEnum); + } + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/LocationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/LocationServiceImpl.java index c9992bdf..eb117fe5 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/LocationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/LocationServiceImpl.java @@ -2,6 +2,7 @@ package com.openhis.administration.service.impl; import java.util.List; +import com.openhis.administration.dto.LocationDataDto; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -14,6 +15,8 @@ import com.openhis.common.enums.DelFlag; import com.openhis.common.enums.LocationForm; import com.openhis.common.enums.LocationStatus; +import javax.annotation.Resource; + /** * 位置管理Service业务层处理 * @@ -22,6 +25,8 @@ import com.openhis.common.enums.LocationStatus; */ @Service public class LocationServiceImpl extends ServiceImpl implements ILocationService { + @Resource + private LocationMapper locationMapper; /** * 获取药房列表 @@ -180,4 +185,9 @@ public class LocationServiceImpl extends ServiceImpl i return baseMapper.updateById(location) > 0; } + @Override + public List searchLocationDataByIds(List locationIds) { + return this.locationMapper.searchLocationDataByIds(locationIds); + } + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java index cb1f8aa4..9306e255 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java @@ -1,6 +1,7 @@ package com.openhis.administration.service.impl; import java.sql.Time; +import java.util.List; import org.springframework.stereotype.Service; @@ -50,4 +51,16 @@ public class OrganizationLocationServiceImpl extends ServiceImpl getOrgLocListByOrgIdAndActivityDefinitionId(Long activityDefinitionId) { + return baseMapper.selectList(new LambdaQueryWrapper() + .eq(OrganizationLocation::getActivityDefinitionId, activityDefinitionId)); + } + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationServiceImpl.java index e42b784b..c0dbd63b 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationServiceImpl.java @@ -3,6 +3,7 @@ package com.openhis.administration.service.impl; import java.util.List; import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.dto.OrgDataDto; import com.openhis.common.enums.DelFlag; import org.springframework.stereotype.Service; @@ -14,6 +15,8 @@ import com.openhis.administration.mapper.OrganizationMapper; import com.openhis.administration.service.IOrganizationService; import com.openhis.common.enums.AccountStatus; +import javax.annotation.Resource; + /** * 机构管理Service业务层处理 * @@ -23,7 +26,8 @@ import com.openhis.common.enums.AccountStatus; @Service public class OrganizationServiceImpl extends ServiceImpl implements IOrganizationService { - + @Resource + private OrganizationMapper organizationMapper; /** * 机构启用 * @@ -75,4 +79,9 @@ public class OrganizationServiceImpl extends ServiceImpl().in(Organization::getId, collect) .eq(Organization::getDeleteFlag, DelFlag.NO.getCode())); } + + @Override + public List searchOrgDataByHealth() { + return this.organizationMapper.searchOrgDataByHealth(); + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PatientStudentServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PatientStudentServiceImpl.java new file mode 100644 index 00000000..f9e2033b --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PatientStudentServiceImpl.java @@ -0,0 +1,61 @@ +package com.openhis.administration.service.impl; + +import java.util.Date; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.exception.ServiceException; +import com.openhis.administration.domain.Patient; +import com.openhis.administration.domain.PatientStudent; +import com.openhis.administration.mapper.PatientStudentMapper; +import com.openhis.administration.service.IPatientStudentService; +import com.openhis.common.enums.DelFlag; +import com.openhis.common.enums.PhysicalExamResult; + +/** + * 公费医疗学生名单管理表Service业务层处理 + * + * @author system + * @date 2025-02-20 + */ +@Service +public class PatientStudentServiceImpl extends ServiceImpl + implements IPatientStudentService { + + /** + * 校验学生公费资格 + * + * @param patient + */ + public void checkStatus(Patient patient) { + + String idCard = patient.getIdCard(); + Date date = new Date(); + + List patientStudents = baseMapper.selectList(new LambdaQueryWrapper() + .eq(PatientStudent::getIdNumber, idCard).eq(PatientStudent::getDeleteFlag, DelFlag.NO.getCode()) + .eq(PatientStudent::getPatientId, patient.getId())); + + if (patientStudents == null || patientStudents.isEmpty()) { + throw new ServiceException("该患者不是学生,请更换费用性质类型!"); + } + + PatientStudent patientStudent = null; + for (PatientStudent item : patientStudents) { + if (date.after(item.getEnrollmentDate()) && date.before(item.getGraduationDate())) { + patientStudent = item; + } + } + + if (patientStudent == null) { + throw new ServiceException("该患者公费资格未生效或已失效!!不可以享受公费"); + } + + if (!PhysicalExamResult.EXAMINATION_PASSED.getValue().equals(patientStudent.getPhysicalExamResult())) { + throw new ServiceException("该患者体检不合格不可以享受公费"); + } + } +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PractitionerRoleServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PractitionerRoleServiceImpl.java index 3119f51d..3577facc 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PractitionerRoleServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/PractitionerRoleServiceImpl.java @@ -3,6 +3,7 @@ package com.openhis.administration.service.impl; import java.util.List; import java.util.stream.Collectors; +import com.openhis.administration.dto.RoleDataDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -113,4 +114,19 @@ public class PractitionerRoleServiceImpl extends ServiceImpl searchPractitionerRoleByPractitionerId(Long practitionerId, String roleCode) { + return this.practitionerRoleMapper.searchPractitionerRoleByPractitionerId(practitionerId,roleCode); + } + + @Override + public List searchPractitionerRoleByPractitionerIds(Long practitionerIds) { + return this.practitionerRoleMapper.searchPractitionerRoleByPractitionerIds(practitionerIds); + } + + @Override + public List searchPractitionerRoleLocationIds(Long practitionerId, String roleCode) { + return this.practitionerRoleMapper.searchPractitionerRoleLocationIds(practitionerId,roleCode); + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/SupplierServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/SupplierServiceImpl.java index fab16126..2a008d51 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/SupplierServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/SupplierServiceImpl.java @@ -2,8 +2,6 @@ package com.openhis.administration.service.impl; import java.util.List; -import com.openhis.common.enums.DelFlag; -import com.openhis.common.enums.Whether; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -12,7 +10,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.openhis.administration.domain.Supplier; import com.openhis.administration.mapper.SupplierMapper; import com.openhis.administration.service.ISupplierService; +import com.openhis.common.enums.DelFlag; import com.openhis.common.enums.SupplierType; +import com.openhis.common.enums.Whether; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -58,9 +58,10 @@ public class SupplierServiceImpl extends ServiceImpl i */ @Override public List getList() { - return baseMapper.selectList(new LambdaQueryWrapper().select(Supplier::getId, Supplier::getName, Supplier::getPhone) - .eq(Supplier::getTypeEnum, SupplierType.ACTIVE.getValue()) - .eq(Supplier::getDeleteFlag, DelFlag.NO.getCode()).eq(Supplier::getActiveFlag, Whether.YES.getValue())); + return baseMapper.selectList( + new LambdaQueryWrapper().select(Supplier::getId, Supplier::getName, Supplier::getPhone) + .eq(Supplier::getTypeEnum, SupplierType.SUPPLIER.getValue()) + .eq(Supplier::getDeleteFlag, DelFlag.NO.getCode()).eq(Supplier::getActiveFlag, Whether.YES.getValue())); } /** diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ConditionNoDefinition.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ConditionNoDefinition.java new file mode 100644 index 00000000..6e544862 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/domain/ConditionNoDefinition.java @@ -0,0 +1,40 @@ +package com.openhis.clinical.domain; + +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; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 新增国临码功能单表增删改查 + * @author ws + * @date 2025-10-15 + */ +@Data +@TableName("cli_condition_no_definition") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class ConditionNoDefinition extends HisBaseEntity { + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 国临编码 */ + private String glNo; + + /** 国临name */ + private String glName; + + /** 医保编码 */ + private String icd10No; + + /** 医保name */ + private String icd10Name; + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/mapper/ConditionNoDefinitionMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/mapper/ConditionNoDefinitionMapper.java new file mode 100644 index 00000000..dfb9b66d --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/mapper/ConditionNoDefinitionMapper.java @@ -0,0 +1,16 @@ +package com.openhis.clinical.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.clinical.domain.Condition; +import com.openhis.clinical.domain.ConditionNoDefinition; +import org.springframework.stereotype.Repository; + +/** + * 新增国临码功能单表增删改查 + * @author ws + * @date 2025-10-15 + */ +@Repository +public interface ConditionNoDefinitionMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/service/IConditionNoDefinitionService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/service/IConditionNoDefinitionService.java new file mode 100644 index 00000000..76b027bb --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/service/IConditionNoDefinitionService.java @@ -0,0 +1,14 @@ +package com.openhis.clinical.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.clinical.domain.ConditionDefinition; +import com.openhis.clinical.domain.ConditionNoDefinition; + +/** + * 新增国临码功能单表增删改查 + * @author ws + * @date 2025-10-15 + */ +public interface IConditionNoDefinitionService extends IService { + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/service/impl/ConditionNoDefinitionServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/service/impl/ConditionNoDefinitionServiceImpl.java new file mode 100644 index 00000000..95d2a51c --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/clinical/service/impl/ConditionNoDefinitionServiceImpl.java @@ -0,0 +1,25 @@ +package com.openhis.clinical.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.clinical.domain.ConditionDefinition; +import com.openhis.clinical.mapper.ConditionDefinitionMapper; +import com.openhis.clinical.service.IConditionDefinitionService; +import com.openhis.clinical.service.IConditionNoDefinitionService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.openhis.clinical.mapper.ConditionNoDefinitionMapper; +import com.openhis.clinical.domain.ConditionNoDefinition; +/** + * 新增国临码功能单表增删改查 + * @author ws + * @date 2025-10-15 + */ +@Slf4j +@Service +@AllArgsConstructor +public class ConditionNoDefinitionServiceImpl extends ServiceImpl + implements IConditionNoDefinitionService { + private final ConditionNoDefinitionMapper conditionNoDefinitionMapper; + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/crosssystem/utils/CrossSystemSendApplyUtil.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/crosssystem/utils/CrossSystemSendApplyUtil.java index 5c0bf240..3d9fed78 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/crosssystem/utils/CrossSystemSendApplyUtil.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/crosssystem/utils/CrossSystemSendApplyUtil.java @@ -32,7 +32,7 @@ import lombok.extern.slf4j.Slf4j; /** * 跨系统发送申请工具类 * - * @author GuoRui + * @author Thanking * @date 2025-06-25 */ @Slf4j @@ -128,6 +128,7 @@ public class CrossSystemSendApplyUtil { // 获取结果CODE String code = String.valueOf(object.getInnerMap().get("code")); if (!"100000".equals(code)) { + log.error("LIS失败申请报文:" + s); throw new ServiceException("LIS申请返回失败信息:" + object); } } catch (Exception e) { @@ -230,6 +231,7 @@ public class CrossSystemSendApplyUtil { // 获取结果CODE String code = String.valueOf(object.getInnerMap().get("code")); if (!"100000".equals(code)) { + log.error("PACS失败申请报文:" + s); throw new ServiceException("PACS申请返回失败信息:" + object); } } catch (Exception e) { diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocInventoryItemStatic.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocInventoryItemStatic.java new file mode 100644 index 00000000..bd378663 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/DocInventoryItemStatic.java @@ -0,0 +1,120 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.document.domain; + +import java.math.BigDecimal; +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; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 历史库存静态记录表 + * + * @author zwh + * @date 2025-11-04 + */ +@Data +@TableName("doc_inventory_item_static") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class DocInventoryItemStatic extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 物品类别 */ + private String categoryCode; + + /** 名称 */ + private String name; + + /** 库存状态 */ + private Integer inventoryStatusEnum; + + /** 供应商id */ + private Long supplierId; + + /** 说明书 */ + private String descriptionText; + + /** 最小单位 */ + private String unitCode; + + /** 当前库存数量(最小单位数量) */ + private BigDecimal quantity; + + /** 产品批号 */ + private String lotNumber; + + /** 生产日期 */ + private Date productionDate; + + /** 失效日期 */ + private Date expirationDate; + + /** 库位 */ + private Long locationStoreId; + + /** 仓库 */ + private Long locationId; + + /** 追溯码 */ + private String traceNo; + + /** 追溯码包装层级 */ + private Integer packagingLevels; + + /** 项目 */ + private String itemTable; + + /** 物品编码 */ + private Long itemId; + + /** 采购单价(包装单位) */ + private BigDecimal price; + + /** 销售单价(包装单位) */ + private BigDecimal salePrice; + + /** 项目编号 */ + private String busNo; + + /** 最小单位 */ + private String minUnitCode; + + /** 拆零比 */ + private BigDecimal partPercent; + + /** 供应商名称 */ + private String supplierName; + + /** 库房名称 */ + private String locationName; + + /** 货位名称 */ + private String locationStoreName; + + /** 生产厂商文本 */ + private String manufacturerText; + + /** 医保等级 */ + private Integer chrgitmLv; + + /** 规格 */ + private String totalVolume; + + /** 药品名称拼音码 */ + private String pyStr; + + /** 药品五笔码 */ + private String wbStr; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/mapper/DocInventoryItemStaticMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/mapper/DocInventoryItemStaticMapper.java new file mode 100644 index 00000000..e1a9b714 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/mapper/DocInventoryItemStaticMapper.java @@ -0,0 +1,18 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.document.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.document.domain.DocInventoryItemStatic; + +/** + * 历史库存静态记录 mapper + * + * @author zwh + * @date 2025-11-04 + */ +@Repository +public interface DocInventoryItemStaticMapper extends BaseMapper {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocDefinitionOrganizationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocDefinitionOrganizationService.java index 85c3836f..2d570d29 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocDefinitionOrganizationService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocDefinitionOrganizationService.java @@ -1,7 +1,6 @@ package com.openhis.document.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.openhis.document.domain.DocDefinition; import com.openhis.document.domain.DocDefinitionOrganization; /** diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocDefinitionService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocDefinitionService.java index f8f467a5..65cc13d7 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocDefinitionService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocDefinitionService.java @@ -2,7 +2,6 @@ package com.openhis.document.service; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.document.domain.DocDefinition; -import com.openhis.document.domain.EmrTemplate; /** * 病历定义服务接口 diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocInventoryItemStaticService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocInventoryItemStaticService.java new file mode 100644 index 00000000..88066375 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocInventoryItemStaticService.java @@ -0,0 +1,15 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.document.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.document.domain.DocInventoryItemStatic; + +/** + * 历史库存静态记录接口 + * + * @author zwh + * @date 2025-11-04 + */ +public interface IDocInventoryItemStaticService extends IService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocStatisticsDefinitionOptionService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocStatisticsDefinitionOptionService.java index c3c81661..84df5973 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocStatisticsDefinitionOptionService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocStatisticsDefinitionOptionService.java @@ -1,7 +1,6 @@ package com.openhis.document.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.openhis.document.domain.DocStatisticsDefinition; import com.openhis.document.domain.DocStatisticsDefinitionOption; /** diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocStatisticsDefinitionService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocStatisticsDefinitionService.java index 9e727aac..339a317e 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocStatisticsDefinitionService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/IDocStatisticsDefinitionService.java @@ -1,7 +1,6 @@ package com.openhis.document.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.openhis.document.domain.DocStatistics; import com.openhis.document.domain.DocStatisticsDefinition; /** diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocDefinitionOrganizationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocDefinitionOrganizationServiceImpl.java index 6b65be3d..349b1f54 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocDefinitionOrganizationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocDefinitionOrganizationServiceImpl.java @@ -1,14 +1,13 @@ package com.openhis.document.service.impl; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.openhis.document.domain.DocDefinition; -import com.openhis.document.domain.DocDefinitionOrganization; -import com.openhis.document.mapper.DocDefinitionMapper; -import com.openhis.document.mapper.DocDefinitionOrganizationMapper; -import com.openhis.document.service.IDocDefinitionOrganizationService; -import com.openhis.document.service.IDocDefinitionService; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.document.domain.DocDefinitionOrganization; +import com.openhis.document.mapper.DocDefinitionOrganizationMapper; +import com.openhis.document.service.IDocDefinitionOrganizationService; + @Service -public class DocDefinitionOrganizationServiceImpl extends ServiceImpl implements IDocDefinitionOrganizationService { -} +public class DocDefinitionOrganizationServiceImpl + extends ServiceImpl + implements IDocDefinitionOrganizationService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocDefinitionServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocDefinitionServiceImpl.java index f64c4ad4..fc194738 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocDefinitionServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocDefinitionServiceImpl.java @@ -1,15 +1,12 @@ package com.openhis.document.service.impl; +import org.springframework.stereotype.Service; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.openhis.document.domain.DocDefinition; -import com.openhis.document.domain.EmrDetail; import com.openhis.document.mapper.DocDefinitionMapper; -import com.openhis.document.mapper.EmrDetailMapper; import com.openhis.document.service.IDocDefinitionService; -import com.openhis.document.service.IEmrDetailService; -import nonapi.io.github.classgraph.json.Id; -import org.springframework.stereotype.Service; @Service -public class DocDefinitionServiceImpl extends ServiceImpl implements IDocDefinitionService { -} +public class DocDefinitionServiceImpl extends ServiceImpl + implements IDocDefinitionService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocInventoryItemStaticServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocInventoryItemStaticServiceImpl.java new file mode 100644 index 00000000..33017c3a --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocInventoryItemStaticServiceImpl.java @@ -0,0 +1,21 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.document.service.impl; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.document.domain.DocInventoryItemStatic; +import com.openhis.document.mapper.DocInventoryItemStaticMapper; +import com.openhis.document.service.IDocInventoryItemStaticService; + +/** + * 历史库存静态记录接口实现类 + * + * @author zwh + * @date 2025-11-04 + */ +@Service +public class DocInventoryItemStaticServiceImpl extends ServiceImpl + implements IDocInventoryItemStaticService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocRecordServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocRecordServiceImpl.java index 166614c0..e2cbf9b0 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocRecordServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocRecordServiceImpl.java @@ -1,14 +1,11 @@ package com.openhis.document.service.impl; +import org.springframework.stereotype.Service; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.openhis.document.domain.DocRecord; -import com.openhis.document.domain.DocStatistics; import com.openhis.document.mapper.DocRecordMapper; -import com.openhis.document.mapper.DocStatisticsMapper; import com.openhis.document.service.IDocRecordService; -import com.openhis.document.service.IDocStatisticsService; -import org.springframework.stereotype.Service; @Service -public class DocRecordServiceImpl extends ServiceImpl implements IDocRecordService { -} +public class DocRecordServiceImpl extends ServiceImpl implements IDocRecordService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsDefinitionOptionServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsDefinitionOptionServiceImpl.java index a4f888f9..09e26000 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsDefinitionOptionServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsDefinitionOptionServiceImpl.java @@ -1,14 +1,13 @@ package com.openhis.document.service.impl; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.openhis.document.domain.DocStatisticsDefinition; -import com.openhis.document.domain.DocStatisticsDefinitionOption; -import com.openhis.document.mapper.DocStatisticsDefinitionMapper; -import com.openhis.document.mapper.DocStatisticsDefinitionOptionMapper; -import com.openhis.document.service.IDocStatisticsDefinitionOptionService; -import com.openhis.document.service.IDocStatisticsDefinitionService; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.document.domain.DocStatisticsDefinitionOption; +import com.openhis.document.mapper.DocStatisticsDefinitionOptionMapper; +import com.openhis.document.service.IDocStatisticsDefinitionOptionService; + @Service -public class DocStatisticsDefinitionOptionServiceImpl extends ServiceImpl implements IDocStatisticsDefinitionOptionService { -} +public class DocStatisticsDefinitionOptionServiceImpl + extends ServiceImpl + implements IDocStatisticsDefinitionOptionService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsDefinitionServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsDefinitionServiceImpl.java index 2c2c9dda..9fbb7d87 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsDefinitionServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsDefinitionServiceImpl.java @@ -1,14 +1,12 @@ package com.openhis.document.service.impl; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.openhis.document.domain.DocStatistics; -import com.openhis.document.domain.DocStatisticsDefinition; -import com.openhis.document.mapper.DocStatisticsDefinitionMapper; -import com.openhis.document.mapper.DocStatisticsMapper; -import com.openhis.document.service.IDocStatisticsDefinitionService; -import com.openhis.document.service.IDocStatisticsService; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.document.domain.DocStatisticsDefinition; +import com.openhis.document.mapper.DocStatisticsDefinitionMapper; +import com.openhis.document.service.IDocStatisticsDefinitionService; + @Service -public class DocStatisticsDefinitionServiceImpl extends ServiceImpl implements IDocStatisticsDefinitionService { -} +public class DocStatisticsDefinitionServiceImpl extends + ServiceImpl implements IDocStatisticsDefinitionService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsServiceImpl.java index afea5e36..6243aec8 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocStatisticsServiceImpl.java @@ -1,14 +1,12 @@ package com.openhis.document.service.impl; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.openhis.document.domain.DocDefinition; -import com.openhis.document.domain.DocStatistics; -import com.openhis.document.mapper.DocDefinitionMapper; -import com.openhis.document.mapper.DocStatisticsMapper; -import com.openhis.document.service.IDocDefinitionService; -import com.openhis.document.service.IDocStatisticsService; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.document.domain.DocStatistics; +import com.openhis.document.mapper.DocStatisticsMapper; +import com.openhis.document.service.IDocStatisticsService; + @Service -public class DocStatisticsServiceImpl extends ServiceImpl implements IDocStatisticsService { -} +public class DocStatisticsServiceImpl extends ServiceImpl + implements IDocStatisticsService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocTemplateServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocTemplateServiceImpl.java index 57b9fc0f..ec6ea20f 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocTemplateServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/document/service/impl/DocTemplateServiceImpl.java @@ -1,11 +1,12 @@ package com.openhis.document.service.impl; +import org.springframework.stereotype.Service; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.openhis.document.domain.DocTemplate; import com.openhis.document.mapper.DocTemplateMapper; import com.openhis.document.service.IDocTemplateService; -import org.springframework.stereotype.Service; @Service -public class DocTemplateServiceImpl extends ServiceImpl implements IDocTemplateService { -} +public class DocTemplateServiceImpl extends ServiceImpl + implements IDocTemplateService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/domain/PaymentReconciliation.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/domain/PaymentReconciliation.java index a51833b5..847f20d2 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/domain/PaymentReconciliation.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/domain/PaymentReconciliation.java @@ -81,7 +81,7 @@ public class PaymentReconciliation extends HisBaseEntity { private Integer printCount; /** 合同编码 */ - private String contractNo;//2025/05/08李:自付和医保同时付费时只生成一条payment,故此该字段在insert时先为null + private String contractNo;// 2025/05/08李:自付和医保同时付费时只生成一条payment,故此该字段在insert时先为null /** 处方号集合 */ private String chargeItemIds; @@ -96,15 +96,19 @@ public class PaymentReconciliation extends HisBaseEntity { private Long invoiceId; /** 关联账户Id */ - private Long accountId;//2025/05/08李:自付和医保同时付费时只生成一条payment,故此该字段在insert时先为null + private Long accountId;// 2025/05/08李:自付和医保同时付费时只生成一条payment,故此该字段在insert时先为null /** 医保结算id */ - private String ybSettleIds;//记录医保结算id + private String ybSettleIds;// 记录医保结算id /** 医保清算标志 */ +<<<<<<< HEAD private Integer ybClearFlag;//默认值0 未清算 /** 退号/退费原因 */ @TableField("refund_reason") private String refundReason; +======= + private Integer ybClearFlag;// 默认值0 未清算 +>>>>>>> upstream/develop } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/domain/ThreePartPayCallBack.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/domain/ThreePartPayCallBack.java new file mode 100644 index 00000000..a6bd5ffc --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/domain/ThreePartPayCallBack.java @@ -0,0 +1,144 @@ +package com.openhis.financial.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + + +import java.math.BigDecimal; + +/** + * 第三方支付回调实体(下方备注信息以中银支付为模板) + */ +@Data +@TableName("fin_three_part_pay_call_back") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class ThreePartPayCallBack { + + @TableId(type = IdType.ASSIGN_ID) + private BigDecimal id; + + /** + * 响应码:(枚举RespCode)00 表示成功,其它表示失败 + */ + private String respCode; + + /** + * 响应码解释信息(需要Base64解密) + */ + private String respMsg; + + /** + * 交易类型:(枚举TranType) + */ + private String tranType; + + /** + * 交易金额 + */ + private String txnAmt; + + /** + * 支付方式: + */ + private String payType; + + /** + * 终端流水号:终端号系统跟踪号,同请求报文原值返回,客户端收到应答报文需要验证traceNo字段值,需与请求报文值一致,如果不一致则丢包交易失败 + */ + private String traceNo; + + /** + * 交易时间:(yyyyMMddHHmmss) + */ + private String txnTime; + + /** + * 支付订单号:银行返回系统订单号,需要保存该支付交易订单号 + */ + private String tradeNo; + + /** + * 第三方支付订单号 + */ + private String transNo; + + /** + * 商户号 + */ + private String mid; + + /** + * 商户名称 + */ + private String merName; + + /** + * 终端号 + */ + private String tid; + + /** + * 商户系统订单号:同请求一致 + */ + private String merTradeNo; + + /** + * 商户系统退款授权单号:同请求一致 + */ + private String vfTradeNo; + + /** + * 优惠金额 + */ + private String discountAmt; + + /** + * 有效时间:二维码本身的有效时间,是相对时间,单位为秒,以接收方收到报文时间为起始点计时。不同类型的订单以及不同的订单状况会对应不同的默认有效时间和最大有效时间(可以为空) + */ + private String qrValidTime; + + /** + * 二维码信息:主扫支付二维码,以二维码形式显示,手机APP扫二维码码消费 + */ + private String scanCode; + + /** + * 原交易类型:1、订单查询类交易填写原交易类型(被扫交易必填)2、非订单查询填写交易类型与tranType一致(可以为空) + */ + private String orgTranType; + + /** + * 原交易名称:订单查询类交易填写原交易名称,非订单查询填写交易名称(被扫交易必填) + */ + private String orgTxnName; + + /** + * 订单数据:当tranType为F时,payType 值为ZFBA或WEIX时支付宝返回的tradeNo 或者微信返回的prepayId + */ + private String payData; + + /** + * POS机号 + */ + private String posNo; + + /** + * 付款主键ID + */ + private Long paymentId; + + /** + * 前台UI序号 + */ + private Long index; + + /** + * 时间戳(中银建议) + */ + private Long time; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/mapper/ThreePartPayCallBackMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/mapper/ThreePartPayCallBackMapper.java new file mode 100644 index 00000000..288c692e --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/mapper/ThreePartPayCallBackMapper.java @@ -0,0 +1,10 @@ +package com.openhis.financial.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.financial.domain.ClaimResponse; +import com.openhis.financial.domain.ThreePartPayCallBack; +import org.springframework.stereotype.Repository; + +@Repository +public interface ThreePartPayCallBackMapper extends BaseMapper { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PaymentedItemModel.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PaymentedItemModel.java index 99c3e24a..99f420c2 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PaymentedItemModel.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PaymentedItemModel.java @@ -1,8 +1,9 @@ package com.openhis.financial.model; -import com.openhis.administration.domain.ChargeItem; -import lombok.Data; import java.math.BigDecimal; +import java.util.Date; + +import lombok.Data; @Data public class PaymentedItemModel { @@ -21,4 +22,37 @@ public class PaymentedItemModel { /** 总价 */ private Long chargeItemId; + /** 医疗服务所在表 */ + private String serviceTable; + + /** 医疗服务ID */ + private Long serviceId; + + /** 产品所在表 */ + private String productTable; + + /** 产品ID */ + private Long productId; + + /** 开立人ID */ + private Long entererId; + + /** 开立科室 */ + private Long requestingOrgId; + + /** 开立时间 */ + private Date enteredDate; + + /** 数量 */ + private BigDecimal quantityValue; + + /** 单位 */ + private String quantityUnit; + + /** 单价 */ + private BigDecimal unitPrice; + + /** chargeItem定义id */ + private Long definitionId; + } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResult.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResult.java index 6e55c0f2..d0cbe50f 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResult.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/PrePaymentResult.java @@ -1,12 +1,13 @@ package com.openhis.financial.model; -import com.alibaba.fastjson2.annotation.JSONField; -import com.openhis.yb.dto.Clinic2206FundPaymentResult; -import lombok.Data; - import java.math.BigDecimal; import java.util.List; +import com.alibaba.fastjson2.annotation.JSONField; +import com.openhis.yb.dto.Clinic2206FundPaymentResult; + +import lombok.Data; + @Data public class PrePaymentResult { @@ -82,4 +83,6 @@ public class PrePaymentResult { private String busNo; // 挂号采访码 private Long accountId; // 账号ID码 + + private BigDecimal gfRatio;// 学校垫付金额 } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/StudentPaymentItemModel.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/StudentPaymentItemModel.java new file mode 100644 index 00000000..5eb03d1b --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/model/StudentPaymentItemModel.java @@ -0,0 +1,49 @@ +package com.openhis.financial.model; + +import java.math.BigDecimal; + +import lombok.Data; + +@Data +public class StudentPaymentItemModel extends PaymentedItemModel { + + /** + * 医保等级 + */ + private Integer chrgitmLv; + + /** + * 医保分类 + */ + private String ybType; + + /** + * 自付比例 + */ + private BigDecimal selfRatio; + + /** + * 公费一次报销金额 + */ + private BigDecimal oncePrice; + + /** + * 医保折扣部分金额 + */ + private BigDecimal ybRatio; + + /** + * 学校垫付部分金额 + */ + private BigDecimal studentRatio; + + /** + * 自付比例 + */ + private BigDecimal twiceRatio; + + /** + * 公费二次报销金额 + */ + private BigDecimal twicePrice; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/IPaymentReconciliationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/IPaymentReconciliationService.java index 6e4954c5..c13e9b63 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/IPaymentReconciliationService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/IPaymentReconciliationService.java @@ -98,6 +98,14 @@ public interface IPaymentReconciliationService extends IService getListByEncounterId(Long encounterId, PaymentKind paymentKind); + /** * 判断是否已退费 * diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/ThreePartPayCallBackService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/ThreePartPayCallBackService.java new file mode 100644 index 00000000..35138711 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/ThreePartPayCallBackService.java @@ -0,0 +1,7 @@ +package com.openhis.financial.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.financial.domain.ThreePartPayCallBack; + +public interface ThreePartPayCallBackService extends IService { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/PaymentReconciliationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/PaymentReconciliationServiceImpl.java index 3cb23e95..21526634 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/PaymentReconciliationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/PaymentReconciliationServiceImpl.java @@ -1,6 +1,7 @@ package com.openhis.financial.service.impl; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -16,25 +17,41 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.exception.ServiceException; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.SecurityUtils; import com.core.common.utils.StringUtils; +import com.openhis.administration.domain.ChargeItemDefinition; +import com.openhis.administration.domain.DeviceDefinition; +import com.openhis.administration.domain.HealthcareService; +import com.openhis.administration.service.IChargeItemDefinitionService; +import com.openhis.administration.service.IChargeItemService; +import com.openhis.administration.service.IDeviceDefinitionService; +import com.openhis.administration.service.IHealthcareServiceService; +import com.openhis.administration.service.impl.PatientServiceImpl; +import com.openhis.administration.service.impl.PatientStudentServiceImpl; import com.openhis.common.constant.CommonConstants; import com.openhis.common.constant.YbCommonConstants; import com.openhis.common.enums.DelFlag; +import com.openhis.common.enums.ItemType; import com.openhis.common.enums.PaymentKind; import com.openhis.common.enums.PaymentStatus; +import com.openhis.common.enums.ybenums.YbChrgitmLv; import com.openhis.common.enums.ybenums.YbMdtrtCertType; +import com.openhis.common.enums.ybenums.YbMedChrgItmType; import com.openhis.common.enums.ybenums.YbMedType; import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentReconciliation; import com.openhis.financial.mapper.PaymentReconciliationMapper; -import com.openhis.financial.model.PaymentReconciliationAccountDel; -import com.openhis.financial.model.PaymentResult; -import com.openhis.financial.model.PaymentedItemModel; -import com.openhis.financial.model.PrePaymentResult; +import com.openhis.financial.model.*; import com.openhis.financial.service.IContractService; import com.openhis.financial.service.IPaymentReconciliationService; +import com.openhis.medication.domain.MedicationDefinition; +import com.openhis.medication.service.IMedicationDefinitionService; +import com.openhis.nenu.dto.GfTypeRatioDto; +import com.openhis.nenu.service.impl.GfRatioServiceImpl; +import com.openhis.workflow.domain.ActivityDefinition; +import com.openhis.workflow.service.IActivityDefinitionService; import com.openhis.yb.dto.Clinic2206OrderOutput; import com.openhis.yb.dto.ClinicReg2201Output; import com.openhis.yb.dto.PaymentInpatientDto; @@ -57,6 +74,24 @@ public class PaymentReconciliationServiceImpl extends ServiceImpl> collect = paymentedItemList.stream().collect(Collectors.groupingBy(PaymentedItemModel::getMedType)); + if (collect.entrySet().size() > 1) { + throw new ServiceException("医保只接受同种医疗类型结算(普通门诊与慢病等不可以同时结算)!"); + } PrePaymentResult result; for (Map.Entry> medTypeKV : collect.entrySet()) { Clinic2206OrderOutput clinic2206OrderOutput = null; @@ -161,19 +199,108 @@ public class PaymentReconciliationServiceImpl extends ServiceImpl paymentedItemList) { + + // 查比例及分类信息(PaymentedItemModel在chargeItem表中不是一定存在的所以此处改用单独查询) + List allPaymentItemList = getStudentPaymentItemModelList(paymentedItemList); + + // 拟定使用公费医疗的情况下实收金额 + BigDecimal onceReceivedAmount = BigDecimal.ZERO; + for (StudentPaymentItemModel studentPaymentItemModel : allPaymentItemList) { + // 获取折扣比例 + BigDecimal ratio = studentPaymentItemModel.getTwiceRatio() == null ? studentPaymentItemModel.getSelfRatio() + : studentPaymentItemModel.getTwiceRatio(); + + // 计算金额 + onceReceivedAmount = onceReceivedAmount.add(studentPaymentItemModel.getTotalPrice() + .multiply(ratio.divide(new BigDecimal("100"), 6, RoundingMode.HALF_UP))); + } + + // 医保结算 + PrePaymentResult prePaymentResult = + this.studentPreSettleYb(contract, ybMdtrtCertType, busiCardInfo, paymentedItemList); + if (prePaymentResult == null) { + throw new ServiceException("医生开具的收费项未分配对应的医疗类型!"); + } + + BigDecimal psnPartAmt = prePaymentResult.getPsnPartAmt(); + + if (psnPartAmt.compareTo(onceReceivedAmount) > 0) { + prePaymentResult.setGfRatio(psnPartAmt.subtract(onceReceivedAmount)); + prePaymentResult.setPsnCashPay(onceReceivedAmount); + } else { + prePaymentResult.setGfRatio(BigDecimal.ZERO); + } + + return prePaymentResult; + } + + /** + * 学生一次报销 + * + * @param paymentedItemList 收费项 + * @return 预结算结果 + */ + private PrePaymentResult studentSelfPay(List paymentedItemList) { + + List allPaymentItemList = getStudentPaymentItemModelList(paymentedItemList); + + // 拟定使用公费医疗的情况下实收金额 + BigDecimal onceReceivedAmount = BigDecimal.ZERO; + for (StudentPaymentItemModel studentPaymentItemModel : allPaymentItemList) { + // 获取折扣比例 + BigDecimal ratio = studentPaymentItemModel.getTwiceRatio() == null ? studentPaymentItemModel.getSelfRatio() + : studentPaymentItemModel.getTwiceRatio(); + + // 计算金额 + onceReceivedAmount = onceReceivedAmount.add(studentPaymentItemModel.getTotalPrice().multiply(ratio)); + } + + PrePaymentResult prePaymentResult = new PrePaymentResult(); + BigDecimal sumAmount = BigDecimal.ZERO; + for (PaymentedItemModel item : paymentedItemList) { + sumAmount = sumAmount.add(item.getTotalPrice()); + } + prePaymentResult.setMedfeeSumamt(sumAmount); + prePaymentResult.setFulamtOwnpayAmt(sumAmount); + prePaymentResult.setPsnPartAmt(sumAmount); + prePaymentResult.setPsnCashPay(onceReceivedAmount.divide(new BigDecimal("100"), 6, RoundingMode.HALF_UP)); + prePaymentResult.setGfRatio(sumAmount.subtract(prePaymentResult.getPsnCashPay())); + prePaymentResult.setChrgBchno(CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO); + return prePaymentResult; + } + /** * 【门诊结算】 * @@ -189,7 +316,8 @@ public class PaymentReconciliationServiceImpl extends ServiceImpl getListByEncounterId(Long encounterId, PaymentKind paymentKind) { + return baseMapper.selectList(new LambdaQueryWrapper() + .eq(PaymentReconciliation::getEncounterId, encounterId) + .in(PaymentReconciliation::getStatusEnum, PaymentStatus.SUCCESS.getValue(),PaymentStatus.REFUNDING.getValue()) + .eq(PaymentReconciliation::getKindEnum, PaymentKind.HOSPITAL_DEPOSIT.getValue()) + .eq(PaymentReconciliation::getDeleteFlag, DelFlag.NO.getCode())); + } + /** * 判断是否已退费 * @@ -309,4 +452,181 @@ public class PaymentReconciliationServiceImpl extends ServiceImpl getStudentPaymentItemModelList(List paymentedItemList) { + + // 大项比例 + List typeRatioList = gfRatioService.getTypeRatioList(); + Map>> result = typeRatioList.stream().collect( + // 第一次分组:按 ybClass 分组(外层 key 为 ybClass) + Collectors.groupingBy(GfTypeRatioDto::getYbClass, + // 第二次分组:对每个分组的 List 再按 subType 分组(内层 key 为 subType) + Collectors.groupingBy(GfTypeRatioDto::getYbLv))); + + List allPaymentItemList = new ArrayList<>(); + + Map> paymentedItemListByServiceTableMap = + paymentedItemList.stream().collect(Collectors.groupingBy(PaymentedItemModel::getServiceTable)); + + for (Map.Entry> stringListEntry : paymentedItemListByServiceTableMap + .entrySet()) { + + String key = stringListEntry.getKey(); + ItemType itemType; + if (CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(key)) { + itemType = ItemType.MEDICINE; + } else if (CommonConstants.TableName.WOR_SERVICE_REQUEST.equals(key)) { + itemType = ItemType.ACTIVITY; + } else { + throw new ServiceException("除药品和诊疗项目外不存在其他公费项目,请确认!"); + } + List value = stringListEntry.getValue(); + List paymentItemList = gfRatioService.getGfRatioList(itemType, value); + + for (StudentPaymentItemModel studentPaymentItemModel : paymentItemList) { + + // 如果自付比例有值,就continue掉 + if (studentPaymentItemModel.getSelfRatio() != null && studentPaymentItemModel.getTwiceRatio() != null) { + continue; + } + // 查定价分类 + ChargeItemDefinition chargeItemDefinition = + chargeItemDefinitionService.getById(studentPaymentItemModel.getDefinitionId()); + + // 查医保等级 + if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(studentPaymentItemModel.getProductTable())) { + DeviceDefinition deviceDefinition = + deviceDefinitionService.getById(studentPaymentItemModel.getProductId()); + if (deviceDefinition != null && chargeItemDefinition != null) { + // 约定大项目的自付比例获取条件 + YbMedChrgItmType medChrgItmType = YbMedChrgItmType.getByValue(chargeItemDefinition.getYbType()); + if (medChrgItmType == null) { + throw new ServiceException(chargeItemDefinition.getChargeName() + "未配置正确的医保分类!请检查!!!"); + } + YbChrgitmLv chrgitmLv = YbChrgitmLv.getByValue(deviceDefinition.getChrgitmLv()); + if (chrgitmLv == null) { + throw new ServiceException(chargeItemDefinition.getChargeName() + "未配置正确的医保等级!请检查!!!"); + } + List gfTypeRatioDtos = + result.get(chargeItemDefinition.getYbType()).get(chrgitmLv.getCode()); + if (gfTypeRatioDtos == null || gfTypeRatioDtos.isEmpty()) { + throw new ServiceException( + "医保分类:" + medChrgItmType.getInfo() + "医保等级:" + chrgitmLv.getInfo() + "未配置自付比例!请检查!!!"); + } + + studentPaymentItemModel.setSelfRatio(gfTypeRatioDtos.get(0).getSelfRatio()); + studentPaymentItemModel.setTwiceRatio(gfTypeRatioDtos.get(0).getSelfRatio()); + + } + } else if (CommonConstants.TableName.WOR_ACTIVITY_DEFINITION + .equals(studentPaymentItemModel.getProductTable())) { + ActivityDefinition activityDefinition = + activityDefinitionService.getById(studentPaymentItemModel.getProductId()); + if (activityDefinition != null && chargeItemDefinition != null) { + // 约定大项目的自付比例获取条件 + YbMedChrgItmType medChrgItmType = YbMedChrgItmType.getByValue(chargeItemDefinition.getYbType()); + if (medChrgItmType == null) { + throw new ServiceException(chargeItemDefinition.getChargeName() + "未配置正确的医保分类!请检查!!!"); + } + YbChrgitmLv chrgitmLv = YbChrgitmLv.getByValue(activityDefinition.getChrgitmLv()); + if (chrgitmLv == null) { + throw new ServiceException(chargeItemDefinition.getChargeName() + "未配置正确的医保等级!请检查!!!"); + } + List gfTypeRatioDtos = + result.get(chargeItemDefinition.getYbType()).get(chrgitmLv.getCode()); + if (gfTypeRatioDtos == null || gfTypeRatioDtos.isEmpty()) { + throw new ServiceException( + "医保分类:" + medChrgItmType.getInfo() + "医保等级:" + chrgitmLv.getInfo() + "未配置自付比例!请检查!!!"); + } + + studentPaymentItemModel.setSelfRatio(gfTypeRatioDtos.get(0).getSelfRatio()); + studentPaymentItemModel.setTwiceRatio(gfTypeRatioDtos.get(0).getSelfRatio()); + } + } else if (CommonConstants.TableName.MED_MEDICATION_DEFINITION + .equals(studentPaymentItemModel.getProductTable())) { + MedicationDefinition medicationDefinition = + medicationDefinitionService.getById(studentPaymentItemModel.getProductId()); + if (medicationDefinition != null && chargeItemDefinition != null) { + // 约定大项目的自付比例获取条件 + YbMedChrgItmType medChrgItmType = YbMedChrgItmType.getByValue(chargeItemDefinition.getYbType()); + if (medChrgItmType == null) { + throw new ServiceException(chargeItemDefinition.getChargeName() + "未配置正确的医保分类!请检查!!!"); + } + YbChrgitmLv chrgitmLv = YbChrgitmLv.getByValue(medicationDefinition.getChrgitmLv()); + if (chrgitmLv == null) { + throw new ServiceException(chargeItemDefinition.getChargeName() + "未配置正确的医保等级!请检查!!!"); + } + List gfTypeRatioDtos = + result.get(chargeItemDefinition.getYbType()).get(chrgitmLv.getCode()); + if (gfTypeRatioDtos == null || gfTypeRatioDtos.isEmpty()) { + throw new ServiceException( + "医保分类:" + medChrgItmType.getInfo() + "医保等级:" + chrgitmLv.getInfo() + "未配置自付比例!请检查!!!"); + } + + studentPaymentItemModel.setSelfRatio(gfTypeRatioDtos.get(0).getSelfRatio()); + studentPaymentItemModel.setTwiceRatio(gfTypeRatioDtos.get(0).getSelfRatio()); + } + } else { + HealthcareService healthcareService = + healthcareServiceService.getById(studentPaymentItemModel.getServiceId()); + if (healthcareService != null && chargeItemDefinition != null) { + // 约定大项目的自付比例获取条件 医疗服务没有定义医保等级,默认百分百还是直接抛异常? + studentPaymentItemModel.setSelfRatio(new BigDecimal("100")); + studentPaymentItemModel.setTwiceRatio(new BigDecimal("100")); + } + } + allPaymentItemList.addAll(paymentItemList); + } + } + return allPaymentItemList; + } + + /** + * 医保预结算 + * + * @param contract 合同b + * @param ybMdtrtCertType 证件类型 + * @param busiCardInfo 电子密钥 + * @param paymentedItemList 收款明细 + * @return 预结算参数 + */ + private PrePaymentResult studentPreSettleYb(Contract contract, YbMdtrtCertType ybMdtrtCertType, String busiCardInfo, + List paymentedItemList) { + Map> collect = + paymentedItemList.stream().collect(Collectors.groupingBy(PaymentedItemModel::getMedType)); + // 一次医保结算只能支持一种医疗类型的结算 + for (Map.Entry> medTypeKV : collect.entrySet()) { + Clinic2206OrderOutput clinic2206OrderOutput = null; + ClinicReg2201Output reg2201Output = null; + if (!medTypeKV.getKey().equals(YbMedType.GENERAL_OUTPATIENT.getValue()) && "1" + .equals(SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH))) { + // 不是普通门诊就诊类型,补充挂号信息 + reg2201Output = ybManager.createRegWithMedType(contract, ybMdtrtCertType, busiCardInfo, + medTypeKV.getValue().get(0).getEncounterId(), + YbMedType.getByValue(medTypeKV.getValue().get(0).getMedType())); + reg2201Output.setMedType(medTypeKV.getKey());// 2025/06/05慢病挂号后上传2206信息报错,2201返回值没有medType,此处更正赋值 + } else { + // 从数据库里取reg2201 + reg2201Output = ybManager.getClinicRegByEncounterId(medTypeKV.getValue().get(0).getEncounterId()); + } + if (reg2201Output == null) { + throw new ServiceException("未查询到医保挂号信息"); + } + // 调用预结算 + clinic2206OrderOutput = + ybManager.preSettle(contract, medTypeKV.getValue().get(0).getEncounterId(), ybMdtrtCertType, + busiCardInfo, reg2201Output, "01", medTypeKV.getValue(), YbMedType.getByValue(medTypeKV.getKey())); + PrePaymentResult prePaymentResult = new PrePaymentResult(); + BeanUtils.copyProperties(clinic2206OrderOutput, prePaymentResult); + return prePaymentResult; + } + return null; + } + } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/ThreePartPayCallBackServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/ThreePartPayCallBackServiceImpl.java new file mode 100644 index 00000000..c300feb2 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/financial/service/impl/ThreePartPayCallBackServiceImpl.java @@ -0,0 +1,11 @@ +package com.openhis.financial.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.financial.domain.ThreePartPayCallBack; +import com.openhis.financial.mapper.ThreePartPayCallBackMapper; +import com.openhis.financial.service.ThreePartPayCallBackService; +import org.springframework.stereotype.Service; + +@Service +public class ThreePartPayCallBackServiceImpl extends ServiceImpl implements ThreePartPayCallBackService { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDefinition.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDefinition.java index 19a08b18..09d0ac17 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDefinition.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDefinition.java @@ -168,4 +168,9 @@ public class MedicationDefinition extends HisBaseEntity { /** 处方标志 */ private Integer rxFlag; + /** + * 用药说明 + */ + private String dosageInstruction; + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDetail.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDetail.java index 6f51b88c..b64c7177 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDetail.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDetail.java @@ -215,4 +215,9 @@ public class MedicationDetail extends HisBaseEntity { /** 最大库存警戒数量(常规单位) */ private BigDecimal itemMaxQuantity; + /** + * 用药说明 + */ + private String dosageInstruction; + } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDispense.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDispense.java index 6361ae29..1bedafaf 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDispense.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationDispense.java @@ -6,8 +6,8 @@ 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; + import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -126,4 +126,7 @@ public class MedicationDispense extends HisBaseEntity { /** 执行id */ private Long procedureId; + + /** 汇总编号 */ + private String summaryNo; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java index 2248a82d..9a490316 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/domain/MedicationRequest.java @@ -239,4 +239,14 @@ public class MedicationRequest extends HisBaseEntity { /** 请求基于什么的ID */ private Long basedOnId; + + /** + * 用药说明 + */ + private String dosageInstruction; + + /** + * 生成来源 + */ + private Integer generateSourceEnum; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/dto/AdjustPriceMedListDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/dto/AdjustPriceMedListDto.java new file mode 100644 index 00000000..4e544660 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/dto/AdjustPriceMedListDto.java @@ -0,0 +1,78 @@ +package com.openhis.medication.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @ClassName AdjustPriceMedListDto + * @Description TODO + * @Author raymond + * @Date 2025/10/20 09:58 + * @Version 1.0 + **/ +@Data +public class AdjustPriceMedListDto { + + /** + * 表主表ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long targetId; + /** + * 名称 + */ + private String name; + /** + * 规格 + */ + private String volume; + /** + * 原进货价 + */ + private BigDecimal originBuyingPrice; + /** + * 原零售价 + */ + private BigDecimal originRetailPrice; + /** + * 新进货价格 + */ + private BigDecimal newBuyingPrice; + /** + * 新零售价 + */ + private BigDecimal newRetailPrice; + + /** + * 调价原因 + */ + private String reason; + /** + * 项目编码 + */ + private String busNo; + /** + * 科室名称 + */ + private String orgName; + /** + * 药品单位 + */ + private String unitCode; + /** + * 影响库存总数 + */ + private BigDecimal totalQuantity; + /** + * 进价盈负差 + */ + private BigDecimal buyingDifferencePrice; + /** + * 售价盈负差 + */ + private BigDecimal retailDifferencePrice; + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/mapper/MedicationMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/mapper/MedicationMapper.java index 138d1b74..462f1417 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/mapper/MedicationMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/mapper/MedicationMapper.java @@ -3,6 +3,8 @@ package com.openhis.medication.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.medication.domain.Medication; import com.openhis.medication.domain.MedicationDetail; +import com.openhis.medication.dto.AdjustPriceMedListDto; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -22,4 +24,12 @@ public interface MedicationMapper extends BaseMapper { * @return 药品详细信息列表 */ List selectDetailList(); + /** + * Desc: 根据关键字查询 如果关键字为空,查询10条,否则返回查询到的所有 + * @param keyWord + * @Author raymond + * @Date 10:17 2025/10/20 + * @return java.util.List + **/ + List searchMedListByKeyWord(@Param("keyWord") String keyWord); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationDispenseService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationDispenseService.java index 3937ef98..b578626e 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationDispenseService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationDispenseService.java @@ -1,9 +1,8 @@ package com.openhis.medication.service; +import java.util.Date; import java.util.List; -import org.apache.ibatis.annotations.Param; - import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.medication.domain.MedicationDispense; import com.openhis.medication.domain.MedicationRequest; @@ -21,16 +20,19 @@ public interface IMedicationDispenseService extends IService * * @param medicationRequest 药品请求信息 * @param dbOpType db操作类型 + * @return 发放id */ - void handleMedicationDispense(MedicationRequest medicationRequest, String dbOpType); + Long handleMedicationDispense(MedicationRequest medicationRequest, String dbOpType); /** * 医嘱执行生成药品发放,状态为待配药 * * @param medicationRequest 药品医嘱请求 * @param procedureId 执行记录id + * @param plannedDispenseTime 预定发药时间 + * @return 发放id */ - void generateMedicationDispense(MedicationRequest medicationRequest,Long procedureId); + Long generateMedicationDispense(MedicationRequest medicationRequest, Long procedureId, Date plannedDispenseTime); /** * 删除药品发放信息 @@ -77,20 +79,13 @@ public interface IMedicationDispenseService extends IService */ List selectByRequestIdList(List requestIdList); - /** - * 通过id获取药品发放信息 - * - * @param idList 请求id - * @return 发放信息 - */ - List selectByIdList(@Param("idList") List idList); - /** * 更新药品状态:已汇总 * * @param medDispenseId 发放id列表 + * @param busNo 汇总单号 */ - void updateDispenseStatusSummarized(List medDispenseId); + void updateDispenseStatusSummarized(List medDispenseId, String busNo); /** * 通过执行id获取药品发放信息 @@ -99,4 +94,28 @@ public interface IMedicationDispenseService extends IService * @return 发放信息 */ List getMedDispenseByProcedureId(List procedureIdList); + + /** + * 取消汇总 + * + * @param summaryNoList 汇总单号列表 + * @return 取消结果 + */ + boolean cancelMedicationSummary(List summaryNoList); + + /** + * 更新药品发放状态 + * + * @param dispenseIdList 发放id列表 + * @param dispenseStatus 发放状态 + */ + void updateDispenseStatus(List dispenseIdList, Integer dispenseStatus); + + /** + * 通过汇总单号获取药品发放信息 + * + * @param summaryNoList 汇总单号列表 + * @return 发放信息 + */ + List getMedDispenseBySummaryNo(List summaryNoList); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationRequestService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationRequestService.java index 6359b848..ccee7f7a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationRequestService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationRequestService.java @@ -3,8 +3,6 @@ package com.openhis.medication.service; import java.util.Date; import java.util.List; -import org.apache.ibatis.annotations.Param; - import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.medication.domain.MedicationRequest; @@ -35,10 +33,19 @@ public interface IMedicationRequestService extends IService { void updateDraftStatusBatch(List requestIdList, Long practitionerId, Date checkDate); /** - * 通过id获取药品请求信息 + * 更新请求状态:取消 * - * @param idList 请求id - * @return 发放信息 + * @param requestIdList 药品请求id列表 + * @param practitionerId 校对人 + * @param checkDate 校对时间 */ - List selectByIdList(@Param("idList") List idList); + void updateCancelledStatusBatch(List requestIdList, Long practitionerId, Date checkDate); + + /** + * 根据药品id获取药品请求 + * + * @param medicationId 药品id + * @return 药品请求列表 + */ + List getMedRequestByMedicationId(Long medicationId); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationService.java index b3ed6cc1..b5d2e934 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/IMedicationService.java @@ -5,6 +5,8 @@ import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.medication.domain.Medication; import com.openhis.medication.domain.MedicationDetail; +import com.openhis.medication.dto.AdjustPriceMedListDto; +import org.apache.ibatis.annotations.Param; /** * 药品基本信息管理Service接口 @@ -31,5 +33,12 @@ public interface IMedicationService extends IService { // 新增药品目录 boolean addMedication(MedicationDetail medicationDetail); - + /** + * Desc: 根据关键字查询 如果关键字为空,查询10条,否则返回查询到的所有 + * @param keyWord + * @Author raymond + * @Date 10:18 2025/10/20 + * @return java.util.List + **/ + List searchMedListByKeyWord(String keyWord); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java index f801953c..c080d451 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java @@ -8,7 +8,6 @@ import java.util.List; import javax.annotation.Resource; -import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -43,9 +42,10 @@ public class MedicationDispenseServiceImpl extends ServiceImpl() .eq(MedicationDispense::getMedReqId, medicationRequest.getId())); } + + return medicationDispense.getId(); } /** * 医嘱执行生成药品发放,状态为待配药 - * + * * @param medicationRequest 药品医嘱请求 * @param procedureId 执行记录id + * @param plannedDispenseTime 预定发药时间 + * @return 发放id */ @Override - public void generateMedicationDispense(MedicationRequest medicationRequest, Long procedureId) { + public Long generateMedicationDispense(MedicationRequest medicationRequest, Long procedureId, + Date plannedDispenseTime) { MedicationDispense medicationDispense = new MedicationDispense(); // 执行id medicationDispense.setProcedureId(procedureId); + // 预定发药时间 + medicationDispense.setPlannedDispenseTime(plannedDispenseTime); // 药品发放id medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4)); // 药品发放状态 @@ -166,6 +173,8 @@ public class MedicationDispenseServiceImpl extends ServiceImpl selectByIdList(@Param("idList") List idList) { - return baseMapper.selectList(new LambdaQueryWrapper().in(MedicationDispense::getId, idList) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); - } - /** * 更新药品状态:已汇总 * * @param medDispenseId 发放id列表 */ @Override - public void updateDispenseStatusSummarized(List medDispenseId) { + public void updateDispenseStatusSummarized(List medDispenseId, String busNo) { baseMapper.update(null, new LambdaUpdateWrapper() .set(MedicationDispense::getStatusEnum, DispenseStatus.SUMMARIZED.getValue()) .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) - .in(MedicationDispense::getId, medDispenseId)); + .set(MedicationDispense::getSummaryNo, busNo).in(MedicationDispense::getId, medDispenseId) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); } /** @@ -285,4 +283,48 @@ public class MedicationDispenseServiceImpl extends ServiceImpl().in(MedicationDispense::getProcedureId, procedureIdList) .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); } + + /** + * 取消汇总 + * + * @param summaryNoList 汇总单号 + * @return 取消结果 + */ + @Override + public boolean cancelMedicationSummary(List summaryNoList) { + int result = baseMapper.update(null, + new LambdaUpdateWrapper() + .set(MedicationDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue()) + .set(MedicationDispense::getSummaryNo, null).in(MedicationDispense::getSummaryNo, summaryNoList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + return result > 0; + } + + /** + * 更新药品发放状态 + * + * @param dispenseIdList 发放id列表 + * @param dispenseStatus 发放状态 + */ + @Override + public void updateDispenseStatus(List dispenseIdList, Integer dispenseStatus) { + baseMapper.update(null, + new LambdaUpdateWrapper().set(MedicationDispense::getStatusEnum, dispenseStatus) + .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) + .in(MedicationDispense::getId, dispenseIdList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + } + + /** + * 通过汇总单号获取药品发放信息 + * + * @param summaryNoList 汇总单号列表 + * @return 发放信息 + */ + @Override + public List getMedDispenseBySummaryNo(List summaryNoList) { + return baseMapper + .selectList(new LambdaQueryWrapper().in(MedicationDispense::getSummaryNo, summaryNoList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationRequestServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationRequestServiceImpl.java index 4e026bf3..1930ba28 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationRequestServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationRequestServiceImpl.java @@ -3,7 +3,6 @@ package com.openhis.medication.service.impl; import java.util.Date; import java.util.List; -import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -60,15 +59,36 @@ public class MedicationRequestServiceImpl extends ServiceImpl selectByIdList(@Param("idList") List idList) { - return baseMapper.selectList(new LambdaQueryWrapper().in(MedicationRequest::getId, idList) - .eq(MedicationRequest::getDeleteFlag, DelFlag.NO.getCode())); + public void updateCancelledStatusBatch(List requestIdList, Long practitionerId, Date checkDate) { + LambdaUpdateWrapper updateWrapper = + new LambdaUpdateWrapper().in(MedicationRequest::getId, requestIdList) + .set(MedicationRequest::getStatusEnum, RequestStatus.CANCELLED.getValue()); + if (practitionerId != null) { + updateWrapper.set(MedicationRequest::getPerformerCheckId, practitionerId); + } + if (checkDate != null) { + updateWrapper.set(MedicationRequest::getCheckTime, checkDate); + } + baseMapper.update(null, updateWrapper); } + /** + * 根据药品id获取药品请求 + * + * @param medicationId 药品id + * @return 药品请求列表 + */ + @Override + public List getMedRequestByMedicationId(Long medicationId) { + return baseMapper + .selectList(new LambdaQueryWrapper().eq(MedicationRequest::getMedicationId, medicationId) + .eq(MedicationRequest::getDeleteFlag, DelFlag.NO.getCode())); + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationServiceImpl.java index 8ecd538a..e8516f81 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationServiceImpl.java @@ -2,6 +2,9 @@ package com.openhis.medication.service.impl; import java.util.List; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.medication.dto.AdjustPriceMedListDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -60,7 +63,7 @@ public class MedicationServiceImpl extends ServiceImpl searchMedListByKeyWord(String keyWord) { + return this.medicationMapper.searchMedListByKeyWord(keyWord); + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/GfRatio.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/GfRatio.java new file mode 100644 index 00000000..f6f33ab7 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/GfRatio.java @@ -0,0 +1,58 @@ +package com.openhis.nenu.domain; + +import java.math.BigDecimal; +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; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗自付比例管理表Entity实体 + * + * @author system + * @date 2025-02-20 + */ +@Data +@TableName("nenu_gf_ratio") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfRatio extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 比例类型(1大项比例2单项比例) */ + private Integer ratioType; + + /** 公费项目分类(1药品2诊疗) */ + private Integer itemType; + + /** 医保分项 */ + private String ybClass; + + /** 医保等级 */ + private String ybLv; + + /** 自付比例 */ + private BigDecimal selfRatio; + + /** 二次报销的自付比例 */ + private BigDecimal twiceRatio; + + /** 开始时间 */ + private Date startDate; + + /** 结束时间 */ + private Date endDate; + + /** 表id */ + private Long definitionId; + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/GfRatioApplication.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/GfRatioApplication.java new file mode 100644 index 00000000..7784f2c0 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/GfRatioApplication.java @@ -0,0 +1,106 @@ +package com.openhis.nenu.domain; + +import java.math.BigDecimal; +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; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗自付比例调整申请表Entity实体 + * + * @author system + * @date 2025-02-20 + */ +@Data +@TableName("nenu_gf_ratio_application") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfRatioApplication extends HisBaseEntity { + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + /** 申请编号 */ + private String busNo; + + /** 公费项目分类(1药品2诊疗) */ + private Integer itemType; + + /** 医保分项 */ + private String ybClass; + + /** 医保等级 */ + private String ybLv; + + /** 申请比例 */ + private BigDecimal applicationRatio; + + /** 二次报销的自付比例 */ + private BigDecimal twiceRatio; + + /** 开始时间 */ + private Date startDate; + + /** 结束时间 */ + private Date endDate; + + /** 申请状态(0处理中1通过2驳回3取消) */ + private Integer applicationStatus; + + /** 申请人 */ + private String applicant; + + /** 申请时间 */ + private Date applicationTime; + + /** 申请原因 */ + private String applicationReason; + + /** 测算盈亏负责人 */ + private String initialApprover; + + /** 测算通过or驳回(0处理中1通过2驳回) */ + private Integer initialApprovalResult; + + /** 测算时间 */ + private Date initialApprovalTime; + + /** 测算意见 */ + private String initialApprovalOpinion; + + /** 财务科负责人 */ + private String financeApprover; + + /** 财务科通过or驳回(0处理中1通过2驳回) */ + private Integer financeApprovalResult; + + /** 报批时间 */ + private Date financeApprovalTime; + + /** 报批意见 */ + private String financeApprovalOpinion; + + /** 会议结果录入人 */ + private String finalRecorder; + + /** 会议通过or驳回(0处理中1通过2驳回) */ + private Integer finalApprovalResult; + + /** 录入时间 */ + private Date finalRecordTime; + + /** 录入意见 */ + private String finalApprovalOpinion; + + /** 表id */ + private Long definitionId; + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/TransactionResponse.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/TransactionResponse.java new file mode 100644 index 00000000..878a746b --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/domain/TransactionResponse.java @@ -0,0 +1,189 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.nenu.domain; + +import java.math.BigDecimal; + +import org.hibernate.validator.constraints.Length; + +import com.alibaba.fastjson.annotation.JSONField; +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; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * BPC返回对象 + * + * @author SunJQ + * @date 2025-08-15 + */ +@Data +@TableName("nenu_transaction_response") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class TransactionResponse extends HisBaseEntity { + + @TableId(type = IdType.ASSIGN_ID) + private BigDecimal id; + + /** + * 响应码:(枚举RespCode)00 表示成功,其它表示失败 + */ + @Length(max = 2) + @JSONField(name = "respCode") + private String respCode; + + /** + * 响应码解释信息(需要Base64解密) + */ + @Length(max = 64) + @JSONField(name = "respMsg") + private String respMsg; + + /** + * 交易类型:(枚举TranType) + */ + @Length(max = 1) + @JSONField(name = "tranType") + private String tranType; + + /** + * 交易金额:以分为单位的交易金额(订单总金额,同请求金额一致) + */ + @Length(max = 12) + @JSONField(name = "txnAmt") + private String txnAmt; + + /** + * 支付方式:(枚举PayType) + */ + @Length(max = 4) + @JSONField(name = "payType") + private String payType; + + /** + * 终端流水号:终端号系统跟踪号,同请求报文原值返回,客户端收到应答报文需要验证traceNo字段值,需与请求报文值一致,如果不一致则丢包交易失败 + */ + @Length(max = 6) + @JSONField(name = "traceNo") + private String traceNo; + + /** + * 交易时间:(yyyyMMddHHmmss) + */ + @Length(max = 14) + @JSONField(name = "txnTime") + private String txnTime; + + /** + * 支付订单号:银行返回系统订单号,需要保存该支付交易订单号 + */ + @Length(max = 64) + @JSONField(name = "tradeNo") + private String tradeNo; + + /** + * 第三方支付订单号 + */ + @Length(max = 64) + @JSONField(name = "transNo") + private String transNo; + + /** + * 商户号 + */ + @Length(max = 15) + @JSONField(name = "mid") + private String mid; + + /** + * 商户名称 + */ + @Length(max = 64) + @JSONField(name = "merName") + private String merName; + + /** + * 终端号 + */ + @Length(max = 8) + @JSONField(name = "tid") + private String tid; + + /** + * 商户系统订单号:同请求一致 + */ + @Length(max = 64) + @JSONField(name = "merTradeNo") + private String merTradeNo; + + /** + * 商户系统退款授权单号:同请求一致 + */ + @Length(max = 64) + @JSONField(name = "vfTradeNo") + private String vfTradeNo; + + /** + * 优惠金额 + */ + @Length(max = 12) + @JSONField(name = "discountAmt") + private String discountAmt; + + /** + * 有效时间:二维码本身的有效时间,是相对时间,单位为秒,以接收方收到报文时间为起始点计时。不同类型的订单以及不同的订单状况会对应不同的默认有效时间和最大有效时间(可以为空) + */ + @Length(max = 8) + @JSONField(name = "qrValidTime") + private String qrValidTime; + + /** + * 二维码信息:主扫支付二维码,以二维码形式显示,手机APP扫二维码码消费 + */ + @Length(max = 128) + @JSONField(name = "scanCode") + private String scanCode; + + /** + * 原交易类型:1、订单查询类交易填写原交易类型(被扫交易必填)2、非订单查询填写交易类型与tranType一致(可以为空) + */ + @Length(max = 1) + @JSONField(name = "orgTranType") + private String orgTranType; + + /** + * 原交易名称:订单查询类交易填写原交易名称,非订单查询填写交易名称(被扫交易必填) + */ + @Length(max = 30) + @JSONField(name = "orgTxnName") + private String orgTxnName; + + /** + * 订单数据:当tranType为F时,payType 值为ZFBA或WEIX时支付宝返回的tradeNo 或者微信返回的prepayId + */ + @Length(max = 64) + @JSONField(name = "payData") + private String payData; + + /** + * 付款主键ID + */ + private Long paymentId; + + /** + * 前台UI序号 + */ + private Long index; + + /** + * 时间戳(中银建议) + */ + private Long time; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/dto/GfTypeRatioDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/dto/GfTypeRatioDto.java new file mode 100644 index 00000000..ec38a76a --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/dto/GfTypeRatioDto.java @@ -0,0 +1,34 @@ +package com.openhis.nenu.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 公费医疗-大项比例Dto + * + * @author Thanking + * @date 2025-10-24 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class GfTypeRatioDto { + + /** 医保分项 */ + private String ybClass; + + /** 医保分项名称 */ + private String ybClassName; + + /** 医保等级 */ + private String ybLv; + + /** 医保等级名称 */ + private String ybLvName; + + /** 自付比例 */ + private BigDecimal selfRatio; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/GfRatioApplicationMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/GfRatioApplicationMapper.java new file mode 100644 index 00000000..d0006d71 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/GfRatioApplicationMapper.java @@ -0,0 +1,17 @@ +package com.openhis.nenu.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.nenu.domain.GfRatioApplication; + +/** + * 公费医疗自付比例调整申请表Mapper接口 + * + * @author system + * @date 2025-02-20 + */ +@Repository +public interface GfRatioApplicationMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/GfRatioMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/GfRatioMapper.java new file mode 100644 index 00000000..7f41ad8f --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/GfRatioMapper.java @@ -0,0 +1,17 @@ +package com.openhis.nenu.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.nenu.domain.GfRatio; + +/** + * 公费医疗自付比例管理表Mapper接口 + * + * @author system + * @date 2025-02-20 + */ +@Repository +public interface GfRatioMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/TransactionResponseMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/TransactionResponseMapper.java new file mode 100644 index 00000000..2ac30faa --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/mapper/TransactionResponseMapper.java @@ -0,0 +1,18 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.nenu.mapper; + +import org.springframework.stereotype.Repository; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.nenu.domain.TransactionResponse; + +/** + * 中银交易记录Mapper + * + * @author SunJQ + * @date 2025-10-28 + */ +@Repository +public interface TransactionResponseMapper extends BaseMapper {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/IGfRatioApplicationService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/IGfRatioApplicationService.java new file mode 100644 index 00000000..554ced94 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/IGfRatioApplicationService.java @@ -0,0 +1,14 @@ +package com.openhis.nenu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.nenu.domain.GfRatioApplication; + +/** + * 公费医疗自付比例调整申请表Service接口 + * + * @author system + * @date 2025-02-20 + */ +public interface IGfRatioApplicationService extends IService { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/IGfRatioService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/IGfRatioService.java new file mode 100644 index 00000000..27eeec2c --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/IGfRatioService.java @@ -0,0 +1,23 @@ +package com.openhis.nenu.service; + +import java.util.List; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.nenu.domain.GfRatio; +import com.openhis.nenu.dto.GfTypeRatioDto; + +/** + * 公费医疗自付比例管理表Service接口 + * + * @author system + * @date 2025-02-20 + */ +public interface IGfRatioService extends IService { + + /** + * 查询大项比例列表 + * + * @return 大项比例列表 + */ + List getTypeRatioList(); +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/ITransactionResponseService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/ITransactionResponseService.java new file mode 100644 index 00000000..e3e2287a --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/ITransactionResponseService.java @@ -0,0 +1,16 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.nenu.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.nenu.domain.TransactionResponse; + +/** + * 中银交易记录Service + * + * @author SunJQ + * @date 2025-10-28 + */ + +public interface ITransactionResponseService extends IService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/GfRatioApplicationServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/GfRatioApplicationServiceImpl.java new file mode 100644 index 00000000..182877af --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/GfRatioApplicationServiceImpl.java @@ -0,0 +1,20 @@ +package com.openhis.nenu.service.impl; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.nenu.domain.GfRatioApplication; +import com.openhis.nenu.mapper.GfRatioApplicationMapper; +import com.openhis.nenu.service.IGfRatioApplicationService; + +/** + * 公费医疗自付比例调整申请表Service业务层处理 + * + * @author system + * @date 2025-02-20 + */ +@Service +public class GfRatioApplicationServiceImpl extends ServiceImpl + implements IGfRatioApplicationService { + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/GfRatioServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/GfRatioServiceImpl.java new file mode 100644 index 00000000..7628cc7d --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/GfRatioServiceImpl.java @@ -0,0 +1,121 @@ +package com.openhis.nenu.service.impl; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.common.enums.DeleteFlag; +import com.openhis.common.enums.DelFlag; +import com.openhis.common.enums.GfRatioType; +import com.openhis.common.enums.ItemType; +import com.openhis.common.enums.ybenums.YbChrgitmLv; +import com.openhis.common.enums.ybenums.YbMedChrgItmType; +import com.openhis.financial.model.PaymentedItemModel; +import com.openhis.financial.model.StudentPaymentItemModel; +import com.openhis.nenu.domain.GfRatio; +import com.openhis.nenu.dto.GfTypeRatioDto; +import com.openhis.nenu.mapper.GfRatioMapper; +import com.openhis.nenu.service.IGfRatioService; + +/** + * 公费医疗自付比例管理表Service业务层处理 + * + * @author system + * @date 2025-02-20 + */ +@Service +public class GfRatioServiceImpl extends ServiceImpl implements IGfRatioService { + + /** + * 查询自付比例(按照小项查询自付比例,如果没有的话,返回值不一定会有自付比例,还要查大项) + * + * @param itemType + * @param paymentItemList + * @return + */ + public List getGfRatioList(ItemType itemType, List paymentItemList) { + + ArrayList list = new ArrayList<>(); + + List serviceIdList = + paymentItemList.stream().map(PaymentedItemModel::getServiceId).collect(Collectors.toList()); + + Date date = new Date(); + // 查询自付比例 + List gfRatios = + baseMapper.selectList(new LambdaQueryWrapper().in(GfRatio::getDefinitionId, serviceIdList) + .eq(GfRatio::getDeleteFlag, DelFlag.NO.getCode()).eq(GfRatio::getItemType, itemType.getValue()) + .ge(GfRatio::getStartDate, date).le(GfRatio::getEndDate, date)); + + Map> gfRatiosMap = + gfRatios.stream().collect(Collectors.groupingBy(GfRatio::getDefinitionId)); + + StudentPaymentItemModel studentPaymentItemModel; + for (PaymentedItemModel paymentedItemModel : paymentItemList) { + // copy字段 + studentPaymentItemModel = new StudentPaymentItemModel(); + BeanUtils.copyProperties(paymentedItemModel, studentPaymentItemModel); + + List gfRatiosList = gfRatiosMap.get(paymentedItemModel.getServiceId()); + if (gfRatiosList != null && !gfRatiosList.isEmpty()) { + // 赋值 + studentPaymentItemModel.setSelfRatio(gfRatiosList.get(0).getSelfRatio()); + studentPaymentItemModel.setTwiceRatio(gfRatiosList.get(0).getTwiceRatio()); + + } + list.add(studentPaymentItemModel); + } + + return list; + } + + /** + * 查询大项比例列表 + * + * @return 大项比例列表 + */ + @Override + public List getTypeRatioList() { + // 查询DB中的所有大项比例 + List gfRatioList = + this.list(new LambdaQueryWrapper().eq(GfRatio::getRatioType, GfRatioType.TYPE_RATIO.getValue()) + .eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + // 做成医保分项+医保等级拼接的Map + Map gfRatioMap = + gfRatioList.stream().collect(Collectors.toMap(e -> e.getYbClass() + e.getYbLv(), Function.identity())); + List gfTypeRatioDtoList = new ArrayList<>(); + // 遍历所有医疗收费项目类别 + for (YbMedChrgItmType ybMedChrgItmType : YbMedChrgItmType.values()) { + // 甲类 + GfTypeRatioDto gfTypeRatioDtoA = + new GfTypeRatioDto().setYbClass(ybMedChrgItmType.getValue()).setYbClassName(ybMedChrgItmType.getInfo()) + .setYbLv(YbChrgitmLv.CATEGORY_A.getCode()).setYbLvName(YbChrgitmLv.CATEGORY_A.getInfo()); + GfRatio gfRatioA = gfRatioMap.get(ybMedChrgItmType.getValue() + YbChrgitmLv.CATEGORY_A.getCode()); + if (gfRatioA != null) { + // DB存在则取DB的值 + gfTypeRatioDtoA.setSelfRatio(gfRatioA.getSelfRatio()); + } + gfTypeRatioDtoList.add(gfTypeRatioDtoA); + // 乙类 + GfTypeRatioDto gfTypeRatioDtoB = + new GfTypeRatioDto().setYbClass(ybMedChrgItmType.getValue()).setYbClassName(ybMedChrgItmType.getInfo()) + .setYbLv(YbChrgitmLv.CATEGORY_B.getCode()).setYbLvName(YbChrgitmLv.CATEGORY_B.getInfo()); + GfRatio gfRatioB = gfRatioMap.get(ybMedChrgItmType.getValue() + YbChrgitmLv.CATEGORY_B.getCode()); + if (gfRatioB != null) { + // DB存在则取DB的值 + gfTypeRatioDtoB.setSelfRatio(gfRatioB.getSelfRatio()); + } + gfTypeRatioDtoList.add(gfTypeRatioDtoB); + } + // 返回列表 + return gfTypeRatioDtoList; + } +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/TransactionResponseServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/TransactionResponseServiceImpl.java new file mode 100644 index 00000000..f0bb93de --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/nenu/service/impl/TransactionResponseServiceImpl.java @@ -0,0 +1,21 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.nenu.service.impl; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.nenu.domain.TransactionResponse; +import com.openhis.nenu.mapper.TransactionResponseMapper; +import com.openhis.nenu.service.ITransactionResponseService; + +/** + * 中银交易记录Service + * + * @author SunJQ + * @date 2025-10-28 + */ +@Service +public class TransactionResponseServiceImpl extends ServiceImpl + implements ITransactionResponseService {} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackageDetail.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackageDetail.java index 75eff0fa..dd08ce91 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackageDetail.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/template/domain/OrdersGroupPackageDetail.java @@ -46,4 +46,25 @@ public class OrdersGroupPackageDetail extends HisBaseEntity { */ private String unitCode; + /** 单次剂量 */ + private BigDecimal dose; + + /** 用药频次 */ + private String rateCode; + + /** 用药天数 */ + private Integer dispensePerDuration; + + /** 给药途径 */ + private String methodCode; + + /** + * 小单位单次剂量 + */ + private BigDecimal doseQuantity; + + /** + * 组号 + */ + private Long groupId; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceRequest.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceRequest.java index 1047ca14..fa935a0c 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceRequest.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/DeviceRequest.java @@ -170,4 +170,9 @@ public class DeviceRequest extends HisBaseEntity { /** 请求基于什么的ID */ private Long basedOnId; + + /** + * 生成来源 + */ + private Integer generateSourceEnum; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/InventoryItem.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/InventoryItem.java index a172dd5b..c3f158e9 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/InventoryItem.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/InventoryItem.java @@ -89,9 +89,6 @@ public class InventoryItem extends HisBaseEntity { /** 追溯码包装层级 */ private Integer packagingLevels; - /** 采购单价(包装单位) */ - private BigDecimal price; - public InventoryItem() { // 库存状态:启用 this.inventoryStatusEnum = PublicationStatus.ACTIVE.getValue(); diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/ServiceRequest.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/ServiceRequest.java index 39b62958..25ee169f 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/ServiceRequest.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/domain/ServiceRequest.java @@ -163,4 +163,9 @@ public class ServiceRequest extends HisBaseEntity { */ private Long parentId; + /** + * 生成来源 + */ + private Integer generateSourceEnum; + } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/ActivityDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/ActivityDto.java new file mode 100644 index 00000000..124aa548 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/ActivityDto.java @@ -0,0 +1,23 @@ +package com.openhis.workflow.dto; + +import lombok.Data; + +/** + * @ClassName ActivityDto + * @Description TODO + * @Author raymond + * @Date 2025/10/18 11:31 + * @Version 1.0 + **/ +@Data +public class ActivityDto { + + private Long itemId; + + /** 编码 */ + private String busNo; + + /** 项目名称 */ + private String name; + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/AdjustPriceDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/AdjustPriceDto.java new file mode 100644 index 00000000..20ab0b3b --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/AdjustPriceDto.java @@ -0,0 +1,40 @@ +package com.openhis.workflow.dto; + +import java.math.BigDecimal; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @ClassName AdjustPriceDto + * @Description TODO + * @Author raymond + * @Date 2025/10/16 21:37 + * @Version 1.0 + **/ +@Data +@Accessors(chain = true) +public class AdjustPriceDto { + /** + * 货品ID + */ + private Long itemId; + /** + * 剩余库存总数量 + */ + private BigDecimal totalCount; + /** + * 表名 + */ + private String itemTable; + /** + * 入库批次号 + */ + private String lotNumber; + /** + * 仓库ID 如 药房一,药房二的ID + */ + private Long locationId; + + private String unitCode; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/ChangePriceDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/ChangePriceDto.java new file mode 100644 index 00000000..122eba03 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/dto/ChangePriceDto.java @@ -0,0 +1,31 @@ +package com.openhis.workflow.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @ClassName ChangePriceDto + * @Description TODO + * @Author raymond + * @Date 2025/10/19 10:02 + * @Version 1.0 + **/ +@Data +public class ChangePriceDto { + + private Long chargeId; + + private Long itemId; + + private BigDecimal newPrice; + + private String reason; + + private BigDecimal quantity; + + private Long supplyRequestId; + + private BigDecimal retailPrice; + private String itemTable; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/ActivityDefinitionMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/ActivityDefinitionMapper.java index b709cbbc..95a69686 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/ActivityDefinitionMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/ActivityDefinitionMapper.java @@ -1,10 +1,14 @@ package com.openhis.workflow.mapper; +import java.util.List; + import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.medication.dto.AdjustPriceMedListDto; import com.openhis.workflow.domain.ActivityDefinition; +import com.openhis.workflow.dto.ActivityDto; /** * 诊疗定义管理Mapper接口 @@ -23,5 +27,21 @@ public interface ActivityDefinitionMapper extends BaseMapper */ Long getAppointActivityDefinitionId(@Param("activityName") String activityName, @Param("status") Integer status); + /** + * Desc: 根据 项目id数组 加载 诊疗数据集合 + * @param itemIds + * @Author raymond + * @Date 12:20 2025/10/18 + * @return java.util.List + **/ + List searchActivityDefinitionByIds(@Param("itemIds") List itemIds); + /** + * Desc: 根据关键字查询 如果关键字为空,查询10条,否则返回查询到的所有 + * @param keyWord + * @Author raymond + * @Date 07:53 2025/10/22 + * @return java.util.List + **/ + List searchActivityListByKeyWord(@Param("keyWord") String keyWord); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/InventoryItemMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/InventoryItemMapper.java index fe52098f..1a9c629d 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/InventoryItemMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/InventoryItemMapper.java @@ -1,9 +1,13 @@ package com.openhis.workflow.mapper; +import java.util.List; + +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.dto.AdjustPriceDto; /** * 库存项目管理Mapper接口 @@ -13,5 +17,21 @@ import com.openhis.workflow.domain.InventoryItem; */ @Repository public interface InventoryItemMapper extends BaseMapper { + /** + * Desc: 根据 productIds 查询 库存大于0的 货品 + * @param itemIds + * @Author raymond + * @Date 21:56 2025/10/16 + * @return java.util.List + **/ + List searchResultDataList(@Param("itemIds") List itemIds); + /** + * Desc: 根据 productIds 查询 库存大于0的 货品并分组查询 + * @param itemIds + * @Author raymond + * @Date 21:56 2025/10/16 + * @return java.util.List + **/ + List searchResultDataListByGroup(@Param("itemIds") List itemIds); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/SupplyRequestMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/SupplyRequestMapper.java index 57122b87..6572449e 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/SupplyRequestMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/mapper/SupplyRequestMapper.java @@ -1,10 +1,16 @@ package com.openhis.workflow.mapper; +import com.openhis.medication.dto.AdjustPriceMedListDto; +import com.openhis.workflow.dto.ChangePriceDto; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.openhis.workflow.domain.SupplyRequest; +import java.util.Date; +import java.util.List; + /** * 供应申请管理Mapper接口 * @@ -13,5 +19,88 @@ import com.openhis.workflow.domain.SupplyRequest; */ @Repository public interface SupplyRequestMapper extends BaseMapper { + /** + * Desc: 根据 调价单号 查询 supply request 和 价格主表 + * @param busNo + * @Author raymond + * @Date 10:12 2025/10/19 + * @return java.util.List + **/ + List searchDataForBusNo(@Param("busNo") String busNo); + /** + * Desc: 根据 批次号查询 分组后的 产品ID + * @param busNo + * @Author raymond + * @Date 13:36 2025/10/30 + * @return java.util.List + **/ + List searchGroupDataForBusNo(@Param("busNo") String busNo); + /** + * Desc: 根据调价单号 查询 原价 med + * @param busNo + * @Author raymond + * @Date 14:10 2025/10/21 + * @return java.util.List + **/ + List searchMedInfoDataForBusNo(@Param("busNo") String busNo); + /** + * Desc: 查询历史数据 药品调价数据 + * @param busNo + * @param createTime + * @Author raymond + * @Date 07:22 2025/10/29 + * @return java.util.List + **/ + List searchHistoryMedInfoData(@Param("busNo") String busNo, @Param("createTime")Date createTime); + /** + * Desc: 根据调价单号 查询 原价 device + * @param busNo + * @Author raymond + * @Date 18:03 2025/10/22 + * @return java.util.List + **/ + List searchDeviceInfoDataForBusNo(@Param("busNo") String busNo); + /** + * Desc: 查询历史数据 耗材调价数据 + * @param busNo + * @param createTime + * @Author raymond + * @Date 08:57 2025/10/29 + * @return java.util.List + **/ + List searchHistoryDeviceInfoDataForBusNo(@Param("busNo") String busNo,@Param("createTime") Date createTime); + /** + * Desc: 根据调价单号 查询 原价 activity + * @param busNo + * @Author raymond + * @Date 18:03 2025/10/22 + * @return java.util.List + **/ + List searchActivityInfoDataForBusNo(@Param("busNo") String busNo); + /** + * Desc: 根据调价单号 查询 历史原价 activity + * @param busNo + * @Author raymond + * @Date 10:01 2025/10/29 + * @return java.util.List + **/ + List searchHistoryActivityInfoDataForBusNo(@Param("busNo") String busNo); + + /** + * Desc: 根据调价单号 查询 原价 health + * @param busNo + * @Author raymond + * @Date 18:03 2025/10/22 + * @return java.util.List + **/ + List searchHealthInfoDataForBusNo(@Param("busNo") String busNo); + /** + * Desc: 根据调价单号 查询 历史原价 health + * @param busNo + * @Author raymond + * @Date 10:00 2025/10/29 + * @return java.util.List + **/ + List searchHistoryHealthInfoDataForBusNo(@Param("busNo") String busNo); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IActivityDefinitionService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IActivityDefinitionService.java index 5a4526f7..1203ba68 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IActivityDefinitionService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IActivityDefinitionService.java @@ -1,7 +1,13 @@ package com.openhis.workflow.service; +import java.util.List; + +import org.apache.ibatis.annotations.Param; + import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.medication.dto.AdjustPriceMedListDto; import com.openhis.workflow.domain.ActivityDefinition; +import com.openhis.workflow.dto.ActivityDto; /** * 诊疗定义管理Service接口 @@ -35,4 +41,20 @@ public interface IActivityDefinitionService extends IService */ Long getAppointActivityDefinitionId(String activityName); + /** + * Desc: 根据 项目id数组 加载 诊疗数据集合 + * @param itemIds + * @Author raymond + * @Date 12:20 2025/10/18 + * @return java.util.List + **/ + List searchActivityDefinitionByIds(@Param("itemIds") List itemIds); + /** + * Desc: 根据关键字查询 如果关键字为空,查询10条,否则返回查询到的所有 + * @param keyWord + * @Author raymond + * @Date 07:53 2025/10/22 + * @return java.util.List + **/ + List searchActivityListByKeyWord(String keyWord); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceDispenseService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceDispenseService.java index 9aad1df1..7a9e9591 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceDispenseService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceDispenseService.java @@ -17,13 +17,27 @@ import com.openhis.workflow.domain.DeviceRequest; */ public interface IDeviceDispenseService extends IService { + /** * 处理器材发放信息 * * @param deviceRequest 器材请求信息 * @param dbOpType db操作类型 + * @return 发放id */ - void handleDeviceDispense(DeviceRequest deviceRequest, String dbOpType); + Long handleDeviceDispense(DeviceRequest deviceRequest, String dbOpType); + + /** + * 医嘱执行生成耗材发放,状态为待配药 + * + * @param deviceRequest 耗材医嘱请求 + * @param procedureId 执行记录id + * @param locationId 发放器材房 + * @param plannedDispenseTime 预定发药时间 + * @return 发放id + */ + Long generateDeviceDispense(DeviceRequest deviceRequest, Long procedureId, Long locationId, + Date plannedDispenseTime); /** * 删除器材发放信息 @@ -107,4 +121,11 @@ public interface IDeviceDispenseService extends IService { * @param devDispenseId 发放id列表 */ void updateDispenseStatusSummarized(List devDispenseId); + + /** + * 更新耗材状态:已汇总 + * + * @param medDispenseId 发放id列表 + */ + void updateDispenseStatusSummarized(List medDispenseId, String busNo); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceRequestService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceRequestService.java index 8363cc44..065a2d18 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceRequestService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IDeviceRequestService.java @@ -1,13 +1,11 @@ package com.openhis.workflow.service; +import java.util.List; + import com.baomidou.mybatisplus.extension.service.IService; -import com.core.common.core.domain.model.LoginUser; import com.openhis.administration.domain.Practitioner; import com.openhis.workflow.domain.DeviceRequest; -import java.util.Date; -import java.util.List; - /** * 器材请求管理Service接口 * @@ -45,4 +43,19 @@ public interface IDeviceRequestService extends IService { * @param devReqIdList 耗材请求id列表 */ void updateDraftStatusBatch(List devReqIdList); + + /** + * 更新请求状态:取消 + * + * @param devReqIdList 耗材请求id列表 + */ + void updateCancelledStatusBatch(List devReqIdList); + + /** + * 获取耗材请求信息 + * + * @param deviceId 耗材id + * @return 耗材请求信息 + */ + List getDevRequestByDeviceId(Long deviceId); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IInventoryItemService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IInventoryItemService.java index db62604c..cc364140 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IInventoryItemService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IInventoryItemService.java @@ -3,9 +3,11 @@ package com.openhis.workflow.service; import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.Set; import com.baomidou.mybatisplus.extension.service.IService; import com.openhis.workflow.domain.InventoryItem; +import com.openhis.workflow.dto.AdjustPriceDto; /** * 库存项目管理Service接口 @@ -43,4 +45,34 @@ public interface IInventoryItemService extends IService { */ List selectInventoryByItemId(Long itemId, String lotNumber, Long locationId, Integer tenantId); + /** + * 查询 + * + * @param itemIdList 项目编号列表 + * @param tenantId 租户id + * @return 单据详情 + */ + List selectInventoryByItemIdList(List itemIdList, Integer tenantId); + + /** + * Desc: 根据id 数组检索库存 > 0 的药品或耗材 + * + * @param productIds + * @Author raymond + * @Date 16:45 2025/10/16 + * @return java.util.List + **/ + List searchResultDataList(List productIds); + + /** + * Desc: 根据id 数组检索库存 > 0 的药品或耗材并分组 + * + * @param productIds + * @Author raymond + * @Date 16:45 2025/10/16 + * @return java.util.List + **/ + List searchResultDataListByGroup(List productIds); + + List selectAllInventory(); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IServiceRequestService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IServiceRequestService.java index d1953143..9f5cb880 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IServiceRequestService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/IServiceRequestService.java @@ -112,11 +112,10 @@ public interface IServiceRequestService extends IService { void updateCountPint(Long id, Integer num); /** - * 根据药品请求id,查询对应的服务请求实体 - * - * @param medRequestId 药品请求id - * @return 服务请求实体 + * 查询诊疗对应的服务申请 + * + * @param activityId 诊疗id + * @return 请求信息列表 */ - ServiceRequest selectByMedRequestId(Long medRequestId); - + List getServiceRequestByActivityId(Long activityId); } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyDeliveryService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyDeliveryService.java index 9eb76f0b..9ab6ea1c 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyDeliveryService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyDeliveryService.java @@ -1,11 +1,10 @@ package com.openhis.workflow.service; +import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; -import com.core.common.core.domain.R; -import com.core.common.core.domain.model.LoginUser; import com.openhis.workflow.domain.SupplyDelivery; import com.openhis.workflow.domain.SupplyRequest; @@ -47,5 +46,44 @@ public interface ISupplyDeliveryService extends IService { */ List selectByIdList(List deliveryIdList); + /** + * 根据requestId,获取供应发放列表 + * + * @param requestIdList requestId列表 + * @return 供应发放列表 + */ + List selectByRequestIdList(List requestIdList); + /** + * 创建待发药的供应发放 + * + * @param medicationId + * @param lotNumber + * @param patientId + * @param minQuantity + * @param minUnitCode + * @param receiverId + * @param supplyRequestId + */ + void createSummarySupplyDelivery(Long medicationId, String lotNumber, Long patientId, BigDecimal minQuantity, + String minUnitCode, Long receiverId, Long supplyRequestId); + + /** + * 创建已发放的供应发放(耗材) + * + * @param deviceId + * @param lotNumber + * @param minQuantity + * @param minUnitCode + * @param supplyRequestId + */ + void createDeviceSummarySupplyDelivery(Long deviceId, String lotNumber, BigDecimal minQuantity, String minUnitCode, + Long supplyRequestId); + + /** + * 根据供应申请id,删除供应发放 + * + * @param requestIdList 供应申请id列表 + */ + void deleteSupplyDeliveryByReqId(List requestIdList); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyRequestService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyRequestService.java index e4a8a207..585f972e 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyRequestService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/ISupplyRequestService.java @@ -1,12 +1,13 @@ package com.openhis.workflow.service; +import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.extension.service.IService; -import com.core.common.core.domain.model.LoginUser; -import com.openhis.workflow.domain.SupplyDelivery; +import com.openhis.medication.dto.AdjustPriceMedListDto; import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.dto.ChangePriceDto; /** * 供应申请管理Service接口 @@ -127,6 +128,7 @@ public interface ISupplyRequestService extends IService { * @return 校验结果 */ boolean verifyAbleEdit(Long itemId); + /** * 通过单据号删除单据信息 * @@ -140,6 +142,7 @@ public interface ISupplyRequestService extends IService { * @param supplyRequestIdList 供应申请id列表 */ void updateCompletedStatusBatch(List supplyRequestIdList); + /** * 根据id,获取供应申请列表 * @@ -147,4 +150,145 @@ public interface ISupplyRequestService extends IService { * @return 供应发放列表 */ List selectByIdList(List requestIdList); + + /** + * Desc: 根据 调价单号 查询 supplyrequest 和 价格主表 + * + * @param busNo + * @Author raymond + * @Date 10:13 2025/10/19 + * @return java.util.List + **/ + List searchDataForBusNo(String busNo); + + /** + * 生成汇总发药单 + * + * @param medicationId + * @param locationId + * @param lotNumber + * @param patientId + * @param minQuantity + * @param minUnitCode + * @param practitionerId + * @param now + * @param busNo + */ + Long createSummarySupplyRequest(Long medicationId, Long locationId, String lotNumber, Long patientId, + BigDecimal minQuantity, String minUnitCode, Long practitionerId, Date now, String busNo); + + /** + * 生成汇总发药单(耗材) + * + * @param deviceId + * @param locationId + * @param lotNumber + * @param minQuantity + * @param minUnitCode + * @param practitionerId + * @param now + * @param busNo + */ + Long createDeviceSummarySupplyRequest(Long deviceId, Long locationId, String lotNumber, BigDecimal minQuantity, + String minUnitCode, Long practitionerId, Date now, String busNo); + + /** + * Desc: 根据调价单号 查询 原价 med + * + * @param busNo + * @Author raymond + * @Date 14:10 2025/10/21 + * @return java.util.List + **/ + List searchMedInfoDataForBusNo(String busNo); + + /** + * Desc: 查询历史数据 药品调价数据 + * + * @param busNo + * @param createTime + * @Author raymond + * @Date 07:22 2025/10/29 + * @return java.util.List + **/ + List searchHistoryMedInfoData(String busNo, Date createTime); + + /** + * Desc: 根据调价单号 查询 原价 device + * + * @param busNo + * @Author raymond + * @Date 14:10 2025/10/21 + * @return java.util.List + **/ + List searchDeviceInfoDataForBusNo(String busNo); + + /** + * Desc: 查询历史数据 耗材调价数据 + * + * @param busNo + * @param createTime + * @Author raymond + * @Date 08:57 2025/10/29 + * @return java.util.List + **/ + List searchHistoryDeviceInfoDataForBusNo(String busNo, Date createTime); + + /** + * Desc: 根据调价单号 查询 原价 activity + * + * @param busNo + * @Author raymond + * @Date 14:10 2025/10/21 + * @return java.util.List + **/ + List searchActivityInfoDataForBusNo(String busNo); + + /** + * Desc: 根据调价单号 查询 历史原价 activity + * + * @param busNo + * @Author raymond + * @Date 10:01 2025/10/29 + * @return java.util.List + **/ + List searchHistoryActivityInfoDataForBusNo(String busNo); + + /** + * Desc: 根据调价单号 查询 原价 health + * + * @param busNo + * @Author raymond + * @Date 14:10 2025/10/21 + * @return java.util.List + **/ + List searchHealthInfoDataForBusNo(String busNo); + + /** + * Desc: 根据调价单号 查询 历史原价 health + * + * @param busNo + * @Author raymond + * @Date 10:00 2025/10/29 + * @return java.util.List + **/ + List searchHistoryHealthInfoDataForBusNo(String busNo); + + /** + * 取消汇总 + * + * @param summaryNoList 汇总单号 + * @return 处理结果 + */ + List cancelSummarySupplyRequest(List summaryNoList); + + /** + * Desc: 根据 批次号查询 分组后的 产品ID + * + * @param busNo + * @Author raymond + * @Date 13:36 2025/10/30 + * @return java.util.List + **/ + List searchGroupDataForBusNo(String busNo); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ActivityDefinitionServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ActivityDefinitionServiceImpl.java index 530a91fb..ab9f0410 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ActivityDefinitionServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ActivityDefinitionServiceImpl.java @@ -2,6 +2,8 @@ package com.openhis.workflow.service.impl; import java.util.List; +import com.openhis.medication.dto.AdjustPriceMedListDto; +import com.openhis.workflow.dto.ActivityDto; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -68,4 +70,14 @@ public class ActivityDefinitionServiceImpl extends ServiceImpl searchActivityDefinitionByIds(List itemIds) { + return this.activityDefinitionMapper.searchActivityDefinitionByIds(itemIds); + } + + @Override + public List searchActivityListByKeyWord(String keyWord) { + return this.activityDefinitionMapper.searchActivityListByKeyWord(keyWord); + } + } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java index ca139269..c56436e9 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java @@ -42,9 +42,10 @@ public class DeviceDispenseServiceImpl extends ServiceImpl().eq(DeviceDispense::getDeviceReqId, deviceRequest.getId())); } + + return deviceDispense.getId(); + } + + /** + * 医嘱执行生成耗材发放,状态为待配药 + * + * @param deviceRequest 耗材医嘱请求 + * @param procedureId 执行记录id + * @param locationId 发放器材房 + * @param plannedDispenseTime 预定发药时间 + * @return 发放id + */ + @Override + public Long generateDeviceDispense(DeviceRequest deviceRequest, Long procedureId, Long locationId, + Date plannedDispenseTime) { + DeviceDispense deviceDispense = new DeviceDispense(); + // 执行id + deviceDispense.setProcedureId(procedureId); + // 预定发药时间 + deviceDispense.setPlannedDispenseTime(plannedDispenseTime); + // 器材发放id + deviceDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_DIS_NO.getPrefix(), 4)); + // 器材请求id + deviceDispense.setDeviceReqId(deviceRequest.getId()); + // 器材发放状态 + deviceDispense.setStatusEnum(DispenseStatus.PREPARATION.getValue()); + // 发药类型 + deviceDispense.setDispenseCategoryEnum(deviceRequest.getCategoryEnum()); + // 器材编码 + deviceDispense.setDeviceDefId(deviceRequest.getDeviceDefId()); + // 领药患者 + deviceDispense.setPatientId(deviceRequest.getPatientId()); + // 相关诊疗 + deviceDispense.setEncounterId(deviceRequest.getEncounterId()); + // 发放数量 + deviceDispense.setQuantity(deviceRequest.getQuantity()); + // 发放单位 + deviceDispense.setUnitCode(deviceRequest.getUnitCode()); + // 产品批号 + deviceDispense.setLotNumber(deviceRequest.getLotNumber()); + // 发药人 + deviceDispense.setPerformerId(deviceRequest.getPerformerId()); + // 发放器材房 + deviceDispense.setLocationId(locationId); + // 支持用药信息 + deviceDispense.setSupportInfo(deviceRequest.getSupportInfo()); + // 已发药数量 + deviceDispense.setDispenseQuantity(BigDecimal.ZERO); + // 发药频次 + deviceDispense.setDispenseFrequencyCode(deviceRequest.getRateCode()); + + // 获取当前时间 + LocalDateTime now = LocalDateTime.now(); + // 增加12小时 + LocalDateTime newTime = now.plusHours(12); + // 转换为Date对象(如果需要保持使用Date类型) + Date limitTime = Date.from(newTime.atZone(ZoneId.systemDefault()).toInstant()); + // 设置限制发药时间 + deviceDispense.setLimitTime(limitTime); + baseMapper.insert(deviceDispense); + + return deviceDispense.getId(); } /** @@ -255,4 +319,20 @@ public class DeviceDispenseServiceImpl extends ServiceImpl medDispenseId, String busNo) { + baseMapper.update(null, + new LambdaUpdateWrapper() + .set(DeviceDispense::getStatusEnum, DispenseStatus.SUMMARIZED.getValue()) + // TODO 数据库需要加字段 + // .set(DeviceDispense::getStatusChangedTime, DateUtils.getNowDate()) + // .set(DeviceDispense::getSummaryNo, busNo) + .in(DeviceDispense::getId, medDispenseId).eq(DeviceDispense::getDeleteFlag, DelFlag.NO.getCode())); + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceRequestServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceRequestServiceImpl.java index 571581bf..2405b0fd 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceRequestServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceRequestServiceImpl.java @@ -4,9 +4,11 @@ import java.util.List; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.openhis.administration.domain.Practitioner; +import com.openhis.common.enums.DelFlag; import com.openhis.common.enums.RequestStatus; import com.openhis.workflow.domain.DeviceRequest; import com.openhis.workflow.mapper.DeviceRequestMapper; @@ -75,4 +77,27 @@ public class DeviceRequestServiceImpl extends ServiceImpl().in(DeviceRequest::getId, devReqIdList) .set(DeviceRequest::getStatusEnum, RequestStatus.DRAFT.getValue())); } + + /** + * 更新请求状态:取消 + * + * @param devReqIdList 耗材请求id列表 + */ + @Override + public void updateCancelledStatusBatch(List devReqIdList) { + baseMapper.update(null, new LambdaUpdateWrapper().in(DeviceRequest::getId, devReqIdList) + .set(DeviceRequest::getStatusEnum, RequestStatus.CANCELLED.getValue())); + } + + /** + * 获取耗材请求信息 + * + * @param deviceId 耗材id + * @return 耗材请求信息 + */ + @Override + public List getDevRequestByDeviceId(Long deviceId) { + return baseMapper.selectList(new LambdaQueryWrapper().eq(DeviceRequest::getDeviceDefId, deviceId) + .eq(DeviceRequest::getDeleteFlag, DelFlag.NO.getCode())); + } } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/InventoryItemServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/InventoryItemServiceImpl.java index 38b002c9..17b4dc15 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/InventoryItemServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/InventoryItemServiceImpl.java @@ -3,7 +3,10 @@ package com.openhis.workflow.service.impl; import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.Set; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.openhis.workflow.dto.AdjustPriceDto; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -75,4 +78,45 @@ public class InventoryItemServiceImpl extends ServiceImpl selectInventoryByItemIdList(List itemIdList, Integer tenantId) { + LambdaQueryWrapper queryWrapper = + new LambdaQueryWrapper().in(InventoryItem::getItemId, itemIdList) + .eq(InventoryItem::getTenantId, tenantId).eq(InventoryItem::getDeleteFlag, DelFlag.NO.getValue()) + .eq(InventoryItem::getInventoryStatusEnum, PublicationStatus.ACTIVE.getValue()); + // 查询取库房信息 + return baseMapper.selectList(queryWrapper); + } + + /** + * 查询 + * + * @return 单据详情 + */ + @Override + public List selectAllInventory() { + LambdaQueryWrapper queryWrapper = + new LambdaQueryWrapper().eq(InventoryItem::getDeleteFlag, DelFlag.NO.getValue()); + // 查询取库房信息 + return baseMapper.selectList(queryWrapper); + } + + @Override + public List searchResultDataList(List productIds) { + + return baseMapper.searchResultDataList(productIds); + } + + @Override + public List searchResultDataListByGroup(List productIds) { + return baseMapper.searchResultDataListByGroup(productIds); + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java index 38f08900..ddfe71b4 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java @@ -215,21 +215,14 @@ public class ServiceRequestServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(ServiceRequest::getBasedOnTable, CommonConstants.TableName.MED_MEDICATION_REQUEST) - .eq(ServiceRequest::getBasedOnId, medRequestId).eq(ServiceRequest::getDeleteFlag, '0'); - return baseMapper.selectOne(queryWrapper); - + public List getServiceRequestByActivityId(Long activityId) { + return baseMapper.selectList(new LambdaQueryWrapper() + .eq(ServiceRequest::getActivityId, activityId).eq(ServiceRequest::getDeleteFlag, DelFlag.NO.getCode())); } - } \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyDeliveryServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyDeliveryServiceImpl.java index f4bbe82c..8bc99799 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyDeliveryServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyDeliveryServiceImpl.java @@ -1,5 +1,6 @@ package com.openhis.workflow.service.impl; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -11,8 +12,10 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.core.common.utils.DateUtils; import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.CommonConstants; import com.openhis.common.enums.DelFlag; import com.openhis.common.enums.DispenseStatus; +import com.openhis.common.enums.SupplyType; import com.openhis.workflow.domain.SupplyDelivery; import com.openhis.workflow.domain.SupplyRequest; import com.openhis.workflow.mapper.SupplyDeliveryMapper; @@ -125,4 +128,65 @@ public class SupplyDeliveryServiceImpl extends ServiceImpl().in(SupplyDelivery::getId, deliveryIdList) .eq(SupplyDelivery::getDeleteFlag, DelFlag.YES.getCode())); } + + /** + * 根据requestId,获取供应发放列表 + * + * @param requestIdList requestId列表 + * @return 供应发放列表 + */ + @Override + public List selectByRequestIdList(List requestIdList) { + return baseMapper.selectList(new LambdaQueryWrapper() + .in(SupplyDelivery::getRequestId, requestIdList).eq(SupplyDelivery::getDeleteFlag, DelFlag.NO.getCode())); + } + + /** + * 创建待发药的供应发放 + * + * @param medicationId + * @param lotNumber + * @param patientId + * @param minQuantity + * @param minUnitCode + * @param receiverId + * @param supplyRequestId + */ + @Override + public void createSummarySupplyDelivery(Long medicationId, String lotNumber, Long patientId, BigDecimal minQuantity, + String minUnitCode, Long receiverId, Long supplyRequestId) { + baseMapper.insert(new SupplyDelivery().setItemId(medicationId) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION).setLotNumber(lotNumber) + .setPatientId(patientId).setQuantity(minQuantity).setUnitCode(minUnitCode) + .setTypeEnum(SupplyType.SUMMARY_DISPENSE.getValue()).setRequestId(supplyRequestId) + .setStatusEnum(DispenseStatus.IN_PROGRESS.getValue()).setReceiverId(receiverId)); + } + + /** + * 创建已发放的供应发放(耗材) + * + * @param deviceId + * @param lotNumber + * @param minQuantity + * @param minUnitCode + * @param supplyRequestId + */ + @Override + public void createDeviceSummarySupplyDelivery(Long deviceId, String lotNumber, BigDecimal minQuantity, + String minUnitCode, Long supplyRequestId) { + baseMapper.insert(new SupplyDelivery().setItemId(deviceId) + .setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setLotNumber(lotNumber) + .setQuantity(minQuantity).setUnitCode(minUnitCode).setTypeEnum(SupplyType.DEVICE_STOCKTAKING.getValue()) + .setRequestId(supplyRequestId).setStatusEnum(DispenseStatus.COMPLETED.getValue())); + } + + /** + * 根据供应申请id,删除供应发放 + * + * @param requestIdList 供应申请id列表 + */ + @Override + public void deleteSupplyDeliveryByReqId(List requestIdList) { + baseMapper.delete(new LambdaQueryWrapper().in(SupplyDelivery::getRequestId, requestIdList)); + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyRequestServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyRequestServiceImpl.java index 406ff3b1..0047b735 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyRequestServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/SupplyRequestServiceImpl.java @@ -1,9 +1,12 @@ package com.openhis.workflow.service.impl; +import java.math.BigDecimal; import java.util.Date; 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; @@ -11,9 +14,14 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.core.common.utils.DateUtils; import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.CommonConstants; import com.openhis.common.enums.DelFlag; +import com.openhis.common.enums.SupplyCategory; import com.openhis.common.enums.SupplyStatus; +import com.openhis.common.enums.SupplyType; +import com.openhis.medication.dto.AdjustPriceMedListDto; import com.openhis.workflow.domain.SupplyRequest; +import com.openhis.workflow.dto.ChangePriceDto; import com.openhis.workflow.mapper.SupplyRequestMapper; import com.openhis.workflow.service.ISupplyRequestService; @@ -31,6 +39,8 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class SupplyRequestServiceImpl extends ServiceImpl implements ISupplyRequestService { + @Resource + private SupplyRequestMapper supplyRequestMapper; /** * 通过单据号查询单据信息 @@ -40,8 +50,7 @@ public class SupplyRequestServiceImpl extends ServiceImpl getSupplyByBusNo(String busNo) { - return baseMapper.selectList(new LambdaQueryWrapper().eq(SupplyRequest::getBusNo, busNo) - .eq(SupplyRequest::getDeleteFlag, DelFlag.NO.getCode())); + return baseMapper.selectList(new LambdaQueryWrapper().eq(SupplyRequest::getBusNo, busNo)); } /** @@ -229,7 +238,8 @@ public class SupplyRequestServiceImpl extends ServiceImpl().eq(SupplyRequest::getItemId, itemId) - .eq(SupplyRequest::getDeleteFlag, DelFlag.NO.getCode())); + .eq(SupplyRequest::getDeleteFlag, DelFlag.NO.getCode()) + .in(SupplyRequest::getStatusEnum, SupplyStatus.APPROVAL.getValue(), SupplyStatus.AGREE.getValue())); } /** @@ -268,4 +278,127 @@ public class SupplyRequestServiceImpl extends ServiceImpl().in(SupplyRequest::getId, requestIdList) .eq(SupplyRequest::getDeleteFlag, DelFlag.NO.getCode())); } -} + + @Override + public List searchDataForBusNo(String busNo) { + return this.supplyRequestMapper.searchDataForBusNo(busNo); + } + + /** + * 生成汇总发药单 + * + * @param medicationId + * @param locationId + * @param lotNumber + * @param patientId + * @param minQuantity + * @param minUnitCode + * @param practitionerId + * @param now + * @param busNo + */ + @Override + public Long createSummarySupplyRequest(Long medicationId, Long locationId, String lotNumber, Long patientId, + BigDecimal minQuantity, String minUnitCode, Long practitionerId, Date now, String busNo) { + SupplyRequest supplyRequest = new SupplyRequest().setItemId(medicationId).setSourceLocationId(locationId) + .setLotNumber(lotNumber).setPatientId(patientId).setItemQuantity(minQuantity).setUnitCode(minUnitCode) + .setApplicantId(practitionerId).setApplyTime(now).setBusNo(busNo) + .setStatusEnum(SupplyStatus.SEND.getValue()).setTypeEnum(SupplyType.SUMMARY_DISPENSE.getValue()) + .setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION) + .setCategoryEnum(SupplyCategory.STOCK_SUPPLY.getValue()); + baseMapper.insert(supplyRequest); + return supplyRequest.getId(); + } + + /** + * 生成汇总发药单 + * + * @param deviceId + * @param locationId + * @param lotNumber + * @param minQuantity + * @param minUnitCode + * @param practitionerId + * @param now + * @param busNo + */ + @Override + public Long createDeviceSummarySupplyRequest(Long deviceId, Long locationId, String lotNumber, + BigDecimal minQuantity, String minUnitCode, Long practitionerId, Date now, String busNo) { + SupplyRequest supplyRequest = new SupplyRequest().setItemId(deviceId).setSourceLocationId(locationId) + .setLotNumber(lotNumber).setItemQuantity(minQuantity).setUnitCode(minUnitCode) + .setApplicantId(practitionerId).setApplyTime(now).setBusNo(busNo) + .setStatusEnum(SupplyStatus.SEND.getValue()).setTypeEnum(SupplyType.DEVICE_STOCKTAKING.getValue()) + .setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION) + .setCategoryEnum(SupplyCategory.STOCK_SUPPLY.getValue()); + baseMapper.insert(supplyRequest); + return supplyRequest.getId(); + } + + @Override + public List searchMedInfoDataForBusNo(String busNo) { + return this.supplyRequestMapper.searchMedInfoDataForBusNo(busNo); + } + + @Override + public List searchHistoryMedInfoData(String busNo, Date createTime) { + return this.supplyRequestMapper.searchHistoryMedInfoData(busNo, createTime); + } + + @Override + public List searchDeviceInfoDataForBusNo(String busNo) { + return this.supplyRequestMapper.searchDeviceInfoDataForBusNo(busNo); + } + + @Override + public List searchHistoryDeviceInfoDataForBusNo(String busNo, Date createTime) { + return this.supplyRequestMapper.searchHistoryDeviceInfoDataForBusNo(busNo, createTime); + } + + @Override + public List searchActivityInfoDataForBusNo(String busNo) { + return this.supplyRequestMapper.searchActivityInfoDataForBusNo(busNo); + } + + @Override + public List searchHistoryActivityInfoDataForBusNo(String busNo) { + return this.supplyRequestMapper.searchHistoryActivityInfoDataForBusNo(busNo); + } + + @Override + public List searchHealthInfoDataForBusNo(String busNo) { + return this.supplyRequestMapper.searchHealthInfoDataForBusNo(busNo); + } + + @Override + public List searchHistoryHealthInfoDataForBusNo(String busNo) { + return this.supplyRequestMapper.searchHistoryHealthInfoDataForBusNo(busNo); + } + + /** + * 取消汇总 + * + * @param summaryNoList 汇总单号 + * @return 汇总单ids + */ + @Override + public List cancelSummarySupplyRequest(List summaryNoList) { + // 查询汇总发药单 + List supplyRequestList = + baseMapper.selectList(new LambdaQueryWrapper().in(SupplyRequest::getBusNo, summaryNoList) + .eq(SupplyRequest::getTypeEnum, SupplyType.SUMMARY_DISPENSE.getValue()) + .eq(SupplyRequest::getDeleteFlag, DelFlag.NO.getCode())); + // 软删除汇总发药单 + baseMapper.delete(new LambdaQueryWrapper().in(SupplyRequest::getBusNo, summaryNoList) + .eq(SupplyRequest::getTypeEnum, SupplyType.SUMMARY_DISPENSE.getValue())); + if (supplyRequestList != null && !supplyRequestList.isEmpty()) { + return supplyRequestList.stream().map(SupplyRequest::getId).toList(); + } + return null; + } + + @Override + public List searchGroupDataForBusNo(String busNo) { + return this.supplyRequestMapper.searchGroupDataForBusNo(busNo); + } +} \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/CatalogFileInput.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/CatalogFileInput.java new file mode 100644 index 00000000..2b6c6c30 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/CatalogFileInput.java @@ -0,0 +1,20 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.yb.dto; + +import lombok.Data; + +/** + * TODO:请概括描述当前类的主要用途和注意事项 + * + * @author SunJQ + * @date 2025-10-30 + */ +@Data +public class CatalogFileInput { + + String ver; + + String address; +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/FileDownload.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/FileDownload.java index 582d6bf8..2424f8c8 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/FileDownload.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/FileDownload.java @@ -4,6 +4,7 @@ package com.openhis.yb.dto; import com.alibaba.fastjson2.annotation.JSONField; + import lombok.Data; import lombok.experimental.Accessors; @@ -23,4 +24,6 @@ public class FileDownload { private String fileQuryNo; @JSONField(name = "fixmedins_code") private String fixmedinsCode; + + private String address; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/FileResult.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/FileResult.java index 12d047ae..be5b7e3d 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/FileResult.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/FileResult.java @@ -22,15 +22,12 @@ import lombok.experimental.Accessors; public class FileResult { // 文件查询号 - @JSONField(name="file_qury_no") private String fileQuryNo; // 文件名称 - @JSONField(name="filename") private String filename; // 下载截止时间 - @JSONField(name="dld_endtime") private Date dldEndtime; // 文件数据 @@ -38,6 +35,5 @@ public class FileResult { private byte[] fileData; // 医药机构编号 - @JSONField(name="fixmedins_code") private String fixmedinsCode; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/ThreePartPayDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/ThreePartPayDto.java new file mode 100644 index 00000000..d5330239 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/ThreePartPayDto.java @@ -0,0 +1,42 @@ +package com.openhis.yb.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * 第三方支付参数 + */ +@Data +@Accessors(chain = true) +public class ThreePartPayDto{ + + private String txtCode;//支付码 + + private Integer index=220400;//序号 + + + /** + * 付款id + */ + private Long id;// paymentId + + /** 就诊ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long encounterId; + + /** 收费项 */ + private List chargeItemIds;// 收费时传收费的项目,退费时传退费的项目,2025/05/07去掉notEmpty的注解,与前端约定此字段必传,可以是空集合 + + /** 支付详细 */ + @NotEmpty + private List paymentDetails; + + private String ybMdtrtCertType;// 社保卡/身份证/电子医保码 + + private String busiCardInfo;// 社保卡号/身份证号/ecToken +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2401InputInpatientMdtrtInfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2401InputInpatientMdtrtInfo.java index b5129361..3278be17 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2401InputInpatientMdtrtInfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2401InputInpatientMdtrtInfo.java @@ -11,7 +11,7 @@ import lombok.experimental.Accessors; import java.util.Date; /** - * TODO:请概括描述当前类的主要用途和注意事项 + * 【2401】 * * @author SunJQ * @date 2025-07-29 diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2402InputInpatientDiseInfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2402InputInpatientDiseInfo.java index 4b4a655c..9777f029 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2402InputInpatientDiseInfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2402InputInpatientDiseInfo.java @@ -10,8 +10,8 @@ import lombok.experimental.Accessors; import java.util.Date; -/** - * TODO:请概括描述当前类的主要用途和注意事项 +/**【2402】 + * * * @author SunJQ * @date 2025-07-29 diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2403InputParam.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2403InputParam.java index acafa1e9..91d970e6 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2403InputParam.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb2403InputParam.java @@ -18,13 +18,13 @@ public class Yb2403InputParam { /** * */ - Yb2403InputAdmInfo yb2403InputAdmInfo; + Yb2403InputAdmInfo adminfo; /** * */ - List yb2403InputDiseInfo; + List diseinfo; /** * */ - Yb2403InputMdtrtGrpContent yb2403InputMdtrtGrpContent; + Yb2403InputMdtrtGrpContent mdtrtGrpContent; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterEncounterDiagnoseInfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterEncounterDiagnoseInfo.java index f0ccf5d3..3b50dab4 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterEncounterDiagnoseInfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterEncounterDiagnoseInfo.java @@ -8,7 +8,7 @@ import lombok.experimental.Accessors; /** * 【3101】就诊诊断信息 * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterEncounterPatientInfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterEncounterPatientInfo.java index 1df006df..10d6d29b 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterEncounterPatientInfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterEncounterPatientInfo.java @@ -9,7 +9,7 @@ import lombok.experimental.Accessors; /** * 【3101】就诊患者信息 * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterOrderInfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterOrderInfo.java index d8fbe06e..12db9ce8 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterOrderInfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101AdapterOrderInfo.java @@ -9,7 +9,7 @@ import lombok.experimental.Accessors; /** * 【3101】处方(医嘱)信息 * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputData.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputData.java index e1a0bcf5..311af482 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputData.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputData.java @@ -15,7 +15,7 @@ import lombok.experimental.Accessors; /** * 【3101】输入-规则分析信息(节点标识:data) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiDiagnoseDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiDiagnoseDto.java index a8153257..7a3f85b9 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiDiagnoseDto.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiDiagnoseDto.java @@ -16,7 +16,7 @@ import lombok.experimental.Accessors; /** * 【3101】输入-诊断信息(节点标识:fsi_diagnose_dtos) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiEncounterDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiEncounterDto.java index 7cb2c7d7..96b67135 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiEncounterDto.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiEncounterDto.java @@ -19,7 +19,7 @@ import lombok.experimental.Accessors; /** * 【3101】输入-就诊信息(节点标识:fsi_encounter_dtos) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiOperationDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiOperationDto.java index 5a70885b..703e8e71 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiOperationDto.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiOperationDto.java @@ -14,7 +14,7 @@ import lombok.experimental.Accessors; /** * 【3101】输入-手术操作信息(节点标识:fsi_operation_dtos) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiOrderDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiOrderDto.java index 7c09fca3..0fee9204 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiOrderDto.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputFsiOrderDto.java @@ -17,7 +17,7 @@ import lombok.experimental.Accessors; /** * 【3101】输入-处方(医嘱)信息(节点标识:fsi_order_dtos) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputPatientDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputPatientDto.java index 874075bb..1592dc6c 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputPatientDto.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101InputPatientDto.java @@ -18,7 +18,7 @@ import lombok.experimental.Accessors; /** * 【3101】输入-参保人信息(节点标识:patient_dtos) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101OutputJudgeResultDetailDto.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101OutputJudgeResultDetailDto.java index e24926f3..a8d77c11 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101OutputJudgeResultDetailDto.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101OutputJudgeResultDetailDto.java @@ -15,7 +15,7 @@ import lombok.experimental.Accessors; /** * 【3101】输出-违规明细信息(节点标识:judge_result_detail_dtos) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101OutputResult.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101OutputResult.java index 8a57cc56..d9f9230e 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101OutputResult.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3101OutputResult.java @@ -17,7 +17,7 @@ import lombok.experimental.Accessors; /** * 【3101】输出-违规信息(节点标识:result) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3103InputData.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3103InputData.java index dc559ab2..e5dd87f9 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3103InputData.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3103InputData.java @@ -15,7 +15,7 @@ import lombok.experimental.Accessors; /** * 【3103】输入(节点标识:data) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3103InputWarn.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3103InputWarn.java index 754ff685..5ca6b426 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3103InputWarn.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb3103InputWarn.java @@ -12,7 +12,7 @@ import lombok.experimental.Accessors; /** * 【3103】输入(节点标识:warns) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AAdapterSettleInfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AAdapterSettleInfo.java index 58608b9f..03375951 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AAdapterSettleInfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AAdapterSettleInfo.java @@ -8,7 +8,7 @@ import lombok.experimental.Accessors; /** * 【4101A】结算清单信息 * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputBldinfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputBldinfo.java index 060f7ee7..af81d951 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputBldinfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputBldinfo.java @@ -10,7 +10,7 @@ import lombok.experimental.Accessors; /** * 【4101A】输血信息(节点标识:bldinfo) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputDiseinfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputDiseinfo.java index 4434c8c3..30f8cfe0 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputDiseinfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputDiseinfo.java @@ -12,7 +12,7 @@ import lombok.experimental.Accessors; /** * 【4101A】住院诊断信息(节点标识:diseinfo) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputIcuinfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputIcuinfo.java index d58ac044..92dce9c9 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputIcuinfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputIcuinfo.java @@ -15,7 +15,7 @@ import lombok.experimental.Accessors; /** * 【4101A】重症监护信息(节点标识:icuinfo) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputOprninfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputOprninfo.java index af61e15e..0701ae4b 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputOprninfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputOprninfo.java @@ -15,7 +15,7 @@ import lombok.experimental.Accessors; /** * 【4101A】手术操作信息(节点标识:oprninfo) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputOpspdiseinfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputOpspdiseinfo.java index 869353d1..5ed1801a 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputOpspdiseinfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputOpspdiseinfo.java @@ -12,7 +12,7 @@ import lombok.experimental.Accessors; /** * 【4101A】门诊慢特病诊断信息(节点标识:opspdiseinfo) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputSetlinfo.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputSetlinfo.java index 8aa147cb..5ed7806b 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputSetlinfo.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AInputSetlinfo.java @@ -17,7 +17,7 @@ import lombok.experimental.Accessors; /** * 【4101A】结算清单信息(节点标识setlinfo) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AOutputData.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AOutputData.java index 583c517b..63a5ac9f 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AOutputData.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/dto/Yb4101AOutputData.java @@ -12,7 +12,7 @@ import lombok.experimental.Accessors; /** * 【4101A】输出(节点标识:data) * - * @author GuoRui + * @author Thanking */ @Data @Accessors(chain = true) diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/InpatientDischargeMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/InpatientDischargeMapper.java new file mode 100644 index 00000000..c7d0d10d --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/InpatientDischargeMapper.java @@ -0,0 +1,19 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.yb.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.yb.domain.InpatientDischarge; +import com.openhis.yb.domain.InpatientReg; +import org.springframework.stereotype.Repository; + +/** + * TODO:请概括描述当前接口的主要用途和注意事项 + * + * @author SunJQ + * @date 2025-07-31 + */ +@Repository +public interface InpatientDischargeMapper extends BaseMapper { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/InpatientRegInfoUpdateRecordeMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/InpatientRegInfoUpdateRecordeMapper.java new file mode 100644 index 00000000..67ba8ffe --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/InpatientRegInfoUpdateRecordeMapper.java @@ -0,0 +1,19 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.yb.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.openhis.yb.domain.InpatientDischarge; +import com.openhis.yb.domain.InpatientRegInfoUpdateRecorde; +import org.springframework.stereotype.Repository; + +/** + * TODO:请概括描述当前接口的主要用途和注意事项 + * + * @author SunJQ + * @date 2025-07-31 + */ +@Repository +public interface InpatientRegInfoUpdateRecordeMapper extends BaseMapper { +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/MedicalInsuranceMapper.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/MedicalInsuranceMapper.java index 4b802d97..c2f984dd 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/MedicalInsuranceMapper.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/mapper/MedicalInsuranceMapper.java @@ -32,29 +32,27 @@ public interface MedicalInsuranceMapper { * @return 查询结果 */ Settlement3201Dto get3201Param(@Param("startTime") Date stmtBegnDate, @Param("endTime") Date stmtEndDate, - @Param("tenantId") Integer tenantId, @Param("orgId") Long orgId, @Param("InsuType") String InsuType, - @Param("clrType") Integer clrType, @Param("admVs") String admVs, @Param("zhPay") Integer zhPay, - @Param("zhGjPay") Integer zhGjPay, @Param("ybFund") Integer ybFund); + @Param("tenantId") Integer tenantId, @Param("orgId") Long orgId, @Param("InsuType") String InsuType, + @Param("clrType") Integer clrType, @Param("admVs") String admVs, @Param("zhPay") Integer zhPay, + @Param("zhGjPay") Integer zhGjPay, @Param("ybFund") Integer ybFund); Settlement3202Dto get3202Param(@Param("startTime") String stmtBegnDate, @Param("endTime") String stmtEndDate, - @Param("tenantId") Integer tenantId, @Param("orgId") Long orgId, @Param("clrType") String clrType, - @Param("admVs") String admVs, @Param("zhPay") Integer zhPay, @Param("zhGjPay") Integer zhGjPay, - @Param("cash") Integer cash, @Param("cashVX") Integer cashVX, @Param("cashAli") Integer cashAli, - @Param("cashUNIN") Integer cashUNIN, @Param("ybFund") Integer ybFund); + @Param("tenantId") Integer tenantId, @Param("orgId") Long orgId, @Param("clrType") String clrType, + @Param("admVs") String admVs, @Param("zhPay") Integer zhPay, @Param("zhGjPay") Integer zhGjPay, + @Param("cash") Integer cash, @Param("cashVX") Integer cashVX, @Param("cashAli") Integer cashAli, + @Param("cashUNIN") Integer cashUNIN, @Param("ybFund") Integer ybFund); Financial3203Dto get3203Param(@Param("startTime") Date begndate, @Param("endTime") Date enddate, - @Param("tenantId") Integer tenantId, @Param("clrType") String clrType, @Param("zhPay") Integer zhPay, - @Param("zhGjPay") Integer zhGjPay, @Param("cash") Integer cash, @Param("cashVX") Integer cashVX, - @Param("cashAli") Integer cashAli, @Param("cashUNIN") Integer cashUNIN, @Param("ybFund") Integer ybFund); - - - List get3201ParamList(@Param("startTime") String stmtBegnDate, @Param("endTime") String stmtEndDate, - @Param("tenantId") Integer tenantId, @Param("orgId") Long orgId, @Param("InsuType") String InsuType, - @Param("clrType") String clrType, @Param("admVs") String admVs, @Param("zhPay") Integer zhPay, - @Param("zhGjPay") Integer zhGjPay, @Param("ybFund") Integer ybFund); + @Param("tenantId") Integer tenantId, @Param("clrType") String clrType, @Param("zhPay") Integer zhPay, + @Param("zhGjPay") Integer zhGjPay, @Param("cash") Integer cash, @Param("cashVX") Integer cashVX, + @Param("cashAli") Integer cashAli, @Param("cashUNIN") Integer cashUNIN, @Param("ybFund") Integer ybFund); + List get3201ParamList(@Param("startTime") String stmtBegnDate, + @Param("endTime") String stmtEndDate, @Param("tenantId") Integer tenantId, @Param("orgId") Long orgId, + @Param("InsuType") String InsuType, @Param("clrType") String clrType, @Param("admVs") String admVs, + @Param("zhPay") Integer zhPay, @Param("zhGjPay") Integer zhGjPay, @Param("ybFund") Integer ybFund); List getPaymentDecDetailUniAccountDtoListByPaymentIdList( - @Param("idList")List idList, @Param("startTime")Date startTime, - @Param("endTime")Date endTime, @Param("draft")Integer draft); + @Param("idList") List idList, @Param("startTime") Date startTime, @Param("endTime") Date endTime, + @Param("draft") Integer draft); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/model/OutpatientRegistrationModel.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/model/OutpatientRegistrationModel.java index 4e295fbe..b9167ee0 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/model/OutpatientRegistrationModel.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/model/OutpatientRegistrationModel.java @@ -1,19 +1,23 @@ package com.openhis.yb.model; -import lombok.Data; - import java.math.BigDecimal; +import lombok.Data; + @Data public class OutpatientRegistrationModel { - //就诊凭证类型 + // 就诊凭证类型 private String mdtrtCertType; - //卡密 + // 卡密 private String busiCardInfo; - //结算方式 + // 结算方式 private String psnSetlWay; - //总价 + // 总价 private BigDecimal totalPrice; - //合同編號 + // 合同編號 private String contractNo; + // 医保对码 + private String BusNo; + // 医保对码 + private String ybNo; } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/IInpatientDischargeService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/IInpatientDischargeService.java new file mode 100644 index 00000000..5f696bc5 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/IInpatientDischargeService.java @@ -0,0 +1,20 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.yb.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.yb.domain.InpatientDischarge; +import com.openhis.yb.domain.InpatientReg; + +/** + * TODO:请概括描述当前接口的主要用途和注意事项 + * + * @author SunJQ + * @date 2025-07-31 + */ + +public interface IInpatientDischargeService extends IService { + + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/IInpatientRegInfoUpdateRecordeService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/IInpatientRegInfoUpdateRecordeService.java new file mode 100644 index 00000000..c4e5aa74 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/IInpatientRegInfoUpdateRecordeService.java @@ -0,0 +1,19 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.yb.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.openhis.yb.domain.InpatientReg; +import com.openhis.yb.domain.InpatientRegInfoUpdateRecorde; + +/** + * TODO:请概括描述当前接口的主要用途和注意事项 + * + * @author SunJQ + * @date 2025-07-31 + */ + +public interface IInpatientRegInfoUpdateRecordeService extends IService { + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbDao.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbDao.java index a2971941..5aae9af7 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbDao.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbDao.java @@ -47,6 +47,7 @@ import com.openhis.common.utils.HisQueryUtils; import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentRecDetail; import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.model.PaymentedItemModel; import com.openhis.financial.service.IContractService; import com.openhis.financial.service.IPaymentRecDetailService; import com.openhis.financial.service.IPaymentReconciliationService; @@ -120,7 +121,11 @@ public class YbDao { @Autowired private IRegService iRegService; @Autowired - private IInpatientRegService iInpatientRegService; + private IInpatientRegService inpatientRegService; + @Autowired + private IInpatientDischargeService inpatientDischargeService; + @Autowired + private IInpatientRegInfoUpdateRecordeService inpatientRegInfoUpdateRecordeService; @Autowired private IInpatientSettleService inpatientSettleService; @Autowired @@ -247,13 +252,13 @@ public class YbDao { * 【2204】诊断信息上传 * * @param tenantId 租户id - * @param chargeItemIds 收费项id集合 + * @param paymentedItemList 收费项id集合 * @return 【2204】参数 */ - public Clinic2204OrderParam getClinicOrder2204Param(Integer tenantId, List chargeItemIds, + public Clinic2204OrderParam getClinicOrder2204Param(Integer tenantId, List paymentedItemList, ClinicReg2201Output reg2201Output) { - return ybUtil.getClinicOrder2204Param(tenantId, chargeItemIds, reg2201Output); + return ybUtil.getClinicOrder2204Param(tenantId, paymentedItemList, reg2201Output); } /** @@ -1998,7 +2003,7 @@ public class YbDao { throw new ServiceException("未查询到就诊记录"); } - InpatientReg inpatientReg = iInpatientRegService + InpatientReg inpatientReg = inpatientRegService .getOne(new LambdaQueryWrapper().eq(InpatientReg::getIptNo, encounter.getBusNo()) .orderByDesc(InpatientReg::getBegntime).last(YbCommonConstants.sqlConst.LIMIT1)); if (inpatientReg == null) { @@ -2088,7 +2093,7 @@ public class YbDao { if (encounter == null) { throw new ServiceException("未查询到挂号信息"); } - InpatientReg inpatientReg = iInpatientRegService + InpatientReg inpatientReg = inpatientRegService .getOne(new LambdaQueryWrapper().eq(InpatientReg::getIptNo, encounter.getBusNo()) .orderByDesc(InpatientReg::getBegntime).last(YbCommonConstants.sqlConst.LIMIT1)); if (inpatientReg == null) { @@ -2151,7 +2156,7 @@ public class YbDao { throw new ServiceException("未查询到挂号信息"); } // 查询挂号信息 - InpatientReg inpatientReg = iInpatientRegService + InpatientReg inpatientReg = inpatientRegService .getOne(new LambdaQueryWrapper().eq(InpatientReg::getIptNo, encounter.getBusNo()) .orderByDesc(InpatientReg::getBegntime).last(YbCommonConstants.sqlConst.LIMIT1)); if (inpatientReg == null) { @@ -2341,7 +2346,7 @@ public class YbDao { * @param encounterId 就诊id * @return 2402参数 */ - public Yb2402InputParam getYb2402InputInpatientDscgInfo(Long encounterId) { + public Yb2402InputParam getYb2402InputInpatientDscgInfo(Long encounterId,Contract contract) { Yb2402InputParam yb2402InputParam = new Yb2402InputParam(); Encounter encounter = iEncounterService.getById(encounterId); @@ -2349,7 +2354,7 @@ public class YbDao { throw new ServiceException("未查询到就诊信息"); } - InpatientReg inpatientReg = iInpatientRegService.getInpatientRegByIptNo(encounter.getBusNo()); + InpatientReg inpatientReg = inpatientRegService.getInpatientRegByIptNo(encounter.getBusNo()); if (inpatientReg == null) { throw new ServiceException("未查询到医保挂号信息"); } @@ -2362,7 +2367,7 @@ public class YbDao { throw new ServiceException("挂号账户为自费账户,无法办理医保住院登记"); } - Contract contract = iContractService.getContract(account.getContractNo()); + contract = iContractService.getContract(account.getContractNo()); if (contract == null) { throw new ServiceException("未查询到对应合同信息"); } @@ -2531,7 +2536,7 @@ public class YbDao { throw new ServiceException("未查询到就诊信息"); } - InpatientReg inpatientReg = iInpatientRegService.getInpatientRegByIptNo(encounter.getBusNo()); + InpatientReg inpatientReg = inpatientRegService.getInpatientRegByIptNo(encounter.getBusNo()); if (inpatientReg == null) { throw new ServiceException("未查询到医保挂号信息"); } @@ -2719,8 +2724,8 @@ public class YbDao { } // 拼装参数 - yb24032InputParam.setYb2403InputDiseInfo(yb2403InputDiseInfos); - yb24032InputParam.setYb2403InputAdmInfo(yb2403InputAdmInfo); + yb24032InputParam.setDiseinfo(yb2403InputDiseInfos); + yb24032InputParam.setAdminfo(yb2403InputAdmInfo); return yb24032InputParam; } @@ -2740,7 +2745,7 @@ public class YbDao { throw new ServiceException("未查询到就诊信息"); } - InpatientReg inpatientReg = iInpatientRegService.getInpatientRegByIptNo(encounter.getBusNo()); + InpatientReg inpatientReg = inpatientRegService.getInpatientRegByIptNo(encounter.getBusNo()); if (inpatientReg == null) { throw new ServiceException("未查询到医保挂号信息"); } @@ -2764,7 +2769,7 @@ public class YbDao { throw new ServiceException("未查询到就诊信息"); } - InpatientReg inpatientReg = iInpatientRegService.getInpatientRegByIptNo(encounter.getBusNo()); + InpatientReg inpatientReg = inpatientRegService.getInpatientRegByIptNo(encounter.getBusNo()); if (inpatientReg == null) { throw new ServiceException("未查询到医保挂号信息"); } @@ -2797,4 +2802,62 @@ public class YbDao { return yb5205InputSpecialDisease; } + + /** + * 保存入院办理信息 + * @param inpatientReg 参数 + */ + public void save2401InpatientReg(InpatientReg inpatientReg) { + inpatientRegService.save(inpatientReg); + } + + /** + * 保存出院办理信息 + * @param inpatientReg + */ + public void save2402InpatientDscg(InpatientDischarge inpatientReg) { + inpatientDischargeService.save(inpatientReg); + } + + /** + * 保存2403住院信息变更记录 + * @param yb2403InputParam 参数 + */ + public void save2403InputInpatient(Yb2403InputParam yb2403InputParam) { + + InpatientRegInfoUpdateRecorde inpatientRegInfoUpdateRecorde = new InpatientRegInfoUpdateRecorde(); + + Yb2403InputMdtrtGrpContent yb2403InputMdtrtGrpContent = yb2403InputParam.getMdtrtGrpContent(); + Yb2403InputAdmInfo yb2403InputAdmInfo = yb2403InputParam.getAdminfo(); + List yb2403InputDiseInfo = yb2403InputParam.getDiseinfo(); + + inpatientRegInfoUpdateRecorde.setMdtrtId(yb2403InputAdmInfo.getMdtrtId()) + .setAdmBed(yb2403InputAdmInfo.getAdmBed()) + .setPsnNo(yb2403InputAdmInfo.getPsnNo()) + .setConerName(yb2403InputAdmInfo.getConerName()) + .setTel(yb2403InputAdmInfo.getTel()) + .setBegntime(yb2403InputAdmInfo.getBegntime()) + .setEndtime(yb2403InputAdmInfo.getEndtime()) + .setDscgMaindiagCode(yb2403InputAdmInfo.getDscgMaindiagCode()) + .setDscgMaindiagName(yb2403InputAdmInfo.getDscgMaindiagName()) + .setMainCondDscr(yb2403InputAdmInfo.getMainCondDscr()) + .setDiseCodg(yb2403InputAdmInfo.getDiseCodg()) + .setDiseName(yb2403InputAdmInfo.getDiseName()) + .setOprnOprtName(yb2403InputAdmInfo.getOprnOprtName()) + .setOprnOprtCode(yb2403InputAdmInfo.getOprnOprtCode()) + .setFpscNo(yb2403InputAdmInfo.getFpscNo()) + .setMatnType(yb2403InputAdmInfo.getMatnType()) + .setBirctrlMatnDate(yb2403InputAdmInfo.getBirctrlMatnDate()) + .setLatechbFlag(yb2403InputAdmInfo.getLatechbFlag()) + .setBirctrlType(yb2403InputAdmInfo.getBirctrlType()) + .setEssoVal(yb2403InputAdmInfo.getEssoVal()) + .setFetts(yb2403InputAdmInfo.getFetts()) + .setFetusCnt(yb2403InputAdmInfo.getFetusCnt()) + .setPretFlag(yb2403InputAdmInfo.getPretFlag()) + .setDiseTypeCode(yb2403InputAdmInfo.getDiseTypeCode()); + + inpatientRegInfoUpdateRecorde.setInputParam(JSON.toJSONString(inpatientRegInfoUpdateRecorde)); + + inpatientRegInfoUpdateRecordeService.save(inpatientRegInfoUpdateRecorde); + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java index d2c4fa2a..2d505be9 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbHttpUtils.java @@ -9,11 +9,10 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; -import java.util.Optional; -import com.openhis.financial.service.impl.ContractServiceImpl; +import com.openhis.yb.domain.InpatientDischarge; +import com.openhis.yb.domain.InpatientReg; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; @@ -49,6 +48,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.openhis.financial.domain.Contract; import com.openhis.financial.service.IContractService; +import com.openhis.financial.service.impl.ContractServiceImpl; import com.openhis.yb.domain.ClinicReg; import com.openhis.yb.dto.*; import com.openhis.yb.model.Clinic2207OrderModel; @@ -400,13 +400,13 @@ public class YbHttpUtils { public Result reconcileGeneralLedger(Financial3201Param financial3201Param) { // 此处先查询到合同并回填给入参对象 - Contract contract=iContractService.getContract(financial3201Param.getSetlOptins()); - if(contract==null){ + Contract contract = iContractService.getContract(financial3201Param.getSetlOptins()); + if (contract == null) { throw new ServiceException("未查询到合同信息"); } // 发送请求 String s = httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("ybUrl") + "/reconcile", - financial3201Param,contract); + financial3201Param, contract); // 赋值(上述回填的两个参数医保不要,为了避免麻烦,在发送http后进行回填) financial3201Param.setFixmedinsCode(contract.getFixmedinsCode()); @@ -662,7 +662,7 @@ public class YbHttpUtils { MedicalInventory3511Output medicalInventory3511Output = null; if (result == null) { throw new ServiceException("未接收到医保返回参数"); - } else if (result.getCode() == 200) { + } else if (result.getCode() == 401) { System.out.println(JSON.toJSONString(result.getResult())); medicalInventory3511Output = parseObject(JSON.toJSONString(result.getResult()), MedicalInventory3511Output.class); @@ -1076,4 +1076,154 @@ public class YbHttpUtils { } return null; } + + /** + * 【目录下载】 + * + * @param catalogFileInput + * @return + */ + public FileResult queryCatalog(CatalogFileInput catalogFileInput) { + String resultString = httpPost( + SecurityUtils.getLoginUser().getOptionJson().getString("ybUrl") + "/query-catalog", catalogFileInput, null); + if (StringUtils.isEmpty(resultString)) { + throw new ServiceException("未接收到医保返回参数"); + } + System.out.println("【" + catalogFileInput.getAddress() + "】返回参数:" + JSON.toJSONString(resultString)); + logger.info("【" + catalogFileInput.getAddress() + "】返回参数:" + resultString); + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(resultString, Result.class); + if (result == null) { + throw new ServiceException("未接收到医保返回参数"); + } else if (result.getCode() == 200) { + System.out.println(result.getResult().toString()); + return JSON.parseObject(JSON.toJSONString(result.getResult()), FileResult.class); + } else { + throw new ServiceException(result.getMessage()); + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } + + /** + * 【文件下载】 + * + * @param fileResult + * @return + */ + public FileResult downLoadFile(FileResult fileResult) { + String resultString = + httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("ybUrl") + "/download", fileResult, null); + if (StringUtils.isEmpty(resultString)) { + throw new ServiceException("未接收到医保返回参数"); + } + System.out.println("【9102】返回参数:" + JSON.toJSONString(resultString)); + logger.info("【9102】返回参数:" + resultString); + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(resultString, Result.class); + if (result == null) { + throw new ServiceException("未接收到医保返回参数"); + } else if (result.getCode() == 200) { + System.out.println(result.getResult().toString()); + return JSON.parseObject(JSON.toJSONString(result.getResult()), FileResult.class); + } else { + throw new ServiceException(result.getMessage()); + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } + + /** + * 【2401】住院办理 + * + * @param yb2401InputInpatientMdtrtInfo 入參 + * @return 結果 + */ + public InpatientReg inpatientReg(Yb2401InputInpatientMdtrtInfo yb2401InputInpatientMdtrtInfo) { + String resultString = + httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("ybUrl") + "/inpatient-reg", + yb2401InputInpatientMdtrtInfo, contractServiceImpl.getContract(yb2401InputInpatientMdtrtInfo.getMdtrtareaAdmvs())); + if (StringUtils.isEmpty(resultString)) { + throw new ServiceException("未接收到医保返回参数"); + } + System.out.println("【2401】返回参数:" + JSON.toJSONString(resultString)); + logger.info("【2401】返回参数:" + resultString); + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(resultString, Result.class); + if (result == null) { + throw new ServiceException("未接收到医保返回参数"); + } else if (result.getCode() == 200) { + System.out.println(result.getResult().toString()); + return JSON.parseObject(result.getResult().toString(), InpatientReg.class); + } else { + throw new ServiceException(result.getMessage()); + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } + + public InpatientDischarge inpatientCheckOut(Contract contract,Yb2402InputParam yb2402InputInpatientDscgInfo) { + String resultString = + httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("ybUrl") + "/discharge-patient", + yb2402InputInpatientDscgInfo, contract); + if (StringUtils.isEmpty(resultString)) { + throw new ServiceException("未接收到医保返回参数"); + } + System.out.println("【2402】返回参数:" + JSON.toJSONString(resultString)); + logger.info("【2402】返回参数:" + resultString); + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(resultString, Result.class); + if (result == null) { + throw new ServiceException("未接收到医保返回参数"); + } else if (result.getCode() == 200) { + System.out.println(result.getResult().toString()); + return JSON.parseObject(result.getResult().toString(), InpatientDischarge.class); + } else { + throw new ServiceException(result.getMessage()); + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + return null; + } + + public void updateInpatientInfo(Yb2403InputParam yb2405InputInpatient) { + String resultString = + httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("ybUrl") + "/change-inpatient-info", + yb2405InputInpatient, null); + if (StringUtils.isEmpty(resultString)) { + throw new ServiceException("未接收到医保返回参数"); + } + System.out.println("【2405】返回参数:" + JSON.toJSONString(resultString)); + logger.info("【2405】返回参数:" + resultString); + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(resultString, Result.class); + if (result == null) { + throw new ServiceException("未接收到医保返回参数"); + } else if (result.getCode() == 200) { + System.out.println(result.getResult().toString()); + return; + } else { + throw new ServiceException(result.getMessage()); + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java index a27c02d2..1457c5c8 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/YbManager.java @@ -41,6 +41,7 @@ import com.openhis.common.enums.ybenums.YbPsnSetlWay; import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentReconciliation; import com.openhis.financial.model.PaymentResult; +import com.openhis.financial.model.PaymentedItemModel; import com.openhis.financial.service.IContractService; import com.openhis.financial.service.IPaymentRecDetailService; import com.openhis.financial.service.IPaymentReconciliationService; @@ -237,32 +238,7 @@ public class YbManager { * @return 结果 */ public R cancelRegById(ClinicReg clinicReg) { - Contract regContract = null; - // ClinicReg clinicReg = iRegService.getById(clinicRegId); - List redisContractList = iContractService.getContractListByYb(); - for (Contract contract : redisContractList) { - if (clinicReg.getInsuplcAdmdvs().equals(contract.getAdmVs())) { - regContract = contract; - } - } - if (regContract == null) { - Optional optional = redisContractList.stream().max(Comparator.comparingInt(Contract::getSort)); - if (optional.isPresent()) { - regContract = optional.get(); - } else { - throw new ServiceException("未設置合同順序"); - } - } - if (regContract == null) { - throw new ServiceException("無法單獨取消醫保挂號,原因:當前醫保局已挂號源沒指定到業務系統的合同對象"); - } - - ClinicReg2201Output regResult = ybHttpService.cancelReg(clinicReg, regContract); - if (regResult != null) { - ybBaseService.saveUnReg(regResult); - return R.ok(regResult); - } - return R.fail(regResult, "医保退号失败"); + return null; } /** @@ -353,12 +329,13 @@ public class YbManager { if (totalPrice == null) { throw new ServiceException("未查询到挂号费用金额"); } + // 外购处方标志(文档上没有详细介绍) 2025/04/14经确认,暂定非处方流转传0,处方流转传1 - clinicFeedetail.setMedListCodg("001101000010000-100000002"); + clinicFeedetail.setMedListCodg(cancelRegPaymentModel.getYbNo()); clinicFeedetail.setFeedetlSn(clinic2204OrderParam.getChrgBchno()).setMdtrtId(clinicReg2201Output.getMdtrtId()) .setPsnNo(reg.getPsnNo()).setChrgBchno(clinic2204OrderParam.getChrgBchno()).setFeeOcurTime(new Date()) - .setMedinsListCodg("1922546598919725058").setDetItemFeeSumamt(totalPrice.doubleValue()).setCnt(1.0) - .setPric(totalPrice.doubleValue()).setInsuplcAdmdvs(perinfo.getInsuplcAdmdvs()) + .setMedinsListCodg(cancelRegPaymentModel.getBusNo()).setDetItemFeeSumamt(totalPrice.doubleValue()) + .setCnt(1.0).setPric(totalPrice.doubleValue()).setInsuplcAdmdvs(perinfo.getInsuplcAdmdvs()) .setBilgDeptCodg(organization.getYbNo()).setBilgDeptName(organization.getName()) .setBilgDrCodg(doctor.getYbNo()) // 默认无需审批 @@ -404,8 +381,8 @@ public class YbManager { } public Clinic2206OrderOutput preSettle(Contract contract, Long encounterId, YbMdtrtCertType ybMdtrtCertType, - String busiCardInfo, ClinicReg2201Output reg2201Output, String payWay, List chargeItemIds, - YbMedType ybMedType) { + String busiCardInfo, ClinicReg2201Output reg2201Output, String payWay, + List paymentedItemList, YbMedType ybMedType) { YbPsnSetlWay ybPsnSetlWay = YbPsnSetlWay.getByValue(payWay); if (ybPsnSetlWay == null) { ybPsnSetlWay = YbPsnSetlWay.PSN_SETLWAY01; @@ -422,7 +399,7 @@ public class YbManager { Result result = ybHttpService.upload2203Record(clinic2203MedicalParam, contract); Clinic2204OrderParam clinic2204OrderParam = - ybBaseService.getClinicOrder2204Param(tenantId, chargeItemIds, reg2201Output); + ybBaseService.getClinicOrder2204Param(tenantId, paymentedItemList, reg2201Output); if (clinic2204OrderParam == null) { throw new ServiceException("未生成2204接口参数"); } @@ -920,6 +897,8 @@ public class YbManager { List chargeItemBaseInfoDtos = iChargeItemService.getChargeItemBaseInfoByIds(prePaymentDto.getChargeItemIds()); List chargeItemBaseInfoDtosList = new ArrayList<>(); + + // 查询基础信息 todo:childrenJson里面村的内容相比较ChargeItemBaseInfoDto有些不够,需要确认一下类里面实际用到的值在children里存不存在 for (ChargeItemBaseInfoDto chargeItemBaseInfoDto : chargeItemBaseInfoDtos) { if (chargeItemBaseInfoDto.getContractNo().equals(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO)) { continue; @@ -933,6 +912,7 @@ public class YbManager { chargeItemBaseInfoDtosList.add(chargeItemBaseInfoDto); } } + Yb2301InputFeeDetail yb2301InputFeeDetail; List yb2301InputFeeDetailList = new ArrayList(); // int i = 1; @@ -958,19 +938,19 @@ public class YbManager { List yb2301OutputResults = ybHttpService.upload2301FeeDetail(yb2301InputFeeDetailModel); // todo :数据保存 - for (ChargeItemBaseInfoDto chargeItemBaseInfoDto : chargeItemBaseInfoDtos) { - if (chargeItemBaseInfoDto.getContractNo().equals(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO)) { - continue; - } - if (!StringUtils.isEmpty(chargeItemBaseInfoDto.getChildrenJson())) { - // 反序列化:将JSON数组字符串转为List<> - List chargeItemBaseInfoList = - JSON.parseArray(chargeItemBaseInfoDto.getChildrenJson(), ChargeItemBaseInfoDto.class); - chargeItemBaseInfoDtosList.addAll(chargeItemBaseInfoList); - } else { - chargeItemBaseInfoDtosList.add(chargeItemBaseInfoDto); - } - } + // for (ChargeItemBaseInfoDto chargeItemBaseInfoDto : chargeItemBaseInfoDtos) { + // if (chargeItemBaseInfoDto.getContractNo().equals(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO)) { + // continue; + // } + // if (!StringUtils.isEmpty(chargeItemBaseInfoDto.getChildrenJson())) { + // // 反序列化:将JSON数组字符串转为List<> + // List chargeItemBaseInfoList = + // JSON.parseArray(chargeItemBaseInfoDto.getChildrenJson(), ChargeItemBaseInfoDto.class); + // chargeItemBaseInfoDtosList.addAll(chargeItemBaseInfoList); + // } else { + // chargeItemBaseInfoDtosList.add(chargeItemBaseInfoDto); + // } + // } // 计算医疗总费用 BigDecimal medfeeSumamt = BigDecimal.ZERO; for (ChargeItemBaseInfoDto chargeItemBaseInfoDto : chargeItemBaseInfoDtosList) { @@ -986,7 +966,7 @@ public class YbManager { .setInsutype(infoPerson.getInsutype()).setInsuplcAdmdvs(infoPerson.getInsuplcAdmdvs()) .setMdtrtareaAdmvs(iContractService.getContractListByYb().get(0).getAdmVs()); - // todo:中如结算标志需要判断一下,待2304接口开发完成后编辑 + // todo:中途结算标志需要判断一下,待2304接口开发完成后编辑 Yb2303OutputSetInfo yb2303OutputSetInfo = ybHttpService.inpatientPreSettle(yb2303InputInpatient); @@ -1031,4 +1011,7 @@ public class YbManager { return yb2305OutputSetlInfo; } + + public void hospitalAdmission() { + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/impl/InpatientDischargeServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/impl/InpatientDischargeServiceImpl.java new file mode 100644 index 00000000..871014f5 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/impl/InpatientDischargeServiceImpl.java @@ -0,0 +1,28 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.yb.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.common.enums.DelFlag; +import com.openhis.yb.domain.InpatientDischarge; +import com.openhis.yb.domain.InpatientReg; +import com.openhis.yb.mapper.InpatientDischargeMapper; +import com.openhis.yb.mapper.InpatientRegMapper; +import com.openhis.yb.service.IInpatientDischargeService; +import com.openhis.yb.service.IInpatientRegService; +import org.springframework.stereotype.Service; + +/** + * TODO:请概括描述当前类的主要用途和注意事项 + * + * @author SunJQ + * @date 2025-07-31 + */ +@Service +public class InpatientDischargeServiceImpl extends ServiceImpl + implements IInpatientDischargeService { + + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/impl/InpatientRegInfoUpdateRecordeServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/impl/InpatientRegInfoUpdateRecordeServiceImpl.java new file mode 100644 index 00000000..910cf4be --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/service/impl/InpatientRegInfoUpdateRecordeServiceImpl.java @@ -0,0 +1,26 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.yb.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.openhis.yb.domain.InpatientDischarge; +import com.openhis.yb.domain.InpatientRegInfoUpdateRecorde; +import com.openhis.yb.mapper.InpatientDischargeMapper; +import com.openhis.yb.mapper.InpatientRegInfoUpdateRecordeMapper; +import com.openhis.yb.service.IInpatientDischargeService; +import com.openhis.yb.service.IInpatientRegInfoUpdateRecordeService; +import org.springframework.stereotype.Service; + +/** + * TODO:请概括描述当前类的主要用途和注意事项 + * + * @author SunJQ + * @date 2025-07-31 + */ +@Service +public class InpatientRegInfoUpdateRecordeServiceImpl extends ServiceImpl + implements IInpatientRegInfoUpdateRecordeService { + + +} diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java index 8243ee86..667b3467 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/yb/util/YbParamBuilderUtil.java @@ -36,6 +36,7 @@ import com.openhis.common.enums.ybenums.*; import com.openhis.financial.domain.Contract; import com.openhis.financial.domain.PaymentRecDetail; import com.openhis.financial.domain.PaymentReconciliation; +import com.openhis.financial.model.PaymentedItemModel; import com.openhis.financial.service.IContractService; import com.openhis.financial.service.IPaymentRecDetailService; import com.openhis.financial.service.IPaymentReconciliationService; @@ -354,17 +355,17 @@ public class YbParamBuilderUtil { * @return */ public List getClinicFeedetailList(Integer tenantId, ClinicReg2201Output reg, - String chrgBchno, List chargeItemIds) { + String chrgBchno, List paymentedItemList) { List clincFeedetailList = new ArrayList(); // 查询收费项 - List ChargeItemList = iChargeItemService.list(new LambdaQueryWrapper() - .in(ChargeItem::getId, chargeItemIds).eq(ChargeItem::getTenantId, tenantId)); + // List ChargeItemList = iChargeItemService.list(new LambdaQueryWrapper() + // .in(ChargeItem::getId, chargeItemIds).eq(ChargeItem::getTenantId, tenantId)); // 是否是电子处方 Whether eFlag = Whether.getByValue(0); - for (ChargeItem chargeItem : ChargeItemList) { + for (PaymentedItemModel chargeItem : paymentedItemList) { Clinic2204FeeDetailParam clinicFeedetail = new Clinic2204FeeDetailParam(); // 查询项目信息 String productTable = chargeItem.getProductTable(); @@ -423,7 +424,7 @@ public class YbParamBuilderUtil { * @param tenantId 租户id * @return */ - public Clinic2204OrderParam getClinicOrder2204Param(Integer tenantId, List chargeItemIds, + public Clinic2204OrderParam getClinicOrder2204Param(Integer tenantId, List paymentedItemList, ClinicReg2201Output reg2201Output) { Clinic2204OrderParam clinicOrderPage = new Clinic2204OrderParam(); @@ -433,7 +434,7 @@ public class YbParamBuilderUtil { clinicOrderPage.setChrgBchno(clinicOrderPage.getChrgBchno()); List clincFeedetailList = - getClinicFeedetailList(tenantId, reg2201Output, clinicOrderPage.getChrgBchno(), chargeItemIds); + getClinicFeedetailList(tenantId, reg2201Output, clinicOrderPage.getChrgBchno(), paymentedItemList); clinicOrderPage.setFeedetail(clincFeedetailList).setInsuplcAdmdvs(reg2201Output.getInsuplcAdmdvs()); return clinicOrderPage; @@ -1338,8 +1339,8 @@ public class YbParamBuilderUtil { throw new ServiceException("无效的目录类别"); } return new MedicalDirectory3302Param().setFixmedinsHilistId(busNo) - .setFixmedinsCode(TenantOptionUtil.getOptionContent(TenantOptionDict.FIXMEDINS_CODE)).setListType(listType) - .setMedListCodg(ybNo); + .setFixmedinsCode(TenantOptionUtil.getOptionContent(TenantOptionDict.YB_FIXMEDINS_CODE)) + .setListType(listType).setMedListCodg(ybNo); } /** diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChangePriceRecordMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChangePriceRecordMapper.xml new file mode 100644 index 00000000..d75ea224 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChangePriceRecordMapper.xml @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefDetailAppMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefDetailAppMapper.xml new file mode 100644 index 00000000..5869030b --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefDetailAppMapper.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefinitionMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefinitionMapper.xml index 5c112cff..0c21cc61 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefinitionMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefinitionMapper.xml @@ -4,4 +4,35 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/DeviceDefinitionMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/DeviceDefinitionMapper.xml index 09fcdd06..1aed4f8a 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/DeviceDefinitionMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/DeviceDefinitionMapper.xml @@ -4,4 +4,30 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/EncounterLocationMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/EncounterLocationMapper.xml index c174a7e8..789f4791 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/EncounterLocationMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/EncounterLocationMapper.xml @@ -4,4 +4,9 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/EncounterMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/EncounterMapper.xml index 2f2c2389..73972682 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/EncounterMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/EncounterMapper.xml @@ -49,4 +49,17 @@ AND T1.create_time < #{endDate}; + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/HealthcareServiceMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/HealthcareServiceMapper.xml index 5e6d647c..b31d5889 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/HealthcareServiceMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/HealthcareServiceMapper.xml @@ -4,4 +4,24 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/LocationMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/LocationMapper.xml index 54dbe4bf..03c455f8 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/LocationMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/LocationMapper.xml @@ -4,4 +4,35 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/OrganizationMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/OrganizationMapper.xml index 8b78f76f..658afa70 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/OrganizationMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/OrganizationMapper.xml @@ -3,6 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<<<<<<< HEAD +======= + + + +>>>>>>> upstream/develop \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PatientMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PatientMapper.xml index 5c33d9d6..ef6fec89 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PatientMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PatientMapper.xml @@ -4,4 +4,9 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefAppMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PatientStudentMapper.xml similarity index 69% rename from openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefAppMapper.xml rename to openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PatientStudentMapper.xml index 217b4b4d..ef22ba84 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ChargeItemDefAppMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PatientStudentMapper.xml @@ -2,6 +2,6 @@ - + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PractitionerRoleMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PractitionerRoleMapper.xml index befdd602..928b61a0 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PractitionerRoleMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/PractitionerRoleMapper.xml @@ -3,5 +3,51 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/clinical/ConditionNoDefinitionMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/clinical/ConditionNoDefinitionMapper.xml new file mode 100644 index 00000000..eed9436d --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/clinical/ConditionNoDefinitionMapper.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/document/DocInventoryItemStaticMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/document/DocInventoryItemStaticMapper.xml new file mode 100644 index 00000000..85559802 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/document/DocInventoryItemStaticMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/document/VitalSignsMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/document/VitalSignsMapper.xml new file mode 100644 index 00000000..bc39dd08 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/document/VitalSignsMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/financial/ThreePartPayCallBackMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/financial/ThreePartPayCallBackMapper.xml new file mode 100644 index 00000000..b066c855 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/financial/ThreePartPayCallBackMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/medication/MedicationMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/medication/MedicationMapper.xml index 285c9a75..e5b8b8c2 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/medication/MedicationMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/medication/MedicationMapper.xml @@ -42,4 +42,33 @@ ON T1.medication_product_id = T2.id WHERE T1.delete_flag = 0 + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/nenu/GfRatioApplicationMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/nenu/GfRatioApplicationMapper.xml new file mode 100644 index 00000000..8bafb97d --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/nenu/GfRatioApplicationMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/nenu/GfRatioMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/nenu/GfRatioMapper.xml new file mode 100644 index 00000000..b70348e5 --- /dev/null +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/nenu/GfRatioMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/ActivityDefinitionMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/ActivityDefinitionMapper.xml index 586740dc..76da7f77 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/ActivityDefinitionMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/ActivityDefinitionMapper.xml @@ -12,4 +12,22 @@ AND NAME = #{activityName} LIMIT 1 + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/InventoryItemMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/InventoryItemMapper.xml index 39dafc5d..c1b46cdc 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/InventoryItemMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/InventoryItemMapper.xml @@ -3,5 +3,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + \ No newline at end of file diff --git a/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/SupplyRequestMapper.xml b/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/SupplyRequestMapper.xml index fc4d2278..c37e6594 100644 --- a/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/SupplyRequestMapper.xml +++ b/openhis-server-new/openhis-domain/src/main/resources/mapper/workflow/SupplyRequestMapper.xml @@ -3,5 +3,215 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/openhis-server-new/pom.xml b/openhis-server-new/pom.xml index 2815c022..a9bb21f4 100644 --- a/openhis-server-new/pom.xml +++ b/openhis-server-new/pom.xml @@ -332,6 +332,7 @@ + openhis-miniapp openhis-application openhis-domain openhis-common diff --git a/openhis-ui-vue3/.env.dev b/openhis-ui-vue3/.env.dev index 681c2ba8..e0f1251a 100644 --- a/openhis-ui-vue3/.env.dev +++ b/openhis-ui-vue3/.env.dev @@ -1,5 +1,5 @@ # 页面标题 -VITE_APP_TITLE = 医院信息管理系统 +VITE_APP_TITLE =医院信息管理系统 # 开发环境配置 VITE_APP_ENV = 'dev' diff --git a/openhis-ui-vue3/index.html b/openhis-ui-vue3/index.html index 4406ebfd..56609485 100644 --- a/openhis-ui-vue3/index.html +++ b/openhis-ui-vue3/index.html @@ -9,7 +9,8 @@ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> - + + 医院信息管理系统 + + + + + 新增记录 + + + 保存记录 + + + + + + + + + + + + + + + + + + 总分: + {{ totalScore }} + + + + + + + + + + + + + + + +
+ 护士签字: + +
+
+
+ + + + + 备注: + + + +
    +
  • {{ item }}
  • +
+
+
+ + + + + + + + + + diff --git a/openhis-ui-vue3/src/views/hospitalRecord/HospitalRecordForm.vue b/openhis-ui-vue3/src/template/HospitalRecordForm.vue similarity index 83% rename from openhis-ui-vue3/src/views/hospitalRecord/HospitalRecordForm.vue rename to openhis-ui-vue3/src/template/HospitalRecordForm.vue index 38cff998..ff8eba3c 100644 --- a/openhis-ui-vue3/src/views/hospitalRecord/HospitalRecordForm.vue +++ b/openhis-ui-vue3/src/template/HospitalRecordForm.vue @@ -7,7 +7,9 @@ - + + +