From 08b2b73f02393e0e69d723144d83195715b2c7ee Mon Sep 17 00:00:00 2001 From: siontion Date: Tue, 16 Jan 2024 12:00:08 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=87=BA=E5=85=A5=E5=BA=93=E7=AE=A1?= =?UTF-8?q?=E7=90=86=20=E9=A1=B5=E9=9D=A2=E5=8F=8A=E6=8E=A5=E5=8F=A3=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 出入库管理 页面及接口 新增 --- .../module/heli/enums/ErrorCodeConstants.java | 3 +- .../admin/storage/StorageController.java | 95 ++++ .../admin/storage/vo/StoragePageReqVO.java | 93 ++++ .../admin/storage/vo/StorageRespVO.java | 101 ++++ .../admin/storage/vo/StorageSaveReqVO.java | 82 ++++ .../dal/dataobject/storage/StorageDO.java | 113 +++++ .../heli/dal/mysql/storage/StorageMapper.java | 48 ++ .../heli/service/storage/StorageService.java | 55 +++ .../service/storage/StorageServiceImpl.java | 74 +++ .../mapper/storage/StorageMapper.xml | 12 + .../src/api/heli/storage/index.ts | 54 +++ .../src/views/heli/storage/StorageForm.vue | 203 ++++++++ .../src/views/heli/storage/index.vue | 433 ++++++++++++++++++ 13 files changed, 1364 insertions(+), 2 deletions(-) create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StoragePageReqVO.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StorageRespVO.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StorageSaveReqVO.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storage/StorageDO.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storage/StorageMapper.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java create mode 100644 mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/storage/StorageMapper.xml create mode 100644 mes-ui/mes-ui-admin-vue3/src/api/heli/storage/index.ts create mode 100644 mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue create mode 100644 mes-ui/mes-ui-admin-vue3/src/views/heli/storage/index.vue diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java index 7449d06f..42a9d5fe 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java @@ -36,7 +36,6 @@ public interface ErrorCodeConstants { ErrorCode WAREHOUSE_NOT_EXISTS = new ErrorCode(1_003_001, "仓库不存在"); ErrorCode RG_NOT_EXISTS = new ErrorCode(1_003_002, "库区不存在"); ErrorCode PN_NOT_EXISTS = new ErrorCode(1_003_003, "库位不存在"); - - + ErrorCode Storage_NOT_EXISTS = new ErrorCode(1_003_004,"库存不存在"); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java new file mode 100644 index 00000000..ea15bdbe --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/StorageController.java @@ -0,0 +1,95 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.storage; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; +import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; + +import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; + +import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; +import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; +import com.chanko.yunxi.mes.module.heli.service.storage.StorageService; + +@Tag(name = "管理后台 - 入/出库") +@RestController +@RequestMapping("/heli/storage") +@Validated +public class StorageController { + + @Resource + private StorageService storageService; + + @PostMapping("/create") + @Operation(summary = "创建入/出库") + @PreAuthorize("@ss.hasPermission('heli:storage:create')") + public CommonResult createStorage(@Valid @RequestBody StorageSaveReqVO createReqVO) { + return success(storageService.createStorage(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新入/出库") + @PreAuthorize("@ss.hasPermission('heli:storage:update')") + public CommonResult updateStorage(@Valid @RequestBody StorageSaveReqVO updateReqVO) { + storageService.updateStorage(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除入/出库") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('heli:storage:delete')") + public CommonResult deleteStorage(@RequestParam("id") Long id) { + storageService.deleteStorage(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得入/出库") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('heli:storage:query')") + public CommonResult getStorage(@RequestParam("id") Long id) { + StorageDO storage = storageService.getStorage(id); + return success(BeanUtils.toBean(storage, StorageRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得入/出库分页") + @PreAuthorize("@ss.hasPermission('heli:storage:query')") + public CommonResult> getStoragePage(@Valid StoragePageReqVO pageReqVO) { + PageResult pageResult = storageService.getStoragePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, StorageRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出入/出库 Excel") + @PreAuthorize("@ss.hasPermission('heli:storage:export')") + @OperateLog(type = EXPORT) + public void exportStorageExcel(@Valid StoragePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = storageService.getStoragePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "入/出库.xls", "数据", StorageRespVO.class, + BeanUtils.toBean(list, StorageRespVO.class)); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StoragePageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StoragePageReqVO.java new file mode 100644 index 00000000..dc0a9ac4 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StoragePageReqVO.java @@ -0,0 +1,93 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 入/出库分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class StoragePageReqVO extends PageParam { + + @Schema(description = "入库出库类型:1为入库,2为出库", example = "2") + private Boolean stockType; + + @Schema(description = "入/出库单号") + private String stockNo; + + @Schema(description = "上游单号") + private Long headerNo; + + @Schema(description = "物料 Id,对应 base_material表中的 Id 列", example = "651") + private Long materialId; + + @Schema(description = "批次号") + private String lotNo; + + @Schema(description = "仓库 Id,对应 wms_wh 表中的Id", example = "17136") + private Long whId; + + @Schema(description = "库区 Id,对应 wms_rg 表中的Id", example = "24171") + private Long rgId; + + @Schema(description = "库区 Id,对应 wms_rg 表中的Id", example = "3031") + private Long pnId; + + @Schema(description = "库存良品数量") + private BigDecimal storageOkQty; + + @Schema(description = "库存不良品数量") + private BigDecimal storageNgQty; + + @Schema(description = "库存报废数量") + private BigDecimal storageSpQty; + + @Schema(description = "备注", example = "随便") + private String description; + + @Schema(description = "状态:1为保存;2为提交;3为作废", example = "2") + private Boolean status; + + @Schema(description = "记录的创建人,对应员工表中的 Id") + private String creator; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "记录的修改人,对应员工表中的 Id") + private String updater; + + @Schema(description = "更新时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] updateTime; + + @Schema(description = "入库人") + private Long keeper; + + @Schema(description = "入库时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] keeperTime; + + @Schema(description = "出库人") + private Long outer; + + @Schema(description = "出库时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] outerTime; + + @Schema(description = "作废人") + private Long cancel; + + @Schema(description = "作废时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] cancelTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StorageRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StorageRespVO.java new file mode 100644 index 00000000..6ace18b7 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StorageRespVO.java @@ -0,0 +1,101 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 入/出库 Response VO") +@Data +@ExcelIgnoreUnannotated +public class StorageRespVO { + + @Schema(description = "出库时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1806") + @ExcelProperty("出库时间") + private Long id; + + @Schema(description = "入库出库类型:1为入库,2为出库", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("入库出库类型:1为入库,2为出库") + private Boolean stockType; + + @Schema(description = "入/出库单号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("入/出库单号") + private String stockNo; + + @Schema(description = "上游单号") + @ExcelProperty("上游单号") + private Long headerNo; + + @Schema(description = "物料 Id,对应 base_material表中的 Id 列", requiredMode = Schema.RequiredMode.REQUIRED, example = "651") + @ExcelProperty("物料 Id,对应 base_material表中的 Id 列") + private Long materialId; + + @Schema(description = "批次号") + @ExcelProperty("批次号") + private String lotNo; + + @Schema(description = "仓库 Id,对应 wms_wh 表中的Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17136") + @ExcelProperty("仓库 Id,对应 wms_wh 表中的Id") + private Long whId; + + @Schema(description = "库区 Id,对应 wms_rg 表中的Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24171") + @ExcelProperty("库区 Id,对应 wms_rg 表中的Id") + private Long rgId; + + @Schema(description = "库区 Id,对应 wms_rg 表中的Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3031") + @ExcelProperty("库区 Id,对应 wms_rg 表中的Id") + private Long pnId; + + @Schema(description = "库存良品数量") + @ExcelProperty("库存良品数量") + private BigDecimal storageOkQty; + + @Schema(description = "库存不良品数量") + @ExcelProperty("库存不良品数量") + private BigDecimal storageNgQty; + + @Schema(description = "库存报废数量") + @ExcelProperty("库存报废数量") + private BigDecimal storageSpQty; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String description; + + @Schema(description = "状态:1为保存;2为提交;3为作废", example = "2") + @ExcelProperty("状态:1为保存;2为提交;3为作废") + private Boolean status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "入库人") + @ExcelProperty("入库人") + private Long keeper; + + @Schema(description = "入库时间") + @ExcelProperty("入库时间") + private LocalDateTime keeperTime; + + @Schema(description = "出库人") + @ExcelProperty("出库人") + private Long outer; + + @Schema(description = "出库时间") + @ExcelProperty("出库时间") + private LocalDateTime outerTime; + + @Schema(description = "作废人") + @ExcelProperty("作废人") + private Long cancel; + + @Schema(description = "作废时间") + @ExcelProperty("作废时间") + private LocalDateTime cancelTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StorageSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StorageSaveReqVO.java new file mode 100644 index 00000000..56cbe111 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/storage/vo/StorageSaveReqVO.java @@ -0,0 +1,82 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 入/出库新增/修改 Request VO") +@Data +public class StorageSaveReqVO { + + @Schema(description = "出库时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1806") + private Long id; + + @Schema(description = "入库出库类型:1为入库,2为出库", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "入库出库类型:1为入库,2为出库不能为空") + private Boolean stockType; + + @Schema(description = "入/出库单号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "入/出库单号不能为空") + private String stockNo; + + @Schema(description = "上游单号") + private Long headerNo; + + @Schema(description = "物料 Id,对应 base_material表中的 Id 列", requiredMode = Schema.RequiredMode.REQUIRED, example = "651") + @NotNull(message = "物料 Id,对应 base_material表中的 Id 列不能为空") + private Long materialId; + + @Schema(description = "批次号") + private String lotNo; + + @Schema(description = "仓库 Id,对应 wms_wh 表中的Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17136") + @NotNull(message = "仓库 Id,对应 wms_wh 表中的Id不能为空") + private Long whId; + + @Schema(description = "库区 Id,对应 wms_rg 表中的Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24171") + @NotNull(message = "库区 Id,对应 wms_rg 表中的Id不能为空") + private Long rgId; + + @Schema(description = "库区 Id,对应 wms_rg 表中的Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3031") + @NotNull(message = "库区 Id,对应 wms_rg 表中的Id不能为空") + private Long pnId; + + @Schema(description = "库存良品数量") + private BigDecimal storageOkQty; + + @Schema(description = "库存不良品数量") + private BigDecimal storageNgQty; + + @Schema(description = "库存报废数量") + private BigDecimal storageSpQty; + + @Schema(description = "备注", example = "随便") + private String description; + + @Schema(description = "状态:1为保存;2为提交;3为作废", example = "2") + private Boolean status; + + @Schema(description = "入库人") + private Long keeper; + + @Schema(description = "入库时间") + private LocalDateTime keeperTime; + + @Schema(description = "出库人") + private Long outer; + + @Schema(description = "出库时间") + private LocalDateTime outerTime; + + @Schema(description = "作废人") + private Long cancel; + + @Schema(description = "作废时间") + private LocalDateTime cancelTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storage/StorageDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storage/StorageDO.java new file mode 100644 index 00000000..ed0dd0cd --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/storage/StorageDO.java @@ -0,0 +1,113 @@ +package com.chanko.yunxi.mes.module.heli.dal.dataobject.storage; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO; + +/** + * 入/出库 DO + * + * @author 管理员 + */ +@TableName("wms_storage") +@KeySequence("wms_storage_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class StorageDO extends BaseDO { + + /** + * 出库时间 + */ + @TableId + private Long id; + /** + * 入库出库类型:1为入库,2为出库 + */ + private Boolean stockType; + /** + * 入/出库单号 + */ + private String stockNo; + /** + * 上游单号 + */ + private Long headerNo; + /** + * 物料 Id,对应 base_material表中的 Id 列 + */ + private Long materialId; + /** + * 批次号 + */ + private String lotNo; + /** + * 仓库 Id,对应 wms_wh 表中的Id + */ + private Long whId; + /** + * 库区 Id,对应 wms_rg 表中的Id + */ + private Long rgId; + /** + * 库区 Id,对应 wms_rg 表中的Id + */ + private Long pnId; + /** + * 库存良品数量 + */ + private BigDecimal storageOkQty; + /** + * 库存不良品数量 + */ + private BigDecimal storageNgQty; + /** + * 库存报废数量 + */ + private BigDecimal storageSpQty; + /** + * 备注 + */ + private String description; + /** + * 状态:1为保存;2为提交;3为作废 + */ + private Boolean status; + /** + * 入库人 + */ + private Long keeper; + /** + * 入库时间 + */ + private LocalDateTime keeperTime; + /** + * 出库人 + */ + private Long outer; + /** + * 出库时间 + */ + private LocalDateTime outerTime; + /** + * 作废人 + */ + private Long cancel; + /** + * 作废时间 + */ + private LocalDateTime cancelTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storage/StorageMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storage/StorageMapper.java new file mode 100644 index 00000000..352a71a1 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/storage/StorageMapper.java @@ -0,0 +1,48 @@ +package com.chanko.yunxi.mes.module.heli.dal.mysql.storage; + +import java.util.*; + +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; +import org.apache.ibatis.annotations.Mapper; +import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*; + +/** + * 入/出库 Mapper + * + * @author 管理员 + */ +@Mapper +public interface StorageMapper extends BaseMapperX { + + default PageResult selectPage(StoragePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(StorageDO::getStockType, reqVO.getStockType()) + .eqIfPresent(StorageDO::getStockNo, reqVO.getStockNo()) + .eqIfPresent(StorageDO::getHeaderNo, reqVO.getHeaderNo()) + .eqIfPresent(StorageDO::getMaterialId, reqVO.getMaterialId()) + .eqIfPresent(StorageDO::getLotNo, reqVO.getLotNo()) + .eqIfPresent(StorageDO::getWhId, reqVO.getWhId()) + .eqIfPresent(StorageDO::getRgId, reqVO.getRgId()) + .eqIfPresent(StorageDO::getPnId, reqVO.getPnId()) + .eqIfPresent(StorageDO::getStorageOkQty, reqVO.getStorageOkQty()) + .eqIfPresent(StorageDO::getStorageNgQty, reqVO.getStorageNgQty()) + .eqIfPresent(StorageDO::getStorageSpQty, reqVO.getStorageSpQty()) + .eqIfPresent(StorageDO::getDescription, reqVO.getDescription()) + .eqIfPresent(StorageDO::getStatus, reqVO.getStatus()) + .eqIfPresent(StorageDO::getCreator, reqVO.getCreator()) + .betweenIfPresent(StorageDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(StorageDO::getUpdater, reqVO.getUpdater()) + .betweenIfPresent(StorageDO::getUpdateTime, reqVO.getUpdateTime()) + .eqIfPresent(StorageDO::getKeeper, reqVO.getKeeper()) + .betweenIfPresent(StorageDO::getKeeperTime, reqVO.getKeeperTime()) + .eqIfPresent(StorageDO::getOuter, reqVO.getOuter()) + .betweenIfPresent(StorageDO::getOuterTime, reqVO.getOuterTime()) + .eqIfPresent(StorageDO::getCancel, reqVO.getCancel()) + .betweenIfPresent(StorageDO::getCancelTime, reqVO.getCancelTime()) + .orderByDesc(StorageDO::getId)); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java new file mode 100644 index 00000000..c03c0434 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageService.java @@ -0,0 +1,55 @@ +package com.chanko.yunxi.mes.module.heli.service.storage; + +import java.util.*; +import javax.validation.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; + +/** + * 入/出库 Service 接口 + * + * @author 管理员 + */ +public interface StorageService { + + /** + * 创建入/出库 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createStorage(@Valid StorageSaveReqVO createReqVO); + + /** + * 更新入/出库 + * + * @param updateReqVO 更新信息 + */ + void updateStorage(@Valid StorageSaveReqVO updateReqVO); + + /** + * 删除入/出库 + * + * @param id 编号 + */ + void deleteStorage(Long id); + + /** + * 获得入/出库 + * + * @param id 编号 + * @return 入/出库 + */ + StorageDO getStorage(Long id); + + /** + * 获得入/出库分页 + * + * @param pageReqVO 分页查询 + * @return 入/出库分页 + */ + PageResult getStoragePage(StoragePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java new file mode 100644 index 00000000..4393d948 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java @@ -0,0 +1,74 @@ +package com.chanko.yunxi.mes.module.heli.service.storage; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; + +import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper; + +import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; + +/** + * 入/出库 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class StorageServiceImpl implements StorageService { + + @Resource + private StorageMapper storageMapper; + + @Override + public Long createStorage(StorageSaveReqVO createReqVO) { + // 插入 + StorageDO storage = BeanUtils.toBean(createReqVO, StorageDO.class); + storageMapper.insert(storage); + // 返回 + return storage.getId(); + } + + @Override + public void updateStorage(StorageSaveReqVO updateReqVO) { + // 校验存在 + validateStorageExists(updateReqVO.getId()); + // 更新 + StorageDO updateObj = BeanUtils.toBean(updateReqVO, StorageDO.class); + storageMapper.updateById(updateObj); + } + + @Override + public void deleteStorage(Long id) { + // 校验存在 + validateStorageExists(id); + // 删除 + storageMapper.deleteById(id); + } + + private void validateStorageExists(Long id) { + if (storageMapper.selectById(id) == null) { + throw exception(STORAGE_NOT_EXISTS); + } + } + + @Override + public StorageDO getStorage(Long id) { + return storageMapper.selectById(id); + } + + @Override + public PageResult getStoragePage(StoragePageReqVO pageReqVO) { + return storageMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/storage/StorageMapper.xml b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/storage/StorageMapper.xml new file mode 100644 index 00000000..e8588bc5 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/storage/StorageMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/storage/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/storage/index.ts new file mode 100644 index 00000000..d00cc959 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/storage/index.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +export interface StorageVO { + id: number + stockType: boolean + stockNo: string + headerNo: number + materialId: number + lotNo: string + whId: number + rgId: number + pnId: number + storageOkQty: number + storageNgQty: number + storageSpQty: number + description: string + status: boolean + keeper: number + keeperTime: Date + outer: number + outerTime: Date + cancel: number + cancelTime: Date +} + +// 查询入/出库分页 +export const getStoragePage = async (params) => { + return await request.get({ url: `/heli/storage/page`, params }) +} + +// 查询入/出库详情 +export const getStorage = async (id: number) => { + return await request.get({ url: `/heli/storage/get?id=` + id }) +} + +// 新增入/出库 +export const createStorage = async (data: StorageVO) => { + return await request.post({ url: `/heli/storage/create`, data }) +} + +// 修改入/出库 +export const updateStorage = async (data: StorageVO) => { + return await request.put({ url: `/heli/storage/update`, data }) +} + +// 删除入/出库 +export const deleteStorage = async (id: number) => { + return await request.delete({ url: `/heli/storage/delete?id=` + id }) +} + +// 导出入/出库 Excel +export const exportStorage = async (params) => { + return await request.download({ url: `/heli/storage/export-excel`, params }) +} \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue new file mode 100644 index 00000000..79ab2a1a --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/StorageForm.vue @@ -0,0 +1,203 @@ + + \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/index.vue new file mode 100644 index 00000000..07bb4b0f --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/storage/index.vue @@ -0,0 +1,433 @@ + + + \ No newline at end of file From 6acd97f643c5c3dc3a90a4c0f902b3c30fe9c2c0 Mon Sep 17 00:00:00 2001 From: siontion Date: Tue, 16 Jan 2024 12:31:02 +0800 Subject: [PATCH 2/3] Storage_NOT_EXISTS Storage_NOT_EXISTS --- .../service/storage/StorageServiceImpl.java | 148 +++++++++--------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java index 4393d948..40dd17e8 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/storage/StorageServiceImpl.java @@ -1,74 +1,74 @@ -package com.chanko.yunxi.mes.module.heli.service.storage; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*; -import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; -import com.chanko.yunxi.mes.framework.common.pojo.PageResult; -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; -import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; - -import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper; - -import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; - -/** - * 入/出库 Service 实现类 - * - * @author 管理员 - */ -@Service -@Validated -public class StorageServiceImpl implements StorageService { - - @Resource - private StorageMapper storageMapper; - - @Override - public Long createStorage(StorageSaveReqVO createReqVO) { - // 插入 - StorageDO storage = BeanUtils.toBean(createReqVO, StorageDO.class); - storageMapper.insert(storage); - // 返回 - return storage.getId(); - } - - @Override - public void updateStorage(StorageSaveReqVO updateReqVO) { - // 校验存在 - validateStorageExists(updateReqVO.getId()); - // 更新 - StorageDO updateObj = BeanUtils.toBean(updateReqVO, StorageDO.class); - storageMapper.updateById(updateObj); - } - - @Override - public void deleteStorage(Long id) { - // 校验存在 - validateStorageExists(id); - // 删除 - storageMapper.deleteById(id); - } - - private void validateStorageExists(Long id) { - if (storageMapper.selectById(id) == null) { - throw exception(STORAGE_NOT_EXISTS); - } - } - - @Override - public StorageDO getStorage(Long id) { - return storageMapper.selectById(id); - } - - @Override - public PageResult getStoragePage(StoragePageReqVO pageReqVO) { - return storageMapper.selectPage(pageReqVO); - } - -} \ No newline at end of file +package com.chanko.yunxi.mes.module.heli.service.storage; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.storage.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; + +import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper; + +import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; + +/** + * 入/出库 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class StorageServiceImpl implements StorageService { + + @Resource + private StorageMapper storageMapper; + + @Override + public Long createStorage(StorageSaveReqVO createReqVO) { + // 插入 + StorageDO storage = BeanUtils.toBean(createReqVO, StorageDO.class); + storageMapper.insert(storage); + // 返回 + return storage.getId(); + } + + @Override + public void updateStorage(StorageSaveReqVO updateReqVO) { + // 校验存在 + validateStorageExists(updateReqVO.getId()); + // 更新 + StorageDO updateObj = BeanUtils.toBean(updateReqVO, StorageDO.class); + storageMapper.updateById(updateObj); + } + + @Override + public void deleteStorage(Long id) { + // 校验存在 + validateStorageExists(id); + // 删除 + storageMapper.deleteById(id); + } + + private void validateStorageExists(Long id) { + if (storageMapper.selectById(id) == null) { + throw exception(Storage_NOT_EXISTS); + } + } + + @Override + public StorageDO getStorage(Long id) { + return storageMapper.selectById(id); + } + + @Override + public PageResult getStoragePage(StoragePageReqVO pageReqVO) { + return storageMapper.selectPage(pageReqVO); + } + +} From d6ea63ec54bda96363cd4890ddfbe97ede8ba9e1 Mon Sep 17 00:00:00 2001 From: siontion Date: Tue, 16 Jan 2024 12:42:46 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=87=BA=E5=BA=93=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E4=BA=BA=20outbound?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 出库管理 出库人 outbound --- sql/v1.1.0/heli.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/v1.1.0/heli.sql b/sql/v1.1.0/heli.sql index 48ba9845..07a8e7b7 100644 --- a/sql/v1.1.0/heli.sql +++ b/sql/v1.1.0/heli.sql @@ -29,8 +29,8 @@ CREATE TABLE `wms_storage` ( `tenant_id` bigint(20) NOT NULL COMMENT '租户编号', `keeper` bigint(20) NULL DEFAULT NULL COMMENT '入库人', `keeper_time` datetime NULL DEFAULT NULL COMMENT '入库时间', - `outer` bigint(20) NULL DEFAULT NULL COMMENT '出库人', - `outer_time` datetime NULL DEFAULT NULL COMMENT '出库时间', + `outbound` bigint(20) NULL DEFAULT NULL COMMENT '出库人', + `outbound_time` datetime NULL DEFAULT NULL COMMENT '出库时间', `cancel` bigint(20) NULL DEFAULT NULL COMMENT '作废人', `cancel_time` datetime NULL DEFAULT NULL COMMENT '作废时间', PRIMARY KEY (`id`) USING BTREE