package com.ruoyi.system.controller; import java.util.List; import java.util.Arrays; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.vo.SfcOperationPlanningMainVo; import com.ruoyi.system.domain.bo.SfcOperationPlanningMainBo; import com.ruoyi.system.service.ISfcOperationPlanningMainService; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.system.domain.dto.OperationPlanResultDTO; import com.ruoyi.system.domain.dto.OperationPlanningUpdateOperatorsReq; /** * 工序计划主 * * @author ruoyi * @date 2026-04-10 */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/system/operationPlanningMain") public class SfcOperationPlanningMainController extends BaseController { private final ISfcOperationPlanningMainService iSfcOperationPlanningMainService; /** * 同步工序计划数据 */ @SaCheckPermission("system:operationPlanningMain:sync") @Log(title = "工序计划数据同步", businessType = BusinessType.INSERT) @PostMapping("/sync") public R syncData() { return toAjax(iSfcOperationPlanningMainService.syncOperationPlanning()); } /** * 直接从K3查询工序计划数据(不入库测试) */ @SaCheckPermission("system:operationPlanningMain:queryK3") @GetMapping("/queryFromK3") public R> queryFromK3() { return R.ok(iSfcOperationPlanningMainService.queryFromK3Directly()); } /** * 分页查询工序计划主及明细级联数据 */ @SaCheckPermission("system:operationPlanningMain:list") @GetMapping("/cascadeList") public TableDataInfo cascadeList(SfcOperationPlanningMainBo bo, PageQuery pageQuery) { return iSfcOperationPlanningMainService.queryCascadePageList(bo, pageQuery); } /** * 导出工序进度(按生产令号分 Sheet,过滤已完工/已关闭) */ @SaCheckPermission("system:operationPlanningMain:export") @Log(title = "工序计划进度导出", businessType = BusinessType.EXPORT) @PostMapping("/exportCascadeProgress") public void exportCascadeProgress(SfcOperationPlanningMainBo bo, HttpServletResponse response) { iSfcOperationPlanningMainService.exportCascadeProgress(bo, response); } /** * 项目进度推送:生成进度 Excel,用「信息发送」机器人私发给配置人员。 *

接收人见 dingtalk.info-send-user-ids;机器人 ding9bhxctsmq5jsf8pk。 */ @SaCheckPermission("system:operationPlanningMain:export") @Log(title = "项目进度推送", businessType = BusinessType.OTHER) @PostMapping("/pushCascadeProgress") public R pushCascadeProgress(SfcOperationPlanningMainBo bo) { return iSfcOperationPlanningMainService.pushCascadeProgress(bo); } @SaCheckPermission("system:operationPlanningMain:updateOperators") @Log(title = "工序作业人员/设备更新", businessType = BusinessType.UPDATE) @PutMapping("/updateOperators") public R updateOperators(@Validated @RequestBody OperationPlanningUpdateOperatorsReq req) { return toAjax(iSfcOperationPlanningMainService.updateOperators(req)); } /** * 查询工序计划主列表 */ @SaCheckPermission("system:operationPlanningMain:list") @GetMapping("/list") public TableDataInfo list(SfcOperationPlanningMainBo bo, PageQuery pageQuery) { return iSfcOperationPlanningMainService.queryPageList(bo, pageQuery); } /** * 导出工序计划主列表 */ @SaCheckPermission("system:operationPlanningMain:export") @Log(title = "工序计划主", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(SfcOperationPlanningMainBo bo, HttpServletResponse response) { List list = iSfcOperationPlanningMainService.queryList(bo); ExcelUtil.exportExcel(list, "工序计划主", SfcOperationPlanningMainVo.class, response); } /** * 获取工序计划主详细信息 * * @param id 主键 */ @SaCheckPermission("system:operationPlanningMain:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { return R.ok(iSfcOperationPlanningMainService.queryById(id)); } /** * 新增工序计划主 */ @SaCheckPermission("system:operationPlanningMain:add") @Log(title = "工序计划主", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody SfcOperationPlanningMainBo bo) { return toAjax(iSfcOperationPlanningMainService.insertByBo(bo)); } /** * 修改工序计划主 */ @SaCheckPermission("system:operationPlanningMain:edit") @Log(title = "工序计划主", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody SfcOperationPlanningMainBo bo) { return toAjax(iSfcOperationPlanningMainService.updateByBo(bo)); } /** * 删除工序计划主 * * @param ids 主键串 */ @SaCheckPermission("system:operationPlanningMain:remove") @Log(title = "工序计划主", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { return toAjax(iSfcOperationPlanningMainService.deleteWithValidByIds(Arrays.asList(ids), true)); } }