diff --git a/sql/mysql/basedata.sql b/sql/mysql/basedata.sql index 1432d2df6..de0fb01c5 100644 --- a/sql/mysql/basedata.sql +++ b/sql/mysql/basedata.sql @@ -161,8 +161,8 @@ CREATE TABLE `mes_task` `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '编码', - `order_date` date COMMENT '创建时间', - `delivery_date` date COMMENT '创建时间', + `order_date` datetime COMMENT '下达时间', + `delivery_date` datetime COMMENT '交付时间', `status` tinyint DEFAULT '0' COMMENT '状态', `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '流程实例的编号', @@ -183,11 +183,16 @@ CREATE TABLE `mes_task_detail` `product_id` bigint NOT NULL COMMENT '产品ID', `unit_id` bigint NOT NULL COMMENT '单位ID', `task_id` bigint NOT NULL COMMENT 'task ID', - `number` bigint NOT NULL COMMENT '数量', - `package_size` bigint NOT NULL COMMENT '打包要求(每包/个)', - + `number` bigint NOT NULL COMMENT '数量/个', + `package_number` bigint NOT NULL COMMENT '数量/包', + `package_size` bigint DEFAULT NULL COMMENT '打包要求(每包/个)', + `finish_date` datetime COMMENT '工厂完成', + `boxing_date` datetime COMMENT '装柜时间', + `arrive_date` datetime COMMENT '到达时间', `project_name` varchar(56) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '项目名称', `tech_requirements` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '技术要求', + `bar_code` varchar(56) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '条码', + `attachment` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '附件', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', diff --git a/sql/mysql/mesdata.sql b/sql/mysql/mesdata.sql index 4bacd5409..a5045dd74 100644 --- a/sql/mysql/mesdata.sql +++ b/sql/mysql/mesdata.sql @@ -1,14 +1,49 @@ - -CREATE TABLE `mes_item_requisition` +CREATE TABLE `mes_work_team` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `team_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '班组名称', + `team_leader_id` bigint NOT NULL COMMENT '组长ID', + + `team_type` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '工序类型', + + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', + `is_enable` bit(1) NOT NULL DEFAULT b'1' 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 DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='生产报工单'; + +CREATE TABLE `mes_work_team_detail` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `work_team_id` bigint DEFAULT NULL COMMENT '班组id', + `user_id` bigint NOT NULL COMMENT '用户ID', - `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci NOT NULL COMMENT '编码', - `requisition_date` date COMMENT '下料时间', - `delivery_date` date COMMENT '创建时间', - `status` tinyint DEFAULT '0' COMMENT '状态', + `user_role` tinyint NOT NULL COMMENT '角色', + `remark` varchar(500) CHARACTER SET utf8mb4 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 DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='生产报工明细'; + +CREATE TABLE `mes_produce_report` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '流程实例的编号', - `plan_id` bigint NOT NULL COMMENT '计划ID', + `work_team_id` bigint NOT NULL COMMENT '组别ID', + `group_id` bigint NOT NULL COMMENT '班组ID', + `report_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '报工日期', + `status` tinyint NOT NULL COMMENT '状态', + `group_type` tinyint NOT NULL COMMENT '白班/夜班', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', @@ -19,16 +54,24 @@ CREATE TABLE `mes_item_requisition` `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='领料单'; +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='生产报工单'; -CREATE TABLE `mes_item_requisition_detail` +CREATE TABLE `mes_produce_report_detail` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `report_id` bigint DEFAULT NULL COMMENT '报工单id', + `plan_id` bigint NOT NULL COMMENT '生产计划ID', `product_id` bigint NOT NULL COMMENT '产品ID', - `unit_id` bigint NOT NULL COMMENT '单位ID', - `item_requisition_id` bigint NOT NULL COMMENT '领料单ID', - `number` decimal(24, 6) DEFAULT NULL COMMENT '数量', - + `user_id` bigint NOT NULL COMMENT '用户ID', + `org_id` bigint NOT NULL COMMENT '组织ID', + `quality_number` decimal(24, 6) DEFAULT NULL COMMENT '成品数量', + `waste_number` decimal(24, 6) DEFAULT NULL COMMENT '废品数量', + `total_number` decimal(24, 6) DEFAULT NULL COMMENT '废品数量', + `quality_rate` decimal(24, 6) DEFAULT NULL COMMENT '成品率', + `waste_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', + `report_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '计件时间', + `total_time` decimal(24, 6) DEFAULT NULL COMMENT '总时长', + `package_number` decimal(24, 6) DEFAULT NULL COMMENT '打包数量', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '备注', `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', @@ -38,6 +81,6 @@ CREATE TABLE `mes_item_requisition_detail` `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='领料单明细'; +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='生产报工明细'; 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 e248be3a7..0c9f084dc 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 @@ -32,4 +32,10 @@ public interface ErrorCodeConstants { ErrorCode RECORD_GANZAO_NOT_EXISTS = new ErrorCode(5_0067, "干燥记录不存在"); ErrorCode RECORD_JIASHI_NOT_EXISTS = new ErrorCode(5_0068, "加湿记录不存在"); ErrorCode RECORD_PINJIAN_NOT_EXISTS = new ErrorCode(5_0069, "品检记录不存在"); + + + ErrorCode WORK_TEAM_NOT_EXISTS = new ErrorCode(5_007, "生产班组不存在"); + ErrorCode WORK_TEAM_DETAIL_NOT_EXISTS = new ErrorCode(5_0071, "班组成员不存在"); + ErrorCode PRODUCE_REPORT_NOT_EXISTS = new ErrorCode(5_008, "生产报工单不存在"); + ErrorCode PRODUCE_REPORT_DETAIL_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/producereport/ProduceReportController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportController.java new file mode 100644 index 000000000..a532c658e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportController.java @@ -0,0 +1,137 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereport; + +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 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.producereport.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; +import cn.iocoder.yudao.module.mes.service.producereport.ProduceReportService; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +@Tag(name = "管理后台 - 生产报工单") +@RestController +@RequestMapping("/mes/produce-report") +@Validated +public class ProduceReportController { + + @Resource + private ProduceReportService produceReportService; + + @PostMapping("/create") + @Operation(summary = "创建生产报工单") + @PreAuthorize("@ss.hasPermission('mes:produce-report:create')") + public CommonResult createProduceReport(@Valid @RequestBody ProduceReportSaveReqVO createReqVO) { + return success(produceReportService.createProduceReport(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新生产报工单") + @PreAuthorize("@ss.hasPermission('mes:produce-report:update')") + public CommonResult updateProduceReport(@Valid @RequestBody ProduceReportSaveReqVO updateReqVO) { + produceReportService.updateProduceReport(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除生产报工单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:produce-report:delete')") + public CommonResult deleteProduceReport(@RequestParam("id") Long id) { + produceReportService.deleteProduceReport(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得生产报工单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:produce-report:query')") + public CommonResult getProduceReport(@RequestParam("id") Long id) { + ProduceReportDO produceReport = produceReportService.getProduceReport(id); + return success(BeanUtils.toBean(produceReport, ProduceReportRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得生产报工单分页") + @PreAuthorize("@ss.hasPermission('mes:produce-report:query')") + public CommonResult> getProduceReportPage(@Valid ProduceReportPageReqVO pageReqVO) { + PageResult pageResult = produceReportService.getProduceReportPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProduceReportRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出生产报工单 Excel") + @PreAuthorize("@ss.hasPermission('mes:produce-report:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProduceReportExcel(@Valid ProduceReportPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = produceReportService.getProduceReportPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "生产报工单.xls", "数据", ProduceReportRespVO.class, + BeanUtils.toBean(list, ProduceReportRespVO.class)); + } + + // ==================== 子表(生产报工明细) ==================== + + @GetMapping("/produce-report-detail/page") + @Operation(summary = "获得生产报工明细分页") + @Parameter(name = "reportId", description = "报工单id") + @PreAuthorize("@ss.hasPermission('mes:produce-report:query')") + public CommonResult> getProduceReportDetailPage(PageParam pageReqVO, + @RequestParam("reportId") Long reportId) { + return success(produceReportService.getProduceReportDetailPage(pageReqVO, reportId)); + } + + @PostMapping("/produce-report-detail/create") + @Operation(summary = "创建生产报工明细") + @PreAuthorize("@ss.hasPermission('mes:produce-report:create')") + public CommonResult createProduceReportDetail(@Valid @RequestBody ProduceReportDetailDO produceReportDetail) { + return success(produceReportService.createProduceReportDetail(produceReportDetail)); + } + + @PutMapping("/produce-report-detail/update") + @Operation(summary = "更新生产报工明细") + @PreAuthorize("@ss.hasPermission('mes:produce-report:update')") + public CommonResult updateProduceReportDetail(@Valid @RequestBody ProduceReportDetailDO produceReportDetail) { + produceReportService.updateProduceReportDetail(produceReportDetail); + return success(true); + } + + @DeleteMapping("/produce-report-detail/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除生产报工明细") + @PreAuthorize("@ss.hasPermission('mes:produce-report:delete')") + public CommonResult deleteProduceReportDetail(@RequestParam("id") Long id) { + produceReportService.deleteProduceReportDetail(id); + return success(true); + } + + @GetMapping("/produce-report-detail/get") + @Operation(summary = "获得生产报工明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:produce-report:query')") + public CommonResult getProduceReportDetail(@RequestParam("id") Long id) { + return success(produceReportService.getProduceReportDetail(id)); + } + +} \ 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 new file mode 100644 index 000000000..51ea24a16 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportDetailController.java @@ -0,0 +1,94 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereport; + +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.producereport.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; +import cn.iocoder.yudao.module.mes.service.producereport.ProduceReportDetailService; + +@Tag(name = "管理后台 - 生产报工明细") +@RestController +@RequestMapping("/mes/produce-report-detail") +@Validated +public class ProduceReportDetailController { + + @Resource + private ProduceReportDetailService produceReportDetailService; + + @PostMapping("/create") + @Operation(summary = "创建生产报工明细") + @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:create')") + public CommonResult createProduceReportDetail(@Valid @RequestBody ProduceReportDetailSaveReqVO createReqVO) { + return success(produceReportDetailService.createProduceReportDetail(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新生产报工明细") + @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:update')") + public CommonResult updateProduceReportDetail(@Valid @RequestBody ProduceReportDetailSaveReqVO updateReqVO) { + produceReportDetailService.updateProduceReportDetail(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除生产报工明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:delete')") + public CommonResult deleteProduceReportDetail(@RequestParam("id") Long id) { + produceReportDetailService.deleteProduceReportDetail(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得生产报工明细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @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)); + } + + @GetMapping("/page") + @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')") + @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(); + // 导出 Excel + ExcelUtils.write(response, "生产报工明细.xls", "数据", ProduceReportDetailRespVO.class, + BeanUtils.toBean(list, ProduceReportDetailRespVO.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/producereport/vo/ProduceReportDetailPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportDetailPageReqVO.java new file mode 100644 index 000000000..03d54d60f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportDetailPageReqVO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereport.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 ProduceReportDetailPageReqVO extends PageParam { + + @Schema(description = "报工单id", example = "10253") + private Long reportId; + + @Schema(description = "生产计划ID", example = "22861") + private Long planId; + + @Schema(description = "产品ID", example = "14517") + private Long productId; + + @Schema(description = "用户ID", example = "23386") + private Long userId; + + @Schema(description = "组织ID", example = "1329") + private Long orgId; + + @Schema(description = "成品率") + private BigDecimal qualityRate; + + @Schema(description = "备注", example = "不好") + private String wasteReason; + + @Schema(description = "总时长") + private BigDecimal totalTime; + + @Schema(description = "打包数量") + private BigDecimal packageNumber; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "是否启用") + private Boolean isEnable; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @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; +} \ 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 new file mode 100644 index 000000000..e82b2e985 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportDetailRespVO.java @@ -0,0 +1,96 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereport.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 ProduceReportDetailRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15203") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "报工单id", example = "10253") + @ExcelProperty("报工单id") + private Long reportId; + + @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 = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386") + @ExcelProperty("用户ID") + private Long userId; + + @Schema(description = "组织ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329") + @ExcelProperty("组织ID") + private Long orgId; + + @Schema(description = "成品率") + @ExcelProperty("成品率") + private BigDecimal qualityRate; + + @Schema(description = "备注", example = "不好") + @ExcelProperty("备注") + private String wasteReason; + + @Schema(description = "总时长") + @ExcelProperty("总时长") + private BigDecimal totalTime; + + @Schema(description = "打包数量") + @ExcelProperty("打包数量") + private BigDecimal packageNumber; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private Boolean isEnable; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @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; + +} \ 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/ProduceReportDetailSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportDetailSaveReqVO.java new file mode 100644 index 000000000..662d12831 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportDetailSaveReqVO.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereport.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +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 ProduceReportDetailSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15203") + private Long id; + + @Schema(description = "报工单id", example = "10253") + private Long reportId; + + @Schema(description = "生产计划ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22861") + @NotNull(message = "生产计划ID不能为空") + private Long planId; + + @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517") + @NotNull(message = "产品ID不能为空") + private Long productId; + + @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386") + @NotNull(message = "用户ID不能为空") + private Long userId; + + @Schema(description = "组织ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329") + @NotNull(message = "组织ID不能为空") + private Long orgId; + + @Schema(description = "成品率") + private BigDecimal qualityRate; + + @Schema(description = "备注", example = "不好") + private String wasteReason; + + @Schema(description = "总时长") + private BigDecimal totalTime; + + @Schema(description = "打包数量") + private BigDecimal packageNumber; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean isEnable; + + @Schema(description = "成品数量") + private BigDecimal qualityNumber; + + @Schema(description = "废品数量") + private BigDecimal wasteNumber; + + @Schema(description = "总数量") + private BigDecimal totalNumber; + + @Schema(description = "报工日期") + private LocalDateTime reportDate; + + @Schema(description = "计件时间") + private String reportTime; + + @Schema(description = "报工状态", example = "1") + private Integer reportStatus; + +} \ 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/ProduceReportPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportPageReqVO.java new file mode 100644 index 000000000..4415eef28 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportPageReqVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereport.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 ProduceReportPageReqVO extends PageParam { + + @Schema(description = "流程实例的编号", example = "2975") + private String processInstanceId; + + @Schema(description = "组别ID", example = "32137") + private Long workTeamId; + + @Schema(description = "班组ID", example = "10669") + private Long groupId; + + @Schema(description = "报工日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] reportDate; + + @Schema(description = "状态", example = "1") + private Integer status; + + @Schema(description = "白班/夜班", example = "1") + private Integer groupType; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "是否启用") + private Boolean isEnable; + + @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/producereport/vo/ProduceReportRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportRespVO.java new file mode 100644 index 000000000..4ff26147f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportRespVO.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereport.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.*; +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 ProduceReportRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6256") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "流程实例的编号", example = "2975") + @ExcelProperty("流程实例的编号") + private String processInstanceId; + + @Schema(description = "组别ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32137") + @ExcelProperty("组别ID") + private Long workTeamId; + + @Schema(description = "班组ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10669") + @ExcelProperty("班组ID") + private Long groupId; + + @Schema(description = "报工日期", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("报工日期") + private LocalDateTime reportDate; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "状态", converter = DictConvert.class) + @DictFormat("mes_record_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer status; + + @Schema(description = "白班/夜班", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "白班/夜班", converter = DictConvert.class) + @DictFormat("mes_group_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer groupType; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private Boolean isEnable; + + @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/producereport/vo/ProduceReportSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportSaveReqVO.java new file mode 100644 index 000000000..c238b852d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/vo/ProduceReportSaveReqVO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.mes.controller.admin.producereport.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; + +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 生产报工单新增/修改 Request VO") +@Data +public class ProduceReportSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6256") + private Long id; + + @Schema(description = "流程实例的编号", example = "2975") + private String processInstanceId; + + @Schema(description = "组别ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32137") + @NotNull(message = "组别ID不能为空") + private Long workTeamId; + + @Schema(description = "班组ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10669") + @NotNull(message = "班组ID不能为空") + private Long groupId; + + @Schema(description = "报工日期", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "报工日期不能为空") + private LocalDateTime reportDate; + + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态不能为空") + private Integer status; + + @Schema(description = "白班/夜班", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "白班/夜班不能为空") + private Integer groupType; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean isEnable; + +} \ 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/workteam/WorkTeamController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/workteam/WorkTeamController.java new file mode 100644 index 000000000..be1eb5719 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/workteam/WorkTeamController.java @@ -0,0 +1,139 @@ +package cn.iocoder.yudao.module.mes.controller.admin.workteam; + +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 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.workteam.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDetailDO; +import cn.iocoder.yudao.module.mes.service.workteam.WorkTeamService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +@Tag(name = "管理后台 - 生产班组") +@RestController +@RequestMapping("/mes/work-team") +@Validated +public class WorkTeamController { + + @Resource + private WorkTeamService workTeamService; + + @PostMapping("/create") + @Operation(summary = "创建生产班组") + @PreAuthorize("@ss.hasPermission('mes:work-team:create')") + public CommonResult createWorkTeam(@Valid @RequestBody WorkTeamSaveReqVO createReqVO) { + return success(workTeamService.createWorkTeam(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新生产班组") + @PreAuthorize("@ss.hasPermission('mes:work-team:update')") + public CommonResult updateWorkTeam(@Valid @RequestBody WorkTeamSaveReqVO updateReqVO) { + workTeamService.updateWorkTeam(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除生产班组") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:work-team:delete')") + public CommonResult deleteWorkTeam(@RequestParam("id") Long id) { + workTeamService.deleteWorkTeam(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得生产班组") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:work-team:query')") + public CommonResult getWorkTeam(@RequestParam("id") Long id) { + WorkTeamDO workTeam = workTeamService.getWorkTeam(id); + return success(BeanUtils.toBean(workTeam, WorkTeamRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得生产班组分页") + @PreAuthorize("@ss.hasPermission('mes:work-team:query')") + public CommonResult> getWorkTeamPage(@Valid WorkTeamPageReqVO pageReqVO) { + PageResult pageResult = workTeamService.getWorkTeamPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, WorkTeamRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出生产班组 Excel") + @PreAuthorize("@ss.hasPermission('mes:work-team:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportWorkTeamExcel(@Valid WorkTeamPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = workTeamService.getWorkTeamPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "生产班组.xls", "数据", WorkTeamRespVO.class, + BeanUtils.toBean(list, WorkTeamRespVO.class)); + } + + // ==================== 子表(班组成员) ==================== + + @GetMapping("/work-team-detail/page") + @Operation(summary = "获得班组成员分页") + @Parameter(name = "workTeamId", description = "班组id") + @PreAuthorize("@ss.hasPermission('mes:work-team:query')") + public CommonResult> getWorkTeamDetailPage(PageParam pageReqVO, + @RequestParam("workTeamId") Long workTeamId) { + return success(workTeamService.getWorkTeamDetailPage(pageReqVO, workTeamId)); + } + + @PostMapping("/work-team-detail/create") + @Operation(summary = "创建班组成员") + @PreAuthorize("@ss.hasPermission('mes:work-team:create')") + public CommonResult createWorkTeamDetail(@Valid @RequestBody WorkTeamDetailDO workTeamDetail) { + return success(workTeamService.createWorkTeamDetail(workTeamDetail)); + } + + @PutMapping("/work-team-detail/update") + @Operation(summary = "更新班组成员") + @PreAuthorize("@ss.hasPermission('mes:work-team:update')") + public CommonResult updateWorkTeamDetail(@Valid @RequestBody WorkTeamDetailDO workTeamDetail) { + workTeamService.updateWorkTeamDetail(workTeamDetail); + return success(true); + } + + @DeleteMapping("/work-team-detail/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除班组成员") + @PreAuthorize("@ss.hasPermission('mes:work-team:delete')") + public CommonResult deleteWorkTeamDetail(@RequestParam("id") Long id) { + workTeamService.deleteWorkTeamDetail(id); + return success(true); + } + + @GetMapping("/work-team-detail/get") + @Operation(summary = "获得班组成员") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:work-team:query')") + public CommonResult getWorkTeamDetail(@RequestParam("id") Long id) { + return success(workTeamService.getWorkTeamDetail(id)); + } + +} \ 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/workteam/vo/WorkTeamPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/workteam/vo/WorkTeamPageReqVO.java new file mode 100644 index 000000000..6455452ec --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/workteam/vo/WorkTeamPageReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.mes.controller.admin.workteam.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 WorkTeamPageReqVO extends PageParam { + + @Schema(description = "班组名称", example = "赵六") + private String teamName; + + @Schema(description = "组长ID", example = "17857") + private Long teamLeaderId; + + @Schema(description = "工序类型", example = "2") + private String teamType; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "是否启用") + private Boolean isEnable; + + @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/workteam/vo/WorkTeamRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/workteam/vo/WorkTeamRespVO.java new file mode 100644 index 000000000..01119d705 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/workteam/vo/WorkTeamRespVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.mes.controller.admin.workteam.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.*; +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 WorkTeamRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19207") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "班组名称", example = "赵六") + @ExcelProperty("班组名称") + private String teamName; + + @Schema(description = "组长ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17857") + @ExcelProperty("组长ID") + private Long teamLeaderId; + + @Schema(description = "工序类型", example = "2") + @ExcelProperty(value = "工序类型", converter = DictConvert.class) + @DictFormat("mes_org_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String teamType; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private Boolean isEnable; + + @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/workteam/vo/WorkTeamSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/workteam/vo/WorkTeamSaveReqVO.java new file mode 100644 index 000000000..f62936f42 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/workteam/vo/WorkTeamSaveReqVO.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.mes.controller.admin.workteam.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 生产班组新增/修改 Request VO") +@Data +public class WorkTeamSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19207") + private Long id; + + @Schema(description = "班组名称", example = "赵六") + private String teamName; + + @Schema(description = "组长ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17857") + @NotNull(message = "组长ID不能为空") + private Long teamLeaderId; + + @Schema(description = "工序类型", example = "2") + private String teamType; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean isEnable; + +} \ 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/producereport/ProduceReportDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/producereport/ProduceReportDO.java new file mode 100644 index 000000000..a55df8a3a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/producereport/ProduceReportDO.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.producereport; + +import lombok.*; +import java.util.*; +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_produce_report") +@KeySequence("mes_produce_report_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProduceReportDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 流程实例的编号 + */ + private String processInstanceId; + /** + * 组别ID + */ + private Long workTeamId; + /** + * 班组ID + */ + private Long groupId; + /** + * 报工日期 + */ + private LocalDateTime reportDate; + /** + * 状态 + * + * 枚举 {@link TODO mes_record_status 对应的类} + */ + private Integer status; + /** + * 白班/夜班 + * + * 枚举 {@link TODO mes_group_type 对应的类} + */ + private Integer groupType; + /** + * 备注 + */ + private String remark; + /** + * 是否启用 + */ + private Boolean isEnable; + +} \ 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/producereport/ProduceReportDetailDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/producereport/ProduceReportDetailDO.java new file mode 100644 index 000000000..5f9075071 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/producereport/ProduceReportDetailDO.java @@ -0,0 +1,108 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.producereport; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 生产报工明细 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_produce_report_detail") +@KeySequence("mes_produce_report_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProduceReportDetailDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 报工单id + */ + private Long reportId; + /** + * 生产计划ID + */ + private Long planId; + /** + * 产品ID + */ + private Long productId; + /** + * 用户ID + */ + private Long userId; + /** + * 组织ID + */ + private Long orgId; + /** + * 成品率 + */ + private BigDecimal qualityRate; + /** + * 备注 + */ + private String wasteReason; + /** + * 总时长 + */ + private BigDecimal totalTime; + /** + * 打包数量 + */ + private BigDecimal packageNumber; + /** + * 备注 + */ + private String remark; + /** + * 是否启用 + */ + private Boolean isEnable; + /** + * 成品数量 + */ + private BigDecimal qualityNumber; + /** + * 废品数量 + */ + private BigDecimal wasteNumber; + /** + * 总数量 + */ + private BigDecimal totalNumber; + /** + * 报工日期 + */ + private LocalDateTime reportDate; + /** + * 计件时间 + */ + private String reportTime; + /** + * 报工状态 + * + * 枚举 {@link TODO mes_record_status 对应的类} + */ + private Integer reportStatus; + +} \ 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/workteam/WorkTeamDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/workteam/WorkTeamDO.java new file mode 100644 index 000000000..7001c84ba --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/workteam/WorkTeamDO.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.workteam; + +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_work_team") +@KeySequence("mes_work_team_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WorkTeamDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 班组名称 + */ + private String teamName; + /** + * 组长ID + */ + private Long teamLeaderId; + /** + * 工序类型 + * + * 枚举 {@link TODO mes_org_type 对应的类} + */ + private String teamType; + /** + * 备注 + */ + private String remark; + /** + * 是否启用 + */ + private Boolean isEnable; + +} \ 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/workteam/WorkTeamDetailDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/workteam/WorkTeamDetailDO.java new file mode 100644 index 000000000..971740ad5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/workteam/WorkTeamDetailDO.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.workteam; + +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_work_team_detail") +@KeySequence("mes_work_team_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WorkTeamDetailDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 班组id + */ + private Long workTeamId; + /** + * 用户ID + */ + private Long userId; + /** + * 角色 + * + * 枚举 {@link TODO mes_work_team_user_role 对应的类} + */ + private Integer userRole; + /** + * 备注 + */ + private String remark; + +} \ 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/producereport/ProduceReportDetailMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/producereport/ProduceReportDetailMapper.java new file mode 100644 index 000000000..8d5113046 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/producereport/ProduceReportDetailMapper.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.producereport; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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.producereport.ProduceReportDetailDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.*; + +/** + * 生产报工明细 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface ProduceReportDetailMapper extends BaseMapperX { + + default PageResult selectPage(ProduceReportDetailPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ProduceReportDetailDO::getReportId, reqVO.getReportId()) + .eqIfPresent(ProduceReportDetailDO::getPlanId, reqVO.getPlanId()) + .eqIfPresent(ProduceReportDetailDO::getProductId, reqVO.getProductId()) + .eqIfPresent(ProduceReportDetailDO::getUserId, reqVO.getUserId()) + .eqIfPresent(ProduceReportDetailDO::getOrgId, reqVO.getOrgId()) + .eqIfPresent(ProduceReportDetailDO::getQualityRate, reqVO.getQualityRate()) + .eqIfPresent(ProduceReportDetailDO::getWasteReason, reqVO.getWasteReason()) + .eqIfPresent(ProduceReportDetailDO::getTotalTime, reqVO.getTotalTime()) + .eqIfPresent(ProduceReportDetailDO::getPackageNumber, reqVO.getPackageNumber()) + .eqIfPresent(ProduceReportDetailDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ProduceReportDetailDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(ProduceReportDetailDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(ProduceReportDetailDO::getQualityNumber, reqVO.getQualityNumber()) + .eqIfPresent(ProduceReportDetailDO::getWasteNumber, reqVO.getWasteNumber()) + .eqIfPresent(ProduceReportDetailDO::getTotalNumber, reqVO.getTotalNumber()) + .betweenIfPresent(ProduceReportDetailDO::getReportDate, reqVO.getReportDate()) + .eqIfPresent(ProduceReportDetailDO::getReportStatus, reqVO.getReportStatus()) + .orderByDesc(ProduceReportDetailDO::getId)); + } + default PageResult selectPage(PageParam reqVO, Long reportId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(ProduceReportDetailDO::getReportId, reportId) + .orderByDesc(ProduceReportDetailDO::getId)); + } + + default int deleteByReportId(Long reportId) { + return delete(ProduceReportDetailDO::getReportId, reportId); + } +} \ 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/producereport/ProduceReportMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/producereport/ProduceReportMapper.java new file mode 100644 index 000000000..d5708e165 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/producereport/ProduceReportMapper.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.producereport; + +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.producereport.ProduceReportDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.*; + +/** + * 生产报工单 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface ProduceReportMapper extends BaseMapperX { + + default PageResult selectPage(ProduceReportPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ProduceReportDO::getProcessInstanceId, reqVO.getProcessInstanceId()) + .eqIfPresent(ProduceReportDO::getWorkTeamId, reqVO.getWorkTeamId()) + .eqIfPresent(ProduceReportDO::getGroupId, reqVO.getGroupId()) + .betweenIfPresent(ProduceReportDO::getReportDate, reqVO.getReportDate()) + .eqIfPresent(ProduceReportDO::getStatus, reqVO.getStatus()) + .eqIfPresent(ProduceReportDO::getGroupType, reqVO.getGroupType()) + .eqIfPresent(ProduceReportDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ProduceReportDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(ProduceReportDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ProduceReportDO::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/workteam/WorkTeamDetailMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workteam/WorkTeamDetailMapper.java new file mode 100644 index 000000000..2493c0df3 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workteam/WorkTeamDetailMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.workteam; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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.workteam.WorkTeamDetailDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 班组成员 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface WorkTeamDetailMapper extends BaseMapperX { + + default PageResult selectPage(PageParam reqVO, Long workTeamId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(WorkTeamDetailDO::getWorkTeamId, workTeamId) + .orderByDesc(WorkTeamDetailDO::getId)); + } + + default int deleteByWorkTeamId(Long workTeamId) { + return delete(WorkTeamDetailDO::getWorkTeamId, workTeamId); + } + +} \ 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/workteam/WorkTeamMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workteam/WorkTeamMapper.java new file mode 100644 index 000000000..0e0378b00 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workteam/WorkTeamMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.workteam; + +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.workteam.WorkTeamDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.workteam.vo.*; + +/** + * 生产班组 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface WorkTeamMapper extends BaseMapperX { + + default PageResult selectPage(WorkTeamPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(WorkTeamDO::getTeamName, reqVO.getTeamName()) + .eqIfPresent(WorkTeamDO::getTeamLeaderId, reqVO.getTeamLeaderId()) + .eqIfPresent(WorkTeamDO::getTeamType, reqVO.getTeamType()) + .eqIfPresent(WorkTeamDO::getRemark, reqVO.getRemark()) + .eqIfPresent(WorkTeamDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(WorkTeamDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(WorkTeamDO::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/producereport/ProduceReportDetailService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java new file mode 100644 index 000000000..8a5839801 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.service.producereport; + +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 生产报工明细 Service 接口 + * + * @author 内蒙必硕 + */ +public interface ProduceReportDetailService { + + /** + * 创建生产报工明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProduceReportDetail(@Valid ProduceReportDetailSaveReqVO createReqVO); + + /** + * 更新生产报工明细 + * + * @param updateReqVO 更新信息 + */ + void updateProduceReportDetail(@Valid ProduceReportDetailSaveReqVO updateReqVO); + + /** + * 删除生产报工明细 + * + * @param id 编号 + */ + void deleteProduceReportDetail(Long id); + + /** + * 获得生产报工明细 + * + * @param id 编号 + * @return 生产报工明细 + */ + ProduceReportDetailDO getProduceReportDetail(Long id); + + /** + * 获得生产报工明细分页 + * + * @param pageReqVO 分页查询 + * @return 生产报工明细分页 + */ + PageResult getProduceReportDetailPage(ProduceReportDetailPageReqVO 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/ProduceReportDetailServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java new file mode 100644 index 000000000..1cf45eed9 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.mes.service.producereport; + +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.producereport.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; +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.producereport.ProduceReportDetailMapper; + +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 ProduceReportDetailServiceImpl implements ProduceReportDetailService { + + @Resource + private ProduceReportDetailMapper produceReportDetailMapper; + + @Override + public Long createProduceReportDetail(ProduceReportDetailSaveReqVO createReqVO) { + // 插入 + ProduceReportDetailDO produceReportDetail = BeanUtils.toBean(createReqVO, ProduceReportDetailDO.class); + produceReportDetailMapper.insert(produceReportDetail); + // 返回 + return produceReportDetail.getId(); + } + + @Override + public void updateProduceReportDetail(ProduceReportDetailSaveReqVO updateReqVO) { + // 校验存在 + validateProduceReportDetailExists(updateReqVO.getId()); + // 更新 + ProduceReportDetailDO updateObj = BeanUtils.toBean(updateReqVO, ProduceReportDetailDO.class); + produceReportDetailMapper.updateById(updateObj); + } + + @Override + public void deleteProduceReportDetail(Long id) { + // 校验存在 + validateProduceReportDetailExists(id); + // 删除 + produceReportDetailMapper.deleteById(id); + } + + private void validateProduceReportDetailExists(Long id) { + if (produceReportDetailMapper.selectById(id) == null) { + throw exception(PRODUCE_REPORT_DETAIL_NOT_EXISTS); + } + } + + @Override + public ProduceReportDetailDO getProduceReportDetail(Long id) { + return produceReportDetailMapper.selectById(id); + } + + @Override + public PageResult getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO) { + return produceReportDetailMapper.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/ProduceReportService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportService.java new file mode 100644 index 000000000..b618cd281 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportService.java @@ -0,0 +1,98 @@ +package cn.iocoder.yudao.module.mes.service.producereport; + +import java.util.*; +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 生产报工单 Service 接口 + * + * @author 内蒙必硕 + */ +public interface ProduceReportService { + + /** + * 创建生产报工单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProduceReport(@Valid ProduceReportSaveReqVO createReqVO); + + /** + * 更新生产报工单 + * + * @param updateReqVO 更新信息 + */ + void updateProduceReport(@Valid ProduceReportSaveReqVO updateReqVO); + + /** + * 删除生产报工单 + * + * @param id 编号 + */ + void deleteProduceReport(Long id); + + /** + * 获得生产报工单 + * + * @param id 编号 + * @return 生产报工单 + */ + ProduceReportDO getProduceReport(Long id); + + /** + * 获得生产报工单分页 + * + * @param pageReqVO 分页查询 + * @return 生产报工单分页 + */ + PageResult getProduceReportPage(ProduceReportPageReqVO pageReqVO); + + // ==================== 子表(生产报工明细) ==================== + + /** + * 获得生产报工明细分页 + * + * @param pageReqVO 分页查询 + * @param reportId 报工单id + * @return 生产报工明细分页 + */ + PageResult getProduceReportDetailPage(PageParam pageReqVO, Long reportId); + + /** + * 创建生产报工明细 + * + * @param produceReportDetail 创建信息 + * @return 编号 + */ + Long createProduceReportDetail(@Valid ProduceReportDetailDO produceReportDetail); + + /** + * 更新生产报工明细 + * + * @param produceReportDetail 更新信息 + */ + void updateProduceReportDetail(@Valid ProduceReportDetailDO produceReportDetail); + + /** + * 删除生产报工明细 + * + * @param id 编号 + */ + void deleteProduceReportDetail(Long id); + + /** + * 获得生产报工明细 + * + * @param id 编号 + * @return 生产报工明细 + */ + ProduceReportDetailDO getProduceReportDetail(Long id); + +} \ 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/ProduceReportServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportServiceImpl.java new file mode 100644 index 000000000..8b6fc5335 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportServiceImpl.java @@ -0,0 +1,127 @@ +package cn.iocoder.yudao.module.mes.service.producereport; + +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.producereport.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; +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.producereport.ProduceReportMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.producereport.ProduceReportDetailMapper; + +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 ProduceReportServiceImpl implements ProduceReportService { + + @Resource + private ProduceReportMapper produceReportMapper; + @Resource + private ProduceReportDetailMapper produceReportDetailMapper; + + @Override + public Long createProduceReport(ProduceReportSaveReqVO createReqVO) { + // 插入 + ProduceReportDO produceReport = BeanUtils.toBean(createReqVO, ProduceReportDO.class); + produceReportMapper.insert(produceReport); + // 返回 + return produceReport.getId(); + } + + @Override + public void updateProduceReport(ProduceReportSaveReqVO updateReqVO) { + // 校验存在 + validateProduceReportExists(updateReqVO.getId()); + // 更新 + ProduceReportDO updateObj = BeanUtils.toBean(updateReqVO, ProduceReportDO.class); + produceReportMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteProduceReport(Long id) { + // 校验存在 + validateProduceReportExists(id); + // 删除 + produceReportMapper.deleteById(id); + + // 删除子表 + deleteProduceReportDetailByReportId(id); + } + + private void validateProduceReportExists(Long id) { + if (produceReportMapper.selectById(id) == null) { + throw exception(PRODUCE_REPORT_NOT_EXISTS); + } + } + + @Override + public ProduceReportDO getProduceReport(Long id) { + return produceReportMapper.selectById(id); + } + + @Override + public PageResult getProduceReportPage(ProduceReportPageReqVO pageReqVO) { + return produceReportMapper.selectPage(pageReqVO); + } + + // ==================== 子表(生产报工明细) ==================== + + @Override + public PageResult getProduceReportDetailPage(PageParam pageReqVO, Long reportId) { + return produceReportDetailMapper.selectPage(pageReqVO, reportId); + } + + @Override + public Long createProduceReportDetail(ProduceReportDetailDO produceReportDetail) { + produceReportDetailMapper.insert(produceReportDetail); + return produceReportDetail.getId(); + } + + @Override + public void updateProduceReportDetail(ProduceReportDetailDO produceReportDetail) { + // 校验存在 + validateProduceReportDetailExists(produceReportDetail.getId()); + // 更新 + produceReportDetailMapper.updateById(produceReportDetail); + } + + @Override + public void deleteProduceReportDetail(Long id) { + // 校验存在 + validateProduceReportDetailExists(id); + // 删除 + produceReportDetailMapper.deleteById(id); + } + + @Override + public ProduceReportDetailDO getProduceReportDetail(Long id) { + return produceReportDetailMapper.selectById(id); + } + + private void validateProduceReportDetailExists(Long id) { + if (produceReportDetailMapper.selectById(id) == null) { + throw exception(PRODUCE_REPORT_DETAIL_NOT_EXISTS); + } + } + + private void deleteProduceReportDetailByReportId(Long reportId) { + produceReportDetailMapper.deleteByReportId(reportId); + } + +} \ 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/workteam/WorkTeamService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workteam/WorkTeamService.java new file mode 100644 index 000000000..189adb099 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workteam/WorkTeamService.java @@ -0,0 +1,99 @@ +package cn.iocoder.yudao.module.mes.service.workteam; + +import java.util.*; + +import cn.iocoder.yudao.module.mes.controller.admin.workteam.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDetailDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 生产班组 Service 接口 + * + * @author 内蒙必硕 + */ +public interface WorkTeamService { + + /** + * 创建生产班组 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createWorkTeam(@Valid WorkTeamSaveReqVO createReqVO); + + /** + * 更新生产班组 + * + * @param updateReqVO 更新信息 + */ + void updateWorkTeam(@Valid WorkTeamSaveReqVO updateReqVO); + + /** + * 删除生产班组 + * + * @param id 编号 + */ + void deleteWorkTeam(Long id); + + /** + * 获得生产班组 + * + * @param id 编号 + * @return 生产班组 + */ + WorkTeamDO getWorkTeam(Long id); + + /** + * 获得生产班组分页 + * + * @param pageReqVO 分页查询 + * @return 生产班组分页 + */ + PageResult getWorkTeamPage(WorkTeamPageReqVO pageReqVO); + + // ==================== 子表(班组成员) ==================== + + /** + * 获得班组成员分页 + * + * @param pageReqVO 分页查询 + * @param workTeamId 班组id + * @return 班组成员分页 + */ + PageResult getWorkTeamDetailPage(PageParam pageReqVO, Long workTeamId); + + /** + * 创建班组成员 + * + * @param workTeamDetail 创建信息 + * @return 编号 + */ + Long createWorkTeamDetail(@Valid WorkTeamDetailDO workTeamDetail); + + /** + * 更新班组成员 + * + * @param workTeamDetail 更新信息 + */ + void updateWorkTeamDetail(@Valid WorkTeamDetailDO workTeamDetail); + + /** + * 删除班组成员 + * + * @param id 编号 + */ + void deleteWorkTeamDetail(Long id); + + /** + * 获得班组成员 + * + * @param id 编号 + * @return 班组成员 + */ + WorkTeamDetailDO getWorkTeamDetail(Long id); + +} \ 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/workteam/WorkTeamServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workteam/WorkTeamServiceImpl.java new file mode 100644 index 000000000..1a31ac330 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workteam/WorkTeamServiceImpl.java @@ -0,0 +1,127 @@ +package cn.iocoder.yudao.module.mes.service.workteam; + +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.workteam.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDetailDO; +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.workteam.WorkTeamMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.workteam.WorkTeamDetailMapper; + +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 WorkTeamServiceImpl implements WorkTeamService { + + @Resource + private WorkTeamMapper workTeamMapper; + @Resource + private WorkTeamDetailMapper workTeamDetailMapper; + + @Override + public Long createWorkTeam(WorkTeamSaveReqVO createReqVO) { + // 插入 + WorkTeamDO workTeam = BeanUtils.toBean(createReqVO, WorkTeamDO.class); + workTeamMapper.insert(workTeam); + // 返回 + return workTeam.getId(); + } + + @Override + public void updateWorkTeam(WorkTeamSaveReqVO updateReqVO) { + // 校验存在 + validateWorkTeamExists(updateReqVO.getId()); + // 更新 + WorkTeamDO updateObj = BeanUtils.toBean(updateReqVO, WorkTeamDO.class); + workTeamMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteWorkTeam(Long id) { + // 校验存在 + validateWorkTeamExists(id); + // 删除 + workTeamMapper.deleteById(id); + + // 删除子表 + deleteWorkTeamDetailByWorkTeamId(id); + } + + private void validateWorkTeamExists(Long id) { + if (workTeamMapper.selectById(id) == null) { + throw exception(WORK_TEAM_NOT_EXISTS); + } + } + + @Override + public WorkTeamDO getWorkTeam(Long id) { + return workTeamMapper.selectById(id); + } + + @Override + public PageResult getWorkTeamPage(WorkTeamPageReqVO pageReqVO) { + return workTeamMapper.selectPage(pageReqVO); + } + + // ==================== 子表(班组成员) ==================== + + @Override + public PageResult getWorkTeamDetailPage(PageParam pageReqVO, Long workTeamId) { + return workTeamDetailMapper.selectPage(pageReqVO, workTeamId); + } + + @Override + public Long createWorkTeamDetail(WorkTeamDetailDO workTeamDetail) { + workTeamDetailMapper.insert(workTeamDetail); + return workTeamDetail.getId(); + } + + @Override + public void updateWorkTeamDetail(WorkTeamDetailDO workTeamDetail) { + // 校验存在 + validateWorkTeamDetailExists(workTeamDetail.getId()); + // 更新 + workTeamDetailMapper.updateById(workTeamDetail); + } + + @Override + public void deleteWorkTeamDetail(Long id) { + // 校验存在 + validateWorkTeamDetailExists(id); + // 删除 + workTeamDetailMapper.deleteById(id); + } + + @Override + public WorkTeamDetailDO getWorkTeamDetail(Long id) { + return workTeamDetailMapper.selectById(id); + } + + private void validateWorkTeamDetailExists(Long id) { + if (workTeamDetailMapper.selectById(id) == null) { + throw exception(WORK_TEAM_DETAIL_NOT_EXISTS); + } + } + + private void deleteWorkTeamDetailByWorkTeamId(Long workTeamId) { + workTeamDetailMapper.deleteByWorkTeamId(workTeamId); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/producereport/ProduceReportDetailMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/producereport/ProduceReportDetailMapper.xml new file mode 100644 index 000000000..4b2cc3fe4 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/producereport/ProduceReportDetailMapper.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/producereport/ProduceReportMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/producereport/ProduceReportMapper.xml new file mode 100644 index 000000000..5e10c4830 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/producereport/ProduceReportMapper.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/workteam/WorkTeamMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/workteam/WorkTeamMapper.xml new file mode 100644 index 000000000..d3b4de25d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/workteam/WorkTeamMapper.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/producereport/ProduceReportDetailServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImplTest.java new file mode 100644 index 000000000..ff5bb032c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImplTest.java @@ -0,0 +1,190 @@ +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.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.*; +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.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 ProduceReportDetailServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(ProduceReportDetailServiceImpl.class) +public class ProduceReportDetailServiceImplTest extends BaseDbUnitTest { + + @Resource + private ProduceReportDetailServiceImpl produceReportDetailService; + + @Resource + private ProduceReportDetailMapper produceReportDetailMapper; + + @Test + public void testCreateProduceReportDetail_success() { + // 准备参数 + ProduceReportDetailSaveReqVO createReqVO = randomPojo(ProduceReportDetailSaveReqVO.class).setId(null); + + // 调用 + Long produceReportDetailId = produceReportDetailService.createProduceReportDetail(createReqVO); + // 断言 + assertNotNull(produceReportDetailId); + // 校验记录的属性是否正确 + ProduceReportDetailDO produceReportDetail = produceReportDetailMapper.selectById(produceReportDetailId); + assertPojoEquals(createReqVO, produceReportDetail, "id"); + } + + @Test + public void testUpdateProduceReportDetail_success() { + // mock 数据 + ProduceReportDetailDO dbProduceReportDetail = randomPojo(ProduceReportDetailDO.class); + produceReportDetailMapper.insert(dbProduceReportDetail);// @Sql: 先插入出一条存在的数据 + // 准备参数 + ProduceReportDetailSaveReqVO updateReqVO = randomPojo(ProduceReportDetailSaveReqVO.class, o -> { + o.setId(dbProduceReportDetail.getId()); // 设置更新的 ID + }); + + // 调用 + produceReportDetailService.updateProduceReportDetail(updateReqVO); + // 校验是否更新正确 + ProduceReportDetailDO produceReportDetail = produceReportDetailMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, produceReportDetail); + } + + @Test + public void testUpdateProduceReportDetail_notExists() { + // 准备参数 + ProduceReportDetailSaveReqVO updateReqVO = randomPojo(ProduceReportDetailSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> produceReportDetailService.updateProduceReportDetail(updateReqVO), PRODUCE_REPORT_DETAIL_NOT_EXISTS); + } + + @Test + public void testDeleteProduceReportDetail_success() { + // mock 数据 + ProduceReportDetailDO dbProduceReportDetail = randomPojo(ProduceReportDetailDO.class); + produceReportDetailMapper.insert(dbProduceReportDetail);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbProduceReportDetail.getId(); + + // 调用 + produceReportDetailService.deleteProduceReportDetail(id); + // 校验数据不存在了 + assertNull(produceReportDetailMapper.selectById(id)); + } + + @Test + public void testDeleteProduceReportDetail_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> produceReportDetailService.deleteProduceReportDetail(id), PRODUCE_REPORT_DETAIL_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetProduceReportDetailPage() { + // mock 数据 + ProduceReportDetailDO dbProduceReportDetail = randomPojo(ProduceReportDetailDO.class, o -> { // 等会查询到 + o.setReportId(null); + o.setPlanId(null); + o.setProductId(null); + o.setUserId(null); + o.setOrgId(null); + o.setQualityNumber(null); + o.setWasteNumber(null); + o.setTotalNumber(null); + o.setQualityRate(null); + o.setWasteReason(null); + o.setReportTime(null); + o.setTotalTime(null); + o.setPackageNumber(null); + o.setRemark(null); + o.setIsEnable(null); + o.setCreateTime(null); + }); + produceReportDetailMapper.insert(dbProduceReportDetail); + // 测试 reportId 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setReportId(null))); + // 测试 planId 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setPlanId(null))); + // 测试 productId 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setProductId(null))); + // 测试 userId 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setUserId(null))); + // 测试 orgId 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setOrgId(null))); + // 测试 qualityNumber 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setQualityNumber(null))); + // 测试 wasteNumber 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setWasteNumber(null))); + // 测试 totalNumber 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setTotalNumber(null))); + // 测试 qualityRate 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setQualityRate(null))); + // 测试 wasteReason 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setWasteReason(null))); + // 测试 reportTime 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setReportTime(null))); + // 测试 totalTime 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setTotalTime(null))); + // 测试 packageNumber 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setPackageNumber(null))); + // 测试 remark 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setRemark(null))); + // 测试 isEnable 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setIsEnable(null))); + // 测试 createTime 不匹配 + produceReportDetailMapper.insert(cloneIgnoreId(dbProduceReportDetail, o -> o.setCreateTime(null))); + // 准备参数 + ProduceReportDetailPageReqVO reqVO = new ProduceReportDetailPageReqVO(); + reqVO.setReportId(null); + reqVO.setPlanId(null); + reqVO.setProductId(null); + reqVO.setUserId(null); + reqVO.setOrgId(null); + reqVO.setQualityNumber(null); + reqVO.setWasteNumber(null); + reqVO.setTotalNumber(null); + reqVO.setQualityRate(null); + reqVO.setWasteReason(null); + reqVO.setReportTime(null); + reqVO.setTotalTime(null); + reqVO.setPackageNumber(null); + reqVO.setRemark(null); + reqVO.setIsEnable(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = produceReportDetailService.getProduceReportDetailPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbProduceReportDetail, 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/ProduceReportServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportServiceImplTest.java new file mode 100644 index 000000000..9bee03be6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportServiceImplTest.java @@ -0,0 +1,162 @@ +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.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDO; +import cn.iocoder.yudao.module.mes.dal.mysql.producereport.ProduceReportMapper; +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 ProduceReportServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(ProduceReportServiceImpl.class) +public class ProduceReportServiceImplTest extends BaseDbUnitTest { + + @Resource + private ProduceReportServiceImpl produceReportService; + + @Resource + private ProduceReportMapper produceReportMapper; + + @Test + public void testCreateProduceReport_success() { + // 准备参数 + ProduceReportSaveReqVO createReqVO = randomPojo(ProduceReportSaveReqVO.class).setId(null); + + // 调用 + Long produceReportId = produceReportService.createProduceReport(createReqVO); + // 断言 + assertNotNull(produceReportId); + // 校验记录的属性是否正确 + ProduceReportDO produceReport = produceReportMapper.selectById(produceReportId); + assertPojoEquals(createReqVO, produceReport, "id"); + } + + @Test + public void testUpdateProduceReport_success() { + // mock 数据 + ProduceReportDO dbProduceReport = randomPojo(ProduceReportDO.class); + produceReportMapper.insert(dbProduceReport);// @Sql: 先插入出一条存在的数据 + // 准备参数 + ProduceReportSaveReqVO updateReqVO = randomPojo(ProduceReportSaveReqVO.class, o -> { + o.setId(dbProduceReport.getId()); // 设置更新的 ID + }); + + // 调用 + produceReportService.updateProduceReport(updateReqVO); + // 校验是否更新正确 + ProduceReportDO produceReport = produceReportMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, produceReport); + } + + @Test + public void testUpdateProduceReport_notExists() { + // 准备参数 + ProduceReportSaveReqVO updateReqVO = randomPojo(ProduceReportSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> produceReportService.updateProduceReport(updateReqVO), PRODUCE_REPORT_NOT_EXISTS); + } + + @Test + public void testDeleteProduceReport_success() { + // mock 数据 + ProduceReportDO dbProduceReport = randomPojo(ProduceReportDO.class); + produceReportMapper.insert(dbProduceReport);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbProduceReport.getId(); + + // 调用 + produceReportService.deleteProduceReport(id); + // 校验数据不存在了 + assertNull(produceReportMapper.selectById(id)); + } + + @Test + public void testDeleteProduceReport_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> produceReportService.deleteProduceReport(id), PRODUCE_REPORT_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetProduceReportPage() { + // mock 数据 + ProduceReportDO dbProduceReport = randomPojo(ProduceReportDO.class, o -> { // 等会查询到 + o.setProcessInstanceId(null); + o.setWorkTeamId(null); + o.setGroupId(null); + o.setReportDate(null); + o.setStatus(null); + o.setGroupType(null); + o.setRemark(null); + o.setIsEnable(null); + o.setCreateTime(null); + }); + produceReportMapper.insert(dbProduceReport); + // 测试 processInstanceId 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setProcessInstanceId(null))); + // 测试 workTeamId 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setWorkTeamId(null))); + // 测试 groupId 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setGroupId(null))); + // 测试 reportDate 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setReportDate(null))); + // 测试 status 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setStatus(null))); + // 测试 groupType 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setGroupType(null))); + // 测试 remark 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setRemark(null))); + // 测试 isEnable 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setIsEnable(null))); + // 测试 createTime 不匹配 + produceReportMapper.insert(cloneIgnoreId(dbProduceReport, o -> o.setCreateTime(null))); + // 准备参数 + ProduceReportPageReqVO reqVO = new ProduceReportPageReqVO(); + reqVO.setProcessInstanceId(null); + reqVO.setWorkTeamId(null); + reqVO.setGroupId(null); + reqVO.setReportDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setStatus(null); + reqVO.setGroupType(null); + reqVO.setRemark(null); + reqVO.setIsEnable(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = produceReportService.getProduceReportPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbProduceReport, 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/workteam/WorkTeamServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/workteam/WorkTeamServiceImplTest.java new file mode 100644 index 000000000..3df276bb7 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/workteam/WorkTeamServiceImplTest.java @@ -0,0 +1,150 @@ +package cn.iocoder.yudao.module.mes.service.workteam; + +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.workteam.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.workteam.WorkTeamDO; +import cn.iocoder.yudao.module.mes.dal.mysql.workteam.WorkTeamMapper; +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 WorkTeamServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(WorkTeamServiceImpl.class) +public class WorkTeamServiceImplTest extends BaseDbUnitTest { + + @Resource + private WorkTeamServiceImpl workTeamService; + + @Resource + private WorkTeamMapper workTeamMapper; + + @Test + public void testCreateWorkTeam_success() { + // 准备参数 + WorkTeamSaveReqVO createReqVO = randomPojo(WorkTeamSaveReqVO.class).setId(null); + + // 调用 + Long workTeamId = workTeamService.createWorkTeam(createReqVO); + // 断言 + assertNotNull(workTeamId); + // 校验记录的属性是否正确 + WorkTeamDO workTeam = workTeamMapper.selectById(workTeamId); + assertPojoEquals(createReqVO, workTeam, "id"); + } + + @Test + public void testUpdateWorkTeam_success() { + // mock 数据 + WorkTeamDO dbWorkTeam = randomPojo(WorkTeamDO.class); + workTeamMapper.insert(dbWorkTeam);// @Sql: 先插入出一条存在的数据 + // 准备参数 + WorkTeamSaveReqVO updateReqVO = randomPojo(WorkTeamSaveReqVO.class, o -> { + o.setId(dbWorkTeam.getId()); // 设置更新的 ID + }); + + // 调用 + workTeamService.updateWorkTeam(updateReqVO); + // 校验是否更新正确 + WorkTeamDO workTeam = workTeamMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, workTeam); + } + + @Test + public void testUpdateWorkTeam_notExists() { + // 准备参数 + WorkTeamSaveReqVO updateReqVO = randomPojo(WorkTeamSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> workTeamService.updateWorkTeam(updateReqVO), WORK_TEAM_NOT_EXISTS); + } + + @Test + public void testDeleteWorkTeam_success() { + // mock 数据 + WorkTeamDO dbWorkTeam = randomPojo(WorkTeamDO.class); + workTeamMapper.insert(dbWorkTeam);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbWorkTeam.getId(); + + // 调用 + workTeamService.deleteWorkTeam(id); + // 校验数据不存在了 + assertNull(workTeamMapper.selectById(id)); + } + + @Test + public void testDeleteWorkTeam_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> workTeamService.deleteWorkTeam(id), WORK_TEAM_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetWorkTeamPage() { + // mock 数据 + WorkTeamDO dbWorkTeam = randomPojo(WorkTeamDO.class, o -> { // 等会查询到 + o.setTeamName(null); + o.setTeamLeaderId(null); + o.setTeamType(null); + o.setRemark(null); + o.setIsEnable(null); + o.setCreateTime(null); + }); + workTeamMapper.insert(dbWorkTeam); + // 测试 teamName 不匹配 + workTeamMapper.insert(cloneIgnoreId(dbWorkTeam, o -> o.setTeamName(null))); + // 测试 teamLeaderId 不匹配 + workTeamMapper.insert(cloneIgnoreId(dbWorkTeam, o -> o.setTeamLeaderId(null))); + // 测试 teamType 不匹配 + workTeamMapper.insert(cloneIgnoreId(dbWorkTeam, o -> o.setTeamType(null))); + // 测试 remark 不匹配 + workTeamMapper.insert(cloneIgnoreId(dbWorkTeam, o -> o.setRemark(null))); + // 测试 isEnable 不匹配 + workTeamMapper.insert(cloneIgnoreId(dbWorkTeam, o -> o.setIsEnable(null))); + // 测试 createTime 不匹配 + workTeamMapper.insert(cloneIgnoreId(dbWorkTeam, o -> o.setCreateTime(null))); + // 准备参数 + WorkTeamPageReqVO reqVO = new WorkTeamPageReqVO(); + reqVO.setTeamName(null); + reqVO.setTeamLeaderId(null); + reqVO.setTeamType(null); + reqVO.setRemark(null); + reqVO.setIsEnable(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = workTeamService.getWorkTeamPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbWorkTeam, 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 c48f49432..3563fbc12 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 @@ -16,17 +16,20 @@ DELETE FROM "mes_item_requisition_detail"; DELETE FROM "mes_item_requisition"; --- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 DELETE FROM "mes_record_template"; --- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 DELETE FROM "mes_record_chengxing"; --- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 DELETE FROM "mes_record_suijiang"; +DELETE FROM "mes_work_team"; - +-- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "mes_work_team_detail"; +-- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "mes_produce_report"; +-- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "mes_produce_report_detail"; 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 8075d02a5..995e2d155 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 @@ -181,7 +181,7 @@ CREATE TABLE IF NOT EXISTS "mes_record_template" "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 '记录表模板'; CREATE TABLE IF NOT EXISTS "mes_record_chengxing" @@ -203,31 +203,112 @@ CREATE TABLE IF NOT EXISTS "mes_record_chengxing" "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 '成型记录表'; -CREATE TABLE IF NOT EXISTS "mes_record_suijiang" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "record_id" bigint NOT NULL, - "start_time" varchar NOT NULL, - "end_time" varchar NOT NULL, - "suijiang_time" varchar NOT NULL, - "suijiang_cost_time" varchar, - "ratio_id" bigint, - "ratio" varchar, - "water_usage" varchar, - "density_out" varchar, - "add_item_usage" varchar, - "slag_yield" varchar, - "density" varchar, - "remark" varchar, - "is_enable" bit NOT NULL, - "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 NOT NULL, - PRIMARY KEY ("id") +CREATE TABLE IF NOT EXISTS "mes_record_suijiang" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "record_id" bigint NOT NULL, + "start_time" varchar NOT NULL, + "end_time" varchar NOT NULL, + "suijiang_time" varchar NOT NULL, + "suijiang_cost_time" varchar, + "ratio_id" bigint, + "ratio" varchar, + "water_usage" varchar, + "density_out" varchar, + "add_item_usage" varchar, + "slag_yield" varchar, + "density" varchar, + "remark" varchar, + "is_enable" bit NOT NULL, + "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 NOT NULL, + PRIMARY KEY ("id") ) COMMENT '碎浆记录表'; +CREATE TABLE IF NOT EXISTS "mes_work_team" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "team_name" varchar, + "team_leader_id" bigint NOT NULL, + "team_type" varchar, + "remark" varchar, + "is_enable" bit NOT NULL, + "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_work_team_detail" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "work_team_id" bigint, + "user_id" bigint NOT NULL, + "user_role" int NOT NULL, + "remark" 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_produce_report" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "process_instance_id" varchar, + "work_team_id" bigint NOT NULL, + "group_id" bigint NOT NULL, + "report_date" varchar NOT NULL, + "status" int NOT NULL, + "group_type" int NOT NULL, + "remark" varchar, + "is_enable" bit NOT NULL, + "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_produce_report_detail" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "report_id" bigint, + "plan_id" bigint NOT NULL, + "product_id" bigint NOT NULL, + "user_id" bigint NOT NULL, + "org_id" bigint NOT NULL, + "quality_rate" varchar, + "waste_reason" varchar, + "total_time" varchar, + "package_number" varchar, + "remark" varchar, + "is_enable" bit NOT NULL, + "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, + "quality_number" varchar, + "waste_number" varchar, + "total_number" varchar, + "report_date" varchar, + "report_time" varchar, + "report_status" int, + PRIMARY KEY ("id") +) COMMENT '生产报工明细'; +