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.EastarTbService; 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.server.common.McException; import com.malk.server.teambition.TBConf; import com.malk.service.aliwork.YDClient; import com.malk.service.aliwork.YDService; import com.malk.service.teambition.TBClient_Project; import com.malk.service.teambition.TBClient_Task; import com.malk.service.teambition.TBClient_User; import com.malk.utils.PublicUtil; import com.malk.utils.UtilMap; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; import static com.malk.eastar.conf.EastarParam.TFNAME_YDKEY; @Slf4j @Service public class EastarTbServiceImpl implements EastarTbService { @Autowired private TBClient_Project tbProject; @Autowired private TBClient_Task tbTask; @Autowired private TBClient_User tbUser; @Autowired private TBConf tbConf; @Autowired private YDClient ydClient; @Autowired private YDService ydService; @Override public Map createProject(String projectCode, String templateId, String tbProjectId) { if(PublicUtil.isNull(tbProjectId)){ Map result = tbProject.projectCreateWithTemplate(projectCode, templateId, tbConf.getOperatorId()); tbProjectId = UtilMap.getString(result, "id"); } return UtilMap.map("tbProjectId",tbProjectId); } private String creatMainProjectTask(String pId,String name,String id,List table,String executorId,List mainProjectcustomfields){ Map taskMap = new HashMap(); taskMap.put("content",name+"-"+id); taskMap.put("projectId",EastarParam.TB_MAINPROJECT_ID); taskMap.put("executorId",executorId); // 通过供应商确定执行人 taskMap.put("customfields",mainProjectcustomfields); taskMap.put("startDate", DateUtil.format(new Date(UtilMap.getLong(table.get(0),"dateField_mgu5rm3g")),"yyyy-MM-dd")); taskMap.put("dueDate", DateUtil.format(new Date(UtilMap.getLong(table.get(table.size()-1),"dateField_mgu5rm3h")),"yyyy-MM-dd")); Map result=createTask(taskMap); for (Map map:table){ Map son=new HashMap(); son.put("content",name+"-"+id+"-"+map.get("textField_mgu5rm3f")); son.put("projectId",EastarParam.TB_MAINPROJECT_ID); son.put("executorId",executorId); // 通过供应商确定执行人 son.put("parentTaskId",result.get("taskId")); son.put("startDate", DateUtil.format(new Date(UtilMap.getLong(map,"dateField_mgu5rm3g")),"yyyy-MM-dd")); son.put("dueDate", DateUtil.format(new Date(UtilMap.getLong(map,"dateField_mgu5rm3h")),"yyyy-MM-dd")); son.put("customfields",mainProjectcustomfields); Map sonResult=createTask( son); } return UtilMap.getString(result, "taskId"); } private Map createTask(Map map){ try { return tbTask.createTask(tbConf.getOperatorId(), map); }catch (McException e){ if(e.getMessage().equals("截止时间必须晚于开始时间")||e.getMessage().equals("The end time should not be earlier than the start time.")){ map.remove("startDate"); return createTask(map); }else { throw e; } } } @Override public Map createTask(String formInstId) { // 查询立项数据 Map data=ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); String merName= UtilMap.getString(data,"textField_me87x1o0");// 客户名称 String pMainName= UtilMap.getString(data,"textField_me9n24kq"); // 主项目名称 String pMainId= UtilMap.getString(data,"textField_me2hyldb");// 主项目编号 String pName= UtilMap.getString(data,"textField_me87x1nz"); // 项目名称 String pId= UtilMap.getString(data,"textField_me2hyldc");// 项目编号 String orderType= UtilMap.getString(data,"selectField_mdf997wp"); // 订单类型 大货 打样 // String pTaskType= UtilMap.getAssFieldValue(data,"associationFormField_me9n24kk_id").get(0).title; // 项目任务类型 String pTaskType = UtilMap.getString(data,"textField_mfqnsa9d");// 项目任务类型 // 查询记录判断是否创建过看板 List recodList = (List) ydClient.queryData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_RECOD).searchCondition( JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_me2hyldb",pMainId,"主项目编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))) ).build(), YDConf.FORM_QUERY.retrieve_list).getData(); // 成员处理 List pmUserId = (List) UtilMap.getList(data, "employeeField_me2hyld8_id");// 项目经理 List ssUserId = (List) UtilMap.getList(data, "employeeField_me2hyld9_id");// 业务 List qeUserId = (List) UtilMap.getList(data, "employeeField_me9n24ka_id");// QE pmUserId=tbUser.getUserIds(pmUserId, false); ssUserId=tbUser.getUserIds(ssUserId, false); List programUsers=new ArrayList<>(); programUsers.addAll(pmUserId); programUsers.addAll(ssUserId); programUsers.remove(tbConf.getOperatorId()); Set programUsersSet = new HashSet<>(programUsers); programUsers = new ArrayList<>(programUsersSet); // 项目创建 String tbProjectId; if(recodList == null || recodList.size()<1){ Map result = tbProject.projectCreateWithTemplate(pMainName, EastarParam.TB_PROJECT_TEMP, tbConf.getOperatorId()); tbProjectId = UtilMap.getString(result, "id"); // 同步项目集 List programList = tbProject.queryProgramList("", merName); String programId = ""; if (programList.size() > 0) { programId=UtilMap.getString(programList.get(0), "id"); }else{ Map program=tbProject.createProgramList(merName,""); programId=UtilMap.getString(program,"id"); } tbProject.upsertProgramProject(programId, Arrays.asList(tbProjectId), tbConf.getOperatorId()); tbProject.createProgramMember(programId,tbConf.getOperatorId(),programUsers); }else { tbProjectId = UtilMap.getString(UtilMap.getMap(recodList.get(0),"formData"),"textField_mecmytpo"); } // 订单数据 List projectOrder=UtilMap.getAssFieldValue(data,"associationFormField_me2hylda_id"); String orderFid= projectOrder.get(0).instanceId; // 项目任务类型 Map orderData=ydClient.queryData(YDParam.builder().formInstId(orderFid).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); List orderLangConf=UtilMap.getList(orderData,"tableField_meqqj4we");// 语言配置 List xlConf=UtilMap.getList(orderData,"tableField_mesc7nvj");// 系列源配置 // 子任务拆分数据 List sonConfData= ydService.queryDetails(YDParam.builder().formInstanceId("FINST-X1B66Y81IUFY9U417XIUE99I8YV93HGMJ8WEMF").formUuid(EastarParam.YD_FORMUUID_SONCONF).tableFieldId("tableField_mew7d9f3").build());// 全品类配件表 Map>> sonConf= ConfigDataProcessor.processConfigData(sonConfData); List skuTypeListConfigData = ydService.queryAllFormData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_SKU_TYPE).build()); Map skuIdMap=ConfigDataProcessor.skuTypeListConfigData(skuTypeListConfigData); // 成员处理 qeUserId=tbUser.getUserIds(qeUserId, false); List mchTable= UtilMap.getList(data,"tableField_mec6juik");// 跟单 List mchList=new ArrayList<>(); Map mchMap=new HashMap<>(); Map mchDDIdMap=new HashMap<>(); Map userIdMap=new HashMap<>(); for (Map map:mchTable){ String ddId=String.valueOf(UtilMap.getList(map,"employeeField_me9n24kl_id").get(0)); if(!mchList.contains(ddId)){ mchList.add(ddId); userIdMap.put(ddId,tbUser.getUserId(ddId,false)); } mchMap.put(UtilMap.getString(map,"textField_mec6juil"),userIdMap.get(ddId)); mchDDIdMap.put(UtilMap.getString(map,"textField_mec6juil"),ddId); } mchList=tbUser.getUserIds(mchList, false); mchList.remove(tbConf.getOperatorId()); List userList = new ArrayList<>(); userList.addAll(pmUserId); // 添加 list1 的所有元素 userList.addAll(ssUserId); userList.addAll(qeUserId); userList.addAll(mchList); Set set = new HashSet<>(userList); userList = new ArrayList<>(set); tbProject.createProjectMember(tbProjectId, userList, tbConf.getOperatorId()); if (!mchList.isEmpty()) { String roleId = _getProjectRoleId(tbProjectId, "跟单(MCH)"); tbProject.updateProjectMember(mchList, Arrays.asList(roleId), tbProjectId); } if (!qeUserId.isEmpty()) { String roleId = _getProjectRoleId(tbProjectId, "质控(QE)"); tbProject.updateProjectMember(qeUserId, Arrays.asList(roleId), tbProjectId); } // 指定项目经理为编辑权限 if (!pmUserId.isEmpty()) { String roleId = _getProjectRoleId(tbProjectId, "项目拥有者"); tbProject.updateProjectMember(pmUserId, Arrays.asList(roleId), tbProjectId); } String projectTaskId= UtilMap.getString(data,"textField_mgu73usl");// 大看板任务编号 if(PublicUtil.isNull(projectTaskId)){ // 创建任务及看板 List mainProjectcustomfields=new ArrayList(); mainProjectcustomfields.add(tbConf.assembleCustomFieldName("项目类型",orderType)); mainProjectcustomfields.add(tbConf.assembleCustomFieldName("订单金额(美金)",UtilMap.getString(orderData,"numberField_mdy6ezcu"))); // mainProjectcustomfields.add(tbConf.assembleCustomFieldName("产品类型",orderType)); List gcNameList=new ArrayList<>(mchMap.keySet()); // 工厂 mainProjectcustomfields.add(tbConf.assembleCustomField("工厂",getCustFiledValueTitle(gcNameList))); mainProjectcustomfields.add(tbConf.assembleCustomFieldName("客户",merName)); mainProjectcustomfields.add(tbConf.assembleCustomField("业务(Sales)",getCustFiledValueId(ssUserId))); mainProjectcustomfields.add(tbConf.assembleCustomField("跟单人",getCustFiledValueId(mchList))); mainProjectcustomfields.add(tbConf.assembleCustomField("品控(QE)",getCustFiledValueId(qeUserId))); mainProjectcustomfields.add(tbConf.assembleCustomFieldName("Project Name",UtilMap.getString(data,"textField_me9n24l0"))); mainProjectcustomfields.add(tbConf.assembleCustomFieldName("客户分级",UtilMap.getString(data,"textField_mgokximj"))); projectTaskId=creatMainProjectTask(tbProjectId,pName,pId,UtilMap.getList(data,"tableField_mgu5rm3e"),pmUserId.get(0),mainProjectcustomfields); ydClient.operateData(YDParam.builder().formInstanceId(formInstId) .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("textField_mgu73usl",projectTaskId))).build(), YDConf.FORM_OPERATION.update); } // 任务公用字段 List maincustomfields=new ArrayList(); maincustomfields.add(tbConf.assembleCustomFieldName("项目编号",pId)); maincustomfields.add(tbConf.assembleCustomFieldName("项目名称",pName)); maincustomfields.add(tbConf.assembleCustomFieldName("产品阶段",orderType)); maincustomfields.add(tbConf.assembleCustomFieldName("客户",merName)); maincustomfields.add(tbConf.assembleCustomField("业务(Sales)",getCustFiledValueId(ssUserId))); maincustomfields.add(tbConf.assembleCustomField("项目经理(PM)",getCustFiledValueId(pmUserId))); maincustomfields.add(tbConf.assembleCustomField("品控(QE)",getCustFiledValueId(qeUserId))); maincustomfields.add(tbConf.assembleCustomFieldName("Project Name",UtilMap.getString(data,"textField_me9n24l0"))); maincustomfields.add(tbConf.assembleCustomFieldName("客户分级",UtilMap.getString(data,"textField_mgokximj"))); // 任务类型 String scenariofieldconfigId=_getTaskType(tbProjectId,pTaskType); String sonScenariofieldconfigId=_getTaskType(tbProjectId,"配件-子任务"); String tasklistId=_getTaskList(tbProjectId,orderType+"项目"); String stageId= tbTask.queryTaskStage(tbProjectId,tasklistId,"启动阶段"); // 全品类任务生成 List table= ydService.queryDetails(YDParam.builder().formInstanceId(formInstId).formUuid(EastarParam.YD_FORMUUID_PROJECT).tableFieldId("tableField_mdy8x198").build());// 全品类配件表 List recodTable = new ArrayList<>(); List jds=UtilMap.getList(data,"checkboxField_me9n37rs"); Map> gysOrderData=new HashMap<>(); // 采购需求数据 按照供应商拆分BOM Map seriesDevNumMap = new HashMap<>(); //系列与研发部订单需求数量映射数据 add by Jason 20260320 String nameSeries; //系列 add by Jason 20260320 String devNum; //研发部订单需求数量 add by Jason 20260320 for(Map map:table){ //获取系列与研发部订单需求数量映射 add by Jason 20260320 start nameSeries = UtilMap.getString(map,"selectField_me2f7tw4"); //系列 devNum = UtilMap.getString(map,"numberField_mmke3fdc"); //研发部订单需求数量 if(seriesDevNumMap.get(nameSeries) == null){ seriesDevNumMap.put(nameSeries,devNum); } //获取系列与研发部订单需求数量映射 add by Jason 20260320 end Map taskMap=UtilMap.map("projectId, tasklistId, scenariofieldconfigId, stageId",tbProjectId,tasklistId,scenariofieldconfigId,stageId); taskMap.put("content",getValue(map,"selectField_me2f7tw4","-")+getValue(map,"textField_me2f7tvo","")); //系列 配件 String gysName=UtilMap.getString(map,"textField_me2f7tvz"); taskMap.put("executorId",mchMap.get(gysName)); // 通过供应商确定执行人 List customfields=getCustomfields(EastarParam.CUSTFIELD_ACCE,map); customfields.addAll(maincustomfields); List result=null; boolean isLang="是".equals(UtilMap.getString(map,"radioField_me2f7tvx")); String type=UtilMap.getString(map,"selectField_me2f7tvk"); // 配件大类 Map> sonconfs=sonConf.get(type); List sonconf=new ArrayList<>(); if(sonconfs!=null&&sonconfs.size()>0){ for(String str:jds){ if(sonconfs.containsKey(str)){ List list=sonconfs.get(str); for (String s: list) { sonconf.add(type+" / "+s); } } } } if(isLang){ // 区分语言 result=saveTbTask(taskMap,orderLangConf,map,customfields,isLang,sonconf,sonScenariofieldconfigId,gysName,pId,pMainId,skuIdMap); }else{ result=saveTbTask(taskMap,orderLangConf,map,customfields,isLang,sonconf,sonScenariofieldconfigId,gysName,pId,pMainId,skuIdMap); } if(gysOrderData.containsKey(gysName)){ gysOrderData.get(gysName).addAll(result); }else{ gysOrderData.put(gysName,result); } recodTable.addAll(result); } saveRecod(data,tbProjectId,recodTable); List projectPlan=UtilMap.getList(data,"tableField_mgu5rm3e");// 项目计划 List jdList=Arrays.asList("白样", "产前样","大货样", "大货"); Object demoValue = orderData.get("textField_me2f7tvd"); // 项目阶段处理 String numOfSets; //工厂采购数量 add by Jason 20260320 int allSupplyNum; //总采购数量 add by Jason 20260320 for(String jd:jds){ System.out.println("项目阶段:"+jd); if(jdList.contains(jd)){ long sevenDaysAgoTimestamp = 0; long planTimestamp = 0; for(Map stage:projectPlan){ if(jd.equals(UtilMap.getString(stage,"textField_mgu5rm3f"))){ sevenDaysAgoTimestamp = UtilMap.getLong(stage,"dateField_mgu5rm3h") - 7L * 24 * 60 * 60 * 1000; planTimestamp = UtilMap.getLong(stage,"dateField_mgu5rm3h"); } } // 循环保存采购任务 for (String key:gysOrderData.keySet()){ List arr=gysOrderData.get(key); List modifiedList = new ArrayList<>(); String procuremenType =""; String taskStatus =""; String taskType=""; for (Map map : arr) { if("大货".equals(jd)){ procuremenType ="配件采购"; taskStatus ="待排期"; taskType ="大货"; //计算总采购数量 add by Jason 20260320 start numOfSets = map.get("numberField_mifp03el")==null?null:map.get("numberField_mifp03el").toString(); devNum = map.get("numberField_mmmwu4cg")==null?null:map.get("numberField_mmmwu4cg").toString(); allSupplyNum = 0; if(StringUtils.isNotEmpty(devNum) && StringUtils.isNotEmpty(numOfSets)){ allSupplyNum = Integer.parseInt(devNum) + Integer.parseInt(numOfSets); //计算总采购数量 } //计算总采购数量 add by Jason 20260320 end Map copiedMap = new HashMap<>(map); // 关键:创建副本 copiedMap.put("numberField_mmmwu4ci",allSupplyNum); //总采购数量 add by Jason 20260320 copiedMap.put("dateField_mizvc5oi", planTimestamp); modifiedList.add(copiedMap); } else{ if("大货样".equals(jd)){ taskStatus ="无需合同"; }else{ taskStatus ="待排期"; } procuremenType ="样品任务"; taskType ="打样"; Map copiedMap = new HashMap<>(map); // 关键:创建副本 copiedMap.put("dateField_mizvc5oi", planTimestamp); copiedMap.put("numberField_mkosp94h", demoValue); copiedMap.put("numberField_mifp03el", demoValue); copiedMap.put("numberField_mmmwu4cg",0); //研发部订单需求数量 add by Jason 20260320 copiedMap.put("numberField_mmmwu4ci",demoValue); //总采购数量 add by Jason 20260320 modifiedList.add(copiedMap); } } System.out.println("arr"+arr); Map order=UtilMap.map("textField_mifp03ew, selectField_mifp03e7, tableField_mifp03em, selectField_mkf6qv9b, dateField_mifp03eb, selectField_ml0l206x",tbProjectId,taskStatus,modifiedList,procuremenType,planTimestamp,taskType); order.put("associationFormField_mifp03e9",projectOrder); order.put("associationFormField_mifp03e8",UtilMap.getAssFieldValue(data,"associationFormField_mdy7w1wn_id")); // 项目 order.put("textField_mifp03e6",pName+"-"+key+"-"+jd); order.put("textField_mimwnauk",pId); order.put("textField_mizs3841",pMainId); order.put("employeeField_mifp03eu",Arrays.asList(mchDDIdMap.get(key))); List gysList = (List) ydClient.queryData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_GYS_YW).searchCondition( JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_mec6lku3",key,"供应商简称", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))) ).build(), YDConf.FORM_QUERY.retrieve_list).getData(); if(gysList!=null&&gysList.size()>0){ List gys=UtilMap.getAssFieldValue(UtilMap.getMap(gysList.get(0),"formData"),"associationFormField_mec6lku4_id"); order.put("associationFormField_mifp03ea",gys); order.put("textField_mifp03ez",gys.get(0).subTitle); // 供应商编号 } order.put("textField_mmikzhlb",jd); //里程碑 add by Jason 20260309 ydClient.operateData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_CGTASK).formDataJson(JSONObject.toJSONString(order)).build(), YDConf.FORM_OPERATION.create); } } } // 生成包装任务:打样不需要生成包装 if("大货".equals(orderType)){ //seriesDevNumMap 系列与研发部订单需求数量映射数据 add by Jason 20260320 savePackTask(tbProjectId, orderLangConf, data, pName, pId, pMainId, projectOrder, mchDDIdMap, seriesDevNumMap); } //更新【制作新订单】子表单【语言版本 - 数量拆分】的总套数 add by Jason 20260320 start List orderSubDataLangNew = new ArrayList<>(); int numOfSetsSeries; //套数 int numOfSetsAll; //总套数 for(Map orderSubRecordLang : orderLangConf){ //遍历子表单记录 nameSeries = UtilMap.getString(orderSubRecordLang,"textField_meqqj4wa"); // 系列【语言版本 - 数量拆分】 numOfSetsSeries = UtilMap.getInt(orderSubRecordLang,"numberField_meqqj4wd"); // 套数【语言版本 - 数量拆分】 numOfSetsAll = 0; devNum = seriesDevNumMap.get(nameSeries); if(StringUtils.isNotEmpty(devNum)){ numOfSetsAll = numOfSetsSeries + Integer.parseInt(devNum); // 总套数【语言版本 - 数量拆分】,总套数=套数+研发部订单数量,立项完成自动更新总套数 } orderSubRecordLang.put("numberField_mmtymctd",numOfSetsAll); orderSubDataLangNew.add(orderSubRecordLang); } System.out.println("更新【制作新订单】数据:"+ JSONObject.toJSONString(orderSubDataLangNew)); ydClient.operateData( YDParam.builder() .formInstId(orderFid) .updateFormDataJson( JSONObject.toJSONString(UtilMap.map("tableField_meqqj4we",orderSubDataLangNew)) ).build(), YDConf.FORM_OPERATION.update ); //更新【制作新订单】子表单【语言版本 - 数量拆分】的总套数 add by Jason 20260320 end return Collections.emptyMap(); } // 生成包装任务 //seriesDevNumMap 系列与研发部订单需求数量映射数据 add by Jason 20260320 private List savePackTask(String tbProjectId, List orderLangConf,Map data,String pName,String pId,String pMainId,List projectOrder,Map mchDDIdMap,Map seriesDevNumMap) { Map> packOrderData = new HashMap<>(); String nameSeries; //系列 add by Jason 20260320 String devNum; //研发部订单需求数量 add by Jason 20260320 int allSupplyNum; //总采购数量 add by Jason 20260320 for (Map orderMap : orderLangConf) { String supplier = UtilMap.getString(orderMap, "textField_mkp7yv76"); String setsValue = UtilMap.getString(orderMap, "numberField_meqqj4wd"); //计算总采购数量 add by Jason 20260320 start nameSeries = UtilMap.getString(orderMap, "textField_meqqj4wa"); //系列 devNum = seriesDevNumMap.get(nameSeries); allSupplyNum = 0; if(StringUtils.isNotEmpty(devNum) && StringUtils.isNotEmpty(setsValue)){ allSupplyNum = Integer.parseInt(devNum) + Integer.parseInt(setsValue); //计算总采购数量 } //计算总采购数量 add by Jason 20260320 end Map packTask = UtilMap.map( "textField_mecmytpr, textField_mifp03eo, textField_mjr129o4, selectField_me2f7tw4, numberField_mkosp94h, numberField_mifp03el, " + "numberField_mmmwu4cg, " + //研发部订单需求数量 add by Jason 20260312 "numberField_mmmwu4ci, ", //总采购数量 add by Jason 20260312 UtilMap.getString(orderMap, "textField_mizmmf8k"), UtilMap.getString(orderMap, "textField_mizmmf8j"), UtilMap.getString(orderMap, "textField_meqqj4wb"), UtilMap.getString(orderMap, "textField_meqqj4wa"), setsValue, setsValue, devNum, //研发部订单需求数量 add by Jason 20260320 allSupplyNum //总采购数量 add by Jason 20260320 ); packOrderData.computeIfAbsent(supplier, k -> new ArrayList<>()).add(packTask); } for (String key:packOrderData.keySet()){ List packdetails=packOrderData.get(key); Map packTaskorder=UtilMap.map("textField_mifp03ew, selectField_mifp03e7, tableField_mifp03em, selectField_mkf6qv9b, selectField_ml0l206x",tbProjectId,"待排期",packdetails,"成品包装","包装"); packTaskorder.put("associationFormField_mifp03e9",projectOrder); packTaskorder.put("associationFormField_mifp03e8",UtilMap.getAssFieldValue(data,"associationFormField_mdy7w1wn_id")); // 项目 packTaskorder.put("textField_mifp03e6",pName+"-"+key+"-包装"); packTaskorder.put("textField_mimwnauk",pId); packTaskorder.put("textField_mizs3841",pMainId); packTaskorder.put("employeeField_mifp03eu",Arrays.asList(mchDDIdMap.get(key))); List gysList = (List) ydClient.queryData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_GYS_YW).searchCondition( JSONObject.toJSONString(Arrays.asList(new YDSearch("textField_mec6lku3",key,"供应商简称", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ))) ).build(), YDConf.FORM_QUERY.retrieve_list).getData(); if(gysList!=null&&gysList.size()>0){ List gys=UtilMap.getAssFieldValue(UtilMap.getMap(gysList.get(0),"formData"),"associationFormField_mec6lku4_id"); packTaskorder.put("associationFormField_mifp03ea",gys); packTaskorder.put("textField_mifp03ez",gys.get(0).subTitle); // 供应商编号 } packTaskorder.put("textField_mmikzhlb","包装"); //里程碑 add by Jason 20260309 ydClient.operateData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_CGTASK).formDataJson(JSONObject.toJSONString(packTaskorder)).build(), YDConf.FORM_OPERATION.create); } return null; } private String getValue(Map map,String key,String s){ String value=UtilMap.getString(map,key); return value.length()==0?"":value+s; } private List saveTbTask(Map taskMap,List orderConf,Map cgDetail,List customfields,boolean isLang,List sonconf,String sonScenariofieldconfigId,String gysName,String pId,String pMainId,Map skuIdMap){ log.info("创建任务:{},是否区分语言{}",taskMap.get("content"),isLang); List recodTable=new ArrayList<>(); if (PublicUtil.isNull(taskMap,"executorId")){ taskMap.remove("executorId"); } String rdNum; //研发部订单需求数量 add by Jason 20260312 for(Map map: orderConf){ Map tMap=new HashMap(); tMap.putAll(taskMap); String confSeries=UtilMap.getString_first(map,"textField_meqqj4wa","textField_mesc7nvf");// 系列 if(!UtilMap.getString(cgDetail,"selectField_me2f7tw4").equals(confSeries)){ continue; // 系列不匹配 } List newCustomfields=new ArrayList<>(customfields); String skuId=String.valueOf(skuIdMap.get(UtilMap.getString(cgDetail,"selectField_mizsccds"))); String reportId =UtilMap.getString(cgDetail,"textField_me2f7tvn");// 文档编号 skuId=PublicUtil.isNull(skuId)?"000":skuId; String sku="2"+skuId+UtilMap.getString_first(map,"textField_mizmmf8h","textField_mizmmf8m")+reportId.substring(reportId.length()-2);// sku 添加系列编号及文档编号 String lang=UtilMap.getString(map,"textField_meqqj4wb"); // 语言 if(isLang){ if(PublicUtil.isNull(lang)){ lang="不区分"; sku=sku+"AL"; // sku 不区分语言 } tMap.put("content",tMap.get("content")+"-"+lang); newCustomfields.add(tbConf.assembleCustomFieldName("语言",lang)); sku=sku+UtilMap.getString(map,"textField_mizmmf8i"); // sku 区分语言 }else{ lang ="不区分"; sku=sku+"AL"; // sku 不区分语言 } sku=sku+pMainId.substring(pMainId.length()-10); // sku 添加项目号 String value=UtilMap.getString_first(map,"numberField_meqqj4wd","numberField_mesc7nvi"); // 数量 newCustomfields.add(tbConf.assembleCustomFieldName("订单数量",value)); newCustomfields.add(tbConf.assembleCustomFieldName("配件编号",sku)); tMap.put("customfields",newCustomfields); log.info("最终任务名称:{},详细参数:{}",tMap.get("content"),tMap); Map result=tbTask.createTask(tbConf.getOperatorId(), tMap);// 更新任务所属任务列表 Map recod=new HashMap(cgDetail); rdNum = UtilMap.getString(cgDetail,"numberField_mmke3fdc"); //研发部订单需求数量 add by Jason 20260312 recod.putAll( UtilMap.map( "textField_mecmytpr, textField_mecmytps, textField_mecmytpt, numberField_mifp03el, " + "numberField_mmmwu4cg, " + //研发部订单需求数量 add by Jason 20260312 "textField_mifp03eo, textField_miib17jx, textField_mizvc5oj, textField_mjr129o4, numberField_mkosp94h, numberField_me2f7tw0", result.get("content"),result.get("taskId"),"未开始",value, rdNum, //研发部订单需求数量 add by Jason 20260312 sku,pId,result.get("taskId"),lang,value,UtilMap.getString(map, "numberField_mkf4bc4j"))); recodTable.add(recod); // for (String son:sonconf){ // Map sonMap=new HashMap(); // sonMap.put("content",tMap.get("content")+"/"+son.replace("/","-")); // if(taskMap.containsKey("executorId")){ // sonMap.put("executorId",taskMap.get("executorId")); // } // sonMap.put("stageId",taskMap.get("stageId")); // sonMap.put("tasklistId",taskMap.get("tasklistId")); // sonMap.put("scenariofieldconfigId",sonScenariofieldconfigId); // sonMap.put("parentTaskId",result.get("taskId")); // List soncustomfields=new ArrayList(); // soncustomfields.add(tbConf.assembleCustomFieldName("SKU类型",son)); // soncustomfields.add(tbConf.assembleCustomFieldName("工厂(SKU供应商)",gysName)); // soncustomfields.add(tbConf.assembleCustomFieldName("订单数量",value)); // sonMap.put("customfields",soncustomfields); // sonMap.put("projectId",taskMap.get("projectId")); // Map sonResult=tbTask.createTask(tbConf.getOperatorId(), sonMap); // log.info("子任务名称:{}",sonResult.get("content")); // } } if(recodTable.size()<1){ log.info("该任务未匹配上区分规则:{}",taskMap.get("content")); } return recodTable; } @Override public Map taskStateChange(String taskIds,String tfsName) { String[] tasks=taskIds.split(","); for(String taskId:tasks){ tbTask.updateTaskFlowStatusByName(taskId,tbConf.getOperatorId(),tfsName,""); } return Collections.emptyMap(); } @Override public void taskCount(String pid, String tbPid, String fid, String taskTypeName, String projectState) { // 1.1循环所有项目 // 1.2查询项目的自定义字段 List tidList=tbProject.queryProjectCustomField(tbPid,UtilMap.map("q","项目编号")); String cfId=String.valueOf(tidList.get(0).get("id")); // 项目编号ID // 2.查询该项目的工作流 String taskflowId=_getTaskType(tbPid,taskTypeName,"taskflowId"); // 任务工作流ID // 2.1循环工作流所有状态 List tfsList=tbProject.queryProjectCustomFlowStatus(tbPid,"",taskflowId,UtilMap.map("","")); Map updateMap=new HashMap(); for(Map map:tfsList){ // 3.查询该状态下任务数量 String q="tfsId = "+String.valueOf(map.get("id"))+" AND cf:"+cfId+"='"+pid+"'"; int count=tbProject.taskCount(tbPid,q,false); log.info("{}阶段数量:{}",map.get("name"),count); updateMap.put(TFNAME_YDKEY.get(map.get("name")),count); } if(projectState.equals("立项阶段")){ updateMap.put("selectField_me2hylde","样品阶段"); }else if(projectState.equals("样品阶段")&&!isYp(updateMap,Arrays.asList("未开始","白样","制版","产前样"))){ updateMap.put("selectField_me2hylde","生产阶段"); } ydClient.operateData(YDParam.builder().formInstId(fid).updateFormDataJson(JSONObject.toJSONString(updateMap)).useLatestFormSchemaVersion(true).build(), YDConf.FORM_OPERATION.update); } private boolean isYp(Map updateMap,List list){ for (String key:list){ if(updateMap.containsKey(TFNAME_YDKEY.get(key))){ if(UtilMap.getInt(updateMap,TFNAME_YDKEY.get(key))>0){ return true; } } } return false; } private void saveRecod(Map formData,String tbProjectId,List recodTable){ Map map=new HashMap(); map.put("textField_me87x1nz",formData.get("textField_me87x1nz")); map.put("textField_me2hyldc",formData.get("textField_me2hyldc")); map.put("textField_me9n24kq",formData.get("textField_me9n24kq")); map.put("textField_me2hyldb",formData.get("textField_me2hyldb")); map.put("selectField_mdf997wp",formData.get("selectField_mdf997wp")); map.put("selectField_me2hylde",formData.get("selectField_me2hylde")); map.put("checkboxField_me9n37rs",formData.get("checkboxField_me9n37rs")); map.put("associationFormField_me9n24kk",UtilMap.getAssFieldValue(formData,"associationFormField_me9n24kk_id")); map.put("textField_mecmytpo",tbProjectId); map.put("tableField_mecmytpp",recodTable); ydClient.operateData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_RECOD).formDataJson(JSONObject.toJSONString(map)).build(), YDConf.FORM_OPERATION.create); } private List getCustomfields(Map CUSTFIELD_TEXT,Map tableItem){ List customfields=new ArrayList<>(); for (String key : CUSTFIELD_TEXT.keySet()) { customfields.add(tbConf.assembleCustomFieldName(key,UtilMap.getString(tableItem,CUSTFIELD_TEXT.get(key)))); } return customfields; } private String _getProjectRoleId(String projectId, String roleName) { List roles = tbProject.queryProjectRoles(projectId); Optional optional = roles.stream().filter(item -> roleName.equals(item.get("name"))).findAny(); McException.assertAccessException(!optional.isPresent(), roleName + ": 项目角色不存在"); return UtilMap.getString((Map) optional.get(), "id"); } private static List getCustFiledValueId(List ssUserId){ return ssUserId.stream().map(item->{ return UtilMap.map("id, title",item,item); }).collect(Collectors.toList()); } private static List getCustFiledValueTitle(List values){ return values.stream().map(item->{ return UtilMap.map("title",item); }).collect(Collectors.toList()); } String _getTaskType(String projectId, String taskTypeName) { return _getTaskType(projectId,taskTypeName,"id"); } String _getTaskType(String projectId, String taskTypeName,String key) { List customFlowStatus = tbProject.queryProjectTaskType(projectId, UtilMap.map("q", taskTypeName)); // 7.10 避免模糊匹配 customFlowStatus = customFlowStatus.stream().filter(item -> taskTypeName.equals(UtilMap.getString(item, "name"))).collect(Collectors.toList()); McException.assertAccessException(customFlowStatus.isEmpty(), "工作流名称未匹配"); return String.valueOf(customFlowStatus.get(0).get(key)); } String _getTaskList(String projectId, String taskListName) { List customFlowStatus = tbProject.queryProjectTaskList(projectId, UtilMap.map("q", taskListName)); // 7.10 避免模糊匹配 customFlowStatus = customFlowStatus.stream().filter(item -> taskListName.equals(UtilMap.getString(item, "title"))).collect(Collectors.toList()); McException.assertAccessException(customFlowStatus.isEmpty(), "任务分组名称未匹配"); return String.valueOf(customFlowStatus.get(0).get("id")); } }