版本更新

This commit is contained in:
Zhang.WH
2025-09-03 15:54:41 +08:00
parent 0b93d16b64
commit 8f82322d10
3290 changed files with 154339 additions and 23829 deletions

View File

@@ -0,0 +1,56 @@
package com.openhis.web.materialmanage.appservice;
import javax.servlet.http.HttpServletRequest;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import com.openhis.web.pharmacyWarehousemanage.dto.PharmacyWarehouseSearchParam;
/**
* 物资共通方法
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialCommonService {
/**
* 单据初始化
*
* @return 初始化信息
*/
MaterialInitDto init();
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request);
/**
* 单据列表
*
* @param purchaseOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @param locationFlg 仓库flg
* @param supplyType 单据类型
* @return 订货单据分页列表
*/
R<?> getPage(MaterialSearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request,String locationFlg,Integer supplyType);
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> deleteOrder(String busNo);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资损益单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialProfitLossOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 损益单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 损益单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑损益单
*
* @param profitLossOrderDtoList 损益信息
* @return 操作结果
*/
R<?> addOrEditProfitLossOrder(List<MaterialDetailDto> profitLossOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资订货单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialPurchaseOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 订货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 订货单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑订货单
*
* @param purchaseOrderDtoList 订货信息
* @return 操作结果
*/
R<?> addOrEditPurchaseOrder(List<MaterialDetailDto> purchaseOrderDtoList);
}

View File

@@ -0,0 +1,106 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.inventorymanage.dto.ItemChargeDetailDto;
import com.openhis.web.inventorymanage.dto.SupplyItemDetailDto;
/**
* 物资审批方法
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialReceiptApprovalService {
/**
* 采购单同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> purchaseOrderAgreeApproval(String busNo);
/**
* 根据单据号获取供应单据及供应项相关详细信息
*
* @param busNo 单据号
* @return 供应单据及供应项相关详细信息
*/
List<SupplyItemDetailDto> getSupplyItemDetail(String busNo);
/**
* 获取物品的价格信息
*
* @param itemIdList 物品id
* @return 价格信息
*/
List<ItemChargeDetailDto> getItemChargeDetail(List<Long> itemIdList);
/**
* 入库单据审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> purchaseInventoryApproved(String busNo);
/**
* 采购退货审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> purchaseReturnApproved(String busNo);
/**
* 领用出库审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> requisitionIssueApproved(String busNo);
/**
* 领用退库审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> returnIssueApproved(String busNo);
/**
* 报损单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> lossReportApproved(String busNo);
/**
* 盘点审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> productStocktakingApproved(String busNo);
/**
* 调入单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> transferInAgreeApproved(String busNo);
/**
* 调出单审批通过
*
* @param busNo 单据号
* @return 操作结果
*/
R<?> transferOutAgreeApproved(String busNo);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资退货单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialReturnOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 退货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退货单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑退货单
*
* @param returnOrderDtoList 退货信息
* @return 操作结果
*/
R<?> addOrEditReturnOrder(List<MaterialDetailDto> returnOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资退库单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialReturnToWarehouseOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 退库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退库单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑退库单
*
* @param returnToWarehouseOrderDtoList 退库信息
* @return 操作结果
*/
R<?> addOrEditReturnToWarehouseOrder(List<MaterialDetailDto> returnToWarehouseOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资进货单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialStockInOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 进货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 进货单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑进货单
*
* @param stockInOrderDtoList 进货信息
* @return 操作结果
*/
R<?> addOrEditStockInOrder(List<MaterialDetailDto> stockInOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资出库单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialStockOutOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 出库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 出库单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑出库单
*
* @param stockOutOrderDtoList 出库信息
* @return 操作结果
*/
R<?> addOrEditStockOutOrder(List<MaterialDetailDto> stockOutOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资盘点单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialStocktakingOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 盘点单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 盘点单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑盘点单
*
* @param stocktakingOrderDtoList 盘点信息
* @return 操作结果
*/
R<?> addOrEditStocktakingOrder(List<MaterialDetailDto> stocktakingOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资调入单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialTransferInOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 调入单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调入单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑调入单
*
* @param transferInOrderDtoList 调入信息
* @return 操作结果
*/
R<?> addOrEditTransferInOrder(List<MaterialDetailDto> transferInOrderDtoList);
}

View File

@@ -0,0 +1,47 @@
package com.openhis.web.materialmanage.appservice;
import java.util.List;
import com.core.common.core.domain.R;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
/**
* 物资调出单
*
* @author yuxj
* @date 2025-07-22
*/
public interface IMaterialTransferOutOrderService {
/**
* 单据初始化
*
* @return 初始化信息
*/
R<?> init();
/**
* 调出单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调出单单据详情
*/
R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize);
/**
* 获取单据号
*
* @return 初始化信息
*/
R<?> getBusNo();
/**
* 添加/编辑调入单
*
* @param transferOutOrderDtoList 调入信息
* @return 操作结果
*/
R<?> addOrEditTransferOutOrder(List<MaterialDetailDto> transferOutOrderDtoList);
}

View File

@@ -0,0 +1,223 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.openhis.administration.domain.Organization;
import com.openhis.administration.service.IOrganizationService;
import com.openhis.common.enums.*;
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.MessageUtils;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.domain.Supplier;
import com.openhis.administration.service.IPractitionerService;
import com.openhis.administration.service.ISupplierService;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.utils.EnumUtils;
import com.openhis.common.utils.HisQueryUtils;
import com.openhis.web.common.appservice.ICommonService;
import com.openhis.web.common.dto.LocationDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.dto.MaterialDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.dto.MaterialDeviceInfoDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资共通
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialCommonServiceImpl implements IMaterialCommonService {
@Resource
private ISupplierService supplierService;
@Resource
private IPractitionerService practitionerService;
@Resource
private ISupplyRequestService supplyRequestService;
@Resource
private MaterialCommonMapper materialCommonMapper;
@Resource
private ICommonService commonServiceImpl;
@Resource
private IOrganizationService organizationService;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public MaterialInitDto init() {
MaterialInitDto orderInitDto = new MaterialInitDto();
// 查询供应商列表
List<Supplier> supplierList = supplierService.getList();
// 查询经手人列表
List<Practitioner> practitionerList = practitionerService.getList();
// 经手人信息
List<MaterialInitDto.LongOption> practitionerListOption = practitionerList.stream()
.map(practitioner -> new MaterialInitDto.LongOption(practitioner.getId(), practitioner.getName()))
.collect(Collectors.toList());
// 供应商信息
List<MaterialInitDto.SupplierOption> supplierListOption = supplierList.stream().map(
supplier -> new MaterialInitDto.SupplierOption(supplier.getId(), supplier.getName(), supplier.getPhone()))
.collect(Collectors.toList());
// 审批状态
List<MaterialInitDto.IntegerOption> supplyStatusOption = Stream.of(SupplyStatus.values())
.map(supplyStatus -> new MaterialInitDto.IntegerOption(supplyStatus.getValue(), supplyStatus.getInfo()))
.collect(Collectors.toList());
// 包装情况
List<MaterialInitDto.IntegerOption> packagingConditionOption = Stream.of(PackagingCondition.values())
.map(packagingCondition -> new MaterialInitDto.IntegerOption(packagingCondition.getValue(),
packagingCondition.getInfo()))
.collect(Collectors.toList());
// 验收结果
List<MaterialInitDto.IntegerOption> acceptanceResultOption = Stream.of(AcceptanceResult.values())
.map(acceptanceResult -> new MaterialInitDto.IntegerOption(acceptanceResult.getValue(),
acceptanceResult.getInfo()))
.collect(Collectors.toList());
// 仓库列表
List<LocationDto> warehouseList = commonServiceImpl.getWarehouseList();
// 科室列表
List<Organization> departmentList = organizationService.getList(OrganizationType.DEPARTMENT.getValue(), null);
orderInitDto.setWarehouseListOptions(warehouseList).setDepartmentListOptions(departmentList)
.setSupplierOption(supplierListOption).setPractitionerOption(practitionerListOption)
.setSupplyStatusOptions(supplyStatusOption).setPackagingConditionOptions(packagingConditionOption)
.setAcceptanceResultoryOptions(acceptanceResultOption);
return orderInitDto;
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@Override
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request) {
Long locationId = purchaseOrderSearchParam.getLocationId();
purchaseOrderSearchParam.setLocationId(null);
Long supplierId = null;
// 为物资订货时需要传参数supplierId
if (purchaseOrderSearchParam.getTypeEnum() != null
&& purchaseOrderSearchParam.getTypeEnum().equals(SupplyType.MATERIAL_PURCHASE.getValue())) {
supplierId = purchaseOrderSearchParam.getSupplierId();
purchaseOrderSearchParam.setSupplierId(null);
}
// 构建查询条件
QueryWrapper<MaterialSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(purchaseOrderSearchParam, searchKey,
new HashSet<>(Arrays.asList(CommonConstants.FieldName.Name, CommonConstants.FieldName.PyStr)), request);
// 设置排序
queryWrapper.orderByDesc(CommonConstants.FieldName.Name);
Page<MaterialDeviceInfoDto> deviceInfoDto =
materialCommonMapper.getDeviceInfo(new Page<>(pageNo, pageSize), queryWrapper, locationId, supplierId);
for (MaterialDeviceInfoDto item : deviceInfoDto.getRecords()) {
List<MaterialDeviceInfoDto.Option> unitList = new ArrayList<>();
unitList.add(new MaterialDeviceInfoDto.Option(item.getUnitCode(), item.getUnitCode_dictText()));
unitList.add(new MaterialDeviceInfoDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(deviceInfoDto);
}
/**
* 单据列表
*
* @param purchaseOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @param locationFlg 仓库flg
* @param supplyType 单据类型
* @return 订货单据分页列表
*/
@Override
public R<?> getPage(MaterialSearchParam purchaseOrderSearchParam, Integer pageNo, Integer pageSize,
String searchKey, HttpServletRequest request, String locationFlg, Integer supplyType) {
// 判断哪个画面使用
if (supplyType != null) {
purchaseOrderSearchParam.setTypeEnum(supplyType);
}
String originalBusNoFlg = purchaseOrderSearchParam.getOriginalBusNoFlg();
purchaseOrderSearchParam.setOriginalBusNoFlg(null);
// 构建查询条件
QueryWrapper<MaterialSearchParam> queryWrapper =
HisQueryUtils.buildQueryWrapper(purchaseOrderSearchParam, searchKey,
new HashSet<>(
Arrays.asList(CommonConstants.FieldName.SupplyBusNo, CommonConstants.FieldName.ApplicantName)),
request);
// 设置排序
queryWrapper.orderByDesc(CommonConstants.FieldName.SupplyBusNo);
// 查询订货单分页列表
Page<MaterialDto> purchaseOrderDtoPage =
materialCommonMapper.getPage(new Page<>(pageNo, pageSize), queryWrapper, originalBusNoFlg, locationFlg);
purchaseOrderDtoPage.getRecords().forEach(e -> {
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
return R.ok(purchaseOrderDtoPage);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@Override
public R<?> deleteOrder(String busNo) {
// 根据原始单据号查询信息
List<SupplyRequest> supplyRequest = supplyRequestService.getSupplyByOriginalBusNo(busNo);
if (!supplyRequest.isEmpty()) {
// 将原始单据号信息的原始单据号删除
boolean flg = supplyRequestService.updateByBusNo(supplyRequest.get(0).getBusNo());
if (!flg) {
R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
// 删除单据
boolean result = supplyRequestService.removeByBusNo(busNo);
return result ? R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null))
: R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}

View File

@@ -0,0 +1,169 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialProfitLossOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialProfitLossOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资损益单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialProfitLossOrderServiceImpl implements IMaterialProfitLossOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.GENERAL_PROFIT_AND_LOSS.getValue(),
SupplyCategory.GENERAL_PROFIT_AND_LOSS.getInfo()));
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getValue(),
SupplyCategory.STOCKTAKING_PROFIT_AND_LOSS.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 损益单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 损益单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> profitLossOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
profitLossOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : profitLossOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(profitLossOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_PRPFITLOSS.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑损益单
*
* @param profitLossOrderDtoList 损益信息
* @return 操作结果
*/
@Override
public R<?> addOrEditProfitLossOrder(List<MaterialDetailDto> profitLossOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(profitLossOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (MaterialDetailDto item : profitLossOrderDtoList) {
SupplyRequest supplyRequest =
new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.MATERIAL_PRPFITLOSS.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setStartTime(item.getStartTime())
.setEndTime(item.getEndTime()).setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue())
.setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,163 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialPurchaseOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialPurchaseOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资订货单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialPurchaseOrderServiceImpl implements IMaterialPurchaseOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.PURCHASE_PLAN_GENERATION.getValue(),
SupplyCategory.PURCHASE_PLAN_GENERATION.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 订货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 订货单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> purchaseOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
purchaseOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : purchaseOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(purchaseOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_PURCHASE.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑订货单
*
* @param purchaseOrderDtoList 订货信息
* @return 操作结果
*/
@Override
public R<?> addOrEditPurchaseOrder(List<MaterialDetailDto> purchaseOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(purchaseOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
for (MaterialDetailDto item : purchaseOrderDtoList) {
SupplyRequest supplyRequest =
new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.MATERIAL_PURCHASE.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setSpecificationInventory(item.getSpecificationInventory()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue())
.setPurposeLocationId(item.getPurposeLocationId()).setSupplierId(item.getSupplierId())
.setApplicantId(item.getApplicantId()).setApplyTime(item.getApplyTime()).setReason(item.getReason())
.setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,173 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReturnOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialReturnOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资退货单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialReturnOrderServiceImpl implements IMaterialReturnOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 退货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退货单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> returnOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
returnOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : returnOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(returnOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_RETURN.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑退货单
*
* @param returnOrderDtoList 退货信息
* @return 操作结果
*/
@Override
public R<?> addOrEditReturnOrder(List<MaterialDetailDto> returnOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(returnOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
//添加原始单据号
if(returnOrderDtoList.get(0).getOriginalBusNo()!=null){
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.addOriginalBusNo(returnOrderDtoList.get(0).getOriginalBusNo(), returnOrderDtoList.get(0).getBusNo());
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (MaterialDetailDto item : returnOrderDtoList) {
SupplyRequest supplyRequest =
new SupplyRequest().setBusNo(item.getBusNo()).setTypeEnum(SupplyType.MATERIAL_RETURN.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory())
.setOccurrenceTime(item.getOccurrenceTime()).setEndTime(item.getEndTime())
.setLotNumber(item.getLotNumber()).setInvoiceNo(item.getInvoiceNo()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.WAREHOUSE.getValue())
.setSourceLocationId(item.getSourceLocationId()).setApplicantId(item.getApplicantId())
.setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,178 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReturnToWarehouseOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialReturnToWarehouseOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资退库单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialReturnToWarehouseOrderServiceImpl implements
IMaterialReturnToWarehouseOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 退库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退库单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> returnToWarehouseOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
returnToWarehouseOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : returnToWarehouseOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(returnToWarehouseOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_PRODUCT_RETURN.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑退库单
*
* @param returnToWarehouseOrderDtoList 退库信息
* @return 操作结果
*/
@Override
public R<?> addOrEditReturnToWarehouseOrder(List<MaterialDetailDto> returnToWarehouseOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(returnToWarehouseOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
//添加原始单据号
if(returnToWarehouseOrderDtoList.get(0).getOriginalBusNo()!=null){
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.addOriginalBusNo(returnToWarehouseOrderDtoList.get(0).getOriginalBusNo(), returnToWarehouseOrderDtoList.get(0).getBusNo());
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (MaterialDetailDto item : returnToWarehouseOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.MATERIAL_PRODUCT_RETURN.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setStartTime(item.getStartTime())
.setEndTime(item.getEndTime()).setPractitionerId(item.getPractitionerId())
.setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.DEPARTMENT.getValue())
.setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue())
.setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,185 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialStockInOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialStockInOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资进货单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialStockInOrderServiceImpl implements IMaterialStockInOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption
.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(
SupplyCategory.PRESENT.getValue(), SupplyCategory.PRESENT.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 进货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 进货单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> stockInOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
stockInOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
// 包装情况
e.setPackagingConditionEnum_enumText(
EnumUtils.getInfoByValue(PackagingCondition.class, e.getPackagingConditionEnum()));
// 验收结果
e.setAcceptanceResultEnum_enumText(
EnumUtils.getInfoByValue(AcceptanceResult.class, e.getAcceptanceResultEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : stockInOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(stockInOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_STOCKIN.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑进货单
*
* @param stockInOrderDtoList 进货信息
* @return 操作结果
*/
@Override
public R<?> addOrEditStockInOrder(List<MaterialDetailDto> stockInOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(stockInOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
//添加原始单据号
if(stockInOrderDtoList.get(0).getOriginalBusNo()!=null){
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.addOriginalBusNo(stockInOrderDtoList.get(0).getOriginalBusNo(), stockInOrderDtoList.get(0).getBusNo());
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (MaterialDetailDto item : stockInOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.MATERIAL_STOCKIN.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setBatchInventory(item.getBatchInventory()).setSpecificationInventory(item.getSpecificationInventory())
.setPrice(item.getPrice()).setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setStartTime(item.getStartTime())
.setEndTime(item.getEndTime()).setPractitionerId(item.getPractitionerId())
.setLotNumber(item.getLotNumber()).setInvoiceNo(item.getInvoiceNo()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue())
.setPurposeLocationId(item.getPurposeLocationId()).setPackagingConditionEnum(item.getPackagingConditionEnum())
.setAcceptanceResultEnum(item.getAcceptanceResultEnum()).setSupplierId(item.getSupplierId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setReason(item.getReason())
.setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,181 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialStockOutOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialStockOutOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资出库单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialStockOutOrderServiceImpl implements IMaterialStockOutOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.IN_HOSPITAL_OUTBOUND.getValue(),
SupplyCategory.IN_HOSPITAL_OUTBOUND.getInfo()));
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getValue(),
SupplyCategory.OUT_OF_HOSPITAL_OUTBOUND.getInfo()));
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.OPTICAL_MATERIALS.getValue(),
SupplyCategory.OPTICAL_MATERIALS.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 出库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 出库单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> stockOutOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
stockOutOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : stockOutOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(),item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(),item.getMinUnitCode_dictText()
));
item.setUnitList(unitList);
}
return R.ok(stockOutOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_STOCKOUT.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑出库单
*
* @param stockOutOrderDtoList 出库信息
* @return 操作结果
*/
@Override
public R<?> addOrEditStockOutOrder(List<MaterialDetailDto> stockOutOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(stockOutOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
//添加原始单据号
if(stockOutOrderDtoList.get(0).getOriginalBusNo()!=null){
// 审批单据并返回单据详情
List<SupplyRequest> agreedList = supplyRequestService.addOriginalBusNo(stockOutOrderDtoList.get(0).getOriginalBusNo(), stockOutOrderDtoList.get(0).getBusNo());
if (agreedList.isEmpty()) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (MaterialDetailDto item : stockOutOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.MATERIAL_STOCKOUT.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setPrice(item.getPrice())
.setTotalPrice(item.getTotalPrice()).setRetailPrice(item.getRetailPrice())
.setTotalRetailPrice(item.getTotalRetailPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setStartTime(item.getStartTime())
.setEndTime(item.getEndTime()).setPractitionerId(item.getPractitionerId())
.setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.WAREHOUSE.getValue())
.setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.DEPARTMENT.getValue())
.setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,167 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialStocktakingOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialStocktakingOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资盘点单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialStocktakingOrderServiceImpl implements IMaterialStocktakingOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(
SupplyCategory.GENERAL_STOCKTAKING.getValue(), SupplyCategory.GENERAL_STOCKTAKING.getInfo()));
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(
SupplyCategory.MONTHLY_STOCKTAKING.getValue(), SupplyCategory.MONTHLY_STOCKTAKING.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 盘点单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 盘点单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> stocktakingOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
stocktakingOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : stocktakingOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(stocktakingOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_STOCKTAKING.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑盘点单
*
* @param stocktakingOrderDtoList 盘点信息
* @return 操作结果
*/
@Override
public R<?> addOrEditStocktakingOrder(List<MaterialDetailDto> stocktakingOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList =
supplyRequestService.getSupplyByBusNo(stocktakingOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (MaterialDetailDto item : stocktakingOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.MATERIAL_STOCKTAKING.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue()).setCategoryEnum(item.getCategoryEnum())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity())
.setTotalQuantity(item.getTotalQuantity()).setPrice(item.getPrice()).setTotalPrice(item.getTotalPrice())
.setRetailPrice(item.getRetailPrice()).setTotalRetailPrice(item.getTotalRetailPrice())
.setBatchInventory(item.getBatchInventory()).setLotNumber(item.getLotNumber()).setSupplierId(item.getSupplierId())
.setTraceNo(item.getTraceNo()).setTraceNoUnitCode(item.getTraceNoUnitCode())
.setReasonCode(item.getReasonCode()).setReason(item.getReason())
.setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue()).setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,165 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialTransferInOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialTransferInOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资调入单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialTransferInOrderServiceImpl implements IMaterialTransferInOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 调入单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调入单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> transferInOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
transferInOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : transferInOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(transferInOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_TRANSFERIN.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑调入单
*
* @param transferInOrderDtoList 调入信息
* @return 操作结果
*/
@Override
public R<?> addOrEditTransferInOrder(List<MaterialDetailDto> transferInOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(transferInOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (MaterialDetailDto item : transferInOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.MATERIAL_TRANSFERIN.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setRetailPrice(item.getPrice())
.setTotalRetailPrice(item.getTotalPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setEndTime(item.getEndTime())
.setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.WAREHOUSE.getValue())
.setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue())
.setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,165 @@
package com.openhis.web.materialmanage.appservice.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.MessageUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.inventorymanage.dto.ProductStocktakingInitDto;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialTransferOutOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialInitDto;
import com.openhis.web.materialmanage.mapper.MaterialCommonMapper;
import com.openhis.web.materialmanage.mapper.MaterialTransferOutOrderMapper;
import com.openhis.workflow.domain.SupplyRequest;
import com.openhis.workflow.service.ISupplyRequestService;
/**
* 物资调出单
*
* @author yuxj
* @date 2025-07-22
*/
@Service
public class MaterialTransferOutOrderServiceImpl implements IMaterialTransferOutOrderService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Resource
private ISupplyRequestService supplyRequestService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private MaterialCommonMapper materialCommonMapper;
/**
* 初始化
*
* @return 初始化信息
*/
@Override
public R<?> init() {
MaterialInitDto purchaseOrderInitDto = materialCommonService.init();
// 单据分类
List<MaterialInitDto.IntegerOption> supplyCategoryOption = new ArrayList<>();
supplyCategoryOption.add(new MaterialInitDto.IntegerOption(SupplyCategory.NORMAL.getValue(),
SupplyCategory.NORMAL.getInfo()));
purchaseOrderInitDto.setSupplyCategoryOptions(supplyCategoryOption);
return R.ok(purchaseOrderInitDto);
}
/**
* 调出单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调出单单据详情
*/
@Override
public R<?> getDetailPage(String busNo, Integer pageNo, Integer pageSize) {
Page<MaterialDetailDto> transferOutOrderDtoDetailPage =
materialCommonMapper.getDetailPage(new Page<>(pageNo, pageSize), busNo);
transferOutOrderDtoDetailPage.getRecords().forEach(e -> {
// 单据分类
e.setCategoryEnum_enumText(EnumUtils.getInfoByValue(SupplyCategory.class, e.getCategoryEnum()));
// 单据状态
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(SupplyStatus.class, e.getStatusEnum()));
// 单据类型
e.setTypeEnum_enumText(EnumUtils.getInfoByValue(SupplyType.class, e.getTypeEnum()));
});
List<MaterialDetailDto.Option> unitList;
for (MaterialDetailDto item : transferOutOrderDtoDetailPage.getRecords()) {
unitList = new ArrayList<>();
unitList.add(new MaterialDetailDto.Option(item.getMaxUnitCode(), item.getMaxUnitCode_dictText()));
unitList.add(new MaterialDetailDto.Option(item.getMinUnitCode(), item.getMinUnitCode_dictText()));
item.setUnitList(unitList);
}
return R.ok(transferOutOrderDtoDetailPage);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@Override
public R<?> getBusNo() {
ProductStocktakingInitDto initDto = new ProductStocktakingInitDto();
// 单据号
initDto.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MATERIAL_TRANSFEROUT.getPrefix(), 4));
return R.ok(initDto);
}
/**
* 添加/编辑调入单
*
* @param transferOutOrderDtoList 调入信息
* @return 操作结果
*/
@Override
public R<?> addOrEditTransferOutOrder(List<MaterialDetailDto> transferOutOrderDtoList) {
// 请求数据取得
List<SupplyRequest> requestList = supplyRequestService.getSupplyByBusNo(transferOutOrderDtoList.get(0).getBusNo());
if (!requestList.isEmpty()) {
// 请求id取得
List<Long> requestIdList = requestList.stream().map(SupplyRequest::getId).collect(Collectors.toList());
// 单据信息删除
supplyRequestService.removeByIds(requestIdList);
}
List<SupplyRequest> supplyRequestList = new ArrayList<>();
Date applyTime = DateUtils.getNowDate();
for (MaterialDetailDto item : transferOutOrderDtoList) {
SupplyRequest supplyRequest = new SupplyRequest().setBusNo(item.getBusNo())
.setTypeEnum(SupplyType.MATERIAL_TRANSFEROUT.getValue())
.setStatusEnum(SupplyStatus.PENDING_REVIEW.getValue())
.setItemTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION).setItemId(item.getItemId())
.setUnitCode(item.getUnitCode()).setItemQuantity(item.getItemQuantity()).setRetailPrice(item.getPrice())
.setTotalRetailPrice(item.getTotalPrice()).setBatchInventory(item.getBatchInventory())
.setSpecificationInventory(item.getSpecificationInventory()).setEndTime(item.getEndTime())
.setLotNumber(item.getLotNumber()).setTraceNo(item.getTraceNo())
.setTraceNoUnitCode(item.getTraceNoUnitCode()).setSupplierId(item.getSupplierId())
.setReason(item.getReason()).setSourceTypeEnum(LocationForm.WAREHOUSE.getValue())
.setSourceLocationId(item.getSourceLocationId()).setPurposeTypeEnum(LocationForm.WAREHOUSE.getValue())
.setPurposeLocationId(item.getPurposeLocationId())
.setApplicantId(item.getApplicantId()).setApplyTime(applyTime).setRemake(item.getRemake());
supplyRequestList.add(supplyRequest);
}
// 更新请求表
boolean flg = supplyRequestService.saveOrUpdateBatch(supplyRequestList);
if (!flg) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00011, null));
}
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null));
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialProfitLossOrderService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资损益单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/profitLoss-order")
@Slf4j
public class MaterialProfitLossOrderController {
@Autowired
private IMaterialProfitLossOrderService materialProfitLossOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 损益单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialProfitLossOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 损益单单据列表
*
* @param profitLossOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 损益单据分页列表
*/
@GetMapping(value = "/profitLoss-order-page")
public R<?> getPage(MaterialSearchParam profitLossOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(profitLossOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.MATERIAL_PRPFITLOSS.getValue());
}
/**
* 损益单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 损益单单据详情
*/
@GetMapping(value = "/profitLoss-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialProfitLossOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialProfitLossOrderService.getBusNo();
}
/**
* 添加/编辑损益单
*
* @param profitLossOrderDtoList 损益信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-profitLossOrder")
public R<?> addOrEditProfitLossOrder(@Validated @RequestBody List<MaterialDetailDto> profitLossOrderDtoList) {
return materialProfitLossOrderService.addOrEditProfitLossOrder(profitLossOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-profitLossOrder")
public R<?> deleteProfitLossOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.lossReportApproved(busNo);
}
}

View File

@@ -0,0 +1,140 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialPurchaseOrderService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资订货单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/purchase-order")
@Slf4j
public class MaterialPurchaseOrderController {
@Autowired
private IMaterialPurchaseOrderService materialPurchaseOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 订货单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialPurchaseOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 订货单单据列表
*
* @param purchaseOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 订货单据分页列表
*/
@GetMapping(value = "/purchase-order-page")
public R<?> getPage(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.MATERIAL_PURCHASE.getValue());
}
/**
* 订货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 订货单单据详情
*/
@GetMapping(value = "/purchase-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialPurchaseOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialPurchaseOrderService.getBusNo();
}
/**
* 添加/编辑订货单
*
* @param purchaseOrderDtoList 订货信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-purchaseOrder")
public R<?> addOrEditPurchaseOrder(@Validated @RequestBody List<MaterialDetailDto> purchaseOrderDtoList) {
return materialPurchaseOrderService.addOrEditPurchaseOrder(purchaseOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-purchaseOrder")
public R<?> deletePurchaseOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.purchaseOrderAgreeApproval(busNo);
}
}

View File

@@ -0,0 +1,140 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.appservice.IMaterialReturnOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资退货单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/return-order")
@Slf4j
public class MaterialReturnOrderController {
@Autowired
private IMaterialReturnOrderService materialReturnOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 退货单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialReturnOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 退货单单据列表
*
* @param returnOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 退货单据分页列表
*/
@GetMapping(value = "/return-order-page")
public R<?> getPage(MaterialSearchParam returnOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(returnOrderSearchParam, pageNo, pageSize, searchKey, request,
"1", SupplyType.MATERIAL_RETURN.getValue());
}
/**
* 退货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退货单单据详情
*/
@GetMapping(value = "/return-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialReturnOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialReturnOrderService.getBusNo();
}
/**
* 添加/编辑采购单
*
* @param returnOrderDtoList 采购信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-returnOrder")
public R<?> addOrEditReturnOrder(@Validated @RequestBody List<MaterialDetailDto> returnOrderDtoList) {
return materialReturnOrderService.addOrEditReturnOrder(returnOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-returnOrder")
public R<?> deleteReturnOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.purchaseReturnApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.appservice.IMaterialReturnToWarehouseOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资退库单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/returnToWarehouse-order")
@Slf4j
public class MaterialReturnToWarehouseOrderController {
@Autowired
private IMaterialReturnToWarehouseOrderService materialReturnToWarehouseOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 退库单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialReturnToWarehouseOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 退库单单据列表
*
* @param returnToWarehouseOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 退库单据分页列表
*/
@GetMapping(value = "/returnToWarehouse-order-page")
public R<?> getPage(MaterialSearchParam returnToWarehouseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(returnToWarehouseOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.MATERIAL_PRODUCT_RETURN.getValue());
}
/**
* 退库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 退库单单据详情
*/
@GetMapping(value = "/returnToWarehouse-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialReturnToWarehouseOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialReturnToWarehouseOrderService.getBusNo();
}
/**
* 添加/编辑退库单
*
* @param returnToWarehouseOrderDtoList 退库信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-returnToWarehouseOrder")
public R<?> addOrEditReturnToWarehouseOrder(@Validated @RequestBody List<MaterialDetailDto> returnToWarehouseOrderDtoList) {
return materialReturnToWarehouseOrderService.addOrEditReturnToWarehouseOrder(returnToWarehouseOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-returnToWarehouseOrder")
public R<?> deleteReturnToWarehouseOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.returnIssueApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.appservice.IMaterialStockInOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资进货单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/stockIn-order")
@Slf4j
public class MaterialStockInOrderController {
@Autowired
private IMaterialStockInOrderService materialStockInOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 进货单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialStockInOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 进货单单据列表
*
* @param stockInOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 进货单据分页列表
*/
@GetMapping(value = "/stockIn-order-page")
public R<?> getPage(MaterialSearchParam stockInOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(stockInOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.MATERIAL_STOCKIN.getValue());
}
/**
* 进货单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 进货单单据详情
*/
@GetMapping(value = "/stockIn-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialStockInOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialStockInOrderService.getBusNo();
}
/**
* 添加/编辑进货单
*
* @param stockInOrderDtoList 进货信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-stockInOrder")
public R<?> addOrEditStockInOrder(@Validated @RequestBody List<MaterialDetailDto> stockInOrderDtoList) {
return materialStockInOrderService.addOrEditStockInOrder(stockInOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-stockInOrder")
public R<?> deleteStockInOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.purchaseInventoryApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.appservice.IMaterialStockOutOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资出库单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/stockOut-order")
@Slf4j
public class MaterialStockOutOrderController {
@Autowired
private IMaterialStockOutOrderService materialStockOutOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 出库单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialStockOutOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 出库单单据列表
*
* @param stockOutOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 出库单据分页列表
*/
@GetMapping(value = "/stockOut-order-page")
public R<?> getPage(MaterialSearchParam stockOutOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(stockOutOrderSearchParam, pageNo, pageSize, searchKey, request,
"1", SupplyType.MATERIAL_STOCKOUT.getValue());
}
/**
* 出库单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 出库单单据详情
*/
@GetMapping(value = "/stockOut-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialStockOutOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialStockOutOrderService.getBusNo();
}
/**
* 添加/编辑出库单
*
* @param stockOutOrderDtoList 出库信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-stockOutOrder")
public R<?> addOrEditStockOutOrder(@Validated @RequestBody List<MaterialDetailDto> stockOutOrderDtoList) {
return materialStockOutOrderService.addOrEditStockOutOrder(stockOutOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-stockOutOrder")
public R<?> deleteStockOutOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.requisitionIssueApproved(busNo);
}
}

View File

@@ -0,0 +1,138 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.appservice.IMaterialStocktakingOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资盘点单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/stocktaking-order")
@Slf4j
public class MaterialStocktakingOrderController {
@Autowired
private IMaterialStocktakingOrderService materialStocktakingOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 盘点单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialStocktakingOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 盘点单单据列表
*
* @param stocktakingOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 盘点单据分页列表
*/
@GetMapping(value = "/stocktaking-order-page")
public R<?> getPage(MaterialSearchParam stocktakingOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(stocktakingOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.MATERIAL_STOCKTAKING.getValue());
}
/**
* 盘点单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 盘点单单据详情
*/
@GetMapping(value = "/stocktaking-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialStocktakingOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialStocktakingOrderService.getBusNo();
}
/**
* 添加/编辑盘点单
*
* @param stocktakingOrderDtoList 盘点信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-stocktakingOrder")
public R<?> addOrEditStocktakingOrder(@Validated @RequestBody List<MaterialDetailDto> stocktakingOrderDtoList) {
return materialStocktakingOrderService.addOrEditStocktakingOrder(stocktakingOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-stocktakingOrder")
public R<?> deleteStocktakingOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.productStocktakingApproved(busNo);
}
}

View File

@@ -0,0 +1,140 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.appservice.IMaterialTransferInOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资调入单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/transferIn-order")
@Slf4j
public class MaterialTransferInOrderController {
@Autowired
private IMaterialTransferInOrderService materialTransferInOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 调入单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialTransferInOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 调入单单据列表
*
* @param transferInOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 调入单据分页列表
*/
@GetMapping(value = "/transferIn-order-page")
public R<?> getPage(MaterialSearchParam transferInOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(transferInOrderSearchParam, pageNo, pageSize, searchKey, request,
null, SupplyType.MATERIAL_TRANSFERIN.getValue());
}
/**
* 调入单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调入单单据详情
*/
@GetMapping(value = "/transferIn-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialTransferInOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialTransferInOrderService.getBusNo();
}
/**
* 添加/编辑采购单
*
* @param transferInOrderDtoList 采购信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-transferInOrder")
public R<?> addOrEditTransferInOrder(@Validated @RequestBody List<MaterialDetailDto> transferInOrderDtoList) {
return materialTransferInOrderService.addOrEditTransferInOrder(transferInOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-transferInOrder")
public R<?> deleteTransferInOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.transferInAgreeApproved(busNo);
}
}

View File

@@ -0,0 +1,140 @@
package com.openhis.web.materialmanage.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.core.common.core.domain.R;
import com.openhis.common.enums.LocationForm;
import com.openhis.common.enums.SupplyType;
import com.openhis.web.materialmanage.appservice.IMaterialCommonService;
import com.openhis.web.materialmanage.appservice.IMaterialReceiptApprovalService;
import com.openhis.web.materialmanage.appservice.IMaterialTransferOutOrderService;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
import lombok.extern.slf4j.Slf4j;
/**
* 物资调出单
*
* @author yuxj
* @date 2025-07-22
*/
@RestController
@RequestMapping("/material/transferOut-order")
@Slf4j
public class MaterialTransferOutOrderController {
@Autowired
private IMaterialTransferOutOrderService materialTransferOutOrderService;
@Autowired
private IMaterialCommonService materialCommonService;
@Autowired
private IMaterialReceiptApprovalService materialReceiptApprovalService;
/**
* 调出单初始化
*
* @return 初始化信息
*/
@GetMapping(value = "/init")
public R<?> init() {
return materialTransferOutOrderService.init();
}
/**
* 获取器材
*
* @param purchaseOrderSearchParam 查询条件
* @return 器材信息
*/
@GetMapping(value = "/device-info")
public R<?> getDeviceInfo(MaterialSearchParam purchaseOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getDeviceInfo(purchaseOrderSearchParam, pageNo, pageSize, searchKey, request);
}
/**
* 调出单单据列表
*
* @param transferOutOrderSearchParam 查询条件
* @param pageNo 当前页码
* @param pageSize 查询条数
* @param searchKey 模糊查询关键字
* @param request 请求数据
* @return 调出单据分页列表
*/
@GetMapping(value = "/transferOut-order-page")
public R<?> getPage(MaterialSearchParam transferOutOrderSearchParam,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "searchKey", required = false) String searchKey, HttpServletRequest request) {
return materialCommonService.getPage(transferOutOrderSearchParam, pageNo, pageSize, searchKey, request,
"1", SupplyType.MATERIAL_TRANSFEROUT.getValue());
}
/**
* 调出单单据详情
*
* @param busNo 单据号
* @param pageNo 当前页码
* @param pageSize 查询条数
* @return 调出单单据详情
*/
@GetMapping(value = "/transferOut-order-detail-page")
public R<?> getDetail(@RequestParam String busNo,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return materialTransferOutOrderService.getDetailPage(busNo, pageNo, pageSize);
}
/**
* 获取单据号
*
* @return 初始化信息
*/
@GetMapping(value = "/busNo-init")
public R<?> getBusNo() {
return materialTransferOutOrderService.getBusNo();
}
/**
* 添加/编辑采购单
*
* @param transferOutOrderDtoList 采购信息
* @return 操作结果
*/
@PutMapping("/addOrEdit-transferOutOrder")
public R<?> addOrEditTransferOutOrder(@Validated @RequestBody List<MaterialDetailDto> transferOutOrderDtoList) {
return materialTransferOutOrderService.addOrEditTransferOutOrder(transferOutOrderDtoList);
}
/**
* 删除单据
*
* @param busNo 单据号
* @return 操作结果
*/
@DeleteMapping("/delete-transferOutOrder")
public R<?> deleteTransferOutOrder(@RequestParam String busNo) {
return materialCommonService.deleteOrder(busNo);
}
/**
* 同意审批
*
* @param busNo 单据号
* @return 操作结果
*/
@PutMapping("/agree-approval")
public R<?> agreeApproval(@RequestParam String busNo) {
return materialReceiptApprovalService.transferOutAgreeApproved(busNo);
}
}

View File

@@ -0,0 +1,212 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.materialmanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 单据详细信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class MaterialDetailDto implements Serializable {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 单据号 */
private String busNo;
/** 再生成单据号 */
private String originalBusNo;
/** 药品编码 */
private String itemBusNo;
/** 物品id */
@JsonSerialize(using = ToStringSerializer.class)
private Long itemId;
/** 物品名称 */
private String itemName;
/** 规格 */
private String totalVolume;
/** 选择单位 */
@Dict(dictCode = "unit_code")
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;
/** 拆零比 */
private String partPercent;
/** 数量 */
private BigDecimal itemQuantity;
/** 合计数量 */
private BigDecimal totalQuantity;
/** 单价 */
private BigDecimal price;
/** 总价 */
private BigDecimal totalPrice;
/** 零售价 */
private BigDecimal retailPrice;
/** 零价金额 */
private BigDecimal totalRetailPrice;
/** 厂家/产地 */
private String manufacturerText;
/** 批准文号 */
private String approvalNumber;
/** 批次库存 */
private BigDecimal batchInventory;
/** 规格库存 */
private BigDecimal specificationInventory;
/** 备注 */
private String remake;
/** 理由类型 */
private String reasonCode;
/** 摘要(理由) */
private String reason;
/** 供应商 */
@JsonSerialize(using = ToStringSerializer.class)
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier")
private Long supplierId;
private String supplierId_dictText;
/** 源仓库类型 */
private Integer sourceTypeEnum;
/** 源仓库 */
@JsonSerialize(using = ToStringSerializer.class)
private Long sourceLocationId;
/** 目的仓库类型 */
private Integer purposeTypeEnum;
/** 目的仓库 */
@JsonSerialize(using = ToStringSerializer.class)
private Long purposeLocationId;
/** 采购员 */
@JsonSerialize(using = ToStringSerializer.class)
private Long applicantId;
/** 审批人 */
@JsonSerialize(using = ToStringSerializer.class)
private Long approverId;
/** 审批时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date approvalTime;
/** 申请时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date applyTime;
/** 状态 */
private Integer statusEnum;
private String statusEnum_enumText;
/** 类型 */
private Integer typeEnum;
private String typeEnum_enumText;
/** 单据分类 */
private Integer categoryEnum;
private String categoryEnum_enumText;
/** 供应商联系人 */
private String phone;
/** 仓库员 */
@JsonSerialize(using = ToStringSerializer.class)
private Long practitionerId;
/** 发票号 */
private String invoiceNo;
/** 产品批号 */
private String lotNumber;
/** 生产日期 */
private Date startTime;
/** 失效日期 */
private Date endTime;
/** 追溯码*/
private String traceNo;
/** 追溯码单位 */
@Dict(dictCode = "unit_code")
private String traceNoUnitCode;
private String traceNoUnitCode_dictText;
/** 包装情况 */
private Integer packagingConditionEnum;
private String packagingConditionEnum_enumText;
/** 验收结果 */
private Integer acceptanceResultEnum;
private String acceptanceResultEnum_enumText;
/** 禁用日期 */
private Date occurrenceTime;
/**
* 单位列表
*/
private List<Option> unitList;
@Data
public static class Option {
@Dict(dictCode = "unit_code")
private String value;
private String value_dictText;
public Option(String value, String value_dictText) {
this.value = value;
this.value_dictText = value_dictText;
}
public Option() {
}
}
}

View File

@@ -0,0 +1,120 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.materialmanage.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 物资信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class MaterialDeviceInfoDto implements Serializable {
/** 物品id */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 物品编号 */
private String busNo;
/** 物品名称 */
private String name;
/** 拼音码 */
private String pyStr;
/** 规格 */
private String totalVolume;
/** 包装单位 */
@Dict(dictCode = "unit_code")
private String unitCode;
private String unitCode_dictText;
/** 最小单位 */
@Dict(dictCode = "unit_code")
private String minUnitCode;
private String minUnitCode_dictText;
/** 拆零比 */
private BigDecimal partPercent;
/** 产品批号 */
private String lotNumber;
// /** 价格单位 */
// @Dict(dictCode = "unit_code")
// private String conditionUnitCode;
// private String conditionUnitCode_dictText;
/** 单价 */
private BigDecimal price;
/** 零售价 */
private BigDecimal retailPrice;
/** 厂家/产地 */
private String manufacturerText;
/** 批准文号 */
private String approvalNumber;
/** 库存最小警戒线 */
private BigDecimal itemMinQuantity;
/** 批次库存 */
private BigDecimal batchInventory;
/** 规格库存 */
private BigDecimal specificationInventory;
/** 供应商 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier")
@JsonSerialize(using = ToStringSerializer.class)
private Long supplierId;
private String supplierId_dictText;
/** 仓库 */
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
/** 生产日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date productionDate;
/** 失效日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date expirationDate;
/**
* 单位列表
*/
private List<Option> unitList;
@Data
public static class Option {
@Dict(dictCode = "unit_code")
private String value;
private String value_dictText;
public Option(String value, String value_dictText) {
this.value = value;
this.value_dictText = value_dictText;
}
}
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.materialmanage.dto;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 单据信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class MaterialDto implements Serializable {
/** 单据号 */
private String supplyBusNo;
/** 状态 */
private Integer statusEnum;
private String statusEnum_enumText;
/** 类型 */
private Integer typeEnum;
private String typeEnum_enumText;
/** 供应商 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_supplier")
@JsonSerialize(using = ToStringSerializer.class)
private Long supplierId;
private String supplierId_dictText;
/** 仓库类型 */
private Integer locationTypeEnum;
private String locationTypeEnum_enumText;
/** 仓库 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_location")
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
private String locationId_dictText;
/** 采购员 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner")
@JsonSerialize(using = ToStringSerializer.class)
private Long applicantId;
private String applicantId_dictText;
/** 审批人 */
@Dict(dictCode = "id", dictText = "name", dictTable = "adm_practitioner")
@JsonSerialize(using = ToStringSerializer.class)
private Long approverId;
private String approverId_dictText;
/** 审批时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date approvalTime;
/** 制单日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date applyTime;
}

View File

@@ -0,0 +1,147 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.materialmanage.dto;
import java.io.Serializable;
import java.util.List;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.administration.domain.Organization;
import com.openhis.web.common.dto.LocationDto;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 单据初期信息
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class MaterialInitDto implements Serializable {
/**
* 单据号
*/
private String busNo;
/**
* 库房类型列表
*/
private List<WarehouseOption> warehouseTypeOption;
/**
* 库房列表
*/
private List<LongOption> warehouseOption;
/**
* 供应商列表
*/
private List<SupplierOption> supplierOption;
/**
* 人员列表
*/
private List<LongOption> practitionerOption;
/**
* 审批状态
*/
private List<IntegerOption> supplyStatusOptions;
/**
* 单据类型
*/
private List<IntegerOption> supplyTypeOptions;
/**
* 单据分类
*/
private List<IntegerOption> supplyCategoryOptions;
/**
* 包装情况
*/
private List<IntegerOption> packagingConditionOptions;
/**
* 包装情况
*/
private List<IntegerOption> acceptanceResultoryOptions;
/**
* 仓库
*/
private List<LocationDto> WarehouseListOptions;
/**
* 科室
*/
private List<Organization> departmentListOptions;
@Data
public static class LongOption {
@JsonSerialize(using = ToStringSerializer.class)
private Long value;
private String label;
public LongOption(Long value, String label) {
this.value = value;
this.label = label;
}
}
@Data
public static class SupplierOption {
@JsonSerialize(using = ToStringSerializer.class)
private Long value;
private String label;
private String phone;
public SupplierOption(Long value, String label, String phone) {
this.value = value;
this.label = label;
this.phone = phone;
}
}
@Data
public static class IntegerOption {
private Integer value;
private String label;
public IntegerOption(Integer value, String label) {
this.value = value;
this.label = label;
}
}
@Data
public static class WarehouseOption {
private Integer value;
private String label;
private List<LocationDto> locationOption;
private List<WarehouseItemOption> orderOption;
public WarehouseOption(Integer value, String label,List<LocationDto> locationOption,List<WarehouseItemOption> orderOption) {
this.value = value;
this.label = label;
this.locationOption = locationOption;
this.orderOption = orderOption;
}
}
@Data
public static class WarehouseItemOption {
private Integer value;
private String label;
public WarehouseItemOption(Integer value, String label) {
this.value = value;
this.label = label;
}
}
}

View File

@@ -0,0 +1,59 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.web.materialmanage.dto;
import java.io.Serializable;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 单据查询条件
*
* @author yuxj
* @date 2025-07-22
*/
@Data
@Accessors(chain = true)
public class MaterialSearchParam implements Serializable {
/** id */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 单据号 */
private String busNo;
/** 采购员 */
private String applicantName;
/** 项目名 */
private String name;
/** 拼音码 */
private String pyStr;
/** 供应商id */
@JsonSerialize(using = ToStringSerializer.class)
private Long supplierId;
/** 仓库类型 */
private Integer locationTypeEnum;
/** 仓库 */
@JsonSerialize(using = ToStringSerializer.class)
private Long locationId;
/** 类型 */
private Integer typeEnum;
/** 单据状态 */
private Integer statusEnum;
/** 再生成单据号flg */
private String originalBusNoFlg;
}

View File

@@ -0,0 +1,57 @@
package com.openhis.web.materialmanage.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.web.materialmanage.dto.MaterialDetailDto;
import com.openhis.web.materialmanage.dto.MaterialDto;
import com.openhis.web.materialmanage.dto.MaterialDeviceInfoDto;
import com.openhis.web.materialmanage.dto.MaterialSearchParam;
/**
* 物资共通 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialCommonMapper {
/**
* 根据供应商获取器材
*
* @param page 分页
* @param queryWrapper 查询条件
* @param locationId 仓库id
* @return 药品信息
*/
Page<MaterialDeviceInfoDto> getDeviceInfo(
@Param("page") Page<MaterialDeviceInfoDto> page,
@Param(Constants.WRAPPER) QueryWrapper<MaterialSearchParam> queryWrapper,
@Param("locationId") Long locationId,@Param("supplierId") Long supplierId);
/**
* 查询订货单分页列表
*
* @param page 分页
* @param queryWrapper 查询条件
* @param originalBusNoFlg 再生成单据号flg
* @param locationFlg 仓库flg
* @return 订货单分页列表
*/
Page<MaterialDto> getPage(@Param("page") Page<MaterialDto> page,
@Param(Constants.WRAPPER) QueryWrapper<MaterialSearchParam> queryWrapper, @Param("originalBusNoFlg") String originalBusNoFlg, @Param("locationFlg") String locationFlg);
/**
* 查询单据详情
*
* @param page 分页
* @param busNo 单据号
* @return 单据详情
*/
Page<MaterialDetailDto> getDetailPage(@Param("page") Page<MaterialDetailDto> page,
@Param("busNo") String busNo);
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资损益单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialProfitLossOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资订货单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialPurchaseOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资进货单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialReturnOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资退库单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialReturnToWarehouseOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资进货单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialStockInOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资出库单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialStockOutOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资盘点单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialStocktakingOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资调入单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialTransferInOrderMapper {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.materialmanage.mapper;
import org.springframework.stereotype.Repository;
/**
* 物资调出单 mapper
*
* @author yuxj
* @date 2025-07-22
*/
@Repository
public interface MaterialTransferOutOrderMapper {
}