diff --git a/src/main/java/com/spring/ifs/bean/RecipeServiceBean.java b/src/main/java/com/spring/ifs/bean/RecipeServiceBean.java index ed5e58d5..4cb55a01 100644 --- a/src/main/java/com/spring/ifs/bean/RecipeServiceBean.java +++ b/src/main/java/com/spring/ifs/bean/RecipeServiceBean.java @@ -213,6 +213,7 @@ public class RecipeServiceBean { //设置ifs 信息 inData.setIfsRowId(alternativeMap.get("IFSROWID")); inData.setIfsRowVersion(alternativeMap.get("IFSROWVERSION")); + inData.setState(alternativeMap.get("STATE")); returnMap.put("resultCode", "200"); returnMap.put("obj", JSON.toJSONString(inData)); } catch(APException e){ @@ -679,6 +680,37 @@ public class RecipeServiceBean { return returnMap; } + /** + * @description: 查询某个替代下的所有Recipe Item(用于反向同步) + * @author + * @date + * @version 1.0 + */ + public Map getRecipeItemsForSync(Server srv, RecipeIfsItem inData) { + Map 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 alternativeMap = RecipeApi.getRecipeAlternative(srv, contract, partNo, engChgLevel, bomType, alternativeNo); + if (alternativeMap == null || alternativeMap.isEmpty()) { + throw new APException("Recipe Alternative不存在!"); + } + List 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: 单个删除的方法 * @author LR diff --git a/src/main/java/com/spring/modules/part/controller/RecipeManagementController.java b/src/main/java/com/spring/modules/part/controller/RecipeManagementController.java index 18841bf8..6b24d5d5 100644 --- a/src/main/java/com/spring/modules/part/controller/RecipeManagementController.java +++ b/src/main/java/com/spring/modules/part/controller/RecipeManagementController.java @@ -399,5 +399,16 @@ public class RecipeManagementController { return R.ok().put("rows", list); } + /** + * 反向同步替代下的数据 IFS->PLM + * @param data + * @return + */ + @PostMapping(value="/syncRecipeInfoIfsToPlm") + @ResponseBody + public R syncRecipeInfoIfsToPlm(@RequestBody RecipeDetailVo data) { + Map map = recipeManagementService.syncRecipeInfoIfsToPlm(data); + return R.ok().put("rows", map); + } } diff --git a/src/main/java/com/spring/modules/part/entity/APIEntity/RecipeIfsAlternative.java b/src/main/java/com/spring/modules/part/entity/APIEntity/RecipeIfsAlternative.java index 9a4d4001..adc4304d 100644 --- a/src/main/java/com/spring/modules/part/entity/APIEntity/RecipeIfsAlternative.java +++ b/src/main/java/com/spring/modules/part/entity/APIEntity/RecipeIfsAlternative.java @@ -20,6 +20,7 @@ public class RecipeIfsAlternative { private String displayVolumeUom; // 体积 private String regUnit; private String stdSizeKg;// LR 查询返回的字段 + private String state; // 替代状态 private List recipeIfsItems; private String ifsUsername;// private String ifsPassword;// @@ -149,6 +150,14 @@ public class RecipeIfsAlternative { this.stdSizeKg = stdSizeKg; } + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + public String getIfsPassword() { return ifsPassword; } diff --git a/src/main/java/com/spring/modules/part/service/RecipeManagementService.java b/src/main/java/com/spring/modules/part/service/RecipeManagementService.java index e984e423..1724ce28 100644 --- a/src/main/java/com/spring/modules/part/service/RecipeManagementService.java +++ b/src/main/java/com/spring/modules/part/service/RecipeManagementService.java @@ -71,4 +71,6 @@ public interface RecipeManagementService { List queryComponentPartRecipeList(RecipeComponentVo data); PageUtils recipeManagementSearchAny(QuerySavedVo data); + + Map syncRecipeInfoIfsToPlm(RecipeDetailVo data); } diff --git a/src/main/java/com/spring/modules/part/service/impl/RecipeManagementServiceImpl.java b/src/main/java/com/spring/modules/part/service/impl/RecipeManagementServiceImpl.java index 0ac4f937..a92088bf 100644 --- a/src/main/java/com/spring/modules/part/service/impl/RecipeManagementServiceImpl.java +++ b/src/main/java/com/spring/modules/part/service/impl/RecipeManagementServiceImpl.java @@ -1,5 +1,7 @@ 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.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -1319,4 +1321,75 @@ public class RecipeManagementServiceImpl extends ServiceImpl resultList = recipeManagementMapper.recipeManagementSearchAny(new Page(data.getNo(), data.getSize()), params); return new PageUtils(resultList); } + + // 反向同步替代下的数据 IFS->PLM + @Override + @Transactional + public Map 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 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 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 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 map = new HashMap<>(); + RecipeDetailEntity recipeAlternative = recipeManagementMapper.queryDetailDataByNo(data); + map.put("detailData", recipeAlternative); + return map; + } }