Files
klp-oa/klp-flow/src/main/java/com/klp/flow/controller/SchProdScheduleItemController.java
Joshi c6c77294af feat(schProdScheduleItem): 新增明细下发功能支持逐条明细独立下发
- 在 ISchProdScheduleItemService 中新增 receiveFromDetail 方法接口
- 在 SchProdScheduleItemController 中新增 /receiveFromDetail 接口
- 在 SchProdScheduleItemServiceImpl 中实现明细下发业务逻辑
- 新增 SchProdScheduleItemDispatchBo 数据传输对象
- 支持按明细+工序步骤维度删除重复记录后再重新插入
- 使用明细自身 scheduleDate 作为生产日期确保多天排产准确性
- 实现批量插入排产单明细项功能
2026-07-10 11:15:30 +08:00

161 lines
6.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.flow.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.klp.common.annotation.RepeatSubmit;
import com.klp.common.annotation.Log;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.flow.domain.vo.SchProdScheduleItemVo;
import com.klp.flow.domain.vo.SchProdScheduleItemMergeValidateVo;
import com.klp.flow.domain.bo.SchProdScheduleItemBo;
import com.klp.flow.domain.bo.SchProdScheduleItemMergeBo;
import com.klp.flow.domain.bo.SchProdScheduleItemReceiveBo;
import com.klp.flow.domain.bo.SchProdScheduleItemMergeValidateBo;
import com.klp.flow.domain.bo.SchProdScheduleItemSortBo;
import com.klp.flow.domain.bo.SchProdScheduleItemDispatchBo;
import com.klp.flow.service.ISchProdScheduleItemService;
import com.klp.common.core.page.TableDataInfo;
/**
* 排产单主加明细可合并
*
* @author klp
* @date 2026-06-26
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/flow/prodScheduleItem")
public class SchProdScheduleItemController extends BaseController {
private final ISchProdScheduleItemService iSchProdScheduleItemService;
/**
* 查询排产单主加明细可合并列表
*/
@GetMapping("/list")
public TableDataInfo<SchProdScheduleItemVo> list(SchProdScheduleItemBo bo, PageQuery pageQuery) {
return iSchProdScheduleItemService.queryPageList(bo, pageQuery);
}
/**
* 导出排产单主加明细可合并列表
*/
@Log(title = "排产单主加明细可合并", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SchProdScheduleItemBo bo, HttpServletResponse response) {
List<SchProdScheduleItemVo> list = iSchProdScheduleItemService.queryList(bo);
ExcelUtil.exportExcel(list, "排产单主加明细可合并", SchProdScheduleItemVo.class, response);
}
/**
* 获取排产单主加明细可合并详细信息
*
* @param scheduleId 主键
*/
@GetMapping("/{scheduleId}")
public R<SchProdScheduleItemVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long scheduleId) {
return R.ok(iSchProdScheduleItemService.queryById(scheduleId));
}
/**
* 新增排产单主加明细可合并
*/
@Log(title = "排产单主加明细可合并", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SchProdScheduleItemBo bo) {
return toAjax(iSchProdScheduleItemService.insertByBo(bo));
}
/**
* 批量新增排产单主加明细可合并
*/
@Log(title = "排产单主加明细可合并", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/batch")
public R<Void> addBatch(@Validated(AddGroup.class) @RequestBody List<SchProdScheduleItemBo> boList) {
return toAjax(iSchProdScheduleItemService.insertBatchByBo(boList));
}
/**
* 修改排产单主加明细可合并
*/
@Log(title = "排产单主加明细可合并", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SchProdScheduleItemBo bo) {
return toAjax(iSchProdScheduleItemService.updateByBo(bo));
}
/**
* 删除排产单主加明细可合并
*
* @param scheduleIds 主键串
*/
@Log(title = "排产单主加明细可合并", businessType = BusinessType.DELETE)
@DeleteMapping("/{scheduleIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] scheduleIds) {
return toAjax(iSchProdScheduleItemService.deleteWithValidByIds(Arrays.asList(scheduleIds), true));
}
/**
* 合并排产单主加明细可合并:先删除被合并的记录,再插入合并后的新记录
*/
@Log(title = "排产单主加明细可合并", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/merge")
public R<Void> merge(@Validated @RequestBody SchProdScheduleItemMergeBo mergeBo) {
return toAjax(iSchProdScheduleItemService.mergeByBo(mergeBo));
}
/**
* 接收产需单:从 sch_prod_schedule + sch_prod_schedule_detail 全字段复制到 sch_prod_schedule_item
*/
@Log(title = "排产单主加明细可合并", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/receive")
public R<Void> receive(@Validated @RequestBody SchProdScheduleItemReceiveBo receiveBo) {
return toAjax(iSchProdScheduleItemService.receiveByBo(receiveBo));
}
/**
* 明细下发:逐条从 sch_prod_schedule_detail 下发到 sch_prod_schedule_item
* 生产日期使用明细的 scheduleDate支持一条一条明细独立下发
* 若已下发过(同明细+同工序),先删除旧记录再重新插入
*/
@Log(title = "排产单主加明细可合并", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/receiveFromDetail")
public R<Void> receiveFromDetail(@Validated @RequestBody SchProdScheduleItemDispatchBo dispatchBo) {
return toAjax(iSchProdScheduleItemService.receiveFromDetail(dispatchBo));
}
/**
* 合并校验:检查待合并记录来源产需单的 header 字段是否一致
*/
@PostMapping("/mergeValidate")
public R<SchProdScheduleItemMergeValidateVo> mergeValidate(@Validated @RequestBody SchProdScheduleItemMergeValidateBo validateBo) {
return R.ok(iSchProdScheduleItemService.validateMerge(validateBo));
}
@PostMapping("/sort")
public R<Void> saveSort(@Validated @RequestBody SchProdScheduleItemSortBo sortBo) {
return toAjax(iSchProdScheduleItemService.saveSort(sortBo));
}
}