From 1cbc8bb3a21eab16de2d7a6d8952014c947d3cbb Mon Sep 17 00:00:00 2001 From: chenshuichuan <1154693969@qq.com> Date: Thu, 6 Jun 2024 15:26:39 +0800 Subject: [PATCH] add stock workshop and feeding record --- .../admin/frps/FrpsServerController.java | 12 +- .../module/mes/enums/ErrorCodeConstants.java | 3 + .../FeedingRecordController.java | 95 ++++++++++ .../vo/FeedingRecordPageReqVO.java | 57 ++++++ .../feedingrecord/vo/FeedingRecordRespVO.java | 73 ++++++++ .../vo/FeedingRecordSaveReqVO.java | 49 +++++ .../StockWorkshopController.java | 95 ++++++++++ .../StockWorkshopDetailController.java | 95 ++++++++++ .../vo/StockWorkshopDetailPageReqVO.java | 51 ++++++ .../vo/StockWorkshopDetailRespVO.java | 64 +++++++ .../vo/StockWorkshopDetailSaveReqVO.java | 48 +++++ .../vo/StockWorkshopPageReqVO.java | 32 ++++ .../stockworkshop/vo/StockWorkshopRespVO.java | 37 ++++ .../vo/StockWorkshopSaveReqVO.java | 27 +++ .../feedingrecord/FeedingRecordDO.java | 81 ++++++++ .../stockworkshop/StockWorkshopDO.java | 44 +++++ .../stockworkshop/StockWorkshopDetailDO.java | 71 +++++++ .../feedingrecord/FeedingRecordMapper.java | 37 ++++ .../StockWorkshopDetailMapper.java | 35 ++++ .../stockworkshop/StockWorkshopMapper.java | 29 +++ .../feedingrecord/FeedingRecordService.java | 56 ++++++ .../FeedingRecordServiceImpl.java | 75 ++++++++ .../StockWorkshopDetailService.java | 56 ++++++ .../StockWorkshopDetailServiceImpl.java | 75 ++++++++ .../stockworkshop/StockWorkshopService.java | 56 ++++++ .../StockWorkshopServiceImpl.java | 75 ++++++++ .../feedingrecord/FeedingRecordMapper.xml | 12 ++ .../StockWorkshopDetailMapper.xml | 12 ++ .../stockworkshop/StockWorkshopMapper.xml | 12 ++ .../FeedingRecordServiceImplTest.java | 173 ++++++++++++++++++ .../StockWorkshopDetailServiceImplTest.java | 166 +++++++++++++++++ .../StockWorkshopServiceImplTest.java | 142 ++++++++++++++ .../src/test/resources/sql/clean.sql | 6 + .../src/test/resources/sql/create_tables.sql | 65 ++++++- 34 files changed, 2007 insertions(+), 9 deletions(-) create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/FeedingRecordController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/StockWorkshopController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/StockWorkshopDetailController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/feedingrecord/FeedingRecordDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/stockworkshop/StockWorkshopDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/stockworkshop/StockWorkshopDetailDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/feedingrecord/FeedingRecordMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/stockworkshop/StockWorkshopDetailMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/stockworkshop/StockWorkshopMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/feedingrecord/FeedingRecordMapper.xml create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/stockworkshop/StockWorkshopDetailMapper.xml create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/stockworkshop/StockWorkshopMapper.xml create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImplTest.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailServiceImplTest.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopServiceImplTest.java diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/frps/FrpsServerController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/frps/FrpsServerController.java index 12aa7ea118..cfeea18328 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/frps/FrpsServerController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/frps/FrpsServerController.java @@ -40,14 +40,14 @@ public class FrpsServerController { @PostMapping("/create") @Operation(summary = "创建代理服务器") - @PreAuthorize("@ss.hasPermission('iot:frps-server:create')") + @PreAuthorize("@ss.hasPermission('iot:frpc-proxy-server:create')") public CommonResult createFrpsServer(@Valid @RequestBody FrpsServerSaveReqVO createReqVO) { return success(frpsServerService.createFrpsServer(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新代理服务器") - @PreAuthorize("@ss.hasPermission('iot:frps-server:update')") + @PreAuthorize("@ss.hasPermission('iot:frpc-proxy-server:update')") public CommonResult updateFrpsServer(@Valid @RequestBody FrpsServerSaveReqVO updateReqVO) { frpsServerService.updateFrpsServer(updateReqVO); return success(true); @@ -56,7 +56,7 @@ public class FrpsServerController { @DeleteMapping("/delete") @Operation(summary = "删除代理服务器") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('iot:frps-server:delete')") + @PreAuthorize("@ss.hasPermission('iot:frpc-proxy-server:delete')") public CommonResult deleteFrpsServer(@RequestParam("id") Long id) { frpsServerService.deleteFrpsServer(id); return success(true); @@ -65,7 +65,7 @@ public class FrpsServerController { @GetMapping("/get") @Operation(summary = "获得代理服务器") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('iot:frps-server:query')") + @PreAuthorize("@ss.hasPermission('iot:frpc-proxy-server:query')") public CommonResult getFrpsServer(@RequestParam("id") Long id) { FrpsServerDO frpsServer = frpsServerService.getFrpsServer(id); return success(BeanUtils.toBean(frpsServer, FrpsServerRespVO.class)); @@ -73,7 +73,7 @@ public class FrpsServerController { @GetMapping("/page") @Operation(summary = "获得代理服务器分页") - @PreAuthorize("@ss.hasPermission('iot:frps-server:query')") + @PreAuthorize("@ss.hasPermission('iot:frpc-proxy-server:query')") public CommonResult> getFrpsServerPage(@Valid FrpsServerPageReqVO pageReqVO) { PageResult pageResult = frpsServerService.getFrpsServerPage(pageReqVO); return success(BeanUtils.toBean(pageResult, FrpsServerRespVO.class)); @@ -81,7 +81,7 @@ public class FrpsServerController { @GetMapping("/export-excel") @Operation(summary = "导出代理服务器 Excel") - @PreAuthorize("@ss.hasPermission('iot:frps-server:export')") + @PreAuthorize("@ss.hasPermission('iot:frpc-proxy-server:export')") @ApiAccessLog(operateType = EXPORT) public void exportFrpsServerExcel(@Valid FrpsServerPageReqVO pageReqVO, HttpServletResponse response) throws IOException { diff --git a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index 689384c0d5..9ea776c84c 100644 --- a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -46,5 +46,8 @@ public interface ErrorCodeConstants { ErrorCode MACHINE_COMPONENT_NAME_DUPLICATE = new ErrorCode(5_0081, "生产报工明细不存在"); ErrorCode SALE_ORDER_NOT_EXISTS = new ErrorCode(5_0081, "生产报工明细不存在"); ErrorCode SALE_ORDER_ITEMS_NOT_EXISTS = new ErrorCode(5_0081, "生产报工明细不存在"); + ErrorCode STOCK_WORKSHOP_DETAIL_NOT_EXISTS = new ErrorCode(5_0081, "生产报工明细不存在"); + ErrorCode STOCK_WORKSHOP_NOT_EXISTS = new ErrorCode(5_0081, "生产报工明细不存在"); + ErrorCode FEEDING_RECORD_NOT_EXISTS = new ErrorCode(5_0081, "生产报工明细不存在"); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/FeedingRecordController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/FeedingRecordController.java new file mode 100644 index 0000000000..81df46ae71 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/FeedingRecordController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.feedingrecord; + +import org.springframework.web.bind.annotation.*; + +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.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO; +import cn.iocoder.yudao.module.mes.service.feedingrecord.FeedingRecordService; + +@Tag(name = "管理后台 - 投料记录") +@RestController +@RequestMapping("/mes/feeding-record") +@Validated +public class FeedingRecordController { + + @Resource + private FeedingRecordService feedingRecordService; + + @PostMapping("/create") + @Operation(summary = "创建投料记录") + @PreAuthorize("@ss.hasPermission('mes:feeding-record:create')") + public CommonResult createFeedingRecord(@Valid @RequestBody FeedingRecordSaveReqVO createReqVO) { + return success(feedingRecordService.createFeedingRecord(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新投料记录") + @PreAuthorize("@ss.hasPermission('mes:feeding-record:update')") + public CommonResult updateFeedingRecord(@Valid @RequestBody FeedingRecordSaveReqVO updateReqVO) { + feedingRecordService.updateFeedingRecord(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除投料记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:feeding-record:delete')") + public CommonResult deleteFeedingRecord(@RequestParam("id") Long id) { + feedingRecordService.deleteFeedingRecord(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得投料记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:feeding-record:query')") + public CommonResult getFeedingRecord(@RequestParam("id") Long id) { + FeedingRecordDO feedingRecord = feedingRecordService.getFeedingRecord(id); + return success(BeanUtils.toBean(feedingRecord, FeedingRecordRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得投料记录分页") + @PreAuthorize("@ss.hasPermission('mes:feeding-record:query')") + public CommonResult> getFeedingRecordPage(@Valid FeedingRecordPageReqVO pageReqVO) { + PageResult pageResult = feedingRecordService.getFeedingRecordPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, FeedingRecordRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出投料记录 Excel") + @PreAuthorize("@ss.hasPermission('mes:feeding-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportFeedingRecordExcel(@Valid FeedingRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = feedingRecordService.getFeedingRecordPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "投料记录.xls", "数据", FeedingRecordRespVO.class, + BeanUtils.toBean(list, FeedingRecordRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordPageReqVO.java new file mode 100644 index 0000000000..7b74d1027a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordPageReqVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.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 FeedingRecordPageReqVO extends PageParam { + + @Schema(description = "单号") + private String feedingRecordCode; + + @Schema(description = "产品id", example = "9099") + private Long productId; + + @Schema(description = "计划id", example = "4922") + private Long planId; + + @Schema(description = "原料id", example = "26352") + private Long itemId; + + @Schema(description = "制浆线") + private String feedingPipeline; + + @Schema(description = "投料类型", example = "2") + private String feedingType; + + @Schema(description = "重量") + private BigDecimal weight; + + @Schema(description = "投料时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] feedingTime; + + @Schema(description = "记录人", example = "13784") + private Long userId; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "状态", example = "1") + private String recordStatus; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordRespVO.java new file mode 100644 index 0000000000..b6053239d1 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordRespVO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.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.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 投料记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class FeedingRecordRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30794") + @ExcelProperty("id") + private Long id; + + @Schema(description = "单号") + @ExcelProperty("单号") + private String feedingRecordCode; + + @Schema(description = "产品id", example = "9099") + @ExcelProperty("产品id") + private Long productId; + + @Schema(description = "计划id", example = "4922") + @ExcelProperty("计划id") + private Long planId; + + @Schema(description = "原料id", example = "26352") + @ExcelProperty("原料id") + private Long itemId; + + @Schema(description = "制浆线") + @ExcelProperty(value = "制浆线", converter = DictConvert.class) + @DictFormat("mes_feeding_pipeline") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String feedingPipeline; + + @Schema(description = "投料类型", example = "2") + @ExcelProperty(value = "投料类型", converter = DictConvert.class) + @DictFormat("mes_feeding_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String feedingType; + + @Schema(description = "重量") + @ExcelProperty("重量") + private BigDecimal weight; + + @Schema(description = "投料时间") + @ExcelProperty("投料时间") + private LocalDateTime feedingTime; + + @Schema(description = "记录人", example = "13784") + @ExcelProperty("记录人") + private Long userId; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "状态", example = "1") + @ExcelProperty("状态") + private String recordStatus; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordSaveReqVO.java new file mode 100644 index 0000000000..5c2caffc37 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/vo/FeedingRecordSaveReqVO.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 投料记录新增/修改 Request VO") +@Data +public class FeedingRecordSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30794") + private Long id; + + @Schema(description = "单号") + private String feedingRecordCode; + + @Schema(description = "产品id", example = "9099") + private Long productId; + + @Schema(description = "计划id", example = "4922") + private Long planId; + + @Schema(description = "原料id", example = "26352") + private Long itemId; + + @Schema(description = "制浆线") + private String feedingPipeline; + + @Schema(description = "投料类型", example = "2") + private String feedingType; + + @Schema(description = "重量") + private BigDecimal weight; + + @Schema(description = "投料时间") + private LocalDateTime feedingTime; + + @Schema(description = "记录人", example = "13784") + private Long userId; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "状态", example = "1") + private String recordStatus; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/StockWorkshopController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/StockWorkshopController.java new file mode 100644 index 0000000000..623cd53a2c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/StockWorkshopController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.stockworkshop; + +import org.springframework.web.bind.annotation.*; + +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.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; +import cn.iocoder.yudao.module.mes.service.stockworkshop.StockWorkshopService; + +@Tag(name = "管理后台 - 车间仓库存") +@RestController +@RequestMapping("/mes/stock-workshop") +@Validated +public class StockWorkshopController { + + @Resource + private StockWorkshopService stockWorkshopService; + + @PostMapping("/create") + @Operation(summary = "创建车间仓库存") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop:create')") + public CommonResult createStockWorkshop(@Valid @RequestBody StockWorkshopSaveReqVO createReqVO) { + return success(stockWorkshopService.createStockWorkshop(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新车间仓库存") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop:update')") + public CommonResult updateStockWorkshop(@Valid @RequestBody StockWorkshopSaveReqVO updateReqVO) { + stockWorkshopService.updateStockWorkshop(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除车间仓库存") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:stock-workshop:delete')") + public CommonResult deleteStockWorkshop(@RequestParam("id") Long id) { + stockWorkshopService.deleteStockWorkshop(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得车间仓库存") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop:query')") + public CommonResult getStockWorkshop(@RequestParam("id") Long id) { + StockWorkshopDO stockWorkshop = stockWorkshopService.getStockWorkshop(id); + return success(BeanUtils.toBean(stockWorkshop, StockWorkshopRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得车间仓库存分页") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop:query')") + public CommonResult> getStockWorkshopPage(@Valid StockWorkshopPageReqVO pageReqVO) { + PageResult pageResult = stockWorkshopService.getStockWorkshopPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, StockWorkshopRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出车间仓库存 Excel") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportStockWorkshopExcel(@Valid StockWorkshopPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = stockWorkshopService.getStockWorkshopPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "车间仓库存.xls", "数据", StockWorkshopRespVO.class, + BeanUtils.toBean(list, StockWorkshopRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/StockWorkshopDetailController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/StockWorkshopDetailController.java new file mode 100644 index 0000000000..cf44a4d899 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/StockWorkshopDetailController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.stockworkshop; + +import org.springframework.web.bind.annotation.*; + +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.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDetailDO; +import cn.iocoder.yudao.module.mes.service.stockworkshop.StockWorkshopDetailService; + +@Tag(name = "管理后台 - 车间仓明细") +@RestController +@RequestMapping("/mes/stock-workshop-detail") +@Validated +public class StockWorkshopDetailController { + + @Resource + private StockWorkshopDetailService stockWorkshopDetailService; + + @PostMapping("/create") + @Operation(summary = "创建车间仓明细") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop-detail:create')") + public CommonResult createStockWorkshopDetail(@Valid @RequestBody StockWorkshopDetailSaveReqVO createReqVO) { + return success(stockWorkshopDetailService.createStockWorkshopDetail(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新车间仓明细") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop-detail:update')") + public CommonResult updateStockWorkshopDetail(@Valid @RequestBody StockWorkshopDetailSaveReqVO updateReqVO) { + stockWorkshopDetailService.updateStockWorkshopDetail(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除车间仓明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:stock-workshop-detail:delete')") + public CommonResult deleteStockWorkshopDetail(@RequestParam("id") Long id) { + stockWorkshopDetailService.deleteStockWorkshopDetail(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得车间仓明细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop-detail:query')") + public CommonResult getStockWorkshopDetail(@RequestParam("id") Long id) { + StockWorkshopDetailDO stockWorkshopDetail = stockWorkshopDetailService.getStockWorkshopDetail(id); + return success(BeanUtils.toBean(stockWorkshopDetail, StockWorkshopDetailRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得车间仓明细分页") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop-detail:query')") + public CommonResult> getStockWorkshopDetailPage(@Valid StockWorkshopDetailPageReqVO pageReqVO) { + PageResult pageResult = stockWorkshopDetailService.getStockWorkshopDetailPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, StockWorkshopDetailRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出车间仓明细 Excel") + @PreAuthorize("@ss.hasPermission('mes:stock-workshop-detail:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportStockWorkshopDetailExcel(@Valid StockWorkshopDetailPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = stockWorkshopDetailService.getStockWorkshopDetailPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "车间仓明细.xls", "数据", StockWorkshopDetailRespVO.class, + BeanUtils.toBean(list, StockWorkshopDetailRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailPageReqVO.java new file mode 100644 index 0000000000..2f2ecd616a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailPageReqVO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.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 StockWorkshopDetailPageReqVO extends PageParam { + + @Schema(description = "原料id", example = "7505") + private Long itemId; + + @Schema(description = "数量", example = "28845") + private BigDecimal count; + + @Schema(description = "明细类别", example = "2") + private String detailType; + + @Schema(description = "领料单") + private String itemRequisitionCode; + + @Schema(description = "领料明细id", example = "877") + private Long itemRequisitionDetailId; + + @Schema(description = "投料单") + private String feedingRecordCode; + + @Schema(description = "投料id", example = "19286") + private Long feedingRecordId; + + @Schema(description = "操作人员", example = "26362") + private Long userId; + + @Schema(description = "单据时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] operateTime; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailRespVO.java new file mode 100644 index 0000000000..13d2944f7f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailRespVO.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.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.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 车间仓明细 Response VO") +@Data +@ExcelIgnoreUnannotated +public class StockWorkshopDetailRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24842") + @ExcelProperty("id") + private Long id; + + @Schema(description = "原料id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7505") + @ExcelProperty("原料id") + private Long itemId; + + @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "28845") + @ExcelProperty("数量") + private BigDecimal count; + + @Schema(description = "明细类别", example = "2") + @ExcelProperty(value = "明细类别", converter = DictConvert.class) + @DictFormat("mes_stock_workshop_detail_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String detailType; + + @Schema(description = "领料单") + @ExcelProperty("领料单") + private String itemRequisitionCode; + + @Schema(description = "领料明细id", example = "877") + @ExcelProperty("领料明细id") + private Long itemRequisitionDetailId; + + @Schema(description = "投料单") + @ExcelProperty("投料单") + private String feedingRecordCode; + + @Schema(description = "投料id", example = "19286") + @ExcelProperty("投料id") + private Long feedingRecordId; + + @Schema(description = "操作人员", requiredMode = Schema.RequiredMode.REQUIRED, example = "26362") + @ExcelProperty("操作人员") + private Long userId; + + @Schema(description = "单据时间") + @ExcelProperty("单据时间") + private LocalDateTime operateTime; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailSaveReqVO.java new file mode 100644 index 0000000000..aff1a29cba --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopDetailSaveReqVO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 车间仓明细新增/修改 Request VO") +@Data +public class StockWorkshopDetailSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24842") + private Long id; + + @Schema(description = "原料id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7505") + @NotNull(message = "原料id不能为空") + private Long itemId; + + @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "28845") + @NotNull(message = "数量不能为空") + private BigDecimal count; + + @Schema(description = "明细类别", example = "2") + private String detailType; + + @Schema(description = "领料单") + private String itemRequisitionCode; + + @Schema(description = "领料明细id", example = "877") + private Long itemRequisitionDetailId; + + @Schema(description = "投料单") + private String feedingRecordCode; + + @Schema(description = "投料id", example = "19286") + private Long feedingRecordId; + + @Schema(description = "操作人员", requiredMode = Schema.RequiredMode.REQUIRED, example = "26362") + @NotNull(message = "操作人员不能为空") + private Long userId; + + @Schema(description = "单据时间") + private LocalDateTime operateTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopPageReqVO.java new file mode 100644 index 0000000000..87c748456e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopPageReqVO.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.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 StockWorkshopPageReqVO extends PageParam { + + @Schema(description = "原料编号", example = "25972") + private Long itemId; + + @Schema(description = "库存数量", example = "30971") + private BigDecimal count; + + @Schema(description = "分类", example = "2548") + private Long categoryId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopRespVO.java new file mode 100644 index 0000000000..762467e57e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopRespVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.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 StockWorkshopRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20864") + @ExcelProperty("id") + private Long id; + + @Schema(description = "原料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25972") + @ExcelProperty("原料编号") + private Long itemId; + + @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "30971") + @ExcelProperty("库存数量") + private BigDecimal count; + + @Schema(description = "分类", example = "2548") + @ExcelProperty("分类") + private Long categoryId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopSaveReqVO.java new file mode 100644 index 0000000000..026ea50a10 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/stockworkshop/vo/StockWorkshopSaveReqVO.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 车间仓库存新增/修改 Request VO") +@Data +public class StockWorkshopSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20864") + private Long id; + + @Schema(description = "原料编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25972") + @NotNull(message = "原料编号不能为空") + private Long itemId; + + @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "30971") + @NotNull(message = "库存数量不能为空") + private BigDecimal count; + + @Schema(description = "分类", example = "2548") + private Long categoryId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/feedingrecord/FeedingRecordDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/feedingrecord/FeedingRecordDO.java new file mode 100644 index 0000000000..4ce42342c0 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/feedingrecord/FeedingRecordDO.java @@ -0,0 +1,81 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 投料记录 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_feeding_record") +@KeySequence("mes_feeding_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FeedingRecordDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 单号 + */ + private String feedingRecordCode; + /** + * 产品id + */ + private Long productId; + /** + * 计划id + */ + private Long planId; + /** + * 原料id + */ + private Long itemId; + /** + * 制浆线 + * + * 枚举 {@link TODO mes_feeding_pipeline 对应的类} + */ + private String feedingPipeline; + /** + * 投料类型 + * + * 枚举 {@link TODO mes_feeding_type 对应的类} + */ + private String feedingType; + /** + * 重量 + */ + private BigDecimal weight; + /** + * 投料时间 + */ + private LocalDateTime feedingTime; + /** + * 记录人 + */ + private Long userId; + /** + * 备注 + */ + private String remark; + /** + * 状态 + */ + private String recordStatus; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/stockworkshop/StockWorkshopDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/stockworkshop/StockWorkshopDO.java new file mode 100644 index 0000000000..620a601dc5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/stockworkshop/StockWorkshopDO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 车间仓库存 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_stock_workshop") +@KeySequence("mes_stock_workshop_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class StockWorkshopDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 原料编号 + */ + private Long itemId; + /** + * 库存数量 + */ + private BigDecimal count; + /** + * 分类 + */ + private Long categoryId; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/stockworkshop/StockWorkshopDetailDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/stockworkshop/StockWorkshopDetailDO.java new file mode 100644 index 0000000000..888ca01683 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/stockworkshop/StockWorkshopDetailDO.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 车间仓明细 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_stock_workshop_detail") +@KeySequence("mes_stock_workshop_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class StockWorkshopDetailDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 原料id + */ + private Long itemId; + /** + * 数量 + */ + private BigDecimal count; + /** + * 明细类别 + * + * 枚举 {@link TODO mes_stock_workshop_detail_type 对应的类} + */ + private String detailType; + /** + * 领料单 + */ + private String itemRequisitionCode; + /** + * 领料明细id + */ + private Long itemRequisitionDetailId; + /** + * 投料单 + */ + private String feedingRecordCode; + /** + * 投料id + */ + private Long feedingRecordId; + /** + * 操作人员 + */ + private Long userId; + /** + * 单据时间 + */ + private LocalDateTime operateTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/feedingrecord/FeedingRecordMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/feedingrecord/FeedingRecordMapper.java new file mode 100644 index 0000000000..3b634889a5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/feedingrecord/FeedingRecordMapper.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.*; + +/** + * 投料记录 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface FeedingRecordMapper extends BaseMapperX { + + default PageResult selectPage(FeedingRecordPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(FeedingRecordDO::getFeedingRecordCode, reqVO.getFeedingRecordCode()) + .eqIfPresent(FeedingRecordDO::getProductId, reqVO.getProductId()) + .eqIfPresent(FeedingRecordDO::getPlanId, reqVO.getPlanId()) + .eqIfPresent(FeedingRecordDO::getItemId, reqVO.getItemId()) + .eqIfPresent(FeedingRecordDO::getFeedingPipeline, reqVO.getFeedingPipeline()) + .eqIfPresent(FeedingRecordDO::getFeedingType, reqVO.getFeedingType()) + .eqIfPresent(FeedingRecordDO::getWeight, reqVO.getWeight()) + .betweenIfPresent(FeedingRecordDO::getFeedingTime, reqVO.getFeedingTime()) + .eqIfPresent(FeedingRecordDO::getUserId, reqVO.getUserId()) + .eqIfPresent(FeedingRecordDO::getRemark, reqVO.getRemark()) + .eqIfPresent(FeedingRecordDO::getRecordStatus, reqVO.getRecordStatus()) + .betweenIfPresent(FeedingRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(FeedingRecordDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/stockworkshop/StockWorkshopDetailMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/stockworkshop/StockWorkshopDetailMapper.java new file mode 100644 index 0000000000..6111788ec6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/stockworkshop/StockWorkshopDetailMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.stockworkshop; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDetailDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; + +/** + * 车间仓明细 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface StockWorkshopDetailMapper extends BaseMapperX { + + default PageResult selectPage(StockWorkshopDetailPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(StockWorkshopDetailDO::getItemId, reqVO.getItemId()) + .eqIfPresent(StockWorkshopDetailDO::getCount, reqVO.getCount()) + .eqIfPresent(StockWorkshopDetailDO::getDetailType, reqVO.getDetailType()) + .eqIfPresent(StockWorkshopDetailDO::getItemRequisitionCode, reqVO.getItemRequisitionCode()) + .eqIfPresent(StockWorkshopDetailDO::getItemRequisitionDetailId, reqVO.getItemRequisitionDetailId()) + .eqIfPresent(StockWorkshopDetailDO::getFeedingRecordCode, reqVO.getFeedingRecordCode()) + .eqIfPresent(StockWorkshopDetailDO::getFeedingRecordId, reqVO.getFeedingRecordId()) + .eqIfPresent(StockWorkshopDetailDO::getUserId, reqVO.getUserId()) + .betweenIfPresent(StockWorkshopDetailDO::getOperateTime, reqVO.getOperateTime()) + .betweenIfPresent(StockWorkshopDetailDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(StockWorkshopDetailDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/stockworkshop/StockWorkshopMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/stockworkshop/StockWorkshopMapper.java new file mode 100644 index 0000000000..6cffa8e942 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/stockworkshop/StockWorkshopMapper.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.stockworkshop; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; + +/** + * 车间仓库存 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface StockWorkshopMapper extends BaseMapperX { + + default PageResult selectPage(StockWorkshopPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(StockWorkshopDO::getItemId, reqVO.getItemId()) + .eqIfPresent(StockWorkshopDO::getCount, reqVO.getCount()) + .eqIfPresent(StockWorkshopDO::getCategoryId, reqVO.getCategoryId()) + .betweenIfPresent(StockWorkshopDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(StockWorkshopDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordService.java new file mode 100644 index 0000000000..db6d0c0204 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.service.feedingrecord; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 投料记录 Service 接口 + * + * @author 内蒙必硕 + */ +public interface FeedingRecordService { + + /** + * 创建投料记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFeedingRecord(@Valid FeedingRecordSaveReqVO createReqVO); + + /** + * 更新投料记录 + * + * @param updateReqVO 更新信息 + */ + void updateFeedingRecord(@Valid FeedingRecordSaveReqVO updateReqVO); + + /** + * 删除投料记录 + * + * @param id 编号 + */ + void deleteFeedingRecord(Long id); + + /** + * 获得投料记录 + * + * @param id 编号 + * @return 投料记录 + */ + FeedingRecordDO getFeedingRecord(Long id); + + /** + * 获得投料记录分页 + * + * @param pageReqVO 分页查询 + * @return 投料记录分页 + */ + PageResult getFeedingRecordPage(FeedingRecordPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImpl.java new file mode 100644 index 0000000000..4bfe0ff804 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.mes.service.feedingrecord; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord.FeedingRecordMapper; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 投料记录 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class FeedingRecordServiceImpl implements FeedingRecordService { + + @Resource + private FeedingRecordMapper feedingRecordMapper; + + @Override + public Long createFeedingRecord(FeedingRecordSaveReqVO createReqVO) { + // 插入 + FeedingRecordDO feedingRecord = BeanUtils.toBean(createReqVO, FeedingRecordDO.class); + feedingRecordMapper.insert(feedingRecord); + // 返回 + return feedingRecord.getId(); + } + + @Override + public void updateFeedingRecord(FeedingRecordSaveReqVO updateReqVO) { + // 校验存在 + validateFeedingRecordExists(updateReqVO.getId()); + // 更新 + FeedingRecordDO updateObj = BeanUtils.toBean(updateReqVO, FeedingRecordDO.class); + feedingRecordMapper.updateById(updateObj); + } + + @Override + public void deleteFeedingRecord(Long id) { + // 校验存在 + validateFeedingRecordExists(id); + // 删除 + feedingRecordMapper.deleteById(id); + } + + private void validateFeedingRecordExists(Long id) { + if (feedingRecordMapper.selectById(id) == null) { + throw exception(FEEDING_RECORD_NOT_EXISTS); + } + } + + @Override + public FeedingRecordDO getFeedingRecord(Long id) { + return feedingRecordMapper.selectById(id); + } + + @Override + public PageResult getFeedingRecordPage(FeedingRecordPageReqVO pageReqVO) { + return feedingRecordMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailService.java new file mode 100644 index 0000000000..001a64be92 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.service.stockworkshop; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDetailDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 车间仓明细 Service 接口 + * + * @author 内蒙必硕 + */ +public interface StockWorkshopDetailService { + + /** + * 创建车间仓明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createStockWorkshopDetail(@Valid StockWorkshopDetailSaveReqVO createReqVO); + + /** + * 更新车间仓明细 + * + * @param updateReqVO 更新信息 + */ + void updateStockWorkshopDetail(@Valid StockWorkshopDetailSaveReqVO updateReqVO); + + /** + * 删除车间仓明细 + * + * @param id 编号 + */ + void deleteStockWorkshopDetail(Long id); + + /** + * 获得车间仓明细 + * + * @param id 编号 + * @return 车间仓明细 + */ + StockWorkshopDetailDO getStockWorkshopDetail(Long id); + + /** + * 获得车间仓明细分页 + * + * @param pageReqVO 分页查询 + * @return 车间仓明细分页 + */ + PageResult getStockWorkshopDetailPage(StockWorkshopDetailPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailServiceImpl.java new file mode 100644 index 0000000000..20504b009a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.mes.service.stockworkshop; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDetailDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.stockworkshop.StockWorkshopDetailMapper; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 车间仓明细 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class StockWorkshopDetailServiceImpl implements StockWorkshopDetailService { + + @Resource + private StockWorkshopDetailMapper stockWorkshopDetailMapper; + + @Override + public Long createStockWorkshopDetail(StockWorkshopDetailSaveReqVO createReqVO) { + // 插入 + StockWorkshopDetailDO stockWorkshopDetail = BeanUtils.toBean(createReqVO, StockWorkshopDetailDO.class); + stockWorkshopDetailMapper.insert(stockWorkshopDetail); + // 返回 + return stockWorkshopDetail.getId(); + } + + @Override + public void updateStockWorkshopDetail(StockWorkshopDetailSaveReqVO updateReqVO) { + // 校验存在 + validateStockWorkshopDetailExists(updateReqVO.getId()); + // 更新 + StockWorkshopDetailDO updateObj = BeanUtils.toBean(updateReqVO, StockWorkshopDetailDO.class); + stockWorkshopDetailMapper.updateById(updateObj); + } + + @Override + public void deleteStockWorkshopDetail(Long id) { + // 校验存在 + validateStockWorkshopDetailExists(id); + // 删除 + stockWorkshopDetailMapper.deleteById(id); + } + + private void validateStockWorkshopDetailExists(Long id) { + if (stockWorkshopDetailMapper.selectById(id) == null) { + throw exception(STOCK_WORKSHOP_DETAIL_NOT_EXISTS); + } + } + + @Override + public StockWorkshopDetailDO getStockWorkshopDetail(Long id) { + return stockWorkshopDetailMapper.selectById(id); + } + + @Override + public PageResult getStockWorkshopDetailPage(StockWorkshopDetailPageReqVO pageReqVO) { + return stockWorkshopDetailMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopService.java new file mode 100644 index 0000000000..46613fa595 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.service.stockworkshop; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 车间仓库存 Service 接口 + * + * @author 内蒙必硕 + */ +public interface StockWorkshopService { + + /** + * 创建车间仓库存 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createStockWorkshop(@Valid StockWorkshopSaveReqVO createReqVO); + + /** + * 更新车间仓库存 + * + * @param updateReqVO 更新信息 + */ + void updateStockWorkshop(@Valid StockWorkshopSaveReqVO updateReqVO); + + /** + * 删除车间仓库存 + * + * @param id 编号 + */ + void deleteStockWorkshop(Long id); + + /** + * 获得车间仓库存 + * + * @param id 编号 + * @return 车间仓库存 + */ + StockWorkshopDO getStockWorkshop(Long id); + + /** + * 获得车间仓库存分页 + * + * @param pageReqVO 分页查询 + * @return 车间仓库存分页 + */ + PageResult getStockWorkshopPage(StockWorkshopPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopServiceImpl.java new file mode 100644 index 0000000000..c829feff50 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.mes.service.stockworkshop; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.mes.dal.mysql.stockworkshop.StockWorkshopMapper; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 车间仓库存 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class StockWorkshopServiceImpl implements StockWorkshopService { + + @Resource + private StockWorkshopMapper stockWorkshopMapper; + + @Override + public Long createStockWorkshop(StockWorkshopSaveReqVO createReqVO) { + // 插入 + StockWorkshopDO stockWorkshop = BeanUtils.toBean(createReqVO, StockWorkshopDO.class); + stockWorkshopMapper.insert(stockWorkshop); + // 返回 + return stockWorkshop.getId(); + } + + @Override + public void updateStockWorkshop(StockWorkshopSaveReqVO updateReqVO) { + // 校验存在 + validateStockWorkshopExists(updateReqVO.getId()); + // 更新 + StockWorkshopDO updateObj = BeanUtils.toBean(updateReqVO, StockWorkshopDO.class); + stockWorkshopMapper.updateById(updateObj); + } + + @Override + public void deleteStockWorkshop(Long id) { + // 校验存在 + validateStockWorkshopExists(id); + // 删除 + stockWorkshopMapper.deleteById(id); + } + + private void validateStockWorkshopExists(Long id) { + if (stockWorkshopMapper.selectById(id) == null) { + throw exception(STOCK_WORKSHOP_NOT_EXISTS); + } + } + + @Override + public StockWorkshopDO getStockWorkshop(Long id) { + return stockWorkshopMapper.selectById(id); + } + + @Override + public PageResult getStockWorkshopPage(StockWorkshopPageReqVO pageReqVO) { + return stockWorkshopMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/feedingrecord/FeedingRecordMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/feedingrecord/FeedingRecordMapper.xml new file mode 100644 index 0000000000..957f20143e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/feedingrecord/FeedingRecordMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/stockworkshop/StockWorkshopDetailMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/stockworkshop/StockWorkshopDetailMapper.xml new file mode 100644 index 0000000000..3ea81cade4 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/stockworkshop/StockWorkshopDetailMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/stockworkshop/StockWorkshopMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/stockworkshop/StockWorkshopMapper.xml new file mode 100644 index 0000000000..cd7074751e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/stockworkshop/StockWorkshopMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImplTest.java new file mode 100644 index 0000000000..35520ef11c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImplTest.java @@ -0,0 +1,173 @@ +package cn.iocoder.yudao.module.mes.service.feedingrecord; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO; +import cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord.FeedingRecordMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link FeedingRecordServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(FeedingRecordServiceImpl.class) +public class FeedingRecordServiceImplTest extends BaseDbUnitTest { + + @Resource + private FeedingRecordServiceImpl feedingRecordService; + + @Resource + private FeedingRecordMapper feedingRecordMapper; + + @Test + public void testCreateFeedingRecord_success() { + // 准备参数 + FeedingRecordSaveReqVO createReqVO = randomPojo(FeedingRecordSaveReqVO.class).setId(null); + + // 调用 + Long feedingRecordId = feedingRecordService.createFeedingRecord(createReqVO); + // 断言 + assertNotNull(feedingRecordId); + // 校验记录的属性是否正确 + FeedingRecordDO feedingRecord = feedingRecordMapper.selectById(feedingRecordId); + assertPojoEquals(createReqVO, feedingRecord, "id"); + } + + @Test + public void testUpdateFeedingRecord_success() { + // mock 数据 + FeedingRecordDO dbFeedingRecord = randomPojo(FeedingRecordDO.class); + feedingRecordMapper.insert(dbFeedingRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + FeedingRecordSaveReqVO updateReqVO = randomPojo(FeedingRecordSaveReqVO.class, o -> { + o.setId(dbFeedingRecord.getId()); // 设置更新的 ID + }); + + // 调用 + feedingRecordService.updateFeedingRecord(updateReqVO); + // 校验是否更新正确 + FeedingRecordDO feedingRecord = feedingRecordMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, feedingRecord); + } + + @Test + public void testUpdateFeedingRecord_notExists() { + // 准备参数 + FeedingRecordSaveReqVO updateReqVO = randomPojo(FeedingRecordSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> feedingRecordService.updateFeedingRecord(updateReqVO), FEEDING_RECORD_NOT_EXISTS); + } + + @Test + public void testDeleteFeedingRecord_success() { + // mock 数据 + FeedingRecordDO dbFeedingRecord = randomPojo(FeedingRecordDO.class); + feedingRecordMapper.insert(dbFeedingRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbFeedingRecord.getId(); + + // 调用 + feedingRecordService.deleteFeedingRecord(id); + // 校验数据不存在了 + assertNull(feedingRecordMapper.selectById(id)); + } + + @Test + public void testDeleteFeedingRecord_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> feedingRecordService.deleteFeedingRecord(id), FEEDING_RECORD_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetFeedingRecordPage() { + // mock 数据 + FeedingRecordDO dbFeedingRecord = randomPojo(FeedingRecordDO.class, o -> { // 等会查询到 + o.setFeedingRecordCode(null); + o.setProductId(null); + o.setPlanId(null); + o.setItemId(null); + o.setFeedingPipeline(null); + o.setFeedingType(null); + o.setWeight(null); + o.setFeedingTime(null); + o.setUserId(null); + o.setRemark(null); + o.setRecordStatus(null); + o.setCreateTime(null); + }); + feedingRecordMapper.insert(dbFeedingRecord); + // 测试 feedingRecordCode 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setFeedingRecordCode(null))); + // 测试 productId 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setProductId(null))); + // 测试 planId 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setPlanId(null))); + // 测试 itemId 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setItemId(null))); + // 测试 feedingPipeline 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setFeedingPipeline(null))); + // 测试 feedingType 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setFeedingType(null))); + // 测试 weight 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setWeight(null))); + // 测试 feedingTime 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setFeedingTime(null))); + // 测试 userId 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setUserId(null))); + // 测试 remark 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setRemark(null))); + // 测试 recordStatus 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setRecordStatus(null))); + // 测试 createTime 不匹配 + feedingRecordMapper.insert(cloneIgnoreId(dbFeedingRecord, o -> o.setCreateTime(null))); + // 准备参数 + FeedingRecordPageReqVO reqVO = new FeedingRecordPageReqVO(); + reqVO.setFeedingRecordCode(null); + reqVO.setProductId(null); + reqVO.setPlanId(null); + reqVO.setItemId(null); + reqVO.setFeedingPipeline(null); + reqVO.setFeedingType(null); + reqVO.setWeight(null); + reqVO.setFeedingTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setUserId(null); + reqVO.setRemark(null); + reqVO.setRecordStatus(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = feedingRecordService.getFeedingRecordPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbFeedingRecord, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailServiceImplTest.java new file mode 100644 index 0000000000..a2a99ec9f8 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopDetailServiceImplTest.java @@ -0,0 +1,166 @@ +package cn.iocoder.yudao.module.mes.service.stockworkshop; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDetailDO; +import cn.iocoder.yudao.module.mes.dal.mysql.stockworkshop.StockWorkshopDetailMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link StockWorkshopDetailServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(StockWorkshopDetailServiceImpl.class) +public class StockWorkshopDetailServiceImplTest extends BaseDbUnitTest { + + @Resource + private StockWorkshopDetailServiceImpl stockWorkshopDetailService; + + @Resource + private StockWorkshopDetailMapper stockWorkshopDetailMapper; + + @Test + public void testCreateStockWorkshopDetail_success() { + // 准备参数 + StockWorkshopDetailSaveReqVO createReqVO = randomPojo(StockWorkshopDetailSaveReqVO.class).setId(null); + + // 调用 + Long stockWorkshopDetailId = stockWorkshopDetailService.createStockWorkshopDetail(createReqVO); + // 断言 + assertNotNull(stockWorkshopDetailId); + // 校验记录的属性是否正确 + StockWorkshopDetailDO stockWorkshopDetail = stockWorkshopDetailMapper.selectById(stockWorkshopDetailId); + assertPojoEquals(createReqVO, stockWorkshopDetail, "id"); + } + + @Test + public void testUpdateStockWorkshopDetail_success() { + // mock 数据 + StockWorkshopDetailDO dbStockWorkshopDetail = randomPojo(StockWorkshopDetailDO.class); + stockWorkshopDetailMapper.insert(dbStockWorkshopDetail);// @Sql: 先插入出一条存在的数据 + // 准备参数 + StockWorkshopDetailSaveReqVO updateReqVO = randomPojo(StockWorkshopDetailSaveReqVO.class, o -> { + o.setId(dbStockWorkshopDetail.getId()); // 设置更新的 ID + }); + + // 调用 + stockWorkshopDetailService.updateStockWorkshopDetail(updateReqVO); + // 校验是否更新正确 + StockWorkshopDetailDO stockWorkshopDetail = stockWorkshopDetailMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, stockWorkshopDetail); + } + + @Test + public void testUpdateStockWorkshopDetail_notExists() { + // 准备参数 + StockWorkshopDetailSaveReqVO updateReqVO = randomPojo(StockWorkshopDetailSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> stockWorkshopDetailService.updateStockWorkshopDetail(updateReqVO), STOCK_WORKSHOP_DETAIL_NOT_EXISTS); + } + + @Test + public void testDeleteStockWorkshopDetail_success() { + // mock 数据 + StockWorkshopDetailDO dbStockWorkshopDetail = randomPojo(StockWorkshopDetailDO.class); + stockWorkshopDetailMapper.insert(dbStockWorkshopDetail);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbStockWorkshopDetail.getId(); + + // 调用 + stockWorkshopDetailService.deleteStockWorkshopDetail(id); + // 校验数据不存在了 + assertNull(stockWorkshopDetailMapper.selectById(id)); + } + + @Test + public void testDeleteStockWorkshopDetail_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> stockWorkshopDetailService.deleteStockWorkshopDetail(id), STOCK_WORKSHOP_DETAIL_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetStockWorkshopDetailPage() { + // mock 数据 + StockWorkshopDetailDO dbStockWorkshopDetail = randomPojo(StockWorkshopDetailDO.class, o -> { // 等会查询到 + o.setItemId(null); + o.setCount(null); + o.setDetailType(null); + o.setItemRequisitionCode(null); + o.setItemRequisitionDetailId(null); + o.setFeedingRecordCode(null); + o.setFeedingRecordId(null); + o.setUserId(null); + o.setOperateTime(null); + o.setCreateTime(null); + }); + stockWorkshopDetailMapper.insert(dbStockWorkshopDetail); + // 测试 itemId 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setItemId(null))); + // 测试 count 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setCount(null))); + // 测试 detailType 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setDetailType(null))); + // 测试 itemRequisitionCode 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setItemRequisitionCode(null))); + // 测试 itemRequisitionDetailId 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setItemRequisitionDetailId(null))); + // 测试 feedingRecordCode 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setFeedingRecordCode(null))); + // 测试 feedingRecordId 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setFeedingRecordId(null))); + // 测试 userId 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setUserId(null))); + // 测试 operateTime 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setOperateTime(null))); + // 测试 createTime 不匹配 + stockWorkshopDetailMapper.insert(cloneIgnoreId(dbStockWorkshopDetail, o -> o.setCreateTime(null))); + // 准备参数 + StockWorkshopDetailPageReqVO reqVO = new StockWorkshopDetailPageReqVO(); + reqVO.setItemId(null); + reqVO.setCount(null); + reqVO.setDetailType(null); + reqVO.setItemRequisitionCode(null); + reqVO.setItemRequisitionDetailId(null); + reqVO.setFeedingRecordCode(null); + reqVO.setFeedingRecordId(null); + reqVO.setUserId(null); + reqVO.setOperateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = stockWorkshopDetailService.getStockWorkshopDetailPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbStockWorkshopDetail, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopServiceImplTest.java new file mode 100644 index 0000000000..a53226a658 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/stockworkshop/StockWorkshopServiceImplTest.java @@ -0,0 +1,142 @@ +package cn.iocoder.yudao.module.mes.service.stockworkshop; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; +import cn.iocoder.yudao.module.mes.dal.mysql.stockworkshop.StockWorkshopMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link StockWorkshopServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(StockWorkshopServiceImpl.class) +public class StockWorkshopServiceImplTest extends BaseDbUnitTest { + + @Resource + private StockWorkshopServiceImpl stockWorkshopService; + + @Resource + private StockWorkshopMapper stockWorkshopMapper; + + @Test + public void testCreateStockWorkshop_success() { + // 准备参数 + StockWorkshopSaveReqVO createReqVO = randomPojo(StockWorkshopSaveReqVO.class).setId(null); + + // 调用 + Long stockWorkshopId = stockWorkshopService.createStockWorkshop(createReqVO); + // 断言 + assertNotNull(stockWorkshopId); + // 校验记录的属性是否正确 + StockWorkshopDO stockWorkshop = stockWorkshopMapper.selectById(stockWorkshopId); + assertPojoEquals(createReqVO, stockWorkshop, "id"); + } + + @Test + public void testUpdateStockWorkshop_success() { + // mock 数据 + StockWorkshopDO dbStockWorkshop = randomPojo(StockWorkshopDO.class); + stockWorkshopMapper.insert(dbStockWorkshop);// @Sql: 先插入出一条存在的数据 + // 准备参数 + StockWorkshopSaveReqVO updateReqVO = randomPojo(StockWorkshopSaveReqVO.class, o -> { + o.setId(dbStockWorkshop.getId()); // 设置更新的 ID + }); + + // 调用 + stockWorkshopService.updateStockWorkshop(updateReqVO); + // 校验是否更新正确 + StockWorkshopDO stockWorkshop = stockWorkshopMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, stockWorkshop); + } + + @Test + public void testUpdateStockWorkshop_notExists() { + // 准备参数 + StockWorkshopSaveReqVO updateReqVO = randomPojo(StockWorkshopSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> stockWorkshopService.updateStockWorkshop(updateReqVO), STOCK_WORKSHOP_NOT_EXISTS); + } + + @Test + public void testDeleteStockWorkshop_success() { + // mock 数据 + StockWorkshopDO dbStockWorkshop = randomPojo(StockWorkshopDO.class); + stockWorkshopMapper.insert(dbStockWorkshop);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbStockWorkshop.getId(); + + // 调用 + stockWorkshopService.deleteStockWorkshop(id); + // 校验数据不存在了 + assertNull(stockWorkshopMapper.selectById(id)); + } + + @Test + public void testDeleteStockWorkshop_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> stockWorkshopService.deleteStockWorkshop(id), STOCK_WORKSHOP_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetStockWorkshopPage() { + // mock 数据 + StockWorkshopDO dbStockWorkshop = randomPojo(StockWorkshopDO.class, o -> { // 等会查询到 + o.setItemId(null); + o.setCount(null); + o.setCategoryId(null); + o.setCreateTime(null); + }); + stockWorkshopMapper.insert(dbStockWorkshop); + // 测试 itemId 不匹配 + stockWorkshopMapper.insert(cloneIgnoreId(dbStockWorkshop, o -> o.setItemId(null))); + // 测试 count 不匹配 + stockWorkshopMapper.insert(cloneIgnoreId(dbStockWorkshop, o -> o.setCount(null))); + // 测试 categoryId 不匹配 + stockWorkshopMapper.insert(cloneIgnoreId(dbStockWorkshop, o -> o.setCategoryId(null))); + // 测试 createTime 不匹配 + stockWorkshopMapper.insert(cloneIgnoreId(dbStockWorkshop, o -> o.setCreateTime(null))); + // 准备参数 + StockWorkshopPageReqVO reqVO = new StockWorkshopPageReqVO(); + reqVO.setItemId(null); + reqVO.setCount(null); + reqVO.setCategoryId(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = stockWorkshopService.getStockWorkshopPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbStockWorkshop, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/clean.sql b/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/clean.sql index 3d98bbdd0a..954ee9ae3e 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/clean.sql +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/clean.sql @@ -34,6 +34,12 @@ DELETE FROM "mes_produce_report_detail"; -- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 DELETE FROM "mes_machine_component"; +-- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "mes_stock_workshop_detail"; +-- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "mes_stock_workshop"; +-- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "mes_feeding_record"; diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/create_tables.sql b/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/create_tables.sql index 7df31e500f..2a9bc43b3e 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/create_tables.sql +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/create_tables.sql @@ -228,7 +228,7 @@ CREATE TABLE IF NOT EXISTS "mes_record_suijiang" "updater" varchar DEFAULT '', "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint , + "tenant_id" bigint, PRIMARY KEY ("id") ) COMMENT '碎浆记录表'; @@ -330,9 +330,68 @@ CREATE TABLE IF NOT EXISTS "mes_machine_component" "updater" varchar DEFAULT '', "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "deleted" bit NOT NULL DEFAULT FALSE, - "tenant_id" bigint , + "tenant_id" bigint, "status" int NOT NULL, "component_type" int NOT NULL, "machine_type" varchar, PRIMARY KEY ("id") -) COMMENT '机台组织表'; \ No newline at end of file +) COMMENT '机台组织表'; + +CREATE TABLE IF NOT EXISTS "mes_feeding_record" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "feeding_record_code" varchar, + "product_id" bigint, + "plan_id" bigint, + "item_id" bigint, + "feeding_pipeline" varchar, + "feeding_type" varchar, + "weight" varchar, + "feeding_time" varchar, + "user_id" bigint, + "remark" varchar, + "record_status" varchar, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint , + PRIMARY KEY ("id") +) COMMENT '投料记录'; +CREATE TABLE IF NOT EXISTS "mes_stock_workshop" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "item_id" bigint NOT NULL, + "count" varchar NOT NULL, + "category_id" bigint, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint , + PRIMARY KEY ("id") +) COMMENT '车间仓库存'; +CREATE TABLE IF NOT EXISTS "mes_stock_workshop_detail" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "item_id" bigint NOT NULL, + "count" varchar NOT NULL, + "detail_type" varchar, + "item_requisition_code" varchar, + "item_requisition_detail_id" bigint, + "feeding_record_code" varchar, + "feeding_record_id" bigint, + "user_id" bigint NOT NULL, + "operate_time" varchar, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint , + PRIMARY KEY ("id") +) COMMENT '车间仓出入库明细'; + +