Browse Source

2026-03-09

配方BOM增加反向同步
master
fengyuan_yang 1 month ago
parent
commit
a295e49a01
  1. 32
      src/main/java/com/spring/ifs/bean/RecipeServiceBean.java
  2. 11
      src/main/java/com/spring/modules/part/controller/RecipeManagementController.java
  3. 9
      src/main/java/com/spring/modules/part/entity/APIEntity/RecipeIfsAlternative.java
  4. 2
      src/main/java/com/spring/modules/part/service/RecipeManagementService.java
  5. 73
      src/main/java/com/spring/modules/part/service/impl/RecipeManagementServiceImpl.java

32
src/main/java/com/spring/ifs/bean/RecipeServiceBean.java

@ -213,6 +213,7 @@ public class RecipeServiceBean {
//设置ifs 信息 //设置ifs 信息
inData.setIfsRowId(alternativeMap.get("IFSROWID")); inData.setIfsRowId(alternativeMap.get("IFSROWID"));
inData.setIfsRowVersion(alternativeMap.get("IFSROWVERSION")); inData.setIfsRowVersion(alternativeMap.get("IFSROWVERSION"));
inData.setState(alternativeMap.get("STATE"));
returnMap.put("resultCode", "200"); returnMap.put("resultCode", "200");
returnMap.put("obj", JSON.toJSONString(inData)); returnMap.put("obj", JSON.toJSONString(inData));
} catch(APException e){ } catch(APException e){
@ -679,6 +680,37 @@ public class RecipeServiceBean {
return returnMap; return returnMap;
} }
/**
* @description: 查询某个替代下的所有Recipe Item用于反向同步
* @author
* @date
* @version 1.0
*/
public Map<String, String> getRecipeItemsForSync(Server srv, RecipeIfsItem inData) {
Map<String, String> returnMap = new HashMap<>();
String contract = inData.getContract();
String partNo = inData.getPartNo();
String engChgLevel = inData.getEngChgLevel();
String bomType = inData.getBomType();
String alternativeNo = inData.getAlternativeNo();
try {
Map<String, String> alternativeMap = RecipeApi.getRecipeAlternative(srv, contract, partNo, engChgLevel, bomType, alternativeNo);
if (alternativeMap == null || alternativeMap.isEmpty()) {
throw new APException("Recipe Alternative不存在!");
}
List<RecipeIfsItem> resultList = RecipeApi.getRecipeItems(srv, contract, partNo, engChgLevel, bomType, alternativeNo, null);
logger.info("Recipe替代明细返回结果:" + JSON.toJSONString(resultList));
returnMap.put("resultCode", "200");
returnMap.put("obj", JSON.toJSONString(resultList));
} catch (APException e) {
returnMap.put("resultCode", "400");
returnMap.put("resultMsg", e.getMessage());
logger.info("异常信息:" + e.getMessage());
}
logger.info("Recipe反向同步明细集合结束:" + JSON.toJSONString(inData));
return returnMap;
}
/** /**
* @description: 单个删除的方法 * @description: 单个删除的方法
* @author LR * @author LR

11
src/main/java/com/spring/modules/part/controller/RecipeManagementController.java

@ -399,5 +399,16 @@ public class RecipeManagementController {
return R.ok().put("rows", list); return R.ok().put("rows", list);
} }
/**
* 反向同步替代下的数据 IFS->PLM
* @param data
* @return
*/
@PostMapping(value="/syncRecipeInfoIfsToPlm")
@ResponseBody
public R syncRecipeInfoIfsToPlm(@RequestBody RecipeDetailVo data) {
Map<String, Object> map = recipeManagementService.syncRecipeInfoIfsToPlm(data);
return R.ok().put("rows", map);
}
} }

9
src/main/java/com/spring/modules/part/entity/APIEntity/RecipeIfsAlternative.java

@ -20,6 +20,7 @@ public class RecipeIfsAlternative {
private String displayVolumeUom; // 体积 private String displayVolumeUom; // 体积
private String regUnit; private String regUnit;
private String stdSizeKg;// LR 查询返回的字段 private String stdSizeKg;// LR 查询返回的字段
private String state; // 替代状态
private List<RecipeIfsItem> recipeIfsItems; private List<RecipeIfsItem> recipeIfsItems;
private String ifsUsername;// private String ifsUsername;//
private String ifsPassword;// private String ifsPassword;//
@ -149,6 +150,14 @@ public class RecipeIfsAlternative {
this.stdSizeKg = stdSizeKg; this.stdSizeKg = stdSizeKg;
} }
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getIfsPassword() { public String getIfsPassword() {
return ifsPassword; return ifsPassword;
} }

2
src/main/java/com/spring/modules/part/service/RecipeManagementService.java

@ -71,4 +71,6 @@ public interface RecipeManagementService {
List<RecipeComponentVo> queryComponentPartRecipeList(RecipeComponentVo data); List<RecipeComponentVo> queryComponentPartRecipeList(RecipeComponentVo data);
PageUtils recipeManagementSearchAny(QuerySavedVo data); PageUtils recipeManagementSearchAny(QuerySavedVo data);
Map<String, Object> syncRecipeInfoIfsToPlm(RecipeDetailVo data);
} }

73
src/main/java/com/spring/modules/part/service/impl/RecipeManagementServiceImpl.java

@ -1,5 +1,7 @@
package com.spring.modules.part.service.impl; package com.spring.modules.part.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -1319,4 +1321,75 @@ public class RecipeManagementServiceImpl extends ServiceImpl<RecipeManagementMap
IPage<RecipeHeaderVo> resultList = recipeManagementMapper.recipeManagementSearchAny(new Page<RecipeHeaderVo>(data.getNo(), data.getSize()), params); IPage<RecipeHeaderVo> resultList = recipeManagementMapper.recipeManagementSearchAny(new Page<RecipeHeaderVo>(data.getNo(), data.getSize()), params);
return new PageUtils(resultList); return new PageUtils(resultList);
} }
// 反向同步替代下的数据 IFS->PLM
@Override
@Transactional
public Map<String, Object> syncRecipeInfoIfsToPlm(RecipeDetailVo data) {
Server srv = getIfsServer(data.getUpdateBy());
// 更新Recipe替代的状态
RecipeIfsAlternative recipeIfsAlternative = new RecipeIfsAlternative();
recipeIfsAlternative.setContract(data.getSite());
recipeIfsAlternative.setPartNo(data.getPartNo());
recipeIfsAlternative.setEngChgLevel(data.getEngChgLevel().toString());
recipeIfsAlternative.setBomType(data.getBomType());
recipeIfsAlternative.setAlternativeNo(data.getAlternativeNo());
Map<String, String> getAlternativeResponse = recipeServiceBean.getRecipeAlternative(srv, recipeIfsAlternative);
if ("200".equals(getAlternativeResponse.get("resultCode"))) {
RecipeIfsAlternative ifsAlternative = JSON.parseObject(getAlternativeResponse.get("obj"), RecipeIfsAlternative.class);
if (ifsAlternative != null) {
data.setStatus(ifsAlternative.getState());
recipeManagementMapper.updateAlternativeStatus(data);
}
}
// 根据替代删除PLM的Recipe子明细
RecipeAllFieldEntity recipeAllField = new RecipeAllFieldEntity();
BeanUtils.copyProperties(data, recipeAllField);
recipeManagementMapper.deleteRecipeComponent(recipeAllField);
// 根据替代获取IFS的Recipe子物料
RecipeIfsItem recipeIfsItem = new RecipeIfsItem();
recipeIfsItem.setContract(data.getSite());
recipeIfsItem.setPartNo(data.getPartNo());
recipeIfsItem.setEngChgLevel(data.getEngChgLevel().toString());
recipeIfsItem.setBomType(data.getBomType());
recipeIfsItem.setAlternativeNo(data.getAlternativeNo());
Map<String, String> getRecipeItemsResponse = recipeServiceBean.getRecipeItemsForSync(srv, recipeIfsItem);
if (!"200".equals(getRecipeItemsResponse.get("resultCode"))) {
throw new RuntimeException("IFS Recipe子物料查询异常:" + getRecipeItemsResponse.get("resultMsg"));
}
String items = String.valueOf(getRecipeItemsResponse.get("obj"));
List<RecipeIfsItem> ifsItems = JSON.parseArray(items, RecipeIfsItem.class);
for (RecipeIfsItem ifsItem : ifsItems) {
RecipeComponentEntity plmItem = new RecipeComponentEntity();
plmItem.setSite(ifsItem.getContract());
plmItem.setPartNo(ifsItem.getPartNo());
plmItem.setEngChgLevel(Integer.valueOf(ifsItem.getEngChgLevel()));
plmItem.setBomType(ifsItem.getBomType());
plmItem.setAlternativeNo(ifsItem.getAlternativeNo());
plmItem.setComponentPart(ifsItem.getComponentPart());
plmItem.setLineItemNo(StringUtils.isEmpty(ifsItem.getLineItemNo()) ? null : Integer.valueOf(ifsItem.getLineItemNo()));
plmItem.setPrintUnit(ifsItem.getPrintUnit());
plmItem.setQtyPerAssembly(StringUtils.isEmpty(ifsItem.getQtyPerAssembly()) ? null : new BigDecimal(ifsItem.getQtyPerAssembly()));
plmItem.setComponentScrap(StringUtils.isEmpty(ifsItem.getComponentScrap()) ? null : new BigDecimal(ifsItem.getComponentScrap()));
plmItem.setShrinkageFactor(StringUtils.isEmpty(ifsItem.getShrinkageFactor()) ? null : new BigDecimal(ifsItem.getShrinkageFactor()));
plmItem.setIssueType(ifsItem.getIssueType());
plmItem.setIssueToLoc("");
plmItem.setOperationNo(StringUtils.isEmpty(ifsItem.getOperationNo()) ? null : Integer.valueOf(ifsItem.getOperationNo()));
plmItem.setNoteText(ifsItem.getNoteText());
plmItem.setLineSequence(StringUtils.isEmpty(ifsItem.getLineSequence()) ? null : Integer.valueOf(ifsItem.getLineSequence()));
plmItem.setConsumptionItem(ifsItem.getConsumptionItem());
plmItem.setPartsByWeight(StringUtils.isEmpty(ifsItem.getPartsByWeight()) ? null : new BigDecimal(ifsItem.getPartsByWeight()));
plmItem.setWeightShare(StringUtils.isEmpty(ifsItem.getWeightShare()) ? null : new BigDecimal(ifsItem.getWeightShare()));
plmItem.setCreateBy(data.getUpdateBy());
recipeManagementMapper.saveRecipeComponent(plmItem);
}
HashMap<String, Object> map = new HashMap<>();
RecipeDetailEntity recipeAlternative = recipeManagementMapper.queryDetailDataByNo(data);
map.put("detailData", recipeAlternative);
return map;
}
} }
Loading…
Cancel
Save