| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643 |
- 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<Map> 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<Map> recodList = (List<Map>) 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<String> pmUserId = (List<String>) UtilMap.getList(data, "employeeField_me2hyld8_id");// 项目经理
- List<String> ssUserId = (List<String>) UtilMap.getList(data, "employeeField_me2hyld9_id");// 业务
- List<String> qeUserId = (List<String>) UtilMap.getList(data, "employeeField_me9n24ka_id");// QE
- pmUserId=tbUser.getUserIds(pmUserId, false);
- ssUserId=tbUser.getUserIds(ssUserId, false);
- List<String> programUsers=new ArrayList<>();
- programUsers.addAll(pmUserId);
- programUsers.addAll(ssUserId);
- programUsers.remove(tbConf.getOperatorId());
- Set<String> 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<Map> 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<UtilMap.assDetail> 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<Map> orderLangConf=UtilMap.getList(orderData,"tableField_meqqj4we");// 语言配置
- List<Map> xlConf=UtilMap.getList(orderData,"tableField_mesc7nvj");// 系列源配置
- // 子任务拆分数据
- List<Map> sonConfData= ydService.queryDetails(YDParam.builder().formInstanceId("FINST-X1B66Y81IUFY9U417XIUE99I8YV93HGMJ8WEMF").formUuid(EastarParam.YD_FORMUUID_SONCONF).tableFieldId("tableField_mew7d9f3").build());// 全品类配件表
- Map<String,Map<String,List<String>>> sonConf= ConfigDataProcessor.processConfigData(sonConfData);
- List<Map> skuTypeListConfigData = ydService.queryAllFormData(YDParam.builder().formUuid(EastarParam.YD_FORMUUID_SKU_TYPE).build());
- Map skuIdMap=ConfigDataProcessor.skuTypeListConfigData(skuTypeListConfigData);
- // 成员处理
- qeUserId=tbUser.getUserIds(qeUserId, false);
- List<Map> mchTable= UtilMap.getList(data,"tableField_mec6juik");// 跟单
- List<String> mchList=new ArrayList<>();
- Map<String,String> mchMap=new HashMap<>();
- Map<String,String> mchDDIdMap=new HashMap<>();
- Map<String,String> 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<String> userList = new ArrayList<>();
- userList.addAll(pmUserId); // 添加 list1 的所有元素
- userList.addAll(ssUserId);
- userList.addAll(qeUserId);
- userList.addAll(mchList);
- Set<String> 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<String> 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<Map> table= ydService.queryDetails(YDParam.builder().formInstanceId(formInstId).formUuid(EastarParam.YD_FORMUUID_PROJECT).tableFieldId("tableField_mdy8x198").build());// 全品类配件表
- List<Map> recodTable = new ArrayList<>();
- List<String> jds=UtilMap.getList(data,"checkboxField_me9n37rs");
- Map<String,List<Map>> gysOrderData=new HashMap<>(); // 采购需求数据 按照供应商拆分BOM
- Map<String,String> 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<Map> customfields=getCustomfields(EastarParam.CUSTFIELD_ACCE,map);
- customfields.addAll(maincustomfields);
- List<Map> result=null;
- boolean isLang="是".equals(UtilMap.getString(map,"radioField_me2f7tvx"));
- String type=UtilMap.getString(map,"selectField_me2f7tvk"); // 配件大类
- Map<String,List<String>> sonconfs=sonConf.get(type);
- List<String> sonconf=new ArrayList<>();
- if(sonconfs!=null&&sonconfs.size()>0){
- for(String str:jds){
- if(sonconfs.containsKey(str)){
- List<String> 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<Map> projectPlan=UtilMap.getList(data,"tableField_mgu5rm3e");// 项目计划
- List<String> 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<Map> arr=gysOrderData.get(key);
- List<Map> modifiedList = new ArrayList<>();
- String procuremenType ="";
- String taskStatus ="";
- String taskType="";
- for (Map<String, Object> 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<String, Object> 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<String, Object> 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<Map> gysList = (List<Map>) 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<UtilMap.assDetail> 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<Map> 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<Map> savePackTask(String tbProjectId, List <Map> orderLangConf,Map data,String pName,String pId,String pMainId,List projectOrder,Map mchDDIdMap,Map<String,String> seriesDevNumMap) {
- Map<String, List<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<Map> 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<Map> gysList = (List<Map>) 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<UtilMap.assDetail> 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<Map> saveTbTask(Map taskMap,List<Map> orderConf,Map cgDetail,List<Map> customfields,boolean isLang,List<String> sonconf,String sonScenariofieldconfigId,String gysName,String pId,String pMainId,Map skuIdMap){
- log.info("创建任务:{},是否区分语言{}",taskMap.get("content"),isLang);
- List<Map> 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<Map> 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<Map> 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<Map> 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<String> 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<Map> 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<Map> getCustomfields(Map<String,String> CUSTFIELD_TEXT,Map tableItem){
- List<Map> 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<Map> 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<Map> getCustFiledValueId(List<String> ssUserId){
- return ssUserId.stream().map(item->{
- return UtilMap.map("id, title",item,item);
- }).collect(Collectors.toList());
- }
- private static List<Map> getCustFiledValueTitle(List<String> 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<Map> 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<Map> 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"));
- }
- }
|