diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/MaterialInfomationApi.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/MaterialInfomationApi.java new file mode 100644 index 00000000..b9425c3d --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/MaterialInfomationApi.java @@ -0,0 +1,61 @@ +package com.zt.plat.module.base.api.materialinfomation; + +import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationPageReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationRespDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationSaveReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationSimplePageReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationSimpleRespDTO; +import com.zt.plat.module.base.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC 服务 - 物料信息") +public interface MaterialInfomationApi { + + String PREFIX = ApiConstants.PREFIX + "/base/material-infomation"; + + @PostMapping(PREFIX + "/create") + @Operation(summary = "创建物料信息") + CommonResult createMaterialInfomation(@Valid @RequestBody MaterialInfomationSaveReqDTO createReqDTO); + + @PutMapping(PREFIX + "/update") + @Operation(summary = "更新物料信息") + CommonResult updateMaterialInfomation(@Valid @RequestBody MaterialInfomationSaveReqDTO updateReqDTO); + + @DeleteMapping(PREFIX + "/delete") + @Operation(summary = "删除物料信息") + CommonResult deleteMaterialInfomation(@RequestParam("id") Long id); + + @DeleteMapping(PREFIX + "/delete-list") + @Operation(summary = "批量删除物料信息") + CommonResult deleteMaterialInfomationList(@RequestBody List ids); + + @GetMapping(PREFIX + "/get") + @Operation(summary = "获得物料信息") + CommonResult getMaterialInfomation(@RequestParam("id") Long id); + + @GetMapping(PREFIX + "/list-by-ids") + @Operation(summary = "按 ID 批量获得物料信息") + CommonResult> getMaterialInfomationListByIds(@RequestParam("ids") List ids); + + @GetMapping(PREFIX + "/page") + @Operation(summary = "获得物料信息分页") + CommonResult> getMaterialInfomationPage(@Valid MaterialInfomationPageReqDTO pageReqDTO); + + @GetMapping(PREFIX + "/simple-page") + @Operation(summary = "获得物料信息精简分页") + CommonResult> getMaterialInfomationSimplePage(@Valid MaterialInfomationSimplePageReqDTO pageReqDTO); +} \ No newline at end of file diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationPageReqDTO.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationPageReqDTO.java new file mode 100644 index 00000000..f5b872c9 --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationPageReqDTO.java @@ -0,0 +1,33 @@ +package com.zt.plat.module.base.api.materialinfomation.dto; + +import com.zt.plat.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 物料信息分页 Request DTO + */ +@Data +public class MaterialInfomationPageReqDTO extends PageParam { + + @Schema(description = "物料编码") + private String code; + + @Schema(description = "物料名称", example = "张三") + private String name; + + @Schema(description = "分类ID", example = "1024") + private Long classesId; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; +} \ No newline at end of file diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationRespDTO.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationRespDTO.java new file mode 100644 index 00000000..eeb1ba5d --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationRespDTO.java @@ -0,0 +1,49 @@ +package com.zt.plat.module.base.api.materialinfomation.dto; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * 物料信息 Response DTO + */ +@Data +public class MaterialInfomationRespDTO { + + @JsonIgnore + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3326") + private Long id; + + @JsonIgnore + @Schema(description = "物料编码", requiredMode = Schema.RequiredMode.REQUIRED) + private String code; + + @JsonIgnore + @Schema(description = "物料名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + private String name; + + @JsonIgnore + @Schema(description = "分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long classesId; + + @JsonIgnore + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED) + private String remark; + + @JsonIgnore + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @JsonIgnore + @Schema(description = "物料基础字段 + 属性编码->原值的动态键值,基础字段优先,序列化时直接展开为顶层字段") + private Map flatAttributes; + + @JsonAnyGetter + public Map getFlatAttributes() { + return flatAttributes; + } +} \ No newline at end of file diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSaveReqDTO.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSaveReqDTO.java new file mode 100644 index 00000000..7521e9fb --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSaveReqDTO.java @@ -0,0 +1,32 @@ +package com.zt.plat.module.base.api.materialinfomation.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 物料信息新增/修改 Request DTO + */ +@Data +public class MaterialInfomationSaveReqDTO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3326") + private Long id; + + @Schema(description = "物料编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "物料编码不能为空") + private String code; + + @Schema(description = "物料名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "物料名称不能为空") + private String name; + + @Schema(description = "分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "所属分类不能为空") + private Long classesId; + + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "备注不能为空") + private String remark; +} \ No newline at end of file diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSimplePageReqDTO.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSimplePageReqDTO.java new file mode 100644 index 00000000..af986de4 --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSimplePageReqDTO.java @@ -0,0 +1,21 @@ +package com.zt.plat.module.base.api.materialinfomation.dto; + +import com.zt.plat.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 物料信息精简分页 Request DTO + */ +@Schema(description = "物料信息精简分页 Request DTO") +@Data +@EqualsAndHashCode(callSuper = true) +public class MaterialInfomationSimplePageReqDTO extends PageParam { + + @Schema(description = "关键字(编码/名称模糊匹配)") + private String keyword; + + @Schema(description = "分类 ID") + private Long classesId; +} \ No newline at end of file diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSimpleRespDTO.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSimpleRespDTO.java new file mode 100644 index 00000000..b03a7ff3 --- /dev/null +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/api/materialinfomation/dto/MaterialInfomationSimpleRespDTO.java @@ -0,0 +1,44 @@ +package com.zt.plat.module.base.api.materialinfomation.dto; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Map; + +/** + * 物料信息精简 Response DTO + */ +@Data +public class MaterialInfomationSimpleRespDTO { + + @JsonIgnore + @Schema(description = "物料信息ID", example = "1024") + private Long id; + + @JsonIgnore + @Schema(description = "物料编码") + private String code; + + @JsonIgnore + @Schema(description = "物料名称") + private String name; + + @JsonIgnore + @Schema(description = "分类ID") + private Long classesId; + + @JsonIgnore + @Schema(description = "备注") + private String remark; + + @JsonIgnore + @Schema(description = "物料基础字段 + 属性编码->原值的动态键值,基础字段优先,序列化时直接展开为顶层字段") + private Map flatAttributes; + + @JsonAnyGetter + public Map getFlatAttributes() { + return flatAttributes; + } +} \ No newline at end of file diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/api/materialinfomation/MaterialInfomationApiImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/api/materialinfomation/MaterialInfomationApiImpl.java new file mode 100644 index 00000000..bd3d37bb --- /dev/null +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/api/materialinfomation/MaterialInfomationApiImpl.java @@ -0,0 +1,85 @@ +package com.zt.plat.module.base.api.materialinfomation; + +import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationPageReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationRespDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationSaveReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationSimplePageReqDTO; +import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationSimpleRespDTO; +import com.zt.plat.module.base.controller.admin.base.vo.MaterialInfomationPageReqVO; +import com.zt.plat.module.base.controller.admin.base.vo.MaterialInfomationRespVO; +import com.zt.plat.module.base.controller.admin.base.vo.MaterialInfomationSaveReqVO; +import com.zt.plat.module.base.controller.admin.base.vo.MaterialInfomationSimplePageReqVO; +import com.zt.plat.module.base.controller.admin.base.vo.MaterialInfomationSimpleRespVO; +import com.zt.plat.module.base.service.base.MaterialInfomationService; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.zt.plat.framework.common.pojo.CommonResult.success; + +@RestController +@Validated +public class MaterialInfomationApiImpl implements MaterialInfomationApi { + + @Resource + private MaterialInfomationService materialInfomationService; + + @Override + public CommonResult createMaterialInfomation(MaterialInfomationSaveReqDTO createReqDTO) { + MaterialInfomationRespVO respVO = materialInfomationService.createMaterialInfomation( + BeanUtils.toBean(createReqDTO, MaterialInfomationSaveReqVO.class)); + return success(BeanUtils.toBean(respVO, MaterialInfomationRespDTO.class)); + } + + @Override + public CommonResult updateMaterialInfomation(MaterialInfomationSaveReqDTO updateReqDTO) { + materialInfomationService.updateMaterialInfomation(BeanUtils.toBean(updateReqDTO, MaterialInfomationSaveReqVO.class)); + return success(true); + } + + @Override + public CommonResult deleteMaterialInfomation(Long id) { + materialInfomationService.deleteMaterialInfomation(id); + return success(true); + } + + @Override + public CommonResult deleteMaterialInfomationList(List ids) { + materialInfomationService.deleteMaterialInfomationListByIds(ids); + return success(true); + } + + @Override + public CommonResult getMaterialInfomation(Long id) { + MaterialInfomationRespVO respVO = materialInfomationService.getMaterialInfomation(id); + return success(BeanUtils.toBean(respVO, MaterialInfomationRespDTO.class)); + } + + @Override + public CommonResult> getMaterialInfomationListByIds(List ids) { + List list = materialInfomationService.getMaterialInfomationListByIds(ids); + List respList = list.stream() + .map(item -> BeanUtils.toBean(item, MaterialInfomationRespDTO.class)) + .toList(); + return success(respList); + } + + @Override + public CommonResult> getMaterialInfomationPage(MaterialInfomationPageReqDTO pageReqDTO) { + MaterialInfomationPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, MaterialInfomationPageReqVO.class); + PageResult pageResult = materialInfomationService.getMaterialInfomationPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, MaterialInfomationRespDTO.class)); + } + + @Override + public CommonResult> getMaterialInfomationSimplePage(MaterialInfomationSimplePageReqDTO pageReqDTO) { + MaterialInfomationSimplePageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, MaterialInfomationSimplePageReqVO.class); + PageResult pageResult = materialInfomationService.getMaterialInfomationSimplePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, MaterialInfomationSimpleRespDTO.class)); + } +} \ No newline at end of file