feat(schProdScheduleItem): 添加排产单主加明细合并功能

- 新增 SchProdScheduleItemMergeBo 合并请求对象
- 在 ISchProdScheduleItemService 中添加 mergeByBo 方法定义
- 在 SchProdScheduleItemController 中添加 merge 接口
- 在 SchProdScheduleItemServiceImpl 中实现合并逻辑
- 支持先删除被合并记录再插入合并后新记录的功能
- 使用事务确保合并操作的数据一致性
This commit is contained in:
2026-06-26 17:49:26 +08:00
parent 6ebae7fb60
commit aefee3debb
4 changed files with 67 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ 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.bo.SchProdScheduleItemBo;
import com.klp.flow.domain.bo.SchProdScheduleItemMergeBo;
import com.klp.flow.service.ISchProdScheduleItemService;
import com.klp.common.core.page.TableDataInfo;
@@ -106,4 +107,14 @@ public class SchProdScheduleItemController extends BaseController {
@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));
}
}

View File

@@ -0,0 +1,29 @@
package com.klp.flow.domain.bo;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* 排产单主加明细可合并 - 合并请求对象
*
* @author klp
* @date 2026-06-26
*/
@Data
public class SchProdScheduleItemMergeBo {
/**
* 需要被合并删除的记录ID列表
*/
@NotEmpty(message = "被合并记录ID不能为空")
private List<Long> ids;
/**
* 合并后的新记录
*/
@Valid
private SchProdScheduleItemBo mergedBo;
}

View File

@@ -3,6 +3,7 @@ package com.klp.flow.service;
import com.klp.flow.domain.SchProdScheduleItem;
import com.klp.flow.domain.vo.SchProdScheduleItemVo;
import com.klp.flow.domain.bo.SchProdScheduleItemBo;
import com.klp.flow.domain.bo.SchProdScheduleItemMergeBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
@@ -51,4 +52,9 @@ public interface ISchProdScheduleItemService {
* 校验并批量删除排产单主加明细可合并信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 合并多条排产单主加明细可合并记录:先删除被合并的记录,再插入合并后的新记录
*/
Boolean mergeByBo(SchProdScheduleItemMergeBo mergeBo);
}

View File

@@ -10,10 +10,12 @@ import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.flow.domain.bo.SchProdScheduleItemBo;
import com.klp.flow.domain.bo.SchProdScheduleItemMergeBo;
import com.klp.flow.domain.vo.SchProdScheduleItemVo;
import com.klp.flow.domain.SchProdScheduleItem;
import com.klp.flow.mapper.SchProdScheduleItemMapper;
import com.klp.flow.service.ISchProdScheduleItemService;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -158,4 +160,23 @@ public class SchProdScheduleItemServiceImpl implements ISchProdScheduleItemServi
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 合并多条排产单主加明细可合并记录:先删除被合并的记录,再插入合并后的新记录
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean mergeByBo(SchProdScheduleItemMergeBo mergeBo) {
// 先删除被合并的记录
baseMapper.deleteBatchIds(mergeBo.getIds());
// 再插入合并后的新记录
SchProdScheduleItemBo mergedBo = mergeBo.getMergedBo();
SchProdScheduleItem add = BeanUtil.toBean(mergedBo, SchProdScheduleItem.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
mergedBo.setScheduleId(add.getScheduleId());
}
return flag;
}
}