update 配方信息关联称量、混炼

master
yinq 1 day ago
parent f193b796c4
commit 1da704861c

@ -19,6 +19,7 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.mes.domain.vo.ProdRecipeInfoVo;
import org.dromara.mes.domain.bo.ProdRecipeInfoBo;
import org.dromara.mes.domain.bo.RecipeDetailSaveBo;
import org.dromara.mes.service.IProdRecipeInfoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -108,10 +109,20 @@ public class ProdRecipeInfoController extends BaseController {
/**
* -
*/
@GetMapping("/getProdRecipeInfoList")
public R<List<ProdRecipeInfoVo>> getProdRecipeInfoList(ProdRecipeInfoBo bo) {
List<ProdRecipeInfoVo> list = prodRecipeInfoService.queryList(bo);
return R.ok(list);
}
/**
* ++
*/
@SaCheckPermission("mes:recipeInfo:edit")
@Log(title = "配方明细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/saveDetail")
public R<Void> saveDetail(@Validated @RequestBody RecipeDetailSaveBo bo) {
return toAjax(prodRecipeInfoService.saveDetail(bo));
}
}

@ -29,7 +29,6 @@ public class ProdRecipeMixingBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "配方ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long recipeId;
/**

@ -22,93 +22,78 @@ import java.math.BigDecimal;
public class ProdRecipeWeightBo extends BaseEntity {
/**
*
*
*/
@NotNull(message = "主键标识不能为空", groups = { AddGroup.class, EditGroup.class })
private Long weightId;
/**
* ID
*/
@NotNull(message = "配方ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long recipeId;
/**
*
*/
@NotNull(message = "称量序号不能为空", groups = { AddGroup.class, EditGroup.class })
private Long weightSeq;
/**
* ID
*/
@NotNull(message = "机台ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long machineId;
/**
*
*/
@NotNull(message = "版本号不能为空", groups = { AddGroup.class, EditGroup.class })
private Long edtCode;
/**
*
*/
@NotBlank(message = "称量类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String weightType;
/**
*
*/
@NotNull(message = "秤编码不能为空", groups = { AddGroup.class, EditGroup.class })
private Long scaleCode;
/**
*
*/
@NotBlank(message = "动作编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String actCode;
/**
*
*/
@NotNull(message = "设定重量不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal setWeight;
/**
*
*/
@NotNull(message = "误差允许不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal errorAllow;
/**
*
*/
@NotBlank(message = "父级编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String fatherCode;
/**
*
*/
@NotNull(message = "单位不能为空", groups = { AddGroup.class, EditGroup.class })
private Long unitId;
/**
*
*/
@NotBlank(message = "子级编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String childCode;
private Long childCode;
/**
* 使
*/
@NotBlank(message = "是否使用批次不能为空", groups = { AddGroup.class, EditGroup.class })
private String ifUseBat;
/**
*
*/
@NotBlank(message = "最大比例不能为空", groups = { AddGroup.class, EditGroup.class })
private String maxRate;

@ -0,0 +1,33 @@
package org.dromara.mes.domain.bo;
import lombok.Data;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import java.util.List;
/**
* DTO++
*
* @author system
*/
@Data
public class RecipeDetailSaveBo {
/**
*
*/
@NotNull(message = "配方基本信息不能为空")
@Valid
private ProdRecipeInfoBo recipeInfo;
/**
*
*/
private List<ProdRecipeWeightBo> weightList;
/**
*
*/
private List<ProdRecipeMixingBo> mixingList;
}

@ -3,6 +3,7 @@ package org.dromara.mes.service;
import org.dromara.mes.domain.ProdRecipeInfo;
import org.dromara.mes.domain.vo.ProdRecipeInfoVo;
import org.dromara.mes.domain.bo.ProdRecipeInfoBo;
import org.dromara.mes.domain.bo.RecipeDetailSaveBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -66,4 +67,12 @@ public interface IProdRecipeInfoService {
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* ++
*
* @param bo
* @return
*/
Boolean saveDetail(RecipeDetailSaveBo bo);
}

@ -66,4 +66,12 @@ public interface IProdRecipeMixingService {
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* ID
*
* @param recipeId ID
* @return
*/
Boolean deleteByRecipeId(Long recipeId);
}

@ -66,4 +66,12 @@ public interface IProdRecipeWeightService {
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* ID
*
* @param recipeId ID
* @return
*/
Boolean deleteByRecipeId(Long recipeId);
}

@ -10,15 +10,23 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.dromara.mes.domain.bo.ProdRecipeInfoBo;
import org.dromara.mes.domain.bo.ProdRecipeWeightBo;
import org.dromara.mes.domain.bo.ProdRecipeMixingBo;
import org.dromara.mes.domain.bo.RecipeDetailSaveBo;
import org.dromara.mes.domain.vo.ProdRecipeInfoVo;
import org.dromara.mes.domain.ProdRecipeInfo;
import org.dromara.mes.mapper.ProdRecipeInfoMapper;
import org.dromara.mes.service.IProdRecipeInfoService;
import org.dromara.mes.service.IProdRecipeWeightService;
import org.dromara.mes.service.IProdRecipeMixingService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.ArrayList;
import java.util.stream.Collectors;
/**
* -Service
@ -31,6 +39,8 @@ import java.util.Collection;
public class ProdRecipeInfoServiceImpl implements IProdRecipeInfoService {
private final ProdRecipeInfoMapper baseMapper;
private final IProdRecipeWeightService prodRecipeWeightService;
private final IProdRecipeMixingService prodRecipeMixingService;
/**
* -
@ -75,7 +85,7 @@ public class ProdRecipeInfoServiceImpl implements IProdRecipeInfoService {
.selectAll(ProdRecipeInfo.class)
.eq(bo.getRecipeId() != null, ProdRecipeInfo::getRecipeId, bo.getRecipeId())
.eq(bo.getMachineId() != null, ProdRecipeInfo::getMachineId, bo.getMachineId())
.eq(StringUtils.isNotBlank(bo.getMaterialId()), ProdRecipeInfo::getMaterialId, bo.getMaterialId())
.eq(bo.getMaterialId() != null, ProdRecipeInfo::getMaterialId, bo.getMaterialId())
.eq(bo.getEdtCode() != null, ProdRecipeInfo::getEdtCode, bo.getEdtCode())
.eq(bo.getRecipeType() != null, ProdRecipeInfo::getRecipeType, bo.getRecipeType())
.eq(StringUtils.isNotBlank(bo.getUserEdtCode()), ProdRecipeInfo::getUserEdtCode, bo.getUserEdtCode())
@ -189,4 +199,96 @@ public class ProdRecipeInfoServiceImpl implements IProdRecipeInfoService {
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveDetail(RecipeDetailSaveBo bo) {
ProdRecipeInfoBo recipeInfo = bo.getRecipeInfo();
if (recipeInfo == null || recipeInfo.getRecipeId() == null) {
throw new IllegalArgumentException("配方ID不能为空");
}
Long recipeId = recipeInfo.getRecipeId();
// 1. 更新配方基本信息
updateByBo(recipeInfo);
// 2. 称量信息:有主键则更新,无主键则插入;删除提交列表中已不存在的原记录
List<ProdRecipeWeightBo> weightList = bo.getWeightList() != null ? bo.getWeightList() : new ArrayList<>();
List<Long> submittedWeightIds = weightList.stream()
.map(ProdRecipeWeightBo::getWeightId)
.filter(id -> id != null)
.collect(Collectors.toList());
ProdRecipeWeightBo weightQuery = new ProdRecipeWeightBo();
weightQuery.setRecipeId(recipeId);
List<Long> existingWeightIds = prodRecipeWeightService.queryList(weightQuery).stream()
.map(vo -> vo.getWeightId())
.collect(Collectors.toList());
List<Long> weightIdsToDelete = existingWeightIds.stream()
.filter(id -> !submittedWeightIds.contains(id))
.collect(Collectors.toList());
if (!weightIdsToDelete.isEmpty()) {
prodRecipeWeightService.deleteWithValidByIds(weightIdsToDelete, false);
}
int weightSeq = 0;
for (ProdRecipeWeightBo w : weightList) {
if (w.getSetWeight() == null && StringUtils.isBlank(w.getActCode()) && StringUtils.isNull(w.getChildCode())) {
continue;
}
weightSeq++;
w.setRecipeId(recipeId);
if (w.getMachineId() == null) {
w.setMachineId(recipeInfo.getMachineId());
}
if (w.getEdtCode() == null) {
w.setEdtCode(recipeInfo.getEdtCode());
}
w.setWeightSeq((long) weightSeq);
if (w.getWeightId() != null) {
prodRecipeWeightService.updateByBo(w);
} else {
w.setWeightId(null);
prodRecipeWeightService.insertByBo(w);
}
}
// 3. 混炼信息:有主键则更新,无主键则插入;删除提交列表中已不存在的原记录
List<ProdRecipeMixingBo> mixingList = bo.getMixingList() != null ? bo.getMixingList() : new ArrayList<>();
List<Long> submittedMixingIds = mixingList.stream()
.map(ProdRecipeMixingBo::getMixingId)
.filter(id -> id != null)
.collect(Collectors.toList());
ProdRecipeMixingBo mixingQuery = new ProdRecipeMixingBo();
mixingQuery.setRecipeId(recipeId);
List<Long> existingMixingIds = prodRecipeMixingService.queryList(mixingQuery).stream()
.map(vo -> vo.getMixingId())
.collect(Collectors.toList());
List<Long> mixingIdsToDelete = existingMixingIds.stream()
.filter(id -> !submittedMixingIds.contains(id))
.collect(Collectors.toList());
if (!mixingIdsToDelete.isEmpty()) {
prodRecipeMixingService.deleteWithValidByIds(mixingIdsToDelete, false);
}
int mixSeq = 0;
for (ProdRecipeMixingBo m : mixingList) {
if (StringUtils.isBlank(m.getActCode()) && m.getSetTime() == null && m.getSetTemp() == null) {
continue;
}
mixSeq++;
m.setRecipeId(recipeId);
if (m.getMachineId() == null) {
m.setMachineId(recipeInfo.getMachineId());
}
if (m.getEdtCode() == null) {
m.setEdtCode(recipeInfo.getEdtCode());
}
m.setMixId((long) mixSeq);
if (m.getMixingId() != null) {
prodRecipeMixingService.updateByBo(m);
} else {
m.setMixingId(null);
prodRecipeMixingService.insertByBo(m);
}
}
return true;
}
}

@ -150,4 +150,9 @@ public class ProdRecipeMixingServiceImpl implements IProdRecipeMixingService {
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public Boolean deleteByRecipeId(Long recipeId) {
return baseMapper.delete(Wrappers.<ProdRecipeMixing>lambdaQuery().eq(ProdRecipeMixing::getRecipeId, recipeId)) > 0;
}
}

@ -85,7 +85,7 @@ public class ProdRecipeWeightServiceImpl implements IProdRecipeWeightService {
.eq(bo.getErrorAllow() != null, ProdRecipeWeight::getErrorAllow, bo.getErrorAllow())
.eq(StringUtils.isNotBlank(bo.getFatherCode()), ProdRecipeWeight::getFatherCode, bo.getFatherCode())
.eq(bo.getUnitId() != null, ProdRecipeWeight::getUnitId, bo.getUnitId())
.eq(StringUtils.isNotBlank(bo.getChildCode()), ProdRecipeWeight::getChildCode, bo.getChildCode())
.eq(bo.getChildCode() != null, ProdRecipeWeight::getChildCode, bo.getChildCode())
.eq(StringUtils.isNotBlank(bo.getIfUseBat()), ProdRecipeWeight::getIfUseBat, bo.getIfUseBat())
.eq(StringUtils.isNotBlank(bo.getMaxRate()), ProdRecipeWeight::getMaxRate, bo.getMaxRate())
.orderByDesc(ProdRecipeWeight::getCreateTime);
@ -143,4 +143,9 @@ public class ProdRecipeWeightServiceImpl implements IProdRecipeWeightService {
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public Boolean deleteByRecipeId(Long recipeId) {
return baseMapper.delete(Wrappers.<ProdRecipeWeight>lambdaQuery().eq(ProdRecipeWeight::getRecipeId, recipeId)) > 0;
}
}

Loading…
Cancel
Save