123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864 |
- package com.malk.lingmingguangzi.service;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.http.HttpRequest;
- import cn.hutool.http.HttpResponse;
- import cn.hutool.http.HttpUtil;
- import cn.hutool.json.JSONUtil;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.auth0.jwt.JWT;
- import com.auth0.jwt.algorithms.Algorithm;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.core.type.TypeReference;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.malk.server.aliwork.YDConf;
- import com.malk.server.aliwork.YDParam;
- import com.malk.server.common.McR;
- import com.malk.server.dingtalk.DDR_New;
- import com.malk.server.teambition.TBConf;
- import com.malk.server.teambition.TBR;
- import com.malk.service.aliwork.YDClient;
- import com.malk.service.dingtalk.DDClient;
- import com.malk.utils.UtilHttp;
- import com.malk.utils.UtilMap;
- import com.malk.utils.UtilToken;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.http.HttpEntity;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.entity.ContentType;
- import org.apache.http.entity.mime.MultipartEntityBuilder;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.util.EntityUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import java.io.*;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.net.URLEncoder;
- import java.nio.file.Files;
- import java.util.*;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.util.stream.Collectors;
- @Service
- @Slf4j
- public class LingmingguangziServiceImpl implements LingmingguangziService {
- @Autowired
- private YDClient ydClient;
- @Autowired
- private YDConf ydConf;
- @Autowired
- private TBConf tbConf;
- @Autowired
- private DDClient ddClient;
- @Value(value = "${erp.url}")
- private String erpUrl;
- @Value(value = "${erp.username}")
- private String userName;
- @Value(value = "${erp.password}")
- private String password;
- @Value(value = "${erp.filePath}")
- private String filePath;
- private final Object $lock = new Object[0];
- private static final Long EXPIRES_IN = 7200000L;
- private static final String TASK_URL_PREFIX = "https://www.teambition.com/project/65bb53546a74a42e2d608f05/tasks/view/65bb5354a0d7b85bc253f863/task/";
- private static final Map<String,String> STAGES = new HashMap<>();
- private static final Map<String,String> TAGS = new HashMap<>();
- static {
- STAGES.put("666fff1ec8e7e2eaab75bd81", "TR评审");//TR评审
- STAGES.put("666fff1ebe648654141a5b8b", "TO评审");//TR评审
- STAGES.put("666fff6fa0f1ab8063960627", "EV评审");//EV评审
- STAGES.put("666fff883a26df9ebce13918", "DV评审");//DV评审
- STAGES.put("666fffd4976f23a2d7cf13e1", "PV评审");//PV评审
- STAGES.put("666ffff2592db27f2d342d02", "MP评审");//MP评审
- TAGS.put("667002dff456184e9dc794a4", "消费(必选)");//消费(必选)
- TAGS.put("6670028d536f774f09d300f5", "消费(可选)");//消费(可选)
- TAGS.put("6670027cb986d723e63be2a5", "车载(必选)");//车载(必选)
- TAGS.put("667002667e0222a2169802dc", "车载(可选)");//车载(可选)
- }
- @Override
- public McR test() {
- log.info("test");
- return McR.success();
- }
- @Override
- public McR getCustomerQuestionnaireCount(Long start, Long end) {
- YDParam.YDParamBuilder ydParamBuilder = YDParam.builder()
- .formUuid("FORM-5CC9748D283C49FC8C8A86EE0529730A4I1D");
- if (start != null && end != null){
- String startDate = DateUtil.format(new Date(start), "yyyy-MM-dd HH:mm:ss");
- String endDate = DateUtil.format(DateUtil.offsetDay(new Date(end),1), "yyyy-MM-dd HH:mm:ss");
- ydParamBuilder.createFromTimeGMT(startDate);
- ydParamBuilder.createToTimeGMT(endDate);
- }
- //车载--------------------------------------------
- DDR_New ddrNew = ydClient.queryData(ydParamBuilder.build(), YDConf.FORM_QUERY.retrieve_list);
- List<Map> dataList = (List<Map>) ddrNew.getData();
- int importantCustomerCount = 0;
- int orderCustomerCount = 0;
- int strategicCustomerCount = 0;
- for (Map data : dataList) {
- Map formData = (Map) data.get("formData");
- String customerLevel = String.valueOf(formData.get("selectField_lx4g7em6"));
- switch (customerLevel){
- case "重要客户": importantCustomerCount++; break;
- case "订单客户": orderCustomerCount++; break;
- case "战略客户": strategicCustomerCount++; break;
- }
- }
- Map<String,Integer> result = new HashMap<>();
- result.put("importantCustomerCount", importantCustomerCount);
- result.put("orderCustomerCount", orderCustomerCount);
- result.put("strategicCustomerCount", strategicCustomerCount);
- return McR.success(result);
- }
- @Override
- public McR getCustomerQuestionnaireCount2(Long start, Long end) {
- YDParam.YDParamBuilder ydParamBuilder = YDParam.builder()
- .formUuid("FORM-D4587ABF101246F6B17635C8CB178B6BGTAW");
- if (start != null && end != null){
- String startDate = DateUtil.format(new Date(start), "yyyy-MM-dd HH:mm:ss");
- String endDate = DateUtil.format(DateUtil.offsetDay(new Date(end),1), "yyyy-MM-dd HH:mm:ss");
- ydParamBuilder.createFromTimeGMT(startDate);
- ydParamBuilder.createToTimeGMT(endDate);
- }
- //商务端
- DDR_New ddrNew = ydClient.queryData(ydParamBuilder.build(), YDConf.FORM_QUERY.retrieve_list);
- List<Map> dataList = (List<Map>) ddrNew.getData();
- int businessCustomerCount = 0;
- int technologyCustomerCount = 0;
- int qualityCustomerCount = 0;
- for (Map data : dataList) {
- Map formData = (Map) data.get("formData");
- String project = formData.get("selectField_lwragwwz").toString();//项目
- switch (project) {
- case "交付":businessCustomerCount++;break;
- case "技术":technologyCustomerCount++;break;
- case "质量":qualityCustomerCount++;break;
- }
- }
- Map<String,Integer> result = new HashMap<>();
- result.put("businessCustomerCount",businessCustomerCount);
- result.put("technologyCustomerCount",technologyCustomerCount);
- result.put("qualityCustomerCount",qualityCustomerCount);
- return McR.success(result);
- }
- @Override
- public McR addCustomer(Map map) {
- if (Objects.isNull(map.get("formInstId"))){
- return McR.errorParam("formInstId不能为空");
- }
- String formInstId = map.get("formInstId").toString();
- Map formData = ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- Map<String,Object> body = new HashMap<>();
- body.put("customerCode", formData.get("textField_lwpqbm7a").toString());
- body.put("customerName", formData.get("textField_lwpqbm7b").toString());
- String recCondition = formData.get("selectField_lwpqbm7r").toString();
- switch (recCondition){
- case "货到收款": body.put("recConditionCode", "SKTJ01_SYS");break;
- case "30天后收款":body.put("recConditionCode", "SKTJ02_SYS");break;
- case "月结30天":body.put("recConditionCode", "SKTJ03_SYS");break;
- case "多到期日(按金额)":body.put("recConditionCode", "SKTJ04_SYS");break;
- }
- String payCurrency = formData.get("selectField_lwpqbm7s").toString();
- switch (payCurrency){
- case "人民币": body.put("payCurrencyCode", "PRE001");break;
- case "香港元":body.put("payCurrencyCode", "PRE002");break;
- case "欧元":body.put("payCurrencyCode", "PRE003");break;
- case "日本日元":body.put("payCurrencyCode", "PRE004");break;
- case "新台币元":body.put("payCurrencyCode", "PRE005");break;
- case "英镑":body.put("payCurrencyCode", "PRE006");break;
- case "美元":body.put("payCurrencyCode", "PRE007");break;
- }
- //客户简称
- if (Objects.nonNull(formData.get("textField_lwpqbm7c"))){
- body.put("customerShortName", formData.get("textField_lwpqbm7c").toString());
- }
- //客户英文名
- if (Objects.nonNull(formData.get("textField_lwpqbm7d"))){
- body.put("customerEnglishName", formData.get("textField_lwpqbm7d").toString());
- }
- //地址
- if (Objects.nonNull(formData.get("textField_lwpqbm7t"))){
- body.put("address", formData.get("textField_lwpqbm7t").toString());
- }
- //联系人
- if (Objects.nonNull(formData.get("textField_lwpqbm7u"))){
- body.put("linkMan", formData.get("textField_lwpqbm7u").toString());
- }
- //联系电话
- if (Objects.nonNull(formData.get("textField_lwpqbm7v"))){
- body.put("linkNumber", formData.get("textField_lwpqbm7v").toString());
- }
- //内/外销
- if (Objects.nonNull(formData.get("selectField_lwpqbm82"))){
- String makCustomerType = formData.get("selectField_lwpqbm82").toString();
- switch (makCustomerType){
- case "001": body.put("makCustomerType", "001");break;
- case "002":body.put("makCustomerType", "002");break;
- }
- }
- //备注
- if (Objects.nonNull(formData.get("textareaField_lwpqbm7x"))){
- body.put("comments", formData.get("textareaField_lwpqbm7x").toString());
- }
- Map<String, Object> result = post(erpUrl + "pws/mak/makCustomer/add", null, getHeader(), body);
- if ((boolean) result.get("success")){
- return McR.success();
- }else {
- return McR.errorUnknown(result.get("message").toString());
- }
- }
- @Override
- public McR updateCustomer(Map map) {
- if (Objects.isNull(map.get("formInstId"))){
- return McR.errorParam("formInstId不能为空");
- }
- String formInstId = map.get("formInstId").toString();
- Map formData = ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- Map<String,Object> body = new HashMap<>();
- body.put("customerCode", formData.get("textField_lwpqbm7a").toString());
- body.put("customerName", formData.get("textField_lwpqbm7b").toString());
- String recCondition = formData.get("selectField_lwpqbm7r").toString();
- switch (recCondition){
- case "货到收款": body.put("recConditionCode", "SKTJ01_SYS");break;
- case "30天后收款":body.put("recConditionCode", "SKTJ02_SYS");break;
- case "月结30天":body.put("recConditionCode", "SKTJ03_SYS");break;
- case "多到期日(按金额)":body.put("recConditionCode", "SKTJ04_SYS");break;
- }
- String payCurrency = formData.get("selectField_lwpqbm7s").toString();
- switch (payCurrency){
- case "人民币": body.put("payCurrencyCode", "PRE001");break;
- case "香港元":body.put("payCurrencyCode", "PRE002");break;
- case "欧元":body.put("payCurrencyCode", "PRE003");break;
- case "日本日元":body.put("payCurrencyCode", "PRE004");break;
- case "新台币元":body.put("payCurrencyCode", "PRE005");break;
- case "英镑":body.put("payCurrencyCode", "PRE006");break;
- case "美元":body.put("payCurrencyCode", "PRE007");break;
- }
- //客户简称
- if (Objects.nonNull(formData.get("textField_lwpqbm7c"))){
- body.put("customerShortName", formData.get("textField_lwpqbm7c").toString());
- }
- //客户英文名
- if (Objects.nonNull(formData.get("textField_lwpqbm7d"))){
- body.put("customerEnglishName", formData.get("textField_lwpqbm7d").toString());
- }
- //地址
- if (Objects.nonNull(formData.get("textField_lwpqbm7t"))){
- body.put("address", formData.get("textField_lwpqbm7t").toString());
- }
- //联系人
- if (Objects.nonNull(formData.get("textField_lwpqbm7u"))){
- body.put("linkMan", formData.get("textField_lwpqbm7u").toString());
- }
- //联系电话
- if (Objects.nonNull(formData.get("textField_lwpqbm7v"))){
- body.put("linkNumber", formData.get("textField_lwpqbm7v").toString());
- }
- //内/外销
- if (Objects.nonNull(formData.get("selectField_lwpqbm82"))){
- String makCustomerType = formData.get("selectField_lwpqbm82").toString();
- switch (makCustomerType){
- case "001": body.put("makCustomerType", "001");break;
- case "002":body.put("makCustomerType", "002");break;
- }
- }
- //备注
- if (Objects.nonNull(formData.get("textareaField_lwpqbm7x"))){
- body.put("comments", formData.get("textareaField_lwpqbm7x").toString());
- }
- Map<String, Object> result = put(erpUrl + "pws/mak/makCustomer/customEdit", null, getHeader(), body);
- if ((boolean) result.get("success")){
- return McR.success();
- }else {
- return McR.errorUnknown(result.get("message").toString());
- }
- }
- @Override
- public McR getProductDeliveryStatus(String keyword,int pageNo,int pageSize) {
- Map<String,Object> param = new HashMap<>();
- param.put("pageNo",pageNo);
- param.put("pageSize",pageSize);
- param.put("saleCode",keyword);
- Map<String,Object> res = get(erpUrl + "pws/pdm/pdmProductForm/list", param, getHeader());
- Map result = (Map) res.get("result");
- List<Map> data = (List<Map>) result.get("records");
- if (data.isEmpty()){
- param.remove("saleCode");
- param.put("saleName",keyword);
- res = get(erpUrl + "pws/pdm/pdmProductForm/list", param, getHeader());
- result = (Map) res.get("result");
- data = (List<Map>) result.get("records");
- }
- int totalCount = (int) result.get("total");
- int currentPage = (int) result.get("current");
- Map map = new HashMap();
- map.put("data",data);
- map.put("totalCount",totalCount);
- map.put("currentPage",currentPage);
- return McR.success(map);
- }
- @Override
- public McR getProcess(int pageNo,int pageSize) {
- Map param = new HashMap();
- param.put("active","D2_SUCCESS");
- param.put("pageNo",pageNo);
- param.put("pageSize",pageSize);
- Map<String, Object> res = get(erpUrl + "pws/pdm/pdmStation/list", param, getHeader());
- Map result = (Map) res.get("result");
- List<Map> data = (List<Map>) result.get("records");
- int totalCount = (int) result.get("total");
- int currentPage = (int) result.get("current");
- Map map = new HashMap();
- map.put("data",data);
- map.put("totalCount",totalCount);
- map.put("currentPage",currentPage);
- return McR.success(map);
- }
- @Override
- public McR getTaxRate() {
- Map param = new HashMap();
- param.put("pageNo",1);
- param.put("pageSize",50);
- Map<String, Object> res = get(erpUrl + "pws/fin/finTax/list", param, getHeader());
- Map result = (Map) res.get("result");
- List<Map> records = (List<Map>) result.get("records");
- List<String> list = records.stream().map(map1 -> map1.get("taxName").toString()).collect(Collectors.toList());
- return McR.success(list);
- }
- @Override
- public McR addSaleOrder(Map map) {
- if (Objects.isNull(map.get("formInstId"))){
- McR.errorParam("formInstId不能为空");
- }
- String formInstId = map.get("formInstId").toString();
- Map formData = ydClient.queryData(YDParam.builder().formInstId(formInstId)
- .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- //新增销售订单
- Map body = new HashMap();
- body.put("customerCode",getString(formData.get("textField_ly5m36nw")));//客户编码
- String priority = getString(formData.get("selectField_lwpsp162"));//紧急级别
- switch (priority) {
- case "普通": body.put("priority", "D1_NORMAL "); break;
- case "紧急": body.put("priority", "D2_URGENT"); break;
- case "特紧急": body.put("priority", "D3_VERY_URGENT"); break;
- }
- String soType = getString(formData.get("selectField_lx2xj36n"));//订单类型
- switch (soType) {
- case "销售订单": body.put("soType", "D1_SALES_ORDER"); break;
- case "预测订单": body.put("soType", "D2_FORECAST_ORDER"); break;
- }
- body.put("deliveryDate",getString(formData.get("textField_m0aduyx1")));//希望交期
- body.put("salesperson",getString(formData.get("textField_m0aduyx9")));//销售员
- body.put("payCurrencyCode",getString(formData.get("textField_m0aduyxa")));//币别
- body.put("ioDate",getString(formData.get("textField_m0aduyx2")));//单据日期
- body.put("comments",getString(formData.get("textareaField_lwpsp16e")));//备注
- //销售订单明细
- List<Map> list = (List<Map>) formData.get("tableField_lwpsp16f");
- List<Map> makSoDetailList = list.stream().map(map1 -> {
- Map detail = new HashMap();
- detail.put("productFormId",getString(map1.get("textField_m03o1x0m")));//交付状态id
- detail.put("saleCode",getString(map1.get("textField_lwpsp16g")));//交付名称
- detail.put("saleName",getString(map1.get("textField_lwpsp16h")));//交付说明
- detail.put("customerModel",getString(map1.get("textField_lwpsp16i")));//客户型号
- detail.put("partnumber",getString(map1.get("textField_lwpsp16k")));//物料编码
- detail.put("partname",getString(map1.get("textField_lwpsp16m")));//物料名称
- detail.put("pmodel",getString(map1.get("textField_lwpsp16o")));//物料型号
- detail.put("pstandard",getString(map1.get("textField_lwpsp16q")));//物料规格
- detail.put("stationCode",getString(map1.get("textField_m053iuol")));//工序编码
- detail.put("waferQty",getString(map1.get("numberField_lwpsp16t")));//片数
- detail.put("qty",getString(map1.get("numberField_lwpsp16v")));//数量
- detail.put("quotation",getString(map1.get("numberField_lwpsp172")));//未税单价
- detail.put("subTotal",getString(map1.get("numberField_lwpz9exp")));//未税总价
- detail.put("taxRate",getString(map1.get("numberField_m053iuom")));//税率
- detail.put("taxQuotation",getString(map1.get("numberField_lwpsp175")));//含税单价
- detail.put("taxSubtotal",getString(map1.get("numberField_lwpsp177")));//含税总价
- detail.put("die_model","");//
- return detail;
- }).collect(Collectors.toList());
- //附件
- List<Map> list2 = (List<Map>) formData.get("tableField_ly8fxusx");
- List<Map> makSoFilesList = list2.stream().map(map1 -> {
- Map detail = new HashMap();
- String fileType = getString(map1.get("selectField_m0ls7yb8"));
- if (fileType.equals("合同")){
- detail.put("fileType","D1_CONTRACT");
- }else {
- detail.put("fileType","D2_TECHNICAL_DOC");
- }
- List<Map> fileList = (List<Map>) JSONArray.parse(String.valueOf(map1.get("attachmentField_ly8fxusz")));
- String ydDownloadUrl = fileList.get(0).get("downloadUrl").toString();
- String fileName = fileList.get(0).get("name").toString();
- //将downloadurl下载到本地
- try {
- downloadFile(ydDownloadUrl, filePath + fileName);
- System.out.println("文件下载成功!");
- } catch (IOException e) {
- e.printStackTrace();
- }
- //上传附件
- detail.put("files",postWithFile(erpUrl + "pws/sys/common/upload",filePath + fileName));
- return detail;
- }).collect(Collectors.toList());
- body.put("makSoDetailList",makSoDetailList);
- body.put("makSoFilesList",makSoFilesList);
- Map res = post(erpUrl + "pws/mak/makSalesOrder/add", null, getHeader(), body);
- String orderCode = getString(res.get("result"));
- //更新宜搭订单编号
- ydClient.operateData(YDParam.builder()
- .formInstId(formInstId)
- .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_m0alsjj1",orderCode)))
- .build(),YDConf.FORM_OPERATION.update);
- return McR.success();
- }
- public void downloadFile(String fileURL, String savePath) throws IOException {
- //若是宜搭附件url 则需获得附件临时免登地址
- Map<String,Object> param = new HashMap<>();
- param.put("systemToken",ydConf.getSystemToken());
- param.put("userId","344749020127590108");//wzy
- param.put("fileUrl",fileURL);
- fileURL = ((DDR_New) UtilHttp.doGet("https://api.dingtalk.com/v1.0/yida/apps/temporaryUrls/" + ydConf.getAppType(), ddClient.initTokenHeader(), param, DDR_New.class)).getResult().toString();
- URL url = new URL(fileURL);
- HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
- int responseCode = httpConn.getResponseCode();
- // 检查HTTP响应代码是否为200
- if (responseCode == HttpURLConnection.HTTP_OK) {
- InputStream inputStream = httpConn.getInputStream();
- FileOutputStream outputStream = new FileOutputStream(savePath);
- byte[] buffer = new byte[4096];
- int bytesRead = -1;
- while ((bytesRead = inputStream.read(buffer)) != -1) {
- outputStream.write(buffer, 0, bytesRead);
- }
- outputStream.close();
- inputStream.close();
- } else {
- System.out.println("无法下载文件。HTTP响应代码: " + responseCode);
- }
- httpConn.disconnect();
- }
- @Override
- public McR updateSaleOrder(Map map) {
- if (Objects.isNull(map.get("formInstId"))){
- McR.errorParam("formInstId不能为空");
- }
- String formInstId = map.get("formInstId").toString();
- Map formData = ydClient.queryData(YDParam.builder().formInstId(formInstId)
- .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- //更新销售订单
- Map body = new HashMap();
- body.put("soCode",getString(formData.get("textField_m0alsjj1")));
- body.put("customerCode",getString(formData.get("textField_ly5m36nw")));//客户编码
- String priority = getString(formData.get("selectField_lwpsp162"));//紧急级别
- switch (priority) {
- case "普通": body.put("priority", "D1_NORMAL "); break;
- case "紧急": body.put("priority", "D2_URGENT"); break;
- case "特紧急": body.put("priority", "D3_VERY_URGENT"); break;
- }
- String soType = getString(formData.get("selectField_lx2xj36n"));//订单类型
- switch (soType) {
- case "销售订单": body.put("soType", "D1_SALES_ORDER"); break;
- case "预测订单": body.put("soType", "D2_FORECAST_ORDER"); break;
- }
- body.put("deliveryDate",getString(formData.get("textField_m0aduyx1")));//希望交期
- body.put("salesperson",getString(formData.get("textField_m0aduyx9")));//销售员
- body.put("payCurrencyCode",getString(formData.get("textField_m0aduyxa")));//币别
- body.put("ioDate",getString(formData.get("textField_m0aduyx2")));//单据日期
- body.put("comments",getString(formData.get("textareaField_lwpsp16e")));//备注
- //销售订单明细
- List<Map> list = (List<Map>) formData.get("tableField_lwpsp16f");
- List<Map> makSoDetailList = list.stream().map(map1 -> {
- Map detail = new HashMap();
- detail.put("productFormId",getString(map1.get("textField_m03o1x0m")));//交付状态id
- detail.put("saleCode",getString(map1.get("textField_lwpsp16g")));//交付名称
- detail.put("saleName",getString(map1.get("textField_lwpsp16h")));//交付说明
- detail.put("customerModel",getString(map1.get("textField_lwpsp16i")));//客户型号
- detail.put("partnumber",getString(map1.get("textField_lwpsp16k")));//物料编码
- detail.put("partname",getString(map1.get("textField_lwpsp16m")));//物料名称
- detail.put("pmodel",getString(map1.get("textField_lwpsp16o")));//物料型号
- detail.put("pstandard",getString(map1.get("textField_lwpsp16q")));//物料规格
- detail.put("stationCode",getString(map1.get("textField_m053iuol")));//工序编码
- detail.put("waferQty",getString(map1.get("numberField_lwpsp16t")));//片数
- detail.put("qty",getString(map1.get("numberField_lwpsp16v")));//数量
- detail.put("quotation",getString(map1.get("numberField_lwpsp172")));//未税单价
- detail.put("subTotal",getString(map1.get("numberField_lwpz9exp")));//未税总价
- detail.put("taxRate",getString(map1.get("numberField_m053iuom")));//税率
- detail.put("taxQuotation",getString(map1.get("numberField_lwpsp175")));//含税单价
- detail.put("taxSubtotal",getString(map1.get("numberField_lwpsp177")));//含税总价
- detail.put("die_model","");//
- return detail;
- }).collect(Collectors.toList());
- //附件
- List<Map> list2 = (List<Map>) formData.get("tableField_ly8fxusx");
- List<Map> makSoFilesList = list2.stream().map(map1 -> {
- Map detail = new HashMap();
- String fileType = getString(map1.get("selectField_m0ls7yb8"));
- if (fileType.equals("合同")){
- detail.put("fileType","D1_CONTRACT");
- }else {
- detail.put("fileType","D2_TECHNICAL_DOC");
- }
- List<Map> fileList = (List<Map>) JSONArray.parse(String.valueOf(map1.get("attachmentField_ly8fxusz")));
- String ydDownloadUrl = fileList.get(0).get("downloadUrl").toString();
- String fileName = fileList.get(0).get("name").toString();
- //将downloadurl下载到本地
- try {
- downloadFile(ydDownloadUrl, filePath + fileName);
- System.out.println("文件下载成功!");
- } catch (IOException e) {
- e.printStackTrace();
- }
- //上传附件
- detail.put("files",postWithFile(erpUrl + "pws/sys/common/upload",filePath + fileName));
- return detail;
- }).collect(Collectors.toList());
- body.put("makSoDetailList",makSoDetailList);
- body.put("makSoFilesList",makSoFilesList);
- Map res = put(erpUrl + "pws/mak/makSalesOrder/change", null, getHeader(), body);
- return McR.success();
- }
- private String getString(Object object){
- return (object == null) ? "" : object.toString();
- }
- private Map<String,String> getHeader(){
- Map<String, Object> map = post(erpUrl + "pws/sys/mLogin", null, null,UtilMap.map("username, password",userName,password));
- if (Objects.nonNull(map.get("result"))){
- Map<String,Object> result = (Map<String,Object>) map.get("result");
- if (Objects.nonNull(result.get("token"))){
- Map<String, String> header = new HashMap<>();
- header.put("X-Access-Token", result.get("token").toString());
- return header;
- }
- }
- return null;
- }
- /**
- * 封装GET请求
- *
- * @param url 请求的URL
- * @param params 请求参数
- * @param headers 请求头
- * @return 响应内容
- */
- public static Map<String, Object> get(String url, Map<String, Object> params, Map<String, String> headers) {
- log.info("GET 请求url:{}, 请求参数:{}, 请求头:{}", url, params, headers);
- HttpRequest get = HttpUtil.createGet(url);
- if (params!= null){
- get.form(params);
- }
- if (headers!= null){
- get.addHeaders(headers);
- }
- HttpResponse response = get.execute();
- Map<String, Object> result = null;
- try {
- ObjectMapper objectMapper = new ObjectMapper();
- result = objectMapper.readValue(response.body(), new TypeReference<Map<String, Object>>() {});
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
- log.info("响应结果: {}", result);
- return result;
- }
- /**
- * 封装POST请求
- *
- * @param url 请求的URL
- * @param params 请求参数
- * @param headers 请求头
- * @param body 请求体
- * @return 响应内容
- */
- public static Map<String, Object> post(String url, Map<String, Object> params, Map<String, String> headers, Map<String, Object> body) {
- log.info("POST 请求url:{}, 请求参数:{}, 请求头:{}, 请求体:{}", url, params, headers, body);
- HttpRequest request = HttpUtil.createPost(url);
- if (params != null) {
- request.form(params);
- }
- if (headers != null) {
- request.addHeaders(headers);
- }
- if (body != null) {
- request.body(JSONUtil.toJsonStr(body), "application/json");
- }
- HttpResponse response = request.execute();
- // Map<String,Object> result = JSONUtil.toBean(response.body(), Map.class);
- Map<String, Object> result = null;
- try {
- ObjectMapper objectMapper = new ObjectMapper();
- result = objectMapper.readValue(response.body(), new TypeReference<Map<String, Object>>() {});
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
- log.info("响应结果: {}", result);
- return result;
- }
- public static Map<String, Object> put(String url, Map<String, Object> params, Map<String, String> headers, Map<String, Object> body) {
- log.info("PUT 请求url:{}, 请求参数:{}, 请求头:{}, 请求体:{}", url, params, headers, body);
- HttpRequest request = HttpRequest.put(url);
- if (params != null) {
- request.form(params);
- }
- if (headers != null) {
- request.addHeaders(headers);
- }
- if (body != null) {
- request.body(JSONUtil.toJsonStr(body), "application/json");
- }
- HttpResponse response = request.execute();
- // Map<String,Object> result = JSONUtil.toBean(response.body(), Map.class);
- Map<String, Object> result = null;
- try {
- ObjectMapper objectMapper = new ObjectMapper();
- result = objectMapper.readValue(response.body(), new TypeReference<Map<String, Object>>() {});
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
- log.info("响应结果: {}", result);
- return result;
- }
- public String postWithFile(String url, String filePath) {
- // 文件路径
- File file = new File(filePath);
- // 创建HttpClient实例
- HttpClient client = HttpClients.createDefault();
- // 创建HttpPost实例
- HttpPost post = new HttpPost(url);
- // 添加请求头
- post.setHeader("X-Access-Token", getHeader().get("X-Access-Token"));
- // 使用MultipartEntityBuilder来构建multipart请求
- MultipartEntityBuilder builder = MultipartEntityBuilder.create();
- builder.addBinaryBody("file", file, ContentType.DEFAULT_BINARY, file.getName());
- // 设置请求体
- HttpEntity multipart = builder.build();
- post.setEntity(multipart);
- try {
- // 发送请求并获取响应
- org.apache.http.HttpResponse response = client.execute(post);
- // 处理响应
- // 例如,打印响应状态码
- System.out.println(response.getStatusLine().getStatusCode());
- HttpEntity entity = response.getEntity();
- String fileName = "";
- // 判断响应实体是否为null
- if (entity != null) {
- // 使用EntityUtils读取响应体内容(这里假设是文本类型)
- String responseString = EntityUtils.toString(entity, "UTF-8"); // 指定字符集
- System.out.println("Response Body: " + responseString);
- Map parse = (Map) JSONObject.parse(responseString);
- fileName = getString(parse.get("message"));
- // 释放响应实体资源(虽然EntityUtils.toString()在某些HttpClient版本中会自动处理)
- EntityUtils.consume(entity);
- }
- return fileName;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- @Override
- public McR getTbStageDetails(String stageName) {
- Map<String, Object> result = new HashMap<>();
- //查询子任务信息
- for (String stage : STAGES.keySet()) {
- if (STAGES.get(stage).equals(stageName)){
- Map<String,Object> stageDetail = new HashMap<>();
- TBR tbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", initHeaderToken(), UtilMap.map("parentTaskId", stage), TBR.class);
- List<Map<String, Object>> task = (List<Map<String, Object>>) tbr.getResult();
- List<Map<String, Object>> list = new ArrayList<>();
- for (Map<String,Object> subTask : task) {
- Map<String,Object> taskDetail = new HashMap<>();
- String content = subTask.get("content").toString();
- taskDetail.put("content", content);
- taskDetail.put("url", TASK_URL_PREFIX + subTask.get("id"));
- //查询子任务状态
- String tfsId = subTask.get("tfsId").toString();
- TBR tbr3 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/65bb53546a74a42e2d608f05/taskflowstatus/search", initHeaderToken(), UtilMap.map("tfsIds",tfsId), TBR.class);
- List<Map<String, Object>> result3 = (List<Map<String, Object>>) tbr3.getResult();
- String state = result3.get(0).get("name").toString();
- taskDetail.put("state", state);
- List<Map<String,Object>> customfields = (List<Map<String,Object>>) subTask.get("customfields");
- taskDetail.put("dept", "");
- taskDetail.put("part", "");
- taskDetail.put("area", "");
- taskDetail.put("file", "");
- taskDetail.put("file2", "");
- if (!customfields.isEmpty()){
- for (Map<String, Object> customfield : customfields) {
- String cfId = customfield.get("cfId").toString();
- List<Map<String, Object>> value = (List<Map<String, Object>>) customfield.get("value");
- if (!value.isEmpty()){
- String title = value.get(0).get("title").toString();
- switch (cfId){
- case "666feed723d86af4c9c9f3c6":taskDetail.put("dept", title);break;//责任部门/角色
- case "666fef0f5b836a19902b47bf":taskDetail.put("part", title);break;//评审要素
- case "666fef06cdcac0bbc164930e":taskDetail.put("area", title);break;//评审领域
- case "668def21d56d44adafe00d56":taskDetail.put("file", title);break;//交付件
- case "668df08b82ff76cefacfec99":taskDetail.put("file2", title);break;//交付件2
- }
- }
- }
- }
- taskDetail.put("carTag", "");
- taskDetail.put("payTag", "");
- List<String> tagIds = (List<String>) subTask.get("tagIds");
- if (!tagIds.isEmpty()){
- for (String tagId : tagIds) {
- if (TAGS.containsKey(tagId)) {
- if (TAGS.get(tagId).contains("车载")){
- taskDetail.put("carTag", TAGS.get(tagId).substring(3,5));
- }else if (TAGS.get(tagId).contains("消费")){
- taskDetail.put("payTag", TAGS.get(tagId).substring(3,5));
- }
- }
- }
- }
- list.add(taskDetail);
- }
- //获取任务状态
- TBR tbr2 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", initHeaderToken(), UtilMap.map("taskId", stage), TBR.class);
- List<Map<String, Object>> result2 = (List<Map<String, Object>>) tbr2.getResult();
- String tfsId = result2.get(0).get("tfsId").toString();
- TBR tbr3 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/65bb53546a74a42e2d608f05/taskflowstatus/search", initHeaderToken(), UtilMap.map("tfsIds", tfsId), TBR.class);
- List<Map<String, Object>> result3 = (List<Map<String, Object>>) tbr3.getResult();
- String state = result3.get(0).get("name").toString();
- stageDetail.put("list",list);
- stageDetail.put("state", state);
- result.put(STAGES.get(stage), stageDetail);
- }
- }
- return McR.success(result);
- }
- private Map<String, String> initHeaderToken() {
- Map header = new HashMap();
- header.put("Authorization", this.getAccessToken());
- header.put("X-Tenant-Id", this.tbConf.getTenantId());
- header.put("X-Tenant-Type", "organization");
- return header;
- }
- private String getAccessToken() {
- synchronized(this.$lock) {
- String accessToken = UtilToken.get("invalid-token-teambition");
- if (StringUtils.isNotBlank(accessToken)) {
- return accessToken;
- } else {
- Algorithm algorithm = Algorithm.HMAC256(this.tbConf.getAppSecret());
- long timestamp = System.currentTimeMillis();
- Date issuedAt = new Date(timestamp);
- Date expiresAt = new Date(timestamp + EXPIRES_IN);
- accessToken = JWT.create().withClaim("_appId", this.tbConf.getAppID()).withIssuedAt(issuedAt).withExpiresAt(expiresAt).sign(algorithm);
- log.info("响应token, {}", accessToken);
- UtilToken.put("invalid-token-teambition", accessToken, EXPIRES_IN);
- return accessToken;
- }
- }
- }
- }
|