diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierService.java index b9592f0e..d6090c95 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierService.java @@ -62,4 +62,11 @@ public interface SupplierService { */ PageResult getSupplierPage(SupplierPageReqVO pageReqVO); + /** + * 获得供应商列表 + * + * @param supplierNames 供应商名称数组 + * @return 供应商列表 + */ + List getSuppliersByNames(List supplierNames); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierServiceImpl.java index f188ef79..1168fd7a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/office/supplier/service/SupplierServiceImpl.java @@ -1,6 +1,7 @@ package com.zt.plat.module.qms.office.supplier.service; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierExtendRespVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierPageReqVO; import com.zt.plat.module.qms.office.supplier.controller.vo.SupplierRespVO; @@ -90,4 +91,11 @@ public class SupplierServiceImpl implements SupplierService { return supplierMapper.selectPage(pageReqVO); } + @Override + public List getSuppliersByNames(List supplierNames) { + + return supplierMapper.selectList(Wrappers.lambdaQuery(SupplierDO.class) + .in(SupplierDO::getName, supplierNames)); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceMaintainController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceMaintainController.java index 0ad32f0c..01d59372 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceMaintainController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/admin/DeviceMaintainController.java @@ -62,8 +62,12 @@ public class DeviceMaintainController extends AbstractFileUploadController imple @PostMapping("/saveMaintainVo") @Operation(summary = "创建或获取维护数据") - public CommonResult saveMaintainVo(@RequestBody DeviceMaintainVO vo) { - return deviceMaintainService.saveMaintainVo(vo); + public CommonResult saveMaintainVo(@RequestBody DeviceMaintainVO vo) { + CommonResult ret = deviceMaintainService.saveMaintainVo(vo); + if(!ret.isSuccess()) + return ret.error(ret.getCode(), ret.getMsg()); + DeviceMaintainDO entity = ret.getData(); + return success(BeanUtils.toBean(entity, DeviceMaintainRespVO.class)); } @PostMapping("/createOrGet") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailPageReqVO.java index 62d0d552..cabc93d5 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailPageReqVO.java @@ -27,6 +27,9 @@ public class DeviceUseRecordDetailPageReqVO extends PageParam { @Schema(description = "样品编号") private String sampleCode; + @Schema(description = "明细数据类型") + private String detailType; + @Schema(description = "所属部门") private String systemDepartmentCode; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailRespVO.java index 9c6813bc..104a7911 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailRespVO.java @@ -35,6 +35,10 @@ public class DeviceUseRecordDetailRespVO { @ExcelProperty("样品编号") private String sampleCode; + @Schema(description = "明细数据类型") + @ExcelProperty("明细数据类型") + private String detailType; + @Schema(description = "所属部门") @ExcelProperty("所属部门") private String systemDepartmentCode; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailSaveReqVO.java index f04b6185..bf46a90c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/controller/vo/DeviceUseRecordDetailSaveReqVO.java @@ -25,6 +25,9 @@ public class DeviceUseRecordDetailSaveReqVO { @Schema(description = "样品编号") private String sampleCode; + @Schema(description = "明细数据类型") + private String detailType; + @Schema(description = "所属部门") private String systemDepartmentCode; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/dataobject/DeviceUseRecordDetailDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/dataobject/DeviceUseRecordDetailDO.java index cbe9fc3f..6992261c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/dataobject/DeviceUseRecordDetailDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/dal/dataobject/DeviceUseRecordDetailDO.java @@ -53,6 +53,11 @@ public class DeviceUseRecordDetailDO extends BusinessBaseDO { */ @TableField("SMP_CD") private String sampleCode; + /** + * 明细数据类型 + */ + @TableField("DTL_TY") + private String detailType; /** * 所属部门 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceMaintainService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceMaintainService.java index ad0eed78..3fafd205 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceMaintainService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceMaintainService.java @@ -17,7 +17,7 @@ import com.zt.plat.framework.common.pojo.PageResult; */ public interface DeviceMaintainService { - CommonResult saveMaintainVo(DeviceMaintainVO vo); + CommonResult saveMaintainVo(DeviceMaintainVO vo); CommonResult createOrGet(Long deviceId, String date, String dataType); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceMaintainServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceMaintainServiceImpl.java index 421ff3a7..e49d2605 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceMaintainServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/device/service/DeviceMaintainServiceImpl.java @@ -51,13 +51,13 @@ public class DeviceMaintainServiceImpl implements DeviceMaintainService { @Override @Transactional(rollbackFor = Exception.class) - public CommonResult saveMaintainVo(DeviceMaintainVO vo) { + public CommonResult saveMaintainVo(DeviceMaintainVO vo) { DeviceMaintainDO data = new DeviceMaintainDO(); BeanUtil.copyProperties(vo, data); deviceMaintainMapper.updateById(data); List maintainItemList = vo.getMaintainItemList(); deviceMaintainItemService.updateBatch(maintainItemList); - return CommonResult.success(true); + return CommonResult.success(data); } @Override diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java index 2e4b5730..582acff3 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/admin/MaterialBatchController.java @@ -1,9 +1,17 @@ package com.zt.plat.module.qms.resource.material.controller.admin; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.converters.longconverter.LongStringConverter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.zt.plat.framework.common.util.http.HttpUtils; import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.importer.MaterialBatchImportExcelVO; +import com.zt.plat.module.qms.resource.material.controller.vo.resp.MaterialBatchImportRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.service.MaterialBatchService; import com.zt.plat.module.qms.resource.material.valid.AddGroup; @@ -20,6 +28,10 @@ import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.*; import jakarta.servlet.http.*; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; import java.io.IOException; @@ -33,6 +45,8 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; import com.zt.plat.framework.excel.core.util.ExcelUtils; import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog; +import org.springframework.web.multipart.MultipartFile; + import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*; @Tag(name = "管理后台 - 物料批次") @@ -132,4 +146,46 @@ public class MaterialBatchController implements BusinessControllerMarker { return success(BeanUtils.toBean(list, MaterialBatchRespVO.class)); } + @GetMapping("/get-import-template") + @Operation(summary = "获得物料批次导入模板") + public void importTemplate(HttpServletResponse response) throws IOException { + List samples = Arrays.asList( + MaterialBatchImportExcelVO.builder() + .productName("无水硼砂") + .productCode("W11174909") + .productModelNo("95%") + .supplier("供应商 1") + .manufacturerDate(LocalDate.parse("2026-03-15")) + .dueDate(LocalDate.parse("2026-08-11")) + .inboundQuantity(BigDecimal.valueOf(100)) + .location("1 号货架") + .remark("模板数据,导入时请删除!") + .build(), + MaterialBatchImportExcelVO.builder() + .productName("氧化钙") + .productCode("W10102372") + .productModelNo("AR500g/瓶") + .supplier("供应商 2") + .manufacturerDate(LocalDate.parse("2026-04-16")) + .dueDate(LocalDate.parse("2026-09-18")) + .inboundQuantity(BigDecimal.valueOf(200)) + .location("2 号货架") + .remark("模板数据,导入时请删除!") + .build() + ); + + ExcelUtils.write(response, "物料批次导入模板.xls", "物料批次导入", + MaterialBatchImportExcelVO.class, samples); + } + + + @PostMapping("/import") + @Operation(summary = "导入物料批次") + @Parameter(name = "file", description = "Excel 文件", required = true) + public CommonResult importMaterialBatch(@RequestParam("file") MultipartFile file) throws IOException { + List importList = ExcelUtils.read(file, MaterialBatchImportExcelVO.class, 0); + MaterialBatchImportRespVO respVO = materialBatchService.importMaterialBatchList(importList); + return success(respVO); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/importer/MaterialBatchImportExcelVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/importer/MaterialBatchImportExcelVO.java new file mode 100644 index 00000000..1bf00be5 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/importer/MaterialBatchImportExcelVO.java @@ -0,0 +1,50 @@ +package com.zt.plat.module.qms.resource.material.controller.vo.importer; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 物料批次导入 Request VO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = false) +public class MaterialBatchImportExcelVO { + + @ExcelProperty("物料名称") + private String productName; + + @ExcelProperty("物料编码") + private String productCode; + + @ExcelProperty("物料型号") + private String productModelNo; + + @ExcelProperty("供应商") + private String supplier; + + @ExcelProperty("生产日期") + private LocalDate manufacturerDate; + + @ExcelProperty("到期日期") + private LocalDate dueDate; + + @ExcelProperty("数量") + private BigDecimal inboundQuantity; + + @ExcelProperty("存放位置描述") + private String location; + + @ExcelProperty("备注") + private String remark; + +} \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/resp/MaterialBatchImportRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/resp/MaterialBatchImportRespVO.java new file mode 100644 index 00000000..8def92ea --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/controller/vo/resp/MaterialBatchImportRespVO.java @@ -0,0 +1,24 @@ +package com.zt.plat.module.qms.resource.material.controller.vo.resp; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Schema(description = "管理后台 - 物料批次导入 Response VO") +@Data +public class MaterialBatchImportRespVO { + + @Schema(description = "导入成功的批次编号列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List successBatchNos; + + @Schema(description = "导入失败的批次集合,key 为行号或标识,value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED) + private Map failureBatches; + + @Schema(description = "导入成功的记录数", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer successCount; + + @Schema(description = "导入失败的记录数", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer failureCount; +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java index a6c5febc..ce8e5ffb 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchService.java @@ -6,6 +6,8 @@ import com.zt.plat.module.qms.enums.LockType; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchSaveReqVO; +import com.zt.plat.module.qms.resource.material.controller.vo.importer.MaterialBatchImportExcelVO; +import com.zt.plat.module.qms.resource.material.controller.vo.resp.MaterialBatchImportRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO; import jakarta.validation.*; @@ -189,4 +191,12 @@ public interface MaterialBatchService { * @param id 流程id */ void createVerifyBatchAssignsByLfcId(Long id); + + /** + * 导入物料批次列表 + * + * @param importList 导入数据列表 + * @return 导入结果 + */ + MaterialBatchImportRespVO importMaterialBatchList(List importList); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java index 8a846903..eee28320 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialBatchServiceImpl.java @@ -17,12 +17,16 @@ import com.zt.plat.module.qms.core.code.SequenceUtil; import com.zt.plat.module.qms.core.constant.DataTypeConstant; import com.zt.plat.module.qms.enums.AdjustType; import com.zt.plat.module.qms.enums.LockType; +import com.zt.plat.module.qms.office.supplier.dal.dataobject.SupplierDO; +import com.zt.plat.module.qms.office.supplier.service.SupplierService; import com.zt.plat.module.qms.resource.material.constant.MaterialConstants; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchPageReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchRespVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialBatchSaveReqVO; import com.zt.plat.module.qms.resource.material.controller.vo.MaterialProductRespVO; +import com.zt.plat.module.qms.resource.material.controller.vo.importer.MaterialBatchImportExcelVO; import com.zt.plat.module.qms.resource.material.controller.vo.query.MaterialProductQueryVO; +import com.zt.plat.module.qms.resource.material.controller.vo.resp.MaterialBatchImportRespVO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialBatchDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDO; import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO; @@ -42,10 +46,7 @@ import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -74,6 +75,8 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { private MaterialLifecycleService materialLifecycleService; @Autowired private BpmProcessInstanceApi bpmProcessInstanceApi; + @Autowired + private SupplierService supplierService; @Override public MaterialBatchRespVO createMaterialBatch(MaterialBatchSaveReqVO createReqVO) { @@ -519,6 +522,60 @@ public class MaterialBatchServiceImpl implements MaterialBatchService { materialBatchMapper.insertBatch(gongs); } + @Override + public MaterialBatchImportRespVO importMaterialBatchList(List importList) { + if (CollUtil.isEmpty(importList)) throw new ServiceException(1_032_160_000, "导入数据不能为空"); + log.info("导入数据:{}", importList); + List successBatchNos = new ArrayList<>(); + Map failureBatches = new LinkedHashMap<>(); + // 检验 + for (MaterialBatchImportExcelVO batch : importList) { + if (StrUtil.isEmpty(batch.getProductCode())) throw new ServiceException(1_032_160_000, "物料编码不能为空"); + if (batch.getInboundQuantity() == null || batch.getInboundQuantity().compareTo(BigDecimal.ZERO) < 0) + throw new ServiceException(1_032_160_000, "批次数量不能小于0"); + } + // 获取大类id 每个物料都得校验是否存在 + Set pdtCodes = importList.stream().map(MaterialBatchImportExcelVO::getProductCode).collect(Collectors.toSet()); + List products = materialProductService.getProductListByPdtCodes(new ArrayList<>(pdtCodes)); + if (CollUtil.isEmpty(products)) throw new ServiceException(1_032_160_000, "未找到对应的物料"); + Map productDOMapByCode = products.stream().collect(Collectors.toMap(MaterialProductDO::getCode, Function.identity())); + if (pdtCodes.size() != products.size()) { + List notFoundCodes = new ArrayList<>(); + for (String pdtCode : pdtCodes) { + if (!productDOMapByCode.containsKey(pdtCode)) { + notFoundCodes.add(pdtCode); + } + } + if (CollUtil.isNotEmpty(notFoundCodes)) { + throw new ServiceException(1_032_160_000, "未找到以下物料:" + String.join(", ", notFoundCodes)); + } + } + // 获取供应商 + Set supplierNames = importList.stream().map(MaterialBatchImportExcelVO::getSupplier).filter(Objects::nonNull).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(supplierNames)) { + List suppliers = supplierService.getSuppliersByNames(new ArrayList<>(supplierNames)); + if (CollUtil.isEmpty(suppliers)) throw new ServiceException(1_032_160_000, "未找到对应的供应商"); + Map supplierDOMapByName = suppliers.stream().collect(Collectors.toMap(SupplierDO::getName, Function.identity())); + if (supplierNames.size() != suppliers.size()) { + List notFoundNames = new ArrayList<>(); + for (String supplierName : supplierNames) { + if (!supplierDOMapByName.containsKey(supplierName)) { + notFoundNames.add(supplierName); + } + } + if (CollUtil.isNotEmpty(notFoundNames)) { + throw new ServiceException(1_032_160_000, "未找到以下供应商:" + String.join(", ", notFoundNames)); + } + } + } + return new MaterialBatchImportRespVO() + .setSuccessBatchNos(successBatchNos) + .setFailureBatches(failureBatches) + .setSuccessCount(successBatchNos.size()) + .setFailureCount(failureBatches.size()); + } + + private void lockBatchOrGongReturnExchangeCount(LockType lockType, List batchOrGongDOS, Map lifecycleDetailDOMapByBatOrGongId) { for (MaterialBatchDO batOrGong : batchOrGongDOS) { MaterialLifecycleDetailDO detailDO = lifecycleDetailDOMapByBatOrGongId.get(batOrGong.getId()); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductService.java index 45d9222a..65999bc7 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductService.java @@ -148,4 +148,12 @@ public interface MaterialProductService { * @return 是否是审核的分类 */ Boolean checkIsVerifyCategoryByPdtId(Long productId); + + /** + * 根据pdtCodes获取大类数据 + * + * @param pdtCodes pdtCodes + * @return 物料数据 + */ + List getProductListByPdtCodes(List pdtCodes); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java index f79571bc..8e80d3f3 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/material/service/MaterialProductServiceImpl.java @@ -478,4 +478,11 @@ public class MaterialProductServiceImpl implements MaterialProductService { return "1".equals(verifyCalibrateFlag); } + @Override + public List getProductListByPdtCodes(List pdtCodes) { + + return materialProductMapper.selectList(Wrappers.lambdaQuery(MaterialProductDO.class) + .in(MaterialProductDO::getCode, pdtCodes)); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java index 066759b4..df2500f2 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java @@ -51,7 +51,7 @@ public class RecordConstants { /** * 查看申请 */ - public static final String VIEW_APPLY = "文件查看申请"; + public static final String VIEW_APPLY = "文件查看"; /** * 作废 */ @@ -67,7 +67,7 @@ public class RecordConstants { /** * 文件提交 * */ - public static final String RECORD_UPDATE = "文件修改申请"; + public static final String RECORD_UPDATE = "文件更改"; } /** @@ -77,7 +77,7 @@ public class RecordConstants { /** * 分发 */ - public static final String DISTRIBUTION__DEFINITION_KEY = "QMS_RECORD_DISTRIBUTION"; + public static final String DISTRIBUTION_DEFINITION_KEY = "QMS_RECORD_DISTRIBUTION"; /** * 查看申请 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/RecordApplyController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/RecordApplyController.java index bfa895f4..5dae0b9a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/RecordApplyController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/RecordApplyController.java @@ -1,6 +1,5 @@ package com.zt.plat.module.qms.resource.record.controller.admin.recordapply; -import com.alibaba.fastjson2.JSONObject; import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog; import com.zt.plat.framework.business.annotation.FileUploadController; import com.zt.plat.framework.business.controller.AbstractFileUploadController; @@ -12,27 +11,20 @@ import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore; import com.zt.plat.framework.excel.core.util.ExcelUtils; - import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplyJoinPageVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplyPageReqVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplyRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplySaveReqVO; -import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordPageReqVO; -import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordRespVO; -import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordSaveReqVO; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordapply.RecordApplyDO; -import com.zt.plat.module.qms.resource.record.dal.dataobject.recordrecord.RecordRecordDO; import com.zt.plat.module.qms.resource.record.service.recordapply.RecordApplyService; -import com.zt.plat.module.qms.resource.record.service.recordrecord.RecordRecordService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; -import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyRespVO.java index add72860..f43bf916 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyRespVO.java @@ -120,7 +120,7 @@ public class RecordApplyRespVO { // // ===============临时字段=================》 @Schema(description = "明细列表") - private List dataList; + private List detailList; // ===============临时字段=================》 @@ -134,7 +134,5 @@ public class RecordApplyRespVO { // @Schema(description = "用户IDs") // private Long[] deptIds; - private List paramsList; - } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplySaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplySaveReqVO.java index 9f7e24c1..07536ef6 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplySaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplySaveReqVO.java @@ -103,7 +103,7 @@ public class RecordApplySaveReqVO { @Schema(description = "用户IDs") private Long[] deptIds; - private List paramsList; + private List detailList; // 分发参数 // private List targetList; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailRespVO.java index 18936b88..7b7b239a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailRespVO.java @@ -82,4 +82,13 @@ public class RecordApplyDetailRespVO { @Schema(description = "文件编号") private String recordCode; + @Schema(description = "版本号") + private String version; + + @Schema(description = "文件记录-是否长期有效") + private String recordPermanently; + + @Schema(description = "文件过期时间") + private LocalDateTime expirationDate; + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordcategory/RecordCategoryController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordcategory/RecordCategoryController.java index 289f85ca..68e03cbe 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordcategory/RecordCategoryController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordcategory/RecordCategoryController.java @@ -114,13 +114,13 @@ public class RecordCategoryController extends AbstractFileUploadController imple // 文件评审,获取满足当前账户权限的记录列表 - @GetMapping("/getReviewRecordList") - @Operation(summary = "获得文件记录分类") - //@PreAuthorize("@ss.hasPermission('qms:record-record:query')") - public CommonResult> getReviewRecordList() { - List recordRecords = recordCategoryService.getReviewRecordList(); - return success(recordRecords); - } +// @GetMapping("/getReviewRecordList") +// @Operation(summary = "获得文件记录分类") +// //@PreAuthorize("@ss.hasPermission('qms:record-record:query')") +// public CommonResult> getReviewRecordList() { +// List recordRecords = recordCategoryService.getReviewRecordList(); +// return success(recordRecords); +// } @GetMapping("/getRecordCategoryTree") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/RecordPermissionController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/RecordPermissionController.java index 7150df60..e0ee549f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/RecordPermissionController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/RecordPermissionController.java @@ -136,4 +136,13 @@ public class RecordPermissionController extends AbstractFileUploadController imp BeanUtils.toBean(list, RecordPermissionRespVO.class)); } + + @GetMapping("/test") + @Operation(summary = "导出记录权限 Excel") + //@PreAuthorize("@ss.hasPermission('qms:record-permission:export')") + @ApiAccessLog(operateType = EXPORT) + public void test() { + recordPermissionService.test(); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/RecordRecordController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/RecordRecordController.java index f48d63bf..f18648eb 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/RecordRecordController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/RecordRecordController.java @@ -3,6 +3,7 @@ package com.zt.plat.module.qms.resource.record.controller.admin.recordrecord; import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore; import com.zt.plat.module.qms.common.service.BusinessFileService; import com.zt.plat.module.qms.resource.clientManage.controller.vo.VersionManagementRespVO; +import com.zt.plat.module.qms.resource.record.constant.RecordConstants; import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplyRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplySaveReqVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo.RecordPermissionPageReqVO; @@ -11,6 +12,7 @@ import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.R import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordSaveReqVO; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordpermission.RecordPermissionDO; +import com.zt.plat.module.qms.resource.record.service.recordcategory.RecordCategoryService; import com.zt.plat.module.qms.resource.record.service.recordpermission.RecordPermissionService; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; @@ -138,17 +140,16 @@ public class RecordRecordController extends AbstractFileUploadController impleme return success(BeanUtils.toBean(matchedPermissionList, RecordPermissionRespVO.class)); } -// @GetMapping("/export-excel") -// @Operation(summary = "导出文件、模板、记录 Excel") -// //@PreAuthorize("@ss.hasPermission('qms:record-record:export')") -// @ApiAccessLog(operateType = EXPORT) -// public void exportRecordRecordExcel(@Valid RecordRecordPageReqVO pageReqVO, -// HttpServletResponse response) throws IOException { -// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); -// List list = recordRecordService.getRecordRecordPage(pageReqVO).getList(); -// // 导出 Excel -// ExcelUtils.write(response, "文件、模板、记录.xls", "数据", RecordRecordRespVO.class, -// BeanUtils.toBean(list, RecordRecordRespVO.class)); -// } + + // 流程--查询记录列表 + @GetMapping("/getRecordList") + @Operation(summary = "获得文件、模板、记录分页") + //@PreAuthorize("@ss.hasPermission('qms:record-record:query')") + public CommonResult> getRecordList(RecordRecordPageReqVO pageReqVO) { + + List result = recordRecordService.getRecordList(pageReqVO); + return success(BeanUtils.toBean(result, RecordRecordRespVO.class)); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/vo/RecordRecordPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/vo/RecordRecordPageReqVO.java index ab802aae..93c208b5 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/vo/RecordRecordPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/vo/RecordRecordPageReqVO.java @@ -24,12 +24,6 @@ public class RecordRecordPageReqVO extends PageParam { @Schema(description = "业务类型") private String businessType; -// @Schema(description = "部门IDS") -// private String departmentIds; -// -// @Schema(description = "用户IDS") -// private String userIds; - @Schema(description = "表单key") private String formKey; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapply/RecordApplyDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapply/RecordApplyDO.java index 5981b359..e95eb042 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapply/RecordApplyDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapply/RecordApplyDO.java @@ -151,6 +151,6 @@ public class RecordApplyDO extends BusinessBaseDO { // ========================== @TableField(exist = false) - private List dataList; + private List detailList; } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapplydetail/RecordApplyDetailDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapplydetail/RecordApplyDetailDO.java index 6eeedcb5..89a260d8 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapplydetail/RecordApplyDetailDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapplydetail/RecordApplyDetailDO.java @@ -108,4 +108,14 @@ public class RecordApplyDetailDO extends BusinessBaseDO { @TableField(exist = false) private String recordCode; + @TableField(exist = false) + private String version; + + @TableField(exist = false) + private String recordPermanently; + + @TableField(exist = false) + private LocalDateTime expirationDate; + + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/mapper/RecordApplyDetailMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/mapper/RecordApplyDetailMapper.java index bd4a3f7d..70bfcf91 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/mapper/RecordApplyDetailMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/mapper/RecordApplyDetailMapper.java @@ -7,6 +7,7 @@ import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail import com.zt.plat.module.qms.resource.record.dal.dataobject.recordapplydetail.RecordApplyDetailDO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo.RecordApplyDetailJoinVO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @@ -48,9 +49,12 @@ public interface RecordApplyDetailMapper extends BaseMapperX selectJoinByDocumentIdAndBusinessType(Long documentId, String businessType); - @Select("SELECT trad.ID as id,trad.APL_ID as applyId, trad.DOC_ID as documentId, trad.TGT_TP as targetType," + - "trad.TGT_ID as targetId, trad.IS_MDF as isModify, trad.MDF_CAUS as modifyCause," + - "trad.APL_STRT_DT as applyStartDate, trad.APL_END_DT as applyEndDate,trr.NAME AS recordName," + - "trr.CD AS recordCode FROM T_RCD_APL_DTL trad LEFT JOIN T_RCD_RCD trr ON trad.DOC_ID = trr.ID WHERE trad.APL_ID = #{applyId}") - List selectDetailAndRecordList(Long applyId); +// @Select("SELECT trad.ID as id,trad.APL_ID as applyId, trad.DOC_ID as documentId, trad.TGT_TP as targetType," + +// "trad.TGT_ID as targetId, trad.IS_MDF as isModify, trad.MDF_CAUS as modifyCause," + +// "trad.APL_STRT_DT as applyStartDate, trad.APL_END_DT as applyEndDate,trr.NAME AS recordName," + +// "trr.CD AS recordCode, trr.VER AS version, trr.PMNT as recordPermanently, trr.EXPR_DT as expirationDate " + +// "FROM T_RCD_APL_DTL trad LEFT JOIN T_RCD_RCD trr ON trad.DOC_ID = trr.ID WHERE trad.DELETED = 0 and trad.APL_ID = #{applyId}") + List selectDetailAndRecordList(@Param("applyId") Long applyId); + + List selectDistributionDetailAndRecordList(@Param("applyId") Long applyId); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/mapper/RecordRecordMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/mapper/RecordRecordMapper.java index 46b9a5fb..3961c639 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/mapper/RecordRecordMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/mapper/RecordRecordMapper.java @@ -91,4 +91,6 @@ public interface RecordRecordMapper extends BaseMapperX { @Param("userId") Long userId, @Param("userDepts") List userDepts); + // TODO +// List selectViewApplyRecordList(@Param("pageReqVO") RecordRecordPageReqVO pageReqVO); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyService.java index 05e31eff..a7640bda 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyService.java @@ -121,7 +121,7 @@ public interface RecordApplyService { * @return */ - PageResult recordReviewPage(@Valid RecordRecordPageReqVO pageReqVO); +// PageResult recordReviewPage(@Valid RecordRecordPageReqVO pageReqVO); // 分发 PageResult recordDistributePage(@Valid RecordApplyPageReqVO pageReqVO); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java index 9260205b..54dc13fb 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java @@ -40,6 +40,8 @@ import com.zt.plat.module.qms.resource.record.service.recordapplydetail.RecordAp import com.zt.plat.module.qms.resource.record.service.recordcategory.RecordCategoryService; import com.zt.plat.module.qms.resource.record.service.recordpermission.RecordPermissionService; import com.zt.plat.module.qms.resource.record.service.recordrecord.RecordRecordService; +import com.zt.plat.module.system.api.dept.DeptApi; +import com.zt.plat.module.system.api.dept.dto.CompanyDeptInfoRespDTO; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; @@ -90,7 +92,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn private RecordPermissionService recordPermissionService; @Resource - private RecordRecordMapper recordRecordMapper; + private DeptApi deptApi; private LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); @@ -104,11 +106,22 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn } @Override + @Transactional(rollbackFor = Exception.class) public void updateRecordApply(RecordApplySaveReqVO updateReqVO) { // 校验存在 - validateRecordApplyExists(updateReqVO.getId()); +// validateRecordApplyExists(updateReqVO.getId()); + RecordApplyDO recordApplyDO = recordApplyMapper.selectById(updateReqVO.getId()); + if (ObjectUtils.isEmpty(recordApplyDO)) CommonResult.error(RECORD_APPLY_NOT_EXISTS); // 更新 RecordApplyDO updateObj = BeanUtils.toBean(updateReqVO, RecordApplyDO.class); + String businessType = recordApplyDO.getBusinessType(); + updateReqVO.setBusinessType(businessType); + // 删除明细-->重新添加 + int i = recordApplyDetailService.deleteRecordApplyDetailByApplyId(recordApplyDO.getId()); + if (i>0){ + createApplyDetailData(updateReqVO, recordApplyDO); + } + recordApplyMapper.updateById(updateObj); } @@ -145,8 +158,13 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn public RecordApplyDO getRecordApply(Long id) { RecordApplyDO recordApplyDO = recordApplyMapper.selectById(id); if (ObjectUtils.isEmpty(recordApplyDO)) return recordApplyDO; - List recordApplyDetailDOS = recordApplyDetailService.selectDetailAndRecordList(id); - if (!recordApplyDetailDOS.isEmpty()) recordApplyDO.setDataList(recordApplyDetailDOS); + String businessType = recordApplyDO.getBusinessType(); + List recordApplyDetailDOS; + if (businessType.equals(RecordConstants.BusinessType.DISTRIBUTION)) + recordApplyDetailDOS = recordApplyDetailService.selectDistributionDetailAndRecordList(id); + else + recordApplyDetailDOS=recordApplyDetailService.selectDetailAndRecordList(id); + if (!recordApplyDetailDOS.isEmpty()) recordApplyDO.setDetailList(recordApplyDetailDOS); return recordApplyDO; } @@ -166,7 +184,10 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn String nickName = SecurityFrameworkUtils.getLoginUserNickname(); recordApply.setApplyUserId(loginUser.getId()); recordApply.setApplyUserName(nickName); - recordApply.setApplyDepartmentId(loginUser.getVisitDeptId()); + Long visitDeptId = loginUser.getVisitDeptId(); + // 获取当前用户所在的部门 + if (ObjectUtils.isEmpty(visitDeptId)) throw exception0(RECORD_APPLY_NOT_EXISTS.getCode(),"获取当前部门信息失败"); + recordApply.setApplyDepartmentId(visitDeptId); recordApply.setApplyDepartmentName(loginUser.getVisitDeptName()); //生成标题 @@ -184,16 +205,21 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn @Override @Transactional(rollbackFor = Exception.class) public CommonResult createApplyData(RecordApplySaveReqVO param) { - String businessType = param.getBusinessType(); - if (ObjectUtils.isEmpty(businessType)) - throw exception0(RECORD_APPLY_NOT_EXISTS.getCode(), "请选择业务类型"); - List paramsList = param.getParamsList(); - if (ObjectUtils.isEmpty(paramsList)) + + List detailList = param.getDetailList(); + if (ObjectUtils.isEmpty(detailList)) throw exception0(RECORD_APPLY_NOT_EXISTS.getCode(), "没有找到文件记录数据"); // TODO RecordApplyDO recordApply = createApply(param); + return createApplyDetailData(param,recordApply); + } + + public CommonResult createApplyDetailData(RecordApplySaveReqVO param,RecordApplyDO recordApply){ List detailSaveReqVOList = new ArrayList<>(); + String businessType = param.getBusinessType(); + if (ObjectUtils.isEmpty(businessType)) + throw exception0(RECORD_APPLY_NOT_EXISTS.getCode(), "请选择业务类型"); switch (businessType) { case RecordConstants.BusinessType.REVIEW: // 评审 detailSaveReqVOList = addReviewDetail(param, recordApply); @@ -225,9 +251,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn // 保存评审明细 public List addReviewDetail(RecordApplySaveReqVO param, RecordApplyDO recordApplyDO) { - List paramsList = param.getParamsList(); + List detailList = param.getDetailList(); List detailSaveReqVOList = new ArrayList<>(); - for (RecordApplyDetailSaveReqVO item : paramsList) { + for (RecordApplyDetailSaveReqVO item : detailList) { RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); recordApplyDetailDO.setApplyId(recordApplyDO.getId()); recordApplyDetailDO.setDocumentId(item.getDocumentId()); @@ -242,12 +268,12 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn // 添加分发明细 public List addDistributionDetail(RecordApplySaveReqVO param, RecordApplyDO recordApplyDO) { - Long recordId = param.getParamsList().get(0).getDocumentId(); + Long recordId = param.getDetailList().get(0).getDocumentId(); String assignTarget = param.getAssignTarget(); List detailSaveReqVOList = new ArrayList<>(); - if (assignTarget.equals(RecordConstants.TargetType.USER)) { // 用户 - String targetUserIds = param.getTargetUserIds(); + String targetUserIds = param.getTargetUserIds(); + if (!ObjectUtils.isEmpty(targetUserIds)) { // 用户 String[] userIds = targetUserIds.split(","); for (String userId : userIds) { if (ObjectUtils.isEmpty(userId)) break; // 过滤空 @@ -259,8 +285,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn recordApplyDetailDO.setApplyStartDate(LocalDateTime.now()); // TODO 申请开始时间 detailSaveReqVOList.add(recordApplyDetailDO); } - } else if (assignTarget.equals(RecordConstants.TargetType.DEPT)) { - String targetDepartmentIds = param.getTargetDepartmentIds(); + } + String targetDepartmentIds = param.getTargetDepartmentIds(); + if (!ObjectUtils.isEmpty(targetDepartmentIds)) { // if (ObjectUtils.isEmpty(targetDepartmentIds)) throw exception0(RECORD_RECORD_NOT_EXISTS.getCode(),"分发部门不存在"); String[] deptIds = targetDepartmentIds.split(","); for (String deptId : deptIds) { @@ -280,9 +307,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn // 添加更改申请明细 public List addUpdateDetail(RecordApplySaveReqVO param, RecordApplyDO recordApplyDO) { - List paramsList = param.getParamsList(); + List detailList = param.getDetailList(); List detailSaveReqVOList = new ArrayList<>(); - for (RecordApplyDetailSaveReqVO item : paramsList) { + for (RecordApplyDetailSaveReqVO item : detailList) { RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); recordApplyDetailDO.setApplyId(recordApplyDO.getId()); recordApplyDetailDO.setDocumentId(item.getDocumentId()); @@ -297,9 +324,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn // 添加作废明细 public List addInvalidDetail(RecordApplySaveReqVO param, RecordApplyDO recordApplyDO) { - List paramsList = param.getParamsList(); + List detailList = param.getDetailList(); List detailSaveReqVOList = new ArrayList<>(); - for (RecordApplyDetailSaveReqVO item : paramsList) { + for (RecordApplyDetailSaveReqVO item : detailList) { RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); recordApplyDetailDO.setApplyId(recordApplyDO.getId()); recordApplyDetailDO.setDocumentId(item.getDocumentId()); @@ -314,9 +341,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn // 添加查看申请 public List addViewApplyDetail(RecordApplySaveReqVO param, RecordApplyDO recordApplyDO) { - List paramsList = param.getParamsList(); + List detailList = param.getDetailList(); List detailSaveReqVOList = new ArrayList<>(); - for (RecordApplyDetailSaveReqVO item : paramsList) { + for (RecordApplyDetailSaveReqVO item : detailList) { RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); recordApplyDetailDO.setApplyId(recordApplyDO.getId()); recordApplyDetailDO.setDocumentId(item.getDocumentId()); @@ -334,10 +361,10 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn // 添加文件提交明细 public List addRecordSubmitDetail(RecordApplySaveReqVO param, RecordApplyDO recordApplyDO) { -// List paramsList = param.getParamsList(); +// List detailList = param.getDetailList(); List detailSaveReqVOList = new ArrayList<>(); RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); - Long recordId = param.getParamsList().get(0).getDocumentId(); + Long recordId = param.getDetailList().get(0).getDocumentId(); recordApplyDetailDO.setApplyId(recordApplyDO.getId()); recordApplyDetailDO.setDocumentId(recordId); // 文件Id detailSaveReqVOList.add(recordApplyDetailDO); @@ -349,7 +376,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn @Transactional(rollbackFor = Exception.class) public CommonResult addDetail(RecordApplySaveReqVO param, RecordApplyDO recordApplyDO) { String businessType = param.getBusinessType(); - List paramsList = param.getParamsList(); + List detailList = param.getDetailList(); //申请通用明细记录 List detailSaveReqVOList = new ArrayList<>(); // 判断是否是评审,如果是评审,一批评审文件对应一个申请记录,对应多条申请明细记录 @@ -357,13 +384,13 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn || RecordConstants.BusinessType.RECORD_UPDATE.equals(businessType) || RecordConstants.BusinessType.VIEW_APPLY.equals(businessType) || RecordConstants.BusinessType.INVALID.equals(businessType)) { // 评审,或修改申请,或查看申请,或文件作废 - if (ObjectUtils.isEmpty(paramsList)) throw exception(RECORD_RECORD_NOT_EXISTS, "请选择至少一条文件记录"); - for (RecordApplyDetailSaveReqVO item : paramsList) { + if (ObjectUtils.isEmpty(detailList)) throw exception(RECORD_RECORD_NOT_EXISTS, "请选择至少一条文件记录"); + for (RecordApplyDetailSaveReqVO item : detailList) { RecordApplyDetailDO recordApplyDetailDO = getRecordApplyDetailDO(recordApplyDO, item, businessType); detailSaveReqVOList.add(recordApplyDetailDO); } } else if (RecordConstants.BusinessType.DISTRIBUTION.equals(businessType)) { // 分发 - Long recordId = param.getParamsList().get(0).getDocumentId(); + Long recordId = param.getDetailList().get(0).getDocumentId(); String targetDepartmentIds = param.getTargetDepartmentIds(); // if (ObjectUtils.isEmpty(targetDepartmentIds)) throw exception0(RECORD_RECORD_NOT_EXISTS.getCode(),"分发部门不存在"); String[] deptIds = targetDepartmentIds.split(","); @@ -559,8 +586,8 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn switch (businessType) { case RecordConstants.BusinessType.RECORD_SUBMIT: // 判断根分类上是否配置自定义配置,允许提交,则需要走流程,否则直接提交 - List paramsList = param.getParamsList(); - Long recordId = paramsList.get(0).getDocumentId(); + List detailList = param.getDetailList(); + Long recordId = detailList.get(0).getDocumentId(); if (ObjectUtils.isEmpty(recordId)) throw exception0(RECORD_RECORD_NOT_EXISTS.getCode(), "请选择文件记录"); RecordRecordDO entity = recordRecordService.getRecordById(recordId); @@ -574,7 +601,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.RECORD_SUBMIT_DEFINITION_KEY); break; case RecordConstants.BusinessType.DISTRIBUTION: // 分发 - reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.DISTRIBUTION__DEFINITION_KEY); + reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.DISTRIBUTION_DEFINITION_KEY); // 文件分发需要关联权限表, break; case RecordConstants.BusinessType.VIEW_APPLY: // 查看申请 @@ -619,7 +646,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn String wfInsId = result.getData(); recordApplyDO.setFlowInstanceId(wfInsId); // 更新申请实例Id - recordApplyDO.setBusinessStatus(QmsCommonConstant.RUNNING); // + recordApplyDO.setBusinessStatus(QmsCommonConstant.IN_PROGRESS); // recordApplyMapper.updateById(recordApplyDO); return CommonResult.success(BeanUtils.toBean(recordApplyDO, RecordApplyRespVO.class)); @@ -716,12 +743,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn List recordRecordDOS = new ArrayList<>(); switch (businessType) { case RecordConstants.BusinessType.RECORD_SUBMIT: - RecordApplyDetailDO recordApplyDetailDO = recordApplyDetailDOS.get(0); - Long documentId = recordApplyDetailDO.getDocumentId(); - RecordRecordDO entity = recordRecordService.getRecordById(documentId); - entity.setRecordStatus(1);// 已生效 - // 修改状态 - recordApplyFlowStatus(entity); + recordSubmitCallHandle(recordApplyDetailDOS); break; case RecordConstants.BusinessType.REVIEW: // 评审 reviewCallHandle(recordApplyDetailDOS); @@ -741,6 +763,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn RecordRecordDO recordRecordDO = new RecordRecordDO(); recordRecordDO.setId(applyDetailDO.getDocumentId()); recordRecordDO.setCancelFlag(1); // 评审通过 + recordRecordDO.setRecordStatus(0); // 状态 无效 recordRecordDOS.add(recordRecordDO); } recordReviewFlowStatus(recordRecordDOS); @@ -764,6 +787,27 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn return CommonResult.success(ret); } + public void recordSubmitCallHandle(List recordApplyDetailDOS) { + RecordApplyDetailDO recordApplyDetailDO = recordApplyDetailDOS.get(0); + Long documentId = recordApplyDetailDO.getDocumentId(); + RecordRecordDO entity = recordRecordService.getRecordById(documentId); + // 判断生效日期 + LocalDateTime effectiveDate = entity.getEffectiveDate(); // 有效日期 + if (effectiveDate != null) { + // 判断是否到生效日期 + LocalDateTime now = LocalDateTime.now(); + if (now.isAfter(effectiveDate) || now.isEqual(effectiveDate)) { + entity.setRecordStatus(1); // 已生效 + } else { + entity.setRecordStatus(3); // 待生效 + } + } else { + entity.setRecordStatus(1); // 默认已生效 + } + // 修改状态 + recordApplyFlowStatus(entity); + } + // 评审通过,处理修改修改的文件,走更改申请流程 public void reviewCallHandle(List recordApplyDetailDOS){ List detailDOList = new ArrayList<>(); @@ -779,7 +823,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn if (!ObjectUtils.isEmpty(detailDOList)) { RecordApplySaveReqVO recordApplyRespVO = new RecordApplySaveReqVO(); recordApplyRespVO.setBusinessType(RecordConstants.BusinessType.RECORD_UPDATE); - recordApplyRespVO.setParamsList(detailDOList); + recordApplyRespVO.setDetailList(detailDOList); createApplyData(recordApplyRespVO); } } @@ -817,7 +861,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn permissionDO.setTargetId(String.valueOf(applyDetailDO.getTargetId())); // 用户Id permissionDO.setTargetType(RecordConstants.TargetType.USER); permissionDO.setTargetName(loginUserNickname); - } else { // 部门 + } else if (targetType.equals(RecordConstants.TargetType.DEPT)){ // 部门 permissionDO.setTargetId(String.valueOf(applyDetailDO.getTargetId())); // 部门Id permissionDO.setTargetType(RecordConstants.TargetType.DEPT); permissionDO.setTargetName(visitDeptName); @@ -829,29 +873,6 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn } } - - /** - * 文件评审分页查询,我需要查询出 recordApply 和 recordApplyDetail 和recordRecord 关联的数据,其中: - * recordApply 对 recordApplyDetail 一对多的关系 - * recordApplyDetail 对 和recordRecord 一对一的关系 - * 查询条件:recordApply 的 businessType = '文件评审' - */ - @Override - public PageResult recordReviewPage(RecordRecordPageReqVO pageReqVO) { - // 使用多表连接查询获取文件评审数据 - int pageNo = pageReqVO.getPageNo(); - int pageSize = pageReqVO.getPageSize(); - int offset = (pageNo - 1) * pageSize; - - // 查询分页数据 - List list = recordRecordMapper.selectRecordReviewPage(RecordConstants.BusinessType.REVIEW, offset, pageSize); - - // 查询总数 - Long total = recordRecordMapper.selectRecordReviewCount(RecordConstants.BusinessType.REVIEW); - - return new PageResult<>(list, total); - } - // 分发 @Override public PageResult recordDistributePage(RecordApplyPageReqVO pageReqVO) { diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailService.java index ee1cafd3..1a3aac53 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailService.java @@ -91,4 +91,13 @@ public interface RecordApplyDetailService { * @return */ List selectDetailAndRecordList(Long applyId); + + /** + * 关联 + * @param applyId + * @return + */ + List selectDistributionDetailAndRecordList(Long applyId); + + int deleteRecordApplyDetailByApplyId(Long applyId); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailServiceImpl.java index c31a3e7f..83afc3a2 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailServiceImpl.java @@ -2,12 +2,14 @@ package com.zt.plat.module.qms.resource.record.service.recordapplydetail; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo.RecordApplyDetailPageReqVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo.RecordApplyDetailRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo.RecordApplyDetailSaveReqVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo.RecordApplyDetailJoinVO; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; +import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import java.util.*; @@ -117,4 +119,25 @@ public class RecordApplyDetailServiceImpl implements RecordApplyDetailService { return recordApplyDetailMapper.selectDetailAndRecordList(applyId); } + // 通过 recordApplyDetail 表关联查询 recordRecord 表 分发 单条数据 + public List selectDistributionDetailAndRecordList(Long applyId) { + return recordApplyDetailMapper.selectDistributionDetailAndRecordList(applyId); + } + + @Override + public int deleteRecordApplyDetailByApplyId(Long applyId) { + // 通过申请Id,批量删除明细数据 + LambdaQueryWrapper query = Wrappers.lambdaQuery(); + query.eq(RecordApplyDetailDO::getApplyId,applyId); + List recordApplyDetailDOS = recordApplyDetailMapper.selectList(query); + if (ObjectUtils.isEmpty(recordApplyDetailDOS)) return 0; + // 获取明细Ids + List ids = new ArrayList<>(); + recordApplyDetailDOS.forEach(item -> { + ids.add(item.getId()); + }); + this.deleteRecordApplyDetailListByIds(ids); + return 1; + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java index 9ac29084..76a4d9f5 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java @@ -100,4 +100,6 @@ public interface RecordPermissionService { * @return */ List getParentDepts(); + + void test(); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java index 8ad7ab86..917143ea 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java @@ -13,6 +13,7 @@ import com.zt.plat.module.qms.resource.record.controller.admin.recordpermission. import com.zt.plat.module.qms.resource.record.dal.dataobject.recordcategory.RecordCategoryDO; import com.zt.plat.module.system.api.dept.DeptApi; import com.zt.plat.module.system.api.dept.dto.DeptRespDTO; +import com.zt.plat.module.system.api.dept.dto.DeptSimpleRespDTO; import com.zt.plat.module.system.api.permission.PermissionApi; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -55,6 +56,17 @@ public class RecordPermissionServiceImpl implements RecordPermissionService { private Set roles = new HashSet<>(); + @Override + public void test(){ + CommonResult> allCompanyList = deptApi.getAllCompanyList(); + log.info("allCompanyList:{}",allCompanyList); + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + Long visitDeptId = loginUser.getVisitDeptId(); + if (ObjectUtils.isEmpty(visitDeptId)) CommonResult.error(RECORD_APPLY_NOT_EXISTS.getCode(), RECORD_APPLY_NOT_EXISTS.getMsg()); + CommonResult> childDeptList = deptApi.getChildDeptList(visitDeptId); + log.info("booleanCommonResult:{}",childDeptList); + } + /** * 通过分类Id 获取满足当前用户的权限列表 * @param categoryId diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordService.java index d3e6d5ed..33dd4d98 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordService.java @@ -12,6 +12,7 @@ import com.zt.plat.module.qms.resource.record.dal.dataobject.recordpermission.Re import jakarta.validation.*; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordrecord.RecordRecordDO; import com.zt.plat.framework.common.pojo.PageResult; +import org.apache.ibatis.annotations.Param; /** * 文件、模板、记录 Service 接口 @@ -87,5 +88,10 @@ public interface RecordRecordService { void updateRecordRecordListByIds(List recordRecordDOS); + List getRecordList(RecordRecordPageReqVO pageReqVO); + /** + * 文件更改申请流程-- 查询文件记录数据 + */ +// List selectViewApplyRecordList(RecordRecordPageReqVO pageReqVO); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java index e307868b..4032126f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java @@ -2,6 +2,7 @@ package com.zt.plat.module.qms.resource.record.service.recordrecord; import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -11,10 +12,10 @@ import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; -import com.zt.plat.module.qms.common.dic.dal.dataobject.DictionaryBusinessDO; -import com.zt.plat.module.qms.common.dic.service.DictionaryBusinessService; import com.zt.plat.module.qms.common.service.BusinessFileService; +import com.zt.plat.module.qms.resource.record.common.RecordCommonUtils; import com.zt.plat.module.qms.resource.record.constant.RecordConstants; +import com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo.RecordPermissionRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordPageReqVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordSaveReqVO; @@ -24,9 +25,6 @@ import com.zt.plat.module.qms.resource.record.dal.dataobject.recordrecord.Record import com.zt.plat.module.qms.resource.record.dal.mapper.RecordRecordMapper; import com.zt.plat.module.qms.resource.record.service.recordcategory.RecordCategoryService; import com.zt.plat.module.qms.resource.record.service.recordpermission.RecordPermissionService; -import com.zt.plat.module.system.api.dept.DeptApi; -import com.zt.plat.module.system.api.dept.dto.DeptRespDTO; -import com.zt.plat.module.system.api.permission.PermissionApi; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -37,7 +35,7 @@ import org.springframework.validation.annotation.Validated; import java.util.ArrayList; import java.util.List; -import java.util.Set; +import java.util.Optional; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*; @@ -61,15 +59,6 @@ public class RecordRecordServiceImpl implements RecordRecordService { @Resource private RecordPermissionService recordPermissionService; - @Resource - private DeptApi deptApi; - - @Resource - private PermissionApi permissionApi; - - @Autowired - private DictionaryBusinessService dictionaryBusinessService; // 字典服务 - @Autowired private RecordCategoryService recordCategoryService; @@ -144,6 +133,76 @@ public class RecordRecordServiceImpl implements RecordRecordService { } } + + // 流程--查询记录列表 + @Override + public List getRecordList(RecordRecordPageReqVO pageReqVO) { + + Long categoryId = pageReqVO.getCategoryId(); + RecordCategoryDO recordCategoryDO = validateRecordCategoryExists(categoryId); + if (categoryId == null) CommonResult.error(RECORD_CATEGORY_NOT_EXISTS); + + // 校验分类存在 + if (ObjectUtils.isEmpty(recordCategoryDO)) return new ArrayList<>(); + String idPath = recordCategoryDO.getIdPath(); + + Long rootCategoryId = getRootCategoryId(idPath); + + // 判断是否有权限 + // 判断是否有当前分类的父分类权限 (可编辑,可查看,管理员--> 任意条件) + List recordPermissionDOS = recordPermissionService.selectPermissionList(rootCategoryId, null); + + List recordRecordList = new ArrayList<>(); + + if (recordPermissionDOS.isEmpty()) return new ArrayList<>(); + + Long parentId = getRootCategoryId(idPath); + String businessType = pageReqVO.getBusinessType(); + if (ObjectUtils.isEmpty(businessType)) return new ArrayList<>(); + + switch (businessType) { + case RecordConstants.BusinessType.REVIEW: // 评审 + // TODO + boolean b = getRecordReviewList(parentId); + if (!b) return new ArrayList<>(); + // 查询评审---记录列表 + break; + case RecordConstants.BusinessType.DISTRIBUTION, + RecordConstants.BusinessType.RECORD_UPDATE, + RecordConstants.BusinessType.INVALID: // 修改 + //TODO +// List recordRecordDOS = this.selectViewApplyRecordList(pageReqVO); +// return new PageResult().setList(recordRecordDOS).setTotal((long) recordRecordDOS.size()); + break; + case RecordConstants.BusinessType.VIEW_APPLY: // 查看申请,默认查看所有 + pageReqVO.setBusinessType(null);// + // 参数 categoryId + // TODO + PageResult recordRecordDOPageResult = recordRecordMapper.selectPage(pageReqVO); + recordRecordList = recordRecordDOPageResult.getList(); + return BeanUtils.toBean(recordRecordList, RecordRecordRespVO.class); + } + + pageReqVO.setRecordStatus(1); // 查询当前有效和 即将生效的文件 + pageReqVO.setCancelFlag(0); // 作废状态 + pageReqVO.setExpirationStatus(0); // 过期状态 + + Page page = new Page<>(1, 999); + + IPage iPage = recordRecordMapper.selectRecordWithApplyPage(page, pageReqVO); +// PageResult result = new PageResult<>(iPage.getRecords(), iPage.getTotal()); + recordRecordList = iPage.getRecords(); + return BeanUtils.toBean(recordRecordList, RecordRecordRespVO.class); + + } + + +// 文件更改申请流程 --> 查询文件记录数据 +// @Override +// public List selectViewApplyRecordList(RecordRecordPageReqVO pageReqVO) { +// return recordRecordMapper.selectViewApplyRecordList(pageReqVO); +// } + @Override @Transactional(rollbackFor = Exception.class) public RecordRecordRespVO updateRecordRecord(RecordRecordSaveReqVO updateReqVO) { @@ -184,7 +243,7 @@ public class RecordRecordServiceImpl implements RecordRecordService { lambdaQueryWrapper.eq(RecordRecordDO::getMainId, recordRecordDO.getMainId()); lambdaQueryWrapper.orderByDesc(RecordRecordDO::getCreateTime); // 根据时间倒叙排序,取第一个 List recordRecordDOS = recordRecordMapper.selectList(lambdaQueryWrapper); - log.info("recordRecordDOS--:{}", recordRecordDOS); +// log.info("recordRecordDOS--:{}", recordRecordDOS); if (ObjectUtils.isEmpty(recordRecordDOS)) return; // 修改状态为当前最新版本 // TODO 需要去判断文件作废状态 @@ -208,10 +267,20 @@ public class RecordRecordServiceImpl implements RecordRecordService { } } - private void validateRecordRecordExists(Long id) { - if (recordRecordMapper.selectById(id) == null) { + private RecordRecordDO validateRecordRecordExists(Long id) { + RecordRecordDO recordRecordDO = recordRecordMapper.selectById(id); + if (recordRecordDO == null) { throw exception(RECORD_RECORD_NOT_EXISTS); } + return recordRecordDO; + } + + private RecordCategoryDO validateRecordCategoryExists(Long id) { + RecordCategoryDO recordCategoryDO = recordCategoryService.selectById(id); + if (recordCategoryDO == null) { + return new RecordCategoryDO(); + } + return recordCategoryDO; } @@ -239,6 +308,16 @@ public class RecordRecordServiceImpl implements RecordRecordService { return recordRecordDO; } + // 获取当前分类的根分类Id + public Long getRootCategoryId(String idPath) { + Optional segment = RecordCommonUtils.getSegment(idPath, 1); // /0//11/122546211/ + String s = segment.orElse(null); + if (ObjectUtils.isEmpty(s)) + throw exception(RECORD_APPLY_NOT_EXISTS); +// Long parentId = recordCategoryDO.getParentId(); // 获取根分类 + return Long.valueOf(s); // 获取根分类 + } + @Override public RecordRecordDO getRecordById(Long id) { return recordRecordMapper.selectById(id); @@ -246,18 +325,21 @@ public class RecordRecordServiceImpl implements RecordRecordService { @Override public PageResult getRecordRecordPage(RecordRecordPageReqVO pageReqVO) { + Long categoryId = pageReqVO.getCategoryId(); + RecordCategoryDO recordCategoryDO = validateRecordCategoryExists(categoryId); + if (categoryId == null) CommonResult.error(RECORD_CATEGORY_NOT_EXISTS); // 校验分类存在 - RecordCategoryDO recordCategoryDO = recordCategoryService.selectById(categoryId); if (ObjectUtils.isEmpty(recordCategoryDO)) return new PageResult().setTotal(0L); - Long parentId = recordCategoryDO.getParentId(); + String idPath = recordCategoryDO.getIdPath(); + + Long parentId = getRootCategoryId(idPath); // 判断是否有当前分类的父分类权限 (可编辑,可查看,管理员--> 任意条件) List recordPermissionDOS = recordPermissionService.selectPermissionList(parentId, null); Page page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - if (ObjectUtils.isEmpty(recordPermissionDOS)) { // 没有分类的权限,判断是否有文件记录的权限,并获取记录列表 LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); @@ -291,11 +373,24 @@ public class RecordRecordServiceImpl implements RecordRecordService { return result; } + // 文件评审--获取记录数据 + public boolean getRecordReviewList(Long parentId) { + // 判断根分类上是否有需要评审的文件 + Object customConfigObject = customConfigParseJson(parentId); + if (ObjectUtils.isEmpty(customConfigObject)) return false; + + JSONObject customConfig = JSONObject.parseObject(customConfigObject.toString()); + // json 解析 + Integer appraisalFlag = customConfig.getInteger("appraisalFlag");// 评审标志 + if (appraisalFlag.equals(0)) return false; + return true; + } + private Object customConfigParseJson(Long parentId) { RecordCategoryDO categoryDOByParent = recordCategoryService.selectById(parentId); log.info("categoryDOByParent:{}", categoryDOByParent); if (ObjectUtils.isEmpty(categoryDOByParent)) throw exception(RECORD_CATEGORY_NOT_EXISTS); - Object parse=new Object(); + Object parse = new Object(); if (!ObjectUtils.isEmpty(categoryDOByParent.getCustomConfig())) { String customConfig = categoryDOByParent.getCustomConfig(); parse = JSON.parse(customConfig); diff --git a/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/record/dal/mapper/RecordApplyDetailMapper.xml b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/record/dal/mapper/RecordApplyDetailMapper.xml index 1a0258fe..43e06748 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/record/dal/mapper/RecordApplyDetailMapper.xml +++ b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/record/dal/mapper/RecordApplyDetailMapper.xml @@ -9,4 +9,26 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + + + + \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/record/dal/mapper/RecordRecordMapper.xml b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/record/dal/mapper/RecordRecordMapper.xml index 771df012..590ba88a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/record/dal/mapper/RecordRecordMapper.xml +++ b/zt-module-qms/zt-module-qms-server/src/main/resources/com/zt/plat/module/qms/resource/record/dal/mapper/RecordRecordMapper.xml @@ -38,23 +38,38 @@ trr.CREATE_TIME AS createTime, trr.TENANT_ID, (SELECT tra.ID - FROM t_rcd_apl_dtl trad - INNER JOIN t_rcd_apl tra ON trad.APL_ID = tra.ID AND tra.BSN_TP = '文件提交' - WHERE trad.DOC_ID = trr.ID - AND ROWNUM = 1) AS applyId, + FROM t_rcd_apl_dtl trad + INNER JOIN t_rcd_apl tra ON trad.APL_ID = tra.ID AND tra.BSN_TP = '文件提交' + WHERE trad.DOC_ID = trr.ID + AND ROWNUM = 1) AS applyId, (SELECT tra.FLW_INSC_ID - FROM t_rcd_apl_dtl trad - INNER JOIN t_rcd_apl tra ON trad.APL_ID = tra.ID AND tra.BSN_TP = '文件提交' - WHERE trad.DOC_ID = trr.ID - AND ROWNUM = 1) AS flowInstanceId, + FROM t_rcd_apl_dtl trad + INNER JOIN t_rcd_apl tra ON trad.APL_ID = tra.ID AND tra.BSN_TP = '文件提交' + WHERE trad.DOC_ID = trr.ID + AND ROWNUM = 1) AS flowInstanceId, (SELECT tra.BSN_STS - FROM t_rcd_apl_dtl trad - INNER JOIN t_rcd_apl tra ON trad.APL_ID = tra.ID AND tra.BSN_TP = '文件提交' - WHERE trad.DOC_ID = trr.ID - AND ROWNUM = 1) AS applyBusinessStatus + FROM t_rcd_apl_dtl trad + INNER JOIN t_rcd_apl tra ON trad.APL_ID = tra.ID AND tra.BSN_TP = '文件提交' + WHERE trad.DOC_ID = trr.ID + AND ROWNUM = 1) AS applyBusinessStatus FROM t_rcd_rcd trr trr.deleted = 0 + + + AND + ( + trr.RCD_STS = #{reqVO.recordStatus} + or trr.EFCT_DT > now()) + + + + AND trr.CNL_FLG = #{reqVO.cancelFlag} + + + + AND trr.EXPR_STS = #{reqVO.expirationStatus} + AND trr.CTGR_ID = #{reqVO.categoryId} @@ -76,9 +91,6 @@ AND trr.EXPR_DT BETWEEN #{reqVO.expirationDate[0]} AND #{reqVO.expirationDate[1]} - - AND trr.EXPR_STS = #{reqVO.expirationStatus} - AND trr.MAIN_ID = #{reqVO.mainId} @@ -109,33 +121,19 @@ trr.DAT_COLT_ID AS dataCollectionId, trr.SRC_URL AS sourceUrl FROM T_RCD_RCD trr - LEFT JOIN T_RCD_PERM trp ON trp.SRC_ID = trr.ID - INNER JOIN - ( - SELECT applyId, documentId, flowInstanceId, businessStatus, aplBusinessType - FROM (SELECT trad.APL_ID AS applyId, - trad.DOC_ID AS documentId, - tra.FLW_INSC_ID AS flowInstanceId, - tra.BSN_STS AS businessStatus, - tra.BSN_TP AS aplBusinessType, - ROW_NUMBER() OVER (PARTITION BY trad.DOC_ID ORDER BY trad.APL_ID) AS rn - FROM T_RCD_APL_DTL trad - INNER JOIN T_RCD_APL tra ON tra.ID = trad.APL_ID - WHERE tra.BSN_STS = 'completed' - AND (tra.BSN_TP = '文件分发' OR tra.BSN_TP = '文件查看申请')) t - WHERE rn = 1 - ) apl - ON apl.documentId = trr.ID - WHERE trp.SRC_TP = '记录' - AND trp.PERM = '可查看' - AND trr.CTGR_ID = #{pageReqVO.categoryId} - - AND trr.CD = #{pageReqVO.code} - - - AND trr.NAME LIKE CONCAT('%', #{pageReqVO.name}, '%') - - AND ( + LEFT JOIN T_RCD_PERM trp ON trp.SRC_ID = trr.ID + WHERE + trr.deleted = 0 + AND trp.SRC_TP = '记录' + AND trp.PERM = '可查看' + AND trr.CTGR_ID = #{pageReqVO.categoryId} + + AND trr.CD = #{pageReqVO.code} + + + AND trr.NAME LIKE CONCAT('%', #{pageReqVO.name}, '%') + + AND ( ( trp.tgt_id = #{userId} AND trp.tgt_tp = '用户') OR (trp.tgt_tp = '部门' AND trp.tgt_id IN @@ -143,6 +141,7 @@ #{deptId} ) - ) + ) + \ No newline at end of file