diff --git a/sql/mysql/mesdata.sql b/sql/mysql/mesdata.sql index 230140d504..7d2d4e489f 100644 --- a/sql/mysql/mesdata.sql +++ b/sql/mysql/mesdata.sql @@ -275,20 +275,20 @@ CREATE TABLE `mes_error_record` CREATE TABLE `mes_stock_in_detail` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', - `stock_in_id` bigint DEFAULT NULL COMMENT '入库单id', - `stock_in_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '入库单编号', - `stock_in_item_id` bigint DEFAULT NULL COMMENT '入库单项id', - `plan_id` bigint DEFAULT NULL COMMENT '计划id', - `product_id` bigint DEFAULT NULL COMMENT '产品', + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `stock_in_id` bigint DEFAULT NULL COMMENT '入库单id', + `stock_in_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '入库单编号', + `stock_in_item_id` bigint DEFAULT NULL COMMENT '入库单项id', + `plan_id` bigint DEFAULT NULL COMMENT '计划id', + `product_id` bigint DEFAULT NULL COMMENT '产品', `number` decimal(24, 6) DEFAULT NULL COMMENT '数量', - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 @@ -318,3 +318,57 @@ CREATE TABLE `mes_org_worker` DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC COMMENT ='工位安排表'; + +CREATE TABLE `mes_work_report_plan` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `report_id` bigint DEFAULT NULL COMMENT '报工单id', + `plan_id` bigint DEFAULT NULL COMMENT '计划id', + `product_id` bigint DEFAULT NULL COMMENT '产品ID', + `quality_number_plan` decimal(24, 6) DEFAULT NULL COMMENT '成品数量', + `waste_number_plan` decimal(24, 6) DEFAULT NULL COMMENT '废品数量', + `report_time_plan` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '计件时间', + `total_time_plan` decimal(24, 6) DEFAULT NULL COMMENT '总时长', + + + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 2 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci + ROW_FORMAT = DYNAMIC COMMENT ='报工分配计划'; + + +CREATE TABLE `mes_produce_report_change_record` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `report_id` bigint DEFAULT NULL COMMENT '报工单id', + `change_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '变更类型', + `before_change` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '变更前数据', + `after_change` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '变更后数据', + + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 2 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci + ROW_FORMAT = DYNAMIC COMMENT ='报工变更记录'; + +CREATE VIEW mes_view_report_plan_detail +AS +SELECT wp.*, pd.user_id ,pd.report_type ,pd.group_type ,pd.org_type ,pd.org_id ,pd.quality_number ,pd.waste_number , + pd.report_date ,pd.report_status ,pd.creator as report_creator +FROM mes_work_report_plan wp + JOIN mes_produce_report_detail pd ON wp.report_id = pd.id; 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 bb2e3fcf45..12d1216f38 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 @@ -56,6 +56,8 @@ public interface ErrorCodeConstants { ErrorCode FEEDING_RECORD_PLAN_NOT_EXISTS = new ErrorCode(5_0082, "投料分配计划不存在"); ErrorCode STOCK_IN_DETAIL_NOT_EXISTS = new ErrorCode(5_0082, "生产入库分配计划不存在"); ErrorCode ERROR_RECORD_NOT_EXISTS = new ErrorCode(5_0082, "投错误记录不存在"); - ErrorCode ORG_WORKER_NOT_EXISTS = new ErrorCode(5_0083, "工位安排不存在"); + + ErrorCode PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS = new ErrorCode(5_0084, "报工变更记录不存在"); + ErrorCode WORK_REPORT_PLAN_NOT_EXISTS = new ErrorCode(5_0085, "报工分配计划不存在"); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/ProduceReportChangeRecordController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/ProduceReportChangeRecordController.java new file mode 100644 index 0000000000..3605e25290 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/ProduceReportChangeRecordController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.changerecord; + +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 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.changerecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO; +import cn.iocoder.yudao.module.mes.service.changerecord.ProduceReportChangeRecordService; + +@Tag(name = "管理后台 - 报工变更记录") +@RestController +@RequestMapping("/mes/produce-report-change-record") +@Validated +public class ProduceReportChangeRecordController { + + @Resource + private ProduceReportChangeRecordService produceReportChangeRecordService; + + @PostMapping("/create") + @Operation(summary = "创建报工变更记录") + @PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:create')") + public CommonResult createProduceReportChangeRecord(@Valid @RequestBody ProduceReportChangeRecordSaveReqVO createReqVO) { + return success(produceReportChangeRecordService.createProduceReportChangeRecord(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新报工变更记录") + @PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:update')") + public CommonResult updateProduceReportChangeRecord(@Valid @RequestBody ProduceReportChangeRecordSaveReqVO updateReqVO) { + produceReportChangeRecordService.updateProduceReportChangeRecord(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除报工变更记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:delete')") + public CommonResult deleteProduceReportChangeRecord(@RequestParam("id") Long id) { + produceReportChangeRecordService.deleteProduceReportChangeRecord(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得报工变更记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:query')") + public CommonResult getProduceReportChangeRecord(@RequestParam("id") Long id) { + ProduceReportChangeRecordDO produceReportChangeRecord = produceReportChangeRecordService.getProduceReportChangeRecord(id); + return success(BeanUtils.toBean(produceReportChangeRecord, ProduceReportChangeRecordRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得报工变更记录分页") + @PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:query')") + public CommonResult> getProduceReportChangeRecordPage(@Valid ProduceReportChangeRecordPageReqVO pageReqVO) { + PageResult pageResult = produceReportChangeRecordService.getProduceReportChangeRecordPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProduceReportChangeRecordRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出报工变更记录 Excel") + @PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProduceReportChangeRecordExcel(@Valid ProduceReportChangeRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = produceReportChangeRecordService.getProduceReportChangeRecordPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "报工变更记录.xls", "数据", ProduceReportChangeRecordRespVO.class, + BeanUtils.toBean(list, ProduceReportChangeRecordRespVO.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/changerecord/vo/ProduceReportChangeRecordPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/vo/ProduceReportChangeRecordPageReqVO.java new file mode 100644 index 0000000000..bb1a22f74c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/vo/ProduceReportChangeRecordPageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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 ProduceReportChangeRecordPageReqVO extends PageParam { + + @Schema(description = "报工单id", example = "23446") + private Long reportId; + + @Schema(description = "变更类型", example = "2") + private String changeType; + + @Schema(description = "变更前数据") + private String beforeChange; + + @Schema(description = "变更后数据") + private String afterChange; + + @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/changerecord/vo/ProduceReportChangeRecordRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/vo/ProduceReportChangeRecordRespVO.java new file mode 100644 index 0000000000..6b8b8ebd6c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/vo/ProduceReportChangeRecordRespVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 报工变更记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProduceReportChangeRecordRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28832") + @ExcelProperty("id") + private Long id; + + @Schema(description = "报工单id", example = "23446") + @ExcelProperty("报工单id") + private Long reportId; + + @Schema(description = "变更类型", example = "2") + @ExcelProperty("变更类型") + private String changeType; + + @Schema(description = "变更前数据") + @ExcelProperty("变更前数据") + private String beforeChange; + + @Schema(description = "变更后数据") + @ExcelProperty("变更后数据") + private String afterChange; + + @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/changerecord/vo/ProduceReportChangeRecordSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/vo/ProduceReportChangeRecordSaveReqVO.java new file mode 100644 index 0000000000..8d82165593 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/changerecord/vo/ProduceReportChangeRecordSaveReqVO.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 报工变更记录新增/修改 Request VO") +@Data +public class ProduceReportChangeRecordSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28832") + private Long id; + + @Schema(description = "报工单id", example = "23446") + private Long reportId; + + @Schema(description = "变更类型", example = "2") + private String changeType; + + @Schema(description = "变更前数据") + private String beforeChange; + + @Schema(description = "变更后数据") + private String afterChange; + +} \ 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/producereport/ProduceReportDetailController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportDetailController.java index 2449802ecf..b66eb531d2 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportDetailController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportDetailController.java @@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.mes.service.producereport.ProduceReportDetailServ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -40,7 +39,7 @@ public class ProduceReportDetailController { @PostMapping("/create") @Operation(summary = "创建生产报工明细") - @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:create')") + //@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:create')") public CommonResult createProduceReportDetail(@Valid @RequestBody ProduceReportDetailSaveReqVO createReqVO) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime localDateTime = LocalDateTime.parse(createReqVO.getReportDateString(), formatter); @@ -50,7 +49,7 @@ public class ProduceReportDetailController { @PutMapping("/update") @Operation(summary = "更新生产报工明细") - @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:update')") + //@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:update')") public CommonResult updateProduceReportDetail(@Valid @RequestBody ProduceReportDetailSaveReqVO updateReqVO) { produceReportDetailService.updateProduceReportDetail(updateReqVO); return success(true); @@ -59,7 +58,7 @@ public class ProduceReportDetailController { @DeleteMapping("/delete") @Operation(summary = "删除生产报工明细") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:delete')") + //@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:delete')") public CommonResult deleteProduceReportDetail(@RequestParam("id") Long id) { produceReportDetailService.deleteProduceReportDetail(id); return success(true); @@ -68,7 +67,7 @@ public class ProduceReportDetailController { @GetMapping("/get") @Operation(summary = "获得生产报工明细") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')") + //@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')") public CommonResult getProduceReportDetail(@RequestParam("id") Long id) { ProduceReportDetailDO produceReportDetail = produceReportDetailService.getProduceReportDetail(id); return success(BeanUtils.toBean(produceReportDetail, ProduceReportDetailRespVO.class)); @@ -76,29 +75,33 @@ public class ProduceReportDetailController { @GetMapping("/page") @Operation(summary = "获得生产报工明细分页") - @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')") + //@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')") public CommonResult> getProduceReportDetailPage(@Valid ProduceReportDetailPageReqVO pageReqVO) { - PageResult pageResult = produceReportDetailService.getProduceReportDetailPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ProduceReportDetailRespVO.class)); + PageResult pageResult = produceReportDetailService.getProduceReportDetailPage(pageReqVO); + return success(pageResult); } -// @GetMapping("/pageReplacePage") -// @Operation(summary = "获得代报工生产报工明细分页") -// @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')") -// public CommonResult> getProduceReportDetailPage(@Valid ProduceReportDetailPageReqVO pageReqVO) { -// PageResult pageResult = produceReportDetailService.getProduceReportDetailPage(pageReqVO); -// return success(BeanUtils.toBean(pageResult, ProduceReportDetailRespVO.class)); -// } @GetMapping("/export-excel") @Operation(summary = "导出生产报工明细 Excel") - @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:export')") + //@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:export')") @ApiAccessLog(operateType = EXPORT) public void exportProduceReportDetailExcel(@Valid ProduceReportDetailPageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = produceReportDetailService.getProduceReportDetailPage(pageReqVO).getList(); + List list = produceReportDetailService.getProduceReportDetailPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "生产报工明细.xls", "数据", ProduceReportDetailRespVO.class, - BeanUtils.toBean(list, ProduceReportDetailRespVO.class)); + list); + } + + @GetMapping("/updateStatus") + @Operation(summary = "提交报工单") + public CommonResult updateStatus(@RequestParam("id") Long id, + @RequestParam("status") Integer status) { + ProduceReportDetailDO produceReportDetail = produceReportDetailService.getProduceReportDetail(id); + produceReportDetail.setReportStatus(status); + ProduceReportDetailSaveReqVO saveReqVO = BeanUtils.toBean(produceReportDetail, ProduceReportDetailSaveReqVO.class); + produceReportDetailService.updateProduceReportDetail(saveReqVO); + return success(true); } } \ 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/producereport/vo/ProduceReportDetailRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportDetailRespVO.java index efc606973f..2d2792bb26 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportDetailRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportDetailRespVO.java @@ -22,22 +22,31 @@ public class ProduceReportDetailRespVO { @Schema(description = "报工单id", example = "10253") @ExcelProperty("报工单id") private Long reportId; + @Schema(description = "报工单id", example = "10253") + @ExcelProperty("报工单id") + private String reportCode; @Schema(description = "生产计划ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22861") @ExcelProperty("生产计划ID") private Long planId; @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517") - @ExcelProperty("产品ID") private Long productId; + @Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517") + @ExcelProperty("产品") + private String productName; @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386") - @ExcelProperty("用户ID") private Long userId; + @Schema(description = "用户", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386") + @ExcelProperty("用户") + private String userName; @Schema(description = "组织ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329") - @ExcelProperty("组织ID") private Long orgId; + @Schema(description = "工位", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329") + @ExcelProperty("工位") + private String orgName; @Schema(description = "成品率") @ExcelProperty("成品率") diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/ReportPlanViewController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/ReportPlanViewController.java new file mode 100644 index 0000000000..a492c8fa73 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/ReportPlanViewController.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereportplan; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; +import cn.iocoder.yudao.module.mes.service.workreportplan.WorkReportPlanService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 报工分配计划") +@RestController +@RequestMapping("/mes/work-report-plan-view") +@Validated +public class ReportPlanViewController { + + @Resource + private WorkReportPlanService workReportPlanService; + + @PostMapping("/create") + @Operation(summary = "创建报工分配计划") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:create')") + public CommonResult createWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO createReqVO) { + return success(workReportPlanService.createWorkReportPlan(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新报工分配计划") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:update')") + public CommonResult updateWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO updateReqVO) { + workReportPlanService.updateWorkReportPlan(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除报工分配计划") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:delete')") + public CommonResult deleteWorkReportPlan(@RequestParam("id") Long id) { + workReportPlanService.deleteWorkReportPlan(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得报工分配计划") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')") + public CommonResult getWorkReportPlan(@RequestParam("id") Long id) { + WorkReportPlanDO workReportPlan = workReportPlanService.getWorkReportPlan(id); + return success(BeanUtils.toBean(workReportPlan, WorkReportPlanRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得报工分配计划分页") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')") + public CommonResult> getWorkReportPlanPage(@Valid WorkReportPlanPageReqVO pageReqVO) { + PageResult pageResult = workReportPlanService.getWorkReportPlanPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, WorkReportPlanRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出报工分配计划 Excel") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportWorkReportPlanExcel(@Valid WorkReportPlanPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = workReportPlanService.getWorkReportPlanPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "报工分配计划.xls", "数据", WorkReportPlanRespVO.class, + BeanUtils.toBean(list, WorkReportPlanRespVO.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/producereportplan/WorkReportPlanController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/WorkReportPlanController.java new file mode 100644 index 0000000000..188c81a79a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/WorkReportPlanController.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereportplan; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; +import cn.iocoder.yudao.module.mes.service.workreportplan.WorkReportPlanService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 报工分配计划") +@RestController +@RequestMapping("/mes/work-report-plan") +@Validated +public class WorkReportPlanController { + + @Resource + private WorkReportPlanService workReportPlanService; + + @PostMapping("/create") + @Operation(summary = "创建报工分配计划") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:create')") + public CommonResult createWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO createReqVO) { + return success(workReportPlanService.createWorkReportPlan(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新报工分配计划") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:update')") + public CommonResult updateWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO updateReqVO) { + workReportPlanService.updateWorkReportPlan(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除报工分配计划") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:delete')") + public CommonResult deleteWorkReportPlan(@RequestParam("id") Long id) { + workReportPlanService.deleteWorkReportPlan(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得报工分配计划") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')") + public CommonResult getWorkReportPlan(@RequestParam("id") Long id) { + WorkReportPlanDO workReportPlan = workReportPlanService.getWorkReportPlan(id); + return success(BeanUtils.toBean(workReportPlan, WorkReportPlanRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得报工分配计划分页") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')") + public CommonResult> getWorkReportPlanPage(@Valid WorkReportPlanPageReqVO pageReqVO) { + PageResult pageResult = workReportPlanService.getWorkReportPlanPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, WorkReportPlanRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出报工分配计划 Excel") + @PreAuthorize("@ss.hasPermission('mes:work-report-plan:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportWorkReportPlanExcel(@Valid WorkReportPlanPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = workReportPlanService.getWorkReportPlanPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "报工分配计划.xls", "数据", WorkReportPlanRespVO.class, + BeanUtils.toBean(list, WorkReportPlanRespVO.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/producereportplan/vo/ReportPlanViewReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/ReportPlanViewReqVO.java new file mode 100644 index 0000000000..be79fd2a06 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/ReportPlanViewReqVO.java @@ -0,0 +1,83 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +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 ReportPlanViewReqVO extends PageParam { + + @Schema(description = "报工单id", example = "27172") + private Long reportId; + + @Schema(description = "计划id", example = "30035") + private Long planId; + + @Schema(description = "产品ID", example = "9987") + private Long productId; + + @Schema(description = "成品数量") + private BigDecimal qualityNumberPlan; + + @Schema(description = "废品数量") + private BigDecimal wasteNumberPlan; + + @Schema(description = "计件时间") + private String reportTimePlan; + + @Schema(description = "总时长") + private BigDecimal totalTimePlan; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "用户ID", example = "23386") + private Long userId; + + @Schema(description = "组织ID", example = "1329") + private Long orgId; + + @Schema(description = "总时长") + private BigDecimal totalTime; + + @Schema(description = "成品数量") + private BigDecimal qualityNumber; + + @Schema(description = "废品数量") + private BigDecimal wasteNumber; + + @Schema(description = "总数量") + private BigDecimal totalNumber; + + @Schema(description = "报工日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] reportDate; + + @Schema(description = "报工状态", example = "1") + private Integer reportStatus; + @Schema(description = "计件时间", example = "10:10-12:00,14:10-16:10") + private String reportTime; + + @Schema(description = "工序类型") + private String orgType; + /** + * 报工类型 + */ + @Schema(description = "报工类型") + private String reportType; + + @Schema(description = "班别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer groupType; +} \ 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/producereportplan/vo/ReportPlanViewRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/ReportPlanViewRespVO.java new file mode 100644 index 0000000000..f10a107c61 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/ReportPlanViewRespVO.java @@ -0,0 +1,116 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo; + +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 报工分配计划 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ReportPlanViewRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32743") + @ExcelProperty("id") + private Long id; + + @Schema(description = "报工单id", example = "27172") + @ExcelProperty("报工单id") + private Long reportId; + + @Schema(description = "计划id", example = "30035") + @ExcelProperty("计划id") + private Long planId; + + @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517") + private Long productId; + @Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517") + @ExcelProperty("产品") + private String productName; + + @Schema(description = "成品数量") + @ExcelProperty("成品数量") + private BigDecimal qualityNumberPlan; + + @Schema(description = "废品数量") + @ExcelProperty("废品数量") + private BigDecimal wasteNumberPlan; + + @Schema(description = "计件时间") + @ExcelProperty("计件时间") + private String reportTimePlan; + + @Schema(description = "总时长") + @ExcelProperty("总时长") + private BigDecimal totalTimePlan; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + + + @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386") + private Long userId; + @Schema(description = "用户", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386") + @ExcelProperty("用户") + private String userName; + + @Schema(description = "组织ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329") + private Long orgId; + @Schema(description = "工位", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329") + @ExcelProperty("工位") + private String orgName; + + @Schema(description = "总时长") + @ExcelProperty("总时长") + private BigDecimal totalTime; + + @Schema(description = "成品数量") + @ExcelProperty("成品数量") + private BigDecimal qualityNumber; + + @Schema(description = "废品数量") + @ExcelProperty("废品数量") + private BigDecimal wasteNumber; + + @Schema(description = "总数量") + @ExcelProperty("总数量") + private BigDecimal totalNumber; + + @Schema(description = "报工日期") + @ExcelProperty("报工日期") + private LocalDateTime reportDate; + + @Schema(description = "计件时间") + @ExcelProperty("计件时间") + private String reportTime; + + @Schema(description = "报工状态", example = "1") + @ExcelProperty(value = "报工状态", converter = DictConvert.class) + @DictFormat("mes_record_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer reportStatus; + + /** + * 工序类型 + */ + @Schema(description = "工序类型") + @ExcelProperty("工序类型") + private String orgType; + /** + * 报工类型 + */ + @Schema(description = "报工类型") + @ExcelProperty("报工类型") + private String reportType; + + @Schema(description = "班别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty(value = "班别", converter = DictConvert.class) + @DictFormat("mes_group_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer groupType; +} \ 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/producereportplan/vo/WorkReportPlanPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/WorkReportPlanPageReqVO.java new file mode 100644 index 0000000000..9b613c96b5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/WorkReportPlanPageReqVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +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 WorkReportPlanPageReqVO extends PageParam { + + @Schema(description = "报工单id", example = "27172") + private Long reportId; + + @Schema(description = "计划id", example = "30035") + private Long planId; + + @Schema(description = "产品ID", example = "9987") + private Long productId; + + @Schema(description = "成品数量") + private BigDecimal qualityNumberPlan; + + @Schema(description = "废品数量") + private BigDecimal wasteNumberPlan; + + @Schema(description = "计件时间") + private String reportTimePlan; + + @Schema(description = "总时长") + private BigDecimal totalTimePlan; + + @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/producereportplan/vo/WorkReportPlanRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/WorkReportPlanRespVO.java new file mode 100644 index 0000000000..22a545c743 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/WorkReportPlanRespVO.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 报工分配计划 Response VO") +@Data +@ExcelIgnoreUnannotated +public class WorkReportPlanRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32743") + @ExcelProperty("id") + private Long id; + + @Schema(description = "报工单id", example = "27172") + @ExcelProperty("报工单id") + private Long reportId; + + @Schema(description = "计划id", example = "30035") + @ExcelProperty("计划id") + private Long planId; + + @Schema(description = "产品ID", example = "9987") + @ExcelProperty("产品ID") + private Long productId; + + @Schema(description = "成品数量") + @ExcelProperty("成品数量") + private BigDecimal qualityNumberPlan; + + @Schema(description = "废品数量") + @ExcelProperty("废品数量") + private BigDecimal wasteNumberPlan; + + @Schema(description = "计件时间") + @ExcelProperty("计件时间") + private String reportTimePlan; + + @Schema(description = "总时长") + @ExcelProperty("总时长") + private BigDecimal totalTimePlan; + + @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/producereportplan/vo/WorkReportPlanSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/WorkReportPlanSaveReqVO.java new file mode 100644 index 0000000000..3efaa221a0 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/vo/WorkReportPlanSaveReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 报工分配计划新增/修改 Request VO") +@Data +public class WorkReportPlanSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32743") + private Long id; + + @Schema(description = "报工单id", example = "27172") + private Long reportId; + + @Schema(description = "计划id", example = "30035") + private Long planId; + + @Schema(description = "产品ID", example = "9987") + private Long productId; + + @Schema(description = "成品数量") + private BigDecimal qualityNumberPlan; + + @Schema(description = "废品数量") + private BigDecimal wasteNumberPlan; + + @Schema(description = "计件时间") + private String reportTimePlan; + + @Schema(description = "总时长") + private BigDecimal totalTimePlan; + +} \ 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/changerecord/ProduceReportChangeRecordDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/changerecord/ProduceReportChangeRecordDO.java new file mode 100644 index 0000000000..c0283f22f1 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/changerecord/ProduceReportChangeRecordDO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.changerecord; + +import lombok.*; +import java.util.*; +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_produce_report_change_record") +@KeySequence("mes_produce_report_change_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProduceReportChangeRecordDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 报工单id + */ + private Long reportId; + /** + * 变更类型 + */ + private String changeType; + /** + * 变更前数据 + */ + private String beforeChange; + /** + * 变更后数据 + */ + private String afterChange; + +} \ 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/workreportplan/ReportPlanViewDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/workreportplan/ReportPlanViewDO.java new file mode 100644 index 0000000000..7db0127a75 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/workreportplan/ReportPlanViewDO.java @@ -0,0 +1,117 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 报工分配计划 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_view_report_plan_detail") +@KeySequence("mes_view_report_plan_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ReportPlanViewDO extends BaseDO { + + /** + * id + */ + private Long id; + /** + * 报工单id + */ + private Long reportId; + /** + * 计划id + */ + private Long planId; + /** + * 产品ID + */ + private Long productId; + /** + * 成品数量 + */ + private BigDecimal qualityNumberPlan; + /** + * 废品数量 + */ + private BigDecimal wasteNumberPlan; + /** + * 计件时间 + */ + private String reportTimePlan; + /** + * 总时长 + */ + private BigDecimal totalTimePlan; + + /** + * 用户ID + */ + private Long userId; + /** + * 组织ID + */ + private Long orgId; + /** + * 工序类型 + */ + private String orgType; + /** + * 报工类型 + */ + private String reportType; + /** + * 成品率 + */ + private BigDecimal qualityRate; + /** + * 备注 + */ + private String wasteReason; + /** + * 总时长 + */ + private BigDecimal totalTime; + + + /** + * 成品数量 + */ + private BigDecimal qualityNumber; + /** + * 废品数量 + */ + private BigDecimal wasteNumber; + + /** + * 报工日期 + */ + private LocalDateTime reportDate; + /** + * 计件时间 + */ + private String reportTime; + /** + * 报工状态 + *

+ * 枚举 {@link TODO mes_record_status 对应的类} + */ + private Integer reportStatus; + + @Schema(description = "班别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer groupType; + +} \ 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/workreportplan/WorkReportPlanDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/workreportplan/WorkReportPlanDO.java new file mode 100644 index 0000000000..4e87f2b297 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/workreportplan/WorkReportPlanDO.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan; + +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 com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 报工分配计划 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_work_report_plan") +@KeySequence("mes_work_report_plan_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WorkReportPlanDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 报工单id + */ + private Long reportId; + /** + * 计划id + */ + private Long planId; + /** + * 产品ID + */ + private Long productId; + /** + * 成品数量 + */ + private BigDecimal qualityNumberPlan; + /** + * 废品数量 + */ + private BigDecimal wasteNumberPlan; + /** + * 计件时间 + */ + private String reportTimePlan; + /** + * 总时长 + */ + private BigDecimal totalTimePlan; + +} \ 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/changerecord/ProduceReportChangeRecordMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/changerecord/ProduceReportChangeRecordMapper.java new file mode 100644 index 0000000000..1f5bd0a192 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/changerecord/ProduceReportChangeRecordMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.changerecord; + +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.changerecord.ProduceReportChangeRecordDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*; + +/** + * 报工变更记录 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface ProduceReportChangeRecordMapper extends BaseMapperX { + + default PageResult selectPage(ProduceReportChangeRecordPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ProduceReportChangeRecordDO::getReportId, reqVO.getReportId()) + .eqIfPresent(ProduceReportChangeRecordDO::getChangeType, reqVO.getChangeType()) + .eqIfPresent(ProduceReportChangeRecordDO::getBeforeChange, reqVO.getBeforeChange()) + .eqIfPresent(ProduceReportChangeRecordDO::getAfterChange, reqVO.getAfterChange()) + .betweenIfPresent(ProduceReportChangeRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ProduceReportChangeRecordDO::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/workreportplan/ReportPlanViewMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workreportplan/ReportPlanViewMapper.java new file mode 100644 index 0000000000..8638e87f86 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workreportplan/ReportPlanViewMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.workreportplan; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.ReportPlanViewDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 报工分配计划 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface ReportPlanViewMapper extends BaseMapperX { + + default PageResult selectPage(WorkReportPlanPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ReportPlanViewDO::getReportId, reqVO.getReportId()) + .eqIfPresent(ReportPlanViewDO::getPlanId, reqVO.getPlanId()) + .eqIfPresent(ReportPlanViewDO::getProductId, reqVO.getProductId()) + .eqIfPresent(ReportPlanViewDO::getQualityNumberPlan, reqVO.getQualityNumberPlan()) + .eqIfPresent(ReportPlanViewDO::getWasteNumberPlan, reqVO.getWasteNumberPlan()) + .eqIfPresent(ReportPlanViewDO::getReportTimePlan, reqVO.getReportTimePlan()) + .eqIfPresent(ReportPlanViewDO::getTotalTimePlan, reqVO.getTotalTimePlan()) + .betweenIfPresent(ReportPlanViewDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ReportPlanViewDO::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/workreportplan/WorkReportPlanMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workreportplan/WorkReportPlanMapper.java new file mode 100644 index 0000000000..a58b524f88 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workreportplan/WorkReportPlanMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.workreportplan; + +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.workreportplan.WorkReportPlanDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.*; + +/** + * 报工分配计划 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface WorkReportPlanMapper extends BaseMapperX { + + default PageResult selectPage(WorkReportPlanPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(WorkReportPlanDO::getReportId, reqVO.getReportId()) + .eqIfPresent(WorkReportPlanDO::getPlanId, reqVO.getPlanId()) + .eqIfPresent(WorkReportPlanDO::getProductId, reqVO.getProductId()) + .eqIfPresent(WorkReportPlanDO::getQualityNumberPlan, reqVO.getQualityNumberPlan()) + .eqIfPresent(WorkReportPlanDO::getWasteNumberPlan, reqVO.getWasteNumberPlan()) + .eqIfPresent(WorkReportPlanDO::getReportTimePlan, reqVO.getReportTimePlan()) + .eqIfPresent(WorkReportPlanDO::getTotalTimePlan, reqVO.getTotalTimePlan()) + .betweenIfPresent(WorkReportPlanDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(WorkReportPlanDO::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/changerecord/ProduceReportChangeRecordService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/changerecord/ProduceReportChangeRecordService.java new file mode 100644 index 0000000000..a6bec8a8bb --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/changerecord/ProduceReportChangeRecordService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.service.changerecord; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 报工变更记录 Service 接口 + * + * @author 内蒙必硕 + */ +public interface ProduceReportChangeRecordService { + + /** + * 创建报工变更记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProduceReportChangeRecord(@Valid ProduceReportChangeRecordSaveReqVO createReqVO); + + /** + * 更新报工变更记录 + * + * @param updateReqVO 更新信息 + */ + void updateProduceReportChangeRecord(@Valid ProduceReportChangeRecordSaveReqVO updateReqVO); + + /** + * 删除报工变更记录 + * + * @param id 编号 + */ + void deleteProduceReportChangeRecord(Long id); + + /** + * 获得报工变更记录 + * + * @param id 编号 + * @return 报工变更记录 + */ + ProduceReportChangeRecordDO getProduceReportChangeRecord(Long id); + + /** + * 获得报工变更记录分页 + * + * @param pageReqVO 分页查询 + * @return 报工变更记录分页 + */ + PageResult getProduceReportChangeRecordPage(ProduceReportChangeRecordPageReqVO 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/changerecord/ProduceReportChangeRecordServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/changerecord/ProduceReportChangeRecordServiceImpl.java new file mode 100644 index 0000000000..0b3661b27d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/changerecord/ProduceReportChangeRecordServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.mes.service.changerecord; + +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 cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO; +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.changerecord.ProduceReportChangeRecordMapper; + +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 ProduceReportChangeRecordServiceImpl implements ProduceReportChangeRecordService { + + @Resource + private ProduceReportChangeRecordMapper produceReportChangeRecordMapper; + + @Override + public Long createProduceReportChangeRecord(ProduceReportChangeRecordSaveReqVO createReqVO) { + // 插入 + ProduceReportChangeRecordDO produceReportChangeRecord = BeanUtils.toBean(createReqVO, ProduceReportChangeRecordDO.class); + produceReportChangeRecordMapper.insert(produceReportChangeRecord); + // 返回 + return produceReportChangeRecord.getId(); + } + + @Override + public void updateProduceReportChangeRecord(ProduceReportChangeRecordSaveReqVO updateReqVO) { + // 校验存在 + validateProduceReportChangeRecordExists(updateReqVO.getId()); + // 更新 + ProduceReportChangeRecordDO updateObj = BeanUtils.toBean(updateReqVO, ProduceReportChangeRecordDO.class); + produceReportChangeRecordMapper.updateById(updateObj); + } + + @Override + public void deleteProduceReportChangeRecord(Long id) { + // 校验存在 + validateProduceReportChangeRecordExists(id); + // 删除 + produceReportChangeRecordMapper.deleteById(id); + } + + private void validateProduceReportChangeRecordExists(Long id) { + if (produceReportChangeRecordMapper.selectById(id) == null) { + throw exception(PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS); + } + } + + @Override + public ProduceReportChangeRecordDO getProduceReportChangeRecord(Long id) { + return produceReportChangeRecordMapper.selectById(id); + } + + @Override + public PageResult getProduceReportChangeRecordPage(ProduceReportChangeRecordPageReqVO pageReqVO) { + return produceReportChangeRecordMapper.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/producereport/ProduceReportDetailService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java index 717e72b82d..3bda1071c5 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java @@ -2,10 +2,12 @@ package cn.iocoder.yudao.module.mes.service.producereport; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailRespVO; import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; import javax.validation.Valid; +import java.util.List; /** * 生产报工明细 Service 接口 @@ -50,6 +52,6 @@ public interface ProduceReportDetailService { * @param pageReqVO 分页查询 * @return 生产报工明细分页 */ - PageResult getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO); - + PageResult getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO); + List buildVOList(List list); } \ 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/producereport/ProduceReportDetailServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java index f071a838a8..f9cdea739f 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java @@ -1,17 +1,31 @@ package cn.iocoder.yudao.module.mes.service.producereport; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; +import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailRespVO; import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailSaveReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ReportStatusEnum; +import cn.iocoder.yudao.module.mes.dal.dataobject.organization.OrganizationDO; import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; import cn.iocoder.yudao.module.mes.dal.mysql.producereport.ProduceReportDetailMapper; +import cn.iocoder.yudao.module.mes.service.organization.OrganizationService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRODUCE_REPORT_DETAIL_NOT_EXISTS; /** @@ -28,6 +42,7 @@ public class ProduceReportDetailServiceImpl implements ProduceReportDetailServic @Override public Long createProduceReportDetail(ProduceReportDetailSaveReqVO createReqVO) { + createReqVO.setReportStatus(ReportStatusEnum.草稿.getValue()); // 插入 ProduceReportDetailDO produceReportDetail = BeanUtils.toBean(createReqVO, ProduceReportDetailDO.class); produceReportDetailMapper.insert(produceReportDetail); @@ -64,8 +79,41 @@ public class ProduceReportDetailServiceImpl implements ProduceReportDetailServic } @Override - public PageResult getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO) { - return produceReportDetailMapper.selectPage(pageReqVO); + public PageResult getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO) { + PageResult pageResult = produceReportDetailMapper.selectPage(pageReqVO); + return new PageResult<>(buildVOList(pageResult.getList()), pageResult.getTotal()); } + @Resource + private OrganizationService organizationService; + @Resource + private AdminUserApi adminUserApi; + @Resource + private ErpProductService productService; + @Resource + private ProduceReportService reportService; + @Override + public List buildVOList(List list){ + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + Map map = organizationService.getMap( + convertSet(list, ProduceReportDetailDO::getOrgId)); + // 1.4 管理员信息 + Map userMap = adminUserApi.getUserMap( + convertSet(list, ProduceReportDetailDO::getUserId)); + Map productMap = productService.getProductMap( + convertSet(list, ProduceReportDetailDO::getProductId)); + + return BeanUtils.toBean(list, ProduceReportDetailRespVO.class, item -> { + MapUtils.findAndThen(map, item.getOrgId(), + org -> item.setOrgName(org.getName()) + ); + MapUtils.findAndThen(userMap, item.getUserId(), + user -> item.setUserName(user.getNickname())); + + MapUtils.findAndThen(productMap, item.getProductId(), + pro -> item.setProductName(pro.getName())); + }); + } } \ 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/workreportplan/WorkReportPlanService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanService.java new file mode 100644 index 0000000000..997771a414 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanService.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.service.workreportplan; + +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +/** + * 报工分配计划 Service 接口 + * + * @author 内蒙必硕 + */ +public interface WorkReportPlanService { + + /** + * 创建报工分配计划 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createWorkReportPlan(@Valid WorkReportPlanSaveReqVO createReqVO); + + /** + * 更新报工分配计划 + * + * @param updateReqVO 更新信息 + */ + void updateWorkReportPlan(@Valid WorkReportPlanSaveReqVO updateReqVO); + + /** + * 删除报工分配计划 + * + * @param id 编号 + */ + void deleteWorkReportPlan(Long id); + + /** + * 获得报工分配计划 + * + * @param id 编号 + * @return 报工分配计划 + */ + WorkReportPlanDO getWorkReportPlan(Long id); + + /** + * 获得报工分配计划分页 + * + * @param pageReqVO 分页查询 + * @return 报工分配计划分页 + */ + PageResult getWorkReportPlanPage(WorkReportPlanPageReqVO 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/workreportplan/WorkReportPlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImpl.java new file mode 100644 index 0000000000..29d421a467 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImpl.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.mes.service.workreportplan; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; +import cn.iocoder.yudao.module.mes.dal.mysql.workreportplan.WorkReportPlanMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WORK_REPORT_PLAN_NOT_EXISTS; + +/** + * 报工分配计划 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class WorkReportPlanServiceImpl implements WorkReportPlanService { + + @Resource + private WorkReportPlanMapper workReportPlanMapper; + + @Override + public Long createWorkReportPlan(WorkReportPlanSaveReqVO createReqVO) { + // 插入 + WorkReportPlanDO workReportPlan = BeanUtils.toBean(createReqVO, WorkReportPlanDO.class); + workReportPlanMapper.insert(workReportPlan); + // 返回 + return workReportPlan.getId(); + } + + @Override + public void updateWorkReportPlan(WorkReportPlanSaveReqVO updateReqVO) { + // 校验存在 + validateWorkReportPlanExists(updateReqVO.getId()); + // 更新 + WorkReportPlanDO updateObj = BeanUtils.toBean(updateReqVO, WorkReportPlanDO.class); + workReportPlanMapper.updateById(updateObj); + } + + @Override + public void deleteWorkReportPlan(Long id) { + // 校验存在 + validateWorkReportPlanExists(id); + // 删除 + workReportPlanMapper.deleteById(id); + } + + private void validateWorkReportPlanExists(Long id) { + if (workReportPlanMapper.selectById(id) == null) { + throw exception(WORK_REPORT_PLAN_NOT_EXISTS); + } + } + + @Override + public WorkReportPlanDO getWorkReportPlan(Long id) { + return workReportPlanMapper.selectById(id); + } + + @Override + public PageResult getWorkReportPlanPage(WorkReportPlanPageReqVO pageReqVO) { + return workReportPlanMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/changerecord/ProduceReportChangeRecordMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/changerecord/ProduceReportChangeRecordMapper.xml new file mode 100644 index 0000000000..329a1395e6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/changerecord/ProduceReportChangeRecordMapper.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/workreportplan/WorkReportPlanMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/workreportplan/WorkReportPlanMapper.xml new file mode 100644 index 0000000000..937f0d0dc4 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/workreportplan/WorkReportPlanMapper.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/changerecord/ProduceReportChangeRecordServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/changerecord/ProduceReportChangeRecordServiceImplTest.java new file mode 100644 index 0000000000..f5e397aec3 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/changerecord/ProduceReportChangeRecordServiceImplTest.java @@ -0,0 +1,146 @@ +package cn.iocoder.yudao.module.mes.service.changerecord; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO; +import cn.iocoder.yudao.module.mes.dal.mysql.changerecord.ProduceReportChangeRecordMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +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 ProduceReportChangeRecordServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(ProduceReportChangeRecordServiceImpl.class) +public class ProduceReportChangeRecordServiceImplTest extends BaseDbUnitTest { + + @Resource + private ProduceReportChangeRecordServiceImpl produceReportChangeRecordService; + + @Resource + private ProduceReportChangeRecordMapper produceReportChangeRecordMapper; + + @Test + public void testCreateProduceReportChangeRecord_success() { + // 准备参数 + ProduceReportChangeRecordSaveReqVO createReqVO = randomPojo(ProduceReportChangeRecordSaveReqVO.class).setId(null); + + // 调用 + Long produceReportChangeRecordId = produceReportChangeRecordService.createProduceReportChangeRecord(createReqVO); + // 断言 + assertNotNull(produceReportChangeRecordId); + // 校验记录的属性是否正确 + ProduceReportChangeRecordDO produceReportChangeRecord = produceReportChangeRecordMapper.selectById(produceReportChangeRecordId); + assertPojoEquals(createReqVO, produceReportChangeRecord, "id"); + } + + @Test + public void testUpdateProduceReportChangeRecord_success() { + // mock 数据 + ProduceReportChangeRecordDO dbProduceReportChangeRecord = randomPojo(ProduceReportChangeRecordDO.class); + produceReportChangeRecordMapper.insert(dbProduceReportChangeRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + ProduceReportChangeRecordSaveReqVO updateReqVO = randomPojo(ProduceReportChangeRecordSaveReqVO.class, o -> { + o.setId(dbProduceReportChangeRecord.getId()); // 设置更新的 ID + }); + + // 调用 + produceReportChangeRecordService.updateProduceReportChangeRecord(updateReqVO); + // 校验是否更新正确 + ProduceReportChangeRecordDO produceReportChangeRecord = produceReportChangeRecordMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, produceReportChangeRecord); + } + + @Test + public void testUpdateProduceReportChangeRecord_notExists() { + // 准备参数 + ProduceReportChangeRecordSaveReqVO updateReqVO = randomPojo(ProduceReportChangeRecordSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> produceReportChangeRecordService.updateProduceReportChangeRecord(updateReqVO), PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS); + } + + @Test + public void testDeleteProduceReportChangeRecord_success() { + // mock 数据 + ProduceReportChangeRecordDO dbProduceReportChangeRecord = randomPojo(ProduceReportChangeRecordDO.class); + produceReportChangeRecordMapper.insert(dbProduceReportChangeRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbProduceReportChangeRecord.getId(); + + // 调用 + produceReportChangeRecordService.deleteProduceReportChangeRecord(id); + // 校验数据不存在了 + assertNull(produceReportChangeRecordMapper.selectById(id)); + } + + @Test + public void testDeleteProduceReportChangeRecord_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> produceReportChangeRecordService.deleteProduceReportChangeRecord(id), PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetProduceReportChangeRecordPage() { + // mock 数据 + ProduceReportChangeRecordDO dbProduceReportChangeRecord = randomPojo(ProduceReportChangeRecordDO.class, o -> { // 等会查询到 + o.setReportId(null); + o.setChangeType(null); + o.setBeforeChange(null); + o.setAfterChange(null); + o.setCreateTime(null); + }); + produceReportChangeRecordMapper.insert(dbProduceReportChangeRecord); + // 测试 reportId 不匹配 + produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setReportId(null))); + // 测试 changeType 不匹配 + produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setChangeType(null))); + // 测试 beforeChange 不匹配 + produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setBeforeChange(null))); + // 测试 afterChange 不匹配 + produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setAfterChange(null))); + // 测试 createTime 不匹配 + produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setCreateTime(null))); + // 准备参数 + ProduceReportChangeRecordPageReqVO reqVO = new ProduceReportChangeRecordPageReqVO(); + reqVO.setReportId(null); + reqVO.setChangeType(null); + reqVO.setBeforeChange(null); + reqVO.setAfterChange(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = produceReportChangeRecordService.getProduceReportChangeRecordPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbProduceReportChangeRecord, 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/producereport/ProduceReportDetailServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImplTest.java index ff5bb032c6..87323facb1 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImplTest.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImplTest.java @@ -1,32 +1,26 @@ package cn.iocoder.yudao.module.mes.service.producereport; -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.common.pojo.PageResult; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; - -import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.*; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; import cn.iocoder.yudao.module.mes.dal.mysql.producereport.ProduceReportDetailMapper; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; 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 cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRODUCE_REPORT_DETAIL_NOT_EXISTS; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; /** * {@link ProduceReportDetailServiceImpl} 的单元测试类 @@ -180,7 +174,7 @@ public class ProduceReportDetailServiceImplTest extends BaseDbUnitTest { reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); // 调用 - PageResult pageResult = produceReportDetailService.getProduceReportDetailPage(reqVO); + PageResult pageResult = produceReportDetailService.getProduceReportDetailPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImplTest.java new file mode 100644 index 0000000000..2776b7e3a8 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImplTest.java @@ -0,0 +1,150 @@ +package cn.iocoder.yudao.module.mes.service.workreportplan; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import javax.annotation.Resource; + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; +import cn.iocoder.yudao.module.mes.dal.mysql.workreportplan.WorkReportPlanMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import org.springframework.context.annotation.Import; + +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 org.junit.jupiter.api.Assertions.*; + +/** + * {@link WorkReportPlanServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(WorkReportPlanServiceImpl.class) +public class WorkReportPlanServiceImplTest extends BaseDbUnitTest { + + @Resource + private WorkReportPlanServiceImpl workReportPlanService; + + @Resource + private WorkReportPlanMapper workReportPlanMapper; + + @Test + public void testCreateWorkReportPlan_success() { + // 准备参数 + WorkReportPlanSaveReqVO createReqVO = randomPojo(WorkReportPlanSaveReqVO.class).setId(null); + + // 调用 + Long workReportPlanId = workReportPlanService.createWorkReportPlan(createReqVO); + // 断言 + assertNotNull(workReportPlanId); + // 校验记录的属性是否正确 + WorkReportPlanDO workReportPlan = workReportPlanMapper.selectById(workReportPlanId); + assertPojoEquals(createReqVO, workReportPlan, "id"); + } + + @Test + public void testUpdateWorkReportPlan_success() { + // mock 数据 + WorkReportPlanDO dbWorkReportPlan = randomPojo(WorkReportPlanDO.class); + workReportPlanMapper.insert(dbWorkReportPlan);// @Sql: 先插入出一条存在的数据 + // 准备参数 + WorkReportPlanSaveReqVO updateReqVO = randomPojo(WorkReportPlanSaveReqVO.class, o -> { + o.setId(dbWorkReportPlan.getId()); // 设置更新的 ID + }); + + // 调用 + workReportPlanService.updateWorkReportPlan(updateReqVO); + // 校验是否更新正确 + WorkReportPlanDO workReportPlan = workReportPlanMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, workReportPlan); + } + + @Test + public void testUpdateWorkReportPlan_notExists() { + // 准备参数 + WorkReportPlanSaveReqVO updateReqVO = randomPojo(WorkReportPlanSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> workReportPlanService.updateWorkReportPlan(updateReqVO), WORK_REPORT_PLAN_NOT_EXISTS); + } + + @Test + public void testDeleteWorkReportPlan_success() { + // mock 数据 + WorkReportPlanDO dbWorkReportPlan = randomPojo(WorkReportPlanDO.class); + workReportPlanMapper.insert(dbWorkReportPlan);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbWorkReportPlan.getId(); + + // 调用 + workReportPlanService.deleteWorkReportPlan(id); + // 校验数据不存在了 + assertNull(workReportPlanMapper.selectById(id)); + } + + @Test + public void testDeleteWorkReportPlan_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> workReportPlanService.deleteWorkReportPlan(id), WORK_REPORT_PLAN_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetWorkReportPlanPage() { + // mock 数据 + WorkReportPlanDO dbWorkReportPlan = randomPojo(WorkReportPlanDO.class, o -> { // 等会查询到 + o.setReportId(null); + o.setPlanId(null); + o.setProductId(null); + o.setQualityNumberPlan(null); + o.setWasteNumberPlan(null); + o.setReportTimePlan(null); + o.setTotalTimePlan(null); + o.setCreateTime(null); + }); + workReportPlanMapper.insert(dbWorkReportPlan); + // 测试 reportId 不匹配 + workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setReportId(null))); + // 测试 planId 不匹配 + workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setPlanId(null))); + // 测试 productId 不匹配 + workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setProductId(null))); + // 测试 qualityNumberPlan 不匹配 + workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setQualityNumberPlan(null))); + // 测试 wasteNumberPlan 不匹配 + workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setWasteNumberPlan(null))); + // 测试 reportTimePlan 不匹配 + workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setReportTimePlan(null))); + // 测试 totalTimePlan 不匹配 + workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setTotalTimePlan(null))); + // 测试 createTime 不匹配 + workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setCreateTime(null))); + // 准备参数 + WorkReportPlanPageReqVO reqVO = new WorkReportPlanPageReqVO(); + reqVO.setReportId(null); + reqVO.setPlanId(null); + reqVO.setProductId(null); + reqVO.setQualityNumberPlan(null); + reqVO.setWasteNumberPlan(null); + reqVO.setReportTimePlan(null); + reqVO.setTotalTimePlan(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = workReportPlanService.getWorkReportPlanPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbWorkReportPlan, 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 5ff59b7b2e..7a68f3c20a 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 @@ -45,6 +45,8 @@ DELETE FROM "mes_stock_in_detail"; DELETE FROM "mes_org_worker"; +DELETE FROM "mes_produce_report_change_record"; +DELETE FROM "mes_work_report_plan"; 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 a90cfdf956..9dc6255757 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 @@ -484,3 +484,36 @@ CREATE TABLE IF NOT EXISTS "mes_org_worker" PRIMARY KEY ("id") ) COMMENT '工位安排表'; +CREATE TABLE IF NOT EXISTS "mes_work_report_plan" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "report_id" bigint, + "plan_id" bigint, + "product_id" bigint, + "quality_number_plan" varchar, + "waste_number_plan" varchar, + "report_time_plan" varchar, + "total_time_plan" 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 NULL, + PRIMARY KEY ("id") +) COMMENT '报工分配计划'; +CREATE TABLE IF NOT EXISTS "mes_produce_report_change_record" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "report_id" bigint, + "change_type" varchar, + "before_change" varchar, + "after_change" 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 NULL, + PRIMARY KEY ("id") +) COMMENT '报工变更记录';