From 3905ac75bd6de94ebb1f10ebee1d09ac8841097e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Fri, 21 Jun 2024 15:43:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=AD=E7=B1=BB=E3=80=81=E5=B0=8F?= =?UTF-8?q?=E7=B1=BB=E3=80=81=E7=BB=86=E5=88=86=E7=B1=BB=EF=BC=88=E8=8B=A5?= =?UTF-8?q?=E6=9C=89=EF=BC=89=EF=BC=8C=E5=88=86=E7=B1=BB=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=92=8C=E5=90=8D=E7=A7=B0=E9=83=BD=E4=BC=A0=E7=BB=99OA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bomnew/service/MaterialService.java | 153 ++++++++++-------- 1 file changed, 88 insertions(+), 65 deletions(-) diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java index a6d01d1e..76bdab55 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/MaterialService.java @@ -18,6 +18,7 @@ import com.nflg.product.bomnew.config.NacosConfig; import com.nflg.product.bomnew.constant.MaterialMainGetTypeEnum; import com.nflg.product.bomnew.constant.MaterialRelCategoryCodeEnum; import com.nflg.product.bomnew.pojo.dto.*; +import com.nflg.product.bomnew.pojo.entity.MaterialCategoryEntity; import com.nflg.product.bomnew.pojo.entity.MaterialMainEntity; import com.nflg.product.bomnew.util.FlowUtil; import com.nflg.product.bomnew.util.HttpUtils; @@ -25,6 +26,7 @@ import com.nflg.product.bomnew.util.ListCommonUtil; import com.nflg.product.bomnew.util.VUtils; import lombok.extern.slf4j.Slf4j; import nflg.product.common.constant.STATE; +import nflg.product.common.dto.LoginUserInfoDTO; import nflg.product.common.vo.ResultVO; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Qualifier; @@ -36,6 +38,7 @@ import javax.annotation.Resource; import java.io.IOException; import java.time.LocalDateTime; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @Service @@ -52,6 +55,9 @@ public class MaterialService { @Qualifier("syncOAThreadPool") ThreadPoolTaskExecutor syncOAThreadPool; + @Resource + MaterialCategoryService materialCategoryService; + /** * 申请物料 * @@ -169,9 +175,12 @@ public class MaterialService { @Transactional(rollbackFor = Exception.class) //****************************************本地生成,不调主数据************************************************** - public Map batchAddMaterial(List mds){ + public Map batchAddMaterial(List mds, LoginUserInfoDTO userInfo) { List resultList=new ArrayList<>(); + Set categoryCodeList = mds.stream().map(AddVirtrualMaterialDTO::getMaterialCategoryCode).collect(Collectors.toSet()); + List categoryEntityList = materialCategoryService.lambdaQuery().in(MaterialCategoryEntity::getCategoryCode, categoryCodeList).list(); + List syncOaEnts=new ArrayList<>(); Map result = new HashMap<>(); for (AddVirtrualMaterialDTO md :mds) { @@ -183,14 +192,14 @@ public class MaterialService { ma.setMaterialName(md.getMaterialName()); ma.setMaterialDesc(md.getMaterialDesc()); ma.setMaterialCategoryCode(md.getMaterialCategoryCode()); - ma.setCreatedBy(SessionUtil.getUserCode()); + ma.setCreatedBy(userInfo.getUserCode()); ma.setCreatedTime(LocalDateTime.now()); - ma.setUpdatedBy(SessionUtil.getUserCode()); + ma.setUpdatedBy(userInfo.getUserCode()); ma.setUpdatedTime(LocalDateTime.now()); ma.setMaterialClass(0); - ma.setProcessState(0); - ma.setApplyUserCode(SessionUtil.getRealName()); - ma.setApplyDeptName(SessionUtil.getDepartName()); + // ma.setProcessState(0); + ma.setApplyUserCode(userInfo.getRealName()); + ma.setApplyDeptName(userInfo.getDepartName()); ma.setMaterialUnit("PC"); ma.setProcessState(10); if(StrUtil.isNotBlank(md.getProjectType())){ @@ -198,10 +207,21 @@ public class MaterialService { } resultList.add(ma); - AddMaterialMainDTO ent=new AddMaterialMainDTO(); - BeanUtil.copyProperties(ma,ent); + AddMaterialMainDTO ent = new AddMaterialMainDTO(); + BeanUtil.copyProperties(ma, ent); ent.setRelCategoryCode(relMaterialCategory); ent.setReuseOfOnceState(0); + + Optional optional = categoryEntityList.stream().filter(item -> item.getCategoryCode().equals(md.getMaterialCategoryCode())).findFirst(); + optional.ifPresent(item -> { + List parentRowIdList = Arrays.stream(item.getParentTree().split(",")).collect(Collectors.toList()); + List list = materialCategoryService.lambdaQuery().in(MaterialCategoryEntity::getRowId, parentRowIdList).list(); + List categoryNameList = list.stream().map(MaterialCategoryEntity::getCategoryName).collect(Collectors.toList()); + String categoryTreeName = String.join("/", categoryNameList); + ent.setCategoryNameTree(categoryTreeName); + ent.setRelCategoryCode(item.getRelCategoryCode()); + }); + syncOaEnts.add(ent); md.setMaterialNo(ma.getMaterialNo()); @@ -210,11 +230,14 @@ public class MaterialService { materialMainService.saveOrUpdateBatch(resultList); initCategoryInfo(syncOaEnts); //同步OA - sysnToOa(syncOaEnts); -// CompletableFuture.runAsync(() -> sysnToOa(syncOaEnts),syncOAThreadPool); + CompletableFuture.runAsync(() -> sysnToOa(syncOaEnts, userInfo), syncOAThreadPool); return result; } + public Map batchAddMaterial(List mds) { + return batchAddMaterial(mds, SessionUtil.getUser()); + } + private void checkMaterial(List mds){ List noCateGoryCodes = mds.stream().filter(u -> StrUtil.isBlank(u.getMaterialCategoryCode())).collect(Collectors.toList()); VUtils.isTure(CollUtil.isNotEmpty(noCateGoryCodes)).throwMessage("最小物料类别不能为空"); @@ -283,7 +306,7 @@ public class MaterialService { * @param materialCategoryCode * @return */ - public String generateMaterialNo(String materialCategoryCode ,String preCategory) { + public synchronized String generateMaterialNo(String materialCategoryCode, String preCategory) { // String preCategory =materialMainService.getBaseMapper().getMaterialCategory(materialCategoryCode); if (StrUtil.isBlank(preCategory)) { throw new NflgBusinessException(STATE.ParamErr, materialCategoryCode.concat("未设置对应分类")); @@ -303,63 +326,63 @@ public class MaterialService { * @param data */ @Transactional(rollbackFor = Exception.class) - public void sysnToOa(List data) { - Map result = getHttpMap(); + public void sysnToOa(List data, LoginUserInfoDTO userInfo) { + try { + Map result = getHttpMap(userInfo.getUserCode()); - List> list = new ArrayList<>(); - data.forEach(u -> { - Map material = new LinkedHashMap<>(); + List> list = new ArrayList<>(); + data.forEach(u -> { + Map material = new LinkedHashMap<>(); - String relCategoryCode = u.getRelCategoryCode(); - material.put("MATNR", u.getMaterialNo()); - material.put("MAKTX", StrUtil.isNotBlank(u.getShortMaterialDesc()) ? u.getShortMaterialDesc() : u.getMaterialDesc()); - material.put("dl", u.getSecondMaterialCategoryCode()); - material.put("xl", u.getThirdMaterialCategoryCode()); - material.put("xfl", u.getFourthMaterialCategoryCode()); - material.put("xl_copy", u.getThirdMaterialCategoryCode()); - material.put("MATKL", u.getThirdMaterialCategoryCode()); - material.put("MNAME", u.getMaterialName()); - material.put("MNUMB", u.getDrawingNo()); - material.put("MTEXT", u.getMaterialTexture()); - material.put("MSPEC", u.getMaterialSpecifications()); - material.put("MREMA", u.getMaterialDesc()); - material.put("MMANU", u.getMaterialBrand()); - material.put("ATTYP", relCategoryCode); - material.put("ERNAM", SessionUtil.getUserCode()); - material.put("MEINS", u.getMaterialUnit()); - material.put("DUPLICATEITEMS", u.getReuseOfOnceState().equals(1) ? "2" : "1");// 是否一次性使用物料 0:否1:是 - material.put("categoryTreeName", u.getCategoryNameTree()); - material.put("FWEIGHT", u.getMaterialWeight()); - if (StringUtils.isNotEmpty(relCategoryCode)) { - if (relCategoryCode.equals(MaterialRelCategoryCodeEnum.relCategoryCode_21.getRelCategoryCode()) || relCategoryCode.equals(MaterialRelCategoryCodeEnum.relCategoryCode_22.getRelCategoryCode())) { - material.put("materialGetType", String.valueOf(u.getMaterialGetType())); - } - - if (relCategoryCode.equals(MaterialRelCategoryCodeEnum.relCategoryCode_71.getRelCategoryCode())) { - if ("701301".equals(u.getMaterialCategoryCode())) { + String relCategoryCode = u.getRelCategoryCode(); + material.put("MATNR", u.getMaterialNo()); + material.put("MAKTX", StrUtil.isNotBlank(u.getShortMaterialDesc()) ? u.getShortMaterialDesc() : u.getMaterialDesc()); + material.put("dl", u.getSecondMaterialCategoryCode()); + material.put("xl", u.getThirdMaterialCategoryCode()); + material.put("xfl", u.getFourthMaterialCategoryCode()); + material.put("xl_copy", u.getThirdMaterialCategoryCode()); + material.put("MATKL", u.getThirdMaterialCategoryCode()); + material.put("MNAME", u.getMaterialName()); + material.put("MNUMB", u.getDrawingNo()); + material.put("MTEXT", u.getMaterialTexture()); + material.put("MSPEC", u.getMaterialSpecifications()); + material.put("MREMA", u.getMaterialDesc()); + material.put("MMANU", u.getMaterialBrand()); + material.put("ATTYP", relCategoryCode); + material.put("ERNAM", userInfo.getUserCode()); + material.put("MEINS", u.getMaterialUnit()); + material.put("DUPLICATEITEMS", u.getReuseOfOnceState().equals(1) ? "2" : "1");// 是否一次性使用物料 0:否1:是 + material.put("categoryTreeName", u.getCategoryNameTree()); + material.put("FWEIGHT", u.getMaterialWeight()); + if (StringUtils.isNotEmpty(relCategoryCode)) { + if (relCategoryCode.equals(MaterialRelCategoryCodeEnum.relCategoryCode_21.getRelCategoryCode()) || relCategoryCode.equals(MaterialRelCategoryCodeEnum.relCategoryCode_22.getRelCategoryCode())) { material.put("materialGetType", String.valueOf(u.getMaterialGetType())); - } else if ("701303".equals(u.getMaterialCategoryCode())) { - // 701303 虽然按照采购形式申请,但是OA流程类型 强制按照 自制 - material.put("materialGetType", String.valueOf(MaterialMainGetTypeEnum.ZZ.getCode())); - } else { - material.put("materialGetType", String.valueOf(MaterialMainGetTypeEnum.CG.getCode())); + } + + if (relCategoryCode.equals(MaterialRelCategoryCodeEnum.relCategoryCode_71.getRelCategoryCode())) { + if ("701301".equals(u.getMaterialCategoryCode())) { + material.put("materialGetType", String.valueOf(u.getMaterialGetType())); + } else if ("701303".equals(u.getMaterialCategoryCode())) { + // 701303 虽然按照采购形式申请,但是OA流程类型 强制按照 自制 + material.put("materialGetType", String.valueOf(MaterialMainGetTypeEnum.ZZ.getCode())); + } else { + material.put("materialGetType", String.valueOf(MaterialMainGetTypeEnum.CG.getCode())); + } } } - } - if (StringUtils.isNotEmpty(String.valueOf(u.getUseOfYear()))) { - material.put("USAGEYEAR", String.valueOf(u.getUseOfYear())); - } + if (StringUtils.isNotEmpty(String.valueOf(u.getUseOfYear()))) { + material.put("USAGEYEAR", String.valueOf(u.getUseOfYear())); + } - material.put("picUrl", u.getPicUrl()); - // 中类、小类、细分类(若有),分类代码和名称都传给OA - handleCategoryCodeAndName(material, u); - list.add(material); - }); - result.put("List", list); - log.info("物料申请-JSON:" + JSONArray.toJSONString(list)); - HttpUtils httpUtils = new HttpUtils(); - try { + material.put("picUrl", u.getPicUrl()); + // 中类、小类、细分类(若有),分类代码和名称都传给OA + handleCategoryCodeAndName(material, u); + list.add(material); + }); + result.put("List", list); + log.info("物料申请-JSON:" + JSONArray.toJSONString(list)); + HttpUtils httpUtils = new HttpUtils(); String url = NacosConfig.getNacosConfig().getOaUrl(); String reqResult = httpUtils.doPost(url, JSON.toJSONString(result)); JSONObject jsonObject = JSONObject.parseObject(reqResult); @@ -374,16 +397,16 @@ public class MaterialService { message = StrUtil.isNotBlank(message) ? message : ""; throw new NflgBusinessException(STATE.BusinessError, "同步OA出错".concat(message)); } -// return null; + // return null; } catch (Exception ex) { - log.error("同步OA出错",ex); + log.error("同步OA出错", ex); throw new NflgBusinessException(STATE.BusinessError, "同步OA出错" + ex.getMessage()); } } - public Map getHttpMap() { + public Map getHttpMap(String userCode) { Map result = new LinkedHashMap<>(); - result.put("userid", SessionUtil.getUserCode()); + result.put("userid", userCode); result.put("summary", NacosConfig.getNacosConfig().getSummary()); return result; }