diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java index 8f5201ce..f558439b 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java @@ -17,6 +17,9 @@ import com.chanko.yunxi.mes.framework.common.exception.ErrorCode; * 004 订单管理 * 005 发货管理 * 006 工艺设计 + * 007 生产计划 + * 008 采购管理 + * 009 生产管理 * 第三段,3 位,错误码 */ public interface ErrorCodeConstants { @@ -67,4 +70,6 @@ public interface ErrorCodeConstants { ErrorCode MATERIAL_PLAN_DETAIL_NOT_EXISTS = new ErrorCode(1_008_002, "物料需求计划物料详情不存在"); ErrorCode PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_008_003, "采购订单不存在"); ErrorCode PURCHASE_ORDER_MATERIAL_NOT_EXISTS = new ErrorCode(1_008_004, "采购单物料不存在"); + /************生产管理***********/ + ErrorCode TASK_DISPATCH_NOT_EXISTS = new ErrorCode(1_009_001, "派工单不存在"); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java new file mode 100644 index 00000000..42eb73c6 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/TaskDispatchController.java @@ -0,0 +1,106 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; +import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; + +import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; + +import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; +import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetail.TaskDispatchDetailDO; +import com.chanko.yunxi.mes.module.heli.service.taskdispatch.TaskDispatchService; + +@Tag(name = "管理后台 - 派工单") +@RestController +@RequestMapping("/heli/task-dispatch") +@Validated +public class TaskDispatchController { + + @Resource + private TaskDispatchService taskDispatchService; + + @PostMapping("/create") + @Operation(summary = "创建派工单") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:create')") + public CommonResult createTaskDispatch(@Valid @RequestBody TaskDispatchSaveReqVO createReqVO) { + return success(taskDispatchService.createTaskDispatch(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新派工单") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:update')") + public CommonResult updateTaskDispatch(@Valid @RequestBody TaskDispatchSaveReqVO updateReqVO) { + taskDispatchService.updateTaskDispatch(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除派工单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:delete')") + public CommonResult deleteTaskDispatch(@RequestParam("id") Long id) { + taskDispatchService.deleteTaskDispatch(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得派工单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')") + public CommonResult getTaskDispatch(@RequestParam("id") Long id) { + TaskDispatchDO taskDispatch = taskDispatchService.getTaskDispatch(id); + return success(BeanUtils.toBean(taskDispatch, TaskDispatchRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得派工单分页") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')") + public CommonResult> getTaskDispatchPage(@Valid TaskDispatchPageReqVO pageReqVO) { + PageResult pageResult = taskDispatchService.getTaskDispatchPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, TaskDispatchRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出派工单 Excel") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:export')") + @OperateLog(type = EXPORT) + public void exportTaskDispatchExcel(@Valid TaskDispatchPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = taskDispatchService.getTaskDispatchPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "派工单.xls", "数据", TaskDispatchRespVO.class, + BeanUtils.toBean(list, TaskDispatchRespVO.class)); + } + + // ==================== 子表(派工明细) ==================== + + @GetMapping("/task-dispatch-detail/list-by-dispatch-id") + @Operation(summary = "获得派工明细列表") + @Parameter(name = "dispatchId", description = "派工单id") + @PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')") + public CommonResult> getTaskDispatchDetailListByDispatchId(@RequestParam("dispatchId") Long dispatchId) { + return success(taskDispatchService.getTaskDispatchDetailListByDispatchId(dispatchId)); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchPageReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchPageReqVO.java new file mode 100644 index 00000000..b2a088f0 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchPageReqVO.java @@ -0,0 +1,52 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.chanko.yunxi.mes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 派工单分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TaskDispatchPageReqVO extends PageParam { + + @Schema(description = "编号,唯一") + private String code; + + @Schema(description = "派工类型 生产任务|装配任务 PRODUCTION|ASSEMBLE", example = "1") + private String dispatchType; + + @Schema(description = "生产任务id", example = "8538") + private Long taskId; + + @Schema(description = "生产计划id", example = "3259") + private Long planId; + + @Schema(description = "项目id", example = "19610") + private Long projectId; + + @Schema(description = "子项目id", example = "21985") + private Long projectSubId; + + @Schema(description = "bom明细id", example = "15969") + private Long bomDetailId; + + @Schema(description = "派工状态 已保存|已提交|已终止 1|2|3", example = "2") + private Integer dispatchStatus; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "状态,1表示正常,2表示禁用", example = "1") + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchRespVO.java new file mode 100644 index 00000000..f0321c90 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchRespVO.java @@ -0,0 +1,68 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.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 com.chanko.yunxi.mes.framework.excel.core.annotations.DictFormat; +import com.chanko.yunxi.mes.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 派工单 Response VO") +@Data +@ExcelIgnoreUnannotated +public class TaskDispatchRespVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "26723") + @ExcelProperty("自增字段,唯一") + private Long id; + + @Schema(description = "编号,唯一") + @ExcelProperty("编号,唯一") + private String code; + + @Schema(description = "派工类型 生产任务|装配任务 PRODUCTION|ASSEMBLE", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "派工类型 生产任务|装配任务 PRODUCTION|ASSEMBLE", converter = DictConvert.class) + @DictFormat("heli_dispatch_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String dispatchType; + + @Schema(description = "生产任务id", example = "8538") + @ExcelProperty("生产任务id") + private Long taskId; + + @Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3259") + @ExcelProperty("生产计划id") + private Long planId; + + @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19610") + @ExcelProperty("项目id") + private Long projectId; + + @Schema(description = "子项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21985") + @ExcelProperty("子项目id") + private Long projectSubId; + + @Schema(description = "bom明细id", example = "15969") + @ExcelProperty("bom明细id") + private Long bomDetailId; + + @Schema(description = "派工状态 已保存|已提交|已终止 1|2|3", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty(value = "派工状态 已保存|已提交|已终止 1|2|3", converter = DictConvert.class) + @DictFormat("heli_dispatch_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer dispatchStatus; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("状态,1表示正常,2表示禁用") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchSaveReqVO.java new file mode 100644 index 00000000..2b1f773e --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/taskdispatch/vo/TaskDispatchSaveReqVO.java @@ -0,0 +1,56 @@ +package com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetail.TaskDispatchDetailDO; + +@Schema(description = "管理后台 - 派工单新增/修改 Request VO") +@Data +public class TaskDispatchSaveReqVO { + + @Schema(description = "自增字段,唯一", requiredMode = Schema.RequiredMode.REQUIRED, example = "26723") + private Long id; + + @Schema(description = "编号,唯一") + private String code; + + @Schema(description = "派工类型 生产任务|装配任务 PRODUCTION|ASSEMBLE", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "派工类型 生产任务|装配任务 PRODUCTION|ASSEMBLE不能为空") + private String dispatchType; + + @Schema(description = "生产任务id", example = "8538") + private Long taskId; + + @Schema(description = "生产计划id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3259") + @NotNull(message = "生产计划id不能为空") + private Long planId; + + @Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19610") + @NotNull(message = "项目id不能为空") + private Long projectId; + + @Schema(description = "子项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21985") + @NotNull(message = "子项目id不能为空") + private Long projectSubId; + + @Schema(description = "bom明细id", example = "15969") + private Long bomDetailId; + + @Schema(description = "派工状态 已保存|已提交|已终止 1|2|3", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "派工状态 已保存|已提交|已终止 1|2|3不能为空") + private Integer dispatchStatus; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "状态,1表示正常,2表示禁用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态,1表示正常,2表示禁用不能为空") + private Integer status; + + @Schema(description = "派工明细列表") + private List taskDispatchDetails; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDO.java new file mode 100644 index 00000000..75cc0ae1 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDO.java @@ -0,0 +1,75 @@ +package com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO; + +/** + * 派工单 DO + * + * @author 管理员 + */ +@TableName("pro_task_dispatch") +@KeySequence("pro_task_dispatch_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaskDispatchDO extends BaseDO { + + /** + * 自增字段,唯一 + */ + @TableId + private Long id; + /** + * 编号,唯一 + */ + private String code; + /** + * 派工类型 生产任务|装配任务 PRODUCTION|ASSEMBLE + * + * 枚举 {@link TODO heli_dispatch_type 对应的类} + */ + private String dispatchType; + /** + * 生产任务id + */ + private Long taskId; + /** + * 生产计划id + */ + private Long planId; + /** + * 项目id + */ + private Long projectId; + /** + * 子项目id + */ + private Long projectSubId; + /** + * bom明细id + */ + private Long bomDetailId; + /** + * 派工状态 已保存|已提交|已终止 1|2|3 + * + * 枚举 {@link TODO heli_dispatch_status 对应的类} + */ + private Integer dispatchStatus; + /** + * 备注 + */ + private String remark; + /** + * 状态,1表示正常,2表示禁用 + */ + private Integer status; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java new file mode 100644 index 00000000..3d1bc8bb --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/taskdispatch/TaskDispatchDetailDO.java @@ -0,0 +1,64 @@ +package com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetail; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO; + +/** + * 派工明细 DO + * + * @author 管理员 + */ +@TableName("pro_task_dispatch_detail") +@KeySequence("pro_task_dispatch_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaskDispatchDetailDO extends BaseDO { + + /** + * 自增字段,唯一 + */ + @TableId + private Long id; + /** + * 工序id + */ + private Long procedureId; + /** + * 顺序号 + */ + private Integer sort; + /** + * 负责人 + */ + private Long owner; + /** + * 预计工时 + */ + private BigDecimal workTime; + /** + * 派工数量 + */ + private Integer amount; + /** + * 工序要点 + */ + private String summary; + /** + * 状态,1表示正常,2表示禁用 + */ + private Boolean status; + /** + * 派工单id + */ + private Long dispatchId; + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java new file mode 100644 index 00000000..4a824885 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchDetailMapper.java @@ -0,0 +1,28 @@ +package com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatchdetail; + +import java.util.*; + +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetail.TaskDispatchDetailDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 派工明细 Mapper + * + * @author 管理员 + */ +@Mapper +public interface TaskDispatchDetailMapper extends BaseMapperX { + + default List selectListByDispatchId(Long dispatchId) { + return selectList(TaskDispatchDetailDO::getDispatchId, dispatchId); + } + + default int deleteByDispatchId(Long dispatchId) { + return delete(TaskDispatchDetailDO::getDispatchId, dispatchId); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchMapper.java new file mode 100644 index 00000000..c9205f0f --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/taskdispatch/TaskDispatchMapper.java @@ -0,0 +1,36 @@ +package com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch; + +import java.util.*; + +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO; +import org.apache.ibatis.annotations.Mapper; +import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.*; + +/** + * 派工单 Mapper + * + * @author 管理员 + */ +@Mapper +public interface TaskDispatchMapper extends BaseMapperX { + + default PageResult selectPage(TaskDispatchPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(TaskDispatchDO::getCode, reqVO.getCode()) + .eqIfPresent(TaskDispatchDO::getDispatchType, reqVO.getDispatchType()) + .eqIfPresent(TaskDispatchDO::getTaskId, reqVO.getTaskId()) + .eqIfPresent(TaskDispatchDO::getPlanId, reqVO.getPlanId()) + .eqIfPresent(TaskDispatchDO::getProjectId, reqVO.getProjectId()) + .eqIfPresent(TaskDispatchDO::getProjectSubId, reqVO.getProjectSubId()) + .eqIfPresent(TaskDispatchDO::getBomDetailId, reqVO.getBomDetailId()) + .eqIfPresent(TaskDispatchDO::getDispatchStatus, reqVO.getDispatchStatus()) + .eqIfPresent(TaskDispatchDO::getRemark, reqVO.getRemark()) + .eqIfPresent(TaskDispatchDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(TaskDispatchDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(TaskDispatchDO::getId)); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java new file mode 100644 index 00000000..2ca2f48a --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchService.java @@ -0,0 +1,66 @@ +package com.chanko.yunxi.mes.module.heli.service.taskdispatch; + +import java.util.*; +import javax.validation.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetail.TaskDispatchDetailDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; + +/** + * 派工单 Service 接口 + * + * @author 管理员 + */ +public interface TaskDispatchService { + + /** + * 创建派工单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTaskDispatch(@Valid TaskDispatchSaveReqVO createReqVO); + + /** + * 更新派工单 + * + * @param updateReqVO 更新信息 + */ + void updateTaskDispatch(@Valid TaskDispatchSaveReqVO updateReqVO); + + /** + * 删除派工单 + * + * @param id 编号 + */ + void deleteTaskDispatch(Long id); + + /** + * 获得派工单 + * + * @param id 编号 + * @return 派工单 + */ + TaskDispatchDO getTaskDispatch(Long id); + + /** + * 获得派工单分页 + * + * @param pageReqVO 分页查询 + * @return 派工单分页 + */ + PageResult getTaskDispatchPage(TaskDispatchPageReqVO pageReqVO); + + // ==================== 子表(派工明细) ==================== + + /** + * 获得派工明细列表 + * + * @param dispatchId 派工单id + * @return 派工明细列表 + */ + List getTaskDispatchDetailListByDispatchId(Long dispatchId); + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java new file mode 100644 index 00000000..56c0ed3b --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/taskdispatch/TaskDispatchServiceImpl.java @@ -0,0 +1,112 @@ +package com.chanko.yunxi.mes.module.heli.service.taskdispatch; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.*; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatchdetail.TaskDispatchDetailDO; +import com.chanko.yunxi.mes.framework.common.pojo.PageResult; +import com.chanko.yunxi.mes.framework.common.pojo.PageParam; +import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; + +import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatchdetail.TaskDispatchDetailMapper; + +import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; + +/** + * 派工单 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class TaskDispatchServiceImpl implements TaskDispatchService { + + @Resource + private TaskDispatchMapper taskDispatchMapper; + @Resource + private TaskDispatchDetailMapper taskDispatchDetailMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createTaskDispatch(TaskDispatchSaveReqVO createReqVO) { + // 插入 + TaskDispatchDO taskDispatch = BeanUtils.toBean(createReqVO, TaskDispatchDO.class); + taskDispatchMapper.insert(taskDispatch); + + // 插入子表 + createTaskDispatchDetailList(taskDispatch.getId(), createReqVO.getTaskDispatchDetails()); + // 返回 + return taskDispatch.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskDispatch(TaskDispatchSaveReqVO updateReqVO) { + // 校验存在 + validateTaskDispatchExists(updateReqVO.getId()); + // 更新 + TaskDispatchDO updateObj = BeanUtils.toBean(updateReqVO, TaskDispatchDO.class); + taskDispatchMapper.updateById(updateObj); + + // 更新子表 + updateTaskDispatchDetailList(updateReqVO.getId(), updateReqVO.getTaskDispatchDetails()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteTaskDispatch(Long id) { + // 校验存在 + validateTaskDispatchExists(id); + // 删除 + taskDispatchMapper.deleteById(id); + + // 删除子表 + deleteTaskDispatchDetailByDispatchId(id); + } + + private void validateTaskDispatchExists(Long id) { + if (taskDispatchMapper.selectById(id) == null) { + throw exception(TASK_DISPATCH_NOT_EXISTS); + } + } + + @Override + public TaskDispatchDO getTaskDispatch(Long id) { + return taskDispatchMapper.selectById(id); + } + + @Override + public PageResult getTaskDispatchPage(TaskDispatchPageReqVO pageReqVO) { + return taskDispatchMapper.selectPage(pageReqVO); + } + + // ==================== 子表(派工明细) ==================== + + @Override + public List getTaskDispatchDetailListByDispatchId(Long dispatchId) { + return taskDispatchDetailMapper.selectListByDispatchId(dispatchId); + } + + private void createTaskDispatchDetailList(Long dispatchId, List list) { + list.forEach(o -> o.setDispatchId(dispatchId)); + taskDispatchDetailMapper.insertBatch(list); + } + + private void updateTaskDispatchDetailList(Long dispatchId, List list) { + deleteTaskDispatchDetailByDispatchId(dispatchId); + list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 + createTaskDispatchDetailList(dispatchId, list); + } + + private void deleteTaskDispatchDetailByDispatchId(Long dispatchId) { + taskDispatchDetailMapper.deleteByDispatchId(dispatchId); + } + +} \ No newline at end of file diff --git a/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/taskdispatch/TaskDispatchMapper.xml b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/taskdispatch/TaskDispatchMapper.xml new file mode 100644 index 00000000..2318da54 --- /dev/null +++ b/mes-module-heli/mes-module-heli-biz/src/main/resources/mapper/taskdispatch/TaskDispatchMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/taskdispatch/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/taskdispatch/index.ts new file mode 100644 index 00000000..28ce2580 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/taskdispatch/index.ts @@ -0,0 +1,52 @@ +import request from '@/config/axios' + +export interface TaskDispatchVO { + id: number + code: string + dispatchType: string + taskId: number + planId: number + projectId: number + projectSubId: number + bomDetailId: number + dispatchStatus: number + remark: string + status: number +} + +// 查询派工单分页 +export const getTaskDispatchPage = async (params) => { + return await request.get({ url: `/heli/task-dispatch/page`, params }) +} + +// 查询派工单详情 +export const getTaskDispatch = async (id: number) => { + return await request.get({ url: `/heli/task-dispatch/get?id=` + id }) +} + +// 新增派工单 +export const createTaskDispatch = async (data: TaskDispatchVO) => { + return await request.post({ url: `/heli/task-dispatch/create`, data }) +} + +// 修改派工单 +export const updateTaskDispatch = async (data: TaskDispatchVO) => { + return await request.put({ url: `/heli/task-dispatch/update`, data }) +} + +// 删除派工单 +export const deleteTaskDispatch = async (id: number) => { + return await request.delete({ url: `/heli/task-dispatch/delete?id=` + id }) +} + +// 导出派工单 Excel +export const exportTaskDispatch = async (params) => { + return await request.download({ url: `/heli/task-dispatch/export-excel`, params }) +} + +// ==================== 子表(派工明细) ==================== + +// 获得派工明细列表 +export const getTaskDispatchDetailListByDispatchId = async (dispatchId) => { + return await request.get({ url: `/heli/task-dispatch/task-dispatch-detail/list-by-dispatch-id?dispatchId=` + dispatchId }) +} \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/TaskDispatchForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/TaskDispatchForm.vue new file mode 100644 index 00000000..a5334cbe --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/TaskDispatchForm.vue @@ -0,0 +1,176 @@ + + \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/components/TaskDispatchDetailForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/components/TaskDispatchDetailForm.vue new file mode 100644 index 00000000..21f96db8 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/components/TaskDispatchDetailForm.vue @@ -0,0 +1,151 @@ + + \ No newline at end of file diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/index.vue new file mode 100644 index 00000000..a00cbab5 --- /dev/null +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/taskdispatch/index.vue @@ -0,0 +1,307 @@ + + + \ No newline at end of file diff --git a/sql/v1.4.0/1.structure.sql b/sql/v1.4.0/1.structure.sql index 8e28e896..f60f765b 100644 --- a/sql/v1.4.0/1.structure.sql +++ b/sql/v1.4.0/1.structure.sql @@ -38,6 +38,7 @@ CREATE TABLE `pro_task_dispatch` ( DROP TABLE IF EXISTS `pro_task_dispatch_detail`; CREATE TABLE `pro_task_dispatch_detail` ( `id` BIGINT ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '自增字段,唯一', + `dispatch_id` bigint(20) not null comment '派工单id', `procedure_id` BIGINT ( 20 ) NOT NULL COMMENT '工序id', `sort` INT ( 11 ) NOT NULL COMMENT '顺序号', `owner` BIGINT ( 20 ) NOT NULL COMMENT '负责人',