Ver código fonte

新增接口服务用于【立项/项目台账】→【配件任务表】数据流转,该接口与/tb/task/save接口基本的业务逻辑一致,但是排除了TeamBition相关代码

lvjs 2 dias atrás
pai
commit
a745f4ecf4

+ 16 - 0
src/main/java/com/malk/eastar/controller/EastarYidaController.java

@@ -43,4 +43,20 @@ public class EastarYidaController {
             return McR.error("400",result.get("error").toString());
         }
     }
+
+    /**
+     * 【立项/项目台账】→【配件任务表】数据流转
+     */
+    @PostMapping("/addtask")
+    McR createPartsTask(@RequestBody JSONObject data) {
+        log.info("【立项/项目台账】→【配件任务表】数据流转, {}", data);
+        McException.assertParamException_Null(data, "formInstId");
+        String formInstId = UtilMap.getString(data, "formInstId");
+        Map result=yidaService.createPartsTask(formInstId);
+        if(result.get("error") == null){
+            return McR.success(result);
+        }else{
+            return McR.error("400",result.get("error").toString());
+        }
+    }
 }

+ 6 - 1
src/main/java/com/malk/eastar/service/YidaService.java

@@ -15,6 +15,11 @@ public interface YidaService {
      */
     Map heartbeatTest(String param);
 
-
+    /**
+     * 【立项/项目台账】→【配件任务表】数据流转
+     * @param formInstId
+     * @return
+     */
+    Map createPartsTask(String formInstId);
 
 }

+ 432 - 4
src/main/java/com/malk/eastar/service/impl/YidaServiceImpl.java

@@ -1,14 +1,22 @@
 package com.malk.eastar.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.eastar.conf.EastarParam;
 import com.malk.eastar.service.YidaService;
+import com.malk.eastar.util.ConfigDataProcessor;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.aliwork.YDSearch;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.aliwork.YDService;
+import com.malk.utils.PublicUtil;
+import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 专用于宜搭复杂逻辑处理的接口服务
@@ -18,6 +26,12 @@ import java.util.Map;
 @Service
 public class YidaServiceImpl implements YidaService {
 
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private YDService ydService;
+
     @Override
     public Map heartbeatTest(String param) {
         Map<String,Object> result = new LinkedHashMap<>();
@@ -30,4 +44,418 @@ public class YidaServiceImpl implements YidaService {
         }
         return result;
     }
+
+    @Override
+    public Map createPartsTask(String formInstId) {
+        /*
+            LTC全生命周期
+            Leads to Order
+            Order to Product
+            Product to Cash
+         */
+
+        /*
+            查询项目数据
+            【立项/项目台账】   FORM-D8DFF1F8C07A4869BCC850090F3A3B4EE0AV
+         */
+        Map projectData = ydClient.queryData(
+                YDParam.builder().formInstId(formInstId).build(),
+                YDConf.FORM_QUERY.retrieve_id
+        ).getFormData();    //【立项/项目台账】数据,旧变量名 -> data
+        String projectCode = UtilMap.getString(projectData,"textField_me2hyldc");  // 项目编号,旧变量名 -> pId
+        String projectName = UtilMap.getString(projectData,"textField_me87x1nz");    // 项目名称,旧变量名 -> pName
+        //String pTaskType = UtilMap.getString(projectData,"textField_mfqnsa9d");    // TB任务类型名称
+        String customerName = UtilMap.getString(projectData,"textField_me87x1o0");  // 客户名称,旧变量名 -> merName
+        System.out.println("客户名称:"+customerName);
+        String orderType = UtilMap.getString(projectData,"selectField_mdf997wp");  // 订单类型(大货|打样)
+        List<String> projectPhaseList = UtilMap.getList(projectData,"checkboxField_me9n37rs");   //包含阶段,旧变量名 -> jds
+        List<String> pmUserId = (List<String>) UtilMap.getList(projectData, "employeeField_me2hyld8_id");  // 项目经理(项目经理 Product Manager)userid
+        List<String> ssUserId = (List<String>) UtilMap.getList(projectData, "employeeField_me2hyld9_id");  // 业务(从事销售工作的人员 Sales Staff)userid
+        List<String> qeUserId = (List<String>) UtilMap.getList(projectData, "employeeField_me9n24ka_id");  // QE(质量工程师 Quality Engineer)userid
+        List<UtilMap.assDetail> projectDataAssLeads = UtilMap.getAssFieldValue(
+                projectData,"associationFormField_mdy7w1wn_id"
+        );  //【立项/项目台账】关联表单【销售项目】
+        String leadsCode = UtilMap.getString(projectData,"textField_me2hyldb");  // 主项目编号,旧变量名 -> pMainId
+        System.out.println("线索编码:"+leadsCode);
+        String leadsName = UtilMap.getString(projectData,"textField_me9n24kq");    // 主项目名称,旧变量名 -> pMainName
+        System.out.println("线索名称:"+leadsName);
+        List<UtilMap.assDetail> projectDataAssOrder = UtilMap.getAssFieldValue(
+                projectData,"associationFormField_me2hylda_id"
+        );  //【立项/项目台账】关联表单【制作新订单】,旧变量名 -> projectOrder
+        List<Map> projectSubDataParts = ydService.queryDetails(
+                YDParam.builder()
+                        .formInstanceId(formInstId)
+                        .formUuid(EastarParam.YD_FORMUUID_PROJECT)
+                        .tableFieldId("tableField_mdy8x198").build()
+        );  // 【立项/项目台账】子表单【全品类】,旧变量名 -> table
+        List<Map> projectSubDataBuyer = UtilMap.getList(
+                projectData,"tableField_mec6juik"
+        );  // 【立项/项目台账】子表单【采购跟单明细】,旧变量名 -> mchTable
+
+        /*
+            查询销售订单数据
+            【制作新订单】   FORM-A731443BE0F04467A5D7FC1A82431D6AL2JO
+         */
+        String orderId = projectDataAssOrder.get(0).instanceId; // 销售订单实例ID,旧变量名 -> orderFid
+        Map orderData = ydClient.queryData(
+                YDParam.builder().formInstId(orderId).build(),
+                YDConf.FORM_QUERY.retrieve_id
+        ).getFormData();    //【制作新订单】数据
+        List<Map> orderSubDataSeries = UtilMap.getList(orderData,"tableField_mesc7nvj");    // 【制作新订单】子表单【系列套数】,旧变量名 -> xlConf
+        System.out.println("【制作新订单】子表单【系列套数】");
+        String codeSeries;
+        String nameSeries;
+        int numOfSetsSeries;
+        for(Map orderSubRecordSeries : orderSubDataSeries){    //遍历子表单记录
+            codeSeries = UtilMap.getString(orderSubRecordSeries,"textField_mizmmf8m");    // 系列编号【系列套数】
+            nameSeries = UtilMap.getString(orderSubRecordSeries,"textField_mesc7nvf");    // 系列【系列套数】
+            numOfSetsSeries = UtilMap.getInt(orderSubRecordSeries,"numberField_mesc7nvi");    // 套数【系列套数】
+            System.out.println("系列:"+nameSeries+",系列编号:"+codeSeries+",套数:"+numOfSetsSeries);
+        }
+        List<Map> orderSubDataLang = UtilMap.getList(orderData,"tableField_meqqj4we");  // 【制作新订单】子表单【语言版本 - 数量拆分】,旧变量名 -> orderLangConf
+        System.out.println("【制作新订单】子表单【语言版本 - 数量拆分】");
+        String codeLang;
+        String nameLang;
+        int numOfSetsAll;
+        for(Map orderSubRecordLang : orderSubDataLang){  //遍历子表单记录
+            codeSeries = UtilMap.getString(orderSubRecordLang,"textField_mizmmf8h");    // 系列编号【语言版本 - 数量拆分】
+            nameSeries = UtilMap.getString(orderSubRecordLang,"textField_meqqj4wa");    // 系列【语言版本 - 数量拆分】
+            codeLang = UtilMap.getString(orderSubRecordLang,"textField_mizmmf8i");    // 语言编号【语言版本 - 数量拆分】
+            nameLang = UtilMap.getString(orderSubRecordLang,"textField_meqqj4wb");    // 语言【语言版本 - 数量拆分】
+            numOfSetsSeries = UtilMap.getInt(orderSubRecordLang,"numberField_meqqj4wd");    // 套数【语言版本 - 数量拆分】
+            numOfSetsAll = UtilMap.getInt(orderSubRecordLang,"numberField_mmtymctd");    // 总套数【语言版本 - 数量拆分】
+            System.out.println("系列编号:"+codeSeries+",系列:"+nameSeries+",语言编号:"+codeLang+",语言:"+nameLang
+                    +",套数:"+numOfSetsSeries+",总套数:"+numOfSetsAll);
+        }
+
+        /*
+            获取供应商与采购跟单数据
+         */
+        List<String> buyerUserIdList = new ArrayList<>();   //采购跟单userid列表,旧变量名 -> mchList
+        String supplier;
+        String buyerUserId;
+        Map<String,String> supplierBuyerMap = new HashMap<>();  //供应商与采购跟单userid映射,旧变量名 -> mchDDIdMap
+        for (Map projectSubRecordBuyer : projectSubDataBuyer){    //遍历子表单记录,旧变量名 -> map
+            buyerUserId = String.valueOf(
+                    UtilMap.getList(projectSubRecordBuyer, "employeeField_me9n24kl_id") //采购跟单
+                            .get(0)
+            );  //采购跟单userid,旧变量名 -> ddId
+            if(!buyerUserIdList.contains(buyerUserId)){
+                buyerUserIdList.add(buyerUserId);
+            }
+            supplier = UtilMap.getString(projectSubRecordBuyer,"textField_mec6juil"); //供应商
+            supplierBuyerMap.put(supplier, buyerUserId);
+        }
+
+        /*
+            查询配件信息
+            【品类表】  FORM-17E244F3FB2240EB930E6DD4E22C7F89KXAR
+         */
+        List<Map> partsData = ydService.queryAllFormData(
+                YDParam.builder().formUuid(EastarParam.YD_FORMUUID_SKU_TYPE).build()
+        );  // 【品类表】数据,旧变量名 -> skuTypeListConfigData
+        Map partsNameCodeMap = ConfigDataProcessor.skuTypeListConfigData(partsData);  // 品类名称与配件编号映射,旧变量名 -> skuIdMap
+
+        /*
+            查询配件参数信息
+            【配件状态】  FORM-760F4001E1C743BA8527721F7217E068534G
+         */
+        List<Map> partsConfSubDataDetails = ydService.queryDetails(
+                YDParam.builder()
+                        .formInstanceId("FINST-X1B66Y81IUFY9U417XIUE99I8YV93HGMJ8WEMF")
+                        .formUuid(EastarParam.YD_FORMUUID_SONCONF)
+                        .tableFieldId("tableField_mew7d9f3").build()
+        );  // 【配件状态】子表单【明细】,旧变量名 -> sonConfData
+        Map<String,Map<String,List<String>>>  partsConfMap = ConfigDataProcessor.processConfigData(
+                partsConfSubDataDetails
+        );  //配件参数信息(按配件大类分组),旧变量名 -> sonConf
+
+        /*
+            获取立项相关成员数据
+         */
+//        List<String> userIdList;
+//        userIdList = new ArrayList<>();   //立项相关成员userid列表,旧变量名 -> userIdList
+//        userIdList.addAll(pmUserId);
+//        userIdList.addAll(ssUserId);
+//        userIdList.addAll(qeUserId);
+//        userIdList.addAll(buyerUserIdList);
+//        Set<String> userIdSet = new HashSet<>(userIdList);    //立项相关成员userid列表(不重复),旧变量名 -> set
+//        userIdList = new ArrayList<>(userIdSet);
+
+        /*
+            创建配件任务
+         */
+        List<Map> partsTaskData1;    //配件任务数据1,旧变量名 -> result
+        List<Map> partsTaskData2 = new ArrayList<>();    //配件任务数据
+        Map<String,List<Map>> supplierPurchaseMap = new HashMap<>(); // 供应商与采购需求关联数据
+        boolean isMultiLang;    //语言区别,旧变量名 -> isLang
+        String partsMajorType;  //配件大类,旧变量名 -> type
+        Map<String,List<String>> partsConfMapByMajorType; //配件参数信息(某配件大类),旧变量名 -> sonconfs
+        List<String> phaseDeliverablesList; //阶段产出物列表
+        List<String> partsMajorTypePhaseDeliverables;   //配件大类与产出物列表,旧变量名 -> sonconf
+        for(Map projectSubRecordParts : projectSubDataParts){ //遍历【立项/项目台账】子表单【全品类】记录,旧变量名 -> map
+            supplier = UtilMap.getString(projectSubRecordParts,"textField_me2f7tvz"); //供应商,旧变量名 -> gysName
+            isMultiLang = "是".equals(UtilMap.getString(projectSubRecordParts,"radioField_me2f7tvx"));
+            partsMajorType = UtilMap.getString(projectSubRecordParts,"selectField_me2f7tvk");
+            partsConfMapByMajorType = partsConfMap.get(partsMajorType);
+            partsMajorTypePhaseDeliverables = new ArrayList<>();
+            if(partsConfMapByMajorType!=null && partsConfMapByMajorType.size()>0){
+                for(String projectPhase : projectPhaseList){ //遍历项目包含阶段
+                    if(partsConfMapByMajorType.containsKey(projectPhase)){
+                        phaseDeliverablesList = partsConfMapByMajorType.get(projectPhase);
+                        for (String phaseDeliverables: phaseDeliverablesList) {
+                            partsMajorTypePhaseDeliverables.add(partsMajorType+" / "+phaseDeliverables);
+                        }
+                    }
+                }
+            }
+            if(isMultiLang){ // 是否存在多种语言版本
+                partsTaskData1 = createPartsTaskData1(null,orderSubDataLang,projectSubRecordParts,null,isMultiLang,partsMajorTypePhaseDeliverables,null,supplier,projectCode,leadsCode,partsNameCodeMap);
+            }else{
+                partsTaskData1 = createPartsTaskData1(null,orderSubDataSeries,projectSubRecordParts,null,isMultiLang,partsMajorTypePhaseDeliverables,null,supplier,projectCode,leadsCode,partsNameCodeMap);
+            }
+            if(supplierPurchaseMap.containsKey(supplier)){
+                supplierPurchaseMap.get(supplier).addAll(partsTaskData1);
+            }else{
+                supplierPurchaseMap.put(supplier,partsTaskData1);
+            }
+            partsTaskData2.addAll(partsTaskData1);
+        }
+        System.out.println("配件任务数据数量="+partsTaskData2.size());
+        /*
+            从立项数据提取项目计划明细数据
+         */
+        List<Map> projectSubDataPlan = UtilMap.getList(projectData,"tableField_mgu5rm3e"); // 项目计划明细,旧变量名 -> projectPlan
+        /*
+            按配件任务关联项目阶段对配件任务数据进行调整
+         */
+        List<String> partsTaskPhaseList = Arrays.asList("白样", "产前样","大货样", "大货"); //配件任务关联项目阶段(不包含包装),旧变量名 -> jdList
+        Object demoValue = orderData.get("textField_me2f7tvd"); //套装样品及数量
+        long planEndTime;
+        List<Map> partsTaskRecordsByGys;
+        List<Map> modifiedList;
+        String taskStatus;
+        String taskType;
+        String procuremenType;
+        Map<String, Object> copiedMap;
+        Map supplierOrder;  //采购订单,旧变量名 -> order
+        List<Map> gysBuyerData;  //跟单与供应商映射数据,旧变量名 -> gysList
+        List<UtilMap.assDetail> gysBuyerDataAssSupplier;    //供应商档案关联表单,旧变量名 -> gys
+        for(String phase : projectPhaseList){ //遍历项目包含阶段,旧变量名 -> jd
+            System.out.println("项目阶段:"+phase);
+            if(partsTaskPhaseList.contains(phase)){
+                planEndTime = 0;
+                for(Map stage : projectSubDataPlan){
+                    if(phase.equals(UtilMap.getString(stage,"textField_mgu5rm3f"))){   //比较阶段是否一致
+                        planEndTime = UtilMap.getLong(stage,"dateField_mgu5rm3h");    //计划结束时间,旧变量名 -> planTimestamp
+                    }
+                }
+                for (String gys : supplierPurchaseMap.keySet()){ //遍历采购需求数据,旧变量名 -> key
+                    partsTaskRecordsByGys = supplierPurchaseMap.get(gys);  //待新增的配件任务表记录(按供应商区分),旧变量名 -> arr
+                    modifiedList = new ArrayList<>();
+                    procuremenType = "";
+                    taskStatus = "";
+                    taskType = "";
+                    for (Map<String, Object> partsTaskRecordByGys : partsTaskRecordsByGys) { //遍历待新增的配件任务表记录(按供应商区分),旧变量名 -> map
+                        if("大货".equals(phase)){
+                            procuremenType ="配件采购";
+                            taskStatus ="待排期";
+                            taskType ="大货";
+                            copiedMap = new HashMap<>(partsTaskRecordByGys); // 关键:创建副本
+                            copiedMap.put("dateField_mizvc5oi", planEndTime); //考核日期
+                            modifiedList.add(copiedMap);
+                        } else{
+                            if("大货样".equals(phase)){
+                                taskStatus ="无需合同";
+                            }else{  //白样和产前样
+                                taskStatus ="待排期";
+                            }
+                            procuremenType ="样品任务";
+                            taskType ="打样";
+                            copiedMap = new HashMap<>(partsTaskRecordByGys); // 关键:创建副本
+                            copiedMap.put("dateField_mizvc5oi", planEndTime); //考核日期
+                            copiedMap.put("numberField_mkosp94h", demoValue);   //客户订单数量
+                            copiedMap.put("numberField_mifp03el", demoValue);   //工厂采购数量
+                            modifiedList.add(copiedMap);
+                        }
+                    }
+                    supplierOrder = UtilMap.map(
+                            //"textField_mifp03ew, " +    //TB项目编号
+                                    "selectField_mifp03e7, " +  //任务状态
+                                    "tableField_mifp03em, " +   //采购明细
+                                    "selectField_mkf6qv9b, " +  //采购类型
+                                    "dateField_mifp03eb, " +    //计划完成日期
+                                    "selectField_ml0l206x", //订单类型
+                            //tbProjectId,
+                            taskStatus,
+                            modifiedList,
+                            procuremenType,
+                            planEndTime,
+                            taskType
+                    );
+                    supplierOrder.put("associationFormField_mifp03e9",projectDataAssOrder); //项目订单
+                    supplierOrder.put("associationFormField_mifp03e8",projectDataAssLeads); // 销售项目
+                    supplierOrder.put("textField_mifp03e6",projectName+"-"+gys+"-"+phase);   //任务名称
+                    supplierOrder.put("textField_mimwnauk",projectCode);    //项目订单编号
+                    //supplierOrder.put("textField_mizs3841",pMainId);
+                    supplierOrder.put("employeeField_mifp03eu",Arrays.asList(supplierBuyerMap.get(gys))); //跟单负责人
+                    /*
+                        查询跟单与供应商数据
+                        【跟单-供应商对应表】  FORM-3AB247087A81401F87264BFA74944BE3R086
+                     */
+                    gysBuyerData = (List<Map>) ydClient.queryData(
+                            YDParam.builder()
+                                    .formUuid(EastarParam.YD_FORMUUID_GYS_YW)
+                                    .searchCondition(
+                                            JSONObject.toJSONString(
+                                                    Arrays.asList(
+                                                            new YDSearch(
+                                                                    "textField_mec6lku3",   //供应商简称
+                                                                    gys,
+                                                                    "供应商简称",
+                                                                    YDSearch.Type.TEXT_FIELD,
+                                                                    YDSearch.Operator.EQ
+                                                            )
+                                                    )
+                                            )
+                                    ).build(),
+                            YDConf.FORM_QUERY.retrieve_list
+                    ).getData();
+                    if(gysBuyerData!=null && gysBuyerData.size()>0){
+                        gysBuyerDataAssSupplier
+                                = UtilMap.getAssFieldValue(
+                                        UtilMap.getMap(gysBuyerData.get(0),"formData"),
+                                        "associationFormField_mec6lku4_id"  //供应商
+                                  );
+                        supplierOrder.put("associationFormField_mifp03ea",gysBuyerDataAssSupplier); //供应商
+                        supplierOrder.put("textField_mifp03ez",gysBuyerDataAssSupplier.get(0).subTitle);    // 供应商编号
+                    }
+                    supplierOrder.put("textField_mmikzhlb",phase); //里程碑
+                    /*
+                        保存配件任务数据
+                        【配件任务表】 FORM-B9CBFB34DB3249C483415EF641202AC199J9
+                     */
+//                    ydClient.operateData(
+//                            YDParam.builder()
+//                                    .formUuid(EastarParam.YD_FORMUUID_CGTASK)
+//                                    .formDataJson(JSONObject.toJSONString(supplierOrder))
+//                                    .build(),
+//                            YDConf.FORM_OPERATION.create
+//                    );
+                }
+            }
+        }
+
+        /*
+            生成包装任务(打样不需要生成包装)
+         */
+        if("大货".equals(orderType)){
+            //savePackTask(tbProjectId, orderLangConf, data, pName, pId, pMainId, projectOrder, mchDDIdMap);
+        }
+
+        return Collections.emptyMap();
+    }
+
+    //创建配件任务数据1
+    private List<Map> createPartsTaskData1(
+            Map taskMap,    //TB相关,无用
+            List<Map> orderSubDataLangOrSeries, //销售订单子表单记录,【语言版本 - 数量拆分】明细数据或【系列套数】明细数据,旧变量名 -> orderConf
+            Map projectSubRecordParts,  //立项数据子表单记录,【全品类】明细数据某一行,旧变量名 -> cgDetail
+            List<Map> customfields, //TB相关,无用
+            boolean isMultiLang, //是否存在多种语言版本,旧变量名 -> isLang
+            List<String> partsPhaseDeliverables,   //配件状态明细(按配件大类分组),旧变量名 -> sonConf
+            String sonScenariofieldconfigId,    //TB相关,无用
+            String supplier,    //供应商,旧变量名 -> gysName
+            String pId, // 项目编号
+            String pMainId, // 主项目编号
+            Map skuTypeDataMap    //品类名称与配件编号映射,旧变量名 -> skuIdMap
+    ){
+        List<Map> partsTaskData1 = new ArrayList<>();    //待新增的配件任务数据
+        String nameSeries;  //系列,旧变量名 -> confSeries
+        String nameLang;    //语言
+        String skuId;
+        String reportId;
+        String sku;
+        String numOfSets;   //套数【语言版本 - 数量拆分】或套数【系列套数】,旧变量名 -> value
+        String devNum;  //研发部订单需求数量,旧变量名 -> rdNum
+        int allSupplyNum;   //总采购数量
+        String partsType;   //配件类型(来源于【品类表】的“品类名称”)
+        String partsName;   //配件名称
+        Map projectSubRecordPartsNew;  //立项数据子表单记录,【全品类】明细数据某一行(新),旧变量名 -> recod
+        for(Map orderSubRecordLangOrSeries : orderSubDataLangOrSeries){    //遍历子表单记录,旧变量名 -> map
+            nameSeries = UtilMap.getString_first(
+                    orderSubRecordLangOrSeries,
+                    "textField_meqqj4wa",   //系列【语言版本 - 数量拆分】
+                    "textField_mesc7nvf"    //系列【系列套数】
+            ); // 系列
+            if(!UtilMap.getString(projectSubRecordParts,"selectField_me2f7tw4").equals(nameSeries)){
+                // 系列【全品类】与系列【语言版本 - 数量拆分】或系列【系列套数】不匹配
+                continue;
+            }
+            partsType = UtilMap.getString(projectSubRecordParts,"selectField_mizsccds");
+            skuId = String.valueOf(skuTypeDataMap.get(partsType));  //配件编号
+            skuId = PublicUtil.isNull(skuId) ? "000":skuId;
+            reportId = UtilMap.getString(projectSubRecordParts,"textField_me2f7tvn");// 文档序号
+            sku = "2" + skuId
+                    + UtilMap.getString_first(orderSubRecordLangOrSeries,"textField_mizmmf8h","textField_mizmmf8m")   //系列编号【语言版本 - 数量拆分】或 系列编号【系列套数】
+                    + reportId.substring(reportId.length()-2);  // sku 添加系列编号及文档编号
+            nameLang = UtilMap.getString(orderSubRecordLangOrSeries,"textField_meqqj4wb"); // 语言【语言版本 - 数量拆分】,旧变量名 -> lang
+            if(isMultiLang){ // 是否存在多种语言版本
+                if(PublicUtil.isNull(nameLang)){
+                    nameLang = "不区分";
+                    sku = sku+"AL"; // sku 不区分语言
+                }
+                sku = sku + UtilMap.getString(orderSubRecordLangOrSeries,"textField_mizmmf8i"); // sku+语言编号
+            }else{
+                nameLang = "不区分";
+                sku = sku+"AL"; // sku 不区分语言
+            }
+            sku = sku + pMainId.substring(pMainId.length()-10); // sku+项目号
+            numOfSets = UtilMap.getString_first(
+                    orderSubRecordLangOrSeries,
+                    "numberField_meqqj4wd", // 套数【语言版本 - 数量拆分】
+                    "numberField_mesc7nvi"  // 套数【系列套数】
+            ); // 数量
+            devNum = UtilMap.getString(projectSubRecordParts,"numberField_mmke3fdc");   //研发部订单需求数量
+            allSupplyNum = 0;
+//            if(StringUtils.isNotEmpty(devNum) && StringUtils.isNotEmpty(numOfSets)){
+//                allSupplyNum = Integer.parseInt(devNum) + Integer.parseInt(numOfSets);  //计算总采购数量
+//            }
+            allSupplyNum = Integer.parseInt(numOfSets);
+            projectSubRecordPartsNew = new HashMap(projectSubRecordParts);
+            partsName = nameSeries+"-"+partsType;
+            projectSubRecordPartsNew.putAll(
+                    UtilMap.map(
+                            "textField_mecmytpr, " + //配件名称
+                                    "textField_mecmytps, " + //TB任务编号
+                                    //"textField_mecmytpt," +
+                                    "numberField_mifp03el, " +   //工厂采购数量
+                                    "numberField_mmmwu4cg, " +   //研发部订单需求数量
+                                    "numberField_mmmwu4ci, " +   //总采购数量
+                                    "textField_mifp03eo, " + //SKU编号
+                                    "textField_miib17jx, " + //项目订单编号
+                                    "textField_mizvc5oj, " + //任务表明细实例标识
+                                    "textField_mjr129o4, " + //语言
+                                    "numberField_mkosp94h", //客户订单数量
+                            partsName,
+                            "~",
+                            //"未开始",
+                            numOfSets,
+                            devNum,
+                            allSupplyNum,
+                            sku,
+                            pId,
+                            "~",
+                            nameLang,
+                            numOfSets
+                    )
+            );
+            partsTaskData1.add(projectSubRecordPartsNew);
+        }
+
+
+        return partsTaskData1;
+    }
+
+
 }