LingmingguangziServiceImpl.java 79 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751
  1. package com.malk.lingmingguangzi.service;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.http.HttpRequest;
  4. import cn.hutool.http.HttpResponse;
  5. import cn.hutool.http.HttpUtil;
  6. import cn.hutool.json.JSONUtil;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONArray;
  9. import com.alibaba.fastjson.JSONObject;
  10. import com.auth0.jwt.JWT;
  11. import com.auth0.jwt.algorithms.Algorithm;
  12. import com.fasterxml.jackson.core.JsonProcessingException;
  13. import com.fasterxml.jackson.core.type.TypeReference;
  14. import com.fasterxml.jackson.databind.ObjectMapper;
  15. import com.google.common.base.Strings;
  16. import com.malk.lingmingguangzi.utils.SkipHttpsUtil;
  17. import com.malk.server.aliwork.YDConf;
  18. import com.malk.server.aliwork.YDParam;
  19. import com.malk.server.common.McR;
  20. import com.malk.server.dingtalk.DDR_New;
  21. import com.malk.server.teambition.TBConf;
  22. import com.malk.server.teambition.TBR;
  23. import com.malk.service.aliwork.YDClient;
  24. import com.malk.service.aliwork.YDService;
  25. import com.malk.service.dingtalk.DDClient;
  26. import com.malk.utils.UtilHttp;
  27. import com.malk.utils.UtilMap;
  28. import com.malk.utils.UtilToken;
  29. import lombok.extern.slf4j.Slf4j;
  30. import org.apache.commons.lang3.StringEscapeUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.apache.commons.lang3.time.DateUtils;
  33. import org.apache.http.HttpEntity;
  34. import org.apache.http.client.HttpClient;
  35. import org.apache.http.client.methods.HttpGet;
  36. import org.apache.http.client.methods.HttpPost;
  37. import org.apache.http.entity.ContentType;
  38. import org.apache.http.entity.mime.MultipartEntityBuilder;
  39. import org.apache.http.impl.client.HttpClients;
  40. import org.apache.http.util.EntityUtils;
  41. import org.springframework.beans.factory.annotation.Autowired;
  42. import org.springframework.beans.factory.annotation.Value;
  43. import org.springframework.stereotype.Service;
  44. import java.io.*;
  45. import java.net.HttpURLConnection;
  46. import java.net.URL;
  47. import java.net.URLEncoder;
  48. import java.nio.charset.StandardCharsets;
  49. import java.nio.file.Files;
  50. import java.util.*;
  51. import java.util.regex.Matcher;
  52. import java.util.regex.Pattern;
  53. import java.util.stream.Collectors;
  54. @Service
  55. @Slf4j
  56. public class LingmingguangziServiceImpl implements LingmingguangziService {
  57. @Autowired
  58. private YDClient ydClient;
  59. @Autowired
  60. private YDConf ydConf;
  61. @Autowired
  62. private TBConf tbConf;
  63. @Autowired
  64. private DDClient ddClient;
  65. @Autowired
  66. private YDService ydService;
  67. @Value(value = "${teambition.TemplateId}")
  68. private String templateId;
  69. @Value(value = "${erp_sz.url}")
  70. private String erpUrlSz;
  71. @Value(value = "${erp_sz.username}")
  72. private String userNameSz;
  73. @Value(value = "${erp_sz.password}")
  74. private String passwordSz;
  75. @Value(value = "${erp_sz.filePath}")
  76. private String filePathSz;
  77. @Value(value = "${erp_xg.url}")
  78. private String erpUrlXg;
  79. @Value(value = "${erp_xg.username}")
  80. private String userNameXg;
  81. @Value(value = "${erp_xg.password}")
  82. private String passwordXg;
  83. @Value(value = "${erp_xg.filePath}")
  84. private String filePathXg;
  85. private final Object $lock = new Object[0];
  86. private static final Long EXPIRES_IN = 7200000L;
  87. private static final String TASK_URL_PREFIX = "https://www.teambition.com/task/";
  88. private static final List<String> STAGES = new ArrayList<>();
  89. static {
  90. STAGES.add("TR/TO阶段");
  91. STAGES.add("EV产品开发验证");
  92. STAGES.add("DV过程开发验证");
  93. STAGES.add("PV量产爬坡验证");
  94. STAGES.add("MP大批量生产");
  95. }
  96. @Override
  97. public McR test() {
  98. log.info("test");
  99. Map map = new HashMap();
  100. String aaa = map.get("aaa").toString();
  101. return McR.success();
  102. }
  103. @Override
  104. public McR getCustomerQuestionnaireCount(Long start, Long end) {
  105. YDParam.YDParamBuilder ydParamBuilder = YDParam.builder()
  106. .formUuid("FORM-5CC9748D283C49FC8C8A86EE0529730A4I1D");
  107. if (start != null && end != null){
  108. String startDate = DateUtil.format(new Date(start), "yyyy-MM-dd HH:mm:ss");
  109. String endDate = DateUtil.format(DateUtil.offsetDay(new Date(end),1), "yyyy-MM-dd HH:mm:ss");
  110. ydParamBuilder.createFromTimeGMT(startDate);
  111. ydParamBuilder.createToTimeGMT(endDate);
  112. }
  113. //车载--------------------------------------------
  114. DDR_New ddrNew = ydClient.queryData(ydParamBuilder.build(), YDConf.FORM_QUERY.retrieve_list);
  115. List<Map> dataList = (List<Map>) ddrNew.getData();
  116. int importantCustomerCount = 0;
  117. int orderCustomerCount = 0;
  118. int strategicCustomerCount = 0;
  119. for (Map data : dataList) {
  120. Map formData = (Map) data.get("formData");
  121. String customerLevel = String.valueOf(formData.get("selectField_lx4g7em6"));
  122. switch (customerLevel){
  123. case "重要客户": importantCustomerCount++; break;
  124. case "普通客户": orderCustomerCount++; break;
  125. case "战略客户": strategicCustomerCount++; break;
  126. }
  127. }
  128. Map<String,Integer> result = new HashMap<>();
  129. result.put("importantCustomerCount", importantCustomerCount);
  130. result.put("orderCustomerCount", orderCustomerCount);
  131. result.put("strategicCustomerCount", strategicCustomerCount);
  132. return McR.success(result);
  133. }
  134. @Override
  135. public McR getCustomerQuestionnaireCount2(Long start, Long end) {
  136. YDParam.YDParamBuilder ydParamBuilder = YDParam.builder()
  137. .formUuid("FORM-D4587ABF101246F6B17635C8CB178B6BGTAW");
  138. if (start != null && end != null){
  139. String startDate = DateUtil.format(new Date(start), "yyyy-MM-dd HH:mm:ss");
  140. String endDate = DateUtil.format(DateUtil.offsetDay(new Date(end),1), "yyyy-MM-dd HH:mm:ss");
  141. ydParamBuilder.createFromTimeGMT(startDate);
  142. ydParamBuilder.createToTimeGMT(endDate);
  143. }
  144. //商务端
  145. DDR_New ddrNew = ydClient.queryData(ydParamBuilder.build(), YDConf.FORM_QUERY.retrieve_list);
  146. List<Map> dataList = (List<Map>) ddrNew.getData();
  147. int businessCustomerCount = 0;
  148. int technologyCustomerCount = 0;
  149. int qualityCustomerCount = 0;
  150. for (Map data : dataList) {
  151. Map formData = (Map) data.get("formData");
  152. String project = formData.get("selectField_lwragwwz").toString();//项目
  153. switch (project) {
  154. case "交付":businessCustomerCount++;break;
  155. case "技术":technologyCustomerCount++;break;
  156. case "质量":qualityCustomerCount++;break;
  157. }
  158. }
  159. Map<String,Integer> result = new HashMap<>();
  160. result.put("businessCustomerCount",businessCustomerCount);
  161. result.put("technologyCustomerCount",technologyCustomerCount);
  162. result.put("qualityCustomerCount",qualityCustomerCount);
  163. return McR.success(result);
  164. }
  165. @Override
  166. public McR addCustomer(Map map) {
  167. if (Objects.isNull(map.get("formInstId"))){
  168. return McR.errorParam("formInstId不能为空");
  169. }
  170. String formInstId = map.get("formInstId").toString();
  171. DDR_New ddrNew = ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id);
  172. Map formData = ddrNew.getFormData();
  173. Map<String,Object> body = new HashMap<>();
  174. //查询erp账号
  175. Map originator = ddrNew.getOriginator();
  176. String userId = originator.get("userId").toString();
  177. List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
  178. .formUuid("FORM-65789BACB6F64B2C880875260026A6EACTOB")
  179. .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_m0ypgxec", userId)))
  180. .build(), YDConf.FORM_QUERY.retrieve_list).getData();
  181. if (!data.isEmpty()){
  182. Map formData2 = (Map) data.get(0).get("formData");
  183. body.put("createBy", formData2.get("textField_m0ypgxeb").toString());
  184. }
  185. body.put("customerCode", formData.get("textField_lwpqbm7a").toString());
  186. body.put("customerName", formData.get("textField_lwpqbm7b").toString());
  187. body.put("recConditionCode", formData.get("textField_m3o22635").toString());
  188. body.put("payCurrencyCode", formData.get("textField_m0yq620t").toString());
  189. //客户简称
  190. if (Objects.nonNull(formData.get("textField_lwpqbm7c"))){
  191. body.put("customerShortName", formData.get("textField_lwpqbm7c").toString());
  192. }
  193. //客户英文名
  194. if (Objects.nonNull(formData.get("textField_lwpqbm7d"))){
  195. body.put("customerEnglishName", formData.get("textField_lwpqbm7d").toString());
  196. }
  197. //地址
  198. if (Objects.nonNull(formData.get("textField_lwpqbm7t"))){
  199. body.put("address", formData.get("textField_lwpqbm7t").toString());
  200. }
  201. //联系人
  202. if (Objects.nonNull(formData.get("textField_lwpqbm7u"))){
  203. body.put("linkMan", formData.get("textField_lwpqbm7u").toString());
  204. }
  205. //联系电话
  206. if (Objects.nonNull(formData.get("textField_lwpqbm7v"))){
  207. body.put("linkNumber", formData.get("textField_lwpqbm7v").toString());
  208. }
  209. //内/外销
  210. if (Objects.nonNull(formData.get("selectField_lwpqbm82"))){
  211. String makCustomerType = formData.get("selectField_lwpqbm82").toString();
  212. switch (makCustomerType){
  213. case "内销": body.put("makCustomerType", "001");break;
  214. case "外销":body.put("makCustomerType", "002");break;
  215. }
  216. }
  217. //备注
  218. if (Objects.nonNull(formData.get("textareaField_lwpqbm7x"))){
  219. body.put("comments", formData.get("textareaField_lwpqbm7x").toString());
  220. }
  221. //erp环境
  222. String type = formData.get("selectField_m3fgkfz9").toString();
  223. String erpUrl = getErpUrl(type);
  224. Map<String, Object> result = post(erpUrl + "pws/mak/makCustomer/add", null, getHeader(type), body);
  225. if ((boolean) result.get("success")){
  226. return McR.success();
  227. }else {
  228. return McR.errorUnknown(result.get("message").toString());
  229. }
  230. }
  231. private String getErpUrl(String type) {
  232. String erpUrl = "";
  233. if ("深圳".equals(type)){
  234. erpUrl = erpUrlSz;
  235. }else {
  236. erpUrl = erpUrlXg;
  237. }
  238. return erpUrl;
  239. }
  240. @Override
  241. public McR updateCustomer(Map map) {
  242. if (Objects.isNull(map.get("formInstId"))){
  243. return McR.errorParam("formInstId不能为空");
  244. }
  245. String formInstId = map.get("formInstId").toString();
  246. DDR_New ddrNew = ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id);
  247. Map formData = ddrNew.getFormData();
  248. Map<String,Object> body = new HashMap<>();
  249. //查询erp账号
  250. Map originator = ddrNew.getOriginator();
  251. String userId = originator.get("userId").toString();
  252. List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
  253. .formUuid("FORM-65789BACB6F64B2C880875260026A6EACTOB")
  254. .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_m0ypgxec", userId)))
  255. .build(), YDConf.FORM_QUERY.retrieve_list).getData();
  256. if (!data.isEmpty()){
  257. Map formData2 = (Map) data.get(0).get("formData");
  258. body.put("updateBy", formData2.get("textField_m0ypgxeb").toString());
  259. }
  260. body.put("customerCode", formData.get("textField_lwpqbm7a").toString());
  261. body.put("customerName", formData.get("textField_lwpqbm7b").toString());
  262. body.put("recConditionCode", formData.get("textField_m3o22635").toString());
  263. body.put("payCurrencyCode", formData.get("textField_m0yq620t").toString());
  264. //客户简称
  265. if (Objects.nonNull(formData.get("textField_lwpqbm7c"))){
  266. body.put("customerShortName", formData.get("textField_lwpqbm7c").toString());
  267. }
  268. //客户英文名
  269. if (Objects.nonNull(formData.get("textField_lwpqbm7d"))){
  270. body.put("customerEnglishName", formData.get("textField_lwpqbm7d").toString());
  271. }
  272. //地址
  273. if (Objects.nonNull(formData.get("textField_lwpqbm7t"))){
  274. body.put("address", formData.get("textField_lwpqbm7t").toString());
  275. }
  276. //联系人
  277. if (Objects.nonNull(formData.get("textField_lwpqbm7u"))){
  278. body.put("linkMan", formData.get("textField_lwpqbm7u").toString());
  279. }
  280. //联系电话
  281. if (Objects.nonNull(formData.get("textField_lwpqbm7v"))){
  282. body.put("linkNumber", formData.get("textField_lwpqbm7v").toString());
  283. }
  284. //内/外销
  285. if (Objects.nonNull(formData.get("selectField_lwpqbm82"))){
  286. String makCustomerType = formData.get("selectField_lwpqbm82").toString();
  287. switch (makCustomerType){
  288. case "001": body.put("makCustomerType", "001");break;
  289. case "002":body.put("makCustomerType", "002");break;
  290. }
  291. }
  292. //备注
  293. if (Objects.nonNull(formData.get("textareaField_lwpqbm7x"))){
  294. body.put("comments", formData.get("textareaField_lwpqbm7x").toString());
  295. }
  296. //erp环境
  297. String type = formData.get("selectField_m3fgkfz9").toString();
  298. Map<String, Object> result = put(getErpUrl(type) + "pws/mak/makCustomer/customEdit", null, getHeader(type), body);
  299. if ((boolean) result.get("success")){
  300. return McR.success();
  301. }else {
  302. return McR.errorUnknown(result.get("message").toString());
  303. }
  304. }
  305. @Override
  306. public McR getProductDeliveryStatus(String keyword,int pageNo,int pageSize,String type) {
  307. Map<String,Object> param = new HashMap<>();
  308. //物料编码
  309. param.put("pageNo",pageNo);
  310. param.put("pageSize",pageSize);
  311. param.put("partnumber",keyword);
  312. Map<String,Object> res = get(getErpUrl(type) + "pws/pdm/pdmProductForm/list", param, getHeader(type));
  313. Map result = (Map) res.get("result");
  314. List<Map> data = (List<Map>) result.get("records");
  315. if (data.isEmpty()){
  316. //物料名称
  317. param.remove("partnumber");
  318. param.put("partname",keyword);
  319. res = get(getErpUrl(type) + "pws/pdm/pdmProductForm/list", param, getHeader(type));
  320. result = (Map) res.get("result");
  321. data = (List<Map>) result.get("records");
  322. }
  323. if (data.isEmpty()){
  324. //物料型号
  325. param.remove("partname");
  326. param.put("pmodel",keyword);
  327. res = get(getErpUrl(type) + "pws/pdm/pdmProductForm/list", param, getHeader(type));
  328. result = (Map) res.get("result");
  329. data = (List<Map>) result.get("records");
  330. }
  331. if (data.isEmpty()){
  332. //物料规格
  333. param.remove("pmodel");
  334. param.put("pstandard",keyword);
  335. res = get(getErpUrl(type) + "pws/pdm/pdmProductForm/list", param, getHeader(type));
  336. result = (Map) res.get("result");
  337. data = (List<Map>) result.get("records");
  338. }
  339. if (data.isEmpty()){
  340. //客户型号
  341. param.remove("pstandard");
  342. param.put("customerModel",keyword);
  343. res = get(getErpUrl(type) + "pws/pdm/pdmProductForm/list", param, getHeader(type));
  344. result = (Map) res.get("result");
  345. data = (List<Map>) result.get("records");
  346. }
  347. //交付名称
  348. if (data.isEmpty()){
  349. param.remove("customerModel");
  350. param.put("saleCode",keyword);
  351. res = get(getErpUrl(type) + "pws/pdm/pdmProductForm/list", param, getHeader(type));
  352. result = (Map) res.get("result");
  353. data = (List<Map>) result.get("records");
  354. }
  355. //交付说明
  356. if (data.isEmpty()){
  357. param.remove("saleCode");
  358. param.put("saleName",keyword);
  359. res = get(getErpUrl(type) + "pws/pdm/pdmProductForm/list", param, getHeader(type));
  360. result = (Map) res.get("result");
  361. data = (List<Map>) result.get("records");
  362. }
  363. int totalCount = (int) result.get("total");
  364. int currentPage = (int) result.get("current");
  365. Map map = new HashMap();
  366. map.put("data",data);
  367. map.put("totalCount",totalCount);
  368. map.put("currentPage",currentPage);
  369. return McR.success(map);
  370. }
  371. @Override
  372. public McR addSaleOrder(Map map) {
  373. if (Objects.isNull(map.get("formInstId"))){
  374. McR.errorParam("formInstId不能为空");
  375. }
  376. String formInstId = map.get("formInstId").toString();
  377. DDR_New ddrNew = ydClient.queryData(YDParam.builder().formInstId(formInstId)
  378. .build(), YDConf.FORM_QUERY.retrieve_id);
  379. Map formData = ddrNew.getFormData();
  380. //erp环境
  381. String type = formData.get("selectField_m3fgkfz9").toString();
  382. //新增销售订单
  383. Map body = new HashMap();
  384. //查询erp账号
  385. Map originator = ddrNew.getOriginator();
  386. String userId = originator.get("userId").toString();
  387. List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
  388. .formUuid("FORM-65789BACB6F64B2C880875260026A6EACTOB")
  389. .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_m0ypgxec", userId)))
  390. .build(), YDConf.FORM_QUERY.retrieve_list).getData();
  391. if (!data.isEmpty()){
  392. Map formData2 = (Map) data.get(0).get("formData");
  393. body.put("createBy", formData2.get("textField_m0ypgxeb").toString());
  394. }
  395. body.put("customerCode",getString(formData.get("textField_ly5m36nw")));//客户编码
  396. String priority = getString(formData.get("selectField_lwpsp162"));//紧急级别
  397. switch (priority) {
  398. case "普通": body.put("priority", "D1_NORMAL "); break;
  399. case "紧急": body.put("priority", "D2_URGENT"); break;
  400. case "特紧急": body.put("priority", "D3_VERY_URGENT"); break;
  401. }
  402. String soType = getString(formData.get("selectField_lx2xj36n"));//合同类型
  403. if ("预测订单".equals(soType)){
  404. body.put("soType", "D2_FORECAST_ORDER");
  405. }else {
  406. body.put("soType", "D1_SALES_ORDER");
  407. }
  408. /*switch (soType) {
  409. case "常规订单":
  410. case "特殊订单":
  411. case "定制协议":
  412. case "采购框架":
  413. case "质量协议":
  414. case "demo/测试板/硬件":
  415. case "战略合作协议": body.put("soType", "D1_SALES_ORDER"); break;
  416. case "预测订单": body.put("soType", "D2_FORECAST_ORDER"); break;
  417. default: body.put("soType", "D1_SALES_ORDER"); break;
  418. }*/
  419. body.put("deliveryDate",getString(formData.get("textField_m0aduyx1")));//希望交期
  420. body.put("salesperson",getString(formData.get("textField_m0aduyx9")));//销售员
  421. body.put("payCurrencyCode",getString(formData.get("textField_m0aduyxa")));//币别
  422. body.put("ioDate",getString(formData.get("textField_m0aduyx2")));//单据日期
  423. body.put("comments",getString(formData.get("textareaField_lwpsp16e")));//备注
  424. //销售订单明细
  425. List<Map> list = (List<Map>) formData.get("tableField_lwpsp16f");
  426. List<Map> makSoDetailList = list.stream().map(map1 -> {
  427. Map detail = new HashMap();
  428. detail.put("productFormId",getString(map1.get("textField_m03o1x0m")));//交付状态id
  429. detail.put("saleCode",getString(map1.get("textField_lwpsp16g")));//交付名称
  430. detail.put("saleName",getString(map1.get("textField_lwpsp16h")));//交付说明
  431. detail.put("customerModel",getString(map1.get("textField_lwpsp16i")));//客户型号
  432. detail.put("partnumber",getString(map1.get("textField_lwpsp16k")));//物料编码
  433. detail.put("partname",getString(map1.get("textField_lwpsp16m")));//物料名称
  434. detail.put("pmodel",getString(map1.get("textField_lwpsp16o")));//物料型号
  435. detail.put("pstandard",getString(map1.get("textField_lwpsp16q")));//物料规格
  436. detail.put("stationCode",getString(map1.get("textField_m053iuol")));//工序编码
  437. detail.put("waferQty",getString(map1.get("numberField_lwpsp16t")));//片数
  438. detail.put("qty",getString(map1.get("numberField_lwpsp16v")));//数量
  439. detail.put("quotation",getString(map1.get("numberField_lwpsp172")));//未税单价
  440. detail.put("subTotal",getString(map1.get("numberField_lwpz9exp")));//未税总价
  441. detail.put("taxRate",getString(map1.get("numberField_m053iuom")));//税率
  442. detail.put("taxQuotation",getString(map1.get("numberField_lwpsp175")));//含税单价
  443. detail.put("taxSubtotal",getString(map1.get("numberField_lwpsp177")));//含税总价
  444. detail.put("die_model","");//
  445. return detail;
  446. }).collect(Collectors.toList());
  447. //附件
  448. List<Map> list2 = (List<Map>) formData.get("tableField_ly8fxusx");
  449. if (Objects.nonNull(list2)){
  450. List<Map> makSoFilesList = list2.stream().map(map1 -> {
  451. Map detail = new HashMap();
  452. String fileType = getString(map1.get("selectField_m0ls7yb8"));
  453. if (fileType.equals("合同")){
  454. detail.put("fileType","D1_CONTRACT");
  455. }else {
  456. detail.put("fileType","D2_TECHNICAL_DOC");
  457. }
  458. List<Map> fileList = (List<Map>) JSONArray.parse(String.valueOf(map1.get("attachmentField_ly8fxusz")));
  459. String ydDownloadUrl = fileList.get(0).get("downloadUrl").toString();
  460. String fileName = fileList.get(0).get("name").toString();
  461. fileName = convertChineseToUtf8Hex(fileName);
  462. if ("深圳".equals(type)){
  463. //将downloadurl下载到本地
  464. try {
  465. downloadFile(ydDownloadUrl, filePathSz,fileName);
  466. System.out.println("文件下载成功!");
  467. } catch (IOException e) {
  468. e.printStackTrace();
  469. }
  470. //上传附件
  471. try {
  472. detail.put("files",postWithFile(getErpUrl(type) + "pws/sys/common/upload", filePathSz + fileName,type));
  473. } catch (UnsupportedEncodingException e) {
  474. throw new RuntimeException(e);
  475. }
  476. }else {
  477. //将downloadurl下载到本地
  478. try {
  479. downloadFile(ydDownloadUrl, filePathXg,fileName);
  480. System.out.println("文件下载成功!");
  481. } catch (IOException e) {
  482. e.printStackTrace();
  483. }
  484. //上传附件
  485. try {
  486. detail.put("files",postWithFile(getErpUrl(type) + "pws/sys/common/upload", filePathXg + fileName,type));
  487. } catch (UnsupportedEncodingException e) {
  488. throw new RuntimeException(e);
  489. }
  490. }
  491. return detail;
  492. }).collect(Collectors.toList());
  493. body.put("makSoFilesList",makSoFilesList);
  494. }
  495. body.put("makSoDetailList",makSoDetailList);
  496. Map res = post(getErpUrl(type) + "pws/mak/makSalesOrder/add", null, getHeader(type), body);
  497. if (!(boolean)res.get("success")){
  498. return McR.errorUnknown(getString(res.get("message")));
  499. }
  500. String orderCode = getString(res.get("result"));
  501. //更新宜搭订单编号
  502. ydClient.operateData(YDParam.builder()
  503. .formInstId(formInstId)
  504. .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_m0alsjj1",orderCode)))
  505. .build(),YDConf.FORM_OPERATION.update);
  506. //如果是变更订单 则更新原订单
  507. String orderType = getString(formData.get("selectField_m3ii047l"));
  508. if ("变更订单".equals(orderType)){
  509. String jsonString = formData.get("associationFormField_m3ii047m_id").toString();
  510. String orderJsonString = StringEscapeUtils.unescapeJava(jsonString.substring(1, jsonString.length() - 1));
  511. List<Map> order =(List<Map>) JSONArray.parse(orderJsonString);
  512. String updateFormInstId = order.get(0).get("instanceId").toString();
  513. order.get(0).put("instanceId",formInstId);
  514. order.get(0).put("title",orderCode);
  515. Map updateMap = new HashMap();
  516. updateMap.put("associationFormField_m3ii047n",JSON.toJSONString(order));
  517. ydClient.operateData(YDParam.builder()
  518. .formInstId(updateFormInstId)
  519. .updateFormDataJson(JSON.toJSONString(updateMap))
  520. .build(),YDConf.FORM_OPERATION.update);
  521. }
  522. return McR.success();
  523. }
  524. public void downloadFile(String fileURL, String savePath , String fileName) throws IOException {
  525. //若是宜搭附件url 则需获得附件临时免登地址
  526. Map<String,Object> param = new HashMap<>();
  527. param.put("systemToken",ydConf.getSystemToken());
  528. param.put("userId","344749020127590108");//wzy
  529. param.put("fileUrl",fileURL);
  530. param.put("timeout",3600000);
  531. Map mcBody = new HashMap();
  532. mcBody.put("params",param);
  533. mcBody.put("headers",ddClient.initTokenHeader());
  534. mcBody.put("url","https://api.dingtalk.com/v1.0/yida/apps/temporaryUrls/" + ydConf.getAppType());
  535. mcBody.put("fileName",fileName);
  536. mcBody.put("downloadPath","/home/mc/mjs/lingmingguangzi/");
  537. // mcBody.put("downloadPath","d:\\");
  538. fileURL = UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/downloadFile",null,null,mcBody);
  539. // fileURL = UtilHttp.doPost("http://127.0.0.1:9900/api/mc/request/downloadFile",null,null,mcBody);
  540. // fileURL = ((DDR_New) UtilHttp.doGet("https://api.dingtalk.com/v1.0/yida/apps/temporaryUrls/" + ydConf.getAppType(), ddClient.initTokenHeader(), param, DDR_New.class)).getResult().toString();
  541. log.info("fileUrl:{}",fileURL);
  542. URL url = new URL(fileURL);
  543. HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
  544. int responseCode = httpConn.getResponseCode();
  545. // 检查HTTP响应代码是否为200
  546. if (responseCode == HttpURLConnection.HTTP_OK) {
  547. InputStream inputStream = httpConn.getInputStream();
  548. FileOutputStream outputStream = new FileOutputStream(savePath + fileName);
  549. byte[] buffer = new byte[4096];
  550. int bytesRead = -1;
  551. while ((bytesRead = inputStream.read(buffer)) != -1) {
  552. outputStream.write(buffer, 0, bytesRead);
  553. }
  554. outputStream.close();
  555. inputStream.close();
  556. } else {
  557. System.out.println("无法下载文件。HTTP响应代码: " + responseCode);
  558. }
  559. httpConn.disconnect();
  560. }
  561. @Override
  562. public McR updateClueStatus(Map map) {
  563. String formInstId = getString(map.get("formInstId"));
  564. if (!Strings.isNullOrEmpty(formInstId)) {
  565. Map formData = ydClient.queryData(YDParam.builder()
  566. .formInstId(formInstId)
  567. .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  568. String customerName = getString(formData.get("textField_lwpqbm7b"));
  569. String customerCode = getString(formData.get("serialNumberField_m4rv2j4i"));
  570. List<Map> clueList = (List<Map>) formData.get("tableField_m86r3mmn");
  571. if (Objects.nonNull(clueList) && !clueList.isEmpty()){
  572. for (Map clue : clueList) {
  573. String clueCode = getString(clue.get("textField_m86r3mmo"));
  574. //客户资源池关联表单
  575. List<Map> formControlList = new ArrayList<>();
  576. Map formControl = new HashMap();
  577. formControl.put("formType","receipt");
  578. formControl.put("formUuid","FORM-6F1E2DCFB3F5448EBDD4994551EBF690DVIT");
  579. formControl.put("instanceId",formInstId);
  580. formControl.put("appType","APP_MOIYIC856NRIBCMXEXVD");
  581. formControl.put("title",customerName);
  582. formControlList.add(formControl);
  583. Map updateFormData = new HashMap();
  584. updateFormData.put("associationFormField_m50t9d7y",formControlList);
  585. updateFormData.put("selectField_m2lh8c49","已转换");
  586. updateFormData.put("textField_m50vl2jt",customerCode);
  587. //更新线索
  588. ydClient.operateData(YDParam.builder()
  589. .formUuid("FORM-45C086AFF2F94D9BB056A15B34CD2BCAFQET")
  590. .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_m2mwp0iy",clueCode)))
  591. .formDataJson(JSONObject.toJSONString(updateFormData))
  592. .build(), YDConf.FORM_OPERATION.upsert);
  593. }
  594. }
  595. }else {
  596. McR.errorParam("formInstId不能为空");
  597. }
  598. return McR.success();
  599. }
  600. /* @Override
  601. public McR updateSaleOrder(Map map) {
  602. if (Objects.isNull(map.get("formInstId"))){
  603. McR.errorParam("formInstId不能为空");
  604. }
  605. String formInstId = map.get("formInstId").toString();
  606. DDR_New ddrNew = ydClient.queryData(YDParam.builder().formInstId(formInstId)
  607. .build(), YDConf.FORM_QUERY.retrieve_id);
  608. Map formData = ddrNew.getFormData();
  609. //erp环境
  610. String type = formData.get("selectField_m3fgkfz9").toString();
  611. //更新销售订单
  612. Map body = new HashMap();
  613. //查询erp账号
  614. Map originator = ddrNew.getOriginator();
  615. String userId = originator.get("userId").toString();
  616. List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
  617. .formUuid("FORM-65789BACB6F64B2C880875260026A6EACTOB")
  618. .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_m0ypgxec", userId)))
  619. .build(), YDConf.FORM_QUERY.retrieve_list).getData();
  620. if (!data.isEmpty()){
  621. Map formData2 = (Map) data.get(0).get("formData");
  622. body.put("updateBy", formData2.get("textField_m0ypgxeb").toString());
  623. }
  624. body.put("soCode",getString(formData.get("textField_m0alsjj1")));
  625. body.put("customerCode",getString(formData.get("textField_ly5m36nw")));//客户编码
  626. String priority = getString(formData.get("selectField_lwpsp162"));//紧急级别
  627. switch (priority) {
  628. case "普通": body.put("priority", "D1_NORMAL "); break;
  629. case "紧急": body.put("priority", "D2_URGENT"); break;
  630. case "特紧急": body.put("priority", "D3_VERY_URGENT"); break;
  631. }
  632. String soType = getString(formData.get("selectField_lx2xj36n"));//合同类型
  633. switch (soType) {
  634. case "常规订单":
  635. case "特殊订单":
  636. case "定制协议":
  637. case "采购框架":
  638. case "质量协议":
  639. case "战略合作协议": body.put("soType", "D1_SALES_ORDER"); break;
  640. case "预测订单": body.put("soType", "D2_FORECAST_ORDER"); break;
  641. default: body.put("soType", "D1_SALES_ORDER"); break;
  642. }
  643. body.put("deliveryDate",getString(formData.get("textField_m0aduyx1")));//希望交期
  644. body.put("salesperson",getString(formData.get("textField_m0aduyx9")));//销售员
  645. body.put("payCurrencyCode",getString(formData.get("textField_m0aduyxa")));//币别
  646. body.put("ioDate",getString(formData.get("textField_m0aduyx2")));//单据日期
  647. body.put("comments",getString(formData.get("textareaField_lwpsp16e")));//备注
  648. //销售订单明细
  649. List<Map> list = (List<Map>) formData.get("tableField_lwpsp16f");
  650. List<Map> makSoDetailList = list.stream().map(map1 -> {
  651. Map detail = new HashMap();
  652. detail.put("productFormId",getString(map1.get("textField_m03o1x0m")));//交付状态id
  653. detail.put("saleCode",getString(map1.get("textField_lwpsp16g")));//交付名称
  654. detail.put("saleName",getString(map1.get("textField_lwpsp16h")));//交付说明
  655. detail.put("customerModel",getString(map1.get("textField_lwpsp16i")));//客户型号
  656. detail.put("partnumber",getString(map1.get("textField_lwpsp16k")));//物料编码
  657. detail.put("partname",getString(map1.get("textField_lwpsp16m")));//物料名称
  658. detail.put("pmodel",getString(map1.get("textField_lwpsp16o")));//物料型号
  659. detail.put("pstandard",getString(map1.get("textField_lwpsp16q")));//物料规格
  660. detail.put("stationCode",getString(map1.get("textField_m053iuol")));//工序编码
  661. detail.put("waferQty",getString(map1.get("numberField_lwpsp16t")));//片数
  662. detail.put("qty",getString(map1.get("numberField_lwpsp16v")));//数量
  663. detail.put("quotation",getString(map1.get("numberField_lwpsp172")));//未税单价
  664. detail.put("subTotal",getString(map1.get("numberField_lwpz9exp")));//未税总价
  665. detail.put("taxRate",getString(map1.get("numberField_m053iuom")));//税率
  666. detail.put("taxQuotation",getString(map1.get("numberField_lwpsp175")));//含税单价
  667. detail.put("taxSubtotal",getString(map1.get("numberField_lwpsp177")));//含税总价
  668. detail.put("die_model","");//
  669. return detail;
  670. }).collect(Collectors.toList());
  671. //附件
  672. List<Map> list2 = (List<Map>) formData.get("tableField_ly8fxusx");
  673. if (Objects.nonNull(list2)){
  674. List<Map> makSoFilesList = list2.stream().map(map1 -> {
  675. Map detail = new HashMap();
  676. String fileType = getString(map1.get("selectField_m0ls7yb8"));
  677. if (fileType.equals("合同")){
  678. detail.put("fileType","D1_CONTRACT");
  679. }else {
  680. detail.put("fileType","D2_TECHNICAL_DOC");
  681. }
  682. List<Map> fileList = (List<Map>) JSONArray.parse(String.valueOf(map1.get("attachmentField_ly8fxusz")));
  683. String ydDownloadUrl = fileList.get(0).get("downloadUrl").toString();
  684. String fileName = fileList.get(0).get("name").toString();
  685. if ("深圳".equals(type)){
  686. //将downloadurl下载到本地
  687. try {
  688. downloadFile(ydDownloadUrl, filePathSz + fileName);
  689. System.out.println("文件下载成功!");
  690. } catch (IOException e) {
  691. e.printStackTrace();
  692. }
  693. //上传附件
  694. detail.put("files",postWithFile(getErpUrl(type) + "pws/sys/common/upload", filePathSz + fileName,type));
  695. }else {
  696. //将downloadurl下载到本地
  697. try {
  698. downloadFile(ydDownloadUrl, filePathXg + fileName);
  699. System.out.println("文件下载成功!");
  700. } catch (IOException e) {
  701. e.printStackTrace();
  702. }
  703. //上传附件
  704. detail.put("files",postWithFile(getErpUrl(type) + "pws/sys/common/upload", filePathXg + fileName,type));
  705. }
  706. return detail;
  707. }).collect(Collectors.toList());
  708. body.put("makSoFilesList",makSoFilesList);
  709. }
  710. body.put("makSoDetailList",makSoDetailList);
  711. Map res = put(getErpUrl(type) + "pws/mak/makSalesOrder/change", null, getHeader(type), body);
  712. return McR.success();
  713. }*/
  714. private String getString(Object object){
  715. return (object == null) ? "" : object.toString();
  716. }
  717. private Map<String,String> getHeader(String type){
  718. Map<String, Object> map = new HashMap<>();
  719. if ("深圳".equals(type)){
  720. map = post(erpUrlSz + "pws/sys/mLogin", null, null,UtilMap.map("username, password", userNameSz, passwordSz));
  721. }else {
  722. map = post(erpUrlXg + "pws/sys/mLogin", null, null,UtilMap.map("username, password", userNameXg, passwordXg));
  723. }
  724. if (Objects.nonNull(map.get("result"))){
  725. Map<String,Object> result = (Map<String,Object>) map.get("result");
  726. if (Objects.nonNull(result.get("token"))){
  727. Map<String, String> header = new HashMap<>();
  728. header.put("X-Access-Token", result.get("token").toString());
  729. return header;
  730. }
  731. }
  732. return null;
  733. }
  734. /**
  735. * 封装GET请求
  736. *
  737. * @param url 请求的URL
  738. * @param params 请求参数
  739. * @param headers 请求头
  740. * @return 响应内容
  741. */
  742. public static Map<String, Object> get(String url, Map<String, Object> params, Map<String, String> headers) {
  743. log.info("GET 请求url:{}, 请求参数:{}, 请求头:{}", url, params, headers);
  744. HttpRequest get = HttpUtil.createGet(url);
  745. if (params!= null){
  746. get.form(params);
  747. }
  748. if (headers!= null){
  749. get.addHeaders(headers);
  750. }
  751. HttpResponse response = get.execute();
  752. Map<String, Object> result = null;
  753. try {
  754. ObjectMapper objectMapper = new ObjectMapper();
  755. result = objectMapper.readValue(response.body(), new TypeReference<Map<String, Object>>() {});
  756. } catch (JsonProcessingException e) {
  757. throw new RuntimeException(e);
  758. }
  759. log.info("响应结果: {}", result);
  760. return result;
  761. }
  762. /**
  763. * 封装POST请求
  764. *
  765. * @param url 请求的URL
  766. * @param params 请求参数
  767. * @param headers 请求头
  768. * @param body 请求体
  769. * @return 响应内容
  770. */
  771. public static Map<String, Object> post(String url, Map<String, Object> params, Map<String, String> headers, Map<String, Object> body) {
  772. log.info("POST 请求url:{}, 请求参数:{}, 请求头:{}, 请求体:{}", url, params, headers, body);
  773. HttpRequest request = HttpUtil.createPost(url);
  774. if (params != null) {
  775. request.form(params);
  776. }
  777. if (headers != null) {
  778. request.addHeaders(headers);
  779. }
  780. if (body != null) {
  781. request.body(JSONUtil.toJsonStr(body), "application/json");
  782. }
  783. HttpResponse response = request.execute();
  784. // Map<String,Object> result = JSONUtil.toBean(response.body(), Map.class);
  785. Map<String, Object> result = null;
  786. try {
  787. ObjectMapper objectMapper = new ObjectMapper();
  788. result = objectMapper.readValue(response.body(), new TypeReference<Map<String, Object>>() {});
  789. } catch (JsonProcessingException e) {
  790. throw new RuntimeException(e);
  791. }
  792. log.info("响应结果: {}", result);
  793. return result;
  794. }
  795. public static Map<String, Object> put(String url, Map<String, Object> params, Map<String, String> headers, Map<String, Object> body) {
  796. log.info("PUT 请求url:{}, 请求参数:{}, 请求头:{}, 请求体:{}", url, params, headers, body);
  797. HttpRequest request = HttpRequest.put(url);
  798. if (params != null) {
  799. request.form(params);
  800. }
  801. if (headers != null) {
  802. request.addHeaders(headers);
  803. }
  804. if (body != null) {
  805. request.body(JSONUtil.toJsonStr(body), "application/json");
  806. }
  807. HttpResponse response = request.execute();
  808. // Map<String,Object> result = JSONUtil.toBean(response.body(), Map.class);
  809. Map<String, Object> result = null;
  810. try {
  811. ObjectMapper objectMapper = new ObjectMapper();
  812. result = objectMapper.readValue(response.body(), new TypeReference<Map<String, Object>>() {});
  813. } catch (JsonProcessingException e) {
  814. throw new RuntimeException(e);
  815. }
  816. log.info("响应结果: {}", result);
  817. return result;
  818. }
  819. public static String convertChineseToUtf8Hex(String input) {
  820. StringBuilder sb = new StringBuilder();
  821. Pattern pattern = Pattern.compile("[\\u4E00-\\u9FFF\\u3000-\\u303F\\uFF00-\\uFFEF]");
  822. Matcher matcher = pattern.matcher(input);
  823. int i = 0;
  824. while (i < input.length()) {
  825. if (matcher.region(i, i + 1).find()) {
  826. // 当前字符是中文字符
  827. char chineseChar = input.charAt(i);
  828. byte[] utf8Bytes = String.valueOf(chineseChar).getBytes(StandardCharsets.UTF_8);
  829. StringBuilder hexString = new StringBuilder();
  830. for (byte b : utf8Bytes) {
  831. hexString.append(String.format("%02x", b));
  832. }
  833. sb.append(hexString.toString());
  834. } else {
  835. // 当前字符不是中文字符
  836. sb.append(input.charAt(i));
  837. }
  838. i++;
  839. }
  840. return sb.toString();
  841. }
  842. public String postWithFile(String url, String filePath,String type) throws UnsupportedEncodingException {
  843. // 文件路径
  844. File file = new File(filePath);
  845. // 创建HttpClient实例
  846. HttpClient client = SkipHttpsUtil.wrapClient();
  847. // HttpClient client = HttpClients.createDefault();
  848. // 创建HttpPost实例
  849. HttpPost post = new HttpPost(url);
  850. // 添加请求头
  851. post.setHeader("X-Access-Token", getHeader(type).get("X-Access-Token"));
  852. // 使用MultipartEntityBuilder来构建multipart请求
  853. MultipartEntityBuilder builder = MultipartEntityBuilder.create();
  854. //如果fileUrl中包含中文,则需要对其进行编码
  855. // String encodeFileName = convertChineseToUtf8Hex(file.getName());
  856. builder.addBinaryBody("file", file, ContentType.DEFAULT_BINARY, file.getName());
  857. // 设置请求体
  858. HttpEntity multipart = builder.build();
  859. post.setEntity(multipart);
  860. try {
  861. // 发送请求并获取响应
  862. org.apache.http.HttpResponse response = client.execute(post);
  863. // 处理响应
  864. // 例如,打印响应状态码
  865. System.out.println(response.getStatusLine().getStatusCode());
  866. HttpEntity entity = response.getEntity();
  867. String fileName = "";
  868. // 判断响应实体是否为null
  869. if (entity != null) {
  870. // 使用EntityUtils读取响应体内容(这里假设是文本类型)
  871. String responseString = EntityUtils.toString(entity, "UTF-8"); // 指定字符集
  872. System.out.println("Response Body: " + responseString);
  873. Map parse = (Map) JSONObject.parse(responseString);
  874. if ((boolean)parse.get("success")){
  875. fileName = getString(parse.get("message"));
  876. }
  877. // 释放响应实体资源(虽然EntityUtils.toString()在某些HttpClient版本中会自动处理)
  878. EntityUtils.consume(entity);
  879. }
  880. return fileName;
  881. } catch (IOException e) {
  882. e.printStackTrace();
  883. }
  884. return null;
  885. }
  886. @Override
  887. public void updateCurrency() {
  888. //获取erp币别列表
  889. String[] ERP_URLS = new String[]{erpUrlSz,erpUrlXg};
  890. for (int i = 0; i < ERP_URLS.length; i++) {
  891. List<Map<String,String>> list = new ArrayList<>();
  892. int pageNo = 1;
  893. int pageSize = 50;
  894. Map result = new HashMap<>();
  895. do {
  896. Map param = new HashMap();
  897. param.put("pageNo",pageNo);
  898. param.put("pageSize",pageSize);
  899. Map<String, Object> res = get(ERP_URLS[i] + "pws/fin/finCurrency/list", param, i == 0 ? getHeader("深圳") : getHeader("香港"));
  900. result = (Map) res.get("result");
  901. List<Map> records = (List<Map>) result.get("records");
  902. int finalI = i;
  903. list.addAll(records.stream().map(map1 -> {
  904. Map<String,String> map = new HashMap<>();
  905. map.put("textField_m054h6gw",map1.get("currencyCode").toString());
  906. map.put("textField_m054h6gx",map1.get("currencyName").toString());
  907. map.put("textField_m054h6gy",map1.get("active_dictText").toString());
  908. if (finalI == 0){
  909. map.put("selectField_m3fgkfz9","深圳");
  910. }else {
  911. map.put("selectField_m3fgkfz9","香港");
  912. }
  913. map.put("textField_m3fiygvb",map.get("selectField_m3fgkfz9") + map.get("textField_m054h6gw"));//唯一标识
  914. return map;
  915. }).collect(Collectors.toList()));
  916. pageNo++;
  917. }while (pageNo * pageSize < (int) result.get("total"));
  918. //更新宜搭币别
  919. for (Map map : list) {
  920. ydService.upsertFormData("FORM-01CF3B9C5A364D32A011A6EA8B59B82AIUDI",UtilMap.map("textField_m3fiygvb",map.get("textField_m3fiygvb")),map,null);
  921. }
  922. }
  923. }
  924. @Override
  925. public void updateTaxRate() {
  926. //获取erp税率列表
  927. String[] ERP_URLS = new String[]{erpUrlSz,erpUrlXg};
  928. for (int i = 0; i < ERP_URLS.length; i++) {
  929. List<Map<String,String>> list = new ArrayList<>();
  930. int pageNo = 1;
  931. int pageSize = 50;
  932. Map result = new HashMap<>();
  933. do {
  934. Map param = new HashMap();
  935. param.put("pageNo",pageNo);
  936. param.put("pageSize",pageSize);
  937. Map<String, Object> res = get(ERP_URLS[i] + "pws/fin/finTax/list", param, i == 0 ? getHeader("深圳") : getHeader("香港"));
  938. result = (Map) res.get("result");
  939. List<Map> records = (List<Map>) result.get("records");
  940. int finalI = i;
  941. list.addAll(records.stream().map(map1 -> {
  942. Map<String,String> map = new HashMap<>();
  943. map.put("textField_m0539uy1",map1.get("id").toString());
  944. map.put("numberField_m0539uy2",map1.get("taxValue").toString());
  945. map.put("textField_m0539uy4",map1.get("taxName").toString());
  946. if (finalI == 0){
  947. map.put("selectField_m3fgkfz9","深圳");
  948. }else {
  949. map.put("selectField_m3fgkfz9","香港");
  950. }
  951. map.put("textField_m3fiygvb",map.get("selectField_m3fgkfz9") + map.get("textField_m0539uy1"));//唯一标识
  952. return map;
  953. }).collect(Collectors.toList()));
  954. pageNo++;
  955. }while (pageNo * pageSize < (int) result.get("total"));
  956. //更新宜搭税率
  957. for (Map map : list) {
  958. ydService.upsertFormData("FORM-47A9FC4550574A0488A3F2ECB30FADB0Z67F",UtilMap.map("textField_m3fiygvb",map.get("textField_m3fiygvb")),map,null);
  959. }
  960. }
  961. }
  962. @Override
  963. public void updateProcess() {
  964. //获取erp工序列表
  965. String[] ERP_URLS = new String[]{erpUrlSz,erpUrlXg};
  966. for (int i = 0; i < ERP_URLS.length; i++) {
  967. List<Map<String,String>> list = new ArrayList<>();
  968. int pageNo = 1;
  969. int pageSize = 50;
  970. Map result = new HashMap<>();
  971. do {
  972. Map param = new HashMap();
  973. param.put("pageNo",pageNo);
  974. param.put("pageSize",pageSize);
  975. Map<String, Object> res = get(ERP_URLS[i] + "pws/pdm/pdmStation/list", param, i == 0 ? getHeader("深圳") : getHeader("香港"));
  976. result = (Map) res.get("result");
  977. List<Map> records = (List<Map>) result.get("records");
  978. int finalI = i;
  979. list.addAll(records.stream().map(map1 -> {
  980. Map<String,String> map = new HashMap<>();
  981. map.put("textField_m04yhw4p",getString(map1.get("stationCode")));//工序编码
  982. map.put("textField_m04yhw56",getString(map1.get("stationName")));//工序名称
  983. map.put("textField_m04yhw57",getString(map1.get("stationClass")));//工序分类
  984. map.put("textField_m04yhw58",getString(map1.get("productionType_dictText")));//生产类型
  985. map.put("numberField_m04yhw5b",getString(map1.get("cycleTime")));//生产周期
  986. map.put("textField_m04yhw5a",getString(map1.get("stockFlag")));//可入库
  987. map.put("textField_m04yhw5c",getString(map1.get("unitCode_dictText")));//计价方式
  988. map.put("textField_m04yhw5d",getString(map1.get("stationType_dictText")));//工序类型
  989. map.put("textField_m04yhw5e",getString(map1.get("comments")));//备注
  990. map.put("textField_m04yhw5f",getString(map1.get("active_dictText")));//审核状态
  991. if (finalI == 0){
  992. map.put("selectField_m3fgkfz9","深圳");
  993. }else {
  994. map.put("selectField_m3fgkfz9","香港");
  995. }
  996. map.put("textField_m3fiygvb",map.get("selectField_m3fgkfz9") + map.get("textField_m04yhw4p"));//唯一标识
  997. return map;
  998. }).collect(Collectors.toList()));
  999. pageNo++;
  1000. }while (pageNo * pageSize < (int) result.get("total"));
  1001. //更新宜搭工序
  1002. for (Map map : list) {
  1003. ydService.upsertFormData("FORM-2F06B5F437124B3ABA8D5275D1D277E4R9O1",UtilMap.map("textField_m3fiygvb",map.get("textField_m3fiygvb")),map,null);
  1004. }
  1005. }
  1006. }
  1007. @Override
  1008. public McR updateCustomerProcess(Map map) {
  1009. if (Objects.isNull(map.get("formInstId"))){
  1010. return McR.errorParam("formInstId不能为空");
  1011. }
  1012. String formInstId = map.get("formInstId").toString();
  1013. DDR_New ddrNew = ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id);
  1014. Map formData = ddrNew.getFormData();
  1015. String jsonString = formData.get("associationFormField_lzto0clw_id").toString();
  1016. String customerJsonString = StringEscapeUtils.unescapeJava(jsonString.substring(1, jsonString.length() - 1));
  1017. List<Map> customer =(List<Map>) JSONArray.parse(customerJsonString);
  1018. String updateFormInstId = customer.get(0).get("instanceId").toString();
  1019. String jsonString2 = formData.get("associationFormField_m3s7manr_id").toString();
  1020. String customerJsonString3 = StringEscapeUtils.unescapeJava(jsonString2.substring(1, jsonString2.length() - 1));
  1021. formData.put("associationFormField_m3s7manr",customerJsonString3);//代理终端客户
  1022. formData.put("employeeField_m2cz3vbt",formData.get("employeeField_m2cz3vbt_id"));//关联人员
  1023. ydClient.operateData(YDParam.builder()
  1024. .formInstanceId(updateFormInstId)
  1025. .updateFormDataJson(JSON.toJSONString(formData))
  1026. .build(),YDConf.FORM_OPERATION.update);
  1027. return McR.success();
  1028. }
  1029. @Override
  1030. public McR addWeeklyReport(Map map) {
  1031. if (Objects.isNull(map.get("formInstId"))){
  1032. return McR.errorParam("formInstId不能为空");
  1033. }
  1034. String formInstId = map.get("formInstId").toString();
  1035. //查询周报计划
  1036. DDR_New ddrNew = ydClient.queryData(YDParam.builder()
  1037. .formInstId(formInstId)
  1038. .build(), YDConf.FORM_QUERY.retrieve_id);
  1039. Map formData = ddrNew.getFormData();
  1040. //周报发起人
  1041. List<String> initiateUserIds = (List<String>) formData.get("employeeField_m27e9i5u_id");
  1042. //周报填写人员
  1043. List<String> weeklyUserIds = (List<String>) formData.get("employeeField_m27e9i5v_id");
  1044. //下次自动发起周报日期
  1045. long nextTime = (long) formData.get("dateField_m27e9i5w");
  1046. Date nextDate = new Date(nextTime);
  1047. //汇报日期区间
  1048. Date startDate = DateUtil.beginOfWeek(nextDate);
  1049. Date endDate = DateUtil.endOfWeek(nextDate);
  1050. String startDateTime = startDate.getTime() + "";
  1051. String endDateTime = endDate.getTime() + "";
  1052. //上次自动发起周报日期
  1053. Date lastTime = nextDate;
  1054. nextDate = DateUtils.addDays(nextDate, 7);
  1055. Map weeklyFormData = new HashMap();
  1056. weeklyFormData.put("departmentSelectField_lwprtzha",formData.get("departmentSelectField_m27e9i5t_id"));//部门
  1057. weeklyFormData.put("dateField_m2d0mach",formData.get("dateField_m27e9i5w"));//汇报开始日期
  1058. weeklyFormData.put("cascadeDateField_m2cyyp0j",new String[]{startDateTime,endDateTime});//汇报日期区间
  1059. weeklyFormData.put("numberField_m27dxqle",formData.get("numberField_m27dxqle"));//汇报周
  1060. weeklyFormData.put("employeeField_m28cj0dq",weeklyUserIds);//周报填写人员
  1061. List<Map> weeklyDetails = new ArrayList<>();
  1062. for (String weeklyUserId : weeklyUserIds) {
  1063. Map detail = new HashMap();
  1064. detail.put("employeeField_m0z2tckk",new String[]{weeklyUserId});//周报人员
  1065. weeklyDetails.add(detail);
  1066. }
  1067. weeklyFormData.put("tableField_m27dxqla",weeklyDetails);//周报明细
  1068. //发起销售周报
  1069. ydClient.operateData(YDParam.builder()
  1070. .formUuid("FORM-A68EA411FA5E498490FAC6E4FC30A84F2KN5")
  1071. .formDataJson(JSON.toJSONString(weeklyFormData))
  1072. .userId(initiateUserIds.get(0))
  1073. .build(),YDConf.FORM_OPERATION.create);
  1074. //更新周报计划下次发起周报时间及上次发起周报时间
  1075. Map updateFormData = new HashMap();
  1076. updateFormData.put("dateField_m27e9i61", lastTime);
  1077. updateFormData.put("dateField_m27e9i5w", nextDate);
  1078. ydClient.operateData(YDParam.builder()
  1079. .formInstId(formInstId)
  1080. .updateFormDataJson(JSON.toJSONString(updateFormData))
  1081. .build(), YDConf.FORM_OPERATION.update);
  1082. return McR.success();
  1083. }
  1084. @Override
  1085. public McR getTbStageOptions(String projectName,String projectId,String stageName) {
  1086. List<Map> options = new ArrayList<>();
  1087. if (Strings.isNullOrEmpty(projectName)){
  1088. return McR.errorParam("项目名称不能为空!");
  1089. }
  1090. if (Strings.isNullOrEmpty(projectId)){
  1091. Map mcBody = new HashMap();
  1092. mcBody.put("url","https://open.teambition.com/api/v3/project/query");
  1093. mcBody.put("headers",initHeaderToken());
  1094. mcBody.put("params",UtilMap.map("name", projectName));
  1095. Map mcResult = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody));
  1096. List<Map> projectList = (List<Map>)mcResult.get("result");
  1097. /* TBR projectTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/query", initHeaderToken(), UtilMap.map("name", projectName), TBR.class);
  1098. List<Map> projectList = (List<Map>) projectTbr.getResult();*/
  1099. if (projectList.isEmpty()){
  1100. return McR.errorParam("未在TB中查询到此项目信息!");
  1101. }
  1102. Map projectMap = projectList.get(0);
  1103. projectId = projectMap.get("id").toString();
  1104. }
  1105. //搜索任务列表
  1106. Map mcBody = new HashMap();
  1107. mcBody.put("url","https://open.teambition.com/api/v3/project/"+projectId+"/stage/search");
  1108. mcBody.put("headers",initHeaderToken());
  1109. mcBody.put("params",null);
  1110. Map mcResult = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody));
  1111. List<Map> stageList = (List<Map>)mcResult.get("result");
  1112. /*TBR stageTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/"+projectId+"/stage/search", initHeaderToken(), null, TBR.class);
  1113. List<Map> stageList = (List<Map>) stageTbr.getResult();*/
  1114. Map<String,String> stageMap = new HashMap<>();
  1115. for (Map stage : stageList) {
  1116. String name = stage.get("name").toString().replaceAll("\\s+","");
  1117. if (STAGES.contains(name)){
  1118. stageMap.put(stage.get("id").toString(),name);
  1119. }
  1120. }
  1121. //查询父任务详情
  1122. for (String stageId : stageMap.keySet()) {
  1123. Map mcBody2 = new HashMap();
  1124. mcBody2.put("url","https://open.teambition.com/api/v3/project/" + projectId + "/task/query");
  1125. mcBody2.put("headers",initHeaderToken());
  1126. mcBody2.put("params",UtilMap.map("q", "stageId = " + stageId + " AND taskLayer = onlyTopLevel"));
  1127. Map mcResult2 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody2));
  1128. List<Map> parentTaskList = (List<Map>)mcResult2.get("result");
  1129. /*TBR parentTaskTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/query", initHeaderToken(), UtilMap.map("q", "stageId = " + stageId + " AND taskLayer = onlyTopLevel"), TBR.class);
  1130. List<Map> parentTaskList = (List<Map>) parentTaskTbr.getResult();*/
  1131. for (Map parentTask : parentTaskList) {
  1132. String content = parentTask.get("content").toString();
  1133. if (content.contains(stageName)) {
  1134. Map<String,Object> option = new HashMap<>();
  1135. option.put("text",content);
  1136. option.put("value",parentTask.get("id").toString());
  1137. options.add(option);
  1138. }
  1139. }
  1140. }
  1141. return McR.success(options);
  1142. }
  1143. @Override
  1144. public McR claimBusinessOpportunities(Map map) {
  1145. if (Objects.isNull(map.get("formInstId"))){
  1146. return McR.errorParam("formInstId不能为空");
  1147. }
  1148. if (Objects.isNull(map.get("userId"))){
  1149. return McR.errorParam("userId不能为空");
  1150. }
  1151. String formInstId = map.get("formInstId").toString();
  1152. String userId = map.get("userId").toString();
  1153. userId = userId.substring(userId.indexOf("\"")+1,userId.lastIndexOf("\""));
  1154. //更新商机状态和销售人员
  1155. Map updateFormData = new HashMap();
  1156. updateFormData.put("selectField_m28uros3","跟进中");
  1157. updateFormData.put("employeeField_m2a830k8",userId);
  1158. ydClient.operateData(YDParam.builder()
  1159. .formInstId(formInstId)
  1160. .updateFormDataJson(JSON.toJSONString(updateFormData))
  1161. .build(),YDConf.FORM_OPERATION.update);
  1162. return McR.success();
  1163. }
  1164. @Override
  1165. public McR createTbProject(Map map) {
  1166. if (Objects.isNull(map.get("name")) || Objects.isNull(map.get("uuid"))){
  1167. return McR.errorParam("项目名称或项目唯一标识不能为空");
  1168. }
  1169. String name = map.get("name").toString();
  1170. String uuid = map.get("uuid").toString();
  1171. Map body = new HashMap();
  1172. body.put("name",name);
  1173. body.put("templateId",templateId);
  1174. Map mcBody = new HashMap();
  1175. mcBody.put("url","https://open.teambition.com/api/v3/project/create-from-template");
  1176. mcBody.put("headers",initHeaderToken());
  1177. mcBody.put("params",null);
  1178. mcBody.put("body",body);
  1179. Map mcResult = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/post",null,null,mcBody));
  1180. Map result = (Map) mcResult.get("result");
  1181. /*TBR tbr = (TBR) UtilHttp.doPost("https://open.teambition.com/api/v3/project/create-from-template", initHeaderToken(), null,body, TBR.class);
  1182. Map result = (Map) tbr.getResult();*/
  1183. String id = result.get("id").toString();
  1184. //更新项目档案
  1185. ydClient.operateData(YDParam.builder()
  1186. .formUuid("FORM-B43148BB37324A729A852ED7B40E1A10USDA")
  1187. .searchCondition(JSON.toJSONString(UtilMap.map("textField_m03860ye",uuid)))
  1188. .formDataJson(JSON.toJSONString(UtilMap.map("textField_m2cwpzya",id)))
  1189. .build(),YDConf.FORM_OPERATION.upsert);
  1190. return McR.success(id);
  1191. }
  1192. @Override
  1193. public McR addContacts(Map map) {
  1194. if (Objects.isNull(map.get("formInstId"))){
  1195. return McR.errorParam("formInstId不能为空");
  1196. }
  1197. String formInstId = map.get("formInstId").toString();
  1198. //查询线索信息
  1199. DDR_New ddrNew = ydClient.queryData(YDParam.builder()
  1200. .formInstId(formInstId)
  1201. .build(), YDConf.FORM_QUERY.retrieve_id);
  1202. Map formData = ddrNew.getFormData();
  1203. String customerName = getString(formData.get("textField_m2ipea64"));//客户名称
  1204. String customerCode = getString(formData.get("textField_m50vl2jt"));//客户编号
  1205. String contacts = getString(formData.get("textField_m2ipea63"));//联系人
  1206. String phone = getString(formData.get("textField_m2ipea65"));//电话
  1207. List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
  1208. .formUuid("FORM-221A9483B28448089ACBA5B4748D6288KMG5")
  1209. .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_m4u3lrdv, textField_lwpquxe4", customerCode, contacts)))
  1210. .build(), YDConf.FORM_QUERY.retrieve_list).getData();
  1211. if (!data.isEmpty()){
  1212. Map updateFormData = (Map) data.get(0).get("formData");
  1213. String updateFormInstId = data.get(0).get("formInstanceId").toString();
  1214. List<String> types = (List<String>) updateFormData.get("multiSelectField_m278ty7s");
  1215. if (types.contains("电话")){
  1216. return McR.success("联系人已存在");
  1217. }else{
  1218. types.add("电话");
  1219. updateFormData.put("multiSelectField_m278ty7s",types);
  1220. updateFormData.put("textField_lwpquxe9",phone);
  1221. ydClient.operateData(YDParam.builder()
  1222. .formInstId(updateFormInstId)
  1223. .updateFormDataJson(JSON.toJSONString(updateFormData))
  1224. .build(), YDConf.FORM_OPERATION.update);
  1225. }
  1226. }else {
  1227. if (!contacts.isEmpty()){
  1228. //新增联系人
  1229. Map contactFormData = new HashMap();
  1230. List<Map> customer = new ArrayList<>();
  1231. Map customerMap = new HashMap();
  1232. customerMap.put("appType",ydConf.getAppType());
  1233. customerMap.put("formUuid","FORM-6F1E2DCFB3F5448EBDD4994551EBF690DVIT");
  1234. customerMap.put("formType","receipt");
  1235. customerMap.put("instanceId",formInstId);
  1236. customerMap.put("title",customerName);
  1237. customerMap.put("subTitle","");
  1238. customer.add(customerMap);
  1239. contactFormData.put("associationFormField_m4qdcril",customer);
  1240. contactFormData.put("textField_lwpquxe4",contacts);
  1241. contactFormData.put("multiSelectField_m278ty7s",new String[]{"电话"});
  1242. contactFormData.put("textField_lwpquxe9",phone);
  1243. contactFormData.put("textField_m0z0e88f",customerName);
  1244. contactFormData.put("textField_m4u3lrdv",customerCode);
  1245. ydClient.operateData(YDParam.builder()
  1246. .formUuid("FORM-221A9483B28448089ACBA5B4748D6288KMG5")
  1247. .formDataJson(JSON.toJSONString(contactFormData))
  1248. .build(), YDConf.FORM_OPERATION.create);
  1249. }
  1250. }
  1251. return McR.success();
  1252. }
  1253. @Override
  1254. public McR stopProcess(Map map) {
  1255. if (Objects.isNull(map.get("formInstId"))){
  1256. return McR.errorParam("formInstId不能为空");
  1257. }
  1258. String formInstId = map.get("formInstId").toString();
  1259. //查询发起人信息
  1260. DDR_New ddrNew = ydClient.queryData(YDParam.builder()
  1261. .formInstId(formInstId)
  1262. .build(), YDConf.FORM_QUERY.retrieve_id);
  1263. Map originator = ddrNew.getOriginator();
  1264. String userId = originator.get("userId").toString();
  1265. //中止流程
  1266. Map params = new HashMap();
  1267. params.put("processInstanceId", formInstId);
  1268. params.put("userId", userId);
  1269. params.put("appType", ydConf.getAppType());
  1270. params.put("systemToken", ydConf.getSystemToken());
  1271. String result = UtilHttp.doPut("https://api.dingtalk.com/v1.0/yida/processes/instances/terminate", ddClient.initTokenHeader(),params, (Map) null);
  1272. return McR.success(result);
  1273. }
  1274. @Override
  1275. public McR getTbStageDetails(String projectName,String projectId,String parentTaskId) {
  1276. Map<String,Object> stageDetail = new HashMap<>();
  1277. //根据项目名称获取项目id
  1278. if (Strings.isNullOrEmpty(projectName) || Strings.isNullOrEmpty(parentTaskId)){
  1279. return McR.errorParam("项目名称或父任务id不能为空!");
  1280. }
  1281. if (Strings.isNullOrEmpty(projectId)){
  1282. /*TBR projectTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/query", initHeaderToken(), UtilMap.map("name", projectName), TBR.class);
  1283. List<Map> projectList = (List<Map>) projectTbr.getResult();*/
  1284. Map mcBody = new HashMap();
  1285. mcBody.put("url","https://open.teambition.com/api/v3/project/query");
  1286. mcBody.put("headers",initHeaderToken());
  1287. mcBody.put("params",UtilMap.map("name", projectName));
  1288. Map mcResult = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody));
  1289. List<Map> projectList = (List<Map>)mcResult.get("result");
  1290. if (projectList.isEmpty()){
  1291. return McR.errorParam("未在TB中查询到此项目信息!");
  1292. }
  1293. Map projectMap = projectList.get(0);
  1294. projectId = projectMap.get("id").toString();
  1295. }
  1296. //搜索项目自定义字段
  1297. /*TBR cfTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/"+projectId+"/customfield/search", initHeaderToken(), null, TBR.class);
  1298. List<Map> cfList = (List<Map>) cfTbr.getResult();*/
  1299. Map mcBody = new HashMap();
  1300. mcBody.put("url","https://open.teambition.com/api/v3/project/"+projectId+"/customfield/search");
  1301. mcBody.put("headers",initHeaderToken());
  1302. mcBody.put("params",null);
  1303. Map mcResult = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody));
  1304. List<Map> cfList = (List<Map>)mcResult.get("result");
  1305. Map<String,String> cfMap = new HashMap<>();
  1306. cfList.forEach(cf -> {
  1307. String name = cf.get("name").toString();
  1308. switch (name){
  1309. case "责任部门/角色":
  1310. cfMap.put(cf.get("id").toString(),"dept");
  1311. break;
  1312. case "评审领域":
  1313. cfMap.put(cf.get("id").toString(),"area");
  1314. break;
  1315. case "评审要素":
  1316. cfMap.put(cf.get("id").toString(),"part");
  1317. break;
  1318. case "交付件":
  1319. cfMap.put(cf.get("id").toString(),"file");
  1320. break;
  1321. case "交付件2":
  1322. cfMap.put(cf.get("id").toString(),"file2");
  1323. }
  1324. });
  1325. //搜索项目标签
  1326. /*TBR tagTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/"+projectId+"/tag/search", initHeaderToken(), null, TBR.class);
  1327. List<Map> tagResult = (List<Map>) tagTbr.getResult();*/
  1328. Map mcBody2 = new HashMap();
  1329. mcBody2.put("url","https://open.teambition.com/api/v3/project/"+projectId+"/tag/search");
  1330. mcBody2.put("headers",initHeaderToken());
  1331. mcBody2.put("params",null);
  1332. Map mcResult2 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody2));
  1333. List<Map> tagResult = (List<Map>)mcResult2.get("result");
  1334. Map<String,String> tagMap = new HashMap<>();
  1335. tagResult.forEach(tag -> tagMap.put(tag.get("id").toString(),tag.get("name").toString()));
  1336. //搜索任务列表
  1337. /*TBR stageTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/"+projectId+"/stage/search", initHeaderToken(), null, TBR.class);
  1338. List<Map> stageList = (List<Map>) stageTbr.getResult();*/
  1339. Map mcBody3 = new HashMap();
  1340. mcBody3.put("url","https://open.teambition.com/api/v3/project/"+projectId+"/stage/search");
  1341. mcBody3.put("headers",initHeaderToken());
  1342. mcBody3.put("params",null);
  1343. Map mcResult3 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody3));
  1344. List<Map> stageList = (List<Map>)mcResult3.get("result");
  1345. Map<String,String> stageMap = new HashMap<>();
  1346. for (Map stage : stageList) {
  1347. String name = stage.get("name").toString().replaceAll("\\s+","");
  1348. if (STAGES.contains(name)){
  1349. stageMap.put(stage.get("id").toString(),name);
  1350. }
  1351. }
  1352. //子任务工作流状态
  1353. Map<String,String> subTaskState = new HashMap<>();
  1354. //查询父任务详情
  1355. /*TBR tbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", initHeaderToken(), UtilMap.map("parentTaskId", parentTaskId), TBR.class);
  1356. List<Map<String, Object>> task = (List<Map<String, Object>>) tbr.getResult();*/
  1357. Map mcBody4 = new HashMap();
  1358. mcBody4.put("url","https://open.teambition.com/api/v3/task/query");
  1359. mcBody4.put("headers",initHeaderToken());
  1360. mcBody4.put("params",UtilMap.map("parentTaskId", parentTaskId));
  1361. Map mcResult4 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody4));
  1362. List<Map<String, Object>> task = (List<Map<String, Object>>)mcResult4.get("result");
  1363. List<Map<String, Object>> list = new ArrayList<>();
  1364. boolean flag = true;
  1365. for (Map<String,Object> subTask : task) {
  1366. //获取子任务工作流状态(一个项目同级子任务的工作流id一样 查询一次)
  1367. if (flag){
  1368. String sfcId = subTask.get("sfcId").toString();//任务类型id
  1369. //查询任务类型
  1370. /*TBR sfcTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/"+projectId+"/scenariofieldconfig/search", initHeaderToken(), UtilMap.map("sfcIds", sfcId), TBR.class);
  1371. List<Map> sfcList = (List<Map>) sfcTbr.getResult();*/
  1372. Map mcBody5 = new HashMap();
  1373. mcBody5.put("url","https://open.teambition.com/api/v3/project/"+projectId+"/scenariofieldconfig/search");
  1374. mcBody5.put("headers",initHeaderToken());
  1375. mcBody5.put("params",UtilMap.map("sfcIds", sfcId));
  1376. Map mcResult5 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody5));
  1377. List<Map> sfcList = (List<Map>)mcResult5.get("result");
  1378. String taskFlowId = sfcList.get(0).get("taskflowId").toString();//工作流id
  1379. //获取工作流下所有状态节点信息
  1380. /*TBR tfTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/"+projectId+"/taskflowstatus/search", initHeaderToken(), UtilMap.map("tfIds", taskFlowId), TBR.class);
  1381. List<Map> tfList = (List<Map>) tfTbr.getResult();*/
  1382. Map mcBody6 = new HashMap();
  1383. mcBody6.put("url","https://open.teambition.com/api/v3/project/"+projectId+"/taskflowstatus/search");
  1384. mcBody6.put("headers",initHeaderToken());
  1385. mcBody6.put("params",UtilMap.map("tfIds", taskFlowId));
  1386. Map mcResult6 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody6));
  1387. List<Map> tfList = (List<Map>)mcResult6.get("result");
  1388. for (Map tf : tfList) {
  1389. String name = tf.get("name").toString();
  1390. String tfsId = tf.get("id").toString();
  1391. subTaskState.put(tfsId, name);
  1392. }
  1393. flag = false;
  1394. }
  1395. Map<String,Object> taskDetail = new HashMap<>();
  1396. String content2 = subTask.get("content").toString();
  1397. taskDetail.put("content", content2);
  1398. taskDetail.put("url", TASK_URL_PREFIX + subTask.get("id"));
  1399. String tfsId = subTask.get("tfsId").toString();//工作流状态id
  1400. taskDetail.put("state", subTaskState.get(tfsId));//任务状态
  1401. List<Map<String,Object>> customfields = (List<Map<String,Object>>) subTask.get("customfields");
  1402. taskDetail.put("dept", "");
  1403. taskDetail.put("part", "");
  1404. taskDetail.put("area", "");
  1405. taskDetail.put("file", "");
  1406. taskDetail.put("file2", "");
  1407. if (!customfields.isEmpty()){
  1408. for (Map<String, Object> customfield : customfields) {
  1409. String cfId = customfield.get("cfId").toString();
  1410. if (cfMap.containsKey(cfId)){
  1411. String cfName = cfMap.get(cfId);
  1412. List<Map<String, Object>> value = (List<Map<String, Object>>) customfield.get("value");
  1413. if (!value.isEmpty()){
  1414. String title = value.get(0).get("title").toString();
  1415. taskDetail.put(cfName, title);
  1416. }
  1417. }
  1418. }
  1419. }
  1420. taskDetail.put("carTag", "");
  1421. taskDetail.put("payTag", "");
  1422. List<String> tagIds = (List<String>) subTask.get("tagIds");
  1423. if (!tagIds.isEmpty()){
  1424. for (String tagId : tagIds) {
  1425. if (tagMap.containsKey(tagId)) {
  1426. if (tagMap.get(tagId).contains("车载")){
  1427. taskDetail.put("carTag", tagMap.get(tagId).substring(3,5));
  1428. }else if (tagMap.get(tagId).contains("消费")){
  1429. taskDetail.put("payTag", tagMap.get(tagId).substring(3,5));
  1430. }
  1431. }
  1432. }
  1433. }
  1434. list.add(taskDetail);
  1435. }
  1436. //获取父任务工作流状态
  1437. //获取父任务详情
  1438. /*TBR tbr2 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", initHeaderToken(), UtilMap.map("taskId", parentTaskId), TBR.class);
  1439. List<Map<String, Object>> result2 = (List<Map<String, Object>>) tbr2.getResult();*/
  1440. Map mcBody6 = new HashMap();
  1441. mcBody6.put("url","https://open.teambition.com/api/v3/task/query");
  1442. mcBody6.put("headers",initHeaderToken());
  1443. mcBody6.put("params",UtilMap.map("taskId", parentTaskId));
  1444. Map mcResult6 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody6));
  1445. List<Map<String, Object>> result2 = (List<Map<String, Object>>)mcResult6.get("result");
  1446. String sfcId = result2.get(0).get("sfcId").toString();
  1447. String tfsId = result2.get(0).get("tfsId").toString();
  1448. //获取项目任务类型
  1449. /*TBR tbr3 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/"+projectId+"/scenariofieldconfig/search", initHeaderToken(), UtilMap.map("sfcIds", sfcId), TBR.class);
  1450. List<Map<String, Object>> result3 = (List<Map<String, Object>>) tbr3.getResult();*/
  1451. Map mcBody7 = new HashMap();
  1452. mcBody7.put("url","https://open.teambition.com/api/v3/project/"+projectId+"/scenariofieldconfig/search");
  1453. mcBody7.put("headers",initHeaderToken());
  1454. mcBody7.put("params",UtilMap.map("sfcIds", sfcId));
  1455. Map mcResult7 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody7));
  1456. List<Map<String, Object>> result3 = (List<Map<String, Object>>)mcResult7.get("result");
  1457. String taskflowId = result3.get(0).get("taskflowId").toString();
  1458. //搜索项目工作流状态
  1459. /*TBR tbr4 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/taskflowstatus/search", initHeaderToken(), UtilMap.map("tfIds", taskflowId), TBR.class);
  1460. List<Map<String, Object>> result4 = (List<Map<String, Object>>) tbr4.getResult();*/
  1461. Map mcBody8 = new HashMap();
  1462. mcBody8.put("url","https://open.teambition.com/api/v3/project/" + projectId + "/taskflowstatus/search");
  1463. mcBody8.put("headers",initHeaderToken());
  1464. mcBody8.put("params",UtilMap.map("tfIds", taskflowId));
  1465. Map mcResult8 = (Map) JSON.parse(UtilHttp.doPost("https://mc.cloudpure.cn/api/mc/request/get",null,null,mcBody8));
  1466. List<Map<String, Object>> result4 = (List<Map<String, Object>>)mcResult8.get("result");
  1467. result4.forEach(tf -> {
  1468. if (tf.get("id").toString().equals(tfsId)){
  1469. stageDetail.put("state", tf.get("name").toString());
  1470. }
  1471. });
  1472. stageDetail.put("list",list);
  1473. /*if (stageName.equals(content)){
  1474. parentTaskId = parentTask.get("id").toString();
  1475. //查询子任务信息
  1476. break;
  1477. }*/
  1478. /* for (String stageId : stageMap.keySet()) {
  1479. TBR parentTaskTbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/query", initHeaderToken(), UtilMap.map("q", "stageId = " + stageId + " AND taskLayer = onlyTopLevel"), TBR.class);
  1480. List<Map> parentTaskList = (List<Map>) parentTaskTbr.getResult();
  1481. for (Map parentTask : parentTaskList) {
  1482. String content = parentTask.get("content").toString();
  1483. String parentTaskId = "";
  1484. }
  1485. }*/
  1486. return McR.success(stageDetail);
  1487. }
  1488. private Map<String, String> initHeaderToken() {
  1489. Map header = new HashMap();
  1490. header.put("Authorization", this.getAccessToken());
  1491. header.put("X-Tenant-Id", this.tbConf.getTenantId());
  1492. header.put("X-Tenant-Type", "organization");
  1493. header.put("x-operator-id", this.tbConf.getOperatorId());
  1494. return header;
  1495. }
  1496. private String getAccessToken() {
  1497. synchronized(this.$lock) {
  1498. String accessToken = UtilToken.get("invalid-token-teambition");
  1499. if (StringUtils.isNotBlank(accessToken)) {
  1500. return accessToken;
  1501. } else {
  1502. Algorithm algorithm = Algorithm.HMAC256(this.tbConf.getAppSecret());
  1503. long timestamp = System.currentTimeMillis();
  1504. Date issuedAt = new Date(timestamp);
  1505. Date expiresAt = new Date(timestamp + EXPIRES_IN);
  1506. accessToken = JWT.create().withClaim("_appId", this.tbConf.getAppID()).withIssuedAt(issuedAt).withExpiresAt(expiresAt).sign(algorithm);
  1507. log.info("响应token, {}", accessToken);
  1508. UtilToken.put("invalid-token-teambition", accessToken, EXPIRES_IN);
  1509. return accessToken;
  1510. }
  1511. }
  1512. }
  1513. }