add report to plan

plp
chenshuichuan 2 years ago
parent 4d8682e6dd
commit 32a17f4303

@ -275,20 +275,20 @@ CREATE TABLE `mes_error_record`
CREATE TABLE `mes_stock_in_detail`
(
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`stock_in_id` bigint DEFAULT NULL COMMENT '入库单id',
`stock_in_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '入库单编号',
`stock_in_item_id` bigint DEFAULT NULL COMMENT '入库单项id',
`plan_id` bigint DEFAULT NULL COMMENT '计划id',
`product_id` bigint DEFAULT NULL COMMENT '产品',
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`stock_in_id` bigint DEFAULT NULL COMMENT '入库单id',
`stock_in_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '入库单编号',
`stock_in_item_id` bigint DEFAULT NULL COMMENT '入库单项id',
`plan_id` bigint DEFAULT NULL COMMENT '计划id',
`product_id` bigint DEFAULT NULL COMMENT '产品',
`number` decimal(24, 6) DEFAULT NULL COMMENT '数量',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 2
@ -318,3 +318,57 @@ CREATE TABLE `mes_org_worker`
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT ='工位安排表';
CREATE TABLE `mes_work_report_plan`
(
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`report_id` bigint DEFAULT NULL COMMENT '报工单id',
`plan_id` bigint DEFAULT NULL COMMENT '计划id',
`product_id` bigint DEFAULT NULL COMMENT '产品ID',
`quality_number_plan` decimal(24, 6) DEFAULT NULL COMMENT '成品数量',
`waste_number_plan` decimal(24, 6) DEFAULT NULL COMMENT '废品数量',
`report_time_plan` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '计件时间',
`total_time_plan` decimal(24, 6) DEFAULT NULL COMMENT '总时长',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 2
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT ='报工分配计划';
CREATE TABLE `mes_produce_report_change_record`
(
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`report_id` bigint DEFAULT NULL COMMENT '报工单id',
`change_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '变更类型',
`before_change` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '变更前数据',
`after_change` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '变更后数据',
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 2
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT ='报工变更记录';
CREATE VIEW mes_view_report_plan_detail
AS
SELECT wp.*, pd.user_id ,pd.report_type ,pd.group_type ,pd.org_type ,pd.org_id ,pd.quality_number ,pd.waste_number ,
pd.report_date ,pd.report_status ,pd.creator as report_creator
FROM mes_work_report_plan wp
JOIN mes_produce_report_detail pd ON wp.report_id = pd.id;

@ -56,6 +56,8 @@ public interface ErrorCodeConstants {
ErrorCode FEEDING_RECORD_PLAN_NOT_EXISTS = new ErrorCode(5_0082, "投料分配计划不存在");
ErrorCode STOCK_IN_DETAIL_NOT_EXISTS = new ErrorCode(5_0082, "生产入库分配计划不存在");
ErrorCode ERROR_RECORD_NOT_EXISTS = new ErrorCode(5_0082, "投错误记录不存在");
ErrorCode ORG_WORKER_NOT_EXISTS = new ErrorCode(5_0083, "工位安排不存在");
ErrorCode PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS = new ErrorCode(5_0084, "报工变更记录不存在");
ErrorCode WORK_REPORT_PLAN_NOT_EXISTS = new ErrorCode(5_0085, "报工分配计划不存在");
}

@ -0,0 +1,95 @@
package cn.iocoder.yudao.module.mes.controller.admin.changerecord;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO;
import cn.iocoder.yudao.module.mes.service.changerecord.ProduceReportChangeRecordService;
@Tag(name = "管理后台 - 报工变更记录")
@RestController
@RequestMapping("/mes/produce-report-change-record")
@Validated
public class ProduceReportChangeRecordController {
@Resource
private ProduceReportChangeRecordService produceReportChangeRecordService;
@PostMapping("/create")
@Operation(summary = "创建报工变更记录")
@PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:create')")
public CommonResult<Long> createProduceReportChangeRecord(@Valid @RequestBody ProduceReportChangeRecordSaveReqVO createReqVO) {
return success(produceReportChangeRecordService.createProduceReportChangeRecord(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新报工变更记录")
@PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:update')")
public CommonResult<Boolean> updateProduceReportChangeRecord(@Valid @RequestBody ProduceReportChangeRecordSaveReqVO updateReqVO) {
produceReportChangeRecordService.updateProduceReportChangeRecord(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除报工变更记录")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:delete')")
public CommonResult<Boolean> deleteProduceReportChangeRecord(@RequestParam("id") Long id) {
produceReportChangeRecordService.deleteProduceReportChangeRecord(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得报工变更记录")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:query')")
public CommonResult<ProduceReportChangeRecordRespVO> getProduceReportChangeRecord(@RequestParam("id") Long id) {
ProduceReportChangeRecordDO produceReportChangeRecord = produceReportChangeRecordService.getProduceReportChangeRecord(id);
return success(BeanUtils.toBean(produceReportChangeRecord, ProduceReportChangeRecordRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得报工变更记录分页")
@PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:query')")
public CommonResult<PageResult<ProduceReportChangeRecordRespVO>> getProduceReportChangeRecordPage(@Valid ProduceReportChangeRecordPageReqVO pageReqVO) {
PageResult<ProduceReportChangeRecordDO> pageResult = produceReportChangeRecordService.getProduceReportChangeRecordPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProduceReportChangeRecordRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出报工变更记录 Excel")
@PreAuthorize("@ss.hasPermission('mes:produce-report-change-record:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportProduceReportChangeRecordExcel(@Valid ProduceReportChangeRecordPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ProduceReportChangeRecordDO> list = produceReportChangeRecordService.getProduceReportChangeRecordPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "报工变更记录.xls", "数据", ProduceReportChangeRecordRespVO.class,
BeanUtils.toBean(list, ProduceReportChangeRecordRespVO.class));
}
}

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 报工变更记录分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProduceReportChangeRecordPageReqVO extends PageParam {
@Schema(description = "报工单id", example = "23446")
private Long reportId;
@Schema(description = "变更类型", example = "2")
private String changeType;
@Schema(description = "变更前数据")
private String beforeChange;
@Schema(description = "变更后数据")
private String afterChange;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 报工变更记录 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ProduceReportChangeRecordRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28832")
@ExcelProperty("id")
private Long id;
@Schema(description = "报工单id", example = "23446")
@ExcelProperty("报工单id")
private Long reportId;
@Schema(description = "变更类型", example = "2")
@ExcelProperty("变更类型")
private String changeType;
@Schema(description = "变更前数据")
@ExcelProperty("变更前数据")
private String beforeChange;
@Schema(description = "变更后数据")
@ExcelProperty("变更后数据")
private String afterChange;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 报工变更记录新增/修改 Request VO")
@Data
public class ProduceReportChangeRecordSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28832")
private Long id;
@Schema(description = "报工单id", example = "23446")
private Long reportId;
@Schema(description = "变更类型", example = "2")
private String changeType;
@Schema(description = "变更前数据")
private String beforeChange;
@Schema(description = "变更后数据")
private String afterChange;
}

@ -14,7 +14,6 @@ import cn.iocoder.yudao.module.mes.service.producereport.ProduceReportDetailServ
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -40,7 +39,7 @@ public class ProduceReportDetailController {
@PostMapping("/create")
@Operation(summary = "创建生产报工明细")
@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:create')")
//@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:create')")
public CommonResult<Long> createProduceReportDetail(@Valid @RequestBody ProduceReportDetailSaveReqVO createReqVO) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(createReqVO.getReportDateString(), formatter);
@ -50,7 +49,7 @@ public class ProduceReportDetailController {
@PutMapping("/update")
@Operation(summary = "更新生产报工明细")
@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:update')")
//@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:update')")
public CommonResult<Boolean> updateProduceReportDetail(@Valid @RequestBody ProduceReportDetailSaveReqVO updateReqVO) {
produceReportDetailService.updateProduceReportDetail(updateReqVO);
return success(true);
@ -59,7 +58,7 @@ public class ProduceReportDetailController {
@DeleteMapping("/delete")
@Operation(summary = "删除生产报工明细")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:delete')")
//@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:delete')")
public CommonResult<Boolean> deleteProduceReportDetail(@RequestParam("id") Long id) {
produceReportDetailService.deleteProduceReportDetail(id);
return success(true);
@ -68,7 +67,7 @@ public class ProduceReportDetailController {
@GetMapping("/get")
@Operation(summary = "获得生产报工明细")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')")
//@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')")
public CommonResult<ProduceReportDetailRespVO> getProduceReportDetail(@RequestParam("id") Long id) {
ProduceReportDetailDO produceReportDetail = produceReportDetailService.getProduceReportDetail(id);
return success(BeanUtils.toBean(produceReportDetail, ProduceReportDetailRespVO.class));
@ -76,29 +75,33 @@ public class ProduceReportDetailController {
@GetMapping("/page")
@Operation(summary = "获得生产报工明细分页")
@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')")
//@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')")
public CommonResult<PageResult<ProduceReportDetailRespVO>> getProduceReportDetailPage(@Valid ProduceReportDetailPageReqVO pageReqVO) {
PageResult<ProduceReportDetailDO> pageResult = produceReportDetailService.getProduceReportDetailPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProduceReportDetailRespVO.class));
PageResult<ProduceReportDetailRespVO> pageResult = produceReportDetailService.getProduceReportDetailPage(pageReqVO);
return success(pageResult);
}
// @GetMapping("/pageReplacePage")
// @Operation(summary = "获得代报工生产报工明细分页")
// @PreAuthorize("@ss.hasPermission('mes:produce-report-detail:query')")
// public CommonResult<PageResult<ProduceReportDetailRespVO>> getProduceReportDetailPage(@Valid ProduceReportDetailPageReqVO pageReqVO) {
// PageResult<ProduceReportDetailDO> pageResult = produceReportDetailService.getProduceReportDetailPage(pageReqVO);
// return success(BeanUtils.toBean(pageResult, ProduceReportDetailRespVO.class));
// }
@GetMapping("/export-excel")
@Operation(summary = "导出生产报工明细 Excel")
@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:export')")
//@PreAuthorize("@ss.hasPermission('mes:produce-report-detail:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportProduceReportDetailExcel(@Valid ProduceReportDetailPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ProduceReportDetailDO> list = produceReportDetailService.getProduceReportDetailPage(pageReqVO).getList();
List<ProduceReportDetailRespVO> list = produceReportDetailService.getProduceReportDetailPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "生产报工明细.xls", "数据", ProduceReportDetailRespVO.class,
BeanUtils.toBean(list, ProduceReportDetailRespVO.class));
list);
}
@GetMapping("/updateStatus")
@Operation(summary = "提交报工单")
public CommonResult<Boolean> updateStatus(@RequestParam("id") Long id,
@RequestParam("status") Integer status) {
ProduceReportDetailDO produceReportDetail = produceReportDetailService.getProduceReportDetail(id);
produceReportDetail.setReportStatus(status);
ProduceReportDetailSaveReqVO saveReqVO = BeanUtils.toBean(produceReportDetail, ProduceReportDetailSaveReqVO.class);
produceReportDetailService.updateProduceReportDetail(saveReqVO);
return success(true);
}
}

@ -22,22 +22,31 @@ public class ProduceReportDetailRespVO {
@Schema(description = "报工单id", example = "10253")
@ExcelProperty("报工单id")
private Long reportId;
@Schema(description = "报工单id", example = "10253")
@ExcelProperty("报工单id")
private String reportCode;
@Schema(description = "生产计划ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22861")
@ExcelProperty("生产计划ID")
private Long planId;
@Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517")
@ExcelProperty("产品ID")
private Long productId;
@Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517")
@ExcelProperty("产品")
private String productName;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386")
@ExcelProperty("用户ID")
private Long userId;
@Schema(description = "用户", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386")
@ExcelProperty("用户")
private String userName;
@Schema(description = "组织ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329")
@ExcelProperty("组织ID")
private Long orgId;
@Schema(description = "工位", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329")
@ExcelProperty("工位")
private String orgName;
@Schema(description = "成品率")
@ExcelProperty("成品率")

@ -0,0 +1,93 @@
package cn.iocoder.yudao.module.mes.controller.admin.producereportplan;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO;
import cn.iocoder.yudao.module.mes.service.workreportplan.WorkReportPlanService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 报工分配计划")
@RestController
@RequestMapping("/mes/work-report-plan-view")
@Validated
public class ReportPlanViewController {
@Resource
private WorkReportPlanService workReportPlanService;
@PostMapping("/create")
@Operation(summary = "创建报工分配计划")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:create')")
public CommonResult<Long> createWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO createReqVO) {
return success(workReportPlanService.createWorkReportPlan(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新报工分配计划")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:update')")
public CommonResult<Boolean> updateWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO updateReqVO) {
workReportPlanService.updateWorkReportPlan(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除报工分配计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:delete')")
public CommonResult<Boolean> deleteWorkReportPlan(@RequestParam("id") Long id) {
workReportPlanService.deleteWorkReportPlan(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得报工分配计划")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')")
public CommonResult<WorkReportPlanRespVO> getWorkReportPlan(@RequestParam("id") Long id) {
WorkReportPlanDO workReportPlan = workReportPlanService.getWorkReportPlan(id);
return success(BeanUtils.toBean(workReportPlan, WorkReportPlanRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得报工分配计划分页")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')")
public CommonResult<PageResult<WorkReportPlanRespVO>> getWorkReportPlanPage(@Valid WorkReportPlanPageReqVO pageReqVO) {
PageResult<WorkReportPlanDO> pageResult = workReportPlanService.getWorkReportPlanPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, WorkReportPlanRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出报工分配计划 Excel")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportWorkReportPlanExcel(@Valid WorkReportPlanPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<WorkReportPlanDO> list = workReportPlanService.getWorkReportPlanPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "报工分配计划.xls", "数据", WorkReportPlanRespVO.class,
BeanUtils.toBean(list, WorkReportPlanRespVO.class));
}
}

@ -0,0 +1,93 @@
package cn.iocoder.yudao.module.mes.controller.admin.producereportplan;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO;
import cn.iocoder.yudao.module.mes.service.workreportplan.WorkReportPlanService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 报工分配计划")
@RestController
@RequestMapping("/mes/work-report-plan")
@Validated
public class WorkReportPlanController {
@Resource
private WorkReportPlanService workReportPlanService;
@PostMapping("/create")
@Operation(summary = "创建报工分配计划")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:create')")
public CommonResult<Long> createWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO createReqVO) {
return success(workReportPlanService.createWorkReportPlan(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新报工分配计划")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:update')")
public CommonResult<Boolean> updateWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO updateReqVO) {
workReportPlanService.updateWorkReportPlan(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除报工分配计划")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:delete')")
public CommonResult<Boolean> deleteWorkReportPlan(@RequestParam("id") Long id) {
workReportPlanService.deleteWorkReportPlan(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得报工分配计划")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')")
public CommonResult<WorkReportPlanRespVO> getWorkReportPlan(@RequestParam("id") Long id) {
WorkReportPlanDO workReportPlan = workReportPlanService.getWorkReportPlan(id);
return success(BeanUtils.toBean(workReportPlan, WorkReportPlanRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得报工分配计划分页")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')")
public CommonResult<PageResult<WorkReportPlanRespVO>> getWorkReportPlanPage(@Valid WorkReportPlanPageReqVO pageReqVO) {
PageResult<WorkReportPlanDO> pageResult = workReportPlanService.getWorkReportPlanPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, WorkReportPlanRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出报工分配计划 Excel")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportWorkReportPlanExcel(@Valid WorkReportPlanPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<WorkReportPlanDO> list = workReportPlanService.getWorkReportPlanPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "报工分配计划.xls", "数据", WorkReportPlanRespVO.class,
BeanUtils.toBean(list, WorkReportPlanRespVO.class));
}
}

@ -0,0 +1,83 @@
package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 报工分配计划分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ReportPlanViewReqVO extends PageParam {
@Schema(description = "报工单id", example = "27172")
private Long reportId;
@Schema(description = "计划id", example = "30035")
private Long planId;
@Schema(description = "产品ID", example = "9987")
private Long productId;
@Schema(description = "成品数量")
private BigDecimal qualityNumberPlan;
@Schema(description = "废品数量")
private BigDecimal wasteNumberPlan;
@Schema(description = "计件时间")
private String reportTimePlan;
@Schema(description = "总时长")
private BigDecimal totalTimePlan;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "用户ID", example = "23386")
private Long userId;
@Schema(description = "组织ID", example = "1329")
private Long orgId;
@Schema(description = "总时长")
private BigDecimal totalTime;
@Schema(description = "成品数量")
private BigDecimal qualityNumber;
@Schema(description = "废品数量")
private BigDecimal wasteNumber;
@Schema(description = "总数量")
private BigDecimal totalNumber;
@Schema(description = "报工日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] reportDate;
@Schema(description = "报工状态", example = "1")
private Integer reportStatus;
@Schema(description = "计件时间", example = "10:10-12:00,14:10-16:10")
private String reportTime;
@Schema(description = "工序类型")
private String orgType;
/**
*
*/
@Schema(description = "报工类型")
private String reportType;
@Schema(description = "班别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Integer groupType;
}

@ -0,0 +1,116 @@
package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 报工分配计划 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ReportPlanViewRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32743")
@ExcelProperty("id")
private Long id;
@Schema(description = "报工单id", example = "27172")
@ExcelProperty("报工单id")
private Long reportId;
@Schema(description = "计划id", example = "30035")
@ExcelProperty("计划id")
private Long planId;
@Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517")
private Long productId;
@Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "14517")
@ExcelProperty("产品")
private String productName;
@Schema(description = "成品数量")
@ExcelProperty("成品数量")
private BigDecimal qualityNumberPlan;
@Schema(description = "废品数量")
@ExcelProperty("废品数量")
private BigDecimal wasteNumberPlan;
@Schema(description = "计件时间")
@ExcelProperty("计件时间")
private String reportTimePlan;
@Schema(description = "总时长")
@ExcelProperty("总时长")
private BigDecimal totalTimePlan;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386")
private Long userId;
@Schema(description = "用户", requiredMode = Schema.RequiredMode.REQUIRED, example = "23386")
@ExcelProperty("用户")
private String userName;
@Schema(description = "组织ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329")
private Long orgId;
@Schema(description = "工位", requiredMode = Schema.RequiredMode.REQUIRED, example = "1329")
@ExcelProperty("工位")
private String orgName;
@Schema(description = "总时长")
@ExcelProperty("总时长")
private BigDecimal totalTime;
@Schema(description = "成品数量")
@ExcelProperty("成品数量")
private BigDecimal qualityNumber;
@Schema(description = "废品数量")
@ExcelProperty("废品数量")
private BigDecimal wasteNumber;
@Schema(description = "总数量")
@ExcelProperty("总数量")
private BigDecimal totalNumber;
@Schema(description = "报工日期")
@ExcelProperty("报工日期")
private LocalDateTime reportDate;
@Schema(description = "计件时间")
@ExcelProperty("计件时间")
private String reportTime;
@Schema(description = "报工状态", example = "1")
@ExcelProperty(value = "报工状态", converter = DictConvert.class)
@DictFormat("mes_record_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Integer reportStatus;
/**
*
*/
@Schema(description = "工序类型")
@ExcelProperty("工序类型")
private String orgType;
/**
*
*/
@Schema(description = "报工类型")
@ExcelProperty("报工类型")
private String reportType;
@Schema(description = "班别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "班别", converter = DictConvert.class)
@DictFormat("mes_group_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Integer groupType;
}

@ -0,0 +1,46 @@
package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 报工分配计划分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class WorkReportPlanPageReqVO extends PageParam {
@Schema(description = "报工单id", example = "27172")
private Long reportId;
@Schema(description = "计划id", example = "30035")
private Long planId;
@Schema(description = "产品ID", example = "9987")
private Long productId;
@Schema(description = "成品数量")
private BigDecimal qualityNumberPlan;
@Schema(description = "废品数量")
private BigDecimal wasteNumberPlan;
@Schema(description = "计件时间")
private String reportTimePlan;
@Schema(description = "总时长")
private BigDecimal totalTimePlan;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,52 @@
package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 报工分配计划 Response VO")
@Data
@ExcelIgnoreUnannotated
public class WorkReportPlanRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32743")
@ExcelProperty("id")
private Long id;
@Schema(description = "报工单id", example = "27172")
@ExcelProperty("报工单id")
private Long reportId;
@Schema(description = "计划id", example = "30035")
@ExcelProperty("计划id")
private Long planId;
@Schema(description = "产品ID", example = "9987")
@ExcelProperty("产品ID")
private Long productId;
@Schema(description = "成品数量")
@ExcelProperty("成品数量")
private BigDecimal qualityNumberPlan;
@Schema(description = "废品数量")
@ExcelProperty("废品数量")
private BigDecimal wasteNumberPlan;
@Schema(description = "计件时间")
@ExcelProperty("计件时间")
private String reportTimePlan;
@Schema(description = "总时长")
@ExcelProperty("总时长")
private BigDecimal totalTimePlan;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 报工分配计划新增/修改 Request VO")
@Data
public class WorkReportPlanSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32743")
private Long id;
@Schema(description = "报工单id", example = "27172")
private Long reportId;
@Schema(description = "计划id", example = "30035")
private Long planId;
@Schema(description = "产品ID", example = "9987")
private Long productId;
@Schema(description = "成品数量")
private BigDecimal qualityNumberPlan;
@Schema(description = "废品数量")
private BigDecimal wasteNumberPlan;
@Schema(description = "计件时间")
private String reportTimePlan;
@Schema(description = "总时长")
private BigDecimal totalTimePlan;
}

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.mes.dal.dataobject.changerecord;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("mes_produce_report_change_record")
@KeySequence("mes_produce_report_change_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProduceReportChangeRecordDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* id
*/
private Long reportId;
/**
*
*/
private String changeType;
/**
*
*/
private String beforeChange;
/**
*
*/
private String afterChange;
}

@ -0,0 +1,117 @@
package cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* DO
*
* @author
*/
@TableName("mes_view_report_plan_detail")
@KeySequence("mes_view_report_plan_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ReportPlanViewDO extends BaseDO {
/**
* id
*/
private Long id;
/**
* id
*/
private Long reportId;
/**
* id
*/
private Long planId;
/**
* ID
*/
private Long productId;
/**
*
*/
private BigDecimal qualityNumberPlan;
/**
*
*/
private BigDecimal wasteNumberPlan;
/**
*
*/
private String reportTimePlan;
/**
*
*/
private BigDecimal totalTimePlan;
/**
* ID
*/
private Long userId;
/**
* ID
*/
private Long orgId;
/**
*
*/
private String orgType;
/**
*
*/
private String reportType;
/**
*
*/
private BigDecimal qualityRate;
/**
*
*/
private String wasteReason;
/**
*
*/
private BigDecimal totalTime;
/**
*
*/
private BigDecimal qualityNumber;
/**
*
*/
private BigDecimal wasteNumber;
/**
*
*/
private LocalDateTime reportDate;
/**
*
*/
private String reportTime;
/**
*
* <p>
* {@link TODO mes_record_status }
*/
private Integer reportStatus;
@Schema(description = "班别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Integer groupType;
}

@ -0,0 +1,62 @@
package cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan;
import lombok.*;
import java.util.*;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("mes_work_report_plan")
@KeySequence("mes_work_report_plan_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WorkReportPlanDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* id
*/
private Long reportId;
/**
* id
*/
private Long planId;
/**
* ID
*/
private Long productId;
/**
*
*/
private BigDecimal qualityNumberPlan;
/**
*
*/
private BigDecimal wasteNumberPlan;
/**
*
*/
private String reportTimePlan;
/**
*
*/
private BigDecimal totalTimePlan;
}

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.mes.dal.mysql.changerecord;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface ProduceReportChangeRecordMapper extends BaseMapperX<ProduceReportChangeRecordDO> {
default PageResult<ProduceReportChangeRecordDO> selectPage(ProduceReportChangeRecordPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProduceReportChangeRecordDO>()
.eqIfPresent(ProduceReportChangeRecordDO::getReportId, reqVO.getReportId())
.eqIfPresent(ProduceReportChangeRecordDO::getChangeType, reqVO.getChangeType())
.eqIfPresent(ProduceReportChangeRecordDO::getBeforeChange, reqVO.getBeforeChange())
.eqIfPresent(ProduceReportChangeRecordDO::getAfterChange, reqVO.getAfterChange())
.betweenIfPresent(ProduceReportChangeRecordDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ProduceReportChangeRecordDO::getId));
}
}

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.mes.dal.mysql.workreportplan;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.ReportPlanViewDO;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper
*
* @author
*/
@Mapper
public interface ReportPlanViewMapper extends BaseMapperX<ReportPlanViewDO> {
default PageResult<ReportPlanViewDO> selectPage(WorkReportPlanPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ReportPlanViewDO>()
.eqIfPresent(ReportPlanViewDO::getReportId, reqVO.getReportId())
.eqIfPresent(ReportPlanViewDO::getPlanId, reqVO.getPlanId())
.eqIfPresent(ReportPlanViewDO::getProductId, reqVO.getProductId())
.eqIfPresent(ReportPlanViewDO::getQualityNumberPlan, reqVO.getQualityNumberPlan())
.eqIfPresent(ReportPlanViewDO::getWasteNumberPlan, reqVO.getWasteNumberPlan())
.eqIfPresent(ReportPlanViewDO::getReportTimePlan, reqVO.getReportTimePlan())
.eqIfPresent(ReportPlanViewDO::getTotalTimePlan, reqVO.getTotalTimePlan())
.betweenIfPresent(ReportPlanViewDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ReportPlanViewDO::getId));
}
}

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.mes.dal.mysql.workreportplan;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface WorkReportPlanMapper extends BaseMapperX<WorkReportPlanDO> {
default PageResult<WorkReportPlanDO> selectPage(WorkReportPlanPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<WorkReportPlanDO>()
.eqIfPresent(WorkReportPlanDO::getReportId, reqVO.getReportId())
.eqIfPresent(WorkReportPlanDO::getPlanId, reqVO.getPlanId())
.eqIfPresent(WorkReportPlanDO::getProductId, reqVO.getProductId())
.eqIfPresent(WorkReportPlanDO::getQualityNumberPlan, reqVO.getQualityNumberPlan())
.eqIfPresent(WorkReportPlanDO::getWasteNumberPlan, reqVO.getWasteNumberPlan())
.eqIfPresent(WorkReportPlanDO::getReportTimePlan, reqVO.getReportTimePlan())
.eqIfPresent(WorkReportPlanDO::getTotalTimePlan, reqVO.getTotalTimePlan())
.betweenIfPresent(WorkReportPlanDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(WorkReportPlanDO::getId));
}
}

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.mes.service.changerecord;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface ProduceReportChangeRecordService {
/**
*
*
* @param createReqVO
* @return
*/
Long createProduceReportChangeRecord(@Valid ProduceReportChangeRecordSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateProduceReportChangeRecord(@Valid ProduceReportChangeRecordSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteProduceReportChangeRecord(Long id);
/**
*
*
* @param id
* @return
*/
ProduceReportChangeRecordDO getProduceReportChangeRecord(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<ProduceReportChangeRecordDO> getProduceReportChangeRecordPage(ProduceReportChangeRecordPageReqVO pageReqVO);
}

@ -0,0 +1,74 @@
package cn.iocoder.yudao.module.mes.service.changerecord;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.dal.mysql.changerecord.ProduceReportChangeRecordMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class ProduceReportChangeRecordServiceImpl implements ProduceReportChangeRecordService {
@Resource
private ProduceReportChangeRecordMapper produceReportChangeRecordMapper;
@Override
public Long createProduceReportChangeRecord(ProduceReportChangeRecordSaveReqVO createReqVO) {
// 插入
ProduceReportChangeRecordDO produceReportChangeRecord = BeanUtils.toBean(createReqVO, ProduceReportChangeRecordDO.class);
produceReportChangeRecordMapper.insert(produceReportChangeRecord);
// 返回
return produceReportChangeRecord.getId();
}
@Override
public void updateProduceReportChangeRecord(ProduceReportChangeRecordSaveReqVO updateReqVO) {
// 校验存在
validateProduceReportChangeRecordExists(updateReqVO.getId());
// 更新
ProduceReportChangeRecordDO updateObj = BeanUtils.toBean(updateReqVO, ProduceReportChangeRecordDO.class);
produceReportChangeRecordMapper.updateById(updateObj);
}
@Override
public void deleteProduceReportChangeRecord(Long id) {
// 校验存在
validateProduceReportChangeRecordExists(id);
// 删除
produceReportChangeRecordMapper.deleteById(id);
}
private void validateProduceReportChangeRecordExists(Long id) {
if (produceReportChangeRecordMapper.selectById(id) == null) {
throw exception(PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS);
}
}
@Override
public ProduceReportChangeRecordDO getProduceReportChangeRecord(Long id) {
return produceReportChangeRecordMapper.selectById(id);
}
@Override
public PageResult<ProduceReportChangeRecordDO> getProduceReportChangeRecordPage(ProduceReportChangeRecordPageReqVO pageReqVO) {
return produceReportChangeRecordMapper.selectPage(pageReqVO);
}
}

@ -2,10 +2,12 @@ package cn.iocoder.yudao.module.mes.service.producereport;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO;
import javax.validation.Valid;
import java.util.List;
/**
* Service
@ -50,6 +52,6 @@ public interface ProduceReportDetailService {
* @param pageReqVO
* @return
*/
PageResult<ProduceReportDetailDO> getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO);
PageResult<ProduceReportDetailRespVO> getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO);
List<ProduceReportDetailRespVO> buildVOList(List<ProduceReportDetailDO> list);
}

@ -1,17 +1,31 @@
package cn.iocoder.yudao.module.mes.service.producereport;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailSaveReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ReportStatusEnum;
import cn.iocoder.yudao.module.mes.dal.dataobject.organization.OrganizationDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO;
import cn.iocoder.yudao.module.mes.dal.mysql.producereport.ProduceReportDetailMapper;
import cn.iocoder.yudao.module.mes.service.organization.OrganizationService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRODUCE_REPORT_DETAIL_NOT_EXISTS;
/**
@ -28,6 +42,7 @@ public class ProduceReportDetailServiceImpl implements ProduceReportDetailServic
@Override
public Long createProduceReportDetail(ProduceReportDetailSaveReqVO createReqVO) {
createReqVO.setReportStatus(ReportStatusEnum.稿.getValue());
// 插入
ProduceReportDetailDO produceReportDetail = BeanUtils.toBean(createReqVO, ProduceReportDetailDO.class);
produceReportDetailMapper.insert(produceReportDetail);
@ -64,8 +79,41 @@ public class ProduceReportDetailServiceImpl implements ProduceReportDetailServic
}
@Override
public PageResult<ProduceReportDetailDO> getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO) {
return produceReportDetailMapper.selectPage(pageReqVO);
public PageResult<ProduceReportDetailRespVO> getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO) {
PageResult<ProduceReportDetailDO> pageResult = produceReportDetailMapper.selectPage(pageReqVO);
return new PageResult<>(buildVOList(pageResult.getList()), pageResult.getTotal());
}
@Resource
private OrganizationService organizationService;
@Resource
private AdminUserApi adminUserApi;
@Resource
private ErpProductService productService;
@Resource
private ProduceReportService reportService;
@Override
public List<ProduceReportDetailRespVO> buildVOList(List<ProduceReportDetailDO> list){
if (CollUtil.isEmpty(list)) {
return Collections.emptyList();
}
Map<Long, OrganizationDO> map = organizationService.getMap(
convertSet(list, ProduceReportDetailDO::getOrgId));
// 1.4 管理员信息
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
convertSet(list, ProduceReportDetailDO::getUserId));
Map<Long, ErpProductDO> productMap = productService.getProductMap(
convertSet(list, ProduceReportDetailDO::getProductId));
return BeanUtils.toBean(list, ProduceReportDetailRespVO.class, item -> {
MapUtils.findAndThen(map, item.getOrgId(),
org -> item.setOrgName(org.getName())
);
MapUtils.findAndThen(userMap, item.getUserId(),
user -> item.setUserName(user.getNickname()));
MapUtils.findAndThen(productMap, item.getProductId(),
pro -> item.setProductName(pro.getName()));
});
}
}

@ -0,0 +1,53 @@
package cn.iocoder.yudao.module.mes.service.workreportplan;
import javax.validation.*;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface WorkReportPlanService {
/**
*
*
* @param createReqVO
* @return
*/
Long createWorkReportPlan(@Valid WorkReportPlanSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateWorkReportPlan(@Valid WorkReportPlanSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteWorkReportPlan(Long id);
/**
*
*
* @param id
* @return
*/
WorkReportPlanDO getWorkReportPlan(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<WorkReportPlanDO> getWorkReportPlanPage(WorkReportPlanPageReqVO pageReqVO);
}

@ -0,0 +1,71 @@
package cn.iocoder.yudao.module.mes.service.workreportplan;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO;
import cn.iocoder.yudao.module.mes.dal.mysql.workreportplan.WorkReportPlanMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WORK_REPORT_PLAN_NOT_EXISTS;
/**
* Service
*
* @author
*/
@Service
@Validated
public class WorkReportPlanServiceImpl implements WorkReportPlanService {
@Resource
private WorkReportPlanMapper workReportPlanMapper;
@Override
public Long createWorkReportPlan(WorkReportPlanSaveReqVO createReqVO) {
// 插入
WorkReportPlanDO workReportPlan = BeanUtils.toBean(createReqVO, WorkReportPlanDO.class);
workReportPlanMapper.insert(workReportPlan);
// 返回
return workReportPlan.getId();
}
@Override
public void updateWorkReportPlan(WorkReportPlanSaveReqVO updateReqVO) {
// 校验存在
validateWorkReportPlanExists(updateReqVO.getId());
// 更新
WorkReportPlanDO updateObj = BeanUtils.toBean(updateReqVO, WorkReportPlanDO.class);
workReportPlanMapper.updateById(updateObj);
}
@Override
public void deleteWorkReportPlan(Long id) {
// 校验存在
validateWorkReportPlanExists(id);
// 删除
workReportPlanMapper.deleteById(id);
}
private void validateWorkReportPlanExists(Long id) {
if (workReportPlanMapper.selectById(id) == null) {
throw exception(WORK_REPORT_PLAN_NOT_EXISTS);
}
}
@Override
public WorkReportPlanDO getWorkReportPlan(Long id) {
return workReportPlanMapper.selectById(id);
}
@Override
public PageResult<WorkReportPlanDO> getWorkReportPlanPage(WorkReportPlanPageReqVO pageReqVO) {
return workReportPlanMapper.selectPage(pageReqVO);
}
}

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.mes.dal.mysql.changerecord.ProduceReportChangeRecordMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.mes.dal.mysql.workreportplan.WorkReportPlanMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,146 @@
package cn.iocoder.yudao.module.mes.service.changerecord;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.mes.controller.admin.changerecord.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.changerecord.ProduceReportChangeRecordDO;
import cn.iocoder.yudao.module.mes.dal.mysql.changerecord.ProduceReportChangeRecordMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link ProduceReportChangeRecordServiceImpl}
*
* @author
*/
@Import(ProduceReportChangeRecordServiceImpl.class)
public class ProduceReportChangeRecordServiceImplTest extends BaseDbUnitTest {
@Resource
private ProduceReportChangeRecordServiceImpl produceReportChangeRecordService;
@Resource
private ProduceReportChangeRecordMapper produceReportChangeRecordMapper;
@Test
public void testCreateProduceReportChangeRecord_success() {
// 准备参数
ProduceReportChangeRecordSaveReqVO createReqVO = randomPojo(ProduceReportChangeRecordSaveReqVO.class).setId(null);
// 调用
Long produceReportChangeRecordId = produceReportChangeRecordService.createProduceReportChangeRecord(createReqVO);
// 断言
assertNotNull(produceReportChangeRecordId);
// 校验记录的属性是否正确
ProduceReportChangeRecordDO produceReportChangeRecord = produceReportChangeRecordMapper.selectById(produceReportChangeRecordId);
assertPojoEquals(createReqVO, produceReportChangeRecord, "id");
}
@Test
public void testUpdateProduceReportChangeRecord_success() {
// mock 数据
ProduceReportChangeRecordDO dbProduceReportChangeRecord = randomPojo(ProduceReportChangeRecordDO.class);
produceReportChangeRecordMapper.insert(dbProduceReportChangeRecord);// @Sql: 先插入出一条存在的数据
// 准备参数
ProduceReportChangeRecordSaveReqVO updateReqVO = randomPojo(ProduceReportChangeRecordSaveReqVO.class, o -> {
o.setId(dbProduceReportChangeRecord.getId()); // 设置更新的 ID
});
// 调用
produceReportChangeRecordService.updateProduceReportChangeRecord(updateReqVO);
// 校验是否更新正确
ProduceReportChangeRecordDO produceReportChangeRecord = produceReportChangeRecordMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, produceReportChangeRecord);
}
@Test
public void testUpdateProduceReportChangeRecord_notExists() {
// 准备参数
ProduceReportChangeRecordSaveReqVO updateReqVO = randomPojo(ProduceReportChangeRecordSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> produceReportChangeRecordService.updateProduceReportChangeRecord(updateReqVO), PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS);
}
@Test
public void testDeleteProduceReportChangeRecord_success() {
// mock 数据
ProduceReportChangeRecordDO dbProduceReportChangeRecord = randomPojo(ProduceReportChangeRecordDO.class);
produceReportChangeRecordMapper.insert(dbProduceReportChangeRecord);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbProduceReportChangeRecord.getId();
// 调用
produceReportChangeRecordService.deleteProduceReportChangeRecord(id);
// 校验数据不存在了
assertNull(produceReportChangeRecordMapper.selectById(id));
}
@Test
public void testDeleteProduceReportChangeRecord_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> produceReportChangeRecordService.deleteProduceReportChangeRecord(id), PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetProduceReportChangeRecordPage() {
// mock 数据
ProduceReportChangeRecordDO dbProduceReportChangeRecord = randomPojo(ProduceReportChangeRecordDO.class, o -> { // 等会查询到
o.setReportId(null);
o.setChangeType(null);
o.setBeforeChange(null);
o.setAfterChange(null);
o.setCreateTime(null);
});
produceReportChangeRecordMapper.insert(dbProduceReportChangeRecord);
// 测试 reportId 不匹配
produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setReportId(null)));
// 测试 changeType 不匹配
produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setChangeType(null)));
// 测试 beforeChange 不匹配
produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setBeforeChange(null)));
// 测试 afterChange 不匹配
produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setAfterChange(null)));
// 测试 createTime 不匹配
produceReportChangeRecordMapper.insert(cloneIgnoreId(dbProduceReportChangeRecord, o -> o.setCreateTime(null)));
// 准备参数
ProduceReportChangeRecordPageReqVO reqVO = new ProduceReportChangeRecordPageReqVO();
reqVO.setReportId(null);
reqVO.setChangeType(null);
reqVO.setBeforeChange(null);
reqVO.setAfterChange(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<ProduceReportChangeRecordDO> pageResult = produceReportChangeRecordService.getProduceReportChangeRecordPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbProduceReportChangeRecord, pageResult.getList().get(0));
}
}

@ -1,32 +1,26 @@
package cn.iocoder.yudao.module.mes.service.producereport;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.*;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO;
import cn.iocoder.yudao.module.mes.dal.mysql.producereport.ProduceReportDetailMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRODUCE_REPORT_DETAIL_NOT_EXISTS;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link ProduceReportDetailServiceImpl}
@ -180,7 +174,7 @@ public class ProduceReportDetailServiceImplTest extends BaseDbUnitTest {
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<ProduceReportDetailDO> pageResult = produceReportDetailService.getProduceReportDetailPage(reqVO);
PageResult<ProduceReportDetailRespVO> pageResult = produceReportDetailService.getProduceReportDetailPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());

@ -0,0 +1,150 @@
package cn.iocoder.yudao.module.mes.service.workreportplan;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO;
import cn.iocoder.yudao.module.mes.dal.mysql.workreportplan.WorkReportPlanMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* {@link WorkReportPlanServiceImpl}
*
* @author
*/
@Import(WorkReportPlanServiceImpl.class)
public class WorkReportPlanServiceImplTest extends BaseDbUnitTest {
@Resource
private WorkReportPlanServiceImpl workReportPlanService;
@Resource
private WorkReportPlanMapper workReportPlanMapper;
@Test
public void testCreateWorkReportPlan_success() {
// 准备参数
WorkReportPlanSaveReqVO createReqVO = randomPojo(WorkReportPlanSaveReqVO.class).setId(null);
// 调用
Long workReportPlanId = workReportPlanService.createWorkReportPlan(createReqVO);
// 断言
assertNotNull(workReportPlanId);
// 校验记录的属性是否正确
WorkReportPlanDO workReportPlan = workReportPlanMapper.selectById(workReportPlanId);
assertPojoEquals(createReqVO, workReportPlan, "id");
}
@Test
public void testUpdateWorkReportPlan_success() {
// mock 数据
WorkReportPlanDO dbWorkReportPlan = randomPojo(WorkReportPlanDO.class);
workReportPlanMapper.insert(dbWorkReportPlan);// @Sql: 先插入出一条存在的数据
// 准备参数
WorkReportPlanSaveReqVO updateReqVO = randomPojo(WorkReportPlanSaveReqVO.class, o -> {
o.setId(dbWorkReportPlan.getId()); // 设置更新的 ID
});
// 调用
workReportPlanService.updateWorkReportPlan(updateReqVO);
// 校验是否更新正确
WorkReportPlanDO workReportPlan = workReportPlanMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, workReportPlan);
}
@Test
public void testUpdateWorkReportPlan_notExists() {
// 准备参数
WorkReportPlanSaveReqVO updateReqVO = randomPojo(WorkReportPlanSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> workReportPlanService.updateWorkReportPlan(updateReqVO), WORK_REPORT_PLAN_NOT_EXISTS);
}
@Test
public void testDeleteWorkReportPlan_success() {
// mock 数据
WorkReportPlanDO dbWorkReportPlan = randomPojo(WorkReportPlanDO.class);
workReportPlanMapper.insert(dbWorkReportPlan);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbWorkReportPlan.getId();
// 调用
workReportPlanService.deleteWorkReportPlan(id);
// 校验数据不存在了
assertNull(workReportPlanMapper.selectById(id));
}
@Test
public void testDeleteWorkReportPlan_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> workReportPlanService.deleteWorkReportPlan(id), WORK_REPORT_PLAN_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetWorkReportPlanPage() {
// mock 数据
WorkReportPlanDO dbWorkReportPlan = randomPojo(WorkReportPlanDO.class, o -> { // 等会查询到
o.setReportId(null);
o.setPlanId(null);
o.setProductId(null);
o.setQualityNumberPlan(null);
o.setWasteNumberPlan(null);
o.setReportTimePlan(null);
o.setTotalTimePlan(null);
o.setCreateTime(null);
});
workReportPlanMapper.insert(dbWorkReportPlan);
// 测试 reportId 不匹配
workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setReportId(null)));
// 测试 planId 不匹配
workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setPlanId(null)));
// 测试 productId 不匹配
workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setProductId(null)));
// 测试 qualityNumberPlan 不匹配
workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setQualityNumberPlan(null)));
// 测试 wasteNumberPlan 不匹配
workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setWasteNumberPlan(null)));
// 测试 reportTimePlan 不匹配
workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setReportTimePlan(null)));
// 测试 totalTimePlan 不匹配
workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setTotalTimePlan(null)));
// 测试 createTime 不匹配
workReportPlanMapper.insert(cloneIgnoreId(dbWorkReportPlan, o -> o.setCreateTime(null)));
// 准备参数
WorkReportPlanPageReqVO reqVO = new WorkReportPlanPageReqVO();
reqVO.setReportId(null);
reqVO.setPlanId(null);
reqVO.setProductId(null);
reqVO.setQualityNumberPlan(null);
reqVO.setWasteNumberPlan(null);
reqVO.setReportTimePlan(null);
reqVO.setTotalTimePlan(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<WorkReportPlanDO> pageResult = workReportPlanService.getWorkReportPlanPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbWorkReportPlan, pageResult.getList().get(0));
}
}

@ -45,6 +45,8 @@ DELETE FROM "mes_stock_in_detail";
DELETE FROM "mes_org_worker";
DELETE FROM "mes_produce_report_change_record";
DELETE FROM "mes_work_report_plan";

@ -484,3 +484,36 @@ CREATE TABLE IF NOT EXISTS "mes_org_worker"
PRIMARY KEY ("id")
) COMMENT '工位安排表';
CREATE TABLE IF NOT EXISTS "mes_work_report_plan"
(
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
"report_id" bigint,
"plan_id" bigint,
"product_id" bigint,
"quality_number_plan" varchar,
"waste_number_plan" varchar,
"report_time_plan" varchar,
"total_time_plan" varchar,
"creator" varchar DEFAULT '',
"create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" varchar DEFAULT '',
"update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
"deleted" bit NOT NULL DEFAULT FALSE,
"tenant_id" bigint NULL,
PRIMARY KEY ("id")
) COMMENT '报工分配计划';
CREATE TABLE IF NOT EXISTS "mes_produce_report_change_record"
(
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
"report_id" bigint,
"change_type" varchar,
"before_change" varchar,
"after_change" varchar,
"creator" varchar DEFAULT '',
"create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" varchar DEFAULT '',
"update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
"deleted" bit NOT NULL DEFAULT FALSE,
"tenant_id" bigint NULL,
PRIMARY KEY ("id")
) COMMENT '报工变更记录';

Loading…
Cancel
Save