更新混炼示方功能,优化胶料信息同步逻辑,新增胶料字段复制机制,提升胶料生成与更新的准确性与一致性。
This commit is contained in:
@@ -773,7 +773,7 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
|
||||
//update-begin---author:cursor ---date:20260601 for:【XSLMES-20260601-A62】生成混炼示方改为同步B/F段胶至胶料信息-----------
|
||||
/**
|
||||
* 生成混炼示方时,将 B 段/F 段胶料同步写入「胶料信息」(mes_material):
|
||||
* 胶料类别取配合示方所选「胶料代号」对应胶料的类别;不再写入密炼物料,也不再维护比重。
|
||||
* 除 ERP 编号留空、编码/名称为示方编号外,其余字段按配合示方所选原胶料信息赋值。
|
||||
*/
|
||||
private void syncGeneratedRubberMixerMaterial(
|
||||
MesXslFormulaMixingGenerateRowVO row,
|
||||
@@ -785,60 +785,128 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
|
||||
}
|
||||
String specCode = row.getSpecCode().trim();
|
||||
boolean isFinalStage = "Q".equalsIgnoreCase(resolveMixingMaterialStep(row));
|
||||
String categoryId = resolveGeneratedRubberCategoryId(formula);
|
||||
String rubberName = resolveRubberName(formula);
|
||||
MesMaterial sourceRubber = resolveSourceRubberMaterial(formula);
|
||||
MesMaterial existing = findRubberMaterialByCodeOrName(specCode);
|
||||
Date now = new Date();
|
||||
if (existing != null) {
|
||||
if (StringUtils.isNotBlank(categoryId)) {
|
||||
existing.setCategoryId(categoryId);
|
||||
//update-begin---author:cursor ---date:20260601 for:【XSLMES-20260601-A62】更新已生成胶料时按原胶料复制字段-----------
|
||||
if (sourceRubber != null) {
|
||||
fillGeneratedRubberFromSource(existing, sourceRubber, specCode, now, true);
|
||||
} else {
|
||||
applyGeneratedRubberFallback(existing, formula, specCode, now);
|
||||
}
|
||||
if (StringUtils.isBlank(existing.getMaterialCode())) {
|
||||
existing.setMaterialCode(specCode);
|
||||
}
|
||||
if (StringUtils.isBlank(existing.getMaterialName())) {
|
||||
existing.setMaterialName(specCode);
|
||||
}
|
||||
if (StringUtils.isBlank(existing.getAliasName()) && StringUtils.isNotBlank(rubberName)) {
|
||||
existing.setAliasName(rubberName);
|
||||
}
|
||||
existing.setEnableFlag(existing.getEnableFlag() == null ? 1 : existing.getEnableFlag());
|
||||
existing.setUpdateTime(now);
|
||||
//update-end---author:cursor ---date:20260601 for:【XSLMES-20260601-A62】更新已生成胶料时按原胶料复制字段-----------
|
||||
mesMaterialService.updateById(existing);
|
||||
log.info(
|
||||
"[混炼示方生成] 更新胶料信息 id={}, code={}, categoryId={}, isFinal={}",
|
||||
"[混炼示方生成] 更新胶料信息 id={}, code={}, sourceId={}, isFinal={}",
|
||||
existing.getId(),
|
||||
specCode,
|
||||
categoryId,
|
||||
sourceRubber != null ? sourceRubber.getId() : null,
|
||||
isFinalStage);
|
||||
return;
|
||||
}
|
||||
|
||||
MesMaterial material = new MesMaterial();
|
||||
material.setMaterialCode(specCode);
|
||||
material.setMaterialName(specCode);
|
||||
material.setAliasName(StringUtils.isNotBlank(rubberName) ? rubberName : null);
|
||||
material.setCategoryId(categoryId);
|
||||
material.setEnableFlag(1);
|
||||
material.setIsSpecialRubber(0);
|
||||
material.setDelFlag(CommonConstant.DEL_FLAG_0);
|
||||
material.setCreateTime(now);
|
||||
material.setUpdateTime(now);
|
||||
//update-begin---author:cursor ---date:20260601 for:【XSLMES-20260601-A62】新增B/F段胶料按原胶料复制字段-----------
|
||||
if (sourceRubber != null) {
|
||||
fillGeneratedRubberFromSource(material, sourceRubber, specCode, now, false);
|
||||
} else {
|
||||
applyGeneratedRubberFallback(material, formula, specCode, now);
|
||||
}
|
||||
//update-end---author:cursor ---date:20260601 for:【XSLMES-20260601-A62】新增B/F段胶料按原胶料复制字段-----------
|
||||
mesMaterialService.save(material);
|
||||
log.info(
|
||||
"[混炼示方生成] 新增胶料信息 id={}, code={}, categoryId={}, isFinal={}",
|
||||
"[混炼示方生成] 新增胶料信息 id={}, code={}, sourceId={}, isFinal={}",
|
||||
material.getId(),
|
||||
specCode,
|
||||
categoryId,
|
||||
sourceRubber != null ? sourceRubber.getId() : null,
|
||||
isFinalStage);
|
||||
}
|
||||
|
||||
/** 生成的 B/F 段胶料类别:取配合示方所选「胶料代号」对应胶料(mes_material)的类别 */
|
||||
private String resolveGeneratedRubberCategoryId(MesXslFormulaSpec formula) {
|
||||
/** 配合示方所选「胶料代号」对应的原胶料信息 */
|
||||
private MesMaterial resolveSourceRubberMaterial(MesXslFormulaSpec formula) {
|
||||
if (formula == null || StringUtils.isBlank(formula.getRubberMaterialId())) {
|
||||
return null;
|
||||
}
|
||||
MesMaterial rubber = mesMaterialService.getById(formula.getRubberMaterialId());
|
||||
if (rubber == null) {
|
||||
return null;
|
||||
}
|
||||
if (rubber.getDelFlag() != null && rubber.getDelFlag().equals(CommonConstant.DEL_FLAG_1)) {
|
||||
return null;
|
||||
}
|
||||
return rubber;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将原胶料字段复制到生成的 B/F 段胶料:编码/名称=示方编号,ERP 编号留空,不复制主键与审计字段。
|
||||
*/
|
||||
private void fillGeneratedRubberFromSource(
|
||||
MesMaterial target, MesMaterial source, String specCode, Date now, boolean isUpdate) {
|
||||
if (target == null || source == null || StringUtils.isBlank(specCode)) {
|
||||
return;
|
||||
}
|
||||
String code = specCode.trim();
|
||||
target.setMaterialCode(code);
|
||||
target.setMaterialName(code);
|
||||
target.setAliasName(source.getAliasName());
|
||||
target.setShortName(source.getShortName());
|
||||
target.setCategoryId(source.getCategoryId());
|
||||
target.setMaterialGrade(source.getMaterialGrade());
|
||||
target.setPlanPrice(source.getPlanPrice());
|
||||
target.setMinStock(source.getMinStock());
|
||||
target.setMaxStock(source.getMaxStock());
|
||||
target.setBaseUnitId(source.getBaseUnitId());
|
||||
target.setStatUnitId(source.getStatUnitId());
|
||||
target.setUnitConvertRate(source.getUnitConvertRate());
|
||||
target.setErpCode(null);
|
||||
target.setFinalShelfLifeDays(source.getFinalShelfLifeDays());
|
||||
target.setMasterShelfLifeDays(source.getMasterShelfLifeDays());
|
||||
target.setMinStandingHours(source.getMinStandingHours());
|
||||
target.setStandardCode(source.getStandardCode());
|
||||
target.setOriginPlace(source.getOriginPlace());
|
||||
target.setSupplierId(source.getSupplierId());
|
||||
target.setCustomerId(source.getCustomerId());
|
||||
target.setEnableFlag(source.getEnableFlag() != null ? source.getEnableFlag() : 1);
|
||||
target.setIsSpecialRubber(source.getIsSpecialRubber() != null ? source.getIsSpecialRubber() : 0);
|
||||
target.setSyncFromErpFlag(0);
|
||||
target.setLastErpSyncTime(null);
|
||||
target.setRemark(source.getRemark());
|
||||
target.setTenantId(source.getTenantId());
|
||||
target.setSysOrgCode(source.getSysOrgCode());
|
||||
target.setUpdateTime(now);
|
||||
if (!isUpdate) {
|
||||
target.setDelFlag(CommonConstant.DEL_FLAG_0);
|
||||
target.setCreateTime(now);
|
||||
}
|
||||
}
|
||||
|
||||
/** 未选择原胶料时的最小兜底(仅类别/状态) */
|
||||
private void applyGeneratedRubberFallback(MesMaterial target, MesXslFormulaSpec formula, String specCode, Date now) {
|
||||
if (target == null || StringUtils.isBlank(specCode)) {
|
||||
return;
|
||||
}
|
||||
String code = specCode.trim();
|
||||
target.setMaterialCode(code);
|
||||
target.setMaterialName(code);
|
||||
target.setCategoryId(resolveGeneratedRubberCategoryId(formula));
|
||||
String rubberName = resolveRubberName(formula);
|
||||
if (StringUtils.isNotBlank(rubberName)) {
|
||||
target.setAliasName(rubberName);
|
||||
}
|
||||
target.setErpCode(null);
|
||||
target.setEnableFlag(target.getEnableFlag() != null ? target.getEnableFlag() : 1);
|
||||
target.setIsSpecialRubber(target.getIsSpecialRubber() != null ? target.getIsSpecialRubber() : 0);
|
||||
target.setDelFlag(target.getDelFlag() != null ? target.getDelFlag() : CommonConstant.DEL_FLAG_0);
|
||||
target.setUpdateTime(now);
|
||||
if (target.getCreateTime() == null) {
|
||||
target.setCreateTime(now);
|
||||
}
|
||||
}
|
||||
|
||||
/** 生成的 B/F 段胶料类别:取配合示方所选「胶料代号」对应胶料(mes_material)的类别 */
|
||||
private String resolveGeneratedRubberCategoryId(MesXslFormulaSpec formula) {
|
||||
MesMaterial rubber = resolveSourceRubberMaterial(formula);
|
||||
return rubber != null ? rubber.getCategoryId() : null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user