提交merge1.3

This commit is contained in:
2025-12-27 15:31:06 +08:00
parent cbd3e7f981
commit 79ea4ed4f7
148 changed files with 6722 additions and 10861 deletions

View File

@@ -11,7 +11,6 @@ public enum TenantOptionDict {
* 医院名称
*/
YB_HOSPITAL_NAME("hospitalName", "医保-医院名称", 0),
/**
* 医保-医疗机构等级(3101接口)
*/
@@ -24,37 +23,30 @@ public enum TenantOptionDict {
* 电子发票appid
*/
EINVOICE_APP_ID("app_id", "电子发票-appid", 3),
/**
* 电子发票key
*/
EINVOICE_KEY("key", "电子发票-key", 4),
/**
* 电子发票url
*/
EINVOICE_URL("url", "电子发票-url", 5),
/**
* 医保开关
*/
YB_SWITCH("yb_switch", "医保开关", 6),
/**
* 电子地址
*/
ELE_ADDRESS("eleAddress", "电子处方-请求地址", 22),
/**
* 服务地址
*/
ADDRESS("address", "服务地址", 23),
/**
* 超时时间
*/
TIME("time", "超时时间", 24),
/**
* 是否加密
*/
@@ -63,32 +55,26 @@ public enum TenantOptionDict {
* 医保区划
*/
YB_INSUPLC_ADMDVS("insuplc_admdvs", "医保-区划", 26),
/**
* 电子处方appId
*/
ELE_PRE_APP_ID("pre_app_id", "电子处方-appId", 27),
/**
* 电子处方appSecret
*/
ELE_PRE_APP_SECRET("pre_app_secret", "电子处方-appSecret", 28),
/**
* 电子处方私钥
*/
ELE_APP_PRVKEY("APP_PRVKEY", "电子处方-私钥", 29),
/**
* 电子处方公钥
*/
ELE_PLAF_PUBKEY("PLAF_PUBKEY", "电子处方-公钥", 30),
/**
* 医院等级
*/
EINVOICE_HOSPITAL_LV("hospital_lv", "电子发票-医院等级", 39),
/**
* 无视LIS&PACS报错
*/
@@ -160,27 +146,14 @@ public enum TenantOptionDict {
/**
* 电子发票开关
*/
<<<<<<< HEAD
INVOICE_SWITCH("invoiceSwitch", "电子发票开关 (0:关闭 1:开启)", 56),
=======
INVOICE_SWITCH("invoiceSwitch", "电子发票开关", 56),
>>>>>>> v1.3
/**
* 医嘱定价来源
*/
ORDER_PRICING_SOURCE("orderPricingSource", "定价来源 batchSellingPrice/retailPrice", 57),
/**
* 三方支付(签到)
*/
<<<<<<< HEAD
THREE_PART_SIGN_URL("threePartSignUrl", "三方支付GET请求", 58),
/**
* 三方支付(消费)
*/
THREE_PART_PAY_URL("threePartPayUrl", "三方支付GET请求", 59),
=======
THREE_PART_SIGN_URL("threePartSignUrl", "三方支付【签到】请求路径", 58),
/**
* 三方支付(签到)
@@ -210,14 +183,9 @@ public enum TenantOptionDict {
* 三方支付(消费)
*/
THREE_PART_PAY_MAPPING_METHOD("threePartPayMappingMethod", "三方支付【消费】请求方式", 65),
>>>>>>> v1.3
/**
* 三方支付(退费)
*/
<<<<<<< HEAD
THREE_PART_RETURN_URL("threePartReturnUrl", "三方支付GET请求", 60),
=======
THREE_PART_RETURN_URL("threePartReturnUrl", "三方支付【退费】请求路径", 66),
/**
* 三方支付(退费)
@@ -231,14 +199,9 @@ public enum TenantOptionDict {
* 三方支付(退费)
*/
THREE_PART_RETURN_MAPPING_METHOD("threePartReturnMappingMethod", "三方支付【退费】请求方式", 69),
>>>>>>> v1.3
/**
* 三方支付(隔天退费)
*/
<<<<<<< HEAD
THREE_PART_NEXT_DAY_RETURN_URL("threePartNextDayReturnUrl", "三方支付GET请求", 61),
=======
THREE_PART_NEXT_DAY_RETURN_URL("threePartNextDayReturnUrl", "三方支付【隔天退费】请求路径", 70),
/**
* 三方支付(隔天退费)
@@ -252,14 +215,9 @@ public enum TenantOptionDict {
* 三方支付(隔天退费)
*/
THREE_PART_NEXT_DAY_RETURN_MAPPING_METHOD("threePartNextDayReturnMappingMethod", "三方支付【隔天退费】请求方式", 73),
>>>>>>> v1.3
/**
* 三方支付路径(支付结果查询)
*/
<<<<<<< HEAD
THREE_PART_PAY_QUERY_URL("threePartPayQueryUrl", "三方支付GET请求", 62),
=======
THREE_PART_PAY_QUERY_URL("threePartPayQueryUrl", "三方支付【支付结果查询】请求路径", 74),
/**
* 三方支付(支付结果查询)
@@ -273,14 +231,9 @@ public enum TenantOptionDict {
* 三方支付(支付结果查询)
*/
THREE_PART_PAY_QUERY_MAPPING_METHOD("threePartPayQueryMappingMethod", "三方支付【支付结果查询】请求方式", 77),
>>>>>>> v1.3
/**
* 三方支付路径(退费结果查询)
*/
<<<<<<< HEAD
THREE_PART_RETURN_QUERY_URL("threePartReturnQueryUrl", "三方支付GET请求", 63),
=======
THREE_PART_RETURN_QUERY_URL("threePartReturnQueryUrl", "三方支付【退费结果查询】请求路径", 78),
/**
* 三方支付(退费结果查询)
@@ -294,19 +247,9 @@ public enum TenantOptionDict {
* 三方支付(退费结果查询)
*/
THREE_PART_RETURN_QUERY_MAPPING_METHOD("threePartReturnQueryMappingMethod", "三方支付【退费结果查询】请求方式", 81),
>>>>>>> v1.3
/**
* 三方支付路径(隔天退费结果查询)
*/
<<<<<<< HEAD
THREE_PART_NEXT_DAY_RETURN_QUERY_URL("threePartNextDayReturnQueryUrl", "三方支付GET请求", 64),
/**
* 三方支付参数
*/
THREE_PART_PARAM("threePartParam", "三方支付GET请求", 65);
=======
THREE_PART_NEXT_DAY_RETURN_QUERY_URL("threePartNextDayReturnQueryUrl", "三方支付【隔天退费结果查询】请求路径", 82),
/**
* 三方支付(隔天退费结果查询)
@@ -321,7 +264,6 @@ public enum TenantOptionDict {
*/
THREE_PART_NEXT_DAY_RETURN_QUERY_MAPPING_METHOD("threePartNextDayReturnQueryMappingMethod", "三方支付【隔天退费结果查询】请求方式",
85),
/**
* 三方支付(签出)
*/
@@ -338,32 +280,26 @@ public enum TenantOptionDict {
* 三方支付(签出)
*/
THREE_PART_SIGN_OUT_MAPPING_METHOD("threePartSignOutMappingMethod", "三方支付【签出】请求方式", 89),
/**
* 三方支付(签出)
*/
YB_INPATIENT_SETTLEMENT_UP_URL("ybInpatientSetlUp", "选填4101或4101A", 90),
/**
* PACS查看报告地址
*/
PACS_REPORT_URL("pacsReportUrl", "PACS查看报告地址", 91),
/**
* LIS查看报告地址
*/
LIS_REPORT_URL("lisReportUrl", "LIS查看报告地址", 92),
/**
* 开药时药房允许多选开关
*/
PHARMACY_MULTIPLE_CHOICE_SWITCH("pharmacyMultipleChoiceSwitch", "开药时药房允许多选开关", 93),
/**
* PEIS服务地址
*/
PEIS_SERVER_URL("peisServerUrl", "PEIS服务地址", 94);
>>>>>>> v1.3
private final String code;
private final String name;

View File

@@ -117,8 +117,8 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi
*/
@Override
public List<EncounterPatientPrescriptionDto> getEncounterPatientPrescription(Long encounterId) {
List<EncounterPatientPrescriptionDto> prescriptionDtoList =
outpatientChargeAppMapper.selectEncounterPatientPrescription(encounterId,
List<EncounterPatientPrescriptionDto> prescriptionDtoList
= outpatientChargeAppMapper.selectEncounterPatientPrescription(encounterId,
ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.MEDICATION.getValue(),
ChargeItemContext.DEVICE.getValue(), ChargeItemContext.REGISTER.getValue(),
ChargeItemStatus.PLANNED.getValue(), ChargeItemStatus.BILLABLE.getValue(),
@@ -214,8 +214,6 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
<<<<<<< HEAD
=======
/**
* 根据就诊id查询患者处方列表并新增字段应收金额实收金额优惠金额折扣率
@@ -257,7 +255,8 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi
*
* @param discountRate 折扣率
* @return 调整后的折扣率0.05的倍数)
**/
*
*/
private String returnDiscountRate(BigDecimal discountRate) {
BigDecimal compareValue = BigDecimal.valueOf(0.05);
BigDecimal remainder = discountRate.remainder(compareValue);
@@ -278,5 +277,4 @@ public class OutpatientChargeAppServiceImpl implements IOutpatientChargeAppServi
return df.format(reActuarial);
}
}
>>>>>>> v1.3
}

View File

@@ -16,7 +16,9 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class CurrentDayEncounterDto {
/** 租户ID */
/**
* 租户ID
*/
private Integer tenantId;
/**
@@ -134,43 +136,5 @@ public class CurrentDayEncounterDto {
* 电话
*/
private String phone;
<<<<<<< HEAD
/**
* 退号日期/时间
*/
private Date returnDate;
/**
* 退号原因
*/
private String returnReason;
/**
* 退号操作人
*/
private String operatorName;
/**
* 退号操作工号(用户账号)
*/
private String operatorId;
/**
* 退款金额
*/
private BigDecimal refundAmount;
/**
* 合同编码(费用性质代码)
*/
private String contractNo;
/**
* 退款方式(多个支付方式用逗号分隔)
*/
private String refundMethod;
=======
>>>>>>> v1.3
}

View File

@@ -23,142 +23,191 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class EncounterPatientPrescriptionDto {
/** 收费项目类型 */
/**
* 收费项目类型
*/
private Integer contextEnum;
private String contextEnum_enumText;
/** 收费状态 */
/**
* 收费状态
*/
private Integer statusEnum;
private String statusEnum_enumText;
/** 就诊ID */
/**
* 就诊ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long encounterId;
/** 患者id */
/**
* 患者id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long patientId;
/** ID */
/**
* ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 开立科室 */
/**
* 开立科室
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long requestingOrgId;
/** 数量 */
/**
* 数量
*/
private Long quantityValue;
/** 单位 */
/**
* 单位
*/
@Dict(dictCode = "unit_code")
private String quantityUnit;
private String quantityUnit_dictText;
/** 单价 */
/**
* 单价
*/
private BigDecimal unitPrice;
/** 总价 */
/**
* 总价
*/
private BigDecimal totalPrice;
/** 处方号 */
/**
* 处方号
*/
private String prescriptionNo;
/** 业务编码 */
/**
* 业务编码
*/
private String busNo;
/** 收款人ID */
/**
* 收款人ID
*/
@JsonSerialize(using = ToStringSerializer.class)
@Dict(dictCode = "id", dictTable = "adm_practitioner", dictText = "name")
private Long entererId;
private String entererId_dictText;
/** 开立时间 */
/**
* 开立时间
*/
private Date enteredDate;
/** 收费时间 */
/**
* 收费时间
*/
private Date billDate;
/** 关联账户ID */
/**
* 关联账户ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long accountId;
/** 物品编码 */
/**
* 物品编码
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long itemId;
/** 物品名称 */
/**
* 物品名称
*/
private String itemName;
/** 特病标识 */
/**
* 特病标识
*/
@Dict(dictCode = "med_type")
private String medTypeCode;
private String medTypeCode_dictText;
<<<<<<< HEAD
=======
>>>>>>> v1.3
/** 用法 */
/**
* 用法
*/
@Dict(dictCode = "method_code")
private String methodCode;
private String methodCode_dictText;
<<<<<<< HEAD
private String dose;
@Dict(dictCode = "unit_code")
private String doseUnitCode;
/** 单次剂量单位 */
private String doseUnitCode_dictText;
/** 频次 */
private String rateCode;
=======
/** 剂量 */
/**
* 剂量
*/
private String dose;
/** 剂量单位 */
/**
* 剂量单位
*/
@Dict(dictCode = "unit_code")
private String doseUnitCode;
private String doseUnitCode_dictText;
/** 频次 */
/**
* 频次
*/
private String rateCode;
>>>>>>> v1.3
/** 合同编码 */
/**
* 合同编码
*/
private String contractNo;
/** 医保编码 */
/**
* 医保编码
*/
private String ybNo;
/** 合同名称 */
/**
* 合同名称
*/
private String contractName;
/** 服务所在表 */
/**
* 服务所在表
*/
private String serviceTable;
/** 服务所在表对应的id */
/**
* 服务所在表对应的id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long serviceId;
/** 付款id */
/**
* 付款id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long paymentId;
<<<<<<< HEAD
=======
/** 实收金额 */
/**
* 实收金额
*/
private BigDecimal receivedAmount = BigDecimal.ZERO;
/** 优惠金额 */
/**
* 优惠金额
*/
private BigDecimal discountAmount = BigDecimal.ZERO;
/** 应收金额 */
/**
* 应收金额
*/
private BigDecimal receivableAmount = BigDecimal.ZERO;
/** 折扣率 */
/**
* 折扣率
*/
@Dict(dictCode = "charge_discount")
private String discountRate = "0";
private String discountRate_dictText;
>>>>>>> v1.3
}

View File

@@ -188,8 +188,6 @@ public interface ICommonService {
* @return 诊疗项目
*/
R<?> getActivityDefinition();
<<<<<<< HEAD
=======
/**
* 查询备份单号
@@ -205,5 +203,4 @@ public interface ICommonService {
* @return 处理结果
*/
R<?> lotNumberMatch(List<Long> encounterIdList);
>>>>>>> v1.3
}

View File

@@ -89,8 +89,6 @@ public class CommonServiceImpl implements ICommonService {
@Resource
private ISupplierService supplierService;
<<<<<<< HEAD
=======
@Resource
private IDocInventoryItemStaticService iDocInventoryItemStaticService;
@@ -100,7 +98,6 @@ public class CommonServiceImpl implements ICommonService {
@Resource
private IDeviceDispenseService deviceDispenseService;
>>>>>>> v1.3
/**
* 获取药房列表
*
@@ -119,7 +116,6 @@ public class CommonServiceImpl implements ICommonService {
locationDtoList.add(locationDto);
}
return locationDtoList;
}
@@ -409,8 +405,8 @@ public class CommonServiceImpl implements ICommonService {
@Override
public R<?> getContractMetadata() {
// TODO: Contract表的基础数据维护还没做,具体不知道状态字段的取值是什么,先查询默认值为0的数据
List<Contract> ContractList =
contractMapper.selectList(new LambdaQueryWrapper<Contract>().eq(Contract::getStatusEnum, 0));
List<Contract> ContractList
= contractMapper.selectList(new LambdaQueryWrapper<Contract>().eq(Contract::getStatusEnum, 0));
// 复制同名字段并 return
return R.ok(ContractList.stream().map(contract -> {
ContractMetadata metadata = new ContractMetadata();
@@ -470,8 +466,8 @@ public class CommonServiceImpl implements ICommonService {
// 查询当前登录者管理的病区
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
List<Long> locationIds = practitionerRoleService.getLocationIdsByPractitionerId(practitionerId);
List<Location> locationList =
locationService.getLocationList(locationIds, Collections.singletonList(LocationStatus.ACTIVE.getValue()));
List<Location> locationList
= locationService.getLocationList(locationIds, Collections.singletonList(LocationStatus.ACTIVE.getValue()));
List<Location> wardList = new ArrayList<>();
for (Location ward : locationList) {
if (LocationForm.WARD.getValue().equals(ward.getFormEnum())) {
@@ -563,8 +559,6 @@ public class CommonServiceImpl implements ICommonService {
return R.ok(commonAppMapper.getActivityDefinition(PublicationStatus.ACTIVE.getValue()));
}
<<<<<<< HEAD
=======
/**
* 查询备份单号
*
@@ -572,8 +566,8 @@ public class CommonServiceImpl implements ICommonService {
*/
@Override
public R<?> getBackupNoList() {
List<DocInventoryItemStatic> docInventoryItemStaticList =
iDocInventoryItemStaticService.list(new LambdaQueryWrapper<DocInventoryItemStatic>()
List<DocInventoryItemStatic> docInventoryItemStaticList
= iDocInventoryItemStaticService.list(new LambdaQueryWrapper<DocInventoryItemStatic>()
.eq(DocInventoryItemStatic::getDeleteFlag, DelFlag.NO.getCode())
.eq(DocInventoryItemStatic::getTenantId, SecurityUtils.getLoginUser().getTenantId()));
if (docInventoryItemStaticList.isEmpty()) {
@@ -601,11 +595,11 @@ public class CommonServiceImpl implements ICommonService {
// 药品批号匹配
if (medicationDispenseList != null && !medicationDispenseList.isEmpty()) {
// 获取待发放的药品id
List<Long> medicationIdList =
medicationDispenseList.stream().map(MedicationDispense::getMedicationId).distinct().toList();
List<Long> medicationIdList
= medicationDispenseList.stream().map(MedicationDispense::getMedicationId).distinct().toList();
// 获取发药药房
List<Long> locationIdList =
medicationDispenseList.stream().map(MedicationDispense::getLocationId).distinct().toList();
List<Long> locationIdList
= medicationDispenseList.stream().map(MedicationDispense::getLocationId).distinct().toList();
// 查询待发放药品的库存明细
List<InventoryDetailDto> inventoryDetailList = commonAppMapper
@@ -653,8 +647,8 @@ public class CommonServiceImpl implements ICommonService {
}
// 获取库存剩余数量
BigDecimal remainingInventoryQuantity =
inventoryDetailDto.getInventoryQuantity().subtract(dispenseQuantity);
BigDecimal remainingInventoryQuantity
= inventoryDetailDto.getInventoryQuantity().subtract(dispenseQuantity);
// 如果剩余库存数量大于等于0则说明当前批号库存充足
if (remainingInventoryQuantity.compareTo(BigDecimal.ZERO) >= 0) {
medicationDispense.setLotNumber(inventoryDetailDto.getInventoryLotNumber());
@@ -716,11 +710,11 @@ public class CommonServiceImpl implements ICommonService {
// 耗材批号匹配
if (deviceDispenseList != null && !deviceDispenseList.isEmpty()) {
// 获取待发放的耗材id
List<Long> deviceIdList =
deviceDispenseList.stream().map(DeviceDispense::getDeviceDefId).distinct().toList();
List<Long> deviceIdList
= deviceDispenseList.stream().map(DeviceDispense::getDeviceDefId).distinct().toList();
// 获取发耗材房
List<Long> locationIdList =
deviceDispenseList.stream().map(DeviceDispense::getLocationId).distinct().toList();
List<Long> locationIdList
= deviceDispenseList.stream().map(DeviceDispense::getLocationId).distinct().toList();
// 查询待发放耗材的库存明细
List<InventoryDetailDto> inventoryDetailList = commonAppMapper.selectDeviceInventoryDetail(deviceIdList,
@@ -742,8 +736,8 @@ public class CommonServiceImpl implements ICommonService {
DeviceDispense deviceDispense = deviceDispenseList.get(currentIndex);
currentIndex++;
// 根据发放耗材和发放耗材房做key
String inventoryKey =
deviceDispense.getDeviceDefId() + CommonConstants.Common.DASH + deviceDispense.getLocationId();
String inventoryKey
= deviceDispense.getDeviceDefId() + CommonConstants.Common.DASH + deviceDispense.getLocationId();
// 查询对应的库存信息
if (!inventoryDetailMap.containsKey(inventoryKey)) {
return R.fail("耗材库存不存在耗材ID: " + deviceDispense.getDeviceDefId());
@@ -768,8 +762,8 @@ public class CommonServiceImpl implements ICommonService {
}
// 获取库存剩余数量
BigDecimal remainingInventoryQuantity =
inventoryDetailDto.getInventoryQuantity().subtract(dispenseQuantity);
BigDecimal remainingInventoryQuantity
= inventoryDetailDto.getInventoryQuantity().subtract(dispenseQuantity);
// 如果剩余库存数量大于等于0则说明当前批号库存充足
if (remainingInventoryQuantity.compareTo(BigDecimal.ZERO) >= 0) {
deviceDispense.setLotNumber(inventoryDetailDto.getInventoryLotNumber());
@@ -825,5 +819,4 @@ public class CommonServiceImpl implements ICommonService {
}
return R.ok();
}
>>>>>>> v1.3
}

View File

@@ -220,40 +220,6 @@ public class CommonAppController {
@GetMapping("/advice-print")
public R<?> getAdvicePrintInfo(@RequestParam(value = "requestIds") List<Long> requestIds, String isPrescription) {
return commonService.getAdvicePrintInfo(requestIds, isPrescription);
<<<<<<< HEAD
}
/**
* 查询参与者签名
*
* @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();
=======
>>>>>>> v1.3
}
/**

View File

@@ -105,8 +105,6 @@ public interface CommonAppMapper {
* @return 诊疗项目
*/
List<ActivityDefinitionDto> getActivityDefinition(@Param("statusEnum") Integer statusEnum);
<<<<<<< HEAD
=======
/**
* 查询药品库存详细信息
@@ -129,5 +127,4 @@ public interface CommonAppMapper {
*/
List<InventoryDetailDto> selectDeviceInventoryDetail(@Param("deviceIdList") List<Long> deviceIdList,
@Param("locationIdList") List<Long> locationIdList, @Param("active") Integer active);
>>>>>>> v1.3
}

View File

@@ -13,10 +13,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<<<<<<< HEAD
=======
import com.core.common.enums.DelFlag;
>>>>>>> v1.3
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
@@ -131,10 +128,9 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService {
// .map(category -> new DeviceManageInitDto.deviceCategory(category.getValue(), category.getInfo()))
// .collect(Collectors.toList());
// deviceManageInitDto.setDeviceCategories(deviceCategories);
// 获取器材
List<SysDictData> deviceList =
sysDictTypeService.selectDictDataByType(CommonConstants.DictName.DEVICE_CATEGORY_CODE);
List<SysDictData> deviceList
= sysDictTypeService.selectDictDataByType(CommonConstants.DictName.DEVICE_CATEGORY_CODE);
// 从字典中获取器材分类
List<DeviceManageInitDto.dictCategoryCode> deviceCategories = deviceList.stream()
.map(category -> new DeviceManageInitDto.dictCategoryCode(category.getDictValue(), category.getDictLabel()))
@@ -176,8 +172,8 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService {
new HashSet<>(Arrays.asList("bus_no", "name", "py_str", "wb_str")), request);
// 分页查询
IPage<DeviceManageDto> deviceManagePage =
deviceManageMapper.getDevicePage(new Page<>(pageNo, pageSize), queryWrapper);
IPage<DeviceManageDto> deviceManagePage
= deviceManageMapper.getDevicePage(new Page<>(pageNo, pageSize), queryWrapper);
deviceManagePage.getRecords().forEach(e -> {
// 高值器材标志枚举类回显赋值
@@ -219,8 +215,8 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService {
// 调用医保目录对照接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch) && StringUtils.isNotEmpty(deviceDefinition.getYbNo())) {
R<?> r =
ybService.directoryCheck(CommonConstants.TableName.ADM_DEVICE_DEFINITION, deviceDefinition.getId());
R<?> r
= ybService.directoryCheck(CommonConstants.TableName.ADM_DEVICE_DEFINITION, deviceDefinition.getId());
if (200 != r.getCode()) {
throw new RuntimeException("医保目录对照接口异常");
}
@@ -344,8 +340,8 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService {
// 调用医保目录对照接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch) && StringUtils.isNotEmpty(deviceDefinition.getYbNo())) {
R<?> r =
ybService.directoryCheck(CommonConstants.TableName.ADM_DEVICE_DEFINITION, deviceDefinition.getId());
R<?> r
= ybService.directoryCheck(CommonConstants.TableName.ADM_DEVICE_DEFINITION, deviceDefinition.getId());
if (200 != r.getCode()) {
throw new RuntimeException("医保目录对照接口异常");
}
@@ -393,13 +389,13 @@ public class DeviceManageAppServiceImpl implements IDeviceManageAppService {
List<Location> locationList = locationService.list(new LambdaQueryWrapper<Location>()
.eq(Location::getDeleteFlag, DelFlag.NO.getCode()).orderByAsc(Location::getId));
Long defaultLocationId = locationList.stream().findFirst().orElse(new Location()).getId();
Map<String, List<Location>> locationNameMap =
locationList.stream().collect(Collectors.groupingBy(Location::getName));
Map<String, List<Location>> locationNameMap
= locationList.stream().collect(Collectors.groupingBy(Location::getName));
// 创建表数据
for (DeviceImportDto importDto : importDtoList) {
// 创建器材定义
DeviceDefinition deviceDefinition =
createDeviceDefinitionEntity(importDto, orgId, defaultLocationId, locationNameMap);
DeviceDefinition deviceDefinition
= createDeviceDefinitionEntity(importDto, orgId, defaultLocationId, locationNameMap);
deviceDefinitionService.save(deviceDefinition);
// 创建费用定价和详情
chargeItemDefinitionService.addChargeItemDefinitionAndDetail(importDto.getName(), importDto.getTypeCode(),

View File

@@ -100,8 +100,8 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
diagnosisTreatmentInitDto.setExeOrganizations(exeOrganizations);
// 获取诊目录疗分类
List<SysDictData> diagnosisList =
sysDictTypeService.selectDictDataByType(CommonConstants.DictName.DIAGNOSIS_CATEGORY_CODE);
List<SysDictData> diagnosisList
= sysDictTypeService.selectDictDataByType(CommonConstants.DictName.DIAGNOSIS_CATEGORY_CODE);
// 获取诊疗录疗分类
List<DiagnosisTreatmentInitDto.dictCategoryCode> diagnosisCategories = diagnosisList.stream()
.map(category -> new DiagnosisTreatmentInitDto.dictCategoryCode(category.getDictValue(),
@@ -143,7 +143,6 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
// diseaseTreatmentCategories.add(diseaseTreatmentCategory2);
//
// diagnosisTreatmentInitDto.setDiseaseTreatmentCategoryList(diseaseTreatmentCategories);
// 获取类型
List<DiagnosisTreatmentInitDto.statusEnumOption> typeEnumOptions = Stream.of(ActivityType.values())
.map(status -> new DiagnosisTreatmentInitDto.statusEnumOption(status.getValue(), status.getInfo()))
@@ -178,8 +177,8 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
searchKey, new HashSet<>(Arrays.asList("bus_no", "name", "py_str", "wb_str")), request);
// 分页查询
IPage<DiagnosisTreatmentDto> diseaseTreatmentPage =
activityDefinitionManageMapper.getDiseaseTreatmentPage(new Page<DiagnosisTreatmentDto>(pageNo, pageSize), queryWrapper);
IPage<DiagnosisTreatmentDto> diseaseTreatmentPage
= activityDefinitionManageMapper.getDiseaseTreatmentPage(new Page<DiagnosisTreatmentDto>(pageNo, pageSize), queryWrapper);
diseaseTreatmentPage.getRecords().forEach(e -> {
// 医保标记枚举类回显赋值
@@ -396,8 +395,8 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
@Override
public R<?> importData(MultipartFile file) {
// 读取文件
R<List<DiagnosisTreatmentImportDto>> readResult =
CommonUtil.readImportedExcelFile(file, DiagnosisTreatmentImportDto.class);
R<List<DiagnosisTreatmentImportDto>> readResult
= CommonUtil.readImportedExcelFile(file, DiagnosisTreatmentImportDto.class);
if (R.SUCCESS != readResult.getCode()) {
return readResult;
}
@@ -447,11 +446,7 @@ public class DiagTreatMAppServiceImpl implements IDiagTreatMAppService {
if (!serviceRequestList.isEmpty()) {
if (serviceRequestList.stream().anyMatch(
serviceRequest -> RequestStatus.COMPLETED.getValue().equals(serviceRequest.getStatusEnum()))) {
<<<<<<< HEAD
return R.ok(1, "医生开过该诊疗项目,不可编辑");
=======
return R.ok(1, "医生开过该诊疗项目,不可编辑");
>>>>>>> v1.3
}
}
return R.ok();

View File

@@ -12,10 +12,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<<<<<<< HEAD
=======
import com.core.common.enums.DelFlag;
>>>>>>> v1.3
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
@@ -132,8 +129,8 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
.collect(Collectors.toList());
// 获取药品分类
List<SysDictData> medicalList =
sysDictTypeService.selectDictDataByType(CommonConstants.DictName.MED_CATEGORY_CODE);
List<SysDictData> medicalList
= sysDictTypeService.selectDictDataByType(CommonConstants.DictName.MED_CATEGORY_CODE);
// 获取药品分类
List<MedicationManageInitDto.dictCategoryCode> medicationCategories = medicalList.stream().map(
category -> new MedicationManageInitDto.dictCategoryCode(category.getDictValue(), category.getDictLabel()))
@@ -156,8 +153,8 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
.collect(Collectors.toList());
// 住院临时医嘱拆分属性的枚举
List<MedicationManageInitDto.statusEnumOption> tempOrderSplitPropertyOptions =
Stream.of(TempOrderSplitPropertyCode.values())
List<MedicationManageInitDto.statusEnumOption> tempOrderSplitPropertyOptions
= Stream.of(TempOrderSplitPropertyCode.values())
.map(status -> new MedicationManageInitDto.statusEnumOption(status.getValue(), status.getInfo()))
.collect(Collectors.toList());
@@ -200,8 +197,8 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
"merchandise_py_str", "merchandise_wb_str")),
null);
IPage<MedicationManageDto> medicationManageDtoPage =
medicationManageSearchMapper.getPage(new Page<>(pageNo, pageSize), queryWrapper);
IPage<MedicationManageDto> medicationManageDtoPage
= medicationManageSearchMapper.getPage(new Page<>(pageNo, pageSize), queryWrapper);
// 枚举类回显赋值
medicationManageDtoPage.getRecords().forEach(e -> {
@@ -282,8 +279,8 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
boolean updateMedicationDefinition = medicationDefinitionService.updateById(medicationDefinition);
if (updateMedicationDefinition) {
// 调用医保目录对照接口
String ybSwitch =
SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
String ybSwitch
= SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch) && StringUtils.isNotEmpty(medicationDefinition.getYbNo())) {
R<?> r = ybService.directoryCheck(CommonConstants.TableName.MED_MEDICATION_DEFINITION,
medicationDefinition.getId());
@@ -453,8 +450,8 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
HttpServletResponse response) {
// 获取租户ID
Integer tenantId = SecurityUtils.getLoginUser().getTenantId();
List<MedicationManageDto> list =
medicationManageSearchMapper.getList(searchKey, ybMatchFlag, statusEnum, categoryCode, tenantId);
List<MedicationManageDto> list
= medicationManageSearchMapper.getList(searchKey, ybMatchFlag, statusEnum, categoryCode, tenantId);
ExcelUtil<MedicationManageDto> util = new ExcelUtil<>(MedicationManageDto.class);
util.exportExcel(response, list, "药品目录");
return null;
@@ -484,16 +481,16 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
List<Location> locationList = locationService.list(new LambdaQueryWrapper<Location>()
.eq(Location::getDeleteFlag, DelFlag.NO.getCode()).orderByAsc(Location::getId));
Long defaultLocationId = locationList.stream().findFirst().orElse(new Location()).getId();
Map<String, List<Location>> locationNameMap =
locationList.stream().collect(Collectors.groupingBy(Location::getName));
Map<String, List<Location>> locationNameMap
= locationList.stream().collect(Collectors.groupingBy(Location::getName));
// 创建表数据
for (MedicationImportDto importDto : importDtoList) {
// 创建药品定义
MedicationDefinition medicationDefinition = createMedicationDefinitionEntity(importDto);
medicationDefinitionService.save(medicationDefinition);
// 创建药品
Medication medication =
createMedicationEntity(importDto, medicationDefinition.getId(), defaultLocationId, locationNameMap);
Medication medication
= createMedicationEntity(importDto, medicationDefinition.getId(), defaultLocationId, locationNameMap);
medicationService.save(medication);
// 创建费用定价和详情
chargeItemDefinitionService.addChargeItemDefinitionAndDetail(importDto.getName(), importDto.getTypeCode(),
@@ -523,8 +520,8 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
*/
@Override
public R<?> validateMedicationEdit(Long medicationId) {
List<MedicationRequest> medicationRequestList =
medicationRequestService.getMedRequestByMedicationId(medicationId);
List<MedicationRequest> medicationRequestList
= medicationRequestService.getMedRequestByMedicationId(medicationId);
if (!medicationRequestList.isEmpty()) {
if (medicationRequestList.stream()
.allMatch(x -> x.getStatusEnum().equals(RequestStatus.COMPLETED.getValue()))) {
@@ -761,8 +758,8 @@ public class MedicationManageAppServiceImpl implements IMedicationManageAppServi
new LambdaQueryWrapper<MedicationDefinition>().eq(MedicationDefinition::getName, importDto.getName())
.eq(MedicationDefinition::getManufacturerText, importDto.getManufacturerText()));
if (!medicationDefinitionList.isEmpty()) {
List<Medication> medicationList =
medicationService.list(new LambdaQueryWrapper<Medication>()
List<Medication> medicationList
= medicationService.list(new LambdaQueryWrapper<Medication>()
.in(Medication::getMedicationDefId,
medicationDefinitionList.stream().map(MedicationDefinition::getId)
.collect(Collectors.toList()))

View File

@@ -22,271 +22,414 @@ import javax.validation.constraints.NotNull;
@Accessors(chain = true)
public class MedicationManageDto {
/** ID */
/**
* ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 药品编码 */
/**
* 药品编码
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long medicationDefId;
/** 药品状态 */
/**
* 药品状态
*/
private Integer statusEnum;
private String statusEnum_enumText;
/** 所属科室 */
/**
* 所属科室
*/
@Dict(dictTable = "adm_organization", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;
private String orgId_dictText;
/** 所在位置 */
/**
* 所在位置
*/
@Dict(dictTable = "adm_location", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
private String locationId_dictText;
/** 剂型 */
/**
* 剂型
*/
@Dict(dictCode = "dose_form_code")
private String doseFormCode;
private String doseFormCode_dictText;
/** 规格 */
/**
* 规格
*/
private String totalVolume;
/** 成分 */
/**
* 成分
*/
private String ingredientItem;
/** 是否为活性 */
/**
* 是否为活性
*/
private Integer activeFlag;
private String activeFlag_enumText;
/** 批次号 */
/**
* 批次号
*/
private String lotNumber;
/** 生效日期 */
/**
* 生效日期
*/
private Date effectiveDate;
/** 到期日期 */
/**
* 到期日期
*/
private Date expirationDate;
/** 用法 */
/**
* 用法
*/
@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;
/** 单次最大剂量 */
/**
* 单次最大剂量
*/
private BigDecimal maxUnit;
/** 药品定义 */
/**
* 药品定义
*/
private String definition;
/** 用量限定 */
/**
* 用量限定
*/
private BigDecimal usageLimit;
/** DDD值 */
/**
* DDD值
*/
@Dict(dictCode = "ddd_code")
private String dddCode;
private String dddCode_dictText;
/** DDD单位 */
/**
* DDD单位
*/
@Dict(dictCode = "unit_code")
private String dddUnitCode;
private String dddUnitCode_dictText;
/** 药品编号 */
/**
* 药品编号
*/
private String busNo;
/** 药品名称 */
/**
* 药品名称
*/
private String name;
/** 适用范围 */
/**
* 适用范围
*/
private Integer domainEnum;
private String domainEnum_enumText;
/** 药品版本 */
/**
* 药品版本
*/
private String version;
/** 英文药名 */
/**
* 英文药名
*/
private String nameEn;
/** 药品名称拼音码 */
/**
* 药品名称拼音码
*/
private String pyStr;
/** 药品五笔码 */
/**
* 药品五笔码
*/
private String wbStr;
/** 药品分类 */
/**
* 药品分类
*/
@Dict(dictCode = "med_category_code")
private String categoryCode;
private String categoryCode_dictText;
/** 商品名称 */
/**
* 商品名称
*/
private String merchandiseName;
/** 商品名称拼音码 */
/**
* 商品名称拼音码
*/
private String merchandisePyStr;
/** 商品五笔码 */
/**
* 商品五笔码
*/
private String merchandiseWbStr;
/** 药品单位 */
/**
* 药品单位
*/
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 最小单位 */
/**
* 最小单位
*/
@Dict(dictCode = "unit_code")
private String minUnitCode;
private String minUnitCode_dictText;
/** 所含耗材 */
/**
* 所含耗材
*/
private String comprisedText;
/** 拆零比 */
/**
* 拆零比
*/
private BigDecimal partPercent;
/** 剂量形式 */
/**
* 剂量形式
*/
@Dict(dictCode = "dose_form_code")
private Integer doseFrom;
private String doseFrom_dictText;
/** 批准文号 */
/**
* 批准文号
*/
private String approvalNumber;
/** 医保是否对码 */
/**
* 医保是否对码
*/
private Integer ybMatchFlag;
private String ybMatchFlag_enumText;;
private String ybMatchFlag_enumText;
;
/** 医保编码 */
private String ybNo;
/** 药理作用分类 */
/**
* 药理作用分类
*/
private String pharmacologyCategoryCode;
/** 是否皮试 */
/**
* 是否皮试
*/
private Integer skinTestFlag;
private String skinTestFlag_enumText;
/** 是否为注射药物 */
/**
* 是否为注射药物
*/
private Integer injectFlag;
private String injectFlag_enumText;
/** 生产厂家 */
/**
* 生产厂家
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long manufacturerId;
/** 供应商 */
/**
* 供应商
*/
@Dict(dictTable = "adm_supplier", dictCode = "id", dictText = "name")
@JsonSerialize(using = ToStringSerializer.class)
private Long supplyId;
private String supplyId_dictText;
/** 是否限制使用 */
/**
* 是否限制使用
*/
private Integer restrictedFlag;
private String restrictedFlag_enumText;
/** 限制使用范围 */
/**
* 限制使用范围
*/
private String restrictedScope;
/** 儿童用药标志 */
/**
* 儿童用药标志
*/
private Integer childrenFlag;
private String childrenFlag_enumText;
/** 产品特性 */
/**
* 产品特性
*/
private Integer characteristic;
private String characteristic_enumText;
/** 贯标国家编码 */
/**
* 贯标国家编码
*/
private String nationalDrugCode;
/** 拆分属性 */
/**
* 拆分属性
*/
private Integer partAttributeEnum;
private String partAttributeEnum_enumText;
/** 抗生素分类 */
/**
* 抗生素分类
*/
@Dict(dictCode = "antibiotic_type_code")
private String antibioticCode;
private String antibioticCode_dictText;
/** 权限限制 */
/**
* 权限限制
*/
private Integer restrictedEnum;
private String restrictedEnum_enumText;
/** 是否自制 */
/**
* 是否自制
*/
private Integer selfFlag;
private String selfFlag_enumText;
/** 是否抗生素 */
/**
* 是否抗生素
*/
private Integer antibioticFlag;
private String antibioticFlag_enumText;
/** 基药标识 */
/**
* 基药标识
*/
private Integer basicFlag;
private String basicFlag_enumText;
/** 生产厂商文本 */
/**
* 生产厂商文本
*/
private String manufacturerText;
/** 最小库存警戒数量(常规单位) */
/**
* 最小库存警戒数量(常规单位)
*/
private BigDecimal itemMinQuantity;
/** 最大库存警戒数量(常规单位) */
/**
* 最大库存警戒数量(常规单位)
*/
private BigDecimal itemMaxQuantity;
/** 售价 */
/**
* 售价
*/
private BigDecimal price;
/** 单次最小用药频次 */
/**
* 单次最小用药频次
*/
private String minRateCode;
/** 单次最大用药频次 */
/**
* 单次最大用药频次
*/
private String maxRateCode;
/** 医保类别 */
/**
* 医保类别
*/
private String ybType;
/** 财务类别 */
/**
* 财务类别
*/
@Dict(dictCode = "fin_type_code")
private String typeCode;
private String typeCode_dictText;
/** 成分 */
/**
* 成分
*/
private String ingredient;
/** 购入价 */
/**
* 购入价
*/
private BigDecimal purchasePrice;
/** 零售价 */
/**
* 零售价
*/
private BigDecimal retailPrice;
/** 最高零售价 */
/**
* 最高零售价
*/
private BigDecimal maximumRetailPrice;
/** 住院临时医嘱拆分属性 */
/**
* 住院临时医嘱拆分属性
*/
private Integer thoPartAttributeEnum;
private String thoPartAttributeEnum_enumText;
/** 剂量单位换算比 */
/**
* 剂量单位换算比
*/
private BigDecimal unitConversionRatio;
/** 医保等级 */
/**
* 医保等级
*/
private Integer chrgitmLv;
/** 处方标志 */
/**
* 处方标志
*/
private Integer rxFlag;
/**
@@ -294,12 +437,9 @@ public class MedicationManageDto {
*/
private String dosageInstruction;
<<<<<<< HEAD
=======
/**
* 药品69码
*/
private String drug69Code;
>>>>>>> v1.3
}

View File

@@ -24,238 +24,380 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class MedicationManageUpDto {
/** ID */
/**
* ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 药品编码 */
/**
* 药品编码
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long medicationDefId;
/** 所属科室 */
/**
* 所属科室
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;
/** 所在位置 */
/**
* 所在位置
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
/** 剂型 */
/**
* 剂型
*/
private String doseFormCode;
/** 规格 */
/**
* 规格
*/
private String totalVolume;
/** 成分 */
/**
* 成分
*/
private String ingredientItem;
/** 是否为活性 */
/**
* 是否为活性
*/
private Integer activeFlag;
/** 批次号 */
/**
* 批次号
*/
private String lotNumber;
/** 生效日期 */
/**
* 生效日期
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date effectiveDate;
/** 到期日期 */
/**
* 到期日期
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date expirationDate;
/** 用法 */
/**
* 用法
*/
private String methodCode;
/** 用药频次 */
/**
* 用药频次
*/
private String rateCode;
/** 单次剂量 */
/**
* 单次剂量
*/
private BigDecimal dose;
/** 剂量单位 */
/**
* 剂量单位
*/
@Dict(dictCode = "unit_code")
@NotBlank(message = "剂量单位不能为空")
private String doseUnitCode;
private String doseUnitCode_dictText;
/** 单次最大剂量 */
/**
* 单次最大剂量
*/
private BigDecimal maxUnit;
/** 药品定义 */
/**
* 药品定义
*/
private String definition;
/** 药品编号 */
/**
* 药品编号
*/
private String busNo;
/** 药品名称 */
/**
* 药品名称
*/
@NotBlank(message = "药品名称不能为空")
private String name;
/** 适用范围 */
/**
* 适用范围
*/
private Integer domainEnum;
/** 药品版本 */
/**
* 药品版本
*/
private String version;
/** 英文药名 */
/**
* 英文药名
*/
private String nameEn;
/** 药品名称拼音码 */
/**
* 药品名称拼音码
*/
private String pyStr;
/** 药品五笔码 */
/**
* 药品五笔码
*/
private String wbStr;
/** 药品分类 */
/**
* 药品分类
*/
private String categoryCode;
/** 商品名称 */
/**
* 商品名称
*/
private String merchandiseName;
/** 商品名称拼音码 */
/**
* 商品名称拼音码
*/
private String merchandisePyStr;
/** 商品五笔码 */
/**
* 商品五笔码
*/
private String merchandiseWbStr;
/** 药品单位 */
/**
* 药品单位
*/
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 最小单位 */
/**
* 最小单位
*/
private String minUnitCode;
/** 所含耗材 */
/**
* 所含耗材
*/
private String comprisedText;
/** 成分 */
/**
* 成分
*/
private String ingredient;
/** 拆零比 */
/**
* 拆零比
*/
private BigDecimal partPercent;
/** 剂量形式 */
/**
* 剂量形式
*/
@Dict(dictCode = "dose_form_code")
private Integer doseFrom;
private String doseFrom_dictText;
/** 批准文号 */
/**
* 批准文号
*/
private String approvalNumber;
/** 医保是否对码 */
/**
* 医保是否对码
*/
private Integer ybMatchFlag;
/** 医保编码 */
/**
* 医保编码
*/
private String ybNo;
/** 药理作用分类 */
/**
* 药理作用分类
*/
private String pharmacologyCategoryCode;
/** 是否皮试 */
/**
* 是否皮试
*/
private Integer skinTestFlag;
/** 是否为注射药物 */
/**
* 是否为注射药物
*/
private Integer injectFlag;
/** 生产厂家 */
/**
* 生产厂家
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long manufacturerId;
/** 生产厂商文本 */
/**
* 生产厂商文本
*/
private String manufacturerText;
/** 供应商 */
/**
* 供应商
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long supplyId;
/** 是否限制使用 */
/**
* 是否限制使用
*/
private Integer restrictedFlag;
/** 限制使用范围 */
/**
* 限制使用范围
*/
private String restrictedScope;
/** 儿童用药标志 */
/**
* 儿童用药标志
*/
private Integer childrenFlag;
/** 产品特性 */
/**
* 产品特性
*/
private Integer characteristic;
/** 购入价 */
/**
* 购入价
*/
private BigDecimal purchasePrice;
/** 零售价 */
/**
* 零售价
*/
private BigDecimal retailPrice;
/** 最高零售价 */
/**
* 最高零售价
*/
private BigDecimal maximumRetailPrice;
/** 医保类别 */
/**
* 医保类别
*/
private String ybType;
/** 财务类别 */
/**
* 财务类别
*/
@Dict(dictCode = "fin_type_code")
private String typeCode;
private String typeCode_dictText;
/** 单次最小用药频次 */
/**
* 单次最小用药频次
*/
private String minRateCode;
/** 单次最大用药频次 */
/**
* 单次最大用药频次
*/
private String maxRateCode;
/** 药品状态 */
/**
* 药品状态
*/
private Integer statusEnum;
private String statusEnum_enumText;
/** 拆分属性 */
/**
* 拆分属性
*/
private Integer partAttributeEnum;
/** 贯标国家编码 */
/**
* 贯标国家编码
*/
private String nationalDrugCode;
/** 是否抗生素 */
/**
* 是否抗生素
*/
private Integer antibioticFlag;
/** 是否自制 */
/**
* 是否自制
*/
private Integer selfFlag;
/** DDD值 */
/**
* DDD值
*/
private String dddCode;
/** DDD单位 */
/**
* DDD单位
*/
private String dddUnitCode;
/** 用量限定 */
/**
* 用量限定
*/
private BigDecimal usageLimit;
/** 抗生素分类 */
/**
* 抗生素分类
*/
@Dict(dictCode = "antibiotic_type_code")
private String antibioticCode;
private String antibioticCode_dictText;
/** 权限限制 */
/**
* 权限限制
*/
private Integer restrictedEnum;
/** 基药标识 */
/**
* 基药标识
*/
private Integer basicFlag;
/** 住院临时医嘱拆分属性 */
/**
* 住院临时医嘱拆分属性
*/
private Integer thoPartAttributeEnum;
/** 最小库存警戒数量(常规单位) */
/**
* 最小库存警戒数量(常规单位)
*/
private BigDecimal itemMinQuantity;
/** 最大库存警戒数量(常规单位) */
/**
* 最大库存警戒数量(常规单位)
*/
private BigDecimal itemMaxQuantity;
/** 剂量单位换算比 */
/**
* 剂量单位换算比
*/
private BigDecimal unitConversionRatio;
/** 医保等级 */
/**
* 医保等级
*/
private Integer chrgitmLv;
/** 处方标志 */
/**
* 处方标志
*/
private Integer rxFlag;
/**
@@ -263,12 +405,9 @@ public class MedicationManageUpDto {
*/
private String dosageInstruction;
<<<<<<< HEAD
=======
/**
* 药品69码
*/
private String drug69Code;
>>>>>>> v1.3
}

View File

@@ -5,10 +5,6 @@ import java.util.List;
import javax.annotation.Resource;
<<<<<<< HEAD
import org.springframework.beans.factory.annotation.Autowired;
=======
>>>>>>> v1.3
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -93,8 +89,8 @@ public class DepartmentIssuanceOrderServiceImpl implements IDepartmentIssuanceOr
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<DepartmentDetailDto> issuanceOrderDtoDetailPage =
departmentCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
Page<DepartmentDetailDto> issuanceOrderDtoDetailPage
= departmentCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
issuanceOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
@@ -123,15 +119,14 @@ public class DepartmentIssuanceOrderServiceImpl implements IDepartmentIssuanceOr
* @param dispenseIdList 耗材发放id
* @return 操作结果
*/
@Override
public boolean addOrEditIssuanceOrder(List<Long> dispenseIdList) {
// 获取单据号
String busNo = this.getBusNo();
// 获取更表所需信息
List<DepartmentDetailDto> detailDto =
departmentIssuanceOrderMapper.getInfo(dispenseIdList, DispenseStatus.COMPLETED.getValue());
List<DepartmentDetailDto> detailDto
= departmentIssuanceOrderMapper.getInfo(dispenseIdList, DispenseStatus.COMPLETED.getValue());
List<SupplyRequest> supplyRequestList = new ArrayList<>();
SupplyRequest supplyRequest;

View File

@@ -4,14 +4,10 @@ import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.core.common.core.domain.R;
<<<<<<< HEAD
import com.openhis.web.doctorstation.dto.*;
=======
import com.openhis.web.doctorstation.dto.AdviceBaseDto;
import com.openhis.web.doctorstation.dto.AdviceSaveParam;
import com.openhis.web.doctorstation.dto.OrderBindInfoDto;
import com.openhis.web.doctorstation.dto.UpdateGroupIdParam;
>>>>>>> v1.3
/**
* 医生站-医嘱/处方 应用Service

View File

@@ -72,7 +72,6 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// @Resource
// IOrganizationLocationService iOrganizationLocationService;
@Resource
IMedicationDispenseService iMedicationDispenseService;
@@ -90,7 +89,6 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// @Resource
// OutpatientRegistrationAppMapper outpatientRegistrationAppMapper;
@Resource
DoctorStationSendApplyUtil doctorStationSendApplyUtil;
@@ -101,35 +99,16 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
* @param searchKey 模糊查询关键字
* @param locationId 药房id
* @param adviceDefinitionIdParamList 医嘱定义id参数集合
<<<<<<< HEAD
* @param organizationId 患者挂号对应的科室id
* @param pageNo 当前页
* @param pageSize 每页多少条
* @param pricingFlag 划价标记
* @param adviceTypes 医嘱类型参数集合
=======
* @param organizationId 患者挂号对应的科室id
* @param pageNo 当前页
* @param pageSize 每页多少条
* @param pricingFlag 划价标记
* @param adviceTypes 医嘱类型参数集合
* @param orderPricing 医嘱定价来源 | 定时任务调用时传参
>>>>>>> v1.3
* @return 医嘱信息
*/
@Override
public IPage<AdviceBaseDto> getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId,
<<<<<<< HEAD
List<Long> adviceDefinitionIdParamList, Long organizationId, Integer pageNo, Integer pageSize,
Integer pricingFlag, List<Integer> adviceTypes) {
// 医嘱定价来源
String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE);
// 如果配置为空使用retailPrice作为默认值
if (StringUtils.isEmpty(orderPricingSource)) {
// throw new ServiceException("租户配置项【医嘱定价来源】未配置");
orderPricingSource = "retailPrice";
}
=======
List<Long> adviceDefinitionIdParamList, Long organizationId, Integer pageNo, Integer pageSize,
Integer pricingFlag, List<Integer> adviceTypes, String orderPricing) {
// 设置默认科室 (不取前端传的了)
@@ -143,27 +122,19 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
orderPricingSource = orderPricing;
}
// 开药时药房允许多选开关
String pharmacyMultipleChoiceSwitch =
TenantOptionUtil.getOptionContent(TenantOptionDict.PHARMACY_MULTIPLE_CHOICE_SWITCH);
String pharmacyMultipleChoiceSwitch
= TenantOptionUtil.getOptionContent(TenantOptionDict.PHARMACY_MULTIPLE_CHOICE_SWITCH);
// 药房允许多选
boolean pharmacyMultipleChoice = Whether.YES.getCode().equals(pharmacyMultipleChoiceSwitch);
>>>>>>> v1.3
// 构建查询条件
QueryWrapper<AdviceBaseDto> queryWrapper = HisQueryUtils.buildQueryWrapper(adviceBaseDto, searchKey,
new HashSet<>(Arrays.asList("advice_name", "py_str", "wb_str")), null);
IPage<AdviceBaseDto> adviceBaseInfo = doctorStationAdviceAppMapper.getAdviceBaseInfo(
<<<<<<< HEAD
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);
=======
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);
>>>>>>> v1.3
List<AdviceBaseDto> adviceBaseDtoList = adviceBaseInfo.getRecords();
// 如果searchKey不为null对查询结果进行排序adviceName以searchKey开头的排在前面
@@ -172,22 +143,22 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
}
// 医嘱定义ID集合
List<Long> adviceDefinitionIdList =
adviceBaseDtoList.stream().map(AdviceBaseDto::getAdviceDefinitionId).collect(Collectors.toList());
List<Long> adviceDefinitionIdList
= adviceBaseDtoList.stream().map(AdviceBaseDto::getAdviceDefinitionId).collect(Collectors.toList());
// 费用定价主表ID集合
List<Long> chargeItemDefinitionIdList =
adviceBaseDtoList.stream().map(AdviceBaseDto::getChargeItemDefinitionId).collect(Collectors.toList());
List<Long> chargeItemDefinitionIdList
= adviceBaseDtoList.stream().map(AdviceBaseDto::getChargeItemDefinitionId).collect(Collectors.toList());
// 医嘱库存集合
List<AdviceInventoryDto> adviceInventoryList =
doctorStationAdviceAppMapper.getAdviceInventory(locationId, adviceDefinitionIdList,
List<AdviceInventoryDto> adviceInventoryList
= doctorStationAdviceAppMapper.getAdviceInventory(locationId, adviceDefinitionIdList,
CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue());
// 待发放个数信息
List<AdviceInventoryDto> adviceDraftInventoryList = doctorStationAdviceAppMapper.getAdviceDraftInventory(
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION,
DispenseStatus.DRAFT.getValue(), DispenseStatus.PREPARATION.getValue());
// 预减库存
List<AdviceInventoryDto> adviceInventory =
adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList);
List<AdviceInventoryDto> adviceInventory
= adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList);
// 查询取药科室配置
List<AdviceInventoryDto> medLocationConfig = doctorStationAdviceAppMapper.getMedLocationConfig(organizationId);
// 将配置转为 {categoryCode -> 允许的locationId集合}
@@ -203,17 +174,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
}
// 费用定价子表信息
List<AdvicePriceDto> childCharge = doctorStationAdviceAppMapper
<<<<<<< HEAD
.getChildCharge(ConditionCode.LOT_NUMBER_PRICE.getCode(), chargeItemDefinitionIdList);
// 费用定价主表信息
List<AdvicePriceDto> mainCharge =
doctorStationAdviceAppMapper.getMainCharge(chargeItemDefinitionIdList, PublicationStatus.ACTIVE.getValue());
=======
.getChildCharge(ConditionCode.LOT_NUMBER_PRICE.getCode(), chargeItemDefinitionIdList);
// 费用定价主表信息
List<AdvicePriceDto> mainCharge =
doctorStationAdviceAppMapper.getMainCharge(chargeItemDefinitionIdList, PublicationStatus.ACTIVE.getValue());
>>>>>>> v1.3
List<AdvicePriceDto> mainCharge
= doctorStationAdviceAppMapper.getMainCharge(chargeItemDefinitionIdList, PublicationStatus.ACTIVE.getValue());
String unitCode = ""; // 包装单位
Long chargeItemDefinitionId; // 费用定价主表ID
for (AdviceBaseDto baseDto : adviceBaseDtoList) {
@@ -226,21 +190,12 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
baseDto.setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, baseDto.getInjectFlag()));
case CommonConstants.TableName.ADM_DEVICE_DEFINITION: // 耗材
// 每一条医嘱的库存集合信息 , 包装单位库存前端计算
<<<<<<< HEAD
List<
AdviceInventoryDto> inventoryList =
adviceInventory.stream()
.filter(e -> baseDto.getAdviceDefinitionId().equals(e.getItemId())
&& baseDto.getAdviceTableName().equals(e.getItemTable()))
.collect(Collectors.toList());
=======
List<AdviceInventoryDto> inventoryList = adviceInventory.stream().filter(e -> baseDto
.getAdviceDefinitionId().equals(e.getItemId())
&& baseDto.getAdviceTableName().equals(e.getItemTable())
&& (pharmacyMultipleChoice
|| (baseDto.getPositionId() == null || baseDto.getPositionId().equals(e.getLocationId()))))
.collect(Collectors.toList());
>>>>>>> v1.3
// 库存信息
baseDto.setInventoryList(inventoryList);
// 设置默认产品批号
@@ -277,7 +232,6 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
String finalUnitCode = unitCode;
// 从定价子表取价格(适用于批次售卖场景)
List<AdvicePriceDto> childPrice = childCharge.stream()
<<<<<<< HEAD
.filter(e -> e.getDefinitionId().equals(finalChargeItemDefinitionId)
&& e.getConditionValue().equals(adviceInventoryDto.getLotNumber()))
.peek(e -> e.setUnitCode(finalUnitCode)) // 设置 unitCode
@@ -286,16 +240,6 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
List<AdvicePriceDto> mainPrice = mainCharge.stream()
.filter(e -> baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId()))
.collect(Collectors.toList());
=======
.filter(e -> e.getDefinitionId().equals(finalChargeItemDefinitionId)
&& e.getConditionValue().equals(adviceInventoryDto.getLotNumber()))
.peek(e -> e.setUnitCode(finalUnitCode)) // 设置 unitCode
.collect(Collectors.toList());
// 从定价主表取价格(适用于统一零售价场景)
List<AdvicePriceDto> mainPrice = mainCharge.stream()
.filter(e -> baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId()))
.collect(Collectors.toList());
>>>>>>> v1.3
// 按批次售价
if (OrderPricingSource.BATCH_SELLING_PRICE.getCode().equals(orderPricingSource)) {
priceDtoList.addAll(childPrice);
@@ -307,8 +251,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
baseDto.setPriceList(priceDtoList);
break;
case CommonConstants.TableName.WOR_ACTIVITY_DEFINITION: // 诊疗
List<AdvicePriceDto> priceList =
mainCharge.stream().filter(e -> baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId()))
List<AdvicePriceDto> priceList
= mainCharge.stream().filter(e -> baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId()))
.collect(Collectors.toList());
// 价格信息
baseDto.setPriceList(priceList);
@@ -327,11 +271,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
* 查询医嘱绑定信息
*
* @param typeCode 1:用法绑东西 2:诊疗绑东西
<<<<<<< HEAD
* @param itemNo 用法的code 或者 诊疗定义id
=======
* @param itemNo 用法的code 或者 诊疗定义id
>>>>>>> v1.3
* @return 医嘱绑定信息
*/
@Override
@@ -366,10 +306,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
* 保存时,校验库存
*/
if (AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType)) {
List<AdviceSaveDto> medUpdateList =
medicineList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList());
List<AdviceSaveDto> devUpdateList =
deviceList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList());
List<AdviceSaveDto> medUpdateList
= medicineList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList());
List<AdviceSaveDto> devUpdateList
= deviceList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList());
// 编辑时,释放本身占用的库存发放
for (AdviceSaveDto adviceSaveDto : medUpdateList) {
iMedicationDispenseService.deleteMedicationDispense(adviceSaveDto.getRequestId());
@@ -378,8 +318,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
iDeviceDispenseService.deleteDeviceDispense(adviceSaveDto.getRequestId());
}
List<AdviceSaveDto> needCheckList =
adviceSaveList.stream().filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType())
List<AdviceSaveDto> needCheckList
= adviceSaveList.stream().filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType())
&& !ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
// 校验库存
String tipRes = adviceUtils.checkInventory(needCheckList);
@@ -395,8 +335,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
/**
* 处理药品请求
*/
List<String> medRequestIdList =
this.handMedication(medicineList, curDate, adviceOpType, organizationId, signCode);
List<String> medRequestIdList
= this.handMedication(medicineList, curDate, adviceOpType, organizationId, signCode);
/**
* 处理诊疗项目请求
@@ -423,24 +363,15 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
.in(ChargeItem::getServiceId, requestIds));
}
<<<<<<< HEAD
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"门诊医嘱"}));
=======
return R.ok(medRequestIdList,
MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"门诊医嘱"}));
>>>>>>> v1.3
}
/**
* 处理药品
*/
<<<<<<< HEAD
private void handMedication(List<AdviceSaveDto> medicineList, Date curDate, String adviceOpType,
Long organizationId, String signCode) {
=======
private List<String> handMedication(List<AdviceSaveDto> medicineList, Date curDate, String adviceOpType,
Long organizationId, String signCode) {
>>>>>>> v1.3
// 当前登录账号的科室id
Long orgId = SecurityUtils.getLoginUser().getOrgId();
// 保存操作
@@ -452,8 +383,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// 声明费用项
ChargeItem chargeItem;
// 新增 + 修改
List<AdviceSaveDto> insertOrUpdateList =
medicineList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
List<AdviceSaveDto> insertOrUpdateList
= medicineList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList());
// 删除
List<AdviceSaveDto> deleteList = medicineList.stream()
@@ -532,14 +463,6 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
medicationRequest.setInfusionFlag(adviceSaveDto.getInjectFlag()); // 输液标志
medicationRequest.setSortNumber(adviceSaveDto.getSortNumber()); // 排序号
}
<<<<<<< HEAD
iMedicationRequestService.saveOrUpdate(medicationRequest);
if (is_save) {
// 处理药品发放
Long dispenseId =
iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType());
=======
if (medicationRequest.getId() == null) {
firstTimeSave = true;
}
@@ -549,9 +472,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
}
if (is_save) {
// 处理药品发放
Long dispenseId =
iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType());
>>>>>>> v1.3
Long dispenseId
= iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType());
// 保存药品费用项
chargeItem = new ChargeItem();
@@ -586,10 +508,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
}
}
<<<<<<< HEAD
=======
return medRequestIdList;
>>>>>>> v1.3
}
/**
@@ -606,8 +525,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// 声明费用项
ChargeItem chargeItem;
// 新增 + 修改
List<AdviceSaveDto> insertOrUpdateList =
deviceList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
List<AdviceSaveDto> insertOrUpdateList
= deviceList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList());
// 删除
List<AdviceSaveDto> deleteList = deviceList.stream()
@@ -666,12 +585,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
iDeviceRequestService.saveOrUpdate(deviceRequest);
if (is_save) {
// 处理耗材发放
Long dispenseId =
<<<<<<< HEAD
iDeviceDispenseService.handleDeviceDispense(deviceRequest, adviceSaveDto.getDbOpType());
=======
iDeviceDispenseService.handleDeviceDispense(deviceRequest, adviceSaveDto.getDbOpType());
>>>>>>> v1.3
Long dispenseId
= iDeviceDispenseService.handleDeviceDispense(deviceRequest, adviceSaveDto.getDbOpType());
// 保存耗材费用项
chargeItem = new ChargeItem();
@@ -721,8 +636,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// 声明费用项
ChargeItem chargeItem;
// 新增 + 修改
List<AdviceSaveDto> insertOrUpdateList =
activityList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
List<AdviceSaveDto> insertOrUpdateList
= activityList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList());
// 删除
List<AdviceSaveDto> deleteList = activityList.stream()
@@ -816,8 +731,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// 第一次保存时,处理诊疗套餐的子项信息
if (adviceSaveDto.getRequestId() == null) {
ActivityDefinition activityDefinition =
iActivityDefinitionService.getById(adviceSaveDto.getAdviceDefinitionId());
ActivityDefinition activityDefinition
= iActivityDefinitionService.getById(adviceSaveDto.getAdviceDefinitionId());
String childrenJson = activityDefinition.getChildrenJson();
if (childrenJson != null) {
// 诊疗子项参数类
@@ -840,30 +755,18 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
adviceSaveDto.setRequestId(serviceRequest.getId());
try {
// 查询诊疗定义
ActivityDefinition activityDefinition =
<<<<<<< HEAD
iActivityDefinitionService.getById(adviceSaveDto.getAdviceDefinitionId());
ActivityDefinition activityDefinition
= iActivityDefinitionService.getById(adviceSaveDto.getAdviceDefinitionId());
if (activityDefinition != null) {
// 检验 或 检查
if (ActivityType.PROOF.getValue().equals(activityDefinition.getTypeEnum())
|| ActivityType.TEST.getValue().equals(activityDefinition.getTypeEnum())) {
=======
iActivityDefinitionService.getById(adviceSaveDto.getAdviceDefinitionId());
if (activityDefinition != null) {
// 检验 或 检查
if (ActivityType.PROOF.getValue().equals(activityDefinition.getTypeEnum())
|| ActivityType.TEST.getValue().equals(activityDefinition.getTypeEnum())) {
>>>>>>> v1.3
doctorStationSendApplyUtil.sendCrossSystemApply(adviceSaveDto, organizationId, curDate);
}
}
} catch (Exception e) {
if (!Whether.YES.getCode()
<<<<<<< HEAD
.equals(TenantOptionUtil.getOptionContent(TenantOptionDict.LIS_PACS_ERROR_IGNORE))) {
=======
.equals(TenantOptionUtil.getOptionContent(TenantOptionDict.LIS_PACS_ERROR_IGNORE))) {
>>>>>>> v1.3
throw e;
}
log.error(e.getMessage(), e);
@@ -884,15 +787,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
// 医嘱请求数据
List<RequestBaseDto> requestBaseInfo = doctorStationAdviceAppMapper.getRequestBaseInfo(encounterId, null,
<<<<<<< HEAD
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST,
CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(),
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
=======
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST,
CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(),
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
>>>>>>> v1.3
for (RequestBaseDto requestBaseDto : requestBaseInfo) {
// 请求状态
requestBaseDto
@@ -934,9 +831,12 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
chargeItemList.forEach(item -> {
switch (item.getServiceTable()) {
case CommonConstants.TableName.MED_MEDICATION_REQUEST -> medReqIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_DEVICE_REQUEST -> devReqIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_SERVICE_REQUEST -> serReqIdList.add(item.getServiceId());
case CommonConstants.TableName.MED_MEDICATION_REQUEST ->
medReqIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_DEVICE_REQUEST ->
devReqIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_SERVICE_REQUEST ->
serReqIdList.add(item.getServiceId());
}
});
List<Long> chargeItemIdList = chargeItemList.stream().map(ChargeItem::getId).collect(Collectors.toList());
@@ -973,15 +873,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
// 医嘱请求数据
List<RequestBaseDto> requestBaseInfo = doctorStationAdviceAppMapper.getRequestBaseInfo(encounterId, patientId,
<<<<<<< HEAD
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST,
CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode(),
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
=======
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST,
CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode(),
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
>>>>>>> v1.3
for (RequestBaseDto requestBaseDto : requestBaseInfo) {
// 请求状态
requestBaseDto
@@ -1098,7 +992,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
}
/**
* 根据searchKey对医嘱列表进行排序adviceName以searchKey(汉字)开头的排在前面 | pyStr以searchKey(字母)开头的排在前面
* 根据searchKey对医嘱列表进行排序adviceName以searchKey(汉字)开头的排在前面 |
* pyStr以searchKey(字母)开头的排在前面
*
* @param adviceList 医嘱列表
* @param searchKey 搜索关键字
@@ -1113,10 +1008,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
adviceList.sort((a, b) -> {
// 根据searchKey类型选择不同的字段
String aValue =
isPinyinSearch ? (a.getPyStr() != null ? a.getPyStr() : a.getAdviceName()) : a.getAdviceName();
String bValue =
isPinyinSearch ? (b.getPyStr() != null ? b.getPyStr() : b.getAdviceName()) : b.getAdviceName();
String aValue
= isPinyinSearch ? (a.getPyStr() != null ? a.getPyStr() : a.getAdviceName()) : a.getAdviceName();
String bValue
= isPinyinSearch ? (b.getPyStr() != null ? b.getPyStr() : b.getAdviceName()) : b.getAdviceName();
// 处理可能的null值
if (aValue == null && bValue == null) {

View File

@@ -192,8 +192,8 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation
List<EncounterDiagnosis> diagnosisList = iEncounterDiagnosisService.getDiagnosisList(encounterId);
List<EncounterDiagnosis> newdiagnosisList = new ArrayList<>();
newdiagnosisList =
diagnosisList.stream().filter(diagno -> diagno.getDeleteFlag().equals("0") && diagno.getDiagSrtNo() != null)
newdiagnosisList
= diagnosisList.stream().filter(diagno -> diagno.getDeleteFlag().equals("0") && diagno.getDiagSrtNo() != null)
.collect(Collectors.toList());
newdiagnosisList = newdiagnosisList.stream().sorted((d1, d2) -> d2.getDiagSrtNo().compareTo(d1.getDiagSrtNo())) // 降序
@@ -290,8 +290,8 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation
public R<?> getTcmEncounterDiagnosis(Long encounterId) {
HashMap<String, Object> resultMap = new HashMap<>();
// 中医就诊诊断信息
List<DiagnosisQueryDto> tcmEncounterDiagnosis =
doctorStationChineseMedicalAppMapper.getTcmEncounterDiagnosis(encounterId);
List<DiagnosisQueryDto> tcmEncounterDiagnosis
= doctorStationChineseMedicalAppMapper.getTcmEncounterDiagnosis(encounterId);
// 病
List<DiagnosisQueryDto> illness = tcmEncounterDiagnosis.stream().filter(
e -> ConditionDefinitionSource.TRADITIONAL_CHINESE_MEDICINE_DIAGNOSIS.getValue().equals(e.getSourceEnum()))
@@ -358,12 +358,12 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation
// 是否代煎
Integer sufferingFlag = adviceSaveParam.getSufferingFlag();
// 中药代煎定义id
Long sufferingDefinitionId =
iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.SUFFERING_TCM);
Long sufferingDefinitionId
= iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.SUFFERING_TCM);
// 保存时,校验库存
if (is_save) {
List<AdviceSaveDto> medUpdateList =
medicineList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList());
List<AdviceSaveDto> medUpdateList
= medicineList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList());
// 编辑时,释放本身占用的库存发放
for (AdviceSaveDto adviceSaveDto : medUpdateList) {
iMedicationDispenseService.deleteMedicationDispense(adviceSaveDto.getRequestId());
@@ -381,8 +381,8 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation
// 费用项
ChargeItem chargeItem;
// 新增 + 修改
List<AdviceSaveDto> insertOrUpdateList =
medicineList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
List<AdviceSaveDto> insertOrUpdateList
= medicineList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList());
// 删除
List<AdviceSaveDto> deleteList = medicineList.stream()
@@ -403,8 +403,8 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation
if (is_sign) {
// 按groupId分组
Map<Long, List<AdviceSaveDto>> groupMap =
insertOrUpdateList.stream().collect(Collectors.groupingBy(AdviceSaveDto::getGroupId));
Map<Long, List<AdviceSaveDto>> groupMap
= insertOrUpdateList.stream().collect(Collectors.groupingBy(AdviceSaveDto::getGroupId));
// 为每个分组生成唯一的处方号
groupMap.forEach((groupId, groupList) -> {
// 先查询当前groupId是否已经被签发生成过处方号
@@ -413,8 +413,8 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation
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);
String prescriptionNo
= assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_CHINESE_HERBAL_MEDICINE.getPrefix(), 8);
groupList.forEach(dto -> dto.setPrescriptionNo(prescriptionNo));
}
});
@@ -467,8 +467,8 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation
iMedicationRequestService.saveOrUpdate(medicationRequest);
if (is_save) {
// 处理药品发放
Long dispenseId =
iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType());
Long dispenseId
= iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType());
// 保存药品费用项
chargeItem = new ChargeItem();
@@ -533,11 +533,7 @@ public class DoctorStationChineseMedicalAppServiceImpl implements IDoctorStation
// 对应的诊疗医嘱信息
AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null,
<<<<<<< HEAD
null, null, organizationId, 1, 1, Whether.NO.getValue(), List.of(3)).getRecords().get(0);
=======
null, null, organizationId, 1, 1, Whether.NO.getValue(), List.of(3), null).getRecords().get(0);
>>>>>>> v1.3
if (activityAdviceBaseDto != null) {
// 费用定价
AdvicePriceDto advicePriceDto = activityAdviceBaseDto.getPriceList().get(0);

View File

@@ -44,17 +44,6 @@ public class DoctorStationAdviceController {
*/
@GetMapping(value = "/advice-base-info")
public R<?> getAdviceBaseInfo(AdviceBaseDto adviceBaseDto,
<<<<<<< HEAD
@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "locationId", required = false) Long locationId,
@RequestParam(value = "adviceDefinitionIdParamList", required = false) List<Long> adviceDefinitionIdParamList,
@RequestParam(value = "organizationId", defaultValue = "0") Long organizationId,
@RequestParam(value = "adviceTypes", defaultValue = "1,2,3") List<Integer> 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));
=======
@RequestParam(value = "searchKey", defaultValue = "") String searchKey,
@RequestParam(value = "locationId", required = false) Long locationId,
@RequestParam(value = "adviceDefinitionIdParamList", required = false) List<Long> adviceDefinitionIdParamList,
@@ -64,27 +53,18 @@ public class DoctorStationAdviceController {
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return R.ok(iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId,
adviceDefinitionIdParamList, organizationId, pageNo, pageSize, Whether.NO.getValue(), adviceTypes, null));
>>>>>>> v1.3
}
/**
* 查询医嘱绑定信息
*
* @param typeCode 1:用法绑东西 2:诊疗绑东西
<<<<<<< HEAD
* @param itemNo 用法的code 或者 诊疗定义id
=======
* @param itemNo 用法的code 或者 诊疗定义id
>>>>>>> v1.3
* @return 医嘱绑定信息
*/
@GetMapping(value = "/order-bind-info")
public R<?> getOrderBindInfo(@RequestParam(value = "typeCode") String typeCode,
<<<<<<< HEAD
@RequestParam(value = "itemNo") String itemNo) {
=======
@RequestParam(value = "itemNo") String itemNo) {
>>>>>>> v1.3
return R.ok(iDoctorStationAdviceAppService.getOrderBindInfo(typeCode, itemNo));
}

View File

@@ -17,10 +17,14 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class AdviceBaseDto {
/** 医嘱类型 */
/**
* 医嘱类型
*/
private Integer adviceType; // 1:药品 , 2: 耗材 , 3:项目
/** 编号 */
/**
* 编号
*/
private String busNo;
/**
@@ -28,22 +32,34 @@ public class AdviceBaseDto {
*/
private String categoryCode;
/** 药品性质 */
/**
* 药品性质
*/
private String pharmacologyCategoryCode;
/** 拆零比 */
/**
* 拆零比
*/
private BigDecimal partPercent;
/** 剂量换算 */
/**
* 剂量换算
*/
private BigDecimal unitConversionRatio;
/** 拆分属性-门诊 */
/**
* 拆分属性-门诊
*/
private Integer partAttributeEnum;
/** 住院临时医嘱拆分属性 */
/**
* 住院临时医嘱拆分属性
*/
private Integer thoPartAttributeEnum;
/** 医嘱定义ID */
/**
* 医嘱定义ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long adviceDefinitionId;
@@ -58,7 +74,9 @@ public class AdviceBaseDto {
@JsonSerialize(using = ToStringSerializer.class)
private Long positionId;
/** 医嘱名称 */
/**
* 医嘱名称
*/
private String adviceName;
/**
@@ -66,16 +84,24 @@ public class AdviceBaseDto {
*/
private String adviceBusNo;
/** 拼音码 */
/**
* 拼音码
*/
private String pyStr;
/** 五笔码 */
/**
* 五笔码
*/
private String wbStr;
/** 医保编码 */
/**
* 医保编码
*/
private String ybNo;
/** 商品名称 */
/**
* 商品名称
*/
private String productName;
/**
@@ -84,20 +110,28 @@ public class AdviceBaseDto {
private Integer activityType;
private String activityType_enumText;
/** 是否皮试 */
/**
* 是否皮试
*/
private Integer skinTestFlag;
private String skinTestFlag_enumText;
/** 是否为注射药物 */
/**
* 是否为注射药物
*/
private Integer injectFlag;
private String injectFlag_enumText;
/** 包装单位 */
/**
* 包装单位
*/
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 最小单位 */
/**
* 最小单位
*/
@Dict(dictCode = "unit_code")
private String minUnitCode;
private String minUnitCode_dictText;
@@ -126,7 +160,9 @@ public class AdviceBaseDto {
*/
private String dose;
/** 剂量单位 */
/**
* 剂量单位
*/
@Dict(dictCode = "unit_code")
private String doseUnitCode;
private String doseUnitCode_dictText;
@@ -136,7 +172,9 @@ public class AdviceBaseDto {
*/
private String supplier;
/** 供应商ID */
/**
* 供应商ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long supplierId;
@@ -145,14 +183,20 @@ public class AdviceBaseDto {
*/
private String manufacturer;
/** 费用定价主表ID */
/**
* 费用定价主表ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long chargeItemDefinitionId;
/** 所属科室 */
/**
* 所属科室
*/
private Long orgId;
/** 所在位置 */
/**
* 所在位置
*/
private Long locationId;
/**
@@ -160,7 +204,9 @@ public class AdviceBaseDto {
*/
private List<AdviceInventoryDto> inventoryList;
/** 默认产品批号 */
/**
* 默认产品批号
*/
private String defaultLotNumber;
/**
@@ -168,24 +214,26 @@ public class AdviceBaseDto {
*/
private List<AdvicePriceDto> priceList;
/** 是否限制使用 */
/**
* 是否限制使用
*/
private Integer restrictedFlag;
/** 限制使用范围 */
/**
* 限制使用范围
*/
private String restrictedScope;
/** 用药说明 */
/**
* 用药说明
*/
@Dict(dictCode = "dosage_instruction")
private String dosageInstruction;
private String dosageInstruction_dictText;
<<<<<<< HEAD
=======
/*
收费项目等级
*/
@Dict(dictCode = "chrgitm_lv")
private String chrgitmLv;
private String chrgitmLv_dictText;
>>>>>>> v1.3
}

View File

@@ -18,7 +18,9 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class RequestBaseDto {
/** 医嘱类型 */
/**
* 医嘱类型
*/
private Integer adviceType; // 1:药品 , 2: 耗材 , 3:项目
/**
@@ -26,7 +28,9 @@ public class RequestBaseDto {
*/
private String uniqueKey; // requestId拼接adviceType
/** 处方号 */
/**
* 处方号
*/
private String prescriptionNo;
/**
@@ -37,7 +41,9 @@ public class RequestBaseDto {
private Long requesterId;
private String requesterId_dictText;
/** 请求时间 */
/**
* 请求时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date requestTime;
@@ -74,7 +80,9 @@ public class RequestBaseDto {
@JsonSerialize(using = ToStringSerializer.class)
private Long chargeItemId;
/** 医嘱名称 */
/**
* 医嘱名称
*/
private String adviceName;
/**
@@ -82,30 +90,44 @@ public class RequestBaseDto {
*/
private String volume;
/** 产品批号 */
/**
* 产品批号
*/
private String lotNumber;
/** 请求数量 */
/**
* 请求数量
*/
private Integer quantity;
/** 请求单位编码 */
/**
* 请求单位编码
*/
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 请求状态 */
/**
* 请求状态
*/
private Integer statusEnum;
private String statusEnum_enumText;
/** 收费状态 */
/**
* 收费状态
*/
private Integer chargeStatus;
private String chargeStatus_enumText;
/** 是否皮试 */
/**
* 是否皮试
*/
private Integer skinTestFlag;
private String skinTestFlag_enumText;
/** 是否为注射药物 */
/**
* 是否为注射药物
*/
private Integer injectFlag;
private String injectFlag_enumText;
@@ -128,7 +150,9 @@ public class RequestBaseDto {
*/
private BigDecimal dose;
/** 剂量单位 */
/**
* 剂量单位
*/
@Dict(dictCode = "unit_code")
private String doseUnitCode;
private String doseUnitCode_dictText;
@@ -149,10 +173,14 @@ public class RequestBaseDto {
*/
private String positionName;
/** 用药天数 */
/**
* 用药天数
*/
private Integer dispensePerDuration;
/** 拆零比 */
/**
* 拆零比
*/
private BigDecimal partPercent;
/**
@@ -170,16 +198,17 @@ public class RequestBaseDto {
*/
private Integer sortNumber;
/** 用药说明 */
/**
* 用药说明
*/
@Dict(dictCode = "dosage_instruction")
private String dosageInstruction;
private String dosageInstruction_dictText;
<<<<<<< HEAD
=======
/** 请求基于什么的ID */
/**
* 请求基于什么的ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long basedOnId;
>>>>>>> v1.3
}

View File

@@ -153,8 +153,6 @@ public interface DoctorStationAdviceAppMapper {
List<OrderBindInfoDto> getOrderBindInfo(@Param("typeCode") String typeCode, @Param("status") Integer status,
@Param("itemNo") String itemNo);
<<<<<<< HEAD
=======
/**
* 查询检验检查开立历史(近30天)
*
@@ -177,5 +175,4 @@ public interface DoctorStationAdviceAppMapper {
List<ProofAndTestResultDto> getProofAndTestResult(@Param("encounterId") Long encounterId,
@Param("status") Integer status, @Param("typeEnum") Integer typeEnum);
>>>>>>> v1.3
}

View File

@@ -10,10 +10,7 @@ import javax.annotation.Resource;
import org.springframework.stereotype.Component;
<<<<<<< HEAD
=======
import com.core.common.enums.TenantOptionDict;
>>>>>>> v1.3
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.SecurityUtils;
import com.core.common.utils.StringUtils;
@@ -80,19 +77,19 @@ public class AdviceUtils {
*/
public String checkInventory(List<AdviceSaveDto> adviceSaveList) {
// 医嘱定义ID集合
List<Long> adviceDefinitionIdList =
adviceSaveList.stream().map(AdviceSaveDto::getAdviceDefinitionId).collect(Collectors.toList());
List<Long> adviceDefinitionIdList
= adviceSaveList.stream().map(AdviceSaveDto::getAdviceDefinitionId).collect(Collectors.toList());
// 医嘱库存集合
List<AdviceInventoryDto> adviceInventoryList =
doctorStationAdviceAppMapper.getAdviceInventory(null, adviceDefinitionIdList,
List<AdviceInventoryDto> adviceInventoryList
= doctorStationAdviceAppMapper.getAdviceInventory(null, adviceDefinitionIdList,
CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue());
// 待发放个数信息
List<AdviceInventoryDto> adviceDraftInventoryList = doctorStationAdviceAppMapper.getAdviceDraftInventory(
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION,
DispenseStatus.DRAFT.getValue(), DispenseStatus.PREPARATION.getValue());
// 预减库存
List<AdviceInventoryDto> adviceInventory =
this.subtractInventory(adviceInventoryList, adviceDraftInventoryList);
List<AdviceInventoryDto> adviceInventory
= this.subtractInventory(adviceInventoryList, adviceDraftInventoryList);
// 检查库存
for (AdviceSaveDto saveDto : adviceSaveList) {
boolean matched = false;
@@ -135,19 +132,19 @@ public class AdviceUtils {
*/
public String checkExeMedInventory(List<MedicationRequestUseExe> medUseExeList) {
// 医嘱定义id集合
List<Long> adviceDefinitionIdList =
medUseExeList.stream().map(MedicationRequestUseExe::getMedicationId).collect(Collectors.toList());
List<Long> adviceDefinitionIdList
= medUseExeList.stream().map(MedicationRequestUseExe::getMedicationId).collect(Collectors.toList());
// 医嘱库存集合
List<AdviceInventoryDto> adviceInventoryList =
doctorStationAdviceAppMapper.getAdviceInventory(null, adviceDefinitionIdList,
List<AdviceInventoryDto> adviceInventoryList
= doctorStationAdviceAppMapper.getAdviceInventory(null, adviceDefinitionIdList,
CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue());
// 待发放个数信息
List<AdviceInventoryDto> adviceDraftInventoryList = doctorStationAdviceAppMapper.getAdviceDraftInventory(
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION,
DispenseStatus.DRAFT.getValue(), DispenseStatus.PREPARATION.getValue());
// 预减库存
List<AdviceInventoryDto> adviceInventory =
this.subtractInventory(adviceInventoryList, adviceDraftInventoryList);
List<AdviceInventoryDto> adviceInventory
= this.subtractInventory(adviceInventoryList, adviceDraftInventoryList);
// 生命提示信息集合
List<String> tipsList = new ArrayList<>();
for (MedicationRequestUseExe medicationRequestUseExe : medUseExeList) {
@@ -289,14 +286,9 @@ public class AdviceUtils {
BigDecimal newQty = inventory.getQuantity().subtract(draftQty);
inventory.setQuantity(newQty.compareTo(BigDecimal.ZERO) >= 0 ? newQty : BigDecimal.ZERO);
}
<<<<<<< HEAD
return inventory;
}).collect(Collectors.toList());
=======
result.add(inventory);
}
return result;
>>>>>>> v1.3
}
/**
@@ -320,8 +312,9 @@ public class AdviceUtils {
try {
// 将JSON字符串转换为List<ActivityChildJsonDto>
List<ActivityChildJsonDto> activityChildJsonDtoList =
objectMapper.readValue(childrenJson, new TypeReference<>() {});
List<ActivityChildJsonDto> activityChildJsonDtoList
= objectMapper.readValue(childrenJson, new TypeReference<>() {
});
// 创建子项的诊疗请求
Long adviceDefinitionId; // 诊疗医嘱定义ID
BigDecimal quantity; // 子项请求数量
@@ -337,8 +330,8 @@ public class AdviceUtils {
adviceBaseDto = new AdviceBaseDto();
adviceBaseDto.setAdviceDefinitionId(adviceDefinitionId);
// 对应的子项诊疗医嘱信息
AdviceBaseDto activityAdviceBaseDto =
iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, null, null, organizationId, 1,
AdviceBaseDto activityAdviceBaseDto
= iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, null, null, null, organizationId, 1,
1, Whether.NO.getValue(), List.of(1, 2, 3), null).getRecords().get(0);
if (activityAdviceBaseDto != null) {
// 费用定价

View File

@@ -18,16 +18,6 @@ import com.openhis.web.document.util.EnumUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
<<<<<<< HEAD
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;
=======
>>>>>>> v1.3
/**
* 文书定义 controller
@@ -40,6 +30,7 @@ import java.util.Map;
@Slf4j
@AllArgsConstructor
public class DocDefinitionController {
private final IDocDefinitionAppService iDocDefinitionAppService;
/**
@@ -56,13 +47,8 @@ public class DocDefinitionController {
// 获取权限枚举列表
map.put("permissions", EnumUtil.toMapList(DocPermissionEnum.class));
<<<<<<< HEAD
// 使用范围枚举
List<String> noInUseCodes = new ArrayList<>();
=======
// 使用范围枚举
List<String> noInUseCodes = new ArrayList<>();
>>>>>>> v1.3
noInUseCodes.add(DocUseRangeEnum.USE_BY_SELF.getCode());
map.put("useRanges", EnumUtil.toMapListFilter(DocUseRangeEnum.class, noInUseCodes));
return R.ok(map);

View File

@@ -35,11 +35,7 @@ import com.openhis.web.inhospitalcharge.appservice.IInHospitalRegisterAppService
import com.openhis.web.inhospitalcharge.dto.*;
import com.openhis.web.inhospitalcharge.mapper.InHospitalRegisterAppMapper;
import com.openhis.web.patientmanage.appservice.IPatientInformationService;
<<<<<<< HEAD
import com.openhis.web.patientmanage.dto.PatientInformationDto;
=======
import com.openhis.web.patientmanage.dto.PatientBaseInfoDto;
>>>>>>> v1.3
import com.openhis.yb.service.YbManager;
import lombok.extern.slf4j.Slf4j;
@@ -179,8 +175,8 @@ public class InHospitalRegisterAppServiceImpl implements IInHospitalRegisterAppS
String searchKey, String registeredFlag, Integer pageNo, Integer pageSize, HttpServletRequest request) {
Integer encounterStatus = EncounterZyStatus.TO_BE_REGISTERED.getValue(); // 待登记
// 构建查询条件
QueryWrapper<InHospitalRegisterQueryDto> queryWrapper =
HisQueryUtils.buildQueryWrapper(inHospitalRegisterQueryDto, searchKey,
QueryWrapper<InHospitalRegisterQueryDto> queryWrapper
= HisQueryUtils.buildQueryWrapper(inHospitalRegisterQueryDto, searchKey,
new HashSet<>(Arrays.asList("registrar", "source_name", "patient_name")), request);
IPage<InHospitalRegisterQueryDto> inHospitalRegisterInfo = inHospitalRegisterAppMapper

View File

@@ -56,16 +56,7 @@ public interface IATDManageAppService {
*/
R<?> getAdmissionPatientInfo(Long encounterId);
/**
<<<<<<< HEAD
* 住院患者待处理信息列表
*
* @param encounterId 住院id
* @return 待处理信息列表
*/
R<?> getInPatientPendingList(Long encounterId);
=======
* 住院患者待处理列表查询
*
* @param inpatientAdviceParam 查询条件
@@ -74,7 +65,6 @@ public interface IATDManageAppService {
* @return 住院患者医
*/
R<?> getInPatientPendingList(InpatientAdviceParam inpatientAdviceParam, Integer pageNo, Integer pageSize);
>>>>>>> v1.3
/**
* 入科床位分配
@@ -87,11 +77,7 @@ public interface IATDManageAppService {
/**
* 转科
*
<<<<<<< HEAD
* @param encounterId 住院id
=======
* @param encounterId 住院患者id
>>>>>>> v1.3
* @return 结果
*/
R<?> transferDepartment(Long encounterId);
@@ -99,12 +85,6 @@ public interface IATDManageAppService {
/**
* 出院
*
<<<<<<< HEAD
* @param encounterId 住院id
* @return 结果
*/
R<?> hospitalDischarge(Long encounterId);
=======
* @param encounterId 住院患者id
* @return 结果
*/
@@ -123,7 +103,8 @@ public interface IATDManageAppService {
*
* @param encounterId 诊断id
* @return EncounterAccountDto 诊断账户金额
**/
*
*/
R<?> getAmount(Long encounterId);
/**
@@ -131,7 +112,7 @@ public interface IATDManageAppService {
*
* @param encounterId 诊断id
* @return PendingMedicationDto 待配/退药
**/
*
*/
R<?> getPendingMedication(Long encounterId);
>>>>>>> v1.3
}

View File

@@ -17,21 +17,6 @@ import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryParam;
public interface IMedicineSummaryAppService {
/**
<<<<<<< HEAD
* 查询发药单信息
*
* @param dispenseFormSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求
* @return 发药单信息
*/
R<?> getMedicineDispenseFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo, Integer pageSize,
HttpServletRequest request);
/**
* 查询药品汇总单
=======
* 药品汇总单初始化
*
* @return 初始化信息
@@ -40,26 +25,10 @@ public interface IMedicineSummaryAppService {
/**
* 查询发药单信息
>>>>>>> v1.3
*
* @param dispenseFormSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
<<<<<<< HEAD
* @param searchKey 模糊查询关键字
* @param request 请求
* @return 药品汇总单
*/
R<?> getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request);
/**
* 查询药品汇总单详情
*
* @param summaryNo 汇总单号
* @return 药品汇总单详情
*/
=======
* @param request 请求
* @return 发药单信息
*/
@@ -85,7 +54,6 @@ public interface IMedicineSummaryAppService {
* @param summaryNo 汇总单号
* @return 药品汇总单详情
*/
>>>>>>> v1.3
R<?> getMedicineSummaryFormDetail(String summaryNo);
/**
@@ -102,16 +70,5 @@ public interface IMedicineSummaryAppService {
* @param summaryNo 汇总单号
* @return 处理结果
*/
<<<<<<< HEAD
R<?> checkInventoryItem(List<Long> devDispenseId, List<Long> medDispenseId);
/**
* 取消汇总
*
* @param summaryNo 汇总单号
* @return 处理结果
*/
=======
>>>>>>> v1.3
R<?> cancelSummary(String summaryNo);
}

View File

@@ -1,8 +1,5 @@
package com.openhis.web.inhospitalnursestation.appservice;
<<<<<<< HEAD
import com.core.common.core.domain.R;
=======
import java.time.LocalDateTime;
import java.util.List;
@@ -13,48 +10,20 @@ import com.core.common.core.domain.R;
import com.openhis.administration.dto.CostDetailSearchParam;
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam;
import com.openhis.web.regdoctorstation.dto.AdviceBatchOpParam;
>>>>>>> v1.3
import com.openhis.web.regdoctorstation.dto.RegAdviceSaveParam;
public interface INurseBillingAppService {
/*
* 住院护士 划价添加
* @return
*/
public R<?> addInNurseBilling(RegAdviceSaveParam regAdviceSaveParam);
<<<<<<< HEAD
/*
* 住院护士 划价列表 根据护士encounterId查询
* @return
*/
public R<?> getBillingListByEncounterId();
=======
>>>>>>> v1.3
/*
* 住院护士撤销划价
* @return
*/
<<<<<<< HEAD
public R<?> deleteInNurseBilling();
/*
* 医嘱计费添加 诊疗 耗材
*/
public R<?> addOrderBilling();
/*
* 医嘱计费删除 诊疗 耗材
*/
public R<?> deleteOrderBilling();
/*
* 医嘱计费修改 诊疗 耗材
*/
public R<?> updateOrderBilling();
/*
根据医嘱id查询已计费的 耗材列表
* @return
*/
public R<?> getOrderBillingByRequestId();
=======
public R<?> deleteInNurseBilling(List<AdviceBatchOpParam> paramList);
/**
@@ -101,5 +70,4 @@ public interface INurseBillingAppService {
*/
void makeExcelFile(CostDetailSearchParam costDetailSearchParam, HttpServletRequest request,
HttpServletResponse response);
>>>>>>> v1.3
}

View File

@@ -5,10 +5,7 @@ import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryParam;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
<<<<<<< HEAD
=======
import java.util.List;
>>>>>>> v1.3
/**
* 科室耗材盘点 应用实现接口
@@ -19,13 +16,6 @@ import java.util.List;
public interface IOrgDeviceStockTakeAppService {
/**
<<<<<<< HEAD
* 查询科室耗材汇总
*
* @param orgDeviceSummaryParam 查询条件
* @param startTime 开始时间
* @param endTime 结束时间
=======
* 页面初始化
*
* @return 初始化信息
@@ -36,18 +26,13 @@ public interface IOrgDeviceStockTakeAppService {
* 查询科室耗材汇总
*
* @param orgDeviceSummaryParam 查询条件
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求
* @return 科室耗材汇总单
*/
<<<<<<< HEAD
R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, String startTime, String endTime,
=======
R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam,
>>>>>>> v1.3
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey,
HttpServletRequest request);
@@ -57,9 +42,5 @@ public interface IOrgDeviceStockTakeAppService {
*
* @return 科室耗材汇总单
*/
<<<<<<< HEAD
R<?> orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam);
=======
R<?> orgDeviceSummary(List<OrgDeviceSummaryParam> orgDeviceSummaryParamList);
>>>>>>> v1.3
}

View File

@@ -174,11 +174,11 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
@Override
public R<?> getAdmissionBedPage(AdmissionPageParam admissionPageParam, Integer pageNo, Integer pageSize) {
// 构建查询条件
QueryWrapper<AdmissionPageParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(admissionPageParam, null, null, null);
QueryWrapper<AdmissionPageParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(admissionPageParam, null, null, null);
// 入院患者床位分页列表
Page<AdmissionBedPageDto> admissionBedPage =
atdManageAppMapper.selectAdmissionBadPage(new Page<>(pageNo, pageSize), queryWrapper,
Page<AdmissionBedPageDto> admissionBedPage
= atdManageAppMapper.selectAdmissionBadPage(new Page<>(pageNo, pageSize), queryWrapper,
EncounterActivityStatus.ACTIVE.getValue(), LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(),
LocationForm.BED.getValue(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
LocationStatus.INACTIVE.getValue(), ChargeItemStatus.BILLABLE.getValue(),
@@ -207,8 +207,8 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
@Override
public R<?> getAdmissionPatientInfo(Long encounterId) {
// 查询住院患者详细信息
AdmissionPatientInfoDto admissionPatientInfoDto =
atdManageAppMapper.selectAdmissionPatientInfo(encounterId, EncounterActivityStatus.ACTIVE.getValue(),
AdmissionPatientInfoDto admissionPatientInfoDto
= atdManageAppMapper.selectAdmissionPatientInfo(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(), ParticipantType.CHIEF_DOCTOR.getCode());
@@ -228,21 +228,6 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
}
/**
<<<<<<< HEAD
* 住院患者待处理信息列表
*
* @param encounterId 住院id
* @return 待处理信息列表
*/
@Override
public R<?> getInPatientPendingList(Long encounterId) {
// List<InpatientAdviceDto> 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;
=======
* 住院患者医嘱查询
*
* @param inpatientAdviceParam 查询条件
@@ -253,8 +238,8 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
@Override
public R<?> getInPatientPendingList(InpatientAdviceParam inpatientAdviceParam, Integer pageNo, Integer pageSize) {
// 构建查询条件
QueryWrapper<InpatientAdviceParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null);
QueryWrapper<InpatientAdviceParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null);
// 患者医嘱分页列表
Page<InpatientAdviceDto> inpatientAdvicePage = atdManageAppMapper.selectInpatientAdvicePage(
@@ -283,7 +268,6 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
}
});
return R.ok(inpatientAdvicePage);
>>>>>>> v1.3
}
/**
@@ -343,12 +327,12 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
if (oldBedId != null) {
// 判断目标床位是否已经被占用
if (targetEncounterId != null) {
List<EncounterLocation> locationList =
encounterLocationService.getEncounterLocationInfo(targetEncounterId, null);
List<EncounterLocation> locationList
= encounterLocationService.getEncounterLocationInfo(targetEncounterId, null);
// 查询目标患者的入科时间
Date targetStartTime = null;
Optional<EncounterLocation> encounterLocationOptional =
locationList.stream().filter(x -> x.getFormEnum().equals(LocationForm.BED.getValue()))
Optional<EncounterLocation> encounterLocationOptional
= locationList.stream().filter(x -> x.getFormEnum().equals(LocationForm.BED.getValue()))
.filter(x -> x.getStatusEnum().equals(EncounterActivityStatus.ACTIVE.getValue())).findFirst();
if (encounterLocationOptional.isPresent()) {
EncounterLocation encounterLocation = encounterLocationOptional.get();
@@ -429,8 +413,8 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
encounterService.updatePriorityEnumById(encounterId, admissionPatientInfoDto.getPriorityEnum());
}
// 更新住院状态:已住院
Integer result =
encounterService.updateEncounterStatus(encounterId, EncounterZyStatus.ADMITTED_TO_THE_HOSPITAL.getValue());
Integer result
= encounterService.updateEncounterStatus(encounterId, EncounterZyStatus.ADMITTED_TO_THE_HOSPITAL.getValue());
if (result == 0) {
return R.fail("床位分配失败,请联系管理员");
}
@@ -442,18 +426,11 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
/**
* 转科
*
<<<<<<< HEAD
* @param encounterId 住院id
=======
* @param encounterId 住院患者id
>>>>>>> v1.3
* @return 结果
*/
@Override
public R<?> transferDepartment(Long encounterId) {
<<<<<<< HEAD
return null;
=======
if (encounterId == null) {
return R.fail("转科失败,请选择有效的患者");
}
@@ -511,24 +488,16 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
encounter.setOrganizationId(orderProcess.getTargetOrganizationId())
.setStatusEnum(EncounterZyStatus.REGISTERED.getValue());
return R.ok("转科成功");
>>>>>>> v1.3
}
/**
* 出院
*
<<<<<<< HEAD
* @param encounterId 住院id
=======
* @param encounterId 住院患者id
>>>>>>> v1.3
* @return 结果
*/
@Override
public R<?> hospitalDischarge(Long encounterId) {
<<<<<<< HEAD
return null;
=======
if (encounterId == null) {
return R.fail("出院失败,请选择有效的患者");
}
@@ -557,8 +526,8 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
if (!medicationDispenseList.isEmpty()) {
return R.fail("患者有待取的药品,请先取药");
}
int affectedRows =
encounterService.updateEncounterStatus(encounterId, EncounterZyStatus.DISCHARGED_FROM_HOSPITAL.getValue());
int affectedRows
= encounterService.updateEncounterStatus(encounterId, EncounterZyStatus.DISCHARGED_FROM_HOSPITAL.getValue());
if (affectedRows > 0) {
return R.ok("出院成功");
}
@@ -598,7 +567,8 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
*
* @param encounterId 诊断id
* @return EncounterAccountDto 诊断账户金额
**/
*
*/
@Override
public R<?> getAmount(Long encounterId) {
return R.ok(atdManageAppMapper.getAmount(AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
@@ -611,7 +581,8 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
*
* @param encounterId 诊断id
* @return PendingMedicationDto 待配/退药
**/
*
*/
@Override
public R<?> getPendingMedication(Long encounterId) {
Integer tenantId = SecurityUtils.getLoginUser().getTenantId();
@@ -691,8 +662,8 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
// 获取患者ID
Encounter encounter = encounterService.getById(encounterId);
// 创建体温单统计列表
List<DocStatisticsDto> data =
((List<DocStatisticsDto>)docStatisticsAppService.queryByEncounterId(encounterId).getData()).stream()
List<DocStatisticsDto> data
= ((List<DocStatisticsDto>) docStatisticsAppService.queryByEncounterId(encounterId).getData()).stream()
.filter(item -> DocDefinitionEnum.ADMISSION_VITAL_SIGNS.getValue().equals(item.getSource())).toList();
List<DocStatisticsDto> list = new ArrayList<>(data);
map.keySet().forEach(key -> {
@@ -713,6 +684,5 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
if (!list.isEmpty()) {
docStatisticsAppService.saveOrUpdateAdmissionSigns(list);
}
>>>>>>> v1.3
}
}

View File

@@ -21,10 +21,7 @@ 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;
<<<<<<< HEAD
=======
import com.core.common.enums.TenantOptionDict;
>>>>>>> v1.3
import com.core.common.exception.ServiceException;
import com.core.common.utils.*;
import com.core.common.utils.bean.BeanUtils;
@@ -178,18 +175,18 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
Integer exeStatus = inpatientAdviceParam.getExeStatus();
inpatientAdviceParam.setExeStatus(null);
// 构建查询条件
QueryWrapper<InpatientAdviceParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null);
QueryWrapper<InpatientAdviceParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null);
// 手动拼接住院患者id条件
if (encounterIds != null && !encounterIds.isEmpty()) {
List<Long> encounterIdList =
Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
List<Long> encounterIdList
= Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList);
}
// 患者医嘱分页列表
Page<InpatientAdviceDto> inpatientAdvicePage =
adviceProcessAppMapper.selectInpatientAdvicePage(new Page<>(pageNo, pageSize), queryWrapper,
Page<InpatientAdviceDto> inpatientAdvicePage
= adviceProcessAppMapper.selectInpatientAdvicePage(new Page<>(pageNo, pageSize), queryWrapper,
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_SERVICE_REQUEST,
RequestStatus.DRAFT.getValue(), EncounterActivityStatus.ACTIVE.getValue(), LocationForm.BED.getValue(),
ParticipantType.ADMITTING_DOCTOR.getCode(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
@@ -444,13 +441,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 根据执行记录新增取消执行记录
Long newProcedureId = procedureService.addProcedureRecord(procedure.getEncounterId(),
procedure.getPatientId(), procedure.getRequestId(), procedure.getRequestTable(), EventStatus.CANCEL,
<<<<<<< HEAD
ProcedureCategory.INPATIENT_ADVICE, null, procedure.getOccurrenceTime(), procedure.getGroupId(),
procedure.getId());
=======
ProcedureCategory.INPATIENT_ADVICE, null, procedure.getOccurrenceTime(), exeDate,
procedure.getGroupId(), procedure.getId());
>>>>>>> v1.3
// 将旧的执行Id和新的执行Id存入map
procedureIdMap.put(procedure.getId(), newProcedureId);
}
@@ -463,18 +455,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 处理长期医嘱
if (!longProcIdList.isEmpty()) {
// 长期药品
List<MedicationDispense> longMedDispenseList =
medicationDispenseService.getMedDispenseByProcedureId(longProcIdList);
List<MedicationDispense> longMedDispenseList
= medicationDispenseService.getMedDispenseByProcedureId(longProcIdList);
// 分离已发药发药单和未发药发药单
for (MedicationDispense medicationDispense : longMedDispenseList) {
if (DispenseStatus.COMPLETED.getValue().equals(medicationDispense.getStatusEnum())) {
longMedDispensedList.add(medicationDispense);
<<<<<<< HEAD
} else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())) {
=======
} else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())
|| DispenseStatus.SUMMARIZED.getValue().equals(medicationDispense.getStatusEnum())) {
>>>>>>> v1.3
longMedUndispenseList.add(medicationDispense);
}
}
@@ -495,18 +483,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 处理临时医嘱
if (!tempProcIdList.isEmpty()) {
// 临时药品
List<MedicationDispense> tempMedDispenseList =
medicationDispenseService.getMedDispenseByProcedureId(tempProcIdList);
List<MedicationDispense> tempMedDispenseList
= medicationDispenseService.getMedDispenseByProcedureId(tempProcIdList);
// 分离已发药发药单和未发药发药单
for (MedicationDispense medicationDispense : tempMedDispenseList) {
if (DispenseStatus.COMPLETED.getValue().equals(medicationDispense.getStatusEnum())) {
tempMedDispensedList.add(medicationDispense);
<<<<<<< HEAD
} else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())) {
=======
} else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())
|| DispenseStatus.SUMMARIZED.getValue().equals(medicationDispense.getStatusEnum())) {
>>>>>>> v1.3
tempMedUndispenseList.add(medicationDispense);
}
}
@@ -537,20 +521,20 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 重新生成汇总发药单
if (!medUndispenseList.isEmpty()) {
// 查询所有汇总单号
List<String> summaryNoList =
medUndispenseList.stream().filter(x -> x.getSummaryNo() != null && !x.getSummaryNo().isEmpty())
List<String> summaryNoList
= medUndispenseList.stream().filter(x -> x.getSummaryNo() != null && !x.getSummaryNo().isEmpty())
.map(MedicationDispense::getSummaryNo).distinct().toList();
if (!summaryNoList.isEmpty()) {
// 查询所有被汇总的药品发放
List<MedicationDispense> medSummaryList =
medicationDispenseService.getMedDispenseBySummaryNo(summaryNoList);
List<MedicationDispense> medSummaryList
= medicationDispenseService.getMedDispenseBySummaryNo(summaryNoList);
// 被汇总的发药单
Map<String, List<MedicationDispense>> medSummaryMap =
medSummaryList.stream().filter(x -> x.getSummaryNo() != null)
Map<String, List<MedicationDispense>> medSummaryMap
= medSummaryList.stream().filter(x -> x.getSummaryNo() != null)
.collect(Collectors.groupingBy(MedicationDispense::getSummaryNo));
// 被取消汇总的发药单
Map<String, List<MedicationDispense>> medSummaryCancelMap =
medUndispenseList.stream().filter(x -> x.getSummaryNo() != null)
Map<String, List<MedicationDispense>> medSummaryCancelMap
= medUndispenseList.stream().filter(x -> x.getSummaryNo() != null)
.collect(Collectors.groupingBy(MedicationDispense::getSummaryNo));
// 过滤掉被取消汇总的发药单,重新做成汇总单
Map<String, List<MedicationDispense>> reSummaryMap = new HashMap<>();
@@ -563,8 +547,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 如果存在取消记录,需要过滤掉被取消的发药单
List<MedicationDispense> cancelDispenses = medSummaryCancelMap.get(summaryNo);
// 创建被取消的发药单ID集合便于快速查找
Set<Long> cancelIds =
cancelDispenses.stream().map(MedicationDispense::getId).collect(Collectors.toSet());
Set<Long> cancelIds
= cancelDispenses.stream().map(MedicationDispense::getId).collect(Collectors.toSet());
// 过滤出未被取消的发药单
List<MedicationDispense> remainingDispenses = allDispenses.stream()
.filter(dispense -> !cancelIds.contains(dispense.getId())).collect(Collectors.toList());
@@ -583,11 +567,10 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 汇总单据号
String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICINE_SUMMARY_NO.getPrefix(), 4);
// 根据相同批号的同一药品进行汇总
Map<String, List<MedicationDispense>> medicationSummaryInfoMap =
medicationDispenses.stream().collect(Collectors
Map<String, List<MedicationDispense>> medicationSummaryInfoMap
= medicationDispenses.stream().collect(Collectors
.groupingBy(x -> x.getMedicationId() + CommonConstants.Common.DASH + x.getLotNumber()));
for (Map.Entry<String,
List<MedicationDispense>> medicationSummaryInfoList : medicationSummaryInfoMap.entrySet()) {
for (Map.Entry<String, List<MedicationDispense>> medicationSummaryInfoList : medicationSummaryInfoMap.entrySet()) {
List<MedicationDispense> medicationSummaryList = medicationSummaryInfoList.getValue();
MedicationDispense medicationDispense = medicationSummaryList.get(0);
Long medicationId = medicationDispense.getMedicationId();
@@ -601,8 +584,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 单位
String unitCode = null;
// 根据药品id获取对应的药品信息
Optional<MedicationDefinition> medicationDefinition =
medicationDefinitions.stream().filter(x -> x.getId().equals(medicationId)).findFirst();
Optional<MedicationDefinition> medicationDefinition
= medicationDefinitions.stream().filter(x -> x.getId().equals(medicationId)).findFirst();
if (medicationDefinition.isPresent()) {
partPercent = medicationDefinition.get().getPartPercent();
minUnitCode = medicationDefinition.get().getMinUnitCode();
@@ -641,8 +624,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 处理临时未发放的药品
if (!tempMedUndispenseList.isEmpty()) {
// 排除已汇总的药品
List<MedicationDispense> medicationDispenseList =
tempMedUndispenseList.stream().filter(x -> x.getSummaryNo() == null).toList();
List<MedicationDispense> medicationDispenseList
= tempMedUndispenseList.stream().filter(x -> x.getSummaryNo() == null).toList();
// 更新状态为草稿
medicationDispenseService.updateDispenseStatus(
medicationDispenseList.stream().map(MedicationDispense::getId).toList(),
@@ -651,8 +634,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 处理长期未发的药品
if (!longMedUndispenseList.isEmpty()) {
// 排除已汇总的药品
List<MedicationDispense> medicationDispenseList =
tempMedUndispenseList.stream().filter(x -> x.getSummaryNo() == null).toList();
List<MedicationDispense> medicationDispenseList
= tempMedUndispenseList.stream().filter(x -> x.getSummaryNo() == null).toList();
medicationDispenseService
.removeByIds(medicationDispenseList.stream().map(MedicationDispense::getId).toList());
}
@@ -674,17 +657,16 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
*/
@Override
public R<?> adviceVoid(AdviceExecuteParam adviceExecuteParam) {
<<<<<<< HEAD
=======
// 获取当前不执行时间
Date notExeDate = DateUtils.getNowDate();
>>>>>>> v1.3
List<AdviceExecuteDetailParam> adviceExecuteDetailList = adviceExecuteParam.getAdviceExecuteDetailList();
// 判断是否有空的pID
for (AdviceExecuteDetailParam adviceExecuteDetailParam : adviceExecuteDetailList)
if (adviceExecuteDetailParam.getProcedureId() != null)
for (AdviceExecuteDetailParam adviceExecuteDetailParam : adviceExecuteDetailList) {
if (adviceExecuteDetailParam.getProcedureId() != null) {
return R.fail("执行失败");
}
}
for (AdviceExecuteDetailParam adviceExecuteDetailParam : adviceExecuteDetailList) {
for (String executeTime : adviceExecuteDetailParam.getExecuteTimes()) {
@@ -698,11 +680,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
procedureService.addProcedureRecord(adviceExecuteDetailParam.getEncounterId(),
adviceExecuteDetailParam.getPatientId(), adviceExecuteDetailParam.getRequestId(),
adviceExecuteDetailParam.getAdviceTable(), EventStatus.STOPPED, ProcedureCategory.INPATIENT_ADVICE,
<<<<<<< HEAD
null, exeDate, adviceExecuteDetailParam.getGroupId(), null);
=======
null, exeDate, notExeDate, adviceExecuteDetailParam.getGroupId(), null);
>>>>>>> v1.3
}
}
return R.ok("不执行成功");
@@ -722,15 +700,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
List<MedicationRequestUseExe> tempMedication = medUseExeList.stream()
.filter(e -> TherapyTimeType.TEMPORARY.getValue().equals(e.getTherapyEnum())).toList();
// 药品定义id集合
List<Long> medicationDefinitionIdList =
medUseExeList.stream().map(MedicationRequestUseExe::getMedicationId).collect(Collectors.toList());
List<Long> medicationDefinitionIdList
= medUseExeList.stream().map(MedicationRequestUseExe::getMedicationId).collect(Collectors.toList());
// 医嘱详细信息
List<AdviceBaseDto> medicationInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
<<<<<<< HEAD
medicationDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(1)).getRecords();
=======
medicationDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(1), null).getRecords();
>>>>>>> v1.3
// 当前时间
Date curDate = new Date();
@@ -747,49 +721,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
longMedicationRequest = new MedicationRequest();
BeanUtils.copyProperties(medicationRequestUseExe, longMedicationRequest);
<<<<<<< HEAD
// 生成执行记录
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());
// 执行记录id
Long procedureId = procedureService.addProcedureRecord(longMedicationRequest.getEncounterId(),
longMedicationRequest.getPatientId(), longMedicationRequest.getId(),
CommonConstants.TableName.MED_MEDICATION_REQUEST, EventStatus.COMPLETED,
ProcedureCategory.INPATIENT_ADVICE, null, exeDate, longMedicationRequest.getGroupId(), null);
// 生成药品发放
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()); // 类型
chargeItem.setEncounterId(longMedicationRequest.getEncounterId()); // 就诊id
chargeItem.setEntererId(practitionerId);// 开立人ID
chargeItem.setRequestingOrgId(orgId); // 开立科室
chargeItem.setEnteredDate(curDate); // 开立时间
chargeItem.setServiceTable(CommonConstants.TableName.MED_MEDICATION_REQUEST);// 医疗服务类型
chargeItem.setServiceId(longMedicationRequest.getId()); // 医疗服务ID
chargeItem.setProductTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION);// 产品所在表
chargeItem.setProductId(longMedicationRequest.getMedicationId());// 收费项id
chargeItem.setAccountId(medicationRequestUseExe.getAccountId());// 关联账户ID
chargeItem.setConditionId(longMedicationRequest.getConditionId()); // 诊断id
chargeItem.setEncounterDiagnosisId(longMedicationRequest.getEncounterDiagnosisId()); // 就诊诊断id
chargeItem.setProcedureId(procedureId); // 执行id
chargeItem.setDispenseTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE); // 发放表名
// chargeItem.setDispenseId(dispenseId); // 发放ID
// ------------------------------ 匹配定价信息
=======
>>>>>>> v1.3
// 根据 medicationId 查找对应的医嘱信息
MedicationRequest finalLongMedicationRequest = longMedicationRequest;
Optional<AdviceBaseDto> matchedAdvice = medicationInfos.stream()
@@ -807,32 +738,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 小单位
String minUnitCode = advice.getMinUnitCode();
<<<<<<< HEAD
// 在 priceList 中查找匹配的定价信息
Optional<AdvicePriceDto> matchedPrice = advice.getPriceList().stream()
.filter(price -> finalLongMedicationRequest.getLotNumber().equals(price.getConditionValue()))
.findFirst();
if (matchedPrice.isEmpty()) {
throw new RuntimeException("未找到匹配的定价信息lotNumber: " + finalLongMedicationRequest.getLotNumber());
}
AdvicePriceDto priceDto = matchedPrice.get();
// 计算价格
BigDecimal price;
if (finalLongMedicationRequest.getUnitCode().equals(priceDto.getUnitCode())) {
// (大单位)unitCode 匹配,直接取 price
price = priceDto.getPrice();
} else {
// (小单位)unitCode 不匹配,计算 price / partPercent
price = priceDto.getPrice().divide(partPercent, 6, RoundingMode.HALF_UP);
}
chargeItem.setDefinitionId(priceDto.getDefinitionId()); // 费用定价ID
chargeItem.setDefDetailId(priceDto.getDefinitionDetailId()); // 定价子表主键
chargeItem.setQuantityValue(longMedicationRequest.getQuantity()); // 数量
chargeItem.setQuantityUnit(longMedicationRequest.getUnitCode()); // 单位
chargeItem.setUnitPrice(price); // 单价
chargeItem.setTotalPrice(
longMedicationRequest.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价
=======
// 生成执行记录
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 转换为 LocalDateTime
@@ -907,7 +812,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
} else {
// 批次售卖情况
throw new RuntimeException("[住院]批次售卖的情况暂未处理");
>>>>>>> v1.3
/* // 需要的药品数量(小单位)
BigDecimal minUnitQuantity = medicationRequestUseExe.getMinUnitQuantity();
@@ -1073,15 +977,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
List<ServiceRequestUseExe> tempActivity = actUseExeList.stream()
.filter(e -> TherapyTimeType.TEMPORARY.getValue().equals(e.getTherapyEnum())).toList();
// 诊疗定义id集合
List<Long> activityDefinitionIdList =
actUseExeList.stream().map(ServiceRequestUseExe::getActivityId).collect(Collectors.toList());
List<Long> activityDefinitionIdList
= actUseExeList.stream().map(ServiceRequestUseExe::getActivityId).collect(Collectors.toList());
// 医嘱详细信息
List<AdviceBaseDto> activityInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
<<<<<<< HEAD
activityDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(3)).getRecords();
=======
activityDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(3), null).getRecords();
>>>>>>> v1.3
// 当前时间
Date curDate = new Date();
@@ -1158,11 +1058,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
.setTotalPrice(longServiceRequest.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价
chargeItemService.saveOrUpdate(chargeItem);
<<<<<<< HEAD
// 处理诊疗绑定耗材
this.handleBindDevice(longServiceRequest, procedureId, takeDeviceLocationId, curDate, practitionerId,
orgId, serviceRequestUseExe.getAccountId(), exeDate, clickDate);
=======
// 医嘱定价来源
String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE);
if (OrderPricingSource.RETAIL_PRICE.getCode().equals(orderPricingSource)) {
@@ -1170,7 +1065,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
this.handleBindDevice(longServiceRequest, procedureId, takeDeviceLocationId, curDate,
practitionerId, orgId, serviceRequestUseExe.getAccountId(), expectedDate, clickDate);
}
>>>>>>> v1.3
}
}
@@ -1202,11 +1096,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
.set(ChargeItem::getProcedureId, procedureId)
.set(ChargeItem::getStatusEnum, ChargeItemStatus.BILLABLE.getValue()));
<<<<<<< HEAD
// 处理诊疗绑定耗材
this.handleBindDevice(tempServiceRequest, procedureId, takeDeviceLocationId, curDate, practitionerId,
orgId, serviceRequestUseExe.getAccountId(), exeDate, clickDate);
=======
// 医嘱定价来源
String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE);
if (OrderPricingSource.RETAIL_PRICE.getCode().equals(orderPricingSource)) {
@@ -1214,7 +1103,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
this.handleBindDevice(tempServiceRequest, procedureId, takeDeviceLocationId, curDate,
practitionerId, orgId, serviceRequestUseExe.getAccountId(), expectedDate, clickDate);
}
>>>>>>> v1.3
}
}
@@ -1236,8 +1124,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
private void handleBindDevice(ServiceRequest serviceRequest, Long procedureId, Long locationId, Date curDate,
Long practitionerId, Long orgId, Long accountId, Date exeDate, Date clickDate) {
// 查询诊疗绑定耗材的信息
List<ActivityBindDeviceDetailDto> activityBindDevice =
doctorStationAdviceAppMapper.getActivityBindDevice(serviceRequest.getActivityId() + "",
List<ActivityBindDeviceDetailDto> activityBindDevice
= doctorStationAdviceAppMapper.getActivityBindDevice(serviceRequest.getActivityId() + "",
PublicationStatus.ACTIVE.getValue(), CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 满足此条件,说明诊疗绑了耗材
if (!activityBindDevice.isEmpty()) {
@@ -1245,8 +1133,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
throw new RuntimeException("" + serviceRequest.getBusNo() + "】诊疗请求,绑定的耗材未配置发放耗材房");
}
// 耗材定义id集合
List<Long> deviceIds =
activityBindDevice.stream().map(ActivityBindDeviceDetailDto::getDeviceId).collect(Collectors.toList());
List<Long> deviceIds
= activityBindDevice.stream().map(ActivityBindDeviceDetailDto::getDeviceId).collect(Collectors.toList());
// 耗材库存集合
List<AdviceInventoryDto> adviceInventoryList = doctorStationAdviceAppMapper.getAdviceInventory(locationId,
deviceIds, CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue());
@@ -1255,16 +1143,12 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION,
DispenseStatus.DRAFT.getValue(), DispenseStatus.PREPARATION.getValue());
// 预减库存
List<AdviceInventoryDto> adviceInventory =
adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList);
List<AdviceInventoryDto> adviceInventory
= adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList);
// 耗材医嘱详细信息
List<AdviceBaseDto> deviceInfos = doctorStationAdviceAppService
<<<<<<< HEAD
.getAdviceBaseInfo(null, null, null, deviceIds, 0L, 1, 500, Whether.NO.getValue(), List.of(2))
=======
.getAdviceBaseInfo(null, null, null, deviceIds, 0L, 1, 500, Whether.NO.getValue(), List.of(2), null)
>>>>>>> v1.3
.getRecords();
DeviceRequest deviceRequest;
@@ -1293,14 +1177,10 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
if (deviceAdvice.isEmpty()) {
throw new RuntimeException("未找到对应的医嘱信息deviceId: " + activityBindDeviceDetailDto.getDeviceId());
}
<<<<<<< HEAD
AdviceBaseDto advice = deviceAdvice.get();
=======
// 医嘱信息
AdviceBaseDto advice = deviceAdvice.get();
// 拆零比
BigDecimal partPercent = advice.getPartPercent();
>>>>>>> v1.3
// 生成耗材请求
deviceRequest = new DeviceRequest();
@@ -1328,77 +1208,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 需要的耗材数量(小单位)
minUnitCodeQuantity = activityBindDeviceDetailDto.getMinUnitCodeQuantity();
// 单位(小单位)
<<<<<<< HEAD
// String minUnitCode = activityBindDeviceDetailDto.getMinUnitCode();
// 库存集合
List<AdviceInventoryDto> inventoryList = advice.getInventoryList();
// 价格集合
List<AdvicePriceDto> 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);
}
=======
String minUnitCode = activityBindDeviceDetailDto.getMinUnitCode();
// 价格集合
List<AdvicePriceDto> priceList = advice.getPriceList();
@@ -1437,8 +1246,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
deviceRequest.setUnitCode(minUnitCode);
// deviceRequest.setLotNumber(lotNumber);
// 发放ID
Long dispenseId =
deviceDispenseService.generateDeviceDispense(deviceRequest, procedureId, locationId, exeDate);
Long dispenseId
= deviceDispenseService.generateDeviceDispense(deviceRequest, procedureId, locationId, exeDate);
// 根据批次库存量,生成账单
chargeItem = new ChargeItem();
@@ -1472,7 +1281,6 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
chargeItemService.save(chargeItem);
>>>>>>> v1.3
}
}
}
@@ -1501,14 +1309,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
*/
private List<MedicationRequestUseExe> assemblyMedication(List<AdviceExecuteDetailParam> medicineList) {
// 药品请求id集合
List<Long> medicineRequestIdList =
medicineList.stream().map(AdviceExecuteDetailParam::getRequestId).collect(Collectors.toList());
List<Long> medicineRequestIdList
= medicineList.stream().map(AdviceExecuteDetailParam::getRequestId).collect(Collectors.toList());
// 药品请求集合
List<MedicationRequest> medicationRequestList = medicationRequestService
.list(new LambdaQueryWrapper<MedicationRequest>().in(MedicationRequest::getId, medicineRequestIdList));
// 药品定义id集合
List<Long> medicationDefinitionIdList =
medicationRequestList.stream().map(MedicationRequest::getMedicationId).collect(Collectors.toList());
List<Long> medicationDefinitionIdList
= medicationRequestList.stream().map(MedicationRequest::getMedicationId).collect(Collectors.toList());
// 药品定义集合
List<MedicationDefinition> medicationDefinitionList = medicationDefinitionService.list(
new LambdaQueryWrapper<MedicationDefinition>().in(MedicationDefinition::getId, medicationDefinitionIdList));
@@ -1524,8 +1332,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
}
BeanUtils.copyProperties(medicationRequest, useExe);
// 匹配 executeTimes根据 medicationRequest 的 id 在 medicineList 中查找匹配的 executeTimes
List<String> matchedExecuteTimes =
medicineList.stream().filter(medicine -> medicine.getRequestId().equals(medicationRequest.getId()))
List<String> matchedExecuteTimes
= medicineList.stream().filter(medicine -> medicine.getRequestId().equals(medicationRequest.getId()))
.findFirst().map(AdviceExecuteDetailParam::getExecuteTimes).orElse(null);
useExe.setExecuteTimes(matchedExecuteTimes);
// 计算 executeTimesNumexecuteTimes 的集合大小,转换为 BigDecimal
@@ -1567,8 +1375,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
*/
private List<ServiceRequestUseExe> assemblyActivity(List<AdviceExecuteDetailParam> activityList) {
// 诊疗请求id集合
List<Long> activityRequestIdList =
activityList.stream().map(AdviceExecuteDetailParam::getRequestId).collect(Collectors.toList());
List<Long> activityRequestIdList
= activityList.stream().map(AdviceExecuteDetailParam::getRequestId).collect(Collectors.toList());
// 诊疗请求集合
List<ServiceRequest> activityRequestList = serviceRequestService
.list(new LambdaQueryWrapper<ServiceRequest>().in(ServiceRequest::getId, activityRequestIdList));
@@ -1584,8 +1392,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
}
BeanUtils.copyProperties(serviceRequest, useExe);
// 匹配 executeTimes根据 serviceRequest 的 id 在 activityList 中查找匹配的 executeTimes
List<String> matchedExecuteTimes =
activityList.stream().filter(activity -> activity.getRequestId().equals(serviceRequest.getId()))
List<String> matchedExecuteTimes
= activityList.stream().filter(activity -> activity.getRequestId().equals(serviceRequest.getId()))
.findFirst().map(AdviceExecuteDetailParam::getExecuteTimes).orElse(null);
useExe.setExecuteTimes(matchedExecuteTimes);
// 计算 executeTimesNumexecuteTimes 的集合大小,转换为 BigDecimal
@@ -1613,11 +1421,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
// 药品发放编码
medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4));
// 退药状态
<<<<<<< HEAD
medicationDispense.setStatusEnum(DispenseStatus.PREPARATION.getValue());
=======
medicationDispense.setStatusEnum(DispenseStatus.PENDING_REFUND.getValue());
>>>>>>> v1.3
// 状态变更时间
medicationDispense.setStatusChangedTime(DateUtils.getNowDate());
// 取消执行id

View File

@@ -30,14 +30,8 @@ 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;
<<<<<<< HEAD
import com.openhis.web.pharmacymanage.dto.UnDispenseInventoryDto;
import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper;
import com.openhis.workflow.domain.InventoryItem;
=======
import com.openhis.web.pharmacymanage.dto.DispenseInitDto;
import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper;
>>>>>>> v1.3
import com.openhis.workflow.service.ISupplyDeliveryService;
import com.openhis.workflow.service.ISupplyRequestService;
@@ -72,59 +66,6 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
private ReturnMedicineMapper returnMedicineMapper;
/**
<<<<<<< HEAD
* 查询发药单信息
*
* @param dispenseFormSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求
* @return 发药单信息
*/
@Override
public R<?> getMedicineDispenseFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo,
Integer pageSize, HttpServletRequest request) {
// 初始化查询参数
String encounterIds = dispenseFormSearchParam.getEncounterIds();
dispenseFormSearchParam.setEncounterIds(null);
// 构建查询条件
QueryWrapper<DispenseFormSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(dispenseFormSearchParam, null, null, request);
// 手动拼接住院患者id条件
if (encounterIds != null && !encounterIds.isEmpty()) {
List<Long> encounterIdList =
Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList);
}
// 领药信息列表
Page<MedicineDispenseFormDto> 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(medicineDispenseFormPage);
}
/**
* 查询药品汇总单
=======
* 药品汇总单初始化
*
* @return 初始化信息
@@ -133,8 +74,8 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
public R<?> getMedicineSummaryInit() {
DispenseInitDto initDto = new DispenseInitDto();
// 未发药原因下拉选列表
List<DispenseInitDto.NotPerformedReasonOption> notPerformedReasonOptions =
Stream.of(NotPerformedReasonEnum.values())
List<DispenseInitDto.NotPerformedReasonOption> notPerformedReasonOptions
= Stream.of(NotPerformedReasonEnum.values())
.map(notPerformedReason -> new DispenseInitDto.NotPerformedReasonOption(notPerformedReason.getValue(),
notPerformedReason.getInfo()))
.collect(Collectors.toList());
@@ -151,42 +92,10 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
/**
* 查询发药单信息
>>>>>>> v1.3
*
* @param dispenseFormSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
<<<<<<< HEAD
* @param searchKey 模糊查询关键字
* @param request 请求
* @return 药品汇总单
*/
@Override
public R<?> getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo,
Integer pageSize, String searchKey, HttpServletRequest request) {
// 构建查询条件
QueryWrapper<DispenseFormSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(dispenseFormSearchParam,
searchKey, new HashSet<>(List.of(CommonConstants.FieldName.BusNo)), request);
// 汇总单分页列表
Page<MedicineSummaryFormDto> 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(medicineSummaryFormPage);
}
/**
* 查询药品汇总单详情
*
* @param summaryNo 汇总单号
* @return 药品汇总单详情
*/
@Override
=======
* @param request 请求
* @return 发药单信息
*/
@@ -197,18 +106,18 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
String encounterIds = dispenseFormSearchParam.getEncounterIds();
dispenseFormSearchParam.setEncounterIds(null);
// 构建查询条件
QueryWrapper<DispenseFormSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(dispenseFormSearchParam, null, null, request);
QueryWrapper<DispenseFormSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(dispenseFormSearchParam, null, null, request);
// 手动拼接住院患者id条件
if (encounterIds != null && !encounterIds.isEmpty()) {
List<Long> encounterIdList =
Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
List<Long> encounterIdList
= Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList);
}
// 领药信息列表
Page<MedicineDispenseFormDto> medicineDispenseFormPage =
medicineSummaryAppMapper.selectMedicineDispenseFormPage(new Page<>(pageNo, pageSize), queryWrapper,
Page<MedicineDispenseFormDto> 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(),
@@ -266,7 +175,6 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
* @return 药品汇总单详情
*/
@Override
>>>>>>> v1.3
public R<?> getMedicineSummaryFormDetail(String summaryNo) {
// 药品汇总单详情
return R.ok(medicineSummaryAppMapper.selectMedicineSummaryFormDetail(summaryNo));
@@ -287,8 +195,8 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
// 申请人
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
// 药品发放id
List<Long> medDispenseIdList =
medicineSummaryParamList.stream().map(MedicineSummaryParam::getDispenseId).toList();
List<Long> medDispenseIdList
= medicineSummaryParamList.stream().map(MedicineSummaryParam::getDispenseId).toList();
// 药品发放信息列表
List<MedicationDispense> medicationDispenseList = medicationDispenseService.listByIds(medDispenseIdList);
if (medicationDispenseList == null || medicationDispenseList.isEmpty()) {
@@ -302,8 +210,8 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
List<MedicationDefinition> medicationDefinitions = medicationDefinitionService
.listByIds(medicationDispenseList.stream().map(MedicationDispense::getMedicationId).toList());
// 根据发放药房分组
Map<Long, List<MedicationDispense>> medicationLocationMap =
medicationDispenseList.stream().collect(Collectors.groupingBy(MedicationDispense::getLocationId));
Map<Long, List<MedicationDispense>> medicationLocationMap
= medicationDispenseList.stream().collect(Collectors.groupingBy(MedicationDispense::getLocationId));
// 循环每个药房
for (Map.Entry<Long, List<MedicationDispense>> entry : medicationLocationMap.entrySet()) {
// 汇总单据号
@@ -328,8 +236,8 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
// 单位
String unitCode = null;
// 根据药品id获取对应的药品信息
Optional<MedicationDefinition> medicationDefinition =
medicationDefinitions.stream().filter(x -> x.getId().equals(medicationId)).findFirst();
Optional<MedicationDefinition> medicationDefinition
= medicationDefinitions.stream().filter(x -> x.getId().equals(medicationId)).findFirst();
if (medicationDefinition.isPresent()) {
partPercent = medicationDefinition.get().getPartPercent();
minUnitCode = medicationDefinition.get().getMinUnitCode();
@@ -367,56 +275,6 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
* @return 处理结果
*/
@Override
<<<<<<< HEAD
public R<?> checkInventoryItem(List<Long> devDispenseId, List<Long> medDispenseId) {
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 获取库存信息
List<UnDispenseInventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseId, medDispenseId,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个药品分组
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> 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);
}
}
=======
public R<?> cancelSummary(String summaryNo) {
// 取消汇总申请(软删除)
List<Long> requestIdList = supplyRequestService.cancelSummarySupplyRequest(List.of(summaryNo));
@@ -429,7 +287,6 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
boolean result = medicationDispenseService.cancelMedicationSummary(List.of(summaryNo));
if (!result) {
return R.fail("取消汇总申请失败");
>>>>>>> v1.3
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"取消"}));
}

View File

@@ -1,37 +1,5 @@
package com.openhis.web.inhospitalnursestation.appservice.impl;
<<<<<<< HEAD
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;
/**
* 住院护士站划价服务实现类
* 核心功能:临时耗材/诊疗活动划价签发、关联费用项管理、库存校验、医嘱删除(已收费校验)等
=======
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
@@ -83,56 +51,13 @@ import com.openhis.workflow.service.IDeviceRequestService;
import com.openhis.workflow.service.IServiceRequestService;
/**
* 住院护士站划价服务实现类 核心职责: 1. 临时耗材划价签发(含耗材请求生成、发放记录创建、费用项关联) 2. 诊疗活动划价签发(含服务请求生成、子项处理、费用项关联) 3. 划价参数校验(非空校验、库房校验等) 4.
* 已收费项目删除限制(避免误删已结算数据) 5. 关联数据一致性管理(请求表、执行表、费用表、发放表联动)
>>>>>>> v1.3
* 住院护士站划价服务实现类 核心职责: 1. 临时耗材划价签发(含耗材请求生成、发放记录创建、费用项关联) 2.
* 诊疗活动划价签发(含服务请求生成、子项处理、费用项关联) 3. 划价参数校验(非空校验、库房校验等) 4. 已收费项目删除限制(避免误删已结算数据) 5.
* 关联数据一致性管理(请求表、执行表、费用表、发放表联动)
*/
@Service
public class NurseBillingAppService implements INurseBillingAppService {
<<<<<<< HEAD
// 依赖注入:保留@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. 入参校验:非空校验 + 库存校验,校验失败直接返回错误响应
=======
// ======================== 常量定义(关联表名/编码规则)========================
/**
* 耗材请求服务关联表名(用于费用项关联数据源)
@@ -215,11 +140,12 @@ public class NurseBillingAppService implements INurseBillingAppService {
private IOrganizationService organizationService;
// ======================== 核心业务方法(划价新增)========================
/**
* 新增住院护士站划价(核心入口方法) 完整流程:参数初始化 → 入参校验 → 医嘱分类 → 生成全局签发编码 → 分类处理划价 → 返回结果 事务特性:所有操作原子化,任一环节失败则整体回滚(避免数据不一致)
* 新增住院护士站划价(核心入口方法) 完整流程:参数初始化 → 入参校验 → 医嘱分类 → 生成全局签发编码 → 分类处理划价 → 返回结果
* 事务特性:所有操作原子化,任一环节失败则整体回滚(避免数据不一致)
*
* @param regAdviceSaveParam 划价请求参数体 包含患者ID、就诊ID、住院科室ID、医嘱列表耗材/诊疗活动)、操作时间等核心数据
* @param regAdviceSaveParam 划价请求参数体
* 包含患者ID、就诊ID、住院科室ID、医嘱列表耗材/诊疗活动)、操作时间等核心数据
* @return R<?> 划价结果响应 成功返回操作成功提示编码M00002 失败:返回具体错误信息(如参数缺失、库房为空等)
*/
@Override
@@ -231,292 +157,15 @@ public class NurseBillingAppService implements INurseBillingAppService {
// 1. 时间参数初始化:优先使用入参指定时间,无则默认当前系统时间
Date curDate = new Date();
Date startTime = regAdviceSaveParam.getStartTime() == null ? curDate : regAdviceSaveParam.getStartTime();
Date authoredTime =
regAdviceSaveParam.getAuthoredTime() == null ? curDate : regAdviceSaveParam.getAuthoredTime();
Date authoredTime
= regAdviceSaveParam.getAuthoredTime() == null ? curDate : regAdviceSaveParam.getAuthoredTime();
// 2. 入参校验:校验不通过直接返回错误响应(避免后续无效处理)
>>>>>>> v1.3
R<?> checkResult = checkNurseBillingParam(regAdviceSaveParam);
if (checkResult.getCode() != R.SUCCESS) {
return checkResult;
}
<<<<<<< HEAD
// 3. 提取核心业务参数
Long organizationId = regAdviceSaveParam.getOrganizationId(); // 患者住院科室ID
List<RegAdviceSaveDto> allAdviceList = regAdviceSaveParam.getRegAdviceSaveList(); // 所有待处理医嘱列表
// 4. 按医嘱类型分类:拆分耗材类和诊疗活动类(分别处理)
List<RegAdviceSaveDto> deviceAdviceList = filterDeviceAdvice(allAdviceList); // 耗材类医嘱
List<RegAdviceSaveDto> 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<RegAdviceSaveDto> 耗材类医嘱列表
*/
private List<RegAdviceSaveDto> filterDeviceAdvice(List<RegAdviceSaveDto> allAdviceList) {
return allAdviceList.stream()
.filter(advice -> ItemType.DEVICE.getValue().equals(advice.getAdviceType()))
.collect(Collectors.toList());
}
/**
* 筛选诊疗活动类医嘱
* 按医嘱类型枚举ItemType.ACTIVITY过滤仅保留诊疗活动相关医嘱
*
* @param allAdviceList 所有待处理医嘱列表
* @return List<RegAdviceSaveDto> 诊疗活动类医嘱列表
*/
private List<RegAdviceSaveDto> filterActivityAdvice(List<RegAdviceSaveDto> 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<RegAdviceSaveDto> deviceAdviceList, List<AdviceSaveDto> deleteList,
String signCode, Long organizationId, Date curDate) {
// 1. 筛选临时类型耗材仅处理临时医嘱TherapyTimeType.TEMPORARY的新增/修改
List<AdviceSaveDto> 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<RegAdviceSaveDto> activityAdviceList, String signCode,
Long organizationId, Date curDate, Date startTime, Date authoredTime) {
// 注:诊疗活动划价逻辑待实现,建议流程:
// 1. 筛选临时类型诊疗活动
// 2. 处理删除(如需)
// 3. 新增/修改服务请求记录IServiceRequestService
// 4. 同步生成/更新费用项IChargeItemService
}
/**
* 处理耗材删除逻辑
* 关键校验:已收费的耗材项目不允许删除
* 关联删除:耗材请求表 → 耗材发放记录 → 费用项表(级联删除关联数据)
*
* @param deleteList 待删除的耗材医嘱列表可为null
*/
private void handleDelRequest(List<AdviceSaveDto> deleteList,String serviceTable) {
// 空列表直接返回,避免无效循环和查询
if (deleteList == null || deleteList.isEmpty()) {
return;
}
// 提取待删除请求ID列表用于查询费用状态
List<Long> 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<Long> delRequestIds) {
if (delRequestIds.isEmpty()) {
return;
}
// 查询待删除耗材对应的费用项列表
List<ChargeItem> 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<AdviceSaveDto> 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
* 功能将医嘱DTOAdviceSaveDto的属性映射到耗材请求实体设置默认状态和业务编号
*
* @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. 整体参数非空校验
=======
// 3. 提取核心业务参数住院科室ID优先入参无则取登录用户所属科室
Long organizationId = regAdviceSaveParam.getOrganizationId() == null ? loginUser.getOrgId()
: regAdviceSaveParam.getOrganizationId();
@@ -543,7 +192,8 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
/**
* 删除住院划价记录(核心实现) 流程:参数校验 → 分类筛选医嘱 → 已收费状态校验 → 级联删除关联数据 → 返回结果 事务特性:所有删除操作原子化,任一环节失败整体回滚
* 删除住院划价记录(核心实现) 流程:参数校验 → 分类筛选医嘱 → 已收费状态校验 → 级联删除关联数据 → 返回结果
* 事务特性:所有删除操作原子化,任一环节失败整体回滚
*
* @return R<?> 删除结果响应
*/
@@ -588,18 +238,18 @@ public class NurseBillingAppService implements INurseBillingAppService {
Integer exeStatus = inpatientAdviceParam.getExeStatus();
inpatientAdviceParam.setExeStatus(null);
// 构建查询条件
QueryWrapper<InpatientAdviceParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null);
QueryWrapper<InpatientAdviceParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null);
// 手动拼接住院患者id条件
if (encounterIds != null && !encounterIds.isEmpty()) {
List<Long> encounterIdList =
Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
List<Long> encounterIdList
= Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList);
}
// 患者医嘱分页列表
Page<InpatientAdviceDto> inpatientAdvicePage =
nurseBillingAppMapper.getInNurseBillingPage(new Page<>(pageNo, pageSize), queryWrapper,
Page<InpatientAdviceDto> inpatientAdvicePage
= nurseBillingAppMapper.getInNurseBillingPage(new Page<>(pageNo, pageSize), queryWrapper,
CommonConstants.TableName.WOR_DEVICE_REQUEST, CommonConstants.TableName.WOR_SERVICE_REQUEST,
RequestStatus.DRAFT.getValue(), EncounterActivityStatus.ACTIVE.getValue(), LocationForm.BED.getValue(),
ParticipantType.ADMITTING_DOCTOR.getCode(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
@@ -622,112 +272,47 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
// ======================== 入参校验方法 ========================
/**
* 划价入参校验(通用校验逻辑) 校验规则1. 参数非空 2. 住院科室ID非空 3. 医嘱列表非空 4. 隐含库房校验(耗材类单独校验) 校验失败直接返回错误响应,不进入后续业务逻辑
* 划价入参校验(通用校验逻辑) 校验规则1. 参数非空 2. 住院科室ID非空 3. 医嘱列表非空 4. 隐含库房校验(耗材类单独校验)
* 校验失败直接返回错误响应,不进入后续业务逻辑
*
* @param regAdviceSaveParam 划价请求参数体
* @return R<?> 校验结果成功返回R.ok()失败返回R.fail(错误信息)
*/
private R<?> checkNurseBillingParam(RegAdviceSaveParam regAdviceSaveParam) {
// 1. 整体参数非空校验请求体为null直接返回失败
>>>>>>> v1.3
if (regAdviceSaveParam == null) {
return R.fail("划价请求失败:未获取到有效请求数据,请重新提交");
}
<<<<<<< HEAD
// 2. 核心字段非空校验患者住院科室ID
=======
// 2. 核心字段非空校验患者住院科室ID不能为空
>>>>>>> v1.3
if (regAdviceSaveParam.getOrganizationId() == null) {
return R.fail("划价请求失败:患者住院科室信息缺失,请确认患者科室后重试");
}
<<<<<<< HEAD
// 3. 医嘱列表非空校验
=======
// 3. 医嘱列表非空校验:必须选择至少一个待划价项目
>>>>>>> v1.3
List<RegAdviceSaveDto> adviceList = regAdviceSaveParam.getRegAdviceSaveList();
if (adviceList == null || adviceList.isEmpty()) {
return R.fail("划价请求失败:未选择任何待划价项目,请添加医嘱后提交");
}
<<<<<<< HEAD
// 4. 临时耗材库存校验:仅校验非删除、非诊疗活动的临时医嘱
=======
// 4. 库存校验:临时注释(当前需求:划价不校验库存,实际发放时校验)
// 若后续需要恢复库存校验,可解除以下注释
/*
>>>>>>> v1.3
List<AdviceSaveDto> 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());
<<<<<<< HEAD
// 调用工具类校验库存返回非null则表示库存不足
String inventoryTip = adviceUtils.checkInventory(new ArrayList<>(needCheckInventoryList));
if (inventoryTip != null) {
// 库存提示已包含具体耗材名称和短缺数量,直接拼接操作建议
return R.fail("划价失败:" + inventoryTip + ",请联系库房确认库存或调整申请数量");
}
=======
String inventoryTip = adviceUtils.checkInventory(new ArrayList<>(needCheckInventoryList));
if (inventoryTip != null) {
return R.fail("划价失败:" + inventoryTip + ",请联系库房确认库存或调整申请数量");
}
*/
>>>>>>> v1.3
// 所有校验通过
return R.ok();
}
<<<<<<< HEAD
// ======================== 以下方法原代码未实现,保留接口方法签名 ========================
@Override
public R<?> getBillingListByEncounterId() {
// 功能根据就诊ID查询划价列表待实现
return null;
}
@Override
public R<?> deleteInNurseBilling() {
// 功能:删除住院划价记录(待实现)
// List<AdviceSaveDto> 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;
}
=======
// ======================== 医嘱分类工具方法 ========================
/**
@@ -753,9 +338,9 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
// ======================== 耗材类划价处理 ========================
/**
* 处理耗材类医嘱划价(核心子流程) 流程:筛选临时耗材 → 校验发放库房 → 生成耗材请求 → 生成执行记录 → 生成耗材发放 → 生成费用项 特殊规则:临时耗材划价不校验库存、不预减库存(仅记录发放需求,实际发放时扣库)
* 处理耗材类医嘱划价(核心子流程) 流程:筛选临时耗材 → 校验发放库房 → 生成耗材请求 → 生成执行记录 → 生成耗材发放 → 生成费用项
* 特殊规则:临时耗材划价不校验库存、不预减库存(仅记录发放需求,实际发放时扣库)
*
* @param deviceAdviceList 耗材类医嘱列表(已筛选)
* @param signCode 全局签发编码(关联同一批次划价)
@@ -801,9 +386,9 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
// ======================== 诊疗活动类划价处理 ========================
/**
* 处理诊疗活动类医嘱划价(核心子流程) 流程:生成服务请求 → 生成执行记录 → 生成费用项 → 处理诊疗子项(如有) 特殊规则:诊疗活动可能包含子项(如套餐类活动),需递归处理子项划价
* 处理诊疗活动类医嘱划价(核心子流程) 流程:生成服务请求 → 生成执行记录 → 生成费用项 → 处理诊疗子项(如有)
* 特殊规则:诊疗活动可能包含子项(如套餐类活动),需递归处理子项划价
*
* @param activityAdviceList 诊疗活动类医嘱列表(已筛选)
* @param signCode 全局签发编码(关联同一批次划价)
@@ -817,8 +402,8 @@ public class NurseBillingAppService implements INurseBillingAppService {
// 循环处理每个诊疗活动医嘱
for (AdviceSaveDto adviceDto : activityAdviceList) {
// 1. 生成诊疗活动请求记录WOR_SERVICE_REQUEST状态设为激活来源标记为护士划价
ServiceRequest serviceRequest =
this.buildActivityRequest(adviceDto, signCode, organizationId, curDate, startTime, authoredTime);
ServiceRequest serviceRequest
= this.buildActivityRequest(adviceDto, signCode, organizationId, curDate, startTime, authoredTime);
// 2. 生成医嘱执行记录CLIN_PROCEDURE关联服务请求记录执行状态
Long procedureId = this.addProcedureRecord(serviceRequest.getEncounterId(), // 就诊ID
@@ -842,7 +427,6 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
// ======================== 执行记录工具方法 ========================
/**
* 生成医嘱执行记录(通用方法,支持耗材/诊疗活动两种类型) 功能调用执行记录服务创建CLIN_PROCEDURE表记录关联请求数据与执行信息
*
@@ -867,7 +451,6 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
// ======================== 实体构建工具方法(请求/费用项)========================
/**
* 构建耗材请求实体DeviceRequest 功能将医嘱DTO参数映射为耗材请求实体填充默认配置状态、业务编号、来源等
*
@@ -1011,7 +594,8 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
/**
* 构建费用项实体ChargeItem 功能:关联请求记录(耗材/诊疗与费用信息生成待结算的费用项ADM_CHARGE_ITEM表 通用性:支持耗材、诊疗活动两种类型的费用项构建
* 构建费用项实体ChargeItem 功能:关联请求记录(耗材/诊疗与费用信息生成待结算的费用项ADM_CHARGE_ITEM表
* 通用性:支持耗材、诊疗活动两种类型的费用项构建
*
* @param adviceDto 医嘱DTO含费用相关参数单价、总价等
* @param requestBusNo 关联请求的业务编号(耗材/服务请求的busNo
@@ -1066,9 +650,9 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
// ======================== 耗材删除相关方法 ========================
/**
* 处理耗材删除逻辑(级联删除关联数据) 核心规则:已收费的耗材项目不允许删除,未收费项目级联删除关联数据 级联删除顺序:耗材请求表 → 耗材发放表 → 费用项表
* 处理耗材删除逻辑(级联删除关联数据) 核心规则:已收费的耗材项目不允许删除,未收费项目级联删除关联数据 级联删除顺序:耗材请求表 → 耗材发放表
* → 费用项表
*
* @param requestIds 待删除的耗材医嘱列表可为null
* @param serviceTable 关联服务表名(此处为耗材请求表)
@@ -1123,15 +707,14 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
// 2. 校验是否存在已收费项状态为BILLED
boolean hasBilledItem =
chargeItemList.stream().anyMatch(ci -> ChargeItemStatus.BILLED.getValue().equals(ci.getStatusEnum()));
boolean hasBilledItem
= chargeItemList.stream().anyMatch(ci -> ChargeItemStatus.BILLED.getValue().equals(ci.getStatusEnum()));
if (hasBilledItem) {
throw new ServiceException("删除失败:部分项目已完成收费(结算),不支持直接删除,请联系收费人员处理后重试");
}
}
// ======================== 未实现接口方法(保留签名,待扩展)========================
/**
* 新增订单划价(待实现) 功能:针对订单类型的划价(如患者自主购买耗材/服务),生成对应的费用项
*
@@ -1180,8 +763,8 @@ public class NurseBillingAppService implements INurseBillingAppService {
return R.fail("就诊ID不能为空");
}
costDetailSearchParam.setEncounterIds(null);
QueryWrapper<CostDetailSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(costDetailSearchParam, null, null, request);
QueryWrapper<CostDetailSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(costDetailSearchParam, null, null, request);
queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIds);
List<CostDetailDto> list = iChargeItemService.getCostDetails(queryWrapper, ChargeItemStatus.BILLABLE.getValue(),
ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDED.getValue(),
@@ -1208,16 +791,16 @@ public class NurseBillingAppService implements INurseBillingAppService {
costDetailDto.setOrgName(organizationService.getById(orgId).getName());
});
// 根据EncounterId分组
Map<Long, List<CostDetailDto>> map =
dataList.stream().collect(Collectors.groupingBy(CostDetailDto::getEncounterId));
Map<Long, List<CostDetailDto>> map
= dataList.stream().collect(Collectors.groupingBy(CostDetailDto::getEncounterId));
map.forEach((key, value) -> {
// 新加一条小计
value.add(new CostDetailDto().setEncounterId(key).setChargeName("小计").setTotalPrice(
value.stream().map(CostDetailDto::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add)));
});
// 收集要导出的数据
List<CostDetailExcelOutDto> excelOutList =
map.entrySet().stream().map(entry -> new CostDetailExcelOutDto(entry.getKey(), entry.getValue(),
List<CostDetailExcelOutDto> excelOutList
= map.entrySet().stream().map(entry -> new CostDetailExcelOutDto(entry.getKey(), entry.getValue(),
entry.getValue().get(0).getPatientName())).toList();
try {
// 住院记账-费用明细 导出
@@ -1229,5 +812,4 @@ public class NurseBillingAppService implements INurseBillingAppService {
}
}
>>>>>>> v1.3
}

View File

@@ -8,26 +8,16 @@ import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.SecurityUtils;
import com.openhis.common.constant.CommonConstants;
<<<<<<< HEAD
import com.openhis.common.enums.AssignSeqEnum;
import com.openhis.common.enums.PublicationStatus;
import com.openhis.common.utils.HisQueryUtils;
=======
import com.openhis.common.enums.*;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.common.appservice.impl.CommonServiceImpl;
import com.openhis.web.common.dto.LocationDto;
>>>>>>> v1.3
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;
<<<<<<< HEAD
import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper;
=======
>>>>>>> v1.3
import com.openhis.workflow.domain.InventoryItem;
import com.openhis.workflow.mapper.InventoryItemMapper;
import com.openhis.workflow.service.IDeviceDispenseService;
@@ -39,10 +29,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
<<<<<<< HEAD
import java.time.LocalDate;
=======
>>>>>>> v1.3
import java.util.*;
import java.util.stream.Collectors;
@@ -76,8 +62,6 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
@Resource
private InventoryItemMapper inventoryItemMapper;
<<<<<<< HEAD
=======
@Resource
private CommonServiceImpl commonService;
@@ -92,16 +76,10 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
return R.ok(inventoryPharmacyList);
}
>>>>>>> v1.3
/**
* 查询科室耗材汇总
*
* @param orgDeviceSummaryParam 查询条件
<<<<<<< HEAD
* @param startTime 开始时间
* @param endTime 结束时间
=======
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
@@ -109,115 +87,24 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
* @return 科室耗材汇总单
*/
@Override
<<<<<<< HEAD
public R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, String startTime,
String endTime, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) {
=======
public R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, Integer pageNo,
Integer pageSize, String searchKey, HttpServletRequest request) {
>>>>>>> v1.3
pageSize = Integer.MAX_VALUE;
QueryWrapper<OrgDeviceDto> queryWrapper = HisQueryUtils.buildQueryWrapper(orgDeviceSummaryParam, searchKey,
new HashSet<>(List.of(CommonConstants.FieldName.ItemName)), request);
<<<<<<< HEAD
if (!(startTime == null || endTime == null)) {
queryWrapper.between(CommonConstants.FieldName.ApplyTime, LocalDate.parse(startTime),
LocalDate.parse(endTime));
}
Page<OrgDeviceDto> orgDeviceDtoPage =
orgDeviceStockTakeAppMapper.selectOrgDeviceInfo(new Page<>(pageNo, pageSize), queryWrapper);
List<OrgDeviceDto> orgDeviceList =
new ArrayList<>(orgDeviceDtoPage.getRecords()).stream().filter(x -> x.getDispenseId() != null).toList();
=======
Page<OrgDeviceDto> orgDeviceDtoPage =
orgDeviceStockTakeAppMapper.selectOrgDeviceInfo(new Page<>(pageNo, pageSize), queryWrapper,
Page<OrgDeviceDto> orgDeviceDtoPage
= orgDeviceStockTakeAppMapper.selectOrgDeviceInfo(new Page<>(pageNo, pageSize), queryWrapper,
EncounterClass.IMP.getValue(), RequestStatus.COMPLETED.getValue(),
DispenseStatus.PREPARATION.getValue(), ChargeItemStatus.BILLABLE.getValue());
List<OrgDeviceDto> orgDeviceList = new ArrayList<>(orgDeviceDtoPage.getRecords());
>>>>>>> v1.3
// 根据项目id + 批次号 + 库房号分组
Map<String, List<OrgDeviceDto>> orgDeviceGroupBy =
orgDeviceList.stream().collect(Collectors.groupingBy(item -> item.getItemId() + CommonConstants.Common.DASH
Map<String, List<OrgDeviceDto>> orgDeviceGroupBy
= orgDeviceList.stream().collect(Collectors.groupingBy(item -> item.getItemId() + CommonConstants.Common.DASH
+ item.getLotNumber() + CommonConstants.Common.DASH + item.getSourceLocationId()));
<<<<<<< HEAD
ArrayList<OrgDeviceSummaryFromDto> 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<Long> 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<UnitDto> 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<Long> itemIdList = orgDeviceSummaryFromDtoList.stream().map(OrgDeviceSummaryFromDto::getItemId).toList();
List<InventoryItem> 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());
}
=======
List<OrgDeviceSummaryFromDto> orgDeviceSummaryFromDtoList = new ArrayList<>();
// 对分组后的数量进行汇总
@@ -291,8 +178,8 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
if (!itemIdList.isEmpty()) {
List<InventoryItem> inventoryItemList = inventoryItemService.selectInventoryByItemIdList(itemIdList,
SecurityUtils.getLoginUser().getTenantId());
for (InventoryItem inventoryItem : inventoryItemList)
for (OrgDeviceSummaryFromDto orgDeviceSummaryFromDto : orgDeviceSummaryFromDtoList)
for (InventoryItem inventoryItem : inventoryItemList) {
for (OrgDeviceSummaryFromDto orgDeviceSummaryFromDto : orgDeviceSummaryFromDtoList) {
if (orgDeviceSummaryFromDto.getItemId().equals(inventoryItem.getItemId())
&& orgDeviceSummaryFromDto.getLotNumber().equals(inventoryItem.getLotNumber())
&& orgDeviceSummaryFromDto.getSourceLocationId().equals(inventoryItem.getLocationId())) {
@@ -302,7 +189,8 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
orgDeviceSummaryFromDto.setInventoryItemId(inventoryItem.getId());
}
}
>>>>>>> v1.3
}
}
return R.ok(orgDeviceSummaryFromDtoList);
}
@@ -313,77 +201,11 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
* @return 科室耗材汇总单
*/
@Override
<<<<<<< HEAD
public R<?> orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam) {
=======
public R<?> orgDeviceSummary(List<OrgDeviceSummaryParam> orgDeviceSummaryParamList) {
>>>>>>> v1.3
// 申请时间
Date now = DateUtils.getNowDate();
// 申请人
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
<<<<<<< HEAD
// 汇总单据号
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<Long> dispenseIdList = orgDeviceSummaryParam.getDispenseIdList();
if (orgDeviceSummaryParam.getInventoryItemId() == null) {
return R.ok("未匹配到库存");
}
List<InventoryItem> 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("未找到对应库存数据");
=======
for (OrgDeviceSummaryParam orgDeviceSummaryParam : orgDeviceSummaryParamList) {
// 汇总单据号
@@ -424,8 +246,8 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
}
} else {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量)
BigDecimal quantity =
inventoryItem.getQuantity().subtract(partPercent.multiply(stockTakeQuantity));
BigDecimal quantity
= inventoryItem.getQuantity().subtract(partPercent.multiply(stockTakeQuantity));
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
@@ -452,7 +274,6 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
return R.fail("未查询到" + orgDeviceSummaryParam.getName() + "对应库存数据");
}
return R.ok("盘点成功");
>>>>>>> v1.3
}
}

View File

@@ -88,15 +88,6 @@ public class ATDManageController {
/**
* 住院患者待处理信息列表
<<<<<<< HEAD
*
* @param encounterId 住院id
* @return 待处理信息列表
*/
@GetMapping(value = "/patient-pending")
public R<?> getInPatientPendingList(Long encounterId) {
return atdManageAppService.getInPatientPendingList(encounterId);
=======
*
* @param inpatientAdviceParam 查询条件
* @param pageNo 当前页码
@@ -108,7 +99,6 @@ public class ATDManageController {
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return atdManageAppService.getInPatientPendingList(inpatientAdviceParam, pageNo, pageSize);
>>>>>>> v1.3
}
/**
@@ -125,11 +115,7 @@ public class ATDManageController {
/**
* 转科
*
<<<<<<< HEAD
* @param encounterId 住院id
=======
* @param encounterId 住院患者id
>>>>>>> v1.3
* @return 结果
*/
@PutMapping(value = "/transfer-department")
@@ -140,19 +126,13 @@ public class ATDManageController {
/**
* 出院
*
<<<<<<< HEAD
* @param encounterId 住院id
=======
* @param encounterId 住院患者id
>>>>>>> v1.3
* @return 结果
*/
@PutMapping(value = "/hospital-discharge")
public R<?> hospitalDischarge(Long encounterId) {
return atdManageAppService.hospitalDischarge(encounterId);
}
<<<<<<< HEAD
=======
/**
* 清床
@@ -170,7 +150,8 @@ public class ATDManageController {
*
* @param encounterId 诊断id
* @return EncounterAccountDto 诊断账户金额
**/
*
*/
@GetMapping(value = "/get-amount")
public R<?> getAmount(Long encounterId) {
return atdManageAppService.getAmount(encounterId);
@@ -181,10 +162,10 @@ public class ATDManageController {
*
* @param encounterId 诊断id
* @return PendingMedicationDto 待配/退药
**/
*
*/
@GetMapping(value = "/get-dr-medication")
public R<?> getPendingMedication(Long encounterId) {
return atdManageAppService.getPendingMedication(encounterId);
}
>>>>>>> v1.3
}

View File

@@ -31,26 +31,6 @@ public class MedicineSummaryController {
public IMedicineSummaryAppService medicineSummaryAppService;
/**
<<<<<<< HEAD
* 查询发药单信息
*
* @param dispenseFormSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求
* @return 发药单信息
*/
@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 medicineSummaryAppService.getMedicineDispenseFormPage(dispenseFormSearchParam, pageNo, pageSize,
request);
}
/**
* 查询药品汇总单
=======
* 药品汇总单初始化
*
* @return 初始化信息
@@ -62,32 +42,10 @@ public class MedicineSummaryController {
/**
* 查询发药单信息
>>>>>>> v1.3
*
* @param dispenseFormSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
<<<<<<< HEAD
* @param searchKey 模糊查询关键字
* @param request 请求
* @return 药品汇总单
*/
@GetMapping(value = "/summary-form")
public R<?> getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey,
HttpServletRequest request) {
return medicineSummaryAppService.getMedicineSummaryFormPage(dispenseFormSearchParam, pageNo, pageSize,
searchKey, request);
}
/**
* 查询药品汇总单详情
*
* @param summaryNo 汇总单号
* @return 药品汇总单详情
*/
=======
* @param request 请求
* @return 发药单信息
*/
@@ -124,7 +82,6 @@ public class MedicineSummaryController {
* @param summaryNo 汇总单号
* @return 药品汇总单详情
*/
>>>>>>> v1.3
@GetMapping(value = "/summary-form-detail")
public R<?> getMedicineSummaryFormDetail(String summaryNo) {
return medicineSummaryAppService.getMedicineSummaryFormDetail(summaryNo);

View File

@@ -1,26 +1,5 @@
package com.openhis.web.inhospitalnursestation.controller;
<<<<<<< HEAD
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
=======
import java.time.LocalDateTime;
import java.util.List;
@@ -44,70 +23,28 @@ import lombok.extern.slf4j.Slf4j;
/**
* 住院护士 患者划价、医嘱计费
*/
@RestController
@RequestMapping("/inhospitalnursestation/nursebilling")
@Slf4j
@AllArgsConstructor
public class NurseBillingController {
@Resource
private INurseBillingAppService iNurseBillingAppService;
>>>>>>> v1.3
/*
* 新增住院护士划价
* @return
*/
<<<<<<< HEAD
public R<?> addInNurseBilling(RegAdviceSaveParam regAdviceSaveParam) {
return R.ok();
}
/*
* 住院护士 划价列表 根据护士encounterId查询
* @return
*/
public R<?> getBillingListByEncounterId() {
return R.ok();
}
=======
@PostMapping("/add-billing")
public R<?> addInNurseBilling(@RequestBody RegAdviceSaveParam regAdviceSaveParam) {
return iNurseBillingAppService.addInNurseBilling(regAdviceSaveParam);
}
>>>>>>> v1.3
/*
* 住院护士撤销划价
* @return
*/
<<<<<<< HEAD
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() {
=======
@PostMapping("/del-billing")
public R<?> deleteInNurseBilling(@RequestBody List<AdviceBatchOpParam> paramList) {
return iNurseBillingAppService.deleteInNurseBilling(paramList);
@@ -174,7 +111,6 @@ public class NurseBillingController {
* 医嘱计费修改 诊疗 耗材
*/
public R<?> updateOrderBilling() {
>>>>>>> v1.3
return R.ok();
}

View File

@@ -1,16 +1,5 @@
package com.openhis.web.inhospitalnursestation.controller;
<<<<<<< HEAD
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;
=======
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -24,7 +13,6 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
>>>>>>> v1.3
/**
* 科室耗材盘点
@@ -33,11 +21,7 @@ import java.util.List;
* @date 2025/11/05
*/
@RestController
<<<<<<< HEAD
@RequestMapping("/nurse-station/orgdevice-stocktake")
=======
@RequestMapping("/nurse-station/org-device-stockTake")
>>>>>>> v1.3
@Slf4j
@AllArgsConstructor
public class OrgDeviceStockTakeController {
@@ -46,13 +30,6 @@ public class OrgDeviceStockTakeController {
private IOrgDeviceStockTakeAppService orgDeviceStockTakeService;
/**
<<<<<<< HEAD
* 查询科室耗材汇总
*
* @param orgDeviceSummaryParam 查询条件
* @param startTime 开始时间
* @param endTime 结束时间
=======
* 页面初始化
*
* @return 初始化信息
@@ -66,7 +43,6 @@ public class OrgDeviceStockTakeController {
* 查询科室耗材汇总
*
* @param orgDeviceSummaryParam 查询条件
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
@@ -74,21 +50,12 @@ public class OrgDeviceStockTakeController {
* @return 科室耗材汇总单
*/
@GetMapping(value = "/summary-from")
<<<<<<< HEAD
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);
=======
public R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey,
HttpServletRequest request) {
return orgDeviceStockTakeService.getOrgDeviceSummaryFromPage(orgDeviceSummaryParam, pageNo, pageSize, searchKey,
request);
>>>>>>> v1.3
}
/**
@@ -96,15 +63,9 @@ public class OrgDeviceStockTakeController {
*
* @return 科室耗材汇总单
*/
<<<<<<< HEAD
@PutMapping(value = "/orgdevice-summary")
public R<?> orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam) {
return orgDeviceStockTakeService.orgDeviceSummary(orgDeviceSummaryParam);
=======
@PutMapping(value = "/org-device-summary")
public R<?> orgDeviceSummary(@RequestBody List<OrgDeviceSummaryParam> orgDeviceSummaryParamList) {
return orgDeviceStockTakeService.orgDeviceSummary(orgDeviceSummaryParamList);
>>>>>>> v1.3
}
}

View File

@@ -21,38 +21,52 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class AdviceExecuteDetailParam {
/** 医嘱请求id */
/**
* 医嘱请求id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long requestId;
/** 就诊Id */
/**
* 就诊Id
*/
private Long encounterId;
/** 患者Id */
/**
* 患者Id
*/
private Long patientId;
/** 账号id */
/**
* 账号id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long accountId;
/** 执行id */
/**
* 执行id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long procedureId;
/** 医嘱类型 */
/**
* 医嘱类型
*/
private Integer therapyEnum;
/** 医嘱请求所在表 */
/**
* 医嘱请求所在表
*/
private String adviceTable;
/** 组号 */
/**
* 组号
*/
private Long groupId;
<<<<<<< HEAD
/** 执行时间点集合 */
=======
/** 预计执行时间点集合 */
>>>>>>> v1.3
/**
* 预计执行时间点集合
*/
private List<String> executeTimes;
}

View File

@@ -22,33 +22,46 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class DispenseFormSearchParam implements Serializable {
/** 汇总状态 */
/**
* 汇总状态
*/
private Integer SummaryStatus;
/** 中药标识 */
/**
* 中药标识
*/
private Integer tcmFlag;
/** 医嘱类型 */
/**
* 医嘱类型
*/
private Integer therapyEnum;
/** 就诊ids */
/**
* 就诊ids
*/
@JsonSerialize(using = ToStringSerializer.class)
private String encounterIds;
/** 发放药房id */
/**
* 发放药房id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
/** 执行时间 */
/**
* 执行时间
*/
private Date exeTime;
/** 汇总人id */
/**
* 汇总人id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long applicantId;
<<<<<<< HEAD
=======
/** 发放状态 */
/**
* 发放状态
*/
private Integer statusEnum;
>>>>>>> v1.3
}

View File

@@ -47,7 +47,9 @@ public class MedicineSummaryInfoDto {
*/
private String totalVolume;
/** 拆零比 */
/**
* 拆零比
*/
private BigDecimal partPercent;
/**
@@ -56,8 +58,6 @@ public class MedicineSummaryInfoDto {
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
<<<<<<< HEAD
=======
/**
* 药品类型
@@ -70,5 +70,4 @@ public class MedicineSummaryInfoDto {
* 生产厂家
*/
private String manufacturerText;
>>>>>>> v1.3
}

View File

@@ -18,57 +18,67 @@ import java.util.List;
@Data
@Accessors(chain = true)
public class OrgDeviceSummaryParam {
<<<<<<< HEAD
=======
/** 发放地点 */
/**
* 发放地点
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long sourceLocationId;
>>>>>>> v1.3
/** 项目id */
/**
* 项目id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long itemId;
<<<<<<< HEAD
=======
/** 器材名称 */
/**
* 器材名称
*/
private String name;
>>>>>>> v1.3
/** 库存id */
/**
* 库存id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long inventoryItemId;
/** 发放数量 */
/**
* 发放数量
*/
private BigDecimal dispenseQuantity;
/** 盈亏数量 */
/**
* 盈亏数量
*/
private BigDecimal stockTakeQuantity;
/** 批号 */
/**
* 批号
*/
private String lotNumber;
<<<<<<< HEAD
/** 发放地点 */
@JsonSerialize(using = ToStringSerializer.class)
private Long sourceLocationId;
=======
>>>>>>> v1.3
/** 使用单位 */
/**
* 使用单位
*/
@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列表 */
/**
* 发放id列表
*/
private List<Long> dispenseIdList;
}

View File

@@ -48,21 +48,13 @@ public interface MedicineSummaryAppMapper {
* @param page 分页信息
* @param queryWrapper 查询条件
* @param completed 发药状态:已完成
<<<<<<< HEAD
* @param inProgress 发药状态:待发药
=======
* @param preparation 发药状态:待配药
>>>>>>> v1.3
* @param summaryDispense 单据类型:汇总发药
* @return 汇总单列表
*/
Page<MedicineSummaryFormDto> selectMedicineSummaryFormPage(@Param("page") Page<MedicineSummaryFormDto> page,
@Param(Constants.WRAPPER) QueryWrapper<DispenseFormSearchParam> queryWrapper,
<<<<<<< HEAD
@Param("completed") Integer completed, @Param("inProgress") Integer inProgress,
=======
@Param("completed") Integer completed, @Param("preparation") Integer preparation,
>>>>>>> v1.3
@Param("summaryDispense") Integer summaryDispense);
/**

View File

@@ -1,11 +1,5 @@
package com.openhis.web.inhospitalnursestation.mapper;
<<<<<<< HEAD
import org.springframework.stereotype.Repository;
@Repository
public interface NurseBillingAppMapper {
=======
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@@ -52,5 +46,4 @@ public interface NurseBillingAppMapper {
@Param("billable") Integer billable, @Param("billed") Integer billed, @Param("refunded") Integer refunded,
@Param("imp") Integer imp, @Param("generateSourceEnum") Integer generateSourceEnum,
@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
>>>>>>> v1.3
}

View File

@@ -18,11 +18,7 @@ public interface OrgDeviceStockTakeAppMapper {
* @return 科室耗材信息
*/
Page<OrgDeviceDto> selectOrgDeviceInfo(@Param("page") Page<OrgDeviceDto> page,
<<<<<<< HEAD
@Param(Constants.WRAPPER) QueryWrapper<OrgDeviceDto> queryWrapper);
=======
@Param(Constants.WRAPPER) QueryWrapper<OrgDeviceDto> queryWrapper, @Param("imp") Integer imp,
@Param("requestStatus") Integer requestStatus, @Param("dispenseStatus") Integer dispenseStatus,
@Param("chargeItemStatus") Integer chargeItemStatus);
>>>>>>> v1.3
}

View File

@@ -100,8 +100,6 @@ public interface ILossReportFormAppService {
*/
R<?> getMonthlySettlementDetail(Long locationId, String startTime, String endTime, Integer pageNo,
Integer pageSize);
<<<<<<< HEAD
=======
/**
* 报损单据明细导出
@@ -118,5 +116,4 @@ public interface ILossReportFormAppService {
* @return 报损单据详情(DTO : LossReceiptDetailDto)
*/
R<List<LossReceiptDetailDto>> getLossDetail(String busNo);
>>>>>>> v1.3
}

View File

@@ -3,11 +3,6 @@ package com.openhis.web.inventorymanage.appservice;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<<<<<<< HEAD
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.dto.ProductDetailSearchParam;
=======
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.dto.ProductDetailPageDto;
@@ -15,7 +10,6 @@ import com.openhis.web.inventorymanage.dto.ProductDetailSearchParam;
import java.util.List;
>>>>>>> v1.3
/**
* 库存商品明细 appService
*
@@ -41,30 +35,6 @@ public interface IProductDetailAppService {
* @param request 请求数据
* @return 库存商品明细分页列表
*/
<<<<<<< HEAD
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);
/**
* 库存明细表导出
=======
R<Page<ProductDetailPageDto>> getProductDetailPage(ProductDetailSearchParam productDetailSearchParam,
Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
@@ -73,22 +43,12 @@ public interface IProductDetailAppService {
/**
* 查询库存备份商品明细分页列表
>>>>>>> v1.3
*
* @param productDetailSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
<<<<<<< HEAD
* @param response 响应数据
*/
void makeExcelFile(ProductDetailSearchParam productDetailSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request, HttpServletResponse response);
/**
* 查询库存商品明细统计数据
=======
* @return 库存备份商品明细
*/
R<Page<ProductDetailPageDto>> getProductDetailBackupPage(ProductDetailSearchParam productDetailSearchParam,
@@ -96,16 +56,10 @@ public interface IProductDetailAppService {
/**
* 查询库存商品备份明细统计数据
>>>>>>> v1.3
*
* @param productDetailSearchParam 查询条件
* @param searchKey 模糊查询关键字
* @param request 请求数据
<<<<<<< HEAD
* @return 库存商品明细统计数据
*/
R<?> getProductDetailStatistics(ProductDetailSearchParam productDetailSearchParam, String searchKey, HttpServletRequest request);
=======
* @return 库存商品备份明细统计数据
*/
R<?> getProductDetailBackupStatistics(ProductDetailSearchParam productDetailSearchParam, String searchKey,
@@ -139,5 +93,4 @@ public interface IProductDetailAppService {
HttpServletResponse response);
void exportExcel(ProductDetailSearchParam productDetailSearchParam, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request, HttpServletResponse response);
>>>>>>> v1.3
}

View File

@@ -25,11 +25,7 @@ import com.openhis.administration.service.IChargeItemDefDetailService;
import com.openhis.administration.service.IChargeItemDefinitionService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.enums.ConditionCode;
<<<<<<< HEAD
import com.openhis.common.enums.DelFlag;
=======
import com.core.common.enums.DelFlag;
>>>>>>> v1.3
import com.openhis.common.enums.SupplyStatus;
import com.openhis.common.enums.SupplyType;
import com.openhis.common.utils.EnumUtils;
@@ -49,9 +45,11 @@ import com.openhis.web.inventorymanage.mapper.InventoryAdjustPriceMapper;
* @Author raymond
* @Date 2025/10/23 14:57
* @Version 1.0
**/
*
*/
@Service
public class IInventoryAdjustPriceServiceImpl implements IInventoryAdjustPriceService {
@Resource
private IChargeItemDefinitionService chargeItemDefinitionService;
@Resource
@@ -70,8 +68,8 @@ public class IInventoryAdjustPriceServiceImpl implements IInventoryAdjustPriceSe
HashSet<String> searchFields = new HashSet<>();
searchFields.add(CommonConstants.FieldName.SupplyBusNo);
QueryWrapper<ReceiptApprovalSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(adjustPriceManagerSearchParam, searchKey, searchFields, request);
QueryWrapper<ReceiptApprovalSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(adjustPriceManagerSearchParam, searchKey, searchFields, request);
// 查询单据分页列表
Page<ChangePricePageDto> receiptPage = inventoryAdjustPriceMapper.searchPageByExamine(
new Page<>(pageNo, pageSize), queryWrapper, SupplyStatus.APPROVAL.getValue(), SupplyStatus.AGREE.getValue(),
@@ -89,8 +87,8 @@ public class IInventoryAdjustPriceServiceImpl implements IInventoryAdjustPriceSe
@Override
public R<?> updateExamineByRejected(String busNo) {
List<ChangePriceRecord> changePriceRecordList =
this.changePriceRecordService.searchChangePriceDataForBusNo(busNo);
List<ChangePriceRecord> changePriceRecordList
= this.changePriceRecordService.searchChangePriceDataForBusNo(busNo);
if (changePriceRecordList.isEmpty()) {
return R.fail();
}
@@ -119,8 +117,8 @@ public class IInventoryAdjustPriceServiceImpl implements IInventoryAdjustPriceSe
@Override
@Transactional(rollbackFor = Exception.class)
public R<?> updateExamineByApproved(String busNo) {
List<ChangePriceRecord> changePriceRecordList =
this.changePriceRecordService.searchChangePriceDataForBusNo(busNo);
List<ChangePriceRecord> changePriceRecordList
= this.changePriceRecordService.searchChangePriceDataForBusNo(busNo);
if (changePriceRecordList.isEmpty()) {
return R.fail();
}
@@ -141,10 +139,11 @@ public class IInventoryAdjustPriceServiceImpl implements IInventoryAdjustPriceSe
* @Author raymond
* @Date 22:16 2025/10/18
* @return com.core.common.core.domain.R<?>
**/
*
*/
public void executeBusiness(String busNo) {
List<ChangePriceDataDto> changePriceDataDtoList =
this.changePriceRecordService.searchChangePriceRecordDataByBusNo(busNo, SupplyStatus.APPROVAL.getValue());
List<ChangePriceDataDto> changePriceDataDtoList
= this.changePriceRecordService.searchChangePriceRecordDataByBusNo(busNo, SupplyStatus.APPROVAL.getValue());
// 零售价
List<ChargeItemDefDetail> itemDefDetailRetailList = new LinkedList<>();
// 进货价
@@ -157,12 +156,12 @@ public class IInventoryAdjustPriceServiceImpl implements IInventoryAdjustPriceSe
chargeItemDefinition.setPrice(data.getNewRetailPrice());
this.chargeItemDefinitionService.updateById(chargeItemDefinition);
// 零售价
List<ChargeItemDefDetail> defDetailRetailList =
this.chargeItemDefDetailService.searchChargeItemDefDetailByIds(chargeItemDefinition.getId(),
List<ChargeItemDefDetail> defDetailRetailList
= this.chargeItemDefDetailService.searchChargeItemDefDetailByIds(chargeItemDefinition.getId(),
ConditionCode.LOT_NUMBER_PRICE.getCode(), data.getLotNumber());
// 进货价
List<ChargeItemDefDetail> defDetailBuyingList =
this.chargeItemDefDetailService.searchChargeItemDefDetailByIds(chargeItemDefinition.getId(),
List<ChargeItemDefDetail> defDetailBuyingList
= this.chargeItemDefDetailService.searchChargeItemDefDetailByIds(chargeItemDefinition.getId(),
ConditionCode.LOT_NUMBER_COST.getCode(), data.getLotNumber());
// 采购价
List<ChargeItemDefDetail> purchasePriceList = this.chargeItemDefDetailService

View File

@@ -10,12 +10,8 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<<<<<<< HEAD
import com.core.common.utils.poi.ExcelUtil;
=======
import com.core.common.utils.*;
import com.openhis.web.inventorymanage.dto.ProductTransferPageDto;
>>>>>>> v1.3
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -25,14 +21,8 @@ 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;
<<<<<<< HEAD
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.SecurityUtils;
=======
import com.core.common.exception.NonCaptureException;
import com.core.common.utils.poi.ExcelUtil;
>>>>>>> v1.3
import com.core.web.util.TenantOptionUtil;
import com.openhis.administration.domain.ChargeItemDefDetail;
import com.openhis.administration.service.IChargeItemDefDetailService;
@@ -47,10 +37,6 @@ 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;
<<<<<<< HEAD
import com.openhis.web.reportmanage.utils.ExcelFillerUtil;
=======
>>>>>>> v1.3
import com.openhis.workflow.domain.InventoryItem;
import com.openhis.workflow.mapper.InventoryItemMapper;
@@ -97,19 +83,12 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
* @return 库存商品明细分页列表
*/
@Override
<<<<<<< HEAD
public R<?> getProductDetailPage(ProductDetailSearchParam productDetailSearchParam, Integer pageNo,
Integer pageSize, String searchKey, HttpServletRequest request) {
// 项目类型
Integer categoryCode = productDetailSearchParam.getCategoryCode();
=======
public R<Page<ProductDetailPageDto>> getProductDetailPage(ProductDetailSearchParam productDetailSearchParam,
Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) {
// 药品类型
List<String> medCategoryCodes = productDetailSearchParam.getMedCategoryCodes();
// 药品类型
List<String> devCategoryCodes = productDetailSearchParam.getDevCategoryCodes();
>>>>>>> v1.3
// 库存是否为零
Integer zeroFlag = productDetailSearchParam.getZeroFlag();
// 过期天数
@@ -118,38 +97,19 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
List<Long> locationIds = productDetailSearchParam.getLocationIds();
// 供应商
List<Long> supplierIds = productDetailSearchParam.getSupplierIds();
<<<<<<< HEAD
productDetailSearchParam.setCategoryCode(null).setZeroFlag(null).setRemainingDays(null).setLocationIds(null)
.setSupplierIds(null);
=======
productDetailSearchParam.setZeroFlag(null).setRemainingDays(null).setLocationIds(null).setSupplierIds(null)
.setMedCategoryCodes(null).setDevCategoryCodes(null);
>>>>>>> v1.3
// 构建查询条件
QueryWrapper<ProductDetailSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(
productDetailSearchParam, searchKey, new HashSet<>(Arrays.asList(CommonConstants.FieldName.ItemName,
CommonConstants.FieldName.BusNo, CommonConstants.FieldName.PyStr, CommonConstants.FieldName.WbStr)),
request);
// 根据不同分类拼接查询条件
<<<<<<< HEAD
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 (medCategoryCodes != null && !medCategoryCodes.isEmpty()) {
queryWrapper.in(CommonConstants.FieldName.MedCategoryCode, medCategoryCodes);
}
if (devCategoryCodes != null && !devCategoryCodes.isEmpty()) {
queryWrapper.in(CommonConstants.FieldName.DevCategoryCode, devCategoryCodes);
>>>>>>> v1.3
}
// 库存是否为零
if (zeroFlag != null) {
@@ -183,29 +143,25 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
// 批次售价需查询定价子表
if (OrderPricingSource.BATCH_SELLING_PRICE.getCode().equals(orderPricingSource)) {
// 收集所有定价ID
List<Long> chargeItemDefIdList =
productDetailList.stream().map(ProductDetailPageDto::getChargeItemDefId).filter(Objects::nonNull)
List<Long> chargeItemDefIdList
= productDetailList.stream().map(ProductDetailPageDto::getChargeItemDefId).filter(Objects::nonNull)
.distinct().collect(Collectors.toList());
// 查询批次售价信息
if (!chargeItemDefIdList.isEmpty()) {
List<ChargeItemDefDetail> lotNumberPriceList =
chargeItemDefDetailService.getLotNumberPriceByDefIds(chargeItemDefIdList);
List<ChargeItemDefDetail> lotNumberPriceList
= chargeItemDefDetailService.getLotNumberPriceByDefIds(chargeItemDefIdList);
if (lotNumberPriceList != null && !lotNumberPriceList.isEmpty()) {
// 创建批次号到售价的映射
Map<String, BigDecimal> lotPriceMap =
lotNumberPriceList.stream().collect(Collectors.toMap(ChargeItemDefDetail::getConditionValue,
Map<String, BigDecimal> 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) {
<<<<<<< HEAD
productDetail.setTotalSalePrice(price);
=======
productDetail.setSalePrice(price);
>>>>>>> v1.3
}
}
}
@@ -221,8 +177,8 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
EnumUtils.getInfoByValue(PublicationStatus.class, productDetailPageDto.getInventoryStatusEnum()));
// 计算包装单位数量
BigDecimal[] results =
productDetailPageDto.getQuantity().divideAndRemainder(productDetailPageDto.getPartPercent());
BigDecimal[] results
= productDetailPageDto.getQuantity().divideAndRemainder(productDetailPageDto.getPartPercent());
// 整数
productDetailPageDto.setNumber(results[0]);
// 余数
@@ -250,8 +206,6 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
}
/**
<<<<<<< HEAD
=======
* 查询库存备份商品明细分页列表
*
* @param productDetailSearchParam 查询条件
@@ -311,8 +265,8 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
queryWrapper.le(CommonConstants.FieldName.RemainingDays, remainingDays);
}
// 查询库存商品备份明细分页列表
Page<ProductDetailPageDto> productDetailsBackupPage =
productDetailsMapper.selectProductDetailsBackupPage(new Page<>(pageNo, pageSize), queryWrapper);
Page<ProductDetailPageDto> productDetailsBackupPage
= productDetailsMapper.selectProductDetailsBackupPage(new Page<>(pageNo, pageSize), queryWrapper);
productDetailsBackupPage.getRecords().forEach(e -> {
// 医保等级
e.setChrgitmLv_enumText(EnumUtils.getInfoByValue(YbChrgitmLv.class, e.getChrgitmLv()));
@@ -324,7 +278,6 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
}
/**
>>>>>>> v1.3
* 查询库存商品明细统计数据
*
* @param productDetailSearchParam 查询条件
@@ -336,17 +289,10 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
public R<?> getProductDetailStatistics(ProductDetailSearchParam productDetailSearchParam, String searchKey,
HttpServletRequest request) {
// 查询库存商品明细分页列表
<<<<<<< HEAD
R<?> result = this.getProductDetailPage(productDetailSearchParam, 1, 30000, searchKey, request);
ProductDetailPageDto productDetail = new ProductDetailPageDto();
if (result != null && result.getData() != null) {
Page<ProductDetailPageDto> productDetailPage = (Page<ProductDetailPageDto>)result.getData();
=======
Page<ProductDetailPageDto> productDetailPage =
this.getProductDetailPage(productDetailSearchParam, 1, 30000, searchKey, request).getData();
Page<ProductDetailPageDto> productDetailPage
= this.getProductDetailPage(productDetailSearchParam, 1, 30000, searchKey, request).getData();
ProductDetailPageDto productDetail = new ProductDetailPageDto();
if (productDetailPage != null && productDetailPage.getTotal() > 0) {
>>>>>>> v1.3
List<ProductDetailPageDto> productDetailList = productDetailPage.getRecords();
// 统计库房总金额
productDetail
@@ -359,15 +305,6 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
}
/**
<<<<<<< HEAD
* 操作:停供
*
* @param inventoryId 库存项目管理ID
* @return 操作结果
*/
@Override
public R<?> stopSupplyById(Long inventoryId) {
=======
* 查询库存商品备份明细统计数据
*
* @param productDetailSearchParam 查询条件
@@ -379,8 +316,8 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
public R<?> getProductDetailBackupStatistics(ProductDetailSearchParam productDetailSearchParam, String searchKey,
HttpServletRequest request) {
// 查询库存商品备份明细分页列表
Page<ProductDetailPageDto> productDetailPage =
this.getProductDetailBackupPage(productDetailSearchParam, 1, 30000, searchKey, request).getData();
Page<ProductDetailPageDto> productDetailPage
= this.getProductDetailBackupPage(productDetailSearchParam, 1, 30000, searchKey, request).getData();
ProductDetailPageDto productDetailBackup = new ProductDetailPageDto();
if (productDetailPage != null && productDetailPage.getTotal() > 0) {
List<ProductDetailPageDto> productDetailBackupList = productDetailPage.getRecords();
@@ -403,7 +340,6 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
*/
@Override
public R<?> stopSupplyById(List<Long> inventoryIdList) {
>>>>>>> v1.3
// 获取当前时间
Date now = DateUtils.getNowDate();
@@ -412,11 +348,7 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
// 停供按钮压下,更新库存项目管理表的库存状态:已停供
int updateCount = baseMapper.update(null,
<<<<<<< HEAD
new LambdaUpdateWrapper<InventoryItem>().eq(InventoryItem::getId, inventoryId)
=======
new LambdaUpdateWrapper<InventoryItem>().in(InventoryItem::getId, inventoryIdList)
>>>>>>> v1.3
.set(InventoryItem::getUpdateTime, now).set(InventoryItem::getUpdateBy, loginUser.getUserId())
.set(InventoryItem::getInventoryStatusEnum, PublicationStatus.RETIRED.getValue()));
@@ -427,19 +359,11 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
/**
* 操作:取消停供
*
<<<<<<< HEAD
* @param inventoryId 库存项目管理ID
* @return 操作结果
*/
@Override
public R<?> cancelSupplyById(Long inventoryId) {
=======
* @param inventoryIdList 库存项目管理ID
* @return 操作结果
*/
@Override
public R<?> cancelSupplyById(List<Long> inventoryIdList) {
>>>>>>> v1.3
// 获取当前时间
Date now = DateUtils.getNowDate();
@@ -448,11 +372,7 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
// 取消停供按钮压下,更新库存项目管理表的库存状态:未停供
int updateCount = baseMapper.update(null,
<<<<<<< HEAD
new LambdaUpdateWrapper<InventoryItem>().eq(InventoryItem::getId, inventoryId)
=======
new LambdaUpdateWrapper<InventoryItem>().in(InventoryItem::getId, inventoryIdList)
>>>>>>> v1.3
.set(InventoryItem::getUpdateTime, now).set(InventoryItem::getUpdateBy, loginUser.getUserId())
.set(InventoryItem::getInventoryStatusEnum, PublicationStatus.ACTIVE.getValue()));
@@ -464,34 +384,15 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
* 库存明细表导出
*
* @param productDetailSearchParam 查询条件
<<<<<<< HEAD
* @param pageNo 当前页码
* @param pageSize 查询条数
=======
>>>>>>> v1.3
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @param response 响应数据
*/
<<<<<<< HEAD
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<ProductDetailPageDto> pageData = (Page)result.getData();
List<ProductDetailPageDto> dataList = pageData.getRecords();
try {
for(ProductDetailPageDto productDetailPageDto : dataList) {
// 获取单位
String unitCode = productDetailPageDto.getUnitCodeDictText();
String minUnitCode = productDetailPageDto.getMinUnitCodeDictText();
//获取数量
=======
@Override
public void makeExcelFile(ProductDetailSearchParam productDetailSearchParam, String searchKey,
HttpServletRequest request, HttpServletResponse response) {
R<List<ProductDetailPageDto>> result =
this.getProductDetailPageAndTranslateField(productDetailSearchParam, searchKey, request);
R<List<ProductDetailPageDto>> result
= this.getProductDetailPageAndTranslateField(productDetailSearchParam, searchKey, request);
if (result.getData() != null) {
List<ProductDetailPageDto> dataList = result.getData();
try {
@@ -500,20 +401,10 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
String unitCode = productDetailPageDto.getUnitCodeDictText();
String minUnitCode = productDetailPageDto.getMinUnitCodeDictText();
// 获取数量
>>>>>>> v1.3
BigDecimal number = productDetailPageDto.getNumber();
BigDecimal remainder = productDetailPageDto.getRemainder();
// 拼接
if (remainder.compareTo(BigDecimal.ZERO) > 0) {
<<<<<<< HEAD
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);
// 金额字段拼接 ‘元’
=======
productDetailPageDto.setNumber_text(number.setScale(0, RoundingMode.HALF_UP) + unitCode
+ remainder.setScale(0, RoundingMode.HALF_UP) + minUnitCode);
} else {
@@ -523,27 +414,11 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
productDetailPageDto.getQuantity().setScale(0, RoundingMode.HALF_UP) + minUnitCode);
// 金额字段拼接
>>>>>>> v1.3
BigDecimal purchasePrice = productDetailPageDto.getPurchasePrice();
BigDecimal salePrice = productDetailPageDto.getSalePrice();
BigDecimal totalPurchasePrice = productDetailPageDto.getTotalPurchasePrice();
BigDecimal totalSalePrice = productDetailPageDto.getTotalSalePrice();
if (salePrice != null) {
<<<<<<< HEAD
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) + "");
=======
productDetailPageDto.setExcelSalePrice(
salePrice.setScale(2, RoundingMode.HALF_UP) + "");
}
@@ -561,26 +436,13 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
if (totalSalePrice != null) {
productDetailPageDto.setExcelTotalSalePrice(
totalSalePrice.setScale(2, RoundingMode.HALF_UP) + "");
>>>>>>> v1.3
}
// 判断项目类别
String devCategoryCodeDictText = productDetailPageDto.getDevCategoryCodeDictText();
String medCategoryCodeDictText = productDetailPageDto.getMedCategoryCodeDictText();
<<<<<<< HEAD
String categoryCodeDictText = devCategoryCodeDictText == null ? medCategoryCodeDictText : devCategoryCodeDictText;
productDetailPageDto.setCategoryCodeDictText(categoryCodeDictText);
}
//导出
ExcelUtil<ProductDetailPageDto> util = new ExcelUtil(ProductDetailPageDto.class);
util.exportExcel(response, dataList, "库存明细记录");
} catch (Exception e) {
e.printStackTrace();
System.out.printf("导出Excel失败" + e.getMessage());
=======
String categoryCodeDictText =
devCategoryCodeDictText == null ? medCategoryCodeDictText : devCategoryCodeDictText;
String categoryCodeDictText
= devCategoryCodeDictText == null ? medCategoryCodeDictText : devCategoryCodeDictText;
productDetailPageDto.setCategoryCodeDictText(categoryCodeDictText);
}
@@ -589,86 +451,19 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
util.exportExcel(response, dataList, CommonConstants.SheetName.INVENTORY_DETAIL_RECORD);
} catch (Exception e) {
throw new NonCaptureException(StringUtils.format("导出excel失败"), e);
>>>>>>> v1.3
}
}
}
<<<<<<< HEAD
/**
* 查询库存商品明细分页列表,联查数据字典
*
* @param productDetailSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
=======
/**
* 查询库存商品明细分页列表,联查数据字典翻译单位字段
*
* @param productDetailSearchParam 查询条件
>>>>>>> v1.3
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 库存商品明细分页列表
*/
<<<<<<< HEAD
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<Long> locationIds = productDetailSearchParam.getLocationIds();
List<Long> supplierIds = productDetailSearchParam.getSupplierIds();
productDetailSearchParam.setCategoryCode((Integer)null).setZeroFlag((Integer)null).setRemainingDays((Integer)null).setLocationIds((List)null).setSupplierIds((List)null);
QueryWrapper<ProductDetailSearchParam> 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<ProductDetailPageDto> productDetailsPage = this.productDetailsMapper.selectProductDetailsPageX(new Page((long)pageNo, (long)pageSize), queryWrapper, "med_medication_definition", "adm_device_definition", ConditionCode.LOT_NUMBER_COST.getCode());
List<ProductDetailPageDto> 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<Long> chargeItemDefIdList = (List)productDetailList.stream().map(ProductDetailPageDto::getChargeItemDefId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
if (!chargeItemDefIdList.isEmpty()) {
List<ChargeItemDefDetail> lotNumberPriceList = this.chargeItemDefDetailService.getLotNumberPriceByDefIds(chargeItemDefIdList);
if (lotNumberPriceList != null && !lotNumberPriceList.isEmpty()) {
Map<String, BigDecimal> 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);
=======
private R<List<ProductDetailPageDto>> getProductDetailPageAndTranslateField(
ProductDetailSearchParam productDetailSearchParam, String searchKey, HttpServletRequest request) {
// 药品类型
@@ -727,18 +522,18 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
// 批次售价需查询定价子表
if (OrderPricingSource.BATCH_SELLING_PRICE.getCode().equals(orderPricingSource)) {
// 收集所有定价ID
List<Long> chargeItemDefIdList =
productDetailList.stream().map(ProductDetailPageDto::getChargeItemDefId).filter(Objects::nonNull)
List<Long> chargeItemDefIdList
= productDetailList.stream().map(ProductDetailPageDto::getChargeItemDefId).filter(Objects::nonNull)
.distinct().collect(Collectors.toList());
// 查询批次售价信息
if (!chargeItemDefIdList.isEmpty()) {
List<ChargeItemDefDetail> lotNumberPriceList =
chargeItemDefDetailService.getLotNumberPriceByDefIds(chargeItemDefIdList);
List<ChargeItemDefDetail> lotNumberPriceList
= chargeItemDefDetailService.getLotNumberPriceByDefIds(chargeItemDefIdList);
if (lotNumberPriceList != null && !lotNumberPriceList.isEmpty()) {
// 创建批次号到售价的映射
Map<String, BigDecimal> lotPriceMap =
lotNumberPriceList.stream().collect(Collectors.toMap(ChargeItemDefDetail::getConditionValue,
Map<String, BigDecimal> lotPriceMap
= lotNumberPriceList.stream().collect(Collectors.toMap(ChargeItemDefDetail::getConditionValue,
ChargeItemDefDetail::getAmount, (existing, replacement) -> existing)); // 处理重复键的情况
// 更新原始列表中的售价
@@ -746,34 +541,12 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
BigDecimal price = lotPriceMap.get(productDetail.getLotNumber());
if (price != null) {
productDetail.setSalePrice(price);
>>>>>>> v1.3
}
}
}
}
}
<<<<<<< HEAD
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);
}
=======
for (ProductDetailPageDto productDetailPageDto : productDetailList) {
// 医保等级
productDetailPageDto.setChrgitmLv_enumText(
@@ -783,8 +556,8 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
EnumUtils.getInfoByValue(PublicationStatus.class, productDetailPageDto.getInventoryStatusEnum()));
// 计算包装单位数量
BigDecimal[] results =
productDetailPageDto.getQuantity().divideAndRemainder(productDetailPageDto.getPartPercent());
BigDecimal[] results
= productDetailPageDto.getQuantity().divideAndRemainder(productDetailPageDto.getPartPercent());
// 整数
productDetailPageDto.setNumber(results[0]);
// 余数
@@ -870,14 +643,13 @@ public class ProductDetailAppServiceImpl extends ServiceImpl<InventoryItemMapper
}
try {
// 导出
NewExcelUtil<ProductDetailPageDto> newExcelUtil =
new NewExcelUtil<>(ProductDetailPageDto.class);
NewExcelUtil<ProductDetailPageDto> newExcelUtil
= new NewExcelUtil<>(ProductDetailPageDto.class);
newExcelUtil.exportExcel(response, dataList, CommonConstants.SheetName.INVENTORY_DETAIL_RECORD);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
>>>>>>> v1.3
}

View File

@@ -3,18 +3,9 @@
*/
package com.openhis.web.inventorymanage.appservice.impl;
<<<<<<< HEAD
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
=======
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
>>>>>>> v1.3
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -22,25 +13,15 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<<<<<<< HEAD
=======
import com.openhis.administration.domain.Location;
import com.openhis.administration.service.impl.LocationServiceImpl;
>>>>>>> v1.3
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;
<<<<<<< HEAD
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.SecurityUtils;
=======
import com.core.common.utils.*;
>>>>>>> v1.3
import com.core.common.utils.bean.BeanUtils;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.domain.Supplier;
@@ -156,8 +137,8 @@ public class PurchaseInventoryAppServiceImpl implements IPurchaseInventoryAppSer
searchFields.add(CommonConstants.FieldName.SupplyBusNo);
// 构建查询条件
QueryWrapper<InventorySearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(inventorySearchParam, searchKey, searchFields, request);
QueryWrapper<InventorySearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(inventorySearchParam, searchKey, searchFields, request);
// 查询入库单据分页列表
Page<ReceiptPageDto> inventoryReceiptPage = purchaseInventoryMapper.selectInventoryReceiptPage(
new Page<>(pageNo, pageSize), queryWrapper, SupplyType.PURCHASE_INVENTORY.getValue());
@@ -227,8 +208,8 @@ public class PurchaseInventoryAppServiceImpl implements IPurchaseInventoryAppSer
List<String> idList = new ArrayList<>();
// 单据号取得
List<String> busNoList =
purchaseInventoryDtoList.stream().map(PurchaseInventoryDto::getBusNo).collect(Collectors.toList());
List<String> busNoList
= purchaseInventoryDtoList.stream().map(PurchaseInventoryDto::getBusNo).collect(Collectors.toList());
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(busNoList.get(0));
if (!requestList.isEmpty()) {
@@ -337,8 +318,8 @@ public class PurchaseInventoryAppServiceImpl implements IPurchaseInventoryAppSer
public R<?> getMonthlySettlementDetail(Long locationId, String startTime, String endTime, Integer pageNo,
Integer pageSize) {
Page<ReceiptDetailDto> receiptDetailList =
purchaseInventoryMapper.getMonthlySettlementDetail(new Page<>(pageNo, pageSize), locationId, startTime,
Page<ReceiptDetailDto> receiptDetailList
= purchaseInventoryMapper.getMonthlySettlementDetail(new Page<>(pageNo, pageSize), locationId, startTime,
endTime, ItemType.MEDICINE.getValue(), ItemType.DEVICE.getValue(),
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION,
Arrays.asList(SupplyType.PURCHASE_INVENTORY.getValue()), SupplyStatus.AGREE.getValue());

View File

@@ -212,8 +212,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
searchFields.add(CommonConstants.FieldName.SupplyBusNo);
// 构建查询条件
QueryWrapper<ReceiptApprovalSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(receiptSearchParam, searchKey, searchFields, request);
QueryWrapper<ReceiptApprovalSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(receiptSearchParam, searchKey, searchFields, request);
if (typeEnumList != null && !typeEnumList.isEmpty()) {
queryWrapper.in(CommonConstants.FieldName.TypeEnum, typeEnumList);
@@ -346,8 +346,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
minQuantity = minQuantity.add(supplyItemDetailDto.getItemQuantity());
}
// 更新源仓库库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now);
Boolean aBoolean
= inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now);
if (!aBoolean) {
throw new ServiceException("系统异常,请稍后重试");
@@ -368,8 +368,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
// 调用医保商品采购接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList =
this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.PURCHASE_IN, now, false);
List<String> uploadFailedNoList
= this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.PURCHASE_IN, now, false);
if (!uploadFailedNoList.isEmpty()) {
returnMsg = "3503商品采购上传错误错误项目编码" + uploadFailedNoList;
} else {
@@ -444,8 +444,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
minQuantity = minQuantity.add(supplyItemDetailDto.getItemQuantity());
// }
// 更新库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now);
Boolean aBoolean
= inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now);
if (!aBoolean) {
throw new ServiceException("系统异常,请稍后重试");
}
@@ -460,13 +460,13 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
List<String> uploadFailedLossList = null;
if (!positiveList.isEmpty()) {
// 调用医保库存变更接口,盘盈
uploadFailedGainList =
this.ybInventoryIntegrated(positiveList, YbInvChgType.INVENTORY_GAIN, now, false);
uploadFailedGainList
= this.ybInventoryIntegrated(positiveList, YbInvChgType.INVENTORY_GAIN, now, false);
}
if (!negativeList.isEmpty()) {
// 调用医保库存变更接口,盘亏
uploadFailedLossList =
this.ybInventoryIntegrated(negativeList, YbInvChgType.INVENTORY_LOSS, now, false);
uploadFailedLossList
= this.ybInventoryIntegrated(negativeList, YbInvChgType.INVENTORY_LOSS, now, false);
}
if (uploadFailedGainList != null || uploadFailedLossList != null) {
changeReturnMsg = "3502库存变更上传错误错误项目编码" + uploadFailedGainList + uploadFailedLossList;
@@ -562,8 +562,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
}
// }
// 更新源仓库库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), minQuantity, now);
Boolean aBoolean
= inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), minQuantity, now);
if (!aBoolean) {
throw new ServiceException("系统异常,请稍后重试");
}
@@ -609,8 +609,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
minQuantity = minQuantity.add(supplyItemDetailDto.getItemQuantity());
// }
// 更新目的仓库库存数量
Boolean bBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now);
Boolean bBoolean
= inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now);
if (!bBoolean) {
throw new ServiceException("系统异常,请稍后重试");
@@ -710,8 +710,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
}
// 更新仓库库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), minQuantity, now);
Boolean aBoolean
= inventoryItemService.updateInventoryQuantity(inventoryItemSource.getId(), minQuantity, now);
if (!aBoolean) {
throw new ServiceException("系统异常,请稍后重试");
@@ -729,8 +729,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
// 调用医保采购退货接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList =
this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.RETURN_OUT, now, false);
List<String> uploadFailedNoList
= this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.RETURN_OUT, now, false);
if (!uploadFailedNoList.isEmpty()) {
returnMsg = "3504采购退货上传错误错误项目编码" + uploadFailedNoList;
}
@@ -806,8 +806,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
}
}
// 更新库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now);
Boolean aBoolean
= inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now);
if (!aBoolean) {
throw new ServiceException("系统异常,请稍后重试");
}
@@ -821,8 +821,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
// 调用医保库存变更接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList =
this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.DESTRUCTION, now, false);
List<String> uploadFailedNoList
= this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.DESTRUCTION, now, false);
if (!uploadFailedNoList.isEmpty()) {
returnMsg = "3502库存变更上传错误错误项目编码" + uploadFailedNoList;
}
@@ -866,8 +866,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
if (!supplyItemDetailList.isEmpty()) {
// 根据项目id,产品批号源仓库id 查询源仓库库存表信息
List<InventoryItem> inventoryItemList =
inventoryItemService.list(new LambdaQueryWrapper<InventoryItem>().in(InventoryItem::getItemId,
List<InventoryItem> inventoryItemList
= inventoryItemService.list(new LambdaQueryWrapper<InventoryItem>().in(InventoryItem::getItemId,
supplyItemDetailList.stream().map(SupplyItemDetailDto::getItemId).toList()));
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
if (!inventoryItemList.isEmpty()) {
@@ -899,8 +899,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
}
}
// 更新源仓库库存数量
Boolean aBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now);
Boolean aBoolean
= inventoryItemService.updateInventoryQuantity(inventoryItem.getId(), minQuantity, now);
if (!aBoolean) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
@@ -918,8 +918,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
// 调用医保库存变更接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList =
this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.OTHER_OUT, now, false);
List<String> uploadFailedNoList
= this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.OTHER_OUT, now, false);
if (!uploadFailedNoList.isEmpty()) {
returnMsg = "3502库存变更上传错误错误项目编码" + uploadFailedNoList;
}
@@ -992,8 +992,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
minQuantity = minQuantity.add(supplyItemDetailDto.getItemQuantity());
}
// 更新目的仓库库存数量
Boolean bBoolean =
inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now);
Boolean bBoolean
= inventoryItemService.updateInventoryQuantity(inventoryItemPurpose.getId(), minQuantity, now);
if (!bBoolean) {
throw new ServiceException("系统异常,请稍后重试");
}
@@ -1014,8 +1014,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
// 调用医保库存变更接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList =
this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.OTHER_IN, now, false);
List<String> uploadFailedNoList
= this.ybInventoryIntegrated(supplyItemDetailList, YbInvChgType.OTHER_IN, now, false);
if (!uploadFailedNoList.isEmpty()) {
returnMsg = "3502库存变更上传错误错误项目编码" + uploadFailedNoList;
}
@@ -1051,15 +1051,16 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
List<ChargeItemDefDetail> resultList = new ArrayList<>();
// 将各个项目的定价信息按项目id分组
Map<Long, List<ItemChargeDetailDto>> chargeDetailGroup =
chargeDetailList.stream().collect(Collectors.groupingBy(ItemChargeDetailDto::getInstanceId));
Map<Long, List<ItemChargeDetailDto>> chargeDetailGroup
= chargeDetailList.stream().collect(Collectors.groupingBy(ItemChargeDetailDto::getInstanceId));
for (SupplyRequest supplyRequest : agreedList) {
Long itemId = supplyRequest.getItemId();
// 通过供应项目id匹配项目定价
List<ItemChargeDetailDto> details = chargeDetailGroup.get(itemId);
if (details == null)
if (details == null) {
continue;
}
boolean shouldSkip = false;
for (ItemChargeDetailDto detail : details) {
@@ -1145,11 +1146,7 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
// 所有类型都需要调用库存变更(特殊类型失败时跳过)
if (!skipInventoryUpdate) {
result = ybManager.updateInventoryCount(
<<<<<<< HEAD
getMedicalInventory3502Param(supplyItemDetailDto, now, ybInvChgType.getValue()));
=======
getMedicalInventory3502Param(supplyItemDetailDto, now, ybInvChgType.getValue(), saleFlag));
>>>>>>> v1.3
if (result.getCode() != 200) {
uploadFailedNoList.add(supplyItemDetailDto.getItemBusNo());
}
@@ -1204,12 +1201,12 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
String ybInvChgType, boolean saleFlag) {
MedicalInventory3502Param medicalInventory3502Param = new MedicalInventory3502Param();
// 查库存信息
List<InventoryItem> inventoryItemList =
inventoryItemService.selectInventoryByItemId(supplyItemDetailDto.getItemId(),
List<InventoryItem> inventoryItemList
= inventoryItemService.selectInventoryByItemId(supplyItemDetailDto.getItemId(),
supplyItemDetailDto.getLotNumber(), null, SecurityUtils.getLoginUser().getTenantId());
// 查询商品价格信息
List<ItemChargeDetailDto> itemChargeDetailList =
receiptApprovalAppService.getItemChargeDetail(List.of(supplyItemDetailDto.getItemId()));
List<ItemChargeDetailDto> itemChargeDetailList
= receiptApprovalAppService.getItemChargeDetail(List.of(supplyItemDetailDto.getItemId()));
if (!inventoryItemList.isEmpty() && !itemChargeDetailList.isEmpty()) {
// 获取该项目所有的数量(最小单位)
BigDecimal totalQuantity = inventoryItemList.stream()
@@ -1267,8 +1264,8 @@ public class ReceiptApprovalAppServiceImpl implements IReceiptApprovalAppService
private MedicalInventory3501Param getMedicalInventory3501Param(SupplyItemDetailDto supplyItemDetailDto, Date date) {
MedicalInventory3501Param medicalInventory3501Param = new MedicalInventory3501Param();
// 查库存信息
List<InventoryItem> inventoryItemList =
inventoryItemService.selectInventoryByItemId(supplyItemDetailDto.getItemId(),
List<InventoryItem> inventoryItemList
= inventoryItemService.selectInventoryByItemId(supplyItemDetailDto.getItemId(),
supplyItemDetailDto.getLotNumber(), null, SecurityUtils.getLoginUser().getTenantId());
if (!inventoryItemList.isEmpty()) {
// 获取该项目所有的数量(最小单位)

View File

@@ -143,9 +143,6 @@ public class LossReportFormController {
// @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
// return lossReportFormAppService.getMonthlySettlementDetail(locationId, startTime,endTime,pageNo,pageSize);
// }
<<<<<<< HEAD
=======
/**
* 报损单据明细导出
*
@@ -156,5 +153,4 @@ public class LossReportFormController {
public void exportExcel(@RequestParam String busNo, HttpServletResponse response) {
lossReportFormAppService.makeExcelFile(busNo, response);
}
>>>>>>> v1.3
}

View File

@@ -1,25 +1,17 @@
package com.openhis.web.inventorymanage.controller;
<<<<<<< HEAD
=======
import java.util.List;
>>>>>>> v1.3
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.*;
<<<<<<< HEAD
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.appservice.IProductDetailAppService;
=======
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.appservice.IProductDetailAppService;
import com.openhis.web.inventorymanage.dto.ProductDetailPageDto;
>>>>>>> v1.3
import com.openhis.web.inventorymanage.dto.ProductDetailSearchParam;
import lombok.extern.slf4j.Slf4j;
@@ -59,11 +51,7 @@ public class ProductDetailController {
* @return 库存商品明细分页列表
*/
@GetMapping(value = "/product-page")
<<<<<<< HEAD
public R<?> getProductDetailPage(ProductDetailSearchParam productDetailSearchParam,
=======
public R<Page<ProductDetailPageDto>> getProductDetailPage(ProductDetailSearchParam productDetailSearchParam,
>>>>>>> v1.3
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "1000") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
@@ -72,8 +60,6 @@ public class ProductDetailController {
}
/**
<<<<<<< HEAD
=======
* 查询库存商品备份明细分页列表
*
* @param productDetailSearchParam 查询条件
@@ -93,7 +79,6 @@ public class ProductDetailController {
}
/**
>>>>>>> v1.3
* 查询库存商品明细统计数据
*
* @param productDetailSearchParam 查询条件
@@ -108,16 +93,6 @@ public class ProductDetailController {
}
/**
<<<<<<< HEAD
* 操作:停供
*
* @param inventoryId 库存项目管理ID
* @return 操作结果
*/
@PutMapping("/stop-supply")
public R<?> stopSupplyById(@RequestBody Long inventoryId) {
return productDetailsAppService.stopSupplyById(inventoryId);
=======
* 查询库存商品备份明细统计数据
*
* @param productDetailSearchParam 查询条件
@@ -140,52 +115,29 @@ public class ProductDetailController {
@PutMapping("/stop-supply")
public R<?> stopSupplyById(@RequestBody List<Long> inventoryIdList) {
return productDetailsAppService.stopSupplyById(inventoryIdList);
>>>>>>> v1.3
}
/**
* 操作:取消停供
*
<<<<<<< HEAD
* @param inventoryId 库存项目管理ID
* @return 操作结果
*/
@PutMapping("/cancel-supply")
public R<?> cancelSupplyById(@RequestBody Long inventoryId) {
return productDetailsAppService.cancelSupplyById(inventoryId);
=======
* @param inventoryIdList 库存项目管理ID
* @return 操作结果
*/
@PutMapping("/cancel-supply")
public R<?> cancelSupplyById(@RequestBody List<Long> inventoryIdList) {
return productDetailsAppService.cancelSupplyById(inventoryIdList);
>>>>>>> v1.3
}
/**
* 库存明细表导出
*
* @param productDetailSearchParam 查询条件
<<<<<<< HEAD
* @param pageNo 当前页码
* @param pageSize 查询条数
=======
>>>>>>> v1.3
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @param response 响应数据
*/
@GetMapping(value = "/excel-out")
public void makeExcelFile(ProductDetailSearchParam productDetailSearchParam,
<<<<<<< HEAD
@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) {
productDetailsAppService.makeExcelFile(productDetailSearchParam, pageNo, pageSize, searchKey, request,
response);
=======
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request,
HttpServletResponse response) {
productDetailsAppService.makeExcelFile(productDetailSearchParam, searchKey, request, response);
@@ -206,6 +158,5 @@ public class ProductDetailController {
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request,
HttpServletResponse response) {
productDetailsAppService.exportExcel(productDetailSearchParam, pageNo, pageSize, searchKey, request, response);
>>>>>>> v1.3
}
}

View File

@@ -23,193 +23,265 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class ProductDetailPageDto {
/** 库存项目管理ID停供用 */
/**
* 库存项目管理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;
<<<<<<< HEAD
=======
/** 项目id */
/**
* 项目id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long itemId;
>>>>>>> v1.3
/** 项目名称 */
/**
* 项目名称
*/
@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 */
/**
* 定价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;
<<<<<<< HEAD
@Excel(name = "进价总额", sort = 13, scale = 2)
=======
@Excel(name = "进价总额", sort = 13)
>>>>>>> v1.3
private String excelTotalPurchasePrice = "";
/** 售价统计 */
/**
* 售价统计
*/
private BigDecimal salePriceStatistics;
/** 进价统计 */
/**
* 进价统计
*/
private BigDecimal purchasePriceStatistics;
<<<<<<< HEAD
=======
/** 备份时间 */
/**
* 备份时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date backUpDate;
>>>>>>> v1.3
// 设置统计金额默认值为零
public ProductDetailPageDto() {
this.totalSalePrice = BigDecimal.ZERO;

View File

@@ -1,9 +1,6 @@
package com.openhis.web.inventorymanage.dto;
<<<<<<< HEAD
=======
import java.util.Date;
>>>>>>> v1.3
import java.util.List;
import lombok.Data;
@@ -19,41 +16,53 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class ProductDetailSearchParam {
/** 剩余过期天数 */
/**
* 剩余过期天数
*/
private Integer remainingDays;
<<<<<<< HEAD
/** 项目类型 */
private Integer categoryCode;
=======
/** 药品类型 */
/**
* 药品类型
*/
private List<String> medCategoryCodes;
/** 耗材类型 */
/**
* 耗材类型
*/
private List<String> devCategoryCodes;
>>>>>>> v1.3
/** 医保等级 */
/**
* 医保等级
*/
private Integer chrgitmLv;
/** 仓库药房列表 */
/**
* 仓库药房列表
*/
private List<Long> locationIds;
/** 供应商列表 */
/**
* 供应商列表
*/
private List<Long> supplierIds;
/** 是否为零 */
/**
* 是否为零
*/
private Integer zeroFlag;
/** 停用状态 */
/**
* 停用状态
*/
private Integer inventoryStatusEnum;
/** 项目所在表 */
/**
* 项目所在表
*/
private String itemTable;
<<<<<<< HEAD
=======
/** 备份时间 */
/**
* 备份时间
*/
private Date backUpDate;
>>>>>>> v1.3
}

View File

@@ -6,14 +6,9 @@ package com.openhis.web.inventorymanage.dto;
import java.math.BigDecimal;
import java.util.Date;
<<<<<<< HEAD
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
=======
import org.springframework.format.annotation.DateTimeFormat;
import com.core.common.annotation.Excel;
>>>>>>> v1.3
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -21,11 +16,6 @@ import com.openhis.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;
<<<<<<< HEAD
import org.apache.poi.hpsf.Decimal;
import org.springframework.format.annotation.DateTimeFormat;
=======
>>>>>>> v1.3
/**
* 单据分页列表 dto
@@ -37,24 +27,34 @@ import org.springframework.format.annotation.DateTimeFormat;
@Accessors(chain = true)
public class ReceiptPageDto {
/** 单据号 */
/**
* 单据号
*/
@Excel(name = "单据号", sort = 1)
private String supplyBusNo;
/** 状态 */
/**
* 状态
*/
private Integer statusEnum;
// @Excel(name = "审批状态", sort = 2)
private String statusEnum_enumText;
/** 退货状态 */
/**
* 退货状态
*/
private Integer returnStatus;
/** 类型 */
/**
* 类型
*/
private Integer typeEnum;
@Excel(name = "单据类型", sort = 3)
private String typeEnum_enumText;
/** 供应商 */
/**
* 供应商
*/
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier")
@JsonSerialize(using = ToStringSerializer.class)
private Long supplierId;
@@ -62,7 +62,9 @@ public class ReceiptPageDto {
@Excel(name = "供应商", sort = 5)
private String supplierIdDictText;
/** 目的仓库 */
/**
* 目的仓库
*/
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_location")
@JsonSerialize(using = ToStringSerializer.class)
private Long purposeLocationId;
@@ -70,16 +72,22 @@ public class ReceiptPageDto {
@Excel(name = "目的仓库", sort = 6)
private String purposeLocationIdDictText;
/** 目的仓位 */
/**
* 目的仓位
*/
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_location")
@JsonSerialize(using = ToStringSerializer.class)
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;
@@ -87,18 +95,24 @@ public class ReceiptPageDto {
@Excel(name = "经手人", sort = 4)
private String practitionerIdDictText;
/** 审批人 */
/**
* 审批人
*/
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner")
private Long approverId;
private String approverId_dictText;
@Excel(name = "审批人", sort = 10)
private String approverIdDictText;
/** 审批时间 */
/**
* 审批时间
*/
@Excel(name = "审批时间", sort = 11, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date approvalTime;
/** 申请人 */
/**
* 申请人
*/
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner")
@JsonSerialize(using = ToStringSerializer.class)
private Long applicantId;
@@ -106,38 +120,46 @@ public class ReceiptPageDto {
@Excel(name = "申请人", sort = 8)
private String applicantIdDictText;
/** 申请时间 */
/**
* 申请时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
<<<<<<< HEAD
=======
// @Excel(name = "申请时间", sort = 9, dateFormat = "yyyy-MM-dd HH:mm:ss")
>>>>>>> v1.3
private Date applyTime;
/** 制单日期 */
/**
* 制单日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
<<<<<<< HEAD
=======
// @Excel(name = "申请时间", sort = 9, dateFormat = "yyyy-MM-dd HH:mm:ss")
>>>>>>> v1.3
private Date createTime;
/** 备注 */
/**
* 备注
*/
private String remake;
/** 项目所在表名 */
/**
* 项目所在表名
*/
private String itemTable;
/** 药品类型 */
/**
* 药品类型
*/
private Integer itemType;
/** 目的仓库类型 */
/**
* 目的仓库类型
*/
private Integer purposeTypeEnum;
private String purposeTypeEnum_enumText;
/** 追溯码 */
/**
* 追溯码
*/
private String traceNo;
/**
* 24、药品
@@ -148,12 +170,8 @@ public class ReceiptPageDto {
/*
* 总金额
*/
<<<<<<< HEAD
private BigDecimal totalAmount;
=======
@Excel(name = "总金额", sort = 7, scale = 2)
private BigDecimal totalAmount;
private String totalAmountText;
>>>>>>> v1.3
}

View File

@@ -9,10 +9,7 @@ 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;
<<<<<<< HEAD
=======
import org.springframework.stereotype.Repository;
>>>>>>> v1.3
/**
* @ClassName AdjustPriceMapper
@@ -20,13 +17,11 @@ import org.springframework.stereotype.Repository;
* @Author raymond
* @Date 2025/10/23 14:41
* @Version 1.0
**/
<<<<<<< HEAD
@Component
=======
*
*/
@Repository
>>>>>>> v1.3
public interface InventoryAdjustPriceMapper {
/**
* 查询单据审批分页列表
*

View File

@@ -3,11 +3,8 @@
*/
package com.openhis.web.inventorymanage.mapper;
<<<<<<< HEAD
=======
import java.util.List;
>>>>>>> v1.3
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@@ -40,29 +37,16 @@ public interface ProductDetailAppMapper {
@Param(Constants.WRAPPER) QueryWrapper<ProductDetailSearchParam> queryWrapper,
@Param("medMedicationDefinition") String medMedicationDefinition,
@Param("admDeviceDefinition") String admDeviceDefinition, @Param("lotNumberCost") String lotNumberCost);
<<<<<<< HEAD
/**
* 查询库存商品明细分页列表,联查数据字典
*
* @param page 分页
=======
/**
* 查询库存商品明细分页列表,联查数据字典翻译单位字段
*
>>>>>>> v1.3
* @param queryWrapper 查询条件
* @param medMedicationDefinition 药品
* @param admDeviceDefinition 耗材
* @param lotNumberCost 批号进价
* @return 库存商品明细分页列表
*/
<<<<<<< HEAD
Page<ProductDetailPageDto> selectProductDetailsPageX(@Param("page") Page<ProductDetailPageDto> page,
@Param(Constants.WRAPPER) QueryWrapper<ProductDetailSearchParam> queryWrapper,
@Param("medMedicationDefinition") String medMedicationDefinition,
@Param("admDeviceDefinition") String admDeviceDefinition, @Param("lotNumberCost") String lotNumberCost);
=======
List<ProductDetailPageDto> getProductDetailPageAndTranslateField(
@Param(Constants.WRAPPER) QueryWrapper<ProductDetailSearchParam> queryWrapper,
@Param("medMedicationDefinition") String medMedicationDefinition,
@@ -77,5 +61,4 @@ public interface ProductDetailAppMapper {
*/
Page<ProductDetailPageDto> selectProductDetailsBackupPage(@Param("page") Page<ProductDetailPageDto> page,
@Param(Constants.WRAPPER) QueryWrapper<ProductDetailSearchParam> queryWrapper);
>>>>>>> v1.3
}

View File

@@ -74,13 +74,10 @@ public interface IGfStudentListAppService {
* @param response 响应
*/
void importTemplate(HttpServletResponse response);
<<<<<<< HEAD
=======
/**
* peis数据同步
*/
R<?> synPeis();
>>>>>>> v1.3
}

View File

@@ -5,10 +5,7 @@ import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
<<<<<<< HEAD
=======
import com.core.common.enums.DelFlag;
>>>>>>> v1.3
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,10 +16,6 @@ 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;
<<<<<<< HEAD
import com.core.common.enums.DeleteFlag;
=======
>>>>>>> v1.3
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.SecurityUtils;
@@ -125,36 +118,36 @@ public class GfRatioApplicationRecordAppServiceImpl implements IGfRatioApplicati
String ybNo = null;
if (GfItemType.MEDICATION.getValue().equals(gfRatioApplication.getItemType())) {
// 如果是药品,获取并设置药品定义信息
MedicationDefinition medicationDefinition =
medicationDefinitionService.getById(gfRatioApplication.getDefinitionId());
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();
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());
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();
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<Pair<BigDecimal, BigDecimal>, BigDecimal> oldRatiosAndPrice =
this.getOldRatiosAndPrice(gfRatioApplication.getDefinitionId(), defTableName, chrgitmLv);
Pair<Pair<BigDecimal, BigDecimal>, BigDecimal> oldRatiosAndPrice
= this.getOldRatiosAndPrice(gfRatioApplication.getDefinitionId(), defTableName, chrgitmLv);
// Dto赋值返回
gfRatioApplicationRecordDto.setId(gfRatioApplication.getId()).setApplicationNo(gfRatioApplication.getBusNo())
.setItemType(gfRatioApplication.getItemType())
@@ -201,11 +194,7 @@ public class GfRatioApplicationRecordAppServiceImpl implements IGfRatioApplicati
// 查询指定项目现行比例
List<GfRatio> gfRatioList = gfRatioService.list(new LambdaQueryWrapper<GfRatio>()
.eq(GfRatio::getDefinitionId, gfRatioApplicationRecordDto.getDefinitionId())
<<<<<<< HEAD
.eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
=======
.eq(GfRatio::getDeleteFlag, DelFlag.NO.getCode()));
>>>>>>> v1.3
// 验证时间是否重叠
if (!gfRatioList.isEmpty()) {
for (GfRatio r : gfRatioList) {
@@ -469,8 +458,8 @@ public class GfRatioApplicationRecordAppServiceImpl implements IGfRatioApplicati
return R.ok(Collections.emptyList());
}
// 查询要打印的申请单
List<GfRatioApplication> applicationList =
gfRatioApplicationService.list(new LambdaQueryWrapper<GfRatioApplication>()
List<GfRatioApplication> applicationList
= gfRatioApplicationService.list(new LambdaQueryWrapper<GfRatioApplication>()
.in(GfRatioApplication::getId, idList).orderByDesc(GfRatioApplication::getId));
if (applicationList.isEmpty()) {
return R.ok(Collections.emptyList());
@@ -485,8 +474,8 @@ public class GfRatioApplicationRecordAppServiceImpl implements IGfRatioApplicati
String defTableName = CommonConstants.TableName.MED_MEDICATION_DEFINITION;
if (GfItemType.MEDICATION.getValue().equals(application.getItemType())) {
// 获取药品名称和医保等级
MedicationDefinition medicationDefinition =
medicationDefinitionService.getById(application.getDefinitionId());
MedicationDefinition medicationDefinition
= medicationDefinitionService.getById(application.getDefinitionId());
if (medicationDefinition != null) {
itemName = medicationDefinition.getName();
ybLv = Optional.of(medicationDefinition.getChrgitmLv()).orElse(YbChrgitmLv.SELF_PAY.getValue())
@@ -494,8 +483,8 @@ public class GfRatioApplicationRecordAppServiceImpl implements IGfRatioApplicati
}
} else if (GfItemType.ACTIVITY.getValue().equals(application.getItemType())) {
// 获取诊疗名称和医保等级
ActivityDefinition activityDefinition =
activityDefinitionService.getById(application.getDefinitionId());
ActivityDefinition activityDefinition
= activityDefinitionService.getById(application.getDefinitionId());
if (activityDefinition != null) {
itemName = activityDefinition.getName();
ybLv = Optional.of(activityDefinition.getChrgitmLv()).orElse(YbChrgitmLv.SELF_PAY.getValue())
@@ -505,8 +494,8 @@ public class GfRatioApplicationRecordAppServiceImpl implements IGfRatioApplicati
}
YbChrgitmLv ybChrgitmLv = YbChrgitmLv.getByCode(ybLv);
// 查询原支付比例和价格(包括二次比例)
Pair<Pair<BigDecimal, BigDecimal>, BigDecimal> oldRatiosAndPrice =
this.getOldRatiosAndPrice(application.getDefinitionId(), defTableName, ybLv);
Pair<Pair<BigDecimal, BigDecimal>, BigDecimal> oldRatiosAndPrice
= this.getOldRatiosAndPrice(application.getDefinitionId(), defTableName, ybLv);
BigDecimal oldRatio = oldRatiosAndPrice.getLeft().getLeft();
BigDecimal oldTwiceRatio = oldRatiosAndPrice.getLeft().getRight();
BigDecimal totalPrice = oldRatiosAndPrice.getRight();
@@ -559,23 +548,15 @@ public class GfRatioApplicationRecordAppServiceImpl implements IGfRatioApplicati
List<GfRatio> typeRatioList = gfRatioService
.list(new LambdaQueryWrapper<GfRatio>().eq(GfRatio::getRatioType, GfRatioType.TYPE_RATIO.getValue())
.eq(GfRatio::getYbClass, chargeItemDefinitionList.get(0).getYbType()).eq(GfRatio::getYbLv, ybLv)
<<<<<<< HEAD
.eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
=======
.eq(GfRatio::getDeleteFlag, DelFlag.NO.getCode()));
>>>>>>> v1.3
if (!typeRatioList.isEmpty()) {
oldRatio = typeRatioList.get(0).getSelfRatio();
}
}
// 查询历史小项比例
List<GfRatio> historicalRatioList =
gfRatioService.list(new LambdaQueryWrapper<GfRatio>().eq(GfRatio::getDefinitionId, definitionId)
<<<<<<< HEAD
.eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()).orderByDesc(GfRatio::getId));
=======
List<GfRatio> historicalRatioList
= gfRatioService.list(new LambdaQueryWrapper<GfRatio>().eq(GfRatio::getDefinitionId, definitionId)
.eq(GfRatio::getDeleteFlag, DelFlag.NO.getCode()).orderByDesc(GfRatio::getId));
>>>>>>> v1.3
BigDecimal oldTwiceRatio = null;
if (!historicalRatioList.isEmpty()) {
GfRatio latestRatio = historicalRatioList.get(0);

View File

@@ -12,11 +12,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;
<<<<<<< HEAD
import com.core.common.enums.DeleteFlag;
=======
import com.core.common.enums.DelFlag;
>>>>>>> v1.3
import com.openhis.common.enums.GfItemType;
import com.openhis.common.enums.GfRatioType;
import com.openhis.common.enums.ybenums.YbChrgitmLv;
@@ -63,14 +59,10 @@ public class GfRatioManageAppServiceImpl implements IGfRatioManageAppService {
// 查询DB中的所有大项比例
List<GfRatio> gfRatioList = gfRatioService
.list(new LambdaQueryWrapper<GfRatio>().eq(GfRatio::getRatioType, GfRatioType.TYPE_RATIO.getValue())
<<<<<<< HEAD
.eq(GfRatio::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
=======
.eq(GfRatio::getDeleteFlag, DelFlag.NO.getCode()));
>>>>>>> v1.3
// 做成医保分项+医保等级拼接的Map
Map<String, GfRatio> gfRatioMap =
gfRatioList.stream().collect(Collectors.toMap(e -> e.getYbClass() + e.getYbLv(), Function.identity()));
Map<String, GfRatio> gfRatioMap
= gfRatioList.stream().collect(Collectors.toMap(e -> e.getYbClass() + e.getYbLv(), Function.identity()));
// 遍历输入项
List<GfRatio> addGfRatioList = new ArrayList<>();
List<GfRatio> editGfRatioList = new ArrayList<>();
@@ -116,8 +108,8 @@ public class GfRatioManageAppServiceImpl implements IGfRatioManageAppService {
QueryWrapper<GfIndividualRatioDto> queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, searchKey,
new HashSet<>(Set.of("bus_no", "name", "py_str", "wb_str", "yb_no")), null);
// 查询单项比例分页
IPage<GfIndividualRatioDto> page =
gfRatioManageAppMapper.selectGfIndividualRatioPage(new Page<>(pageNo, pageSize), queryWrapper);
IPage<GfIndividualRatioDto> page
= gfRatioManageAppMapper.selectGfIndividualRatioPage(new Page<>(pageNo, pageSize), queryWrapper);
// 设置公费项目分类名称
for (GfIndividualRatioDto dto : page.getRecords()) {
dto.setItemTypeName(GfItemType.getByValue(dto.getItemType()).getInfo());

View File

@@ -1,13 +1,5 @@
package com.openhis.web.nenu.appservice.impl;
<<<<<<< HEAD
import java.time.format.DateTimeParseException;
import java.util.*;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
=======
import java.io.IOException;
import java.time.format.DateTimeParseException;
import java.util.*;
@@ -34,7 +26,6 @@ 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;
>>>>>>> v1.3
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@@ -45,11 +36,7 @@ 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;
<<<<<<< HEAD
import com.core.common.enums.DeleteFlag;
=======
import com.core.common.enums.DelFlag;
>>>>>>> v1.3
import com.core.common.utils.*;
import com.core.common.utils.poi.ExcelUtil;
import com.openhis.administration.domain.Patient;
@@ -101,8 +88,8 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
QueryWrapper<GfStudentListDto> queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, searchKey,
new HashSet<>(Set.of("name", "py_str", "wb_str", "student_id", "id_number")), null);
// 查询学生名单分页
IPage<GfStudentListDto> page =
gfStudentListAppMapper.selectGfStudentListPage(new Page<>(pageNo, pageSize), queryWrapper);
IPage<GfStudentListDto> page
= gfStudentListAppMapper.selectGfStudentListPage(new Page<>(pageNo, pageSize), queryWrapper);
return R.ok(page);
}
@@ -144,22 +131,14 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
// 学号重复验证
List<PatientStudent> sameStudentIdStudents = patientStudentService.list(
new LambdaQueryWrapper<PatientStudent>().eq(PatientStudent::getStudentId, gfStudentListDto.getStudentId())
<<<<<<< HEAD
.eq(PatientStudent::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
=======
.eq(PatientStudent::getDeleteFlag, DelFlag.NO.getCode()));
>>>>>>> v1.3
if (!sameStudentIdStudents.isEmpty()) {
return R.fail("学号" + gfStudentListDto.getStudentId() + "在系统中已存在");
}
// 学生信息重复校验
List<PatientStudent> sameIdNumberStudents = patientStudentService.list(
new LambdaQueryWrapper<PatientStudent>().eq(PatientStudent::getIdNumber, gfStudentListDto.getIdNumber())
<<<<<<< HEAD
.eq(PatientStudent::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
=======
.eq(PatientStudent::getDeleteFlag, DelFlag.NO.getCode()));
>>>>>>> v1.3
Long existingPatientId = null;
if (!sameIdNumberStudents.isEmpty()) {
for (PatientStudent ps : sameIdNumberStudents) {
@@ -186,18 +165,14 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
// 判断患者信息是否有重复
List<Patient> sameIdNumberPatients = patientService
.list(new LambdaQueryWrapper<Patient>().eq(Patient::getIdCard, gfStudentListDto.getIdNumber())
<<<<<<< HEAD
.eq(Patient::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
=======
.eq(Patient::getDeleteFlag, DelFlag.NO.getCode()));
>>>>>>> v1.3
if (!sameIdNumberPatients.isEmpty()) {
// 已存在则取存在的
existingPatientId = sameIdNumberPatients.get(0).getId();
} else {
// 不存在则新建患者
Patient patient =
new Patient().setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.PATIENT_NUM.getPrefix(), 10))
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)
@@ -283,11 +258,7 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
@Override
public R<?> delete(Long id) {
patientStudentService.update(new LambdaUpdateWrapper<PatientStudent>()
<<<<<<< HEAD
.set(PatientStudent::getDeleteFlag, DeleteFlag.DELETED.getCode()).eq(PatientStudent::getId, id));
=======
.set(PatientStudent::getDeleteFlag, DelFlag.YES.getCode()).eq(PatientStudent::getId, id));
>>>>>>> v1.3
return R.ok();
}
@@ -300,8 +271,8 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
@Override
public R<?> importData(MultipartFile file) {
// 读取文件
R<List<GfStudentListImportDto>> readResult =
CommonUtil.readImportedExcelFile(file, GfStudentListImportDto.class);
R<List<GfStudentListImportDto>> readResult
= CommonUtil.readImportedExcelFile(file, GfStudentListImportDto.class);
if (R.SUCCESS != readResult.getCode()) {
return readResult;
}
@@ -327,8 +298,8 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
String wbStr = ChineseConvertUtils.toWBFirstLetter(importDto.getName());
// 患者未创建时,创建患者
if (importDto.getPatientId() == null) {
Patient patient =
new Patient().setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.PATIENT_NUM.getPrefix(), 10))
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);
@@ -439,8 +410,8 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
}
// 重复校验(文件行重复)
List<String> lineRepeatedValidateMsgList = new ArrayList<>();
Map<String, List<GfStudentListImportDto>> fileSameStudentIdMap =
importDtoList.stream().collect(Collectors.groupingBy(GfStudentListImportDto::getStudentId));
Map<String, List<GfStudentListImportDto>> fileSameStudentIdMap
= importDtoList.stream().collect(Collectors.groupingBy(GfStudentListImportDto::getStudentId));
for (Map.Entry<String, List<GfStudentListImportDto>> entry : fileSameStudentIdMap.entrySet()) {
if (entry.getValue().size() > 1) {
lineRepeatedValidateMsgList
@@ -448,8 +419,8 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
.map(Object::toString).collect(Collectors.joining(",")) + "行的学号重复;");
}
}
Map<String, List<GfStudentListImportDto>> fileSameIdNumberMap =
importDtoList.stream().collect(Collectors.groupingBy(GfStudentListImportDto::getIdNumber));
Map<String, List<GfStudentListImportDto>> fileSameIdNumberMap
= importDtoList.stream().collect(Collectors.groupingBy(GfStudentListImportDto::getIdNumber));
for (Map.Entry<String, List<GfStudentListImportDto>> entry : fileSameIdNumberMap.entrySet()) {
if (entry.getValue().size() > 1) {
lineRepeatedValidateMsgList
@@ -465,21 +436,13 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
for (GfStudentListImportDto importDto : importDtoList) {
List<PatientStudent> sameStudentIdStudents = patientStudentService.list(
new LambdaQueryWrapper<PatientStudent>().eq(PatientStudent::getStudentId, importDto.getStudentId())
<<<<<<< HEAD
.eq(PatientStudent::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
=======
.eq(PatientStudent::getDeleteFlag, DelFlag.NO.getCode()));
>>>>>>> v1.3
if (!sameStudentIdStudents.isEmpty()) {
dbRepeatedValidateMsgList.add("■ 第" + importDto.getLineNumber() + "行的学号在系统中已存在;");
}
List<PatientStudent> sameIdNumberStudents = patientStudentService
.list(new LambdaQueryWrapper<PatientStudent>().eq(PatientStudent::getIdNumber, importDto.getIdNumber())
<<<<<<< HEAD
.eq(PatientStudent::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
=======
.eq(PatientStudent::getDeleteFlag, DelFlag.NO.getCode()));
>>>>>>> v1.3
if (!sameIdNumberStudents.isEmpty()) {
for (PatientStudent ps : sameIdNumberStudents) {
if (!ps.getEnrollmentDate().after(importDto.getGraduationDate())
@@ -497,8 +460,6 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
return R.ok();
}
<<<<<<< HEAD
=======
@Override
public R<?> synPeis() {
@@ -512,7 +473,6 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
}
//log.info("开始传输学生数据,总记录数: {}", totalCount);
// 2. 分批处理参数
int pageSize = 1000; // 每批大小
int pageNum = 1;
@@ -645,5 +605,4 @@ public class GfStudentListAppServiceImpl implements IGfStudentListAppService {
// 可以根据业务需求决定是否重试
}
>>>>>>> v1.3
}

View File

@@ -105,8 +105,6 @@ public class GfStudentListController {
public void importTemplate(HttpServletResponse response) {
gfStudentListAppService.importTemplate(response);
}
<<<<<<< HEAD
=======
/**
* peis同步
@@ -116,5 +114,4 @@ public class GfStudentListController {
public R<?> synPeis() {
return gfStudentListAppService.synPeis();
}
>>>>>>> v1.3
}

View File

@@ -1,9 +1,6 @@
package com.openhis.web.nenu.mapper;
<<<<<<< HEAD
=======
import com.openhis.web.nenu.dto.GfStudentPeisDto;
>>>>>>> v1.3
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@@ -13,11 +10,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.web.nenu.dto.GfStudentListDto;
<<<<<<< HEAD
=======
import java.util.List;
>>>>>>> v1.3
/**
* 公费医疗-学生名单管理 Mapper
*
@@ -37,14 +31,13 @@ public interface GfStudentListAppMapper {
IPage<GfStudentListDto> selectGfStudentListPage(@Param("page") Page<GfStudentListDto> page,
@Param(Constants.WRAPPER) QueryWrapper<GfStudentListDto> queryWrapper);
<<<<<<< HEAD
=======
/**
* 获取学生名单peis同步列表
*
* @return 学生名单peis同步列表
*/
List<GfStudentPeisDto> getPatientBusNoList(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
/**
* 获取学生名单peis同步列表
*
@@ -59,5 +52,4 @@ public interface GfStudentListAppMapper {
*/
Long getPatientBusNoCount();
>>>>>>> v1.3
}

View File

@@ -137,12 +137,12 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
searchFields.add(CommonConstants.FieldName.PatientPyStr);
searchFields.add(CommonConstants.FieldName.PatientWbStr);
// 构建查询条件
QueryWrapper<OutpatientTreatmentEncounterDto> queryWrapper =
HisQueryUtils.buildQueryWrapper(outpatientTreatmentEncounterDto, searchKey, searchFields, request);
QueryWrapper<OutpatientTreatmentEncounterDto> queryWrapper
= HisQueryUtils.buildQueryWrapper(outpatientTreatmentEncounterDto, searchKey, searchFields, request);
// 查询就诊病人列表
Page<OutpatientTreatmentEncounterDto> encounterInfoPageDto =
outpatientTreatmentAppMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper,
Page<OutpatientTreatmentEncounterDto> encounterInfoPageDto
= outpatientTreatmentAppMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper,
EncounterClass.AMB.getValue(), RequestStatus.COMPLETED.getValue(), RequestStatus.CANCELLED.getValue());
encounterInfoPageDto.getRecords().forEach(prescriptionPatientInfoDto -> {
// 性别
@@ -167,8 +167,8 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
public R<?> getOutpatientTreatmentInfo(OutpatientTreatmentInfoDto outpatientTreatmentInfoDto, Integer pageNo,
Integer pageSize) {
// 构建查询条件
QueryWrapper<OutpatientTreatmentInfoDto> queryWrapper =
HisQueryUtils.buildQueryWrapper(outpatientTreatmentInfoDto, null, null, null);
QueryWrapper<OutpatientTreatmentInfoDto> queryWrapper
= HisQueryUtils.buildQueryWrapper(outpatientTreatmentInfoDto, null, null, null);
// 查询处置单
IPage<OutpatientTreatmentInfoDto> treatmentInfo = outpatientTreatmentAppMapper.selectTreatmentInfoPage(
@@ -178,8 +178,8 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
List<OutpatientTreatmentInfoDto> treatmentList = treatmentInfo.getRecords();
// 获取请求ids
List<Long> reqIds =
treatmentList.stream().map(OutpatientTreatmentInfoDto::getRequestId).collect(Collectors.toList());
List<Long> reqIds
= treatmentList.stream().map(OutpatientTreatmentInfoDto::getRequestId).collect(Collectors.toList());
Map<Long, List<Procedure>> procedureRecordGroup = new HashMap<>();
if (!reqIds.isEmpty()) {
// 查询执行记录
@@ -275,8 +275,8 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
throw new ServiceException("未找到对应的收费项,请联系管理员");
}
// 按requestId分组收费项
Map<Long, List<ChargeItem>> chargeItemMap =
chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getServiceId));
Map<Long, List<ChargeItem>> chargeItemMap
= chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getServiceId));
// 过滤出已收费的执行项目
serviceMedPerformList = serviceMedPerformList.stream().filter(performInfo -> {
List<ChargeItem> chargeItems = chargeItemMap.get(performInfo.getRequestId());
@@ -299,8 +299,8 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
exeCount = serviceRequest.getQuantity().intValue();
}
} else if (CommonConstants.TableName.MED_MEDICATION_REQUEST.equals(performInfoDto.getRequestTable())) {
MedicationRequest medicationRequest =
medicationRequestService.getById(performInfoDto.getRequestId());
MedicationRequest medicationRequest
= medicationRequestService.getById(performInfoDto.getRequestId());
if (medicationRequest != null) {
encounterId = medicationRequest.getEncounterId();
requestId = medicationRequest.getId();
@@ -352,14 +352,11 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
List<Long> devRequestIdList = devicePerformList.stream().map(PerformInfoDto::getRequestId).toList();
// 获取耗材发放id列表
List<Long> devDispenseIdList = performInfoList.stream().map(PerformInfoDto::getDispenseId).toList();
<<<<<<< HEAD
=======
// 更新请求状态为已完成
LambdaUpdateWrapper<DeviceRequest> updateWrapper =
new LambdaUpdateWrapper<DeviceRequest>().in(DeviceRequest::getId, devRequestIdList)
LambdaUpdateWrapper<DeviceRequest> updateWrapper
= new LambdaUpdateWrapper<DeviceRequest>().in(DeviceRequest::getId, devRequestIdList)
.set(DeviceRequest::getStatusEnum, RequestStatus.COMPLETED.getValue());
deviceRequestService.update(updateWrapper);
>>>>>>> v1.3
// 发耗材信息查询
List<DeviceDispense> dispenseList = deviceDispenseService
.list(new LambdaQueryWrapper<DeviceDispense>().in(DeviceDispense::getId, devDispenseIdList));
@@ -387,55 +384,6 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
} else {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
<<<<<<< HEAD
// 获取库存信息
List<UnDispenseInventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(
devUnDispenseIdList, null, CommonConstants.TableName.MED_MEDICATION_DEFINITION,
CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个耗材分组
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> groupItems = entry.getValue();
if (groupItems.stream().map(UnDispenseInventoryDto::getInventoryStatusEnum)
.allMatch(x -> x.equals(PublicationStatus.RETIRED.getValue()))) {
// 库存停供校验
return R.fail(groupItems.get(0).getItemName() + "库存已停供");
}
}
List<InventoryItem> 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);
=======
// 获取药品待发放库存信息
List<UnDispenseInventoryDto> unDispenseInventoryList = returnMedicineMapper.selectInventoryInfoList(
@@ -445,8 +393,7 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
// 库存待更新列表
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 根据批号,发放项目,发放药房进行分组处理
Map<String,
List<UnDispenseInventoryDto>> unDispenseInventoryMap = unDispenseInventoryList.stream()
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap = unDispenseInventoryList.stream()
.collect(Collectors.groupingBy(x -> x.getItemId() + CommonConstants.Common.DASH + x.getLotNumber()
+ CommonConstants.Common.DASH + x.getLocationId()));
if (!unDispenseInventoryMap.isEmpty()) {
@@ -488,29 +435,11 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
inventoryItemList.add(new InventoryItem().setId(inventoryId)
.setQuantity(inventoryQuantity.subtract(minQuantity)));
}
>>>>>>> v1.3
}
}
}
// 库存更新
inventoryItemService.updateBatchById(inventoryItemList);
<<<<<<< HEAD
// 更新请求状态为已完成
deviceRequestService.updateCompletedStatusBatch(devRequestIdList);
// 调用医保商品销售接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH);
// 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<String> uploadFailedNoList =
westernMedicineDispenseAppServiceImpl.ybMedicineIntegrated(null, devDispenseIdList);
if (uploadFailedNoList != null) {
returnMsg = "3505商品销售上传错误错误项目编码" + uploadFailedNoList;
} else {
returnMsg = "3505商品销售上传成功";
}
}
=======
// // 调用医保商品销售接口
// String ybSwitch =
@@ -525,7 +454,6 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
// returnMsg = "3505商品销售上传成功";
// }
// }
>>>>>>> v1.3
}
return R.ok("执行成功");
}
@@ -648,45 +576,6 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
// 药品退药请求状态变更(待退药→已完成)
deviceRequestService.updateCompletedStatusBatch(devRefundRequestIdList);
<<<<<<< HEAD
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 获取库存信息
List<UnDispenseInventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList,
null, 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);
}
}
// 库存更新
inventoryItemService.updateBatchById(inventoryItemList);
// 调用医保商品销售退货接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
if (!devRefundList.isEmpty()) {
List<String> uploadFailedNoList =
returnedMedicineAppServiceImpl.ybReturnIntegrated(new ArrayList<>(), devDispenseIdList);
if (uploadFailedNoList != null) {
returnMsg = "3506商品销售退货上传错误错误项目编码" + uploadFailedNoList;
} else {
returnMsg = "3506商品销售退货上传成功";
=======
// 扣库
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 获取库存信息
@@ -711,7 +600,6 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
.add(inventory.getPartPercent().multiply(inventory.getDispenseQuantity())));
}
inventoryItemList.add(inventoryItem);
>>>>>>> v1.3
}
}
// 库存更新
@@ -743,8 +631,8 @@ public class OutpatientTreatmentAppServiceImpl implements IOutpatientTreatmentAp
*/
@Override
public R<?> getBloodTransfusionPatch(Long requestId) {
BloodTransfusionPatchDto bloodTransfusionPatch =
outpatientTreatmentAppMapper.getBloodTransfusionPatch(requestId);
BloodTransfusionPatchDto bloodTransfusionPatch
= outpatientTreatmentAppMapper.getBloodTransfusionPatch(requestId);
// 性别枚举
bloodTransfusionPatch.setGenderEnum_enumText(
EnumUtils.getInfoByValue(AdministrativeGender.class, bloodTransfusionPatch.getGenderEnum()));

View File

@@ -50,20 +50,9 @@ public interface IPatientInformationService {
R<?> addPatient(PatientBaseInfoDto patientInfoDto);
/**
<<<<<<< HEAD
* 检查患者是否存在
*
* @param name 患者姓名
* @param idCardNo 身份证号
* @return 是否存在
*/
boolean checkPatientExists(String name, String idCardNo);
=======
* 更新患者手机号
*
* @param patientBaseInfoDto 患者信息
*/
R<?> updatePatientPhone(PatientBaseInfoDto patientBaseInfoDto);
>>>>>>> v1.3
}

View File

@@ -130,25 +130,16 @@ public class PatientInformationServiceImpl implements IPatientInformationService
@Override
public IPage<PatientBaseInfoDto> getPatientInfo(PatientBaseInfoDto patientBaseInfoDto, String searchKey,
Integer pageNo, Integer pageSize, HttpServletRequest request) {
<<<<<<< HEAD
// 构建查询条件 - 添加phone字段到搜索条件中
QueryWrapper<PatientInformationDto> queryWrapper = HisQueryUtils.buildQueryWrapper(
patientInfoSearchParam, searchKey, new HashSet<>(Arrays.asList(CommonConstants.FieldName.Name,
CommonConstants.FieldName.BusNo, CommonConstants.FieldName.PyStr, CommonConstants.FieldName.WbStr,
CommonConstants.FieldName.Phone)), // 添加phone字段支持手机号搜索
=======
// 构建查询条件
QueryWrapper<PatientBaseInfoDto> queryWrapper = HisQueryUtils.buildQueryWrapper(
patientBaseInfoDto, searchKey, new HashSet<>(Arrays.asList(CommonConstants.FieldName.Name,
CommonConstants.FieldName.BusNo, CommonConstants.FieldName.PyStr, CommonConstants.FieldName.WbStr)),
>>>>>>> v1.3
request);
IPage<PatientBaseInfoDto> patientInformationPage =
patientManageMapper.getPatientPage(new Page<>(pageNo, pageSize), queryWrapper);
IPage<PatientBaseInfoDto> patientInformationPage
= patientManageMapper.getPatientPage(new Page<>(pageNo, pageSize), queryWrapper);
// 患者id集合
List<Long> patientIdList =
patientInformationPage.getRecords().stream().map(PatientBaseInfoDto::getId).collect(Collectors.toList());
List<Long> patientIdList
= patientInformationPage.getRecords().stream().map(PatientBaseInfoDto::getId).collect(Collectors.toList());
// 患者身份信息
List<PatientIdInfoDto> patientIdInfo = patientManageMapper.getPatientIdInfo(patientIdList);
// 获取登录者信息
@@ -194,8 +185,8 @@ public class PatientInformationServiceImpl implements IPatientInformationService
}
}
// 身份证号是否存在
List<Patient> idCardList =
patientService.list(new LambdaQueryWrapper<Patient>().eq(Patient::getIdCard, patientInfoDto.getIdCard())
List<Patient> idCardList
= patientService.list(new LambdaQueryWrapper<Patient>().eq(Patient::getIdCard, patientInfoDto.getIdCard())
.ne(patientInfoDto.getId() != null, Patient::getId, patientInfoDto.getId()));
if (!idCardList.isEmpty()) {
Patient patient = idCardList.get(0);
@@ -245,8 +236,8 @@ public class PatientInformationServiceImpl implements IPatientInformationService
}
}
// 身份证号是否存在
List<Patient> idCardList =
patientService.list(new LambdaQueryWrapper<Patient>().eq(Patient::getIdCard, patientInfoDto.getIdCard()));
List<Patient> idCardList
= patientService.list(new LambdaQueryWrapper<Patient>().eq(Patient::getIdCard, patientInfoDto.getIdCard()));
if (!idCardList.isEmpty()) {
throw new ServiceException("身份证号:" + patientInfoDto.getIdCard() + "已经存在");
}
@@ -272,18 +263,6 @@ public class PatientInformationServiceImpl implements IPatientInformationService
return R.ok(patient, MessageUtils.createMessage(PromptMsgConstant.Common.M00001, new Object[]{"患者信息"}));
}
<<<<<<< HEAD
@Override
public boolean checkPatientExists(String name, String idCardNo) {
QueryWrapper<Patient> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name)
.eq("id_card", idCardNo)
.eq("delete_flag", "0");
return patientService.count(queryWrapper) > 0;
}
=======
/**
* 处理患者信息
*
@@ -345,5 +324,4 @@ public class PatientInformationServiceImpl implements IPatientInformationService
}
return R.fail("更新患者手机号失败");
}
>>>>>>> v1.3
}

View File

@@ -45,7 +45,9 @@ public class PatientBaseInfoDto {
private Integer genderEnum;
private String genderEnum_enumText;
/** 活动标记 */
/**
* 活动标记
*/
private Integer activeFlag;
private Integer activeFlag_enumText;
@@ -68,18 +70,7 @@ public class PatientBaseInfoDto {
/**
* 联系方式
*/
<<<<<<< HEAD:openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientInformationDto.java
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy/MM/dd HH:mm:ss", timezone = "GMT+8")
private Date deceasedDate;
/**
* 婚姻状态
*/
private Integer maritalStatusEnum;
private String maritalStatusEnum_enumText;
=======
private String phone;
>>>>>>> v1.3:openhis-server-new/openhis-application/src/main/java/com/openhis/web/patientmanage/dto/PatientBaseInfoDto.java
/**
* 职业编码

View File

@@ -11,14 +11,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.core.common.core.domain.R;
import com.openhis.web.chargemanage.dto.OutpatientRegistrationAddParam;
import com.openhis.web.chargemanage.dto.OutpatientRegistrationSettleParam;
<<<<<<< HEAD
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.web.paymentmanage.dto.*;
>>>>>>> v1.3
import com.openhis.yb.dto.PaymentDetailDto;
import com.openhis.yb.dto.PaymentDto;
import com.openhis.yb.dto.PaymentInpatientDto;
@@ -31,6 +24,7 @@ import com.openhis.yb.dto.PrePaymentDto;
* @date 2025-03-29
*/
public interface IPaymentRecService {
/**
* 付款
*
@@ -139,9 +133,6 @@ public interface IPaymentRecService {
* @return 结果
*/
String nenuBpcPay(NenuBpcPayDto nenuBpcPayDto);
<<<<<<< HEAD
=======
List<PaymentDetailDto> cancelPreReg(Long encounterId);
>>>>>>> v1.3
}

View File

@@ -3,11 +3,8 @@ package com.openhis.web.paymentmanage.appservice;
import com.core.common.core.domain.R;
import com.openhis.yb.dto.ThreePartPayDto;
<<<<<<< HEAD
=======
import javax.servlet.http.HttpServletRequest;
>>>>>>> v1.3
/**
* 第三方支付应用层Service
*
@@ -15,11 +12,10 @@ import javax.servlet.http.HttpServletRequest;
* @date 2025-03-29
*/
public interface ThreePartPayService {
<<<<<<< HEAD
R<?> payFor(ThreePartPayDto threePartPayDto);
=======
/**
* 付款
*
* @param threePartPayDto 前台参数
* @return 结果
*/
@@ -27,26 +23,29 @@ public interface ThreePartPayService {
/**
* 签到
*
* @return 结果
*/
R<?> sign();
/**
* 签出
*
* @return 结果
*/
R<?> signOut();
/**
* 支付结果查询
*
* @param id 参数
* @return 结果
*/
R<?> payQuery(Long id);
/**
* 当天退费
*
* @param paymentId 参数
* @return 结果
*/
@@ -54,6 +53,7 @@ public interface ThreePartPayService {
/**
* 隔天退货
*
* @param paymentId 参数
* @return 结果
*/
@@ -61,6 +61,7 @@ public interface ThreePartPayService {
/**
* 退费结果查询
*
* @param id
* @return
*/
@@ -68,6 +69,7 @@ public interface ThreePartPayService {
/**
* 网银支付记录
*
* @param searchKey 模糊查询
* @param pageNo 页码
* @param pageSize 页容量
@@ -78,9 +80,9 @@ public interface ThreePartPayService {
/**
* 付款(师大中银)
*
* @param threePartPayDto 前台参数
* @return 结果
*/
R<?> payForNenu(ThreePartPayDto threePartPayDto);
>>>>>>> v1.3
}

View File

@@ -78,6 +78,7 @@ import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
public class EleInvoiceServiceImpl implements IEleInvoiceService {
private static final BigDecimal ZERO = new BigDecimal("0.00");
Logger logger = LoggerFactory.getLogger(EleInvoiceServiceImpl.class);
@Resource
@@ -225,8 +226,8 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
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);
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
@@ -395,8 +396,8 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
// unit 计量单位
chargeDetail.put("unit", "");
// std 收费标准 Number 14,2 是
BigDecimal std =
detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 6, RoundingMode.HALF_UP);
BigDecimal std
= detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 6, RoundingMode.HALF_UP);
// 精确表示,避免科学计数法
chargeDetail.put("std", df.format(std));
// number 数量 Number 14,2 是
@@ -589,7 +590,6 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
bill.put("busType", "02");
// ------就诊信息------
// patientCategory 就诊科室 String 60 是
bill.put("patientCategory", patientInfo.getPatientCategory());
// patientCategoryCode 就诊科室编码 String 60 是
@@ -701,8 +701,8 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
// unit 计量单位
chargeDetail.put("unit", "");
// std 收费标准 Number 14,2 是
BigDecimal std =
detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 6, RoundingMode.HALF_UP);
BigDecimal std
= 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());
@@ -767,12 +767,9 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
String srcmsg;
System.out.println(JSON.toJSONString(bill));
JSONObject resobj;
<<<<<<< HEAD
=======
logger.info("************************************** 分 割 线 ***************************************");
logger.info("门诊信息入参:" + JSON.toJSONString(bill));
logger.info("———————————————————————————————————————————————————————————————————————————————————————");
>>>>>>> v1.3
if ("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) {
resobj = PreInvoicePostForward(bill, "api/medical/invoiceEBillOutpatient");
} else {
@@ -905,7 +902,6 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
bill.put("checker", user.getName());
// ------就诊信息------
// medCareAreaCode 医保行政区划码 String 6 否 医保结算时必须填写
bill.put("medCareAreaCode", patientInfo.getMedCareAreaCode());
// category 入院科室名称 String 50 是 如:入院科室不存在,填写出院科室
@@ -1061,8 +1057,8 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
// unit 计量单位
chargeDetail.put("unit", "");
// std 收费标准 Number 14,2 是
BigDecimal std =
detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 6, RoundingMode.HALF_UP);
BigDecimal std
= detail.getAmt().divide(new BigDecimal(detail.getNumber().toString()), 6, RoundingMode.HALF_UP);
// 精确表示,避免科学计数法
chargeDetail.put("std", df.format(std));
// number 数量 Number 14,2 是
@@ -1077,19 +1073,15 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
bill.put("chargeDetail", chargeDetails);
// --------------------请求业务参数 data--------------------END
JSONObject redata = new JSONObject();
String redata64;
String srcdata;
String srcmsg;
// JSONObject resobj = PreInvoicePostForward(bill, "api/medical/invEBillHospitalized");
JSONObject resobj;
<<<<<<< HEAD
=======
logger.info("************************************** 分 割 线 ***************************************");
logger.info("住院信息入参:" + JSON.toJSONString(bill));
logger.info("———————————————————————————————————————————————————————————————————————————————————————");
>>>>>>> v1.3
if ("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) {
resobj = PreInvoicePostForward(bill, "api/medical/invEBillHospitalized");
} else {
@@ -1160,7 +1152,6 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
* @param clinicSettle 医保结算记录
* @return 返回值
*/
private JSONObject commomSet(EleInvoicePatientInfoDto patientInfo, EleInvoicePaymentInfoDto paymentInfo,
InvoiceBaseInfoDto clinicSettle) throws ParseException {
// 日期格式化:定义多种时间格式,用于生成业务流水号、时间戳等。
@@ -1266,7 +1257,6 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
// 360 老红军医疗保障 //370 企业补充医疗保险
// 380 新型农村合作医疗 //390 城乡居民基本医疗保险
// 391 城镇居民基本医疗保险 //392 城乡居民大病医疗保险 //399 其他特殊人员医疗保障
// 01 职工基本医疗保险 06 全公费
// 02 居民基本医疗保险 07 全自费
// 03 新型农村合作医疗 90 城乡居民医疗保险
@@ -1434,16 +1424,11 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
payChannelDetail.put("payChannelCode", "11");
// payChannelDetail.put("payChannelValue", df.format(paymentInfo.getYbFundPayAmount().add(paymentInfo
// .getOtherPayAmount().add(paymentInfo.getZhPayAmount()).add(paymentInfo.getAelfYbZhGjValue()))));
<<<<<<< HEAD
payChannelDetail.put("payChannelValue", df.format(paymentInfo.getYbFundPayAmount()
.add(paymentInfo.getZhPayAmount()).add(paymentInfo.getAelfYbZhGjValue())));
=======
//payChannelDetail.put("payChannelValue", df.format(paymentInfo.getYbFundPayAmount()
// .add(paymentInfo.getZhPayAmount()).add(paymentInfo.getAelfYbZhGjValue())));
// 根据这几个医院的实际情况,医保支付金额先后刨除掉其他支付共济支付金额两项
payChannelDetail.put("payChannelValue", df.format(paymentInfo.getYbFundPayAmount()
.add(paymentInfo.getZhPayAmount())));
>>>>>>> v1.3
payChannelDetails.add(payChannelDetail);
// 现金
@@ -1512,8 +1497,8 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
return R.fail(PromptMsgConstant.invoice.M00004);
}
Invoice invoice =
invoiceService.getOne(new LambdaQueryWrapper<Invoice>().eq(Invoice::getReconciliationId, paymentId));
Invoice invoice
= invoiceService.getOne(new LambdaQueryWrapper<Invoice>().eq(Invoice::getReconciliationId, paymentId));
if (invoice.getStatusEnum() == null || invoice.getStatusEnum().equals(InvoiceStatus.DRAFT)) {
return R.fail(PromptMsgConstant.invoice.M00007);
@@ -1548,13 +1533,9 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
// JSONObject resobj = PreInvoicePostForward(bill, "api/medical/writeOffEBill");
JSONObject resobj;
<<<<<<< HEAD
logger.info("冲红信息入参:" + JSON.toJSONString(bill));
=======
logger.info("************************************** 分 割 线 ***************************************");
logger.info("冲红信息入参:" + JSON.toJSONString(bill));
logger.info("———————————————————————————————————————————————————————————————————————————————————————");
>>>>>>> v1.3
if ("0".equals(SecurityUtils.getLoginUser().getOptionJson().getString("forwardSwitch"))) {
resobj = PreInvoicePostForward(bill, "api/medical/writeOffEBill");
} else {
@@ -1577,8 +1558,8 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
return R.fail(PromptMsgConstant.Common.M00011);
}
// 查询退款的支付id
List<PaymentReconciliation> paymentReconciliation =
paymentReconciliationService.list(new LambdaQueryWrapper<PaymentReconciliation>()
List<PaymentReconciliation> paymentReconciliation
= paymentReconciliationService.list(new LambdaQueryWrapper<PaymentReconciliation>()
.eq(PaymentReconciliation::getRelationId, paymentId)
.in(PaymentReconciliation::getStatusEnum,
Arrays.asList(PaymentStatus.REFUND_ALL.getValue(),
@@ -1718,13 +1699,10 @@ public class EleInvoiceServiceImpl implements IEleInvoiceService {
if (YbPayment.OVERLMT_SELFPAY.getValue().equals(detail.getPayEnum())) {
invoiceBaseInfoDto.setOverlmtSelfpay(detail.getAmount());
}
<<<<<<< HEAD
=======
// 先行自付费用
if (YbPayment.PRESELFPAY_AMT.getValue().equals(detail.getPayEnum())) {
invoiceBaseInfoDto.setPreselfpayAmt(detail.getAmount());
}
>>>>>>> v1.3
// 学校垫支
if (YbPayment.SCHOOL_GF_PAY.getValue().equals(detail.getPayEnum())) {
invoiceBaseInfoDto.setGfRatio(detail.getAmount());

View File

@@ -303,8 +303,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
map.put("insuplcAdmdvs", perinfo.getInsuplcAdmdvs());// 患者参保地区划
}
Contract contract =
contractService.getOne(new LambdaQueryWrapper<Contract>().eq(Contract::getBusNo, account.getContractNo()));
Contract contract
= contractService.getOne(new LambdaQueryWrapper<Contract>().eq(Contract::getBusNo, account.getContractNo()));
if (contract == null) {
throw new ServiceException("未查询到合同信息");
}
@@ -319,8 +319,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
if (encounterDiagnosis != null) {
Condition condition = iConditionService.getById(encounterDiagnosis.getConditionId());
if (condition != null) {
ConditionDefinition conditionDefinition =
iConditionDefinitionService.getOne(new LambdaQueryWrapper<ConditionDefinition>()
ConditionDefinition conditionDefinition
= iConditionDefinitionService.getOne(new LambdaQueryWrapper<ConditionDefinition>()
.eq(ConditionDefinition::getId, condition.getDefinitionId()));
if (conditionDefinition != null) {
map.put("conditionDefinition", conditionDefinition.getName());// 诊断名
@@ -349,9 +349,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
ChargeItemDefinition chargeItemDefinition = iChargeItemDefinitionService.getById(definitionId);
YbMedChrgItmType medChrgItmType =
YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
YbMedChrgItmType medChrgItmType
= YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
switch (medChrgItmType) {
case BED_FEE:
@@ -467,8 +466,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// }
// 查询所有的支付详情
List<Long> paymentIdList =
paymentReconciliationList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList());
List<Long> paymentIdList
= paymentReconciliationList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList());
List<PaymentRecDetail> paymentDetails = paymentRecDetailService
.list(new LambdaQueryWrapper<PaymentRecDetail>().in(PaymentRecDetail::getReconciliationId, paymentIdList)
.eq(PaymentRecDetail::getDeleteFlag, DelFlag.NO.getCode()).notIn(PaymentRecDetail::getPayEnum,
@@ -487,15 +486,15 @@ public class IChargeBillServiceImpl implements IChargeBillService {
if (paymentDetails.isEmpty()) {
return getMap(map);
}
Map<Long, List<PaymentRecDetail>> paymentDetailsKV =
paymentDetails.stream().collect(Collectors.groupingBy(PaymentRecDetail::getReconciliationId));
Map<Long, List<PaymentRecDetail>> paymentDetailsKV
= paymentDetails.stream().collect(Collectors.groupingBy(PaymentRecDetail::getReconciliationId));
// 声明变量,符合要求的付款记录
Collection<PaymentReconciliation> PaymentReconciliationList;
List<Account> accountList = new ArrayList<>();
if (!StringUtils.isEmpty(contractNo)) {
// 查询账户信息用来区分省市医保
List<Long> accountIds =
paymentDetails.stream().map(PaymentRecDetail::getAccountId).collect(Collectors.toList());
List<Long> accountIds
= paymentDetails.stream().map(PaymentRecDetail::getAccountId).collect(Collectors.toList());
if (accountIds.isEmpty()) {
throw new ServiceException("查询账户信息为空");
}
@@ -505,8 +504,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
Map<Long, PaymentReconciliation> paymentMap = new HashMap<>();
for (PaymentRecDetail paymentDetail : paymentDetails) {
Optional<Account> first =
accountList.stream().filter(x -> x.getId().equals(paymentDetail.getAccountId())).findFirst();
Optional<Account> first
= accountList.stream().filter(x -> x.getId().equals(paymentDetail.getAccountId())).findFirst();
// 账户不符合要求的筛出掉
if (first.isEmpty() || !first.get().getContractNo().equals(contractNo)) {
continue;
@@ -545,7 +544,6 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// System.out.println(chargeItemId);
// System.out.println(",");
// }
List<ChargeItem> chargeItemList = chargeItemService.list(new LambdaQueryWrapper<ChargeItem>()
.in(ChargeItem::getId, chargeItemIds).eq(ChargeItem::getDeleteFlag, DelFlag.NO.getCode()));
if (paymentDetails.isEmpty()) {
@@ -558,20 +556,19 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// System.out.println(JSON.toJSONString(chargeItem));
// }
// }
// 查询收费定义列表
List<Long> chargeItemDefinitionIdList =
chargeItemList.stream().map(ChargeItem::getDefinitionId).collect(Collectors.toList());
List<Long> chargeItemDefinitionIdList
= chargeItemList.stream().map(ChargeItem::getDefinitionId).collect(Collectors.toList());
if (chargeItemDefinitionIdList.isEmpty()) {
throw new ServiceException("未查询到收费记录,无收费项信息");
}
List<ChargeItemDefinition> chargeItemDefinitions =
iChargeItemDefinitionService.listByIds(chargeItemDefinitionIdList);
List<ChargeItemDefinition> chargeItemDefinitions
= iChargeItemDefinitionService.listByIds(chargeItemDefinitionIdList);
if (chargeItemDefinitions.isEmpty()) {
throw new ServiceException("未查询到收费记录,无收费项信息");
}
Map<Long, List<ChargeItemDefinition>> chargeItemDefKV =
chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getId));
Map<Long, List<ChargeItemDefinition>> chargeItemDefKV
= chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getId));
// 查询医保结算id
List<String> settleIds = new ArrayList<>();
@@ -602,8 +599,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
for (PaymentRecDetail paymentDetail : paymentDetails) {
if (!StringUtils.isEmpty(contractNo)) {
Optional<Account> first =
accountList.stream().filter(x -> x.getId().equals(paymentDetail.getAccountId())).findFirst();
Optional<Account> first
= accountList.stream().filter(x -> x.getId().equals(paymentDetail.getAccountId())).findFirst();
if (first.isEmpty() || !first.get().getContractNo().equals(contractNo)) {
continue;
}
@@ -646,14 +643,14 @@ public class IChargeBillServiceImpl implements IChargeBillService {
}
}
if (!returnPaymentList.isEmpty()) {
List<Long> returnIds =
returnPaymentList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList());
List<Long> returnIds
= returnPaymentList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList());
List<Invoice> invoiceList = iInvoiceService.list(new LambdaUpdateWrapper<Invoice>()
.in(Invoice::getReconciliationId, returnIds).eq(Invoice::getDeleteFlag, DelFlag.NO.getCode()));
if (!invoiceList.isEmpty()) {
Map<Long, List<Invoice>> invoiceKV =
invoiceList.stream().collect(Collectors.groupingBy(Invoice::getReconciliationId));
Map<Long, List<Invoice>> invoiceKV
= invoiceList.stream().collect(Collectors.groupingBy(Invoice::getReconciliationId));
for (PaymentReconciliation paymentReconciliation : returnPaymentList) {
returnBillVO = new ReturnBillVO();
returnBillVO.setTotalAmount(paymentReconciliation.getTenderedAmount());
@@ -719,8 +716,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
ChargeItemDefinition chargeItemDefinition = chargeItemDefKV.get(definitionId).get(0);
YbMedChrgItmType medChrgItmType =
YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
YbMedChrgItmType medChrgItmType
= YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
switch (medChrgItmType) {
case BED_FEE:
@@ -799,10 +796,10 @@ public class IChargeBillServiceImpl implements IChargeBillService {
throw new ServiceException("收费定义未设置财务分类提示信息chargeItemDefinitionId" + chargeItemDefinition.getId());
}
}
Map<String, List<ChargeItemDefinition>> chargeItemDefMapByTypeCode =
chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getTypeCode));
Map<Long, List<ChargeItem>> chargeItemMapByDefinitionId =
chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getDefinitionId));
Map<String, List<ChargeItemDefinition>> chargeItemDefMapByTypeCode
= chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getTypeCode));
Map<Long, List<ChargeItem>> chargeItemMapByDefinitionId
= chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getDefinitionId));
for (Map.Entry<String, List<ChargeItemDefinition>> stringListEntry : chargeItemDefMapByTypeCode.entrySet()) {
String key = stringListEntry.getKey();
@@ -863,16 +860,15 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// }
// }
// }
// 查询所有的支付详情
List<Long> paymentIdList =
paymentReconciliationList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList());
List<Long> paymentIdList
= paymentReconciliationList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList());
// List<PaymentRecDetail> paymentDetails = paymentRecDetailService
// .list(new LambdaQueryWrapper<PaymentRecDetail>().in(PaymentRecDetail::getReconciliationId, paymentIdList)
// .eq(PaymentRecDetail::getDeleteFlag, DelFlag.NO.getCode()));
List<PaymentRecDetailAccountResult> PaymentRecDetailAccountResultList =
paymentRecDetailService.getListByReconciliationIds(paymentIdList, PaymentKind.OUTPATIENT_CLINIC.getValue());
List<PaymentRecDetailAccountResult> PaymentRecDetailAccountResultList
= paymentRecDetailService.getListByReconciliationIds(paymentIdList, PaymentKind.OUTPATIENT_CLINIC.getValue());
if (PaymentRecDetailAccountResultList.isEmpty()) {
return getMap(map);
}
@@ -935,7 +931,6 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// throw new ServiceException("收费项:" + chargeItem.getId());
// }
// }
// 根据省市医保分组
Map<String, List<PaymentRecDetailAccountResult>> paymentDetailsMapByContract = PaymentRecDetailAccountResultList
.stream().collect(Collectors.groupingBy(PaymentRecDetailAccountResult::getContractNo));
@@ -964,20 +959,19 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// System.out.println(JSON.toJSONString(chargeItem));
// }
// }
// 查询收费定义列表
List<Long> chargeItemDefinitionIdList =
chargeItemList.stream().map(ChargeItem::getDefinitionId).collect(Collectors.toList());
List<Long> chargeItemDefinitionIdList
= chargeItemList.stream().map(ChargeItem::getDefinitionId).collect(Collectors.toList());
if (chargeItemDefinitionIdList.isEmpty()) {
throw new ServiceException("未查询到收费记录,无收费项信息");
}
List<ChargeItemDefinition> chargeItemDefinitions =
iChargeItemDefinitionService.listByIds(chargeItemDefinitionIdList);
List<ChargeItemDefinition> chargeItemDefinitions
= iChargeItemDefinitionService.listByIds(chargeItemDefinitionIdList);
if (chargeItemDefinitions.isEmpty()) {
throw new ServiceException("未查询到收费记录,无收费项信息");
}
Map<Long, List<ChargeItemDefinition>> chargeItemDefKV =
chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getId));
Map<Long, List<ChargeItemDefinition>> chargeItemDefKV
= chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getId));
// 查询医保结算id
List<String> settleIds = new ArrayList<>();
@@ -1011,8 +1005,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
BigDecimal YbCashSum = BigDecimal.ZERO;// 医保现金总额
// 长大版本要显示出来省市医保的区别
List<Contract> redisContractList = iContractService.getRedisContractList();
Map<String, List<Contract>> contractMapByBusNo =
redisContractList.stream().collect(Collectors.groupingBy(Contract::getBusNo));
Map<String, List<Contract>> contractMapByBusNo
= redisContractList.stream().collect(Collectors.groupingBy(Contract::getBusNo));
for (Map.Entry<String, List<PaymentRecDetailAccountResult>> stringListEntry : paymentDetailsMapByContract
.entrySet()) {
String key = stringListEntry.getKey();
@@ -1122,11 +1116,11 @@ public class IChargeBillServiceImpl implements IChargeBillService {
List<ChargeItemDefinition> beforeChargeItemDefinitions = new ArrayList<>();
List<ChargeItem> beforeChargeItemList = new ArrayList<>();
if (!returnPaymentList.isEmpty()) {
List<Long> returnIds =
returnPaymentList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList());
List<Long> returnIds
= returnPaymentList.stream().map(PaymentReconciliation::getId).collect(Collectors.toList());
// 查原付款单子
List<Long> relationIdList =
returnPaymentList.stream().map(PaymentReconciliation::getRelationId).collect(Collectors.toList());
List<Long> relationIdList
= returnPaymentList.stream().map(PaymentReconciliation::getRelationId).collect(Collectors.toList());
if (relationIdList.isEmpty() || returnPaymentList.size() != relationIdList.size()) {
throw new ServiceException("数据异常,存在无法关联到原单的退款单,请联系工程师");
}
@@ -1142,8 +1136,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
}
if (!beforeList.isEmpty()) {
// 拆解所有的chargeItemId拼装成一个集合
List<String> chargeItemIdList =
beforeList.stream().map(PaymentReconciliation::getChargeItemIds).collect(Collectors.toList());
List<String> chargeItemIdList
= beforeList.stream().map(PaymentReconciliation::getChargeItemIds).collect(Collectors.toList());
List<Long> beforeChargeItemIds = new ArrayList<>();
for (String chargeItemId : chargeItemIdList) {
if (StringUtils.isNotEmpty(chargeItemId)) {
@@ -1158,8 +1152,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
if (beforeChargeItemList.isEmpty()) {
throw new ServiceException("数据异常,查找不到退费收费项信息");
}
List<Long> beforeChargeItemDefinitionIdList =
beforeChargeItemList.stream().map(ChargeItem::getDefinitionId).collect(Collectors.toList());
List<Long> beforeChargeItemDefinitionIdList
= beforeChargeItemList.stream().map(ChargeItem::getDefinitionId).collect(Collectors.toList());
if (beforeChargeItemDefinitionIdList.isEmpty()) {
throw new ServiceException("数据异常,查找不到收费项的定义信息");
}
@@ -1180,8 +1174,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
ChargeItemDefinition chargeItemDefinition = chargeItemDefKV.get(definitionId).get(0);
YbMedChrgItmType medChrgItmType =
YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
YbMedChrgItmType medChrgItmType
= YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
switch (medChrgItmType) {
case BED_FEE:
@@ -1233,13 +1227,13 @@ public class IChargeBillServiceImpl implements IChargeBillService {
List<Invoice> invoiceList = iInvoiceService.list(new LambdaUpdateWrapper<Invoice>()
.in(Invoice::getReconciliationId, returnIds).eq(Invoice::getDeleteFlag, DelFlag.NO.getCode()));
if (!invoiceList.isEmpty()) {
Map<Long, List<Invoice>> invoiceKV =
invoiceList.stream().collect(Collectors.groupingBy(Invoice::getReconciliationId));
Map<Long, List<Invoice>> invoiceKV
= invoiceList.stream().collect(Collectors.groupingBy(Invoice::getReconciliationId));
for (PaymentReconciliation paymentReconciliation : returnPaymentList) {
returnBillVO = new ReturnBillVO();
returnBillVO.setTotalAmount(paymentReconciliation.getTenderedAmount());
List<PaymentRecDetailAccountResult> paymentRecDetails =
paymentDetailsKV.get(paymentReconciliation.getId());
List<PaymentRecDetailAccountResult> paymentRecDetails
= paymentDetailsKV.get(paymentReconciliation.getId());
for (PaymentRecDetailAccountResult paymentRecDetail : paymentRecDetails) {
if (YbPayment.SELF_CASH_PAY.getValue().equals(paymentRecDetail.getPayEnum())) {
returnBillVO.setPaidAmount(paymentRecDetail.getAmount());
@@ -1286,8 +1280,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
ChargeItemDefinition chargeItemDefinition = chargeItemDefKV.get(definitionId).get(0);
YbMedChrgItmType medChrgItmType =
YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
YbMedChrgItmType medChrgItmType
= YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
switch (medChrgItmType) {
case BED_FEE:
@@ -1367,10 +1361,10 @@ public class IChargeBillServiceImpl implements IChargeBillService {
}
}
Map<String, List<ChargeItemDefinition>> chargeItemDefMapByTypeCode =
chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getTypeCode));
Map<Long, List<ChargeItem>> chargeItemMapByDefinitionId =
chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getDefinitionId));
Map<String, List<ChargeItemDefinition>> chargeItemDefMapByTypeCode
= chargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getTypeCode));
Map<Long, List<ChargeItem>> chargeItemMapByDefinitionId
= chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getDefinitionId));
for (Map.Entry<String, List<ChargeItemDefinition>> stringListEntry : chargeItemDefMapByTypeCode.entrySet()) {
String key = stringListEntry.getKey();
@@ -1389,10 +1383,10 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// 超本时间段的退费单统计
if (!beforeChargeItemDefinitions.isEmpty() && !beforeChargeItemList.isEmpty()) {
Map<String, List<ChargeItemDefinition>> beforeChargeItemDefMapByTypeCode =
beforeChargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getTypeCode));
Map<Long, List<ChargeItem>> beforeChargeItemMapByDefinitionId =
beforeChargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getDefinitionId));
Map<String, List<ChargeItemDefinition>> beforeChargeItemDefMapByTypeCode
= beforeChargeItemDefinitions.stream().collect(Collectors.groupingBy(ChargeItemDefinition::getTypeCode));
Map<Long, List<ChargeItem>> beforeChargeItemMapByDefinitionId
= beforeChargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getDefinitionId));
for (Map.Entry<String, List<ChargeItemDefinition>> longListEntry : beforeChargeItemDefMapByTypeCode
.entrySet()) {
BigDecimal bigDecimal = map.get(longListEntry.getKey()) == null ? BigDecimal.ZERO
@@ -1413,8 +1407,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// 医保人次自费人次计算
List<EncounterAccountDto> list = iEncounterService.getEncounterInfoByTime(startDate, endDate);
Map<String, List<EncounterAccountDto>> encounterAccountDtoMapByContract =
list.stream().collect(Collectors.groupingBy(EncounterAccountDto::getContractNo));
Map<String, List<EncounterAccountDto>> encounterAccountDtoMapByContract
= list.stream().collect(Collectors.groupingBy(EncounterAccountDto::getContractNo));
for (Map.Entry<String, List<EncounterAccountDto>> stringListEntry : encounterAccountDtoMapByContract
.entrySet()) {
String key = stringListEntry.getKey();
@@ -1473,10 +1467,10 @@ public class IChargeBillServiceImpl implements IChargeBillService {
map.put("amount", amount);// 应收金额
// 查询所有的支付详情(业务注释:收集并统计不同支付渠道支付的费用)
List<Long> paymentIdList =
paymentReconciliationList.stream().map(PaymentReconciliationAccountDel::getId).collect(Collectors.toList());
List<PaymentRecDetailAccountResult> PaymentRecDetailAccountResultList =
paymentRecDetailService.getListByReconciliationIds(paymentIdList, PaymentKind.OUTPATIENT_CLINIC.getValue());
List<Long> paymentIdList
= paymentReconciliationList.stream().map(PaymentReconciliationAccountDel::getId).collect(Collectors.toList());
List<PaymentRecDetailAccountResult> PaymentRecDetailAccountResultList
= paymentRecDetailService.getListByReconciliationIds(paymentIdList, PaymentKind.OUTPATIENT_CLINIC.getValue());
if (PaymentRecDetailAccountResultList.isEmpty()) {
return getMap(map);
@@ -1503,8 +1497,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
BigDecimal discountSum = BigDecimal.ZERO;// 优惠金额
// 长大版本要显示出来省市医保的区别
List<Contract> redisContractList = iContractService.getRedisContractList();
Map<String, List<Contract>> contractMapByBusNo =
redisContractList.stream().collect(Collectors.groupingBy(Contract::getBusNo));
Map<String, List<Contract>> contractMapByBusNo
= redisContractList.stream().collect(Collectors.groupingBy(Contract::getBusNo));
for (Map.Entry<String, List<PaymentRecDetailAccountResult>> stringListEntry : paymentDetailsMapByContract
.entrySet()) {
@@ -1584,15 +1578,15 @@ public class IChargeBillServiceImpl implements IChargeBillService {
Map<Long, List<PaymentReconciliationAccountDel>> returnPaymentMapByRelationId = new HashMap<>();
if (!returnList.isEmpty()) {
returnPaymentMapByRelationId =
returnList.stream().collect(Collectors.groupingBy(PaymentReconciliationAccountDel::getRelationId));
returnPaymentMapByRelationId
= returnList.stream().collect(Collectors.groupingBy(PaymentReconciliationAccountDel::getRelationId));
}
List<String> addChargeItemIds = new ArrayList<>();
List<String> subChargeItemIds = new ArrayList<>();
for (PaymentReconciliationAccountDel paymentReconciliation : paymentList) {
List<PaymentReconciliationAccountDel> paymentReconciliations =
returnPaymentMapByRelationId.get(paymentReconciliation.getId());
List<PaymentReconciliationAccountDel> paymentReconciliations
= returnPaymentMapByRelationId.get(paymentReconciliation.getId());
if (paymentReconciliations != null && !paymentReconciliations.isEmpty()) {
// 情况a
if (PaymentStatus.SUCCESS.getValue().equals(paymentReconciliation.getStatusEnum())) {
@@ -1646,8 +1640,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
if (chargeItemDefInfoByIds.isEmpty()) {
throw new ServiceException("数据异常,该时间段内未查询到收费项");
}
Map<Long, List<ChargeItemDefInfo>> chargeItemDefInfoKVById =
chargeItemDefInfoByIds.stream().collect(Collectors.groupingBy(ChargeItemDefInfo::getId));
Map<Long, List<ChargeItemDefInfo>> chargeItemDefInfoKVById
= chargeItemDefInfoByIds.stream().collect(Collectors.groupingBy(ChargeItemDefInfo::getId));
// 省名变量
BigDecimal bedFee = BigDecimal.ZERO;// 床位费
@@ -1805,15 +1799,9 @@ public class IChargeBillServiceImpl implements IChargeBillService {
map.put("GENERAL_CONSULTATION_FEE", generalConsultationFee);// 一般诊疗费
map.put("REGISTRATION_FEE", registrationFee);// 挂号费
map.put("OTHER_FEE", otherFee);// 其他费用
<<<<<<< HEAD
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).subtract(discountSum);
=======
sum = bedFee.add(diagnosticFee).add(checkFee).add(diagnosticTestFee).add(outDiagnosticTestFee).add(medicalExpenseFee).add(operationFee)
.add(nursingFee).add(sanitaryMaterialsFee).add(westMedicine).add(chineseMedicineFee).add(
chineseMedicineSlicesFee).add(generalConsultationFee).add(registrationFee).add(otherFee);
>>>>>>> v1.3
map.put("SUM", sum);// 合计费用
Map<String, List<ChargeItemDefInfo>> chargeItemDefKVByTypeCode = chargeItemDefInfoByIds.stream()
@@ -1848,11 +1836,11 @@ public class IChargeBillServiceImpl implements IChargeBillService {
ReturnBillVO returnBillVO;
if (!returnList.isEmpty()) {
List<Long> returnIds =
returnList.stream().map(PaymentReconciliationAccountDel::getId).collect(Collectors.toList());
List<Long> returnIds
= returnList.stream().map(PaymentReconciliationAccountDel::getId).collect(Collectors.toList());
// 查原付款单子
List<Long> relationIdList =
returnList.stream().map(PaymentReconciliationAccountDel::getRelationId).collect(Collectors.toList());
List<Long> relationIdList
= returnList.stream().map(PaymentReconciliationAccountDel::getRelationId).collect(Collectors.toList());
if (relationIdList.isEmpty() || returnList.size() != relationIdList.size()) {
throw new ServiceException("数据异常,存在无法关联到原单的退款单,请联系工程师");
}
@@ -1860,13 +1848,13 @@ public class IChargeBillServiceImpl implements IChargeBillService {
List<Invoice> invoiceList = iInvoiceService.list(new LambdaUpdateWrapper<Invoice>()
.in(Invoice::getReconciliationId, returnIds).eq(Invoice::getDeleteFlag, DelFlag.NO.getCode()));
if (!invoiceList.isEmpty()) {
Map<Long, List<Invoice>> invoiceKV =
invoiceList.stream().collect(Collectors.groupingBy(Invoice::getReconciliationId));
Map<Long, List<Invoice>> invoiceKV
= invoiceList.stream().collect(Collectors.groupingBy(Invoice::getReconciliationId));
for (PaymentReconciliationAccountDel paymentReconciliation : returnList) {
returnBillVO = new ReturnBillVO();
returnBillVO.setTotalAmount(paymentReconciliation.getTenderedAmount());
List<PaymentRecDetailAccountResult> paymentRecDetails =
paymentDetailsKV.get(paymentReconciliation.getId());
List<PaymentRecDetailAccountResult> paymentRecDetails
= paymentDetailsKV.get(paymentReconciliation.getId());
for (PaymentRecDetailAccountResult paymentRecDetail : paymentRecDetails) {
if (YbPayment.SELF_CASH_PAY.getValue().equals(paymentRecDetail.getPayEnum())) {
returnBillVO.setPaidAmount(paymentRecDetail.getAmount());
@@ -1894,11 +1882,10 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// map.put("tcSum", tcSum);// 基本统筹
// map.put("zhSum", zhSum);// 账户支付
// map.put("fundSum", fundSum);// 基金支付总额
// 医保人次自费人次计算
List<EncounterAccountDto> list = iEncounterService.getEncounterInfoByTime(startDate, endDate);
Map<String, List<EncounterAccountDto>> encounterAccountDtoMapByContract =
list.stream().collect(Collectors.groupingBy(EncounterAccountDto::getContractNo));
Map<String, List<EncounterAccountDto>> encounterAccountDtoMapByContract
= list.stream().collect(Collectors.groupingBy(EncounterAccountDto::getContractNo));
for (Map.Entry<String, List<EncounterAccountDto>> stringListEntry : encounterAccountDtoMapByContract
.entrySet()) {
String key = stringListEntry.getKey();
@@ -2032,8 +2019,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
? chargeItem.getTotalPrice() : chargeItem.getSystemDiscountPrice());
break;
case CHINESE_MEDICINE_SLICES_FEE:
tyChineseMedicineSlicesFee =
tyChineseMedicineSlicesFee.add(chargeItem.getSystemDiscountPrice() == null
tyChineseMedicineSlicesFee
= tyChineseMedicineSlicesFee.add(chargeItem.getSystemDiscountPrice() == null
? chargeItem.getTotalPrice() : chargeItem.getSystemDiscountPrice());
break;
case CHINESE_MEDICINE_FEE:
@@ -2109,8 +2096,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
? chargeItem.getTotalPrice() : chargeItem.getSystemDiscountPrice());
break;
case CHINESE_MEDICINE_SLICES_FEE:
tyChineseMedicineSlicesFee =
tyChineseMedicineSlicesFee.subtract(chargeItem.getSystemDiscountPrice() == null
tyChineseMedicineSlicesFee
= tyChineseMedicineSlicesFee.subtract(chargeItem.getSystemDiscountPrice() == null
? chargeItem.getTotalPrice() : chargeItem.getSystemDiscountPrice());
break;
case CHINESE_MEDICINE_FEE:
@@ -2118,8 +2105,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
? chargeItem.getTotalPrice() : chargeItem.getSystemDiscountPrice());
break;
case GENERAL_CONSULTATION_FEE:
tyGeneralConsultationFee =
tyGeneralConsultationFee.subtract(chargeItem.getSystemDiscountPrice() == null
tyGeneralConsultationFee
= tyGeneralConsultationFee.subtract(chargeItem.getSystemDiscountPrice() == null
? chargeItem.getTotalPrice() : chargeItem.getSystemDiscountPrice());
break;
case REGISTRATION_FEE:
@@ -2236,13 +2223,13 @@ public class IChargeBillServiceImpl implements IChargeBillService {
.map(Long::valueOf) // 转换为Long
.collect(Collectors.toList());
List<ChargeItemExtendInfoDto> ChargeItemExtendInfoDtoList =
chargeBillMapper.selectChargeItemExtendInfoList(chargeItemIds, chargeSummaryDto.getOrgIdList());
List<ChargeItemExtendInfoDto> ChargeItemExtendInfoDtoList
= chargeBillMapper.selectChargeItemExtendInfoList(chargeItemIds, chargeSummaryDto.getOrgIdList());
Map<Long, List<ChargeItemExtendInfoDto>> chargeItemExtendInfoDtoListGroupByOrgIdMap =
ChargeItemExtendInfoDtoList.stream().collect(Collectors.groupingBy(ChargeItemExtendInfoDto::getOrgId));
LambdaQueryWrapper<Organization> organizationLambdaQueryWrapper =
new LambdaQueryWrapper<Organization>().eq(Organization::getTypeEnum, OrganizationType.DEPARTMENT.getValue())
Map<Long, List<ChargeItemExtendInfoDto>> chargeItemExtendInfoDtoListGroupByOrgIdMap
= ChargeItemExtendInfoDtoList.stream().collect(Collectors.groupingBy(ChargeItemExtendInfoDto::getOrgId));
LambdaQueryWrapper<Organization> organizationLambdaQueryWrapper
= new LambdaQueryWrapper<Organization>().eq(Organization::getTypeEnum, OrganizationType.DEPARTMENT.getValue())
.eq(Organization::getDeleteFlag, DelFlag.NO.getCode()).orderByDesc(Organization::getDisplayOrder);
if (chargeSummaryDto.getOrgIdList() != null && !chargeSummaryDto.getOrgIdList().isEmpty()) {
organizationLambdaQueryWrapper.in(Organization::getId, chargeSummaryDto.getOrgIdList());
@@ -2256,8 +2243,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
for (Organization organization : organizationList) {
orgIncomeDto = new OrgIncomeDto();
orgIncomeDto.setOrgName(organization.getName());
List<ChargeItemExtendInfoDto> chargeItemExtendInfoDtos =
chargeItemExtendInfoDtoListGroupByOrgIdMap.get(organization.getId());
List<ChargeItemExtendInfoDto> chargeItemExtendInfoDtos
= chargeItemExtendInfoDtoListGroupByOrgIdMap.get(organization.getId());
if (chargeItemExtendInfoDtos == null) {
orgIncomeList.add(orgIncomeDto);
continue;
@@ -2528,8 +2515,8 @@ public class IChargeBillServiceImpl implements IChargeBillService {
List<PaymentReconciliation> list = paymentReconciliationService.list(
new LambdaQueryWrapper<PaymentReconciliation>().eq(PaymentReconciliation::getDeleteFlag,
DelFlag.NO.getCode()).eq(PaymentReconciliation::getStatusEnum, PaymentStatus.SUCCESS.getValue())
.between(PaymentReconciliation::getBillDate, Date.from(LocalDateTime.parse("2025-12-01 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant())
, Date.from(LocalDateTime.parse("2025-12-31 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant())));
.between(PaymentReconciliation::getBillDate, Date.from(LocalDateTime.parse("2025-12-01 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant()),
Date.from(LocalDateTime.parse("2025-12-31 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant())));
for (PaymentReconciliation paymentReconciliation : list) {
@@ -2598,7 +2585,6 @@ public class IChargeBillServiceImpl implements IChargeBillService {
// BigDecimal b = BigDecimal.ZERO;// 实付金额与药品金额差值即待分配金额
// BigDecimal c = BigDecimal.ZERO;// 诊疗检查等项目的合计金额
// BigDecimal d = paymentReconciliation.getTenderedAmount().subtract(paymentRecDetail.getAmount());// 实际交款金额
List<ChargeItem> newChargeItemList = new ArrayList<>();
for (ChargeItemDefInfo chargeItemDefInfo : chargeItemDefInfoByIdList) {

View File

@@ -200,8 +200,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
}
// 此次chargeItem的就诊诊断id集合
List<Long> diagIdList =
chargeItemList.stream().map(ChargeItem::getEncounterDiagnosisId).collect(Collectors.toList());
List<Long> diagIdList
= chargeItemList.stream().map(ChargeItem::getEncounterDiagnosisId).collect(Collectors.toList());
if (diagIdList.isEmpty()) {
throw new ServiceException("收费项的就诊诊断查询为空");
}
@@ -210,8 +210,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (diagList.isEmpty()) {
throw new ServiceException("就诊诊断查询为空错误信息EncounterDiagnosis");
}
List<String> medTypeList =
diagList.stream().map(EncounterDiagnosis::getMedTypeCode).distinct().collect(Collectors.toList());
List<String> medTypeList
= diagList.stream().map(EncounterDiagnosis::getMedTypeCode).distinct().collect(Collectors.toList());
if (medTypeList.size() > 1) {
return R.fail("收费项的就诊类型未统一");
}
@@ -227,8 +227,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
}
// 账户id对应的账单列表
Map<Long, List<ChargeItem>> chargeItemMapByAccountId =
chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getAccountId));
Map<Long, List<ChargeItem>> chargeItemMapByAccountId
= chargeItemList.stream().collect(Collectors.groupingBy(ChargeItem::getAccountId));
// 查询合同信息
List<Contract> contractList = contractService.list();
@@ -256,8 +256,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
prePaymentedItems.add(piModel);
} else {
try {
List<ChargeItem> childrenList =
JSON.parseArray(chargeItem.getChildrenJson(), ChargeItem.class);
List<ChargeItem> childrenList
= JSON.parseArray(chargeItem.getChildrenJson(), ChargeItem.class);
for (ChargeItem child : childrenList) {
PaymentedItemModel piModel = ConverterToPaymenItemModel(diagList, child);
prePaymentedItems.add(piModel);
@@ -367,8 +367,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
return R.fail("该账单不是待支付账单");
}
// 查找对应的收费详情,根据批次号查询
List<PaymentRecDetail> paymentRecDetails =
paymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
List<PaymentRecDetail> paymentRecDetails
= paymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
.eq(PaymentRecDetail::getReconciliationId, paymentReconciliation.getId()));
if (paymentRecDetails.isEmpty()) {
return R.fail("查询不到收费详情");
@@ -378,31 +378,6 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
return R.fail("收费项目变动,请重新预结算");
}
<<<<<<< HEAD
//2025.11.4 长大发生异常相同的chargeItem存在两个payment并重复收费要求在此处增加校验
// 经研究最优解为在数据库中查询本次就诊的所有的chargeItemIds与现有chargeItemId进行匹配
List<PaymentReconciliation> paymentReconciliationList = paymentReconciliationService.getListByEncounterId(paymentDto.getEncounterId(), PaymentKind.OUTPATIENT_CLINIC);
List<Long> chargeItemIds = paymentDto.getChargeItemIds();
if(!paymentReconciliationList.isEmpty()){
// 收集所有元素(包含重复)
List<String> 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<String> first = allElements.stream()
.filter(item -> item.equals(chargeItemId.toString()))
.findFirst();
if(first.isPresent()){
throw new ServiceException("收费项目id"+chargeItemId+"已经收费过了,请确认");
=======
// 2025.11.4 长大发生异常相同的chargeItem存在两个payment并重复收费要求在此处增加校验
// 经研究最优解为在数据库中查询本次就诊的所有的chargeItemIds与现有chargeItemId进行匹配
List<PaymentReconciliation> paymentReconciliationList = paymentReconciliationService
@@ -420,21 +395,15 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
.collect(Collectors.toList());
for (Long chargeItemId : chargeItemIds) {
Optional<String> first =
allElements.stream().filter(item -> item.equals(chargeItemId.toString())).findFirst();
Optional<String> first
= allElements.stream().filter(item -> item.equals(chargeItemId.toString())).findFirst();
if (first.isPresent()) {
throw new ServiceException("收费项目id" + chargeItemId + "已经收费过了,请确认");
>>>>>>> v1.3
}
}
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
// 校验金额:前台输入金额与仍需支付的现金部分进行比较
BigDecimal sum = BigDecimal.ZERO;
PaymentRecDetail paymentRecDetailDemo = new PaymentRecDetail();
@@ -481,8 +450,10 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
Integer mcsTracCnt = 0;
chargeItemList.forEach(item -> {
switch (item.getServiceTable()) {
case CommonConstants.TableName.MED_MEDICATION_REQUEST -> medReqIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_DEVICE_REQUEST -> devReqIdList.add(item.getServiceId());
case CommonConstants.TableName.MED_MEDICATION_REQUEST ->
medReqIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_DEVICE_REQUEST ->
devReqIdList.add(item.getServiceId());
}
});
// 根据药品请求计算本次结算应上传最小包装药品追溯码数量
@@ -490,11 +461,11 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
List<MedicationRequest> medicationRequestList = medicationRequestService
.list(new LambdaQueryWrapper<MedicationRequest>().in(MedicationRequest::getId, medReqIdList));
if (!medicationRequestList.isEmpty()) {
List<Long> medicationIdList =
medicationRequestList.stream().map(MedicationRequest::getMedicationId).distinct().toList();
List<Long> medicationIdList
= medicationRequestList.stream().map(MedicationRequest::getMedicationId).distinct().toList();
// 根据药品id获取药品定义
List<MedicationDefinition> medicationDefinitionList =
medicationDefinitionService.listByIds(medicationIdList);
List<MedicationDefinition> medicationDefinitionList
= medicationDefinitionService.listByIds(medicationIdList);
if (!medicationDefinitionList.isEmpty()) {
// 创建药品定义map
Map<Long, MedicationDefinition> medicationDefinitionMap = medicationDefinitionList.stream()
@@ -503,8 +474,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
BigDecimal totalQuantity = BigDecimal.ZERO;
for (MedicationRequest medicationRequest : medicationRequestList) {
MedicationDefinition medicationDefinition =
medicationDefinitionMap.get(medicationRequest.getMedicationId());
MedicationDefinition medicationDefinition
= medicationDefinitionMap.get(medicationRequest.getMedicationId());
if (medicationDefinition != null) {
BigDecimal requestQuantity = medicationRequest.getQuantity();
// 根据是否拆零计算
@@ -536,8 +507,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
// }
// 收费详情按照收费批次进行分组
Map<String, List<PaymentRecDetail>> payTransNoMap =
paymentRecDetails.stream().collect(Collectors.groupingBy(PaymentRecDetail::getPayTransNo));
Map<String, List<PaymentRecDetail>> payTransNoMap
= paymentRecDetails.stream().collect(Collectors.groupingBy(PaymentRecDetail::getPayTransNo));
com.openhis.financial.model.PaymentResult paymentResult;
List<com.openhis.financial.model.PaymentResult> paymentResultList = new ArrayList<>();
@@ -626,8 +597,10 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
switch (item.getServiceTable()) {
case CommonConstants.TableName.MED_MEDICATION_REQUEST ->
medicationRequestIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_DEVICE_REQUEST -> deviceRequestIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_SERVICE_REQUEST -> serviceRequestIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_DEVICE_REQUEST ->
deviceRequestIdList.add(item.getServiceId());
case CommonConstants.TableName.WOR_SERVICE_REQUEST ->
serviceRequestIdList.add(item.getServiceId());
}
});
@@ -687,8 +660,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
throw new ServiceException("请勿重复退费");
}
// 查找对应的收费详情
List<PaymentRecDetail> PaymentRecDetails =
paymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
List<PaymentRecDetail> PaymentRecDetails
= paymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
.eq(PaymentRecDetail::getReconciliationId, cancelPaymentDto.getId()));
// 查询账户信息
// Account account = iAccountService.getById(paymentReconciliation.getAccountId());
@@ -725,8 +698,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
clinic2208UnSetlInfoOutput = (Clinic2208UnSetlInfoOutput) r.getData();
stringBuilder.append(clinic2208UnSetlInfoOutput.getSetlId()).append(",");
// 对payment详情的结算id进行处理
List<PaymentRecDetail> paymentRecDetailList =
iPaymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
List<PaymentRecDetail> paymentRecDetailList
= iPaymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
.eq(PaymentRecDetail::getReconciliationId, unPaymentReconciliation.getId())
.eq(PaymentRecDetail::getPayTransText, clinicSettle.getSetlId()));
if (!paymentRecDetailList.isEmpty()) {
@@ -763,8 +736,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
throw new ServiceException("重新预结算失败请联系工程师");
}
PrePaymentResultModel prePaymentResultModel =
JSON.parseObject(JSON.toJSONString(preResult.getData()), PrePaymentResultModel.class);
PrePaymentResultModel prePaymentResultModel
= JSON.parseObject(JSON.toJSONString(preResult.getData()), PrePaymentResultModel.class);
// 新的应收
BigDecimal cashPay = BigDecimal.ZERO;
for (PaymentRecDetailDto paymentRecDetail : prePaymentResultModel.getDetails()) {
@@ -797,8 +770,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
}
// 获取新的付款参数表
PaymentReconciliation payment =
JSON.parseObject(JSON.toJSONString(settleResult.getData()), PaymentReconciliation.class);
PaymentReconciliation payment
= JSON.parseObject(JSON.toJSONString(settleResult.getData()), PaymentReconciliation.class);
// 获取实付金额
List<PaymentRecDetail> paymentRecDetail = paymentRecDetailService.list(
new LambdaQueryWrapper<PaymentRecDetail>().eq(PaymentRecDetail::getReconciliationId, payment.getId())
@@ -843,8 +816,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
throw new ServiceException("查询不到付款记录");
}
PaymentReconciliation unPaymentReconciliation =
normalUnCharge(paymentReconciliation, paymentRecDetails, cancelPaymentDto.getSetlId(), cancelPaymentDto.getReason());
PaymentReconciliation unPaymentReconciliation
= normalUnCharge(paymentReconciliation, paymentRecDetails, cancelPaymentDto.getSetlId(), cancelPaymentDto.getReason());
return R.ok(unPaymentReconciliation);
}
@@ -873,8 +846,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
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<PaymentVO> paymentDtoIPage =
paymentMapper.getPage(new Page<>(pageNo, pageSize), kingEnum, invoiceNo, queryWrapper);
IPage<PaymentVO> paymentDtoIPage
= paymentMapper.getPage(new Page<>(pageNo, pageSize), kingEnum, invoiceNo, queryWrapper);
for (PaymentVO record : paymentDtoIPage.getRecords()) {
record.setPaymentId(record.getId().toString());
@@ -889,7 +862,6 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
// // 计算年龄
// e.setAgeString(AgeCalculatorUtil.getAge(DateUtils.parseDate(e.getBirthDate())));
// });
return paymentDtoIPage;
}
@@ -986,11 +958,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
*/
private List<PaymentRecDetail> savePaymentDetail(List<PrePaymentResult> prePaymentResults,
PaymentReconciliation payment) {
<<<<<<< HEAD
// 11.11 paymentDetail的amount在11.7日按照同一的异常日结单要求改为保留两位小数后于11.11又被要求改为保留六位小数
=======
// 11.11 paymentDetail的amount在11.7日按照同一的异常日结单要求改为保留两位小数后于11.11又被要求改为保留六位小数
>>>>>>> v1.3
// 保存付款详情
List<PaymentRecDetail> paymentRecDetails = new ArrayList<>();
for (PrePaymentResult prePaymentResult : prePaymentResults) {
@@ -1000,12 +968,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (psnCashPay != null) {
PaymentRecDetail paymentRecDetail10 = new PaymentRecDetail();
paymentRecDetail10.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_CASH_PAY.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.SELF_CASH_PAY.getLevel()).setAmount(psnCashPay.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.SELF_CASH_PAY.getLevel())
.setAmount(psnCashPay.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail10);
@@ -1016,12 +980,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (psnPartAmt != null) {
PaymentRecDetail paymentRecDetail1 = new PaymentRecDetail();
paymentRecDetail1.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_PAY.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.SELF_PAY.getLevel()).setAmount(psnPartAmt.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.SELF_PAY.getLevel())
.setAmount(psnPartAmt.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail1);
@@ -1032,15 +992,9 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
PaymentRecDetail paymentRecDetail2 = new PaymentRecDetail();
paymentRecDetail2.setReconciliationId(payment.getId())
.setPayEnum(YbPayment.YB_TC_FUND_AMOUNT.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.YB_TC_FUND_AMOUNT.getLevel()).setAmount(hifpPay.setScale(6,RoundingMode.HALF_UP))
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
=======
.setPayLevelEnum(YbPayment.YB_TC_FUND_AMOUNT.getLevel())
.setAmount(hifpPay.setScale(6, RoundingMode.HALF_UP)).setPayTransNo(prePaymentResult.getChrgBchno())
.setResultEnum(PaymentResult.UNPAID.getValue()).setAccountId(prePaymentResult.getAccountId());
>>>>>>> v1.3
paymentRecDetails.add(paymentRecDetail2);
}
@@ -1050,12 +1004,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
PaymentRecDetail paymentRecDetail3 = new PaymentRecDetail();
paymentRecDetail3.setReconciliationId(payment.getId())
.setPayEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getLevel()).setAmount(cvlservPay.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.YB_BC_GWY_BZ_VALUE.getLevel())
.setAmount(cvlservPay.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail3);
@@ -1066,12 +1016,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
PaymentRecDetail paymentRecDetail4 = new PaymentRecDetail();
paymentRecDetail4.setReconciliationId(payment.getId())
.setPayEnum(YbPayment.YB_BC_FUND_AMOUNT.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.YB_BC_FUND_AMOUNT.getLevel()).setAmount(hifesPay.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.YB_BC_FUND_AMOUNT.getLevel())
.setAmount(hifesPay.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail4);
@@ -1082,12 +1028,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
PaymentRecDetail paymentRecDetail5 = new PaymentRecDetail();
paymentRecDetail5.setReconciliationId(payment.getId())
.setPayEnum(YbPayment.YB_BC_JM_DB_VALUE.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.YB_BC_JM_DB_VALUE.getLevel()).setAmount(hifmiPay.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.YB_BC_JM_DB_VALUE.getLevel())
.setAmount(hifmiPay.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail5);
@@ -1097,12 +1039,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (hifobPay != null) {
PaymentRecDetail paymentRecDetail6 = new PaymentRecDetail();
paymentRecDetail6.setReconciliationId(payment.getId()).setPayTransNo(prePaymentResult.getChrgBchno())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getLevel()).setAmount(hifobPay.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getLevel())
.setAmount(hifobPay.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayEnum(YbPayment.YB_BC_ZG_DE_BZ_VALUE.getValue())
.setResultEnum(PaymentResult.UNPAID.getValue()).setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail6);
@@ -1113,15 +1051,9 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
PaymentRecDetail paymentRecDetail7 = new PaymentRecDetail();
paymentRecDetail7.setReconciliationId(payment.getId())
.setPayEnum(YbPayment.YB_JZ_FUND_AMOUNT.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.YB_JZ_FUND_AMOUNT.getLevel()).setAmount(mafPay.setScale(6,RoundingMode.HALF_UP))
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
=======
.setPayLevelEnum(YbPayment.YB_JZ_FUND_AMOUNT.getLevel())
.setAmount(mafPay.setScale(6, RoundingMode.HALF_UP)).setPayTransNo(prePaymentResult.getChrgBchno())
.setResultEnum(PaymentResult.UNPAID.getValue()).setAccountId(prePaymentResult.getAccountId());
>>>>>>> v1.3
paymentRecDetails.add(paymentRecDetail7);
}
// 其他支出
@@ -1129,11 +1061,7 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (othPay != null) {
PaymentRecDetail paymentRecDetail8 = new PaymentRecDetail();
paymentRecDetail8.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OTHER_PAY.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.OTHER_PAY.getLevel()).setAmount(othPay.setScale(6, RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.OTHER_PAY.getLevel()).setAmount(othPay.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail8);
@@ -1143,12 +1071,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (fundPaySumamt != null) {
PaymentRecDetail paymentRecDetail9 = new PaymentRecDetail();
paymentRecDetail9.setReconciliationId(payment.getId()).setPayEnum(YbPayment.YB_FUND_PAY.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.YB_FUND_PAY.getLevel()).setAmount(fundPaySumamt.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.YB_FUND_PAY.getLevel())
.setAmount(fundPaySumamt.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail9);
@@ -1158,15 +1082,9 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (acctPay != null) {
PaymentRecDetail paymentRecDetail11 = new PaymentRecDetail();
paymentRecDetail11.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SELF_YB_ZH_PAY.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.SELF_YB_ZH_PAY.getLevel()).setAmount(acctPay.setScale(6,RoundingMode.HALF_UP))
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
=======
.setPayLevelEnum(YbPayment.SELF_YB_ZH_PAY.getLevel())
.setAmount(acctPay.setScale(6, RoundingMode.HALF_UP)).setPayTransNo(prePaymentResult.getChrgBchno())
.setResultEnum(PaymentResult.UNPAID.getValue()).setAccountId(prePaymentResult.getAccountId());
>>>>>>> v1.3
paymentRecDetails.add(paymentRecDetail11);
}
// 医院负担金额
@@ -1174,12 +1092,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (hospPartAmt != null) {
PaymentRecDetail paymentRecDetail12 = new PaymentRecDetail();
paymentRecDetail12.setReconciliationId(payment.getId()).setPayEnum(YbPayment.HOSP_PART_AMT.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.HOSP_PART_AMT.getLevel()).setAmount(hospPartAmt.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.HOSP_PART_AMT.getLevel())
.setAmount(hospPartAmt.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail12);
@@ -1190,12 +1104,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
PaymentRecDetail paymentRecDetail13 = new PaymentRecDetail();
paymentRecDetail13.setReconciliationId(payment.getId())
.setPayEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getLevel()).setAmount(acctMulaidPay.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.SELF_YB_ZH_GJ_VALUE.getLevel())
.setAmount(acctMulaidPay.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail13);
@@ -1206,12 +1116,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
PaymentRecDetail paymentRecDetail14 = new PaymentRecDetail();
paymentRecDetail14.setReconciliationId(payment.getId())
.setPayEnum(YbPayment.FULAMT_OWNPAY_AMT.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.FULAMT_OWNPAY_AMT.getLevel()).setAmount(fulamtOwnpayAmt.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.FULAMT_OWNPAY_AMT.getLevel())
.setAmount(fulamtOwnpayAmt.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail14);
@@ -1221,12 +1127,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (overlmtSelfpay != null) {
PaymentRecDetail paymentRecDetail15 = new PaymentRecDetail();
paymentRecDetail15.setReconciliationId(payment.getId()).setPayEnum(YbPayment.OVERLMT_SELFPAY.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.OVERLMT_SELFPAY.getLevel()).setAmount(overlmtSelfpay.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.OVERLMT_SELFPAY.getLevel())
.setAmount(overlmtSelfpay.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail15);
@@ -1241,12 +1143,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (preselfpayAmt != null) {
PaymentRecDetail paymentRecDetail17 = new PaymentRecDetail();
paymentRecDetail17.setReconciliationId(payment.getId()).setPayEnum(YbPayment.PRESELFPAY_AMT.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.PRESELFPAY_AMT.getLevel()).setAmount(preselfpayAmt.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.PRESELFPAY_AMT.getLevel())
.setAmount(preselfpayAmt.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail17);
@@ -1255,12 +1153,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (inscpScpAmt != null) {
PaymentRecDetail paymentRecDetail18 = new PaymentRecDetail();
paymentRecDetail18.setReconciliationId(payment.getId()).setPayEnum(YbPayment.INSCP_SCP_AMT.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.INSCP_SCP_AMT.getLevel()).setAmount(inscpScpAmt.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.INSCP_SCP_AMT.getLevel())
.setAmount(inscpScpAmt.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail18);
@@ -1269,12 +1163,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (actPayDedc != null) {
PaymentRecDetail paymentRecDetail19 = new PaymentRecDetail();
paymentRecDetail19.setReconciliationId(payment.getId()).setPayEnum(YbPayment.ACT_PAY_DEDC.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.ACT_PAY_DEDC.getLevel()).setAmount(actPayDedc.setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(YbPayment.ACT_PAY_DEDC.getLevel())
.setAmount(actPayDedc.setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail19);
@@ -1283,33 +1173,23 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (gfRatio != null && gfRatio.compareTo(BigDecimal.ZERO) > 0) {
PaymentRecDetail paymentRecDetail20 = new PaymentRecDetail();
paymentRecDetail20.setReconciliationId(payment.getId()).setPayEnum(YbPayment.SCHOOL_GF_PAY.getValue())
<<<<<<< HEAD
.setPayLevelEnum(YbPayment.SCHOOL_GF_PAY.getLevel()).setAmount(gfRatio.setScale(6,RoundingMode.HALF_UP))
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
=======
.setPayLevelEnum(YbPayment.SCHOOL_GF_PAY.getLevel())
.setAmount(gfRatio.setScale(6, RoundingMode.HALF_UP)).setPayTransNo(prePaymentResult.getChrgBchno())
.setResultEnum(PaymentResult.UNPAID.getValue()).setAccountId(prePaymentResult.getAccountId());
>>>>>>> v1.3
paymentRecDetails.add(paymentRecDetail20);
}
if (prePaymentResult.getSetldetail() != null && !prePaymentResult.getSetldetail().isEmpty()) {
PaymentRecDetail paymentRecDetail20;
for (Clinic2206FundPaymentResult clinic2206FundPaymentResult : prePaymentResult.getSetldetail()) {
YbPayment ybPayment =
YbPayment.getByValue(Integer.parseInt(clinic2206FundPaymentResult.getFundPayType()));
YbPayment ybPayment
= YbPayment.getByValue(Integer.parseInt(clinic2206FundPaymentResult.getFundPayType()));
if (ybPayment == null) {
continue;
}
paymentRecDetail20 = new PaymentRecDetail();
paymentRecDetail20.setReconciliationId(payment.getId()).setPayEnum(ybPayment.getValue())
<<<<<<< HEAD
.setPayLevelEnum(ybPayment.getLevel()).setAmount(clinic2206FundPaymentResult.getFundPayamt().setScale(6,RoundingMode.HALF_UP))
=======
.setPayLevelEnum(ybPayment.getLevel())
.setAmount(clinic2206FundPaymentResult.getFundPayamt().setScale(6, RoundingMode.HALF_UP))
>>>>>>> v1.3
.setPayTransNo(prePaymentResult.getChrgBchno()).setResultEnum(PaymentResult.UNPAID.getValue())
.setAccountId(prePaymentResult.getAccountId());
paymentRecDetails.add(paymentRecDetail20);
@@ -1528,8 +1408,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (paymentResult.getSetldetail() != null && !paymentResult.getSetldetail().isEmpty()) {
PaymentRecDetail paymentRecDetail20;
for (Clinic2206FundPaymentResult clinic2206FundPaymentResult : paymentResult.getSetldetail()) {
YbPayment ybPayment =
YbPayment.getByValue(Integer.parseInt(clinic2206FundPaymentResult.getFundPayType()));
YbPayment ybPayment
= YbPayment.getByValue(Integer.parseInt(clinic2206FundPaymentResult.getFundPayType()));
if (ybPayment == null) {
continue;
}
@@ -1759,7 +1639,6 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
// if (num > 0) {
// return R.fail(null, "当日已挂号此服务");
// }
Patient patient = iPatientService.getById(outpatientRegistrationAddParam.getEncounterFormData().getPatientId());
if (patient == null) {
throw new ServiceException("未查询到患者信息");
@@ -1789,8 +1668,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
Date startOfNextDayDate = Date.from(startOfNextDay.atZone(ZoneId.systemDefault()).toInstant());
// 查询科室信息
Organization organization =
iOrganizationService.getById(outpatientRegistrationAddParam.getEncounterFormData().getOrganizationId());
Organization organization
= iOrganizationService.getById(outpatientRegistrationAddParam.getEncounterFormData().getOrganizationId());
if (organization == null) {
throw new ServiceException("未查询到科室信息");
}
@@ -1809,8 +1688,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
}
// 校验当天是否已经医保挂号,若有则冲销
List<ClinicReg> list =
iRegService.list(new LambdaQueryWrapper<ClinicReg>().eq(ClinicReg::getMdtrtCertNo, patient.getIdCard())
List<ClinicReg> list
= iRegService.list(new LambdaQueryWrapper<ClinicReg>().eq(ClinicReg::getMdtrtCertNo, patient.getIdCard())
.between(ClinicReg::getBegntime, startOfDayDate, startOfNextDayDate));
for (ClinicReg clinicReg : list) {
if (organization.getYbNo().equals(clinicReg.getDeptCode())
@@ -1821,17 +1700,11 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
}
// 查询挂号信息的医保码等
HealthcareService healthcareService =
healthcareServiceService.getById(outpatientRegistrationAddParam.getChargeItemFormData().getServiceId());
HealthcareService healthcareService
= healthcareServiceService.getById(outpatientRegistrationAddParam.getChargeItemFormData().getServiceId());
if (healthcareService == null) {
throw new ServiceException("未查询到号源信息!");
}
<<<<<<< HEAD
if (healthcareService.getYbNo() == null) {
throw new ServiceException("该号源未对码或未查询到医保码信息!");
}
=======
>>>>>>> v1.3
Clinic2206OrderOutput clinic2206OrderResult;
String string = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH);
@@ -1840,12 +1713,9 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
.equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo())
|| CommonConstants.BusinessName.DEFAULT_STUDENT_CONTRACT_NO
.equals(outpatientRegistrationAddParam.getAccountFormData().getContractNo()))) {
<<<<<<< HEAD
=======
if (healthcareService.getYbNo() == null) {
throw new ServiceException("该号源未对码或未查询到医保码信息!");
}
>>>>>>> v1.3
OutpatientRegistrationModel model = new OutpatientRegistrationModel();
model.setMdtrtCertType(outpatientRegistrationAddParam.getYbMdtrtCertType());
model.setBusiCardInfo(outpatientRegistrationAddParam.getBusiCardInfo());
@@ -1881,8 +1751,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
public R<?> regPay(OutpatientRegistrationSettleParam outpatientRegistrationSettleParam, String chrgBchno,
List<PaymentDetailDto> paymentDetails) {
OutpatientRegistrationAddParam outpatientRegistrationAddParam =
outpatientRegistrationSettleParam.getOutpatientRegistrationAddParam();
OutpatientRegistrationAddParam outpatientRegistrationAddParam
= outpatientRegistrationSettleParam.getOutpatientRegistrationAddParam();
ChargeItem chargeItem = new ChargeItem();
BeanUtils.copyProperties(outpatientRegistrationAddParam.getChargeItemFormData(), chargeItem);
chargeItem.setContextEnum(ChargeItemContext.REGISTER.getValue());// 挂号
@@ -1898,8 +1768,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
// EncounterLocationFormData encounterLocationFormData =
// outpatientRegistrationAddParam.getEncounterLocationFormData();
// 就诊参数者管理-表单数据
EncounterParticipantFormData encounterParticipantFormData =
outpatientRegistrationAddParam.getEncounterParticipantFormData();
EncounterParticipantFormData encounterParticipantFormData
= outpatientRegistrationAddParam.getEncounterParticipantFormData();
// 就诊账户管理-表单数据
AccountFormData accountFormData = outpatientRegistrationAddParam.getAccountFormData();
// 费用项管理-表单数据
@@ -1916,8 +1786,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
return R.fail(null, "当日已挂号此服务");
}
Contract contract =
contractService.getContract(outpatientRegistrationAddParam.getAccountFormData().getContractNo());
Contract contract
= contractService.getContract(outpatientRegistrationAddParam.getAccountFormData().getContractNo());
if (contract == null) {
throw new ServiceException("请选择合适的费用性质");
}
@@ -2054,8 +1924,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
// 保存付款详情
this.savePaymentDetail(paymentResult, payment, paymentDetails, accountId);
// 更改chargeItem的状态
List<Long> chargeItemIds =
Arrays.stream(payment.getChargeItemIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
List<Long> chargeItemIds
= Arrays.stream(payment.getChargeItemIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
chargeItemService.updatePaymentStatus(chargeItemIds, ChargeItemStatus.BILLED.getValue());
// 保存付款快照信息 2025/08/08
@@ -2174,8 +2044,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
piModel.setBusNo(chargeItem.getBusNo());
EncounterDiagnosis encounterDiagnosis;
Optional<EncounterDiagnosis> optional =
diagList.stream().filter(e -> e.getId().equals(chargeItem.getEncounterDiagnosisId())).findFirst();
Optional<EncounterDiagnosis> optional
= diagList.stream().filter(e -> e.getId().equals(chargeItem.getEncounterDiagnosisId())).findFirst();
if (optional.isPresent()) {
encounterDiagnosis = optional.get();
@@ -2216,17 +2086,17 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (paymentRecDetails.isEmpty() || byId == null) {
throw new ServiceException("未查询到收费详情");
}
List<String> payTransNoList =
paymentRecDetails.stream().map(PaymentRecDetail::getPayTransNo).distinct().collect(Collectors.toList());
List<String> payTransNoList
= paymentRecDetails.stream().map(PaymentRecDetail::getPayTransNo).distinct().collect(Collectors.toList());
List<Long> accountIdList =
paymentRecDetails.stream().map(PaymentRecDetail::getAccountId).distinct().collect(Collectors.toList());
List<Long> accountIdList
= paymentRecDetails.stream().map(PaymentRecDetail::getAccountId).distinct().collect(Collectors.toList());
if (accountIdList.isEmpty()) {
throw new ServiceException("未查到账户信息");
}
List<Account> accountList =
iAccountService.list(new LambdaQueryWrapper<Account>().in(Account::getId, accountIdList));
List<Account> accountList
= iAccountService.list(new LambdaQueryWrapper<Account>().in(Account::getId, accountIdList));
if (accountList.isEmpty()) {
throw new ServiceException("未查到账户信息");
}
@@ -2245,11 +2115,11 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
*/
public InpatientPreSettleResultDto inpatientPreSettle(PrePaymentDto prePaymentDto) {
List<ChargeItemBaseInfoDto> chargeItemBaseInfoByIds =
iChargeItemService.getChargeItemBaseInfoByIds(prePaymentDto.getChargeItemIds());
List<ChargeItemBaseInfoDto> chargeItemBaseInfoByIds
= iChargeItemService.getChargeItemBaseInfoByIds(prePaymentDto.getChargeItemIds());
Map<String, List<ChargeItemBaseInfoDto>> chargeItemKVByContractNo =
chargeItemBaseInfoByIds.stream().collect(Collectors.groupingBy(ChargeItemBaseInfoDto::getContractNo));
Map<String, List<ChargeItemBaseInfoDto>> chargeItemKVByContractNo
= chargeItemBaseInfoByIds.stream().collect(Collectors.groupingBy(ChargeItemBaseInfoDto::getContractNo));
List<InpatientPreSettleDto> yb2303OutputSetInfos = new ArrayList<>();
Yb2303OutputSetInfo yb2303OutputSetInfo;
@@ -2265,8 +2135,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
} else {
inpatientPreSettleDto =
preSettleInpatientBySelf(prePaymentDto.getEncounterId(), stringListEntry.getValue());
inpatientPreSettleDto
= preSettleInpatientBySelf(prePaymentDto.getEncounterId(), stringListEntry.getValue());
yb2303OutputSetInfos.add(inpatientPreSettleDto);
}
@@ -2279,8 +2149,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
PaymentReconciliation paymentReconciliation = getPaymentReconciliation(chargeItemBaseInfoByIds);
iPaymentReconciliationService.save(paymentReconciliation);
List<PaymentRecDetail> paymentDetailList =
getPaymentRecDetailList(paymentReconciliation.getId(), yb2303OutputSetInfos);
List<PaymentRecDetail> paymentDetailList
= getPaymentRecDetailList(paymentReconciliation.getId(), yb2303OutputSetInfos);
iPaymentRecDetailService.saveBatch(paymentDetailList);
// 查询原预交金 payment
@@ -2354,8 +2224,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
}
// 查找对应的收费详情,根据批次号查询
List<PaymentRecDetail> paymentRecDetails =
paymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
List<PaymentRecDetail> paymentRecDetails
= paymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
.eq(PaymentRecDetail::getReconciliationId, paymentReconciliation.getId()));
if (paymentRecDetails.isEmpty()) {
@@ -2374,10 +2244,10 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
}
// <2> 查询基础数据
List<ChargeItemBaseInfoDto> chargeItemBaseInfoByIds =
iChargeItemService.getChargeItemBaseInfoByIds(paymentDto.getChargeItemIds());
Map<String, List<ChargeItemBaseInfoDto>> chargeItemKVByContractNo =
chargeItemBaseInfoByIds.stream().collect(Collectors.groupingBy(ChargeItemBaseInfoDto::getContractNo));
List<ChargeItemBaseInfoDto> chargeItemBaseInfoByIds
= iChargeItemService.getChargeItemBaseInfoByIds(paymentDto.getChargeItemIds());
Map<String, List<ChargeItemBaseInfoDto>> chargeItemKVByContractNo
= chargeItemBaseInfoByIds.stream().collect(Collectors.groupingBy(ChargeItemBaseInfoDto::getContractNo));
List<Account> accountList = iAccountService.getAccountListByEncounter(paymentDto.getEncounterId());
if (accountList.isEmpty()) {
@@ -2392,8 +2262,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
Integer mcsTracCnt = 0;
// <3>收费详情按照收费批次进行分组后结算
Map<Long, List<PaymentRecDetail>> payTransNoMap =
paymentRecDetails.stream().collect(Collectors.groupingBy(PaymentRecDetail::getAccountId));
Map<Long, List<PaymentRecDetail>> payTransNoMap
= paymentRecDetails.stream().collect(Collectors.groupingBy(PaymentRecDetail::getAccountId));
for (Map.Entry<Long, List<PaymentRecDetail>> stringListEntry : payTransNoMap.entrySet()) {
// paymentResult = new PaymentResult();
@@ -2525,8 +2395,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
throw new ServiceException("请选择正确退费渠道,该付款不是住院收费");
}
// 查找对应的收费详情,根据批次号查询
List<PaymentRecDetail> paymentRecDetails =
paymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
List<PaymentRecDetail> paymentRecDetails
= paymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
.eq(PaymentRecDetail::getReconciliationId, paymentReconciliation.getId()));
if (paymentRecDetails.isEmpty()) {
return R.fail("未查询到业务付款记录收费详情");
@@ -2559,8 +2429,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
// 获取医保反结算后的2305输出参数
stringBuilder.append(yb2305OutputSetlInfo.getSetlId()).append(",");
// 对payment详情的结算id进行处理
List<PaymentRecDetail> paymentRecDetailList =
iPaymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
List<PaymentRecDetail> paymentRecDetailList
= iPaymentRecDetailService.list(new LambdaQueryWrapper<PaymentRecDetail>()
.eq(PaymentRecDetail::getReconciliationId, unPaymentReconciliation.getId())
.eq(PaymentRecDetail::getPayTransText, inpatientSettle.getSetlId()));
if (!paymentRecDetailList.isEmpty()) {
@@ -2768,8 +2638,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
if (inpatientPreSettleDto.getSetldetail() != null && !inpatientPreSettleDto.getSetldetail().isEmpty()) {
PaymentRecDetail paymentRecDetail20;
for (Clinic2206FundPaymentResult clinic2206FundPaymentResult : inpatientPreSettleDto.getSetldetail()) {
YbPayment ybPayment =
YbPayment.getByValue(Integer.parseInt(clinic2206FundPaymentResult.getFundPayType()));
YbPayment ybPayment
= YbPayment.getByValue(Integer.parseInt(clinic2206FundPaymentResult.getFundPayType()));
if (ybPayment == null) {
continue;
}
@@ -2925,8 +2795,6 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
return r.getMsg();
}
<<<<<<< HEAD
=======
@Override
public List<PaymentDetailDto> cancelPreReg(Long encounterId) {
@@ -2944,8 +2812,8 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
.map(Long::valueOf) // 转换为Long
.collect(Collectors.toList());
List<ChargeItemBaseInfoDto> chargeItemBaseInfoByIds =
chargeItemService.getChargeItemBaseInfoByIds(chargeItemIdList);
List<ChargeItemBaseInfoDto> chargeItemBaseInfoByIds
= chargeItemService.getChargeItemBaseInfoByIds(chargeItemIdList);
// 查找第一个匹配的对象
Optional<ChargeItemBaseInfoDto> targetObject = chargeItemBaseInfoByIds.stream()
@@ -2975,5 +2843,4 @@ public class PaymentRecServiceImpl implements IPaymentRecService {
return detail;
}
>>>>>>> v1.3
}

View File

@@ -2,22 +2,14 @@ package com.openhis.web.paymentmanage.appservice.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
<<<<<<< HEAD
=======
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.Constants;
>>>>>>> v1.3
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;
<<<<<<< HEAD
import com.core.web.util.TenantOptionUtil;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.service.IPractitionerService;
=======
import com.core.common.utils.StringUtils;
import com.core.web.util.TenantOptionUtil;
import com.openhis.administration.domain.Practitioner;
@@ -25,19 +17,15 @@ import com.openhis.administration.service.IPractitionerService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.enums.PaymentStatus;
import com.openhis.common.utils.HisQueryUtils;
>>>>>>> v1.3
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;
<<<<<<< HEAD
=======
import com.openhis.web.paymentmanage.dto.PaymentVO;
import com.openhis.web.paymentmanage.dto.ThreePartCallBackVo;
import com.openhis.web.paymentmanage.mapper.PaymentMapper;
>>>>>>> v1.3
import com.openhis.yb.dto.BaseInfo;
import com.openhis.yb.dto.BaseParam;
import com.openhis.yb.dto.PaymentDetailDto;
@@ -52,15 +40,6 @@ 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;
<<<<<<< HEAD
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;
=======
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -75,43 +54,27 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.function.Consumer;
>>>>>>> v1.3
@Component
@Slf4j
public class ThreePartPayServiceImpl implements ThreePartPayService {
<<<<<<< HEAD
=======
Logger logger = LoggerFactory.getLogger(ThreePartPayServiceImpl.class);
>>>>>>> v1.3
@Autowired
private IPractitionerService practitionerService;
@Autowired
private IPaymentRecDetailService paymentRecDetailService;
@Autowired
<<<<<<< HEAD
=======
private PaymentMapper paymentMapper;
@Autowired
>>>>>>> v1.3
private IPaymentReconciliationService paymentReconciliationService;
@Autowired
private ThreePartPayCallBackService threePartPayCallBackService;
@Autowired
private ThreePartSimpleFieldMappingService threePartSimpleFieldMappingService;
@Override
<<<<<<< HEAD
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);
=======
public R<?> sign() {
// A.获取配置信息
String threePartUrl = TenantOptionUtil.getOptionContent(TenantOptionDict.THREE_PART_SIGN_URL);
@@ -180,7 +143,6 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
JSONObject jsonObject = JSON.parseObject(activeParam);
//B.基础信息查询
>>>>>>> v1.3
//订单号及订单信息
Long paymentId = threePartPayDto.getId();
PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentId);
@@ -188,21 +150,12 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
//金额处理
BigDecimal amount = BigDecimal.ZERO;
for (PaymentDetailDto paymentDetail : threePartPayDto.getPaymentDetails()) {
<<<<<<< HEAD
if(threePartPayDto.getIndex().equals(paymentDetail.getPayEnum())){
amount = paymentDetail.getAmount();
}
}
amount = amount.multiply(new BigDecimal("100"));
String amountResult = String.format("%010d", Integer.parseInt(amount.toString()));
=======
//if(threePartPayDto.getIndex().equals(paymentDetail.getPayEnum())){
amount = amount.add(paymentDetail.getAmount());
//}
}
amount = amount.multiply(new BigDecimal("100"));
String amountResult = String.format("%010d", amount.intValue());
>>>>>>> v1.3
//款员信息查询
Practitioner practitioner = practitionerService.getPractitionerByUserId(SecurityUtils.getLoginUser().getUserId());
@@ -210,25 +163,7 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
//获取支付码
String txtCode = threePartPayDto.getTxtCode();
<<<<<<< HEAD
//获取参数
Map<String, String> 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();
}
=======
//C.根据不同的请求方式处理参数
//获取动态参数
Map<String, String> paramMap = this.getParamMap(jsonObject, practitioner, null, paymentReconciliation, amountResult, txtCode);
//执行请求
@@ -324,7 +259,6 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
//款员信息查询
Practitioner practitioner = practitionerService.getPractitionerByUserId(SecurityUtils.getLoginUser().getUserId());
//C.根据不同的请求方式处理参数
//获取动态参数
Map<String, String> paramMap = this.getParamMap(jsonObject, practitioner, threePartPayCallBack, paymentReconciliation, null, null);
@@ -368,7 +302,6 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
//款员信息查询
Practitioner practitioner = practitionerService.getPractitionerByUserId(SecurityUtils.getLoginUser().getUserId());
//C.根据不同的请求方式处理参数
//获取动态参数
Map<String, String> paramMap = this.getParamMap(jsonObject, practitioner, threePartPayCallBack, paymentReconciliation, null, null);
@@ -408,13 +341,11 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
//B.基础信息查询
//PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentId);
ThreePartPayCallBack threePartPayCallBack = threePartPayCallBackService.getById(id);
//款员信息查询
Practitioner practitioner = practitionerService.getPractitionerByUserId(SecurityUtils.getLoginUser().getUserId());
//C.根据不同的请求方式处理参数
//获取动态参数
Map<String, String> paramMap = this.getParamMap(jsonObject, practitioner, threePartPayCallBack, null, null, null);
@@ -446,8 +377,8 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.PaymentNo)),
request);
IPage<ThreePartCallBackVo> ThreePartCallBackVoIPage =
paymentMapper.getThreePartCallBackVoPage(new Page<>(pageNo, pageSize), queryWrapper);
IPage<ThreePartCallBackVo> ThreePartCallBackVoIPage
= paymentMapper.getThreePartCallBackVoPage(new Page<>(pageNo, pageSize), queryWrapper);
ThreePartCallBackVoIPage.getRecords().forEach(e -> {
e.setIdStr(e.getId().toString());
@@ -456,10 +387,10 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
return R.ok(ThreePartCallBackVoIPage);
}
>>>>>>> v1.3
/**
* 拼接参数
*
* @param jsonObject 配置信息
* @param practitioner 款员信息
* @param threePartPayCallBack 原订单
@@ -516,8 +447,6 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
if (payWayOrderIdKey != null) {
paramMap.put(merTradeNoKey, threePartPayCallBack.getMerTradeNo());//商户系统订单号
}
<<<<<<< HEAD
=======
String tradeNoKey = jsonObject.getString("tradeNo");
if (tradeNoKey != null) {
paramMap.put(tradeNoKey, threePartPayCallBack.getTradeNo());//商户系统订单号
@@ -526,7 +455,6 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
if (txnAmtKey != null) {
paramMap.put(txnAmtKey, threePartPayCallBack.getTxnAmt());//金额
}
>>>>>>> v1.3
}
if (paymentReconciliation != null) {
@@ -547,12 +475,17 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
}
return paramMap;
}
/**
* 安全替换,避免空指针
*/
private String renderTemplateSafe(String template, Map<String, String> params) {
if (template == null) return "";
if (params == null) params = new HashMap<>();
if (template == null) {
return "";
}
if (params == null) {
params = new HashMap<>();
}
String result = template;
for (Map.Entry<String, String> entry : params.entrySet()) {
@@ -566,9 +499,8 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
}
/**
<<<<<<< HEAD
=======
* 执行请求
*
* @param method 请求类型
* @param threePartUrl 路径参数
* @param staticParam 静态参数
@@ -614,7 +546,6 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
}
/**
>>>>>>> v1.3
* 发送http请求2025/05/02经测试若以自带的工具类发送请求失败故使用原peis系统中成功调用的写法重新封装
*
* @param url 路径
@@ -632,10 +563,7 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
HttpGet httpGet = new HttpGet(url);
// 执行http请求
response = httpClient.execute(httpGet);
<<<<<<< HEAD
=======
System.out.println("回复信息:" + JSON.toJSONString(response));
>>>>>>> v1.3
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
@@ -649,8 +577,6 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
}
return resultString;
}
<<<<<<< HEAD
=======
/**
* 发送http请求2025/05/02经测试若以自带的工具类发送请求失败故使用原peis系统中成功调用的写法重新封装
@@ -691,9 +617,6 @@ public class ThreePartPayServiceImpl implements ThreePartPayService {
@Override
public R<?> payForNenu(ThreePartPayDto threePartPayDto) {
return null;
}
>>>>>>> v1.3
}

View File

@@ -1,6 +1,5 @@
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;
@@ -16,17 +15,11 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@Service
<<<<<<< HEAD
@ConfigurationProperties(prefix = "threepart.mapping")
=======
>>>>>>> v1.3
@Data
@Slf4j
public class ThreePartSimpleFieldMappingService {
@Autowired
private ReverseMappingProperties properties;
@@ -38,11 +31,7 @@ public class ThreePartSimpleFieldMappingService {
public String reverseMap(String businessType, String sourceJson) {
try {
// 1. 获取映射配置
<<<<<<< HEAD
Map<String, String> mappingConfig = properties.getMappingConfig(businessType);
=======
Map<String, String> mappingConfig = properties.getReverseMappings().get(businessType);
>>>>>>> v1.3
if (mappingConfig.isEmpty()) {
log.warn("未找到业务类型[{}]的映射配置", businessType);
return sourceJson; // 返回原JSON
@@ -50,14 +39,12 @@ public class ThreePartSimpleFieldMappingService {
// 2. 解析源JSON
Map<String, Object> sourceMap;
<<<<<<< HEAD
=======
// 修复BOM问题
if (sourceJson.startsWith("\uFEFF")) {
sourceJson = sourceJson.substring(1);
}
>>>>>>> v1.3
sourceMap = objectMapper.readValue(sourceJson, new TypeReference<Map<String,Object>>(){});
sourceMap = objectMapper.readValue(sourceJson, new TypeReference<Map<String, Object>>() {
});
// 3. 执行反向映射
Map<String, Object> resultMap = reverseMap(mappingConfig, sourceMap);

View File

@@ -120,8 +120,8 @@ public class PaymentReconciliationController {
if ("0".equals(TenantOptionUtil.getOptionContent(TenantOptionDict.INVOICE_SWITCH))) {
return result;
} else {
R<?> eleResult =
eleInvoiceService.invoiceWriteoff(paymentRecon.getRelationId(), cancelPaymentDto.getReason());
R<?> eleResult
= eleInvoiceService.invoiceWriteoff(paymentRecon.getRelationId(), cancelPaymentDto.getReason());
if (eleResult.getCode() != 200) {
// 因取消付款成功前端需要关闭弹窗此处信息仅用于提示所以返回ok
return R.ok(null, " 取消付款成功,电子发票开具失败 :" + eleResult.getMsg());
@@ -257,8 +257,8 @@ 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());
@@ -277,8 +277,6 @@ public class PaymentReconciliationController {
public R<?> nenuBpcPay(@RequestBody NenuBpcPayDto nenuBpcPayDto) {
return R.ok(paymentReconciliationService.nenuBpcPay(nenuBpcPayDto));
}
<<<<<<< HEAD
=======
/**
* 退号查询
@@ -290,5 +288,4 @@ public class PaymentReconciliationController {
public R<?> cancelPreReg(@RequestParam(name = "encounterId") Long encounterId) {
return R.ok(paymentReconciliationService.cancelPreReg(encounterId));
}
>>>>>>> v1.3
}

View File

@@ -20,17 +20,9 @@ import com.openhis.yb.dto.ThreePartPayDto;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
<<<<<<< HEAD
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
=======
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
>>>>>>> v1.3
import java.math.BigDecimal;
import java.security.Security;
import java.util.HashMap;
@@ -53,10 +45,9 @@ public class ThreePartPayController {
/**
* 扫码付款
*
* @return
*/
<<<<<<< HEAD
=======
@PostMapping("/sign")
public R<?> sign() {
return threePartPayService.sign();
@@ -64,6 +55,7 @@ public class ThreePartPayController {
/**
* 扫码付款
*
* @return
*/
@PostMapping("/sign-out")
@@ -73,18 +65,17 @@ public class ThreePartPayController {
/**
* 扫码付款
*
* @return
*/
>>>>>>> v1.3
@PostMapping("/pay-for")
public R<?> payFor(@RequestBody ThreePartPayDto threePartPayDto) {
return threePartPayService.payFor(threePartPayDto);
}
<<<<<<< HEAD
=======
/**
* 扫码付款(师大)
*
* @return
*/
@PostMapping("/pay-for-nenu")
@@ -92,10 +83,9 @@ public class ThreePartPayController {
return threePartPayService.payForNenu(threePartPayDto);
}
/**
* 扫码付款结果查询(预结算窗口)
*
* @return
*/
@GetMapping("/pay-query")
@@ -104,9 +94,9 @@ public class ThreePartPayController {
//return threePartPayService.returnQuery(threePartPayDto.getId());
}
/**
* 当天退费
*
* @return
*/
@GetMapping("/return-bill")
@@ -116,6 +106,7 @@ public class ThreePartPayController {
/**
* 隔天退费
*
* @return
*/
@GetMapping("/return-goods")
@@ -125,6 +116,7 @@ public class ThreePartPayController {
/**
* 退费结果查询
*
* @return
*/
@GetMapping("/return-query")
@@ -134,6 +126,7 @@ public class ThreePartPayController {
/**
* 网银支付参数
*
* @return
*/
@GetMapping("/page")
@@ -142,7 +135,5 @@ public class ThreePartPayController {
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return threePartPayService.getPage(searchKey, pageNo, pageSize, request);
}
>>>>>>> v1.3
}

View File

@@ -8,11 +8,7 @@ import java.util.HashMap;
import java.util.Map;
@Configuration
<<<<<<< HEAD
@ConfigurationProperties(prefix = "threepaymapping")
=======
@ConfigurationProperties(prefix = "mapping.reverse-mappings")
>>>>>>> v1.3
@Data
public class ReverseMappingProperties {

View File

@@ -2,16 +2,7 @@ package com.openhis.web.pharmacymanage.appservice;
import java.util.List;
<<<<<<< HEAD
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.core.common.core.domain.R;
import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam;
import com.openhis.web.pharmacymanage.dto.*;
=======
import com.core.common.core.domain.R;
>>>>>>> v1.3
/**
* 住院汇总发药 应用实现接口
@@ -24,98 +15,14 @@ public interface ISummaryDispenseMedicineAppService {
/**
* 汇总发药
*
<<<<<<< HEAD
* @return 初始化信息
*/
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 请求数据
*/
R<?> getOrderInfo(FromSearchParam searchParam, String searchKey, Integer pageNo, Integer pageSize,
HttpServletRequest request);
/**
* 处方单核对发药
*
* @param dispenseMedicineList 发药信息
* @return 处理结果
*/
R<?> SummaryDispenseMedicine(List<DispenseItemDto> dispenseMedicineList);
=======
* @param summaryNoList 汇总单列表
* @return 处理结果
*/
R<?> SummaryDispenseMedicine(List<String> summaryNoList);
>>>>>>> v1.3
/**
* 作废
*
<<<<<<< HEAD
* @param dispenseMedicineList 作废信息
* @return 处理结果
*/
R<?> dispenseCancel(List<DispenseItemDto> dispenseMedicineList);
/**
* 退药处理
*
* @param dispenseMedicineList 退药清单
* @return 处理结果
*/
R<?> medicineReturn(List<DispenseItemDto> dispenseMedicineList);
=======
* @param summaryNoList 汇总单列表
* @return 处理结果
*/
@@ -144,10 +51,4 @@ public interface ISummaryDispenseMedicineAppService {
// */
// void takeExcelField(FromSearchParam searchParam, String searchKey, Integer pageNo, Integer pageSize,
// HttpServletRequest request, HttpServletResponse response);
>>>>>>> v1.3
}

View File

@@ -95,22 +95,22 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
DispenseInitDto initDto = new DispenseInitDto();
// 获取科室下拉选列表
List<Organization> organizationList =
organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue());
List<Organization> organizationList
= organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue());
List<DispenseInitDto.DepartmentOption> organizationOptions = organizationList.stream()
.map(organization -> new DispenseInitDto.DepartmentOption(organization.getId(), organization.getName()))
.collect(Collectors.toList());
// 获取配药人下拉选列表
List<Practitioner> preparerDoctorList =
medicalDeviceDispenseMapper.getPreparerDoctorList(PractitionerRoles.PHARMACIST.getCode());
List<Practitioner> preparerDoctorList
= medicalDeviceDispenseMapper.getPreparerDoctorList(PractitionerRoles.PHARMACIST.getCode());
List<DispenseInitDto.PreparerDoctorOption> preparerDoctorOptions = preparerDoctorList.stream()
.map(practitioner -> new DispenseInitDto.PreparerDoctorOption(practitioner.getId(), practitioner.getName()))
.collect(Collectors.toList());
// 未发药原因下拉选列表
List<DispenseInitDto.NotPerformedReasonOption> notPerformedReasonOptions =
Stream.of(NotPerformedReasonEnum.values())
List<DispenseInitDto.NotPerformedReasonOption> notPerformedReasonOptions
= Stream.of(NotPerformedReasonEnum.values())
.map(notPerformedReason -> new DispenseInitDto.NotPerformedReasonOption(notPerformedReason.getValue(),
notPerformedReason.getInfo()))
.collect(Collectors.toList());
@@ -144,14 +144,14 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
Integer statusEnum = encounterInfoSearchParam.getStatusEnum();
encounterInfoSearchParam.setStatusEnum(null);
// 构建查询条件
QueryWrapper<EncounterInfoSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey,
QueryWrapper<EncounterInfoSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IdCard,
CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)),
request);
// 查询就诊病人列表
Page<EncounterInfoDto> encounterInfoPage =
medicalDeviceDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper,
Page<EncounterInfoDto> encounterInfoPage
= medicalDeviceDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper,
statusEnum, DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(),
DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue());
encounterInfoPage.getRecords().forEach(encounterInfo -> {
@@ -184,11 +184,11 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
Integer dispenseStatus = itemDispenseOrderDto.getStatusEnum();
itemDispenseOrderDto.setStatusEnum(null);
// 构建查询条件
QueryWrapper<ItemDispenseOrderDto> queryWrapper =
HisQueryUtils.buildQueryWrapper(itemDispenseOrderDto, null, null, null);
QueryWrapper<ItemDispenseOrderDto> queryWrapper
= HisQueryUtils.buildQueryWrapper(itemDispenseOrderDto, null, null, null);
// 处方单信息查询
Page<ItemDispenseOrderDto> deviceDispenseOrderPage =
medicalDeviceDispenseMapper.selectDeviceDispenseOrderPage(new Page<>(pageNo, pageSize), queryWrapper,
Page<ItemDispenseOrderDto> deviceDispenseOrderPage
= medicalDeviceDispenseMapper.selectDeviceDispenseOrderPage(new Page<>(pageNo, pageSize), queryWrapper,
DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(),
DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue(), dispenseStatus);
deviceDispenseOrderPage.getRecords().forEach(deviceDispenseOrder -> {
@@ -215,54 +215,12 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
return R.fail("请选择调配药师");
}
// 获取发药单id列表
List<Long> devDispenseIdList =
dispenseDeviceList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
<<<<<<< HEAD
// 获取库存信息
List<UnDispenseInventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个药品分组
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> 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);
=======
List<Long> devDispenseIdList
= dispenseDeviceList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
// 获取耗材待发放库存信息
List<UnDispenseInventoryDto> unDispenseInventoryList =
returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
List<UnDispenseInventoryDto> unDispenseInventoryList
= returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
if (unDispenseInventoryList == null || unDispenseInventoryList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
@@ -271,8 +229,8 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
// 库存待更新列表
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 根据批号,发放项目,发放药房进行分组处理
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap =
unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap
= unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
+ CommonConstants.Common.DASH + x.getLotNumber() + CommonConstants.Common.DASH + x.getLocationId()));
if (!unDispenseInventoryMap.isEmpty()) {
for (Map.Entry<String, List<UnDispenseInventoryDto>> entry : unDispenseInventoryMap.entrySet()) {
@@ -294,15 +252,14 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
if (!unDispenseInventoryDto.getDispenseUnit()
.equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 转换为小单位进行累加
quantity =
unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
quantity
= unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
}
minQuantity = minQuantity.add(quantity);
if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())
&& unDispenseInventoryDto.getInventoryQuantity().compareTo(BigDecimal.ZERO) > 0) {
inventoryQuantity = unDispenseInventoryDto.getInventoryQuantity();
inventoryId = unDispenseInventoryDto.getInventoryId();
>>>>>>> v1.3
}
}
if (minQuantity.compareTo(inventoryQuantity) > 0) {
@@ -432,8 +389,8 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
@Override
public R<?> dispenseMedicalConsumables(List<Long> chargeItemIds) {
// 查看所属医院
String fixmedinsCode =
SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
String fixmedinsCode
= SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
if (!HospitalCodeEnum.CCU.getCode().equals(fixmedinsCode)) {
return R.ok();
}
@@ -443,58 +400,16 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
}
// 获取发申请id列表
List<Long> devRequestIdList =
chargeItemList.stream().map(ChargeItem::getServiceId).collect(Collectors.toList());
List<Long> devRequestIdList
= chargeItemList.stream().map(ChargeItem::getServiceId).collect(Collectors.toList());
// 获取耗材发放id列表
List<Long> devDispenseIdList = deviceDispenseService
.list(new LambdaQueryWrapper<DeviceDispense>().in(DeviceDispense::getDeviceReqId, devRequestIdList))
.stream().map(DeviceDispense::getId).collect(Collectors.toList());
<<<<<<< HEAD
// 获取库存信息
List<UnDispenseInventoryDto> inventoryList = returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个耗材分组
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> 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);
=======
// 获取耗材待发放库存信息
List<UnDispenseInventoryDto> unDispenseInventoryList =
returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
List<UnDispenseInventoryDto> unDispenseInventoryList
= returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, null,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
if (unDispenseInventoryList == null || unDispenseInventoryList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
@@ -503,8 +418,8 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
// 库存待更新列表
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 根据批号,发放项目,发放药房进行分组处理
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap =
unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap
= unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
+ CommonConstants.Common.DASH + x.getLotNumber() + CommonConstants.Common.DASH + x.getLocationId()));
if (!unDispenseInventoryMap.isEmpty()) {
for (Map.Entry<String, List<UnDispenseInventoryDto>> entry : unDispenseInventoryMap.entrySet()) {
@@ -526,15 +441,14 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
if (!unDispenseInventoryDto.getDispenseUnit()
.equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 转换为小单位进行累加
quantity =
unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
quantity
= unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
}
minQuantity = minQuantity.add(quantity);
if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())
&& unDispenseInventoryDto.getInventoryQuantity().compareTo(BigDecimal.ZERO) > 0) {
inventoryQuantity = unDispenseInventoryDto.getInventoryQuantity();
inventoryId = unDispenseInventoryDto.getInventoryId();
>>>>>>> v1.3
}
}
if (minQuantity.compareTo(inventoryQuantity) > 0) {
@@ -627,8 +541,8 @@ public class MedicalDeviceDispenseAppServiceImpl implements IMedicalDeviceDispen
@Override
public R<?> deviceCancel(List<DispenseItemDto> dispenseDeviceList) {
// 获取发材料单id列表
List<Long> devDispenseIdList =
dispenseDeviceList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
List<Long> devDispenseIdList
= dispenseDeviceList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
// 材料发放信息查询
List<DeviceDispense> dispenseList = deviceDispenseService
.list(new LambdaQueryWrapper<DeviceDispense>().in(DeviceDispense::getId, devDispenseIdList));

View File

@@ -1,10 +1,5 @@
package com.openhis.web.pharmacymanage.appservice.impl;
<<<<<<< HEAD
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
=======
import static com.openhis.common.constant.CommonConstants.ExcelOut.*;
import static com.openhis.common.constant.CommonConstants.SheetName.SHEET_NAME_DRUG_DETAIL;
@@ -13,18 +8,12 @@ import java.math.RoundingMode;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
>>>>>>> v1.3
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
<<<<<<< HEAD
import com.core.common.utils.poi.ExcelUtil;
import com.openhis.web.inventorymanage.dto.ReceiptPageDto;
=======
>>>>>>> v1.3
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -32,23 +21,15 @@ 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;
<<<<<<< HEAD
=======
import com.core.common.exception.NonCaptureException;
import com.core.common.utils.StringUtils;
import com.core.common.utils.poi.ExcelUtil;
>>>>>>> v1.3
import com.core.system.service.ISysDictTypeService;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.service.IPractitionerService;
import com.openhis.common.constant.CommonConstants;
<<<<<<< HEAD
import com.openhis.common.enums.DispenseStatus;
import com.openhis.common.enums.EncounterClass;
=======
import com.openhis.common.enums.ConditionCode;
import com.openhis.common.enums.DispenseStatus;
>>>>>>> v1.3
import com.openhis.common.enums.PublicationStatus;
import com.openhis.common.enums.RequestStatus;
import com.openhis.common.utils.HisQueryUtils;
@@ -80,11 +61,6 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
/**
* 获取页面初始化信息
*/
<<<<<<< HEAD
=======
>>>>>>> v1.3
@Override
public R<?> init() {
@@ -134,19 +110,11 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
QueryWrapper<MedDetailsSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(medDetailsSearchParam,
searchKey, new HashSet<>(Arrays.asList("patient_name", "medication_name", "bus_no", "py_str")), request);
<<<<<<< HEAD
Page<MedDetailedAccountPageDto> medDetailsPage =
medicationDetailsMapper.selectAmbPractitionerDetailPage(new Page<>(pageNo, pageSize), queryWrapper,
EncounterClass.AMB.getValue(), DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(),
DispenseStatus.REFUNDED.getValue(), 1, flg, CommonConstants.TableName.MED_MEDICATION_DEFINITION,
CommonConstants.TableName.ADM_DEVICE_DEFINITION);
=======
Page<MedDetailedAccountPageDto> medDetailsPage = medicationDetailsMapper.selectAmbPractitionerDetailPage(
new Page<>(pageNo, pageSize), queryWrapper, DispenseStatus.COMPLETED.getValue(),
RequestStatus.COMPLETED.getValue(), DispenseStatus.REFUNDED.getValue(), statisticalType, flg,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION,
ConditionCode.LOT_NUMBER_COST.getCode());
>>>>>>> v1.3
return R.ok(medDetailsPage);
@@ -171,22 +139,6 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
// 先获取Page对象再获取其中的记录列表
Page<MedDetailedAccountPageDto> pageData = (Page<MedDetailedAccountPageDto>) result.getData();
List<MedDetailedAccountPageDto> dataList = pageData.getRecords();
<<<<<<< HEAD
// 获取字典数据
for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) {
String unitCode = medDetailedAccountPageDto.getUnitCode();
// 添加空值检查
if (unitCode != null && sysDictTypeService != null) {
// 缓存字典数据,避免重复查询
List<SysDictData> 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;
=======
// 判断项目类别
try {
// 获取字典数据
@@ -195,8 +147,8 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
// 添加空值检查
if (unitCode != null && sysDictTypeService != null) {
// 缓存字典数据,避免重复查询
List<SysDictData> unitCodelist =
sysDictTypeService.selectDictDataByType(CommonConstants.FieldName.UnitCode);
List<SysDictData> unitCodelist
= sysDictTypeService.selectDictDataByType(CommonConstants.FieldName.UnitCode);
if (unitCodelist != null) {
for (SysDictData dictData : unitCodelist) {
if (dictData != null && dictData.getDictValue() != null
@@ -205,110 +157,10 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
medDetailedAccountPageDto.setUnitCode_dictText(dictData.getDictLabel());
break;
}
>>>>>>> v1.3
}
}
}
}
<<<<<<< HEAD
}
// 将发药数量与单位拼接
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<String, String> 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<MedDetailedAccountPageDto> util = new ExcelUtil<MedDetailedAccountPageDto>(MedDetailedAccountPageDto.class);
util.exportExcel(response,dataList,"发药明细");
} catch (Exception e) {
e.printStackTrace();
System.out.printf("导出Excel失败" + e.getMessage());
}
=======
// 将发药数量与单位拼接
for (MedDetailedAccountPageDto medDetailedAccountPageDto : dataList) {
@@ -408,7 +260,6 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
throw new NonCaptureException(StringUtils.format("导出excel失败"), e);
}
>>>>>>> v1.3
}
}
@@ -440,19 +291,11 @@ public class MedicationDetailsAppServiceImpl implements IMedicationDetailsAppSer
QueryWrapper<MedDetailsSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(medDetailsSearchParam,
searchKey, new HashSet<>(Arrays.asList("patient_name", "medication_name", "bus_no", "py_str")), request);
<<<<<<< HEAD
Page<MedDetailedAccountPageDto> medDetailsPage =
medicationDetailsMapper.selectAmbPractitionerDetailPage(new Page<>(pageNo, pageSize), queryWrapper,
EncounterClass.AMB.getValue(), DispenseStatus.COMPLETED.getValue(), RequestStatus.COMPLETED.getValue(),
DispenseStatus.REFUNDED.getValue(), 2, flg, CommonConstants.TableName.MED_MEDICATION_DEFINITION,
CommonConstants.TableName.ADM_DEVICE_DEFINITION);
=======
Page<MedDetailedAccountPageDto> medDetailsPage = medicationDetailsMapper.selectAmbPractitionerDetailPage(
new Page<>(pageNo, pageSize), queryWrapper, DispenseStatus.COMPLETED.getValue(),
RequestStatus.COMPLETED.getValue(), DispenseStatus.REFUNDED.getValue(), statisticalType, flg,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION,
ConditionCode.LOT_NUMBER_COST.getCode());
>>>>>>> v1.3
return R.ok(medDetailsPage);

View File

@@ -8,10 +8,7 @@ import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
<<<<<<< HEAD
=======
import org.apache.commons.lang3.tuple.Pair;
>>>>>>> v1.3
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONArray;
@@ -135,8 +132,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
ReturnMedicineInitDto initDto = new ReturnMedicineInitDto();
// 获取科室下拉选列表
List<Organization> organizationList =
iOrganizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue());
List<Organization> organizationList
= iOrganizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue());
List<ReturnMedicineInitDto.DepartmentOption> organizationOptions = organizationList.stream().map(
organization -> new ReturnMedicineInitDto.DepartmentOption(organization.getId(), organization.getName()))
.collect(Collectors.toList());
@@ -170,8 +167,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)),
request);
// 查询退药患者分页列表
Page<EncounterInfoDto> encounterInfoPage =
returnMedicineMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper);
Page<EncounterInfoDto> encounterInfoPage
= returnMedicineMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper);
encounterInfoPage.getRecords().forEach(encounterInfo -> {
// 性别
encounterInfo.setGenderEnum_enumText(
@@ -230,9 +227,11 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
medicineReturnList.forEach(item -> {
switch (item.getTableName()) {
case CommonConstants.TableName.MED_MEDICATION_REQUEST -> returnMedicineList
case CommonConstants.TableName.MED_MEDICATION_REQUEST ->
returnMedicineList
.add(new ReturnMedicineDto().setDispenseId(item.getDispenseId()).setRequestId(item.getRequestId()));
case CommonConstants.TableName.WOR_DEVICE_REQUEST -> returnDeviceList
case CommonConstants.TableName.WOR_DEVICE_REQUEST ->
returnDeviceList
.add(new ReturnMedicineDto().setDispenseId(item.getDispenseId()).setRequestId(item.getRequestId()));
}
});
@@ -244,11 +243,11 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
List<Long> medReturnIdList = new ArrayList<>();
if (!returnMedicineList.isEmpty()) {
// 获取药品退药id列表
medReturnIdList =
returnMedicineList.stream().map(ReturnMedicineDto::getDispenseId).collect(Collectors.toList());
medReturnIdList
= returnMedicineList.stream().map(ReturnMedicineDto::getDispenseId).collect(Collectors.toList());
// 获取药品退药请求id列表
List<Long> medRequestIdList =
returnMedicineList.stream().map(ReturnMedicineDto::getRequestId).collect(Collectors.toList());
List<Long> medRequestIdList
= returnMedicineList.stream().map(ReturnMedicineDto::getRequestId).collect(Collectors.toList());
if (medReturnIdList.isEmpty()) {
throw new ServiceException("请选择要退的药品");
}
@@ -334,11 +333,11 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
List<Long> devReturnIdList = new ArrayList<>();
if (!returnDeviceList.isEmpty()) {
// 获取退耗材id列表
devReturnIdList =
returnDeviceList.stream().map(ReturnMedicineDto::getDispenseId).collect(Collectors.toList());
devReturnIdList
= returnDeviceList.stream().map(ReturnMedicineDto::getDispenseId).collect(Collectors.toList());
// 获取退耗材请求id列表
List<Long> devRequestIdList =
returnDeviceList.stream().map(ReturnMedicineDto::getRequestId).collect(Collectors.toList());
List<Long> devRequestIdList
= returnDeviceList.stream().map(ReturnMedicineDto::getRequestId).collect(Collectors.toList());
if (devReturnIdList.isEmpty()) {
throw new ServiceException("请选择要退的耗材");
}
@@ -402,34 +401,14 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
// 处理退库存
// 获取库存信息
<<<<<<< HEAD
List<UnDispenseInventoryDto> inventoryList =
returnMedicineMapper.selectInventoryInfoList(devDispenseIdList, 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())));
=======
List<UnDispenseInventoryDto> unDispenseInventoryList =
returnMedicineMapper.selectInventoryInfoList(devReturnIdList, medReturnIdList,
List<UnDispenseInventoryDto> unDispenseInventoryList
= returnMedicineMapper.selectInventoryInfoList(devReturnIdList, medReturnIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 库存待更新列表
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 根据批号,发放项目,发放药房进行分组处理
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap =
unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap
= unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
+ CommonConstants.Common.DASH + x.getLotNumber() + CommonConstants.Common.DASH + x.getLocationId()));
if (!unDispenseInventoryMap.isEmpty()) {
for (Map.Entry<String, List<UnDispenseInventoryDto>> entry : unDispenseInventoryMap.entrySet()) {
@@ -443,8 +422,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
if (!unDispenseInventoryDto.getDispenseUnit()
.equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 转换为小单位进行累加
quantity =
unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
quantity
= unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
}
minQuantity = minQuantity.add(quantity);
}
@@ -452,7 +431,6 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
// 设置待更新的库存信息
inventoryItemList.add(new InventoryItem().setId(inventoryList.get(0).getInventoryId())
.setQuantity(inventoryList.get(0).getInventoryQuantity().add(minQuantity)));
>>>>>>> v1.3
}
}
// 库存更新
@@ -483,18 +461,19 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
}
// 创建映射表,添加空集合保护
Map<Long, MedicationDefinition> medicationMap =
medicationDefinitions != null ? medicationDefinitions.stream().filter(Objects::nonNull)
Map<Long, MedicationDefinition> medicationMap
= medicationDefinitions != null ? medicationDefinitions.stream().filter(Objects::nonNull)
.collect(Collectors.toMap(MedicationDefinition::getId, Function.identity())) : new HashMap<>();
Map<Long, DeviceDefinition> deviceMap =
deviceDefinitions != null ? deviceDefinitions.stream().filter(Objects::nonNull)
Map<Long, DeviceDefinition> deviceMap
= deviceDefinitions != null ? deviceDefinitions.stream().filter(Objects::nonNull)
.collect(Collectors.toMap(DeviceDefinition::getId, Function.identity())) : new HashMap<>();
// 设置库存变更参数,添加完整判空
for (SupplyItemDetailDto supplyItemDetailDto : supplyItemDetailList) {
if (supplyItemDetailDto == null)
if (supplyItemDetailDto == null) {
continue;
}
if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(supplyItemDetailDto.getItemTable())) {
if (supplyItemDetailDto.getItemId() != null) {
MedicationDefinition med = medicationMap.get(supplyItemDetailDto.getItemId());
@@ -587,8 +566,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
throw new ServiceException("未查找到就诊诊断信息");
}
// 查询付款信息
PaymentReconciliation paymentReconciliation =
iPaymentReconciliationService.getOne(new LambdaQueryWrapper<PaymentReconciliation>()
PaymentReconciliation paymentReconciliation
= iPaymentReconciliationService.getOne(new LambdaQueryWrapper<PaymentReconciliation>()
.eq(PaymentReconciliation::getEncounterId, chargeItem.getEncounterId())
.like(PaymentReconciliation::getChargeItemIds, chargeItem.getId())
.eq(PaymentReconciliation::getStatusEnum, PaymentStatus.SUCCESS.getValue())
@@ -606,8 +585,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
throw new ServiceException("未查询到账户");
}
// 查询合同实体
Contract contract =
iContractService.getOne(new LambdaQueryWrapper<Contract>().eq(Contract::getBusNo, account.getContractNo()));
Contract contract
= iContractService.getOne(new LambdaQueryWrapper<Contract>().eq(Contract::getBusNo, account.getContractNo()));
if (contract == null) {
throw new ServiceException("未查询到合同信息");
}
@@ -643,8 +622,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
JSONArray medicalTraceNo = new JSONArray();
// 获取追溯码信息
if (dispenseInventoryDto.getTraceNo() != null) {
List<String> traceNoList =
Arrays.stream(dispenseInventoryDto.getTraceNo().split(CommonConstants.Common.COMMA)).map(String::trim)
List<String> traceNoList
= Arrays.stream(dispenseInventoryDto.getTraceNo().split(CommonConstants.Common.COMMA)).map(String::trim)
.filter(s -> !s.isEmpty()).toList();
for (String traceNo : traceNoList) {
Map<String, String> traceNoMap = new HashMap<>();
@@ -662,8 +641,8 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
.setSelRetnTime(dispenseInventoryDto.getDispenseTime()).setExpyEnd(dispenseInventoryDto.getExpirationDate())
.setDrugtracinfo(medicalTraceNo).setCertno(dispenseInventoryDto.getIdCard());
// 查看所属医院
String fixmedinsCode =
SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
String fixmedinsCode
= SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
if (dispenseInventoryDto.getPreparerName() == null && HospitalCodeEnum.CCU.getCode().equals(fixmedinsCode)) {
medical3506Param.setSelRetnOpterName(CommonConstants.CCU.DisDeviceDoctorName);
} else {
@@ -686,18 +665,14 @@ public class ReturnMedicineAppServiceImpl implements IReturnMedicineAppService {
} else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(dispenseInventoryDto.getItemTable())) {
medical3506Param.setFixmedinsHilistName(CommonConstants.TableName.ADM_DEVICE_DEFINITION);
}
<<<<<<< HEAD
return medical3506Param;
=======
return Pair.of(medical3506Param, contract);
>>>>>>> v1.3
}
private MedicalInventory3511Param getMedical3511Param(DispenseInventoryDto dispenseInventoryDto) {
MedicalInventory3511Param medicalInventory3511Param = new MedicalInventory3511Param();
String fixmedinsCode =
SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
String fixmedinsCode
= SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
// TODO
medicalInventory3511Param.setFixmedinsCode(fixmedinsCode).setMedinsListCodg(dispenseInventoryDto.getYbNo())
.setFixmedinsBchno(dispenseInventoryDto.getLotNumber()).setBegndate(dispenseInventoryDto.getDispenseTime())

View File

@@ -1,47 +1,14 @@
package com.openhis.web.pharmacymanage.appservice.impl;
import java.math.BigDecimal;
<<<<<<< HEAD
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.*;
=======
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
>>>>>>> v1.3
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.Resource;
<<<<<<< HEAD
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.core.domain.R;
import com.core.common.exception.ServiceException;
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 org.springframework.stereotype.Service;
@@ -52,44 +19,20 @@ import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.core.common.utils.SecurityUtils;
import com.openhis.administration.domain.TraceNoManage;
>>>>>>> v1.3
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;
<<<<<<< HEAD
import com.openhis.common.utils.EnumUtils;
import com.openhis.common.utils.HisQueryUtils;
=======
>>>>>>> v1.3
import com.openhis.medication.domain.MedicationDefinition;
import com.openhis.medication.domain.MedicationDispense;
import com.openhis.medication.service.IMedicationDefinitionService;
import com.openhis.medication.service.IMedicationDispenseService;
<<<<<<< HEAD
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.*;
import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper;
import com.openhis.web.pharmacymanage.mapper.SummaryDispenseMedicineMapper;
import com.openhis.web.pharmacymanage.mapper.WesternMedicineDispenseMapper;
=======
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.UnDispenseInventoryDto;
import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper;
>>>>>>> v1.3
import com.openhis.workflow.domain.InventoryItem;
import com.openhis.workflow.domain.SupplyDelivery;
import com.openhis.workflow.domain.SupplyRequest;
@@ -107,37 +50,11 @@ import com.openhis.workflow.service.ISupplyRequestService;
public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMedicineAppService {
@Resource
<<<<<<< HEAD
private IPractitionerAppService practitionerAppService;
@Resource
private IMedicationDispenseService medicationDispenseService;
@Resource
private IDeviceDispenseService deviceDispenseService;
@Resource
private IInventoryItemService iInventoryItemService;
@Resource
private SummaryDispenseMedicineMapper inpatientMedicineDispenseMapper;
@Resource
private ReturnMedicineMapper returnMedicineMapper;
@Autowired
private ILocationService locationService;
@Resource
private IPractitionerService practitionerService;
=======
private IMedicationDispenseService medicationDispenseService;
@Resource
private ReturnMedicineMapper returnMedicineMapper;
>>>>>>> v1.3
@Resource
private ISupplyRequestService supplyRequestService;
@@ -146,14 +63,6 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
@Resource
private ITraceNoManageService traceNoManageService;
<<<<<<< HEAD
@Resource
private WesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppServiceImpl;
@Resource
private IMedicineSummaryAppService inpatientMedicineCollectionAppService;
=======
@Resource
private IInventoryItemService inventoryItemService;
@@ -166,7 +75,6 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
@Resource
private WesternMedicineDispenseAppServiceImpl westernMedicineDispenseAppService;
>>>>>>> v1.3
@Resource
private WesternMedicineDispenseMapper westernMedicineDispenseMapper;
@@ -204,426 +112,6 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
/**
* 汇总发药
*
<<<<<<< HEAD
* @return 初始化信息
*/
@Override
public R<?> init() {
DispenseInitDto initDto = new DispenseInitDto();
// 获取科室下拉选列表
List<Organization> organizationList =
organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue());
List<DispenseInitDto.DepartmentOption> organizationOptions = organizationList.stream()
.map(organization -> new DispenseInitDto.DepartmentOption(organization.getId(), organization.getName()))
.collect(Collectors.toList());
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<AdmissionPageParam> queryWrapper = HisQueryUtils.buildQueryWrapper(admissionPageParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientWbStr, CommonConstants.FieldName.PatientPyStr,
CommonConstants.FieldName.PatientName, CommonConstants.FieldName.BusNo)),
request);
// 入院患者分页列表
Page<AdmissionPatientPageDto> 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<ItemDispenseOrderDto> queryWrapper =
HisQueryUtils.buildQueryWrapper(itemDispenseOrderDto, null, null, null);
// 处方单信息查询
Page<ItemDispenseOrderDto> 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<ItemDispenseOrderDto> pageData = (Page<ItemDispenseOrderDto>) result.getData();
List<ItemDispenseOrderDto> dataList = pageData.getRecords();
try {
//获取药品类型
for (ItemDispenseOrderDto itemDispenseOrderDto : dataList) {
String itemType = itemDispenseOrderDto.getItemType();
if (itemType != null) {
List<SysDictData> 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<SysDictData> 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<SysDictData> 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<SysDictData> 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<SysDictData> 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<ItemDispenseOrderDto> util = new ExcelUtil<ItemDispenseOrderDto>(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<MedicineSummarySearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(searchParam, searchKey,
new HashSet<>(List.of(CommonConstants.FieldName.ApplicantName, CommonConstants.FieldName.BusNo)), request);
// 查询医嘱详细信息
Page<MedicineSummaryDto> prescriptionItemInfoPageDto =
inpatientMedicineDispenseMapper.selectMedicationSummaryInfo(new Page<>(pageNo, pageSize), queryWrapper);
List<MedicineSummaryDto> medicineSummaryDtoList = prescriptionItemInfoPageDto.getRecords();
List<MedicineSummaryDto.Option> 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<UserAndPractitionerDto> userPractitionerPage =
practitionerAppService.getUserPractitionerPage(userAndPractitionerDto, "", 1, 1);
// 查询该用户管理的药房
List<Long> locationIdList = userPractitionerPage.getRecords().get(0).getManageMedicationLocationDtoList()
.stream().map(PractitionerOrgAndLocationDto::getLocationId).toList();
List<FromSummaryDto> 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 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
*/
@Override
public R<?> getOrderInfo(FromSearchParam searchParam, String searchKey, Integer pageNo, Integer pageSize,
HttpServletRequest request) {
// 构建查询条件
QueryWrapper<FromSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(searchParam, searchKey, null, request);
// 查询医嘱详细信息
Page<MedicineSummaryDto> prescriptionItemInfoPageDto =
inpatientMedicineDispenseMapper.selectOrderInfo(new Page<>(pageNo, pageSize), queryWrapper);
List<MedicineSummaryDto.Option> unitList;
// 个别项目设定
for (MedicineSummaryDto prescriptionInfoDto : prescriptionItemInfoPageDto.getRecords()) {
// 状态
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);
}
return R.ok(prescriptionItemInfoPageDto);
}
/**
* 处方单核对发药
*
* @param dispenseMedicineList 发药信息
* @return 处理结果
*/
@Override
public R<?> SummaryDispenseMedicine(List<DispenseItemDto> dispenseMedicineList) {
// 汇总状态更新标志
boolean summaryFlag = false;
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 获取发药单id列表
List<Long> medDispenseIdList =
dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
if (medDispenseIdList.stream().allMatch(Objects::isNull)) {
List<String> busNoList =
dispenseMedicineList.stream().map(DispenseItemDto::getBusNo).collect(Collectors.toList());
medDispenseIdList = medicationDispenseService.getMedDispenseBySummaryNo(busNoList).stream()
.map(MedicationDispense::getId).toList();
summaryFlag = true;
}
// 获取库存信息
List<UnDispenseInventoryDto> inventoryList =
returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个药品分组
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> 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);
}
}
}
// 药品发药信息查询
List<MedicationDispense> dispenseList = medicationDispenseService
.list(new LambdaQueryWrapper<MedicationDispense>().in(MedicationDispense::getId, medDispenseIdList));
=======
* @param summaryNoList 汇总单列表
* @return 处理结果
*/
@@ -638,11 +126,11 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
if (medDispenseList == null || medDispenseList.isEmpty()) {
return R.fail("未查询到发药单明细,请刷新后重试");
}
List<Long> medDispenseIdList =
medDispenseList.stream().map(MedicationDispense::getId).collect(Collectors.toList());
List<Long> medDispenseIdList
= medDispenseList.stream().map(MedicationDispense::getId).collect(Collectors.toList());
// 获取药品待发放库存信息
List<UnDispenseInventoryDto> unDispenseInventoryList =
returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
List<UnDispenseInventoryDto> unDispenseInventoryList
= returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
if (unDispenseInventoryList == null || unDispenseInventoryList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
@@ -651,8 +139,8 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
// 库存待更新列表
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 根据批号,发放项目,发放药房进行分组处理
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap =
unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap
= unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
+ CommonConstants.Common.DASH + x.getLotNumber() + CommonConstants.Common.DASH + x.getLocationId()));
if (!unDispenseInventoryMap.isEmpty()) {
for (Map.Entry<String, List<UnDispenseInventoryDto>> entry : unDispenseInventoryMap.entrySet()) {
@@ -674,8 +162,8 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
if (!unDispenseInventoryDto.getDispenseUnit()
.equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 转换为小单位进行累加
quantity =
unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
quantity
= unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
}
minQuantity = minQuantity.add(quantity);
if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())
@@ -696,86 +184,10 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
}
}
Date now = DateUtils.getNowDate();
>>>>>>> v1.3
// 追溯码列表
List<TraceNoManage> tracesNoManageList = new ArrayList<>();
TraceNoManage traceNoManage;
List<SupplyItemDetailDto> supplyItemDetailList = new ArrayList<>();
<<<<<<< HEAD
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();
// 追溯码处理
traceNoManage.setItemTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION)
// 项目id
.setItemId(medicationDispense.getMedicationId())
// 仓库类型
.setLocationTypeEnum(LocationForm.PHARMACY.getValue())
// 仓库
.setLocationId(medicationDispense.getLocationId())
// 产品批号
.setLotNumber(medicationDispense.getLotNumber())
// 追溯码
.setTraceNo(item)
// 追溯码状态
.setStatusEnum(TraceNoStatus.OUT.getValue())
// 追溯码单位
.setUnitCode(medicationDispense.getUnitCode())
// 操作类型
.setOperationType(SupplyType.DISPENSE_MEDICATION.getValue());
tracesNoManageList.add(traceNoManage);
}
}
}
// 药品发放更新
medicationDispenseService.updateBatchById(dispenseList);
// 汇总发放更新
if (summaryFlag) {
List<Long> requestId = supplyRequestService.getSupplyByBusNo(dispenseMedicineList.get(0).getBusNo())
.stream().map(SupplyRequest::getId).collect(Collectors.toList());
List<SupplyDelivery> supplyDeliveryList = supplyDeliveryService.selectByRequestIdList(requestId);
for (SupplyDelivery supplyDelivery : supplyDeliveryList) {
// 药品发放状态
supplyDelivery.setStatusEnum(DispenseStatus.COMPLETED.getValue());
// 发药时间
supplyDelivery.setOccurrenceTime(DateUtils.getNowDate());
// 发药人
supplyDelivery.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId());
}
supplyDeliveryService.updateBatchById(supplyDeliveryList);
List<SupplyRequest> 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));
}
=======
// 更新发药明细状态
for (MedicationDispense medicationDispense : medDispenseList) {
// 药品发放状态
@@ -855,7 +267,6 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
}
supplyRequestService.updateBatchById(supplyRequestList);
>>>>>>> v1.3
// 库存更新
inventoryItemService.updateBatchById(inventoryItemList);
// 追溯码管理表数据追加
@@ -885,11 +296,7 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
}
uploadFailedNoList = westernMedicineDispenseAppService.ybMedicineIntegrated(medDispenseIdList, null);
uploadFailedNoList = receiptApprovalAppService.ybInventoryIntegrated(supplyItemDetailList,
<<<<<<< HEAD
YbInvChgType.OTHER_OUT, DateUtils.getNowDate());
=======
YbInvChgType.OTHER_OUT, DateUtils.getNowDate(), true);
>>>>>>> v1.3
if (uploadFailedNoList != null) {
returnMsg = "3505商品销售上传错误错误项目编码" + uploadFailedNoList;
} else {
@@ -902,27 +309,6 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
/**
* 作废
*
<<<<<<< HEAD
* @param dispenseMedicineList 作废信息
* @return 处理结果
*/
@Override
public R<?> dispenseCancel(List<DispenseItemDto> dispenseMedicineList) {
// 汇总状态更新标志
boolean summaryFlag = false;
// 获取发药单id列表
List<Long> medDispenseIdList =
dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
if (medDispenseIdList.isEmpty()) {
List<String> busNoList =
dispenseMedicineList.stream().map(DispenseItemDto::getBusNo).collect(Collectors.toList());
medDispenseIdList = medicationDispenseService.getMedDispenseBySummaryNo(busNoList).stream()
.map(MedicationDispense::getId).toList();
summaryFlag = true;
}
=======
* @param summaryNoList 汇总单列表
* @return 处理结果
*/
@@ -936,7 +322,6 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
List<Long> medDispenseIdList = medicationDispenseService.getMedDispenseBySummaryNo(summaryNoList).stream()
.map(MedicationDispense::getId).toList();
>>>>>>> v1.3
// 药品发药信息查询
List<MedicationDispense> dispenseList = medicationDispenseService
.list(new LambdaQueryWrapper<MedicationDispense>().in(MedicationDispense::getId, medDispenseIdList));
@@ -945,26 +330,16 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
// 药品发放状态
medicationDispense.setStatusEnum(DispenseStatus.DECLINED.getValue());
// 未发药原因
<<<<<<< HEAD
medicationDispense.setNotPerformedReasonEnum(dispenseMedicineList.get(0).getNotPerformedReasonEnum());
=======
// medicationDispense.setNotPerformedReasonEnum(dispenseMedicineList.get(0).getNotPerformedReasonEnum());
>>>>>>> v1.3
// 状态变更时间
medicationDispense.setStatusChangedTime(DateUtils.getNowDate());
}
// 药品发放更新
medicationDispenseService.updateBatchById(dispenseList);
// 汇总发放更新
<<<<<<< HEAD
if (summaryFlag) {
List<Long> requestId = supplyRequestService.getSupplyByBusNo(dispenseMedicineList.get(0).getBusNo())
.stream().map(SupplyRequest::getId).collect(Collectors.toList());
=======
for (String summaryNo : summaryNoList) {
List<Long> requestId = supplyRequestService.getSupplyByBusNo(summaryNo).stream()
.map(SupplyRequest::getId).collect(Collectors.toList());
>>>>>>> v1.3
List<SupplyDelivery> supplyDeliveryList = supplyDeliveryService.selectByRequestIdList(requestId);
for (SupplyDelivery supplyDelivery : supplyDeliveryList) {
// 药品发放状态
@@ -977,223 +352,4 @@ public class SummaryDispenseMedicineAppServiceImpl implements ISummaryDispenseMe
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
<<<<<<< HEAD
/**
* 退药处理
*
* @param dispenseMedicineList 退药清单
* @return 处理结果
*/
@Override
public R<?> medicineReturn(List<DispenseItemDto> dispenseMedicineList) {
if (dispenseMedicineList == null || dispenseMedicineList.isEmpty()) {
return R.ok();
}
// 汇总状态更新标志
boolean summaryFlag = false;
// 获取发药单id列表
List<Long> medDispenseIdList =
dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
if (medDispenseIdList.stream().allMatch(Objects::isNull)) {
List<String> busNoList =
dispenseMedicineList.stream().map(DispenseItemDto::getBusNo).collect(Collectors.toList());
medDispenseIdList = medicationDispenseService.getMedDispenseBySummaryNo(busNoList).stream()
.map(MedicationDispense::getId).toList();
summaryFlag = true;
}
// 退药请求列表
List<ReturnMedicineDto> returnMedicineList = new ArrayList<>();
// 追溯码列表
List<TraceNoManage> traceNoManageList = new ArrayList<>();
TraceNoManage traceNoManage;
medDispenseIdList.forEach(dispenseId -> {
MedicationDispense medicationDispense = medicationDispenseService.getById(dispenseId);
returnMedicineList
.add(new ReturnMedicineDto().setDispenseId(dispenseId).setRequestId(medicationDispense.getMedReqId()));
});
// 获取药品退药请求id列表
List<Long> medRequestIdList =
returnMedicineList.stream().map(ReturnMedicineDto::getRequestId).collect(Collectors.toList());
if (!medRequestIdList.isEmpty()) {
// 药品已退药信息查询
List<MedicationDispense> refundList = medicationDispenseService.list(
new LambdaQueryWrapper<MedicationDispense>().in(MedicationDispense::getMedReqId, medRequestIdList));
if (refundList != null) {
if (refundList.stream().map(MedicationDispense::getStatusEnum)
.anyMatch(x -> x.equals(DispenseStatus.REFUNDED.getValue()))) {
throw new ServiceException("药品已退药,请勿重复退药");
}
}
}
// 退药单列表
List<MedicationDispense> medicationRefundList = new ArrayList<>();
List<SupplyItemDetailDto> supplyItemDetailList = new ArrayList<>();
if (!medDispenseIdList.isEmpty()) {
// 药品已发放信息查询
List<MedicationDispense> medicationDispenseList = medicationDispenseService
.list(new LambdaQueryWrapper<MedicationDispense>().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<Long> requestId = supplyRequestService.getSupplyByBusNo(dispenseMedicineList.get(0).getBusNo())
.stream().map(SupplyRequest::getId).collect(Collectors.toList());
List<SupplyDelivery> 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<SupplyRequest> supplyRequestList = supplyRequestService.selectByIdList(requestId);
for (SupplyRequest supplyRequest : supplyRequestList) {
supplyRequest.setStatusEnum(DispenseStatus.REFUNDED.getValue());
}
supplyRequestService.updateBatchById(supplyRequestList);
}
}
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 获取库存信息
List<UnDispenseInventoryDto> 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<String> uploadFailedNoList;
// 调用医保商品销售退货接口
String ybSwitch = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH); // 医保开关
if (Whether.YES.getCode().equals(ybSwitch)) {
List<MedicationDefinition> 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<Long, MedicationDefinition> 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[] {"退药"}));
}
=======
>>>>>>> v1.3
}

View File

@@ -129,22 +129,22 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
DispenseInitDto initDto = new DispenseInitDto();
// 获取科室下拉选列表
List<Organization> organizationList =
organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue());
List<Organization> organizationList
= organizationService.getList(OrganizationType.DEPARTMENT.getValue(), OrganizationClass.CLINIC.getValue());
List<DispenseInitDto.DepartmentOption> organizationOptions = organizationList.stream()
.map(organization -> new DispenseInitDto.DepartmentOption(organization.getId(), organization.getName()))
.collect(Collectors.toList());
// 获取配药人下拉选列表
List<Practitioner> preparerDoctorList =
westernMedicineDispenseMapper.getPreparerDoctorList(PractitionerRoles.PHARMACIST.getCode());
List<Practitioner> preparerDoctorList
= westernMedicineDispenseMapper.getPreparerDoctorList(PractitionerRoles.PHARMACIST.getCode());
List<DispenseInitDto.PreparerDoctorOption> preparerDoctorOptions = preparerDoctorList.stream()
.map(practitioner -> new DispenseInitDto.PreparerDoctorOption(practitioner.getId(), practitioner.getName()))
.collect(Collectors.toList());
// 未发药原因下拉选列表
List<DispenseInitDto.NotPerformedReasonOption> notPerformedReasonOptions =
Stream.of(NotPerformedReasonEnum.values())
List<DispenseInitDto.NotPerformedReasonOption> notPerformedReasonOptions
= Stream.of(NotPerformedReasonEnum.values())
.map(notPerformedReason -> new DispenseInitDto.NotPerformedReasonOption(notPerformedReason.getValue(),
notPerformedReason.getInfo()))
.collect(Collectors.toList());
@@ -185,14 +185,14 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
Integer statusEnum = encounterInfoSearchParam.getStatusEnum();
encounterInfoSearchParam.setStatusEnum(null);
// 构建查询条件
QueryWrapper<EncounterInfoSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey,
QueryWrapper<EncounterInfoSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(encounterInfoSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IdCard,
CommonConstants.FieldName.PatientPyStr, CommonConstants.FieldName.PatientWbStr)),
request);
// 查询就诊病人列表
Page<EncounterInfoDto> encounterInfoPage =
westernMedicineDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper,
Page<EncounterInfoDto> encounterInfoPage
= westernMedicineDispenseMapper.selectEncounterInfoListPage(new Page<>(pageNo, pageSize), queryWrapper,
statusEnum, DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(),
DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue());
encounterInfoPage.getRecords().forEach(encounterInfo -> {
@@ -225,11 +225,11 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
Integer dispenseStatus = itemDispenseOrderDto.getStatusEnum();
itemDispenseOrderDto.setStatusEnum(null);
// 构建查询条件
QueryWrapper<ItemDispenseOrderDto> queryWrapper =
HisQueryUtils.buildQueryWrapper(itemDispenseOrderDto, null, null, null);
QueryWrapper<ItemDispenseOrderDto> queryWrapper
= HisQueryUtils.buildQueryWrapper(itemDispenseOrderDto, null, null, null);
// 处方单信息查询
Page<ItemDispenseOrderDto> medicineDispenseOrderPage =
westernMedicineDispenseMapper.selectMedicineDispenseOrderPage(new Page<>(pageNo, pageSize), queryWrapper,
Page<ItemDispenseOrderDto> medicineDispenseOrderPage
= westernMedicineDispenseMapper.selectMedicineDispenseOrderPage(new Page<>(pageNo, pageSize), queryWrapper,
DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.COMPLETED.getValue(),
DispenseStatus.PREPARATION.getValue(), DispenseStatus.PREPARED.getValue(), dispenseStatus,
PublicationStatus.ACTIVE.getValue());
@@ -252,8 +252,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
@Override
public R<?> medicinePrepare(List<DispenseItemDto> dispenseMedicineList) {
// 追溯码集合
List<String> traceNoList =
dispenseMedicineList.stream().map(DispenseItemDto::getTraceNo).collect(Collectors.toList());
List<String> traceNoList
= dispenseMedicineList.stream().map(DispenseItemDto::getTraceNo).collect(Collectors.toList());
// 非输液药品的已出库追溯码
List<String> outTraceNoList = westernMedicineDispenseMapper.getOutTraceNo(TraceNoStatus.OUT.getValue(),
Whether.YES.getValue(), SplitPropertyCode.OUTPATIENT_MIN_UNIT_CEIL.getValue(),
@@ -271,54 +271,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
return R.fail("请选择调配药师");
}
// 获取发药单id列表
List<Long> medDispenseIdList =
dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
<<<<<<< HEAD
// 获取库存信息
List<UnDispenseInventoryDto> inventoryList =
returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个药品分组
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> 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())) {
// 库存数量判定
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 {
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量)
BigDecimal quantity = unDispenseInventoryDto.getInventoryQuantity().subtract(
unDispenseInventoryDto.getPartPercent().multiply(unDispenseInventoryDto.getQuantity()));
// 库存数量判定
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
// 库存数量不足
return R.fail(unDispenseInventoryDto.getItemName() + "当前库存数量不足");
}
}
}
}
}
=======
>>>>>>> v1.3
List<Long> medDispenseIdList
= dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
// 药品发药信息查询
List<MedicationDispense> dispenseList = medicationDispenseService
.list(new LambdaQueryWrapper<MedicationDispense>().in(MedicationDispense::getId, medDispenseIdList));
@@ -352,8 +306,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
List<MedicationRequest> medicationRequests = medicationRequestService.listByIds(
dispenseList.stream().map(MedicationDispense::getMedReqId).distinct().collect(Collectors.toList()));
// 根据请求id做map
Map<Long, List<MedicationDispense>> dispenseMap =
dispenseList.stream().collect(Collectors.groupingBy(MedicationDispense::getMedReqId));
Map<Long, List<MedicationDispense>> dispenseMap
= dispenseList.stream().collect(Collectors.groupingBy(MedicationDispense::getMedReqId));
for (MedicationRequest medicationRequest : medicationRequests) {
List<MedicationDispense> medicationDispenseList = dispenseMap.get(medicationRequest.getId());
BigDecimal dispenseQuantity = BigDecimal.ZERO;
@@ -387,57 +341,11 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
@Override
public R<?> medicineDispense(List<DispenseItemDto> dispenseMedicineList) {
// 获取发药单id列表
List<Long> medDispenseIdList =
dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
<<<<<<< HEAD
// 获取药品发放库存信息
List<UnDispenseInventoryDto> inventoryList =
returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
// 按每个药品分组
Map<Long, List<UnDispenseInventoryDto>> groupedByItemId =
inventoryList.stream().collect(Collectors.groupingBy(UnDispenseInventoryDto::getItemId));
// 遍历每个分组校验库存状态
for (Map.Entry<Long, List<UnDispenseInventoryDto>> entry : groupedByItemId.entrySet()) {
List<UnDispenseInventoryDto> 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);
=======
List<Long> medDispenseIdList
= dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
// 获取药品待发放库存信息
List<UnDispenseInventoryDto> unDispenseInventoryList =
returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
List<UnDispenseInventoryDto> unDispenseInventoryList
= returnMedicineMapper.selectInventoryInfoList(null, medDispenseIdList,
CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION);
if (unDispenseInventoryList == null || unDispenseInventoryList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
@@ -451,8 +359,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
// 库存待更新列表
List<InventoryItem> inventoryItemList = new ArrayList<>();
// 根据批号,发放项目,发放药房进行分组处理
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap =
unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
Map<String, List<UnDispenseInventoryDto>> unDispenseInventoryMap
= unDispenseInventoryList.stream().collect(Collectors.groupingBy(x -> x.getItemId()
+ CommonConstants.Common.DASH + x.getLotNumber() + CommonConstants.Common.DASH + x.getLocationId()));
if (!unDispenseInventoryMap.isEmpty()) {
for (Map.Entry<String, List<UnDispenseInventoryDto>> entry : unDispenseInventoryMap.entrySet()) {
@@ -474,15 +382,14 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
if (!unDispenseInventoryDto.getDispenseUnit()
.equals(unDispenseInventoryDto.getInventoryUnitCode())) {
// 转换为小单位进行累加
quantity =
unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
quantity
= unDispenseInventoryDto.getQuantity().multiply(unDispenseInventoryDto.getPartPercent());
}
minQuantity = minQuantity.add(quantity);
if (PublicationStatus.ACTIVE.getValue().equals(unDispenseInventoryDto.getInventoryStatusEnum())
&& unDispenseInventoryDto.getInventoryQuantity().compareTo(BigDecimal.ZERO) > 0) {
inventoryQuantity = unDispenseInventoryDto.getInventoryQuantity();
inventoryId = unDispenseInventoryDto.getInventoryId();
>>>>>>> v1.3
}
}
if (minQuantity.compareTo(inventoryQuantity) > 0) {
@@ -610,8 +517,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
@Override
public R<?> medicineCancel(List<DispenseItemDto> dispenseMedicineList) {
// 获取发药单id列表
List<Long> medDispenseIdList =
dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
List<Long> medDispenseIdList
= dispenseMedicineList.stream().map(DispenseItemDto::getDispenseId).collect(Collectors.toList());
// 药品发药信息查询
List<MedicationDispense> dispenseList = medicationDispenseService
.list(new LambdaQueryWrapper<MedicationDispense>().in(MedicationDispense::getId, medDispenseIdList));
@@ -696,8 +603,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
throw new ServiceException("未查找到就诊诊断信息");
}
// 查询付款信息
List<PaymentReconciliation> paymentReconciliationList =
paymentReconciliationService.list(new LambdaQueryWrapper<PaymentReconciliation>()
List<PaymentReconciliation> paymentReconciliationList
= paymentReconciliationService.list(new LambdaQueryWrapper<PaymentReconciliation>()
.eq(PaymentReconciliation::getEncounterId, dispenseInventoryDto.getEncounterId())
.eq(PaymentReconciliation::getTenantId, SecurityUtils.getLoginUser().getTenantId())
.like(PaymentReconciliation::getChargeItemIds, chargeItem.getId())
@@ -717,8 +624,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
throw new ServiceException("未查找到账户信息");
}
// 查询合同实体
Contract contract =
contractService.getOne(new LambdaQueryWrapper<Contract>().eq(Contract::getBusNo, account.getContractNo()));
Contract contract
= contractService.getOne(new LambdaQueryWrapper<Contract>().eq(Contract::getBusNo, account.getContractNo()));
if (contract == null) {
throw new ServiceException("未查找到合同信息");
}
@@ -755,8 +662,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
JSONArray medicalTraceNo = new JSONArray();
// 获取追溯码信息
if (dispenseInventoryDto.getTraceNo() != null) {
List<String> traceNoList =
Arrays.stream(dispenseInventoryDto.getTraceNo().split(CommonConstants.Common.COMMA)).map(String::trim)
List<String> traceNoList
= Arrays.stream(dispenseInventoryDto.getTraceNo().split(CommonConstants.Common.COMMA)).map(String::trim)
.filter(s -> !s.isEmpty()).toList();
for (String traceNo : traceNoList) {
Map<String, String> traceNoMap = new HashMap<>();
@@ -782,8 +689,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi
medical3505Param.setTrdnFlag(Whether.NO.getCode());
}
// 查看所属医院
String fixmedinsCode =
SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
String fixmedinsCode
= SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE);
if (dispenseInventoryDto.getPreparerName() == null && HospitalCodeEnum.CCU.getCode().equals(fixmedinsCode)) {
medical3505Param.setSelRetnOpterName(CommonConstants.CCU.DisDeviceDoctorName);
} else {

View File

@@ -118,10 +118,6 @@ public class MedicationDetailsController {
// return medicationDetailsAppService.getMedRunningAccountPage(medDetailsSearchParam, pageNo, pageSize, searchKey,
// request);
// }
<<<<<<< HEAD
=======
/**
* 发药明细导出
*
@@ -132,7 +128,6 @@ public class MedicationDetailsController {
* @param response 请求数据
* @param request 请求数据
*/
>>>>>>> v1.3
@GetMapping(value = "/excel-out")
public void exportExcel(MedDetailsSearchParam medDetailsSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,

View File

@@ -3,21 +3,11 @@ package com.openhis.web.pharmacymanage.controller;
import java.util.List;
import javax.annotation.Resource;
<<<<<<< HEAD
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 org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
>>>>>>> v1.3
import com.core.common.core.domain.R;
import com.openhis.web.pharmacymanage.appservice.ISummaryDispenseMedicineAppService;
@@ -25,7 +15,6 @@ import com.openhis.web.pharmacymanage.appservice.ISummaryDispenseMedicineAppServ
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* 住院汇总发药
*
@@ -42,98 +31,6 @@ public class SummaryDispenseMedicineController {
public ISummaryDispenseMedicineAppService medicineSummaryDispenseService;
/**
<<<<<<< HEAD
* 获取页面初始化信息
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> medicineDispenseInit() {
return medicineSummaryDispenseService.init();
}
/**
* 分页查询住院病人列表
*
* @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 模糊查询关键字
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param request 请求数据
*/
@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.getOrderInfo(searchParam, searchKey, pageNo, pageSize, request);
}
/**
* 药品发药
*
* @param dispenseMedicineList 发药信息
* @return 处理结果
*/
@PutMapping("/summary-dispense-medicine")
public R<?> SummaryDispenseMedicine(@RequestBody List<DispenseItemDto> dispenseMedicineList) {
return medicineSummaryDispenseService.SummaryDispenseMedicine(dispenseMedicineList);
=======
* 汇总发药
*
* @param summaryNoList 汇总单列表
@@ -142,66 +39,11 @@ public class SummaryDispenseMedicineController {
@PutMapping("/summary-dispense-medicine")
public R<?> SummaryDispenseMedicine(@RequestBody List<String> summaryNoList) {
return medicineSummaryDispenseService.SummaryDispenseMedicine(summaryNoList);
>>>>>>> v1.3
}
/**
* 作废
*
<<<<<<< HEAD
* @param dispenseMedicineList 作废信息
* @return 处理结果
*/
@PutMapping("/dispense-cancel")
public R<?> dispenseCancel(@RequestBody List<DispenseItemDto> dispenseMedicineList) {
return medicineSummaryDispenseService.dispenseCancel(dispenseMedicineList);
}
/**
* 退药处理
*
* @param dispenseMedicineList 退药清单
* @return 处理结果
*/
@PutMapping("/medicine-return")
public R<?> medicineReturn(@RequestBody List<DispenseItemDto> 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 请求数据
*/
=======
* @param summaryNoList 汇总单列表
* @return 处理结果
*/
@@ -245,5 +87,4 @@ public class SummaryDispenseMedicineController {
// HttpServletResponse response) {
// medicineSummaryDispenseService.takeExcelField(searchParam, searchKey, pageNo, pageSize, request, response);
// }
>>>>>>> v1.3
}

View File

@@ -21,29 +21,40 @@ import java.math.BigDecimal;
@Accessors(chain = true)
public class DispenseItemDto {
/** 配药人 */
/**
* 配药人
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long preparerId;
/** 发放ID */
/**
* 发放ID
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long dispenseId;
<<<<<<< HEAD
=======
/** 发药数量 */
/**
* 发药数量
*/
private BigDecimal quantity;
/** 批号 */
/**
* 批号
*/
private String lotNumber;
>>>>>>> v1.3
/** 单据号 */
/**
* 单据号
*/
private String busNo;
/** 追溯码 */
/**
* 追溯码
*/
private String traceNo;
/** 未发原因 */
/**
* 未发原因
*/
private Integer notPerformedReasonEnum;
}

View File

@@ -59,31 +59,19 @@ public class ItemDispenseOrderDto {
/**
* 发放药房
*/
<<<<<<< HEAD
@Excel(name = "发放药房", sort = 3)
=======
@Excel(name = "发放药房", sort = 3)
>>>>>>> v1.3
private String locationName;
/**
* 批次号
*/
<<<<<<< HEAD
@Excel(name = "批次号", sort = 4)
=======
@Excel(name = "批次号", sort = 4)
>>>>>>> v1.3
private String lotNumber;
/**
* 科室
*/
<<<<<<< HEAD
@Excel(name = "科室", sort = 5)
=======
@Excel(name = "科室", sort = 5)
>>>>>>> v1.3
private String departmentName;
/**
@@ -95,21 +83,13 @@ public class ItemDispenseOrderDto {
/**
* 开单医生
*/
<<<<<<< HEAD
@Excel(name = "开单医生", sort = 6)
=======
@Excel(name = "开单医生", sort = 6)
>>>>>>> v1.3
private String doctorName;
/**
* 发药医生
*/
<<<<<<< HEAD
@Excel(name = "发药医生", sort = 7)
=======
@Excel(name = "发药医生", sort = 7)
>>>>>>> v1.3
private String dispenseDoctorName;
/**
@@ -117,54 +97,32 @@ public class ItemDispenseOrderDto {
*/
@Dict(dictCode = "med_category_code")
private String itemType;
<<<<<<< HEAD
@Excel(name = "项目类型", sort = 8)
=======
@Excel(name = "项目类型", sort = 8)
>>>>>>> v1.3
private String itemType_dictText;
/**
* 发药状态
*/
private Integer statusEnum;
<<<<<<< HEAD
@Excel(name = "发药状态", sort = 9)
=======
@Excel(name = "发药状态", sort = 9)
>>>>>>> v1.3
private String statusEnum_enumText;
/**
* 诊断名称
*/
<<<<<<< HEAD
@Excel(name = "诊断名称", sort = 10)
=======
@Excel(name = "诊断名称", sort = 10)
>>>>>>> v1.3
private String conditionName;
/**
* 处方号
*/
<<<<<<< HEAD
@Excel(name = "处方号", sort = 11)
=======
@Excel(name = "处方号", sort = 11)
>>>>>>> v1.3
private String prescriptionNo;
/**
* 项目名称
*/
<<<<<<< HEAD
@Excel(name = "项目名称", sort = 1, width = 30)
=======
@Excel(name = "项目名称", sort = 1, width = 30)
>>>>>>> v1.3
private String itemName;
/**
@@ -175,21 +133,13 @@ public class ItemDispenseOrderDto {
/**
* 规格
*/
<<<<<<< HEAD
@Excel(name = "规格", sort = 2, width = 30)
=======
@Excel(name = "规格", sort = 2, width = 30)
>>>>>>> v1.3
private String totalVolume;
/**
* 单次剂量
*/
<<<<<<< HEAD
@Excel(name = "单次剂量", sort = 12)
=======
@Excel(name = "单次剂量", sort = 12)
>>>>>>> v1.3
private BigDecimal dose;
/**
@@ -202,11 +152,7 @@ public class ItemDispenseOrderDto {
*/
@Dict(dictCode = "rate_code")
private String rateCode;
<<<<<<< HEAD
@Excel(name = "用药频次", sort = 13)
=======
@Excel(name = "用药频次", sort = 13)
>>>>>>> v1.3
private String rateCode_dictText;
/**
@@ -214,60 +160,35 @@ public class ItemDispenseOrderDto {
*/
@Dict(dictCode = "method_code")
private String methodCode;
<<<<<<< HEAD
@Excel(name = "用法", sort = 14)
=======
@Excel(name = "用法", sort = 14)
>>>>>>> v1.3
private String methodCode_dictText;
/**
* 剂量单位
*/
@Dict(dictCode = "unit_code")
private String doseUnitCode;
<<<<<<< HEAD
@Excel(name = "剂量单位", sort = 15)
=======
@Excel(name = "剂量单位", sort = 15)
>>>>>>> v1.3
private String doseUnitCode_dictText;
/**
* 单位
*/
@Dict(dictCode = "unit_code")
private String unitCode;
<<<<<<< HEAD
@Excel(name = "单位", sort = 16)
=======
@Excel(name = "单位", sort = 16)
>>>>>>> v1.3
private String unitCode_dictText;
/**
* 单次发药数
*/
<<<<<<< HEAD
@Excel(name = "单次发药数", sort = 17)
=======
@Excel(name = "单次发药数", sort = 17)
>>>>>>> v1.3
private Integer dispensePerQuantity;
/**
* 每次发药供应天数
*/
<<<<<<< HEAD
@Excel(name = "每次发药供应天数", sort = 18)
=======
@Excel(name = "每次发药供应天数", sort = 18)
>>>>>>> v1.3
private Integer dispensePerDuration;
/**
@@ -278,32 +199,19 @@ public class ItemDispenseOrderDto {
/**
* 数量
*/
<<<<<<< HEAD
@Excel(name = "数量",sort = 19)
private Integer quantity;
=======
@Excel(name = "数量", sort = 19)
private BigDecimal quantity;
>>>>>>> v1.3
/**
* 单价
*/
<<<<<<< HEAD
@Excel(name = "单价", sort = 20)
=======
@Excel(name = "单价", sort = 20)
>>>>>>> v1.3
private BigDecimal unitPrice;
/**
* 金额
*/
<<<<<<< HEAD
@Excel(name = "金额", sort = 21)
=======
@Excel(name = "金额", sort = 21)
>>>>>>> v1.3
private BigDecimal totalPrice;
/**
* 组合号
@@ -315,66 +223,46 @@ public class ItemDispenseOrderDto {
* 就诊NO
*/
@JsonSerialize(using = ToStringSerializer.class)
<<<<<<< HEAD
@Excel(name = "就诊NO", sort = 24)
=======
@Excel(name = "就诊NO", sort = 24)
>>>>>>> v1.3
private String encounterBusNo;
/** 开具日期 */
/**
* 开具日期
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
<<<<<<< HEAD
@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)
=======
@Excel(name = "开具日期", sort = 25, dateFormat = "yyyy-MM-dd HH:mm:ss", width = 25)
private Date reqAuthoredTime;
/** 接收皮试标志 */
/**
* 接收皮试标志
*/
@Excel(name = "皮试标志", sort = 26)
private String skinTestFlagDesc;
private Integer skinTestFlag;
/** 接收中药标识 */
/**
* 接收中药标识
*/
@Excel(name = "中药标识", sort = 27)
private String tcmFlagDesc;
private Integer tcmFlag;
/** 所在表 */
/**
* 所在表
*/
@Excel(name = "所在表", sort = 28, width = 30)
>>>>>>> v1.3
private String itemTable;
/**
* 生产厂家
*/
<<<<<<< HEAD
@Excel(name = "生产厂家", sort = 22, width = 35)
=======
@Excel(name = "生产厂家", sort = 22, width = 35)
>>>>>>> v1.3
private String manufacturerText;
/**
* 追溯码
*/
<<<<<<< HEAD
@Excel(name = "追溯码", sort = 23)
=======
@Excel(name = "追溯码", sort = 23)
>>>>>>> v1.3
private String traceNo;
/**
@@ -384,12 +272,14 @@ public class ItemDispenseOrderDto {
private String medTypeCode;
private String medTypeCode_dictText;
/** 输液标志 */
/**
* 输液标志
*/
private Integer injectFlag;
/** 拆分属性 */
/**
* 拆分属性
*/
private Integer partAttributeEnum;
/**

View File

@@ -1,11 +1,5 @@
package com.openhis.web.pharmacymanage.dto;
<<<<<<< HEAD
import java.math.BigDecimal;
import java.util.Date;
=======
>>>>>>> v1.3
import com.core.common.annotation.Excel;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -22,13 +16,10 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class MedDetailedAccountPageDto {
<<<<<<< HEAD
/** 门诊号 */
=======
/**
* 门诊号
*/
>>>>>>> v1.3
private String outpatientNo;
/**
@@ -41,37 +32,6 @@ public class MedDetailedAccountPageDto {
*/
private String patientName;
<<<<<<< HEAD
/** 项目类别 */
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 = "药品项目")
=======
/**
* 接收发药数量
*/
@@ -117,7 +77,6 @@ public class MedDetailedAccountPageDto {
* 药品项目
*/
@Excel(name = "药品项目", sort = 3)
>>>>>>> v1.3
private String medicationName;
/**
@@ -125,22 +84,6 @@ public class MedDetailedAccountPageDto {
*/
private String pyStr;
<<<<<<< HEAD
/** 项目编码 */
@Excel(name = "药品编码")
private String busNo;
/** 发药编码 */
@Excel(name = "发药单号")
private String dispenseNo;
/** 医保编码 */
@Excel(name = "医保编码")
private String ybNo;
/** 规格 */
@Excel(name = "规格")
=======
/**
* 项目编码
*/
@@ -163,7 +106,6 @@ public class MedDetailedAccountPageDto {
* 规格
*/
@Excel(name = "规格", sort = 7, width = 30)
>>>>>>> v1.3
private String totalVolume;
/**
@@ -189,18 +131,6 @@ public class MedDetailedAccountPageDto {
* 成本金额
*/
<<<<<<< HEAD
/** 批号 */
@Excel(name = "生产批号")
private String lotNumber;
/** 厂商 */
@Excel(name = "厂家/产地")
private String manufacturerText;
/** 供应商 */
@Excel(name = "供应商")
=======
private BigDecimal costPrice;
/**
@@ -219,7 +149,6 @@ public class MedDetailedAccountPageDto {
* 供应商
*/
@Excel(name = "供应商", sort = 15, width = 35)
>>>>>>> v1.3
private String supplierName;
/**
@@ -236,14 +165,6 @@ public class MedDetailedAccountPageDto {
private String refundUnitCode;
private String refundUnitCode_dictText;
<<<<<<< HEAD
/** 发药时间 */
@Excel(name = "发药时间", dateFormat="yyyy-MM-dd HH:mm:ss")
private Date dispenseTime;
/** 项目所在表 */
// @Excel(name = "项目类别")
=======
/**
* 发药时间
*/
@@ -254,6 +175,5 @@ public class MedDetailedAccountPageDto {
* 项目所在表
*/
@Excel(name = "项目类别", sort = 4)
>>>>>>> v1.3
private String itemTable;
}

View File

@@ -15,36 +15,53 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class MedDetailsSearchParam {
/** 发药时间 */
/**
* 发药时间
*/
private Date dispenseTime;
/** 药房 */
/**
* 药房
*/
private Long locationId;
/** 患者姓名 */
/**
* 患者姓名
*/
private String patientName;
/** 发药人 */
/**
* 发药人
*/
private Long practitionerId;
/** 药品名称 */
/**
* 药品名称
*/
private String medicationName;
/** 药品项目(药品编码) */
/**
* 药品项目(药品编码)
*/
private String busNo;
/** 出院状态 */
/**
* 出院状态
*/
private Integer dischargeStatus;
/** 门诊住院flg */
/**
* 门诊住院flg
*/
private Integer flag;
/** 项目所在表 */
/**
* 项目所在表
*/
private String itemTable;
<<<<<<< HEAD
=======
/** 统计类型 */
/**
* 统计类型
*/
private Integer inventoryScope;
>>>>>>> v1.3
}

View File

@@ -5,10 +5,6 @@ package com.openhis.web.pharmacymanage.dto;
import java.math.BigDecimal;
import java.util.Date;
<<<<<<< HEAD
import java.util.List;
=======
>>>>>>> v1.3
import com.core.common.annotation.Excel;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -27,17 +23,22 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class MedicineSummaryDto {
/**
* 单据号
*/
@Excel(name = "单据号", sort = 8, width = 35)
private String busNo;
/** 供应请求id */
/**
* 供应请求id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long requestId;
/** 供应发放id */
/**
* 供应发放id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long deliveryId;
@@ -51,7 +52,9 @@ public class MedicineSummaryDto {
@Excel(name = "项目名", sort = 2, width = 40)
private String itemName;
/** 项目id */
/**
* 项目id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long itemId;
@@ -91,33 +94,45 @@ public class MedicineSummaryDto {
private String unitCode;
private String unitCode_dictText;
/** 常规单位 */
/**
* 常规单位
*/
@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;
@Excel(name = "发放地点", sort = 6)
private String sourceLocationName;
/** 申请科室 */
/**
* 申请科室
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long orgId;
private String orgName;
/** 领药人 */
/**
* 领药人
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long applicantId;
private String applicantName;
/** 申请时间 */
/**
* 申请时间
*/
private Date applyTime;
/**
@@ -126,6 +141,8 @@ public class MedicineSummaryDto {
private Integer statusEnum;
private String statusEnum_enumText;
/** 患者信息 */
/**
* 患者信息
*/
private String patientInfo;
}

View File

@@ -22,31 +22,19 @@ public interface MedicationDetailsMapper {
* @param queryWrapper 查询条件
* @param completed 发药状态:已发药
* @param refunded 发药状态:已退药
<<<<<<< HEAD
* @param dispenseEnum 统计类型
* @param medMedicationDefinition 药品
* @param admDeviceDefinition 耗材
=======
* @param statisticalType 统计类型
* @param flg 1:住院 2门诊
* @param medMedicationDefinition 药品
* @param admDeviceDefinition 耗材
* @param costEnum 命中条件枚举:产品批号进价
>>>>>>> v1.3
* @return 门诊人员发药明细表
*/
Page<MedDetailedAccountPageDto> selectAmbPractitionerDetailPage(@Param("page") Page<MedDetailedAccountPageDto> page,
@Param(Constants.WRAPPER) QueryWrapper<MedDetailsSearchParam> queryWrapper,
@Param("completed") Integer completed, @Param("agree") Integer agree, @Param("refunded") Integer refunded,
<<<<<<< HEAD
@Param("dispenseEnum") Integer dispenseEnum, @Param("flg") Integer flg,
@Param("medMedicationDefinition") String medMedicationDefinition,
@Param("admDeviceDefinition") String admDeviceDefinition);
=======
@Param("statisticalType") Integer statisticalType, @Param("flg") Integer flg,
@Param("medMedicationDefinition") String medMedicationDefinition,
@Param("admDeviceDefinition") String admDeviceDefinition, @Param("costEnum") String costEnum);
>>>>>>> v1.3
// /**
// * 门诊发药明细流水账
@@ -62,5 +50,4 @@ public interface MedicationDetailsMapper {
// @Param("page") Page<MedDetailedAccountPageDto> page,
// @Param(Constants.WRAPPER) QueryWrapper<MedDetailsSearchParam> queryWrapper, @Param("amb") Integer amb,
// @Param("completed") Integer completed, @Param("refunded") Integer refunded)
}

View File

@@ -27,11 +27,7 @@ public interface ReturnMedicineMapper {
* @return 退药患者分页列表
*/
Page<EncounterInfoDto> selectEncounterInfoListPage(@Param("page") Page<EncounterInfoDto> page,
<<<<<<< HEAD
@Param(Constants.WRAPPER) QueryWrapper<EncounterInfoDto> queryWrapper, @Param("amb") Integer amb);
=======
@Param(Constants.WRAPPER) QueryWrapper<EncounterInfoDto> queryWrapper);
>>>>>>> v1.3
/**
* 申请退药清单查询

View File

@@ -3,37 +3,8 @@
*/
package com.openhis.web.pharmacymanage.mapper;
<<<<<<< HEAD
import com.openhis.web.pharmacymanage.dto.FromSearchParam;
import org.apache.ibatis.annotations.Param;
=======
>>>>>>> v1.3
import org.springframework.stereotype.Repository;
@Repository
<<<<<<< HEAD
public interface SummaryDispenseMedicineMapper {
/**
* 汇总药品信息列表查询
*
* @param page 分页
* @param queryWrapper 查询条件
* @return 汇总药品信息
*/
Page<MedicineSummaryDto> selectMedicationSummaryInfo(@Param("page") Page<MedicineSummaryDto> page,
@Param(Constants.WRAPPER) QueryWrapper<MedicineSummarySearchParam> queryWrapper);
/**
* 汇总药品信息列表查询
*
* @param page 分页
* @param queryWrapper 查询条件
* @return 汇总药品信息
*/
Page<MedicineSummaryDto> selectOrderInfo(@Param("page") Page<MedicineSummaryDto> page,
@Param(Constants.WRAPPER) QueryWrapper<FromSearchParam> queryWrapper);
}
=======
public interface SummaryDispenseMedicineMapper {}
>>>>>>> v1.3

View File

@@ -88,23 +88,10 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
*/
@Override
public IPage<RegPatientMainInfoDto> getRegPatientMainInfo(RegPatientMainInfoDto regPatientMainInfoDto,
<<<<<<< HEAD
Integer status, String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) {
// 构建查询条件
QueryWrapper<RegPatientMainInfoDto> queryWrapper =
HisQueryUtils.buildQueryWrapper(regPatientMainInfoDto, searchKey,
new HashSet<>(Arrays.asList("bus_no", "patient_name", "inHospital_org_name", "house_name")), request);
IPage<RegPatientMainInfoDto> 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);
=======
String searchKey, Integer pageNo, Integer pageSize, HttpServletRequest request) {
// 构建查询条件
QueryWrapper<RegPatientMainInfoDto> queryWrapper =
HisQueryUtils.buildQueryWrapper(regPatientMainInfoDto, searchKey,
QueryWrapper<RegPatientMainInfoDto> queryWrapper
= HisQueryUtils.buildQueryWrapper(regPatientMainInfoDto, searchKey,
new HashSet<>(Arrays.asList("bus_no", "patient_name", "in_hospital_org_name", "house_name")), request);
// 当前登录所属的科室
Long currentUserOrganizationId = SecurityUtils.getLoginUser().getOrgId();
@@ -118,8 +105,8 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
AccountType.PERSONAL_CASH_ACCOUNT.getCode(), EncounterZyStatus.TO_BE_REGISTERED.getValue(),
EncounterZyStatus.ALREADY_SETTLED.getValue(), EncounterZyStatus.REGISTERED.getValue(), queryWrapper);
// 就诊ID集合
List<Long> encounterIds =
regPatientMainInfo.getRecords().stream().map(RegPatientMainInfoDto::getEncounterId).toList();
List<Long> encounterIds
= regPatientMainInfo.getRecords().stream().map(RegPatientMainInfoDto::getEncounterId).toList();
// 查询条件
QueryWrapper<EncounterAccountDto> wrapper = new QueryWrapper<>();
@@ -129,9 +116,8 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(),
ChargeItemStatus.REFUNDED.getValue(), wrapper);
// 转换为Map,key = encounter_id
Map<Long, EncounterAccountDto> dtoMap =
list.stream().collect(Collectors.toMap(EncounterAccountDto::getEncounterId, e -> e));
>>>>>>> v1.3
Map<Long, EncounterAccountDto> dtoMap
= list.stream().collect(Collectors.toMap(EncounterAccountDto::getEncounterId, e -> e));
regPatientMainInfo.getRecords().forEach(e -> {
// 设置费用详情
if (dtoMap.containsKey(e.getEncounterId())) {
@@ -183,22 +169,15 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
List<RegAdviceSaveDto> regAdviceSaveList = regAdviceSaveParam.getRegAdviceSaveList();
// 药品
List<RegAdviceSaveDto> medicineList = regAdviceSaveList.stream()
<<<<<<< HEAD
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
// 耗材
// List<RegAdviceSaveDto> deviceList = regAdviceSaveList.stream()
// .filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
=======
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
>>>>>>> v1.3
// 诊疗活动
List<RegAdviceSaveDto> activityList = regAdviceSaveList.stream()
.filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
// 保存时,校验临时医嘱库存
if (AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType)) {
List<RegAdviceSaveDto> medUpdateList =
medicineList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList());
List<RegAdviceSaveDto> medUpdateList
= medicineList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList());
// 编辑时,释放本身占用的库存发放
for (RegAdviceSaveDto adviceSaveDto : medUpdateList) {
iMedicationDispenseService.deleteMedicationDispense(adviceSaveDto.getRequestId());
@@ -222,8 +201,8 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
/**
* 处理药品请求
*/
List<String> medRequestIdList =
this.handMedication(medicineList, startTime, authoredTime, curDate, adviceOpType, organizationId, signCode);
List<String> medRequestIdList
= this.handMedication(medicineList, startTime, authoredTime, curDate, adviceOpType, organizationId, signCode);
/**
* 处理诊疗项目请求
@@ -244,24 +223,15 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
.in(ChargeItem::getServiceId, requestIds));
}
<<<<<<< HEAD
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"住院医嘱"}));
=======
return R.ok(medRequestIdList,
MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"住院医嘱"}));
>>>>>>> v1.3
}
/**
* 处理药品
*/
<<<<<<< HEAD
private void handMedication(List<RegAdviceSaveDto> medicineList, Date startTime, Date authoredTime, Date curDate,
String adviceOpType, Long organizationId, String signCode) {
=======
private List<String> handMedication(List<RegAdviceSaveDto> medicineList, Date startTime, Date authoredTime,
Date curDate, String adviceOpType, Long organizationId, String signCode) {
>>>>>>> v1.3
// 当前登录账号的科室id
Long orgId = SecurityUtils.getLoginUser().getOrgId();
// 保存操作
@@ -314,11 +284,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
if (is_save) {
longMedicationRequest.setEffectiveDoseStart(startTime); // 医嘱开始时间
longMedicationRequest
<<<<<<< HEAD
.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4));
=======
.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4));
>>>>>>> v1.3
longMedicationRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
longMedicationRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量
longMedicationRequest.setExecuteNum(regAdviceSaveDto.getExecuteNum()); // 执行次数
@@ -382,11 +348,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
if (is_save) {
tempMedicationRequest.setEffectiveDoseStart(startTime); // 医嘱开始时间
tempMedicationRequest
<<<<<<< HEAD
.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4));
=======
.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 4));
>>>>>>> v1.3
tempMedicationRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
tempMedicationRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量
tempMedicationRequest.setExecuteNum(regAdviceSaveDto.getExecuteNum()); // 执行次数
@@ -414,13 +376,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
tempMedicationRequest.setInfusionFlag(regAdviceSaveDto.getInjectFlag()); // 输液标志
tempMedicationRequest.setSortNumber(regAdviceSaveDto.getSortNumber()); // 排序号
}
<<<<<<< HEAD
iMedicationRequestService.saveOrUpdate(tempMedicationRequest);
if (is_save) {
// 处理药品发放
Long dispenseId = iMedicationDispenseService.handleMedicationDispense(tempMedicationRequest,
regAdviceSaveDto.getDbOpType());
=======
if (tempMedicationRequest.getId() == null) {
firstTimeSave = true;
}
@@ -433,7 +388,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
// 处理药品发放
Long dispenseId = iMedicationDispenseService.handleMedicationDispense(tempMedicationRequest,
regAdviceSaveDto.getDbOpType());
>>>>>>> v1.3
// 保存药品费用项
chargeItem = new ChargeItem();
@@ -543,7 +497,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
ChargeItem chargeItem;
// 新增 + 修改 (临时医嘱)
List<RegAdviceSaveDto> 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());
@@ -615,8 +568,8 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
// 第一次保存时,处理诊疗套餐的子项信息
if (regAdviceSaveDto.getRequestId() == null) {
ActivityDefinition activityDefinition =
iActivityDefinitionService.getById(regAdviceSaveDto.getAdviceDefinitionId());
ActivityDefinition activityDefinition
= iActivityDefinitionService.getById(regAdviceSaveDto.getAdviceDefinitionId());
String childrenJson = activityDefinition.getChildrenJson();
if (childrenJson != null) {
// 诊疗子项参数类
@@ -648,15 +601,9 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
// 住院医嘱请求数据
List<RegRequestBaseDto> regRequestBaseInfo = adviceManageAppMapper.getRegRequestBaseInfo(encounterId, null,
<<<<<<< HEAD
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST,
CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(),
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
=======
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST,
CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.NO.getCode(),
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
>>>>>>> v1.3
// 根据 requestId 过滤重复医嘱信息
List<RegRequestBaseDto> distinctList = regRequestBaseInfo.stream()
.collect(Collectors.toMap(RegRequestBaseDto::getRequestId, dto -> dto, (existing, replacement) -> existing // 如果key冲突保留已存在的第一条
@@ -695,15 +642,9 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
// 住院医嘱请求数据
List<RegRequestBaseDto> regRequestBaseInfo = adviceManageAppMapper.getRegRequestBaseInfo(encounterId, patientId,
<<<<<<< HEAD
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST,
CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode(),
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
=======
CommonConstants.TableName.MED_MEDICATION_REQUEST, CommonConstants.TableName.WOR_DEVICE_REQUEST,
CommonConstants.TableName.WOR_SERVICE_REQUEST, practitionerId, Whether.YES.getCode(),
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
>>>>>>> v1.3
for (RegRequestBaseDto regRequestBaseDto : regRequestBaseInfo) {
// 请求状态
regRequestBaseDto.setStatusEnum_enumText(
@@ -735,13 +676,13 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
// 药品
List<AdviceBatchOpParam> medicineList = paramList.stream()
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
List<Long> medicineRequestIds =
medicineList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
List<Long> medicineRequestIds
= medicineList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
// 诊疗
List<AdviceBatchOpParam> activityList = paramList.stream()
.filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
List<Long> activityRequestIds =
activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
List<Long> activityRequestIds
= activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
// 查询已完成的药品请求
List<MedicationRequest> medicineCompleteList = new ArrayList<>();
if (!medicineRequestIds.isEmpty()) {
@@ -793,13 +734,13 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
// 药品
List<AdviceBatchOpParam> medicineList = paramList.stream()
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
List<Long> medicineRequestIds =
medicineList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
List<Long> medicineRequestIds
= medicineList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
// 诊疗
List<AdviceBatchOpParam> activityList = paramList.stream()
.filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
List<Long> activityRequestIds =
activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
List<Long> activityRequestIds
= activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
if (!medicineRequestIds.isEmpty()) {
iMedicationRequestService.update(new LambdaUpdateWrapper<MedicationRequest>()
.in(MedicationRequest::getId, medicineRequestIds).set(MedicationRequest::getEffectiveDoseEnd, date)

View File

@@ -67,13 +67,13 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService {
public NursingOrdersDto getNursingOrdersInfos() {
NursingOrdersDto nursingOrdersDto = new NursingOrdersDto();
// 类型为护理医嘱的编码集合
List<String> categoryCodeList =
Arrays.stream(NursingOrdersClass.values()).map(NursingOrdersClass::getCode).collect(Collectors.toList());
List<NursingOrdersDetailDto> nursingOrdersInfos =
specialAdviceAppMapper.getNursingOrdersInfos(categoryCodeList);
List<String> categoryCodeList
= Arrays.stream(NursingOrdersClass.values()).map(NursingOrdersClass::getCode).collect(Collectors.toList());
List<NursingOrdersDetailDto> nursingOrdersInfos
= specialAdviceAppMapper.getNursingOrdersInfos(categoryCodeList);
// 按categoryCode进行分组
Map<String, List<NursingOrdersDetailDto>> groupedByCategory =
nursingOrdersInfos.stream().collect(Collectors.groupingBy(NursingOrdersDetailDto::getCategoryCode));
Map<String, List<NursingOrdersDetailDto>> groupedByCategory
= nursingOrdersInfos.stream().collect(Collectors.groupingBy(NursingOrdersDetailDto::getCategoryCode));
// 根据不同的categoryCode赋值给对应的List
for (Map.Entry<String, List<NursingOrdersDetailDto>> entry : groupedByCategory.entrySet()) {
String categoryCode = entry.getKey();
@@ -133,8 +133,8 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService {
// 就诊诊断id
Long encounterDiagnosisId = nursingOrdersSaveDto.getEncounterDiagnosisId();
// 护理医嘱详情保存集合
List<NursingOrdersSaveDetailDto> nursingOrdersSaveDetailDtoList =
nursingOrdersSaveDto.getNursingOrdersSaveDetailDtoList();
List<NursingOrdersSaveDetailDto> nursingOrdersSaveDetailDtoList
= nursingOrdersSaveDto.getNursingOrdersSaveDetailDtoList();
// 声明长期医嘱诊疗请求
ServiceRequest longServiceRequest;
// 已经存在的有效医嘱
@@ -247,11 +247,11 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService {
public NursingOrdersEncounterDto getEncounterNursingOrdersInfos(Long encounterId) {
NursingOrdersEncounterDto nursingOrdersEncounterDto = new NursingOrdersEncounterDto();
// 类型为护理医嘱的枚举集合
List<Integer> categoryEnumList =
Arrays.stream(NursingOrdersClass.values()).map(NursingOrdersClass::getValue).collect(Collectors.toList());
List<Integer> categoryEnumList
= Arrays.stream(NursingOrdersClass.values()).map(NursingOrdersClass::getValue).collect(Collectors.toList());
// 查询查询就诊护理医嘱 ; 为了排除可能存在的数据问题,每个categoryEnum按创建时间取最新的一条
List<NursingOrdersEncounterDetailDto> encounterNursingOrdersInfos =
specialAdviceAppMapper.getEncounterNursingOrdersInfos(encounterId, RequestStatus.DRAFT.getValue(),
List<NursingOrdersEncounterDetailDto> encounterNursingOrdersInfos
= specialAdviceAppMapper.getEncounterNursingOrdersInfos(encounterId, RequestStatus.DRAFT.getValue(),
RequestStatus.ACTIVE.getValue(), RequestStatus.COMPLETED.getValue(), categoryEnumList);
if (!encounterNursingOrdersInfos.isEmpty()) {
// 按categoryEnum进行分组
@@ -325,8 +325,8 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService {
return R.fail("请先在诊疗目录维护转科医嘱");
}
// 出院的医嘱定义id
Long leaveHospitalDefinitionId =
iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.LEAVE_HOSPITAL);
Long leaveHospitalDefinitionId
= iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.LEAVE_HOSPITAL);
if (leaveHospitalDefinitionId != null) {
LambdaQueryWrapper<ServiceRequest> leaveLambdaQuery = new LambdaQueryWrapper<>();
leaveLambdaQuery.eq(ServiceRequest::getEncounterId, encounterId)
@@ -415,8 +415,8 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService {
Long encounterDiagnosisId = leaveHospitalParam.getEncounterDiagnosisId();
// 出院的医嘱定义id
Long transferOrganizationDefinitionId =
iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.LEAVE_HOSPITAL);
Long transferOrganizationDefinitionId
= iActivityDefinitionService.getAppointActivityDefinitionId(CommonConstants.BusinessName.LEAVE_HOSPITAL);
if (transferOrganizationDefinitionId == null) {
return R.fail("请先在诊疗目录维护出院医嘱");
}
@@ -433,11 +433,7 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService {
// 出院的医嘱信息
AdviceBaseDto activityAdviceBaseDto = iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
<<<<<<< HEAD
List.of(transferOrganizationDefinitionId), null, 1, 1, Whether.NO.getValue(), List.of(3)).getRecords()
=======
List.of(transferOrganizationDefinitionId), null, 1, 1, Whether.NO.getValue(), List.of(3), null).getRecords()
>>>>>>> v1.3
.get(0);
// 保存出院医嘱请求
ServiceRequest serviceRequest = new ServiceRequest();
@@ -466,11 +462,8 @@ public class SpecialAdviceAppServiceImpl implements ISpecialAdviceAppService {
orderProcess.setRequestId(serviceRequest.getId()); // 请求id
orderProcess.setRequestTableName(CommonConstants.TableName.WOR_SERVICE_REQUEST); // 请求表名
orderProcess.setOutWayCode(leaveHospitalParam.getOutWayCode()); // 出院方式
<<<<<<< HEAD
=======
orderProcess.setTargetLocationId(leaveHospitalParam.getOriginalOrganizationId()); // 原科室
orderProcess.setOriginalLocationId(leaveHospitalParam.getOriginalLocationId()); // 原病区
>>>>>>> v1.3
iOrderProcessService.save(orderProcess);
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"出院医嘱"}));

View File

@@ -18,11 +18,15 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class LeaveHospitalParam {
/** 就诊id */
/**
* 就诊id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long encounterId;
/** 患者 */
/**
* 患者
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long patientId;
@@ -51,8 +55,6 @@ public class LeaveHospitalParam {
private String outWayCode;
/**
<<<<<<< HEAD
=======
* 原科室
*/
@JsonSerialize(using = ToStringSerializer.class)
@@ -65,7 +67,6 @@ public class LeaveHospitalParam {
private Long originalLocationId;
/**
>>>>>>> v1.3
* 理由
*/
private String reasonText;

View File

@@ -3,11 +3,6 @@
*/
package com.openhis.web.reportmanage.appservice;
<<<<<<< HEAD
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
=======
import java.time.LocalDateTime;
import javax.servlet.http.HttpServletRequest;
@@ -16,7 +11,6 @@ import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.openhis.web.reportmanage.dto.*;
>>>>>>> v1.3
/**
* 报表 appService
@@ -26,13 +20,8 @@ import com.openhis.web.reportmanage.dto.*;
*/
public interface IReportAppService {
<<<<<<< HEAD
/**例子
* 药剂科报表_常规报表:出库明细表
=======
/**
* 例子 药剂科报表_常规报表:出库明细表
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -45,23 +34,16 @@ public interface IReportAppService {
/**
* 药剂科报表:患者明细主表
*
<<<<<<< HEAD
=======
* @param patientMasterDetailsSearchParam 患者明细主表查询条件
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 患者明细主表
*/
<<<<<<< HEAD
R<?> getPatientMasterDetailPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
=======
Page<ReportPatientMasterDetailDto> getPatientMasterDetailPage(
ReportPatientMasterDetailsSearchParam patientMasterDetailsSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request);
>>>>>>> v1.3
/**
* 药剂科报表:线下采购占比
@@ -83,32 +65,21 @@ public interface IReportAppService {
* @param request 请求数据
* @return 药品使用情况报表
*/
<<<<<<< HEAD
R<?> getMedicationUsagePage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
=======
R<?> getMedicationUsagePage(Integer pageNo, Integer pageSize, String searchKey, LocalDateTime startTime,
LocalDateTime endTime, HttpServletRequest request);
>>>>>>> v1.3
/**
* 药剂科报表:患者明细
*
<<<<<<< HEAD
=======
* @param patientDetailsSearchParam 患者明细查询条件
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 患者明细报表
*/
<<<<<<< HEAD
R<?> getPatientDetailsPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
=======
Page<ReportPatientDetailsDto> getPatientDetailsPage(ReportPatientDetailsSearchParam patientDetailsSearchParam,
Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
>>>>>>> v1.3
/**
* 药剂科报表_常规报表:药品费用增长率
@@ -135,37 +106,19 @@ public interface IReportAppService {
/**
* 药剂科报表:基本情况
*
<<<<<<< HEAD
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 基本情况报表
*/
R<?> getBasicInformationDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
=======
* @param param 查询参数
* @return 基本情况报表
*/
R<?> getBasicInformationDetails(ReportDetailsSearchParam param);
>>>>>>> v1.3
/**
* 药剂科报表:药品出库情况
*
* @param pageNo 当前页码
* @param pageSize 查询条数
<<<<<<< HEAD
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 药品出库情况报表
*/
R<?> getMedicationStockOutDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
=======
* @return 药品出库情况报表
*/
R<?> getMedicationStockOutDetails(ReportDetailsSearchParam param, Integer pageNo, Integer pageSize);
>>>>>>> v1.3
/**
* 药剂科报表:产品使用情况
@@ -189,9 +142,6 @@ public interface IReportAppService {
*/
R<?> getNonWinQtyRatio(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request);
<<<<<<< HEAD
=======
/**
* 药剂科报表:药品入库情况
*
@@ -263,5 +213,4 @@ public interface IReportAppService {
* @param response 响应数据
*/
void makeExcelFile(ReportDetailsSearchParam param, HttpServletResponse response, String code);
>>>>>>> v1.3
}

View File

@@ -33,32 +33,6 @@ import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
<<<<<<< HEAD
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.core.domain.R;
import com.core.common.utils.AgeCalculatorUtil;
import com.openhis.administration.domain.Practitioner;
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.ChargeReportInitDto;
import com.openhis.web.reportmanage.dto.ChargeReportPageDto;
import com.openhis.web.reportmanage.dto.ChargeReportSearchParam;
import com.openhis.web.reportmanage.mapper.ChargeReportMapper;
=======
>>>>>>> v1.3
/**
* 费用明细报表 impl
*
@@ -97,11 +71,7 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
.collect(Collectors.toList());
initDto.setStatisticsTypeOptions(statisticsTypeOptions).setIssuerOptions(applicantList)
<<<<<<< HEAD
.setPayeeOptions(applicantList).setClinicalTypeOptions(clinicalTypeOptions);
=======
.setPayeeOptions(applicantList).setClinicalTypeOptions(clinicalTypeOptions);
>>>>>>> v1.3
return R.ok(initDto);
}
@@ -129,13 +99,13 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
List<String> deviceCategoryCode = null;
if (chargeReportSearchParam.getClinicalType() != null
&& !chargeReportSearchParam.getClinicalType().trim().isEmpty()) {
clinicalType =
Arrays.stream((chargeReportSearchParam.getClinicalType()).split(",")).map(Integer::valueOf).toList();
clinicalType
= Arrays.stream((chargeReportSearchParam.getClinicalType()).split(",")).map(Integer::valueOf).toList();
}
if (chargeReportSearchParam.getMedicationCategoryCode() != null
&& !chargeReportSearchParam.getMedicationCategoryCode().trim().isEmpty()) {
medicationCategoryCode =
Arrays.stream((chargeReportSearchParam.getMedicationCategoryCode()).split(",")).toList();
medicationCategoryCode
= Arrays.stream((chargeReportSearchParam.getMedicationCategoryCode()).split(",")).toList();
}
if (chargeReportSearchParam.getDeviceCategoryCode() != null
&& !chargeReportSearchParam.getDeviceCategoryCode().trim().isEmpty()) {
@@ -143,8 +113,8 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
}
if (chargeReportSearchParam.getActivityCategoryCode() != null
&& !chargeReportSearchParam.getActivityCategoryCode().trim().isEmpty()) {
activityCategoryCode =
Arrays.stream((chargeReportSearchParam.getActivityCategoryCode()).split(",")).toList();
activityCategoryCode
= Arrays.stream((chargeReportSearchParam.getActivityCategoryCode()).split(",")).toList();
}
// 避开QueryWrapper
chargeReportSearchParam.setClinicalType(null);
@@ -152,22 +122,12 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
chargeReportSearchParam.setDeviceCategoryCode(null);
chargeReportSearchParam.setActivityCategoryCode(null);
// 构建查询条件
QueryWrapper<ChargeReportSearchParam> queryWrapper =
<<<<<<< HEAD
HisQueryUtils.buildQueryWrapper(chargeReportSearchParam, searchKey,
QueryWrapper<ChargeReportSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(chargeReportSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.YbCode, CommonConstants.FieldName.BusNo,
CommonConstants.FieldName.Name, CommonConstants.FieldName.ClinicalName,
CommonConstants.FieldName.ClinicalNo)),
request);
queryWrapper.orderByDesc(CommonConstants.FieldName.BusNo).orderByAsc(CommonConstants.FieldName.ChargeId)
.orderByAsc(CommonConstants.FieldName.ChargeTime);
=======
HisQueryUtils.buildQueryWrapper(chargeReportSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.YbCode, CommonConstants.FieldName.BusNo,
CommonConstants.FieldName.Name, CommonConstants.FieldName.ClinicalName,
CommonConstants.FieldName.ClinicalNo)),
request);
>>>>>>> v1.3
// 最终返回结果
Page<ChargeReportPageDto> chargeReportList;
@@ -175,17 +135,6 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_REVENUE.getCode())) {
// 门诊整体收入明细
chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize), queryWrapper,
<<<<<<< HEAD
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,
PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(),
ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(),
ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 1);
=======
PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(),
ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(),
ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 2, clinicalType,
@@ -197,22 +146,10 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(),
ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 1, clinicalType,
activityCategoryCode, deviceCategoryCode, medicationCategoryCode);
>>>>>>> v1.3
} else if (Objects.equals(statisticsType, StatisticsType.OUTPATIENT_SELF_REVENUE.getCode())) {
// 门诊自费收入明细
chargeReportList = chargeReportMapper.selectRevenueReportPage(new Page<>(pageNo, pageSize), queryWrapper,
<<<<<<< HEAD
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,
PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(),
ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(),
ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 3);
=======
PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(),
ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(),
ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 0, clinicalType,
@@ -224,7 +161,6 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
ChargeItemContext.MEDICATION.getValue(), ChargeItemContext.DEVICE.getValue(),
ChargeItemContext.ACTIVITY.getValue(), ChargeItemContext.REGISTER.getValue(), 3, clinicalType,
activityCategoryCode, deviceCategoryCode, medicationCategoryCode);
>>>>>>> v1.3
} else {
return R.fail(PromptMsgConstant.Report.M00002);
@@ -244,17 +180,10 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
List<ChargeReportPageDto> content = chargeReportList.getRecords();
// 按 busNo 分组,并合计 totalPrice
Map<String, BigDecimal> subtotalAmount = content.stream()
<<<<<<< HEAD
// 过滤掉 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)));
=======
// 过滤掉 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)));
>>>>>>> v1.3
// 更新每条数据的 Price 字段
for (ChargeReportPageDto dto : content) {
@@ -315,13 +244,13 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
List<String> deviceCategoryCode = null;
if (chargeReportSearchParam.getClinicalType() != null
&& !chargeReportSearchParam.getClinicalType().trim().isEmpty()) {
clinicalType =
Arrays.stream((chargeReportSearchParam.getClinicalType()).split(",")).map(Integer::valueOf).toList();
clinicalType
= Arrays.stream((chargeReportSearchParam.getClinicalType()).split(",")).map(Integer::valueOf).toList();
}
if (chargeReportSearchParam.getMedicationCategoryCode() != null
&& !chargeReportSearchParam.getMedicationCategoryCode().trim().isEmpty()) {
medicationCategoryCode =
Arrays.stream((chargeReportSearchParam.getMedicationCategoryCode()).split(",")).toList();
medicationCategoryCode
= Arrays.stream((chargeReportSearchParam.getMedicationCategoryCode()).split(",")).toList();
}
if (chargeReportSearchParam.getDeviceCategoryCode() != null
&& !chargeReportSearchParam.getDeviceCategoryCode().trim().isEmpty()) {
@@ -329,8 +258,8 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
}
if (chargeReportSearchParam.getActivityCategoryCode() != null
&& !chargeReportSearchParam.getActivityCategoryCode().trim().isEmpty()) {
activityCategoryCode =
Arrays.stream((chargeReportSearchParam.getActivityCategoryCode()).split(",")).toList();
activityCategoryCode
= Arrays.stream((chargeReportSearchParam.getActivityCategoryCode()).split(",")).toList();
}
// 避开QueryWrapper
chargeReportSearchParam.setClinicalType(null);
@@ -338,8 +267,8 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
chargeReportSearchParam.setDeviceCategoryCode(null);
chargeReportSearchParam.setActivityCategoryCode(null);
// 构建查询条件
QueryWrapper<ChargeReportSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(chargeReportSearchParam, searchKey,
QueryWrapper<ChargeReportSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(chargeReportSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.YbCode, CommonConstants.FieldName.BusNo,
CommonConstants.FieldName.Name, CommonConstants.FieldName.ClinicalName,
CommonConstants.FieldName.ClinicalNo)),
@@ -435,6 +364,7 @@ public class ChargeReportAppServiceImpl implements IChargeReportAppService {
Integer tenantId = SecurityUtils.getLoginUser().getTenantId();
return R.ok(chargeReportMapper.selectOrgWorkload(startTime, endTime, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, PaymentStatus.SUCCESS.getValue(), PaymentStatus.REFUND_ALL.getValue(), ConditionCode.LOT_NUMBER_COST.getValue().toString(), tenantId));
}
/**
* 医生工作量统计
*

View File

@@ -3,14 +3,6 @@
*/
package com.openhis.web.reportmanage.appservice.impl;
<<<<<<< HEAD
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import com.core.common.core.domain.R;
import com.openhis.web.reportmanage.appservice.IReportAppService;
=======
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
@@ -46,7 +38,6 @@ import com.openhis.financial.service.IPaymentRecStaticService;
import com.openhis.web.reportmanage.appservice.IReportAppService;
import com.openhis.web.reportmanage.dto.*;
import com.openhis.web.reportmanage.mapper.ReportMapper;
>>>>>>> v1.3
/**
* 报表 impl
@@ -57,10 +48,6 @@ import com.openhis.web.reportmanage.mapper.ReportMapper;
@Service
public class ReportAppServiceImpl implements IReportAppService {
<<<<<<< HEAD
/**例子
* 药剂科报表_常规报表:出库明细表
=======
@Autowired
ReportMapper reportMapper;
@Resource
@@ -68,7 +55,6 @@ public class ReportAppServiceImpl implements IReportAppService {
/**
* 例子 药剂科报表_常规报表:出库明细表
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -84,10 +70,7 @@ public class ReportAppServiceImpl implements IReportAppService {
/**
* 药剂科报表:患者明细主表
*
<<<<<<< HEAD
=======
* @param patientMasterDetailsSearchParam 患者明细主表查询条件
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
@@ -95,23 +78,18 @@ public class ReportAppServiceImpl implements IReportAppService {
* @return 患者明细主表
*/
@Override
<<<<<<< HEAD
public R<?> getPatientMasterDetailPage(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) {
return null;
=======
public Page<ReportPatientMasterDetailDto> getPatientMasterDetailPage(
ReportPatientMasterDetailsSearchParam patientMasterDetailsSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request) {
// 构建查询条件
QueryWrapper<ReportPatientMasterDetailsSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(patientMasterDetailsSearchParam, searchKey,
QueryWrapper<ReportPatientMasterDetailsSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(patientMasterDetailsSearchParam, searchKey,
new HashSet<>(Arrays.asList("encounter_bus_no", "patient_name")), request);
// 查询挂号明细分页列表
Page<ReportPatientMasterDetailDto> patientMasterDetailsPage = reportMapper
.selectPatientMasterDetailPage(new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.IMP.getValue());
return patientMasterDetailsPage;
>>>>>>> v1.3
}
/**
@@ -128,10 +106,7 @@ public class ReportAppServiceImpl implements IReportAppService {
HttpServletRequest request) {
return null;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
/**
* 药剂科报表:药品使用情况
*
@@ -142,11 +117,6 @@ public class ReportAppServiceImpl implements IReportAppService {
* @return 药品使用情况报表
*/
@Override
<<<<<<< HEAD
public R<?> getMedicationUsagePage(Integer pageNo, Integer pageSize, String searchKey,
HttpServletRequest request) {
return null;
=======
public R<?> getMedicationUsagePage(Integer pageNo, Integer pageSize, String searchKey, LocalDateTime startTime,
LocalDateTime endTime, HttpServletRequest request) {
LoginUser loginUser = SecurityUtils.getLoginUser();
@@ -159,16 +129,12 @@ public class ReportAppServiceImpl implements IReportAppService {
item.setOrgName(orgName);
});
return R.ok(medicationUsagePage);
>>>>>>> v1.3
}
/**
* 药剂科报表:患者明细
*
<<<<<<< HEAD
=======
* @param patientDetailsSearchParam 患者明细查询条件
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
@@ -176,25 +142,19 @@ public class ReportAppServiceImpl implements IReportAppService {
* @return 患者明细报表
*/
@Override
<<<<<<< HEAD
public R<?> getPatientDetailsPage(Integer pageNo, Integer pageSize, String searchKey,
HttpServletRequest request) {
return null;
=======
public Page<ReportPatientDetailsDto> getPatientDetailsPage(
ReportPatientDetailsSearchParam patientDetailsSearchParam, Integer pageNo, Integer pageSize, String searchKey,
HttpServletRequest request) {
// 构建查询条件
QueryWrapper<ReportPatientDetailsSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(patientDetailsSearchParam, searchKey,
QueryWrapper<ReportPatientDetailsSearchParam> queryWrapper
= HisQueryUtils.buildQueryWrapper(patientDetailsSearchParam, searchKey,
new HashSet<>(Arrays.asList("encounter_bus_no", "med_name", "manufacturer_text")), request);
// 查询挂号明细分页列表
Page<ReportPatientDetailsDto> patientDetailsPage = reportMapper.selectPatientDetailsPage(
new Page<>(pageNo, pageSize), queryWrapper, CommonConstants.TableName.MED_MEDICATION_REQUEST);
return patientDetailsPage;
>>>>>>> v1.3
}
/**
@@ -207,12 +167,8 @@ public class ReportAppServiceImpl implements IReportAppService {
* @return 药品费用增长率
*/
@Override
<<<<<<< HEAD
public R<?> getDrugExpensesGrowthRate(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) {
=======
public R<?> getDrugExpensesGrowthRate(Integer pageNo, Integer pageSize, String searchKey,
HttpServletRequest request) {
>>>>>>> v1.3
return null;
}
@@ -226,29 +182,12 @@ public class ReportAppServiceImpl implements IReportAppService {
* @return 30天回款率
*/
@Override
<<<<<<< HEAD
public R<?> getThirtyDayCollectionRate(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) {
=======
public R<?> getThirtyDayCollectionRate(Integer pageNo, Integer pageSize, String searchKey,
HttpServletRequest request) {
>>>>>>> v1.3
return null;
}
/**
<<<<<<< HEAD
* 药剂科报表:基本情况
*
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 基本情况报表
*/
@Override
public R<?> getBasicInformationDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) {
return null;
=======
* 获取医疗机构代码、组织机构名称
*
* @return 医疗机构代码[0]、组织机构名称[1]
@@ -295,7 +234,6 @@ public class ReportAppServiceImpl implements IReportAppService {
return R.ok(List.of(dto));
}
return R.ok();
>>>>>>> v1.3
}
/**
@@ -303,15 +241,6 @@ public class ReportAppServiceImpl implements IReportAppService {
*
* @param pageNo 当前页码
* @param pageSize 查询条数
<<<<<<< HEAD
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 药品出库情况报表
*/
@Override
public R<?> getMedicationStockOutDetails(Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) {
return null;
=======
* @return 药品出库情况报表
*/
@Override
@@ -343,7 +272,6 @@ public class ReportAppServiceImpl implements IReportAppService {
});
}
return R.ok(detailsPage);
>>>>>>> v1.3
}
/**
@@ -374,9 +302,6 @@ public class ReportAppServiceImpl implements IReportAppService {
return null;
}
<<<<<<< HEAD
=======
/**
* 药剂科报表:药品入库情况
*
@@ -493,8 +418,8 @@ public class ReportAppServiceImpl implements IReportAppService {
List<ReportMedicationInboundDetailsDto> dtoList = details.getData().getRecords();
if (!dtoList.isEmpty()) {
try {
NewExcelUtil<ReportMedicationInboundDetailsDto> util =
new NewExcelUtil<>(ReportMedicationInboundDetailsDto.class);
NewExcelUtil<ReportMedicationInboundDetailsDto> util
= new NewExcelUtil<>(ReportMedicationInboundDetailsDto.class);
util.exportExcel(response, dtoList, CommonConstants.SheetName.DRUG_TRANSFER_DETAILS);
} catch (Exception e) {
throw new RuntimeException(e);
@@ -513,13 +438,12 @@ public class ReportAppServiceImpl implements IReportAppService {
List<ReportBasicInformationDetailsDto> dtoList = (List<ReportBasicInformationDetailsDto>) details.getData();
if (dtoList != null && !dtoList.isEmpty()) {
try {
NewExcelUtil<ReportBasicInformationDetailsDto> util =
new NewExcelUtil<>(ReportBasicInformationDetailsDto.class);
NewExcelUtil<ReportBasicInformationDetailsDto> util
= new NewExcelUtil<>(ReportBasicInformationDetailsDto.class);
util.exportExcel(response, dtoList, CommonConstants.SheetName.ANNUAL_TOTAL_DRUG_REVENUE);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
>>>>>>> v1.3
}

View File

@@ -3,18 +3,6 @@
*/
package com.openhis.web.reportmanage.controller;
<<<<<<< HEAD
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 java.time.LocalDateTime;
import javax.servlet.http.HttpServletRequest;
@@ -30,7 +18,6 @@ import com.openhis.web.reportmanage.dto.ReportDetailsSearchParam;
import com.openhis.web.reportmanage.dto.ReportPatientDetailsSearchParam;
import com.openhis.web.reportmanage.dto.ReportPatientMasterDetailsSearchParam;
import com.openhis.web.reportmanage.dto.ReportPhysicianWorkloadSearchParam;
>>>>>>> v1.3
import lombok.extern.slf4j.Slf4j;
@@ -48,14 +35,8 @@ public class ReportController {
@Autowired
private IReportAppService reportAppService;
<<<<<<< HEAD
/**例子Dto例子参考ReportStockOutDetailDto
* 药剂科报表_常规报表:出库明细表
=======
/**
* 例子Dto例子参考ReportStockOutDetailDto 药剂科报表_常规报表:出库明细表
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -67,14 +48,6 @@ public class ReportController {
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) {
<<<<<<< HEAD
return reportAppService.getStockOutDetailPage(pageNo,pageSize,searchKey,request);
}
/**Dto参考ReportPatientMasterDetailDto
* 药剂科报表:患者明细主表
*
=======
return reportAppService.getStockOutDetailPage(pageNo, pageSize, searchKey, request);
}
@@ -82,7 +55,6 @@ public class ReportController {
* Dto参考ReportPatientMasterDetailDto 药剂科报表:患者明细主表
*
* @param patientMasterDetailsSearchParam 患者明细主表查询条件
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
@@ -90,16 +62,6 @@ public class ReportController {
* @return 患者明细主报表
*/
@GetMapping(value = "/patient-master-detail")
<<<<<<< HEAD
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
* 药剂科报表:线下采购占比
=======
public R<?> getPatientMasterDetailPage(ReportPatientMasterDetailsSearchParam patientMasterDetailsSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@@ -110,7 +72,6 @@ public class ReportController {
/**
* Dto参考ReportOfflinePurchaseRatioDto 药剂科报表:线下采购占比
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -122,19 +83,11 @@ public class ReportController {
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) {
<<<<<<< HEAD
return reportAppService.getOfflinePurchaseRatioPage(pageNo,pageSize,searchKey,request);
}
/**Dto参考ReportMedicationUsageDto
* 药剂科报表:药品使用情况
=======
return reportAppService.getOfflinePurchaseRatioPage(pageNo, pageSize, searchKey, request);
}
/**
* Dto参考ReportMedicationUsageDto 药剂科报表:药品使用情况
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -145,15 +98,6 @@ public class ReportController {
@GetMapping(value = "/medication-usage")
public R<?> getMedicationUsagePage(@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
<<<<<<< HEAD
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return reportAppService.getMedicationUsagePage(pageNo,pageSize,searchKey,request);
}
/**Dto参考ReportPatientDetailsDto
* 药剂科报表:患者明细
*
=======
@RequestParam(name = "searchKey", required = false) String searchKey,
@RequestParam(name = "startTime",
required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
@@ -167,7 +111,6 @@ public class ReportController {
* Dto参考ReportPatientDetailsDto 药剂科报表:患者明细
*
* @param patientDetailsSearchParam 患者明细查询条件
>>>>>>> v1.3
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
@@ -175,16 +118,6 @@ public class ReportController {
* @return 患者明细报表
*/
@GetMapping(value = "/patient-details")
<<<<<<< HEAD
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
* 药剂科报表:药品费用增长率
=======
public R<?> getPatientDetailsPage(ReportPatientDetailsSearchParam patientDetailsSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@@ -195,7 +128,6 @@ public class ReportController {
/**
* Dto参考ReportDrugCostGrowthDto 药剂科报表:药品费用增长率
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -207,19 +139,11 @@ public class ReportController {
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) {
<<<<<<< HEAD
return reportAppService.getDrugExpensesGrowthRate(pageNo,pageSize,searchKey,request);
}
/**Dto参考ReportThirtyDayCollectionRateDto
* 药剂科报表:30天回款率
=======
return reportAppService.getDrugExpensesGrowthRate(pageNo, pageSize, searchKey, request);
}
/**
* Dto参考ReportThirtyDayCollectionRateDto 药剂科报表:30天回款率
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -231,45 +155,6 @@ public class ReportController {
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) {
<<<<<<< HEAD
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
* 药剂科报表:产品使用情况
=======
return reportAppService.getThirtyDayCollectionRate(pageNo, pageSize, searchKey, request);
}
@@ -311,7 +196,6 @@ public class ReportController {
/**
* Dto参考ReportProductUsageDto 药剂科报表:产品使用情况
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -323,19 +207,11 @@ public class ReportController {
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) {
<<<<<<< HEAD
return reportAppService.getProductUsageDetails(pageNo,pageSize,searchKey,request);
}
/**Dto参考ReportNonWinQtyRatioDto
* 药剂科报表:非中选产品采购量占比
=======
return reportAppService.getProductUsageDetails(pageNo, pageSize, searchKey, request);
}
/**
* Dto参考ReportNonWinQtyRatioDto 药剂科报表:非中选产品采购量占比
>>>>>>> v1.3
*
* @param pageNo 当前页码
* @param pageSize 查询条数
@@ -347,9 +223,6 @@ public class ReportController {
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) {
<<<<<<< HEAD
return reportAppService.getNonWinQtyRatio(pageNo,pageSize,searchKey,request);
=======
return reportAppService.getNonWinQtyRatio(pageNo, pageSize, searchKey, request);
}
@@ -446,7 +319,6 @@ public class ReportController {
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
return reportAppService.getPhysicianWorkloadPage(physicianWorkloadReportSearchParam, pageNo, pageSize,
searchKey, request);
>>>>>>> v1.3
}
}

Some files were not shown because too many files have changed in this diff Show More