123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842 |
- package com.malk.mc.service.impl;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.util.NumberUtil;
- import cn.hutool.core.util.ObjectUtil;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.malk.core.McProject;
- import com.malk.mc.service.McYdService;
- import com.malk.server.aliwork.YDConf;
- import com.malk.server.aliwork.YDParam;
- import com.malk.server.common.McException;
- import com.malk.server.common.McR;
- import com.malk.server.dingtalk.DDConf;
- import com.malk.server.dingtalk.DDR;
- import com.malk.server.dingtalk.DDR_New;
- import com.malk.service.aliwork.YDClient;
- import com.malk.service.aliwork.YDService;
- import com.malk.service.dingtalk.DDClient;
- import com.malk.service.dingtalk.DDClient_Contacts;
- import com.malk.service.dingtalk.DDClient_Notice;
- import com.malk.service.dingtalk.DDClient_Workflow;
- import com.malk.utils.*;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.logging.log4j.util.Strings;
- import org.slf4j.MDC;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.Async;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.text.DecimalFormat;
- import java.time.LocalDate;
- import java.time.LocalTime;
- import java.util.*;
- import java.util.stream.Collectors;
- @Slf4j
- @Service
- public class McYdServiceImpl implements McYdService {
- @Autowired
- private YDClient ydClient;
- @Autowired
- private DDClient ddClient;
- @Autowired
- private DDConf ddConf;
- @Autowired
- private YDConf ydConf;
- @Autowired
- private DDClient_Workflow ddClientWorkflow;
- @Autowired
- private DDClient_Notice ddClientNotice;
- @Autowired
- private DDClient_Contacts ddClient_contacts;
- @Override
- @Async
- public void updateFormDataVersion(Map map) {
- String pid = Objects.nonNull(map.get("pid")) ? map.get("pid").toString() : "";
- String formInstId = Objects.nonNull(map.get("formInstId")) ? map.get("formInstId").toString() : "";
- String formUuid = Objects.nonNull(map.get("formUuid")) ? map.get("formUuid").toString() : "";
- if (Strings.isNotBlank(pid)){
- MDC.put("MDC_KEY_PID",pid);
- if (Strings.isNotBlank(formInstId) && Strings.isBlank(formUuid)){
- ydClient.operateData(YDParam.builder()
- .formInstId(formInstId)
- .useLatestVersion(true)
- .updateFormDataJson("{}").build(), YDConf.FORM_OPERATION.update);
- }else if (Strings.isBlank(formInstId) && Strings.isNotBlank(formUuid)){
- int i = 1;
- int pageSize = 10;
- DDR_New ddrNew = null;
- do {
- int i1 =1 ;
- boolean flag1 = false;
- while (i1<=5 && !flag1) {
- try {
- ddrNew = ydClient.queryData(YDParam.builder()
- .formUuid(formUuid)
- .pageNumber(i)
- .pageSize(pageSize)
- .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
- List<String> formInstIdList = (List<String>) ddrNew.getData();
- //noExecuteExpression字段不传或传false 传true会导致实例版本不更新或滞后更新
- ydClient.operateData(YDParam.builder()
- .formInstanceIdList(formInstIdList)
- .formUuid(formUuid)
- .useLatestFormSchemaVersion(true)
- .updateFormDataJson("{}")
- .noExecuteExpression(false)
- .asynchronousExecution(false)
- .build(),YDConf.FORM_OPERATION.multi_update);
- i++;
- flag1 = true;
- }catch (Exception e){
- log.error("更新表单实例版本失败:{}, 重试次数:{}",e.getMessage(),i1);
- try {
- Thread.sleep(3000);
- } catch (InterruptedException ex) {
- throw new RuntimeException(ex);
- }
- i1++;
- }
- }
- if (i1 > 5){
- log.error("更新表单实例版本失败:{}");
- break;
- }
- }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
- }
- //发送工作通知给当前登陆人
- if (Objects.nonNull(map.get("userId"))){
- String userId = map.get("userId").toString();
- Map param2 = new HashMap();
- param2.put("access_token",ddClient.getAccessToken());
- Map body3 = new HashMap();
- body3.put("agent_id",ddConf.getAgentId());
- body3.put("userid_list",userId);
- Map msg = new HashMap();
- msg.put("msgtype","text");
- //获取当前时间 精确到秒
- String time = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
- msg.put("text", UtilMap.map("content","表单实例版本已更新 时间:" + time));
- body3.put("msg",msg);
- UtilHttp.doPost("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2",null,param2,body3);
- }
- }
- }
- @Override
- public McR initiateApproval(Map map) {
- String pid = getString(map.get("pid"));
- String formUuid = getString(map.get("formUuid"));
- String processCode = getString(map.get("processCode"));
- String userId = getString(map.get("userId"));
- Map formData = (Map) map.get("formData");
- Map processData = new HashMap();
- if (Objects.nonNull(map.get("processData"))){
- processData = (Map) map.get("processData");
- }
- if (Strings.isNotBlank(pid)){
- //发起审批
- String[] yida = McProject.getYida(pid);
- Map<String,Object> body = new HashMap<>();
- if (!PublicUtil.isNull(pid) && yida != null && yida.length >= 2) {
- body.put("appType",yida[0]);
- body.put("systemToken",yida[1]);
- }
- body.put("userId",userId);
- body.put("formUuid",formUuid);
- body.put("processCode",processCode);
- body.put("formDataJson", JSONObject.toJSONString(formData));
- if (Objects.nonNull(processData) && processData.size() > 0){
- body.put("processData", JSONObject.toJSONString(processData));
- }
- UtilHttp.doPost("https://api.dingtalk.com/v1.0/yida/processes/instances/start", ddClient.initTokenHeader(), null, body, DDR_New.class);
- return McR.success();
- }
- return McR.errorParam("参数缺失!");
- }
- @Override
- public McR convertSubTableNumber(Map map) {
- String formInstId = getString(map.get("formInstId"));
- String tableField = getString(map.get("tableField"));
- String numberFieldCode = getString(map.get("numFileCodes"));
- String textFieldCode = getString(map.get("textFieldCodes"));
- if (Strings.isNotBlank(formInstId)){
- DDR_New ddrNew = ydClient.queryData(YDParam.builder()
- .formInstId(formInstId)
- .build(), YDConf.FORM_QUERY.retrieve_id);
- Map formData = ddrNew.getFormData();
- Map updateMap=new HashMap();
- if (!PublicUtil.isNull(tableField)&&tableField.startsWith("tableField_")) {
- List<Map<String, ?>> table = UtilMap.getList( formData,(tableField));
- for (Map item : table) {
- String[] numberFieldCodes=numberFieldCode.split(",");
- String[] textFieldCodes=textFieldCode.split(",");
- for (int i = 0; i < numberFieldCodes.length; i++) {
- String numstr=UtilMap.getNumberStr(item,numberFieldCodes[i]);
- if(PublicUtil.isNull(numstr)||numstr.equals("0")){
- updateMap.put(textFieldCodes[i],"0.00");
- continue;
- }
- BigDecimal number = NumberUtil.toBigDecimal(numstr);
- // 创建一个 DecimalFormat 实例,指定千位分隔符模式
- DecimalFormat df = new DecimalFormat("#,###.00");
- // 格式化 double 数值
- String formattedText = df.format(number);
- item.put(textFieldCodes[i],formattedText);
- }
- }
- updateMap.put(tableField,getTableData(table)); // 添加一层过滤
- }
- if(!PublicUtil.isNull(map,"mainNumKeys","mainTextKeys")){
- String[] mainNumKeys=UtilMap.getString(map,"mainNumKeys").split(",");
- String[] mainTextKeys=UtilMap.getString(map,"mainTextKeys").split(",");
- for (int i = 0; i < mainNumKeys.length; i++) {
- String numstr=UtilMap.getNumberStr(formData,(mainNumKeys[i]));
- if(PublicUtil.isNull(numstr)||numstr.equals("0")){
- updateMap.put(mainTextKeys[i],"0.00");
- continue;
- }
- BigDecimal number = NumberUtil.toBigDecimal(numstr);
- // 创建一个 DecimalFormat 实例,指定千位分隔符模式
- DecimalFormat df = new DecimalFormat("#,###.00");
- // 格式化 double 数值
- String formattedText = df.format(number);
- updateMap.put(mainTextKeys[i],formattedText);
- }
- }
- ydClient.operateData(YDParam.builder()
- .formInstId(formInstId)
- .useLatestVersion(true)
- .updateFormDataJson(JSONObject.toJSONString(updateMap))
- .build(), YDConf.FORM_OPERATION.update);
- }
- return McR.success();
- }
- @Override
- public McR saveApproverToForm(Map map) {
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- String key = UtilMap.getString(map,"key");
- String formInstId = UtilMap.getString(map,"formInstId");
- JSONArray jsonArray=(JSONArray) ydClient.queryData(YDParam.builder().processInstanceId(formInstId).build(),YDConf.FORM_QUERY.retrieve_approval_record).getResult();
- List<String> userIds = new ArrayList<>();
- extractOperatorIds(jsonArray,userIds);
- ydClient.operateData(YDParam.builder().updateFormDataJson(JSONObject.toJSONString(UtilMap.map(key, userIds))).formInstId(formInstId).build(), YDConf.FORM_OPERATION.update);
- return McR.success();
- }
- @Override
- public McR multiLocationOutbound(Map map) {
- String formInstId = UtilMap.getString(map,"formInstId");//实例id(出库单)
- Map d = ydClient.queryData(YDParam.builder().formInstId(formInstId)
- .formUuid("FORM-3208DFE5463549A9A57FB94358A75E80PV5F")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(),YDConf.FORM_QUERY.retrieve_id).getFormData();
- System.out.println("出库单数据:"+d);
- List<Map> mapList = (List<Map>)d.get("tableField_m8mo8506");
- System.out.println("出库单明细数据:"+mapList);
- ArrayList<Object> entries = new ArrayList<>();
- for(Map map1 : mapList){
- String LBJId = map1.get("textField_ma1usp6o").toString();//零部件的实例id
- entries.add(LBJId);
- System.out.println("物料名称:"+map1.get("textField_m99kztjo").toString());
- BigDecimal InventoryCount = BigDecimal.valueOf(0);//库存数量
- BigDecimal OutboundQuantity = BigDecimal.valueOf(0);//
- if(!map1.get("numberField_m9qdwvu1_value").toString().isEmpty()){
- InventoryCount = new BigDecimal( map1.get("numberField_m9qdwvu1").toString());
- }
- BigDecimal numberFieldM9qdwvu1 = InventoryCount.subtract( new BigDecimal( map1.get("numberField_m8mo8508").toString()));//存库数量 - 出库数量
- System.out.println("出库后数量:"+numberFieldM9qdwvu1);
- Map d1 = ydClient.queryData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(),YDConf.FORM_QUERY.retrieve_id).getFormData();
- System.out.println(map1.get("textField_m99kztjo").toString()+"的数据明细:"+ d1.get("tableField_m96gje14").toString());
- String s = d1.get("tableField_m96gje14").toString();
- String warehouse = JSON.parseArray(s).getJSONObject(0).get("selectField_m88f1qi8").toString();//所属仓库
- String WarehouseLocation = JSON.parseArray(s).getJSONObject(0).get("textField_m8mnxgql").toString();//所属库位
- String SafetyValue = JSON.parseArray(s).getJSONObject(0).get("numberField_m8873fn4").toString();//安全库存值
- ArrayList<Map<String,String>> maps_YD = new ArrayList<>();
- Map sss=new HashMap<>();
- sss.put("selectField_m88f1qi8",warehouse);//所属仓库
- sss.put("textField_m8mnxgql",WarehouseLocation);//所属库位
- sss.put("numberField_m8873fn4",SafetyValue);//安全库存值
- sss.put("numberField_m9c8n9go",numberFieldM9qdwvu1);//仓库数量
- maps_YD.add(sss);
- ydClient.operateData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_m96gje14",maps_YD)))
- .userId("332051151139376769").build(),YDConf.FORM_OPERATION.update);
- BigDecimal InventoryQuantity = new BigDecimal( d1.get("numberField_m8obn6wk").toString());//库存数量
- BigDecimal FreezeQuantity = null;
- if(!d1.get("numberField_m8obn6wl_value").toString().isEmpty()){
- FreezeQuantity = new BigDecimal( d1.get("numberField_m8obn6wl").toString());//冻结数量
- }else {
- FreezeQuantity = BigDecimal.valueOf(0);
- }
- System.out.println("--------------------零部件子表数据修改完毕!---------------------");
- BigDecimal FreezeQuantity_AAA = FreezeQuantity.add( new BigDecimal( map1.get("numberField_m8mo8508").toString()));//冻结数量(新)
- BigDecimal AvailableQuantity_AAA = numberFieldM9qdwvu1;//可用存库数量(新)
- ydClient.operateData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_m8obn6wl, numberField_m8gz97nk",FreezeQuantity_AAA,AvailableQuantity_AAA)))
- .userId("332051151139376769")
- .build(),YDConf.FORM_OPERATION.update);
- System.out.println("----------------------零部件主表数据修改完毕!------------------");
- }
- return McR.success();
- }
- @Override
- public McR WarehouseStorage(Map map) {
- String formInstId = UtilMap.getString(map,"formInstId");//实例id(入库单)
- Map d = ydClient.queryData(YDParam.builder().formInstId(formInstId)
- .formUuid("FORM-6DED8EB4CF0446DB8841C7798E106F2886OH")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(),YDConf.FORM_QUERY.retrieve_id).getFormData();
- System.out.println("入库单数据:"+d);
- List<Map> mapList = (List<Map>)d.get("tableField_m8mseubi");
- System.out.println("入库单明细数据:"+mapList);
- ArrayList<Object> entries = new ArrayList<>();
- for(Map map1 : mapList){
- String LBJId = map1.get("textField_ma3jhnpr").toString();//零部件的实例id
- entries.add(LBJId);
- System.out.println("物料名称:"+map1.get("textField_m9b1vd2w").toString());
- BigDecimal numberFieldM9qdwvu1 = new BigDecimal( map1.get("numberField_ma3jwnr3").toString() ).add(new BigDecimal( map1.get("numberField_m8mseubm").toString()));//存库数量 + 入库数量
- System.out.println("入库后数量:"+numberFieldM9qdwvu1);
- Map d1 = ydClient.queryData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(),YDConf.FORM_QUERY.retrieve_id).getFormData();
- System.out.println(map1.get("textField_m9b1vd2w").toString()+"的数据明细:"+ d1.get("tableField_m96gje14").toString());
- String s = d1.get("tableField_m96gje14").toString();
- String warehouse = JSON.parseArray(s).getJSONObject(0).get("selectField_m88f1qi8").toString();//所属仓库
- String WarehouseLocation = JSON.parseArray(s).getJSONObject(0).get("textField_m8mnxgql").toString();//所属库位
- String SafetyValue = JSON.parseArray(s).getJSONObject(0).get("numberField_m8873fn4").toString();//安全库存值
- ArrayList<Map<String,String>> maps_YD = new ArrayList<>();
- Map sss=new HashMap<>();
- sss.put("selectField_m88f1qi8",warehouse);//所属仓库
- sss.put("textField_m8mnxgql",WarehouseLocation);//所属库位
- sss.put("numberField_m8873fn4",SafetyValue);//安全库存值
- sss.put("numberField_m9c8n9go",numberFieldM9qdwvu1);//仓库数量
- maps_YD.add(sss);
- ydClient.operateData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_m96gje14",maps_YD)))
- .userId("332051151139376769").build(),YDConf.FORM_OPERATION.update);
- BigDecimal InventoryQuantity = null;
- if(!d1.get("numberField_m8gz97nk").toString().isEmpty()){
- InventoryQuantity = new BigDecimal( d1.get("numberField_m8gz97nk").toString());//可用库存数量
- }else {
- InventoryQuantity = BigDecimal.valueOf(0);
- }
- BigDecimal VirtualQuantity = null;
- if(!d1.get("numberField_m8obn6wq_value").toString().isEmpty()){
- VirtualQuantity = new BigDecimal( d1.get("numberField_m8obn6wq").toString());//虚拟数量
- }else {
- VirtualQuantity = BigDecimal.valueOf(0);
- }
- System.out.println("--------------------零部件子表数据修改完毕!---------------------");
- BigDecimal VirtualQuantity_AAA = VirtualQuantity.add( new BigDecimal( map1.get("numberField_m8mseubm").toString()));//虚拟数量(新)
- BigDecimal AvailableQuantity_AAA = InventoryQuantity .add (new BigDecimal( map1.get("numberField_m8mseubm").toString()));//可用存库数量(新)
- ydClient.operateData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_m8obn6wq, numberField_m8gz97nk",VirtualQuantity_AAA,AvailableQuantity_AAA)))
- .userId("332051151139376769")
- .build(),YDConf.FORM_OPERATION.update);
- System.out.println("----------------------零部件主表数据修改完毕!------------------");
- }
- return McR.success();
- }
- @Override
- public McR ProductReturn(Map map) {
- String formInstId = UtilMap.getString(map,"formInstId");//实例id(退货单)
- Map data = ydClient.queryData(YDParam.builder().formInstId(formInstId)
- .formUuid("FORM-E40A23253F2F43FEAF0E40F274A67B34OQC9")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- System.out.println("退货单:"+data);
- List<Map> mapList = (List<Map>)data.get("tableField_m99koj01");
- System.out.println("退货单明细数据:"+mapList);
- ArrayList<Object> entries = new ArrayList<>();
- for (Map map1 : mapList){
- String LBJId = map1.get("textField_maki4tqo").toString();//零部件的实例id
- System.out.println("物料名称:"+map1.get("textField_m99koj02").toString());//物料名称
- System.out.println("所属库位:"+map1.get("textField_maki4tqp").toString());//产品库位
- System.out.println("退货数量:"+map1.get("numberField_ma0e13js").toString());//退货数量
- Map data1 = ydClient.queryData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- System.out.println(map1.get("textField_m99koj02")+"明细表数据:"+data1.get("tableField_m96gje14"));//零部件明细
- String s = data1.get("tableField_m96gje14").toString();
- String warehouse = JSON.parseArray(s).getJSONObject(0).get("selectField_m88f1qi8").toString();//所属仓库
- String WarehouseLocation = JSON.parseArray(s).getJSONObject(0).get("textField_m8mnxgql").toString();//所属库位
- String SafetyValue = JSON.parseArray(s).getJSONObject(0).get("numberField_m8873fn4").toString();//安全库存值
- BigDecimal numberFieldM9c8n9go = new BigDecimal(JSON.parseArray(s).getJSONObject(0).get("numberField_m9c8n9go").toString());//仓库数量
- BigDecimal numm = new BigDecimal(map1.get("numberField_ma0e13js").toString()).add(numberFieldM9c8n9go); //退货后的库存数量 = 退货数量 + 仓库数量(子)
- ArrayList<Map<String,String>> maps_YD = new ArrayList<>();
- Map sss=new HashMap<>();
- sss.put("selectField_m88f1qi8",warehouse);//所属仓库
- sss.put("textField_m8mnxgql",WarehouseLocation);//所属库位
- sss.put("numberField_m8873fn4",SafetyValue);//安全库存值
- sss.put("numberField_m9c8n9go",numm);//仓库数量
- maps_YD.add(sss);
- ydClient.operateData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_m96gje14",maps_YD)))
- .userId("332051151139376769").build(),YDConf.FORM_OPERATION.update);
- BigDecimal InventoryQuantity = null;
- if(!data1.get("numberField_m8gz97nk_value").toString().isEmpty()){
- InventoryQuantity = new BigDecimal( data1.get("numberField_m8gz97nk").toString());//可用库存数量
- }else {
- InventoryQuantity = BigDecimal.valueOf(0);
- }
- BigDecimal FreezeQuantity = null;
- if(!data1.get("numberField_m8obn6wl_value").toString().isEmpty()){
- FreezeQuantity = new BigDecimal( data1.get("numberField_m8obn6wl").toString());//冻结数量
- }else {
- FreezeQuantity = BigDecimal.valueOf(0);
- }
- System.out.println("---------------------------------------零部件子表数据修改完毕--------------------------------");
- BigDecimal FreezeQuantity_AAA = FreezeQuantity.subtract( new BigDecimal( map1.get("numberField_ma0e13js").toString()));//冻结数量(新) = 冻结数量 - 退货数量
- BigDecimal AvailableQuantity_AAA = InventoryQuantity.add(new BigDecimal( map1.get("numberField_ma0e13js").toString()));//可用存库数量(新) = 可用库存数量 + 退货数量
- ydClient.operateData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_m8obn6wl, numberField_m8gz97nk",FreezeQuantity_AAA,AvailableQuantity_AAA)))
- .userId("332051151139376769")
- .build(),YDConf.FORM_OPERATION.update);
- System.out.println("----------------------零部件主表数据修改完毕!------------------");
- }
- return McR.success();
- }
- @Override
- public McR allocateTransfer(Map map) {
- String formInstId = UtilMap.getString(map,"formInstId");//实例id(调拨流程)
- Map data = ydClient.queryData(YDParam.builder().formInstId(formInstId)
- .formUuid("FORM-C6360F0CA28543E8BA99A1DDCF90964FSJEM")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- System.out.println("调拨单:"+data);
- List<Map> mapList = (List<Map>)data.get("tableField_m9grj2ih");
- System.out.println("调拨明细数据:"+mapList);
- ArrayList<Object> entries = new ArrayList<>();
- for (Map map1 : mapList){
- //TODO:1、调出零部件处理
- String LBJId = map1.get("textField_mawbt28t").toString();//(调出)零部件的实例id
- System.out.println("调出的所属库位:"+map1.get("textField_m9grj2il").toString());//产品库位
- System.out.println("调出的所属仓库:"+map1.get("textField_m9grj2ik").toString());//产品仓库
- System.out.println("调拨前数量:"+map1.get("numberField_m9gs7k82").toString());//调拨前数量
- Map data1 = ydClient.queryData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- String s = data1.get("tableField_m96gje14").toString();
- String warehouse = JSON.parseArray(s).getJSONObject(0).get("selectField_m88f1qi8").toString();//所属仓库
- String WarehouseLocation = JSON.parseArray(s).getJSONObject(0).get("textField_m8mnxgql").toString();//所属库位
- String SafetyValue = JSON.parseArray(s).getJSONObject(0).get("numberField_m8873fn4").toString();//安全库存值
- BigDecimal numberFieldM9c8n9go = new BigDecimal(JSON.parseArray(s).getJSONObject(0).get("numberField_m9c8n9go").toString());//仓库数量
- BigDecimal numm = numberFieldM9c8n9go.subtract(new BigDecimal(map1.get("numberField_m9grj2ij").toString())); //调拨后的库存数量 = 仓库数量 - 调拨数量
- ArrayList<Map<String,String>> maps_YD = new ArrayList<>();
- Map sss=new HashMap<>();
- sss.put("selectField_m88f1qi8",warehouse);//所属仓库
- sss.put("textField_m8mnxgql",WarehouseLocation);//所属库位
- sss.put("numberField_m8873fn4",SafetyValue);//安全库存值
- sss.put("numberField_m9c8n9go",numm);//仓库数量
- maps_YD.add(sss);
- ydClient.operateData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_m96gje14",maps_YD)))
- .userId("332051151139376769").build(),YDConf.FORM_OPERATION.update);
- //TODO:2、调入零部件处理
- String LBJId2 = map1.get("textField_maxendgs").toString();//(调入)零部件的实例id
- System.out.println("调入的所属库位:"+map1.get("textField_m9grj2il").toString());//产品库位
- System.out.println("调入的所属仓库:"+map1.get("textField_m9grj2ik").toString());//产品仓库
- System.out.println("调拨前数量:"+map1.get("numberField_maz574d0").toString());//调拨前数量
- Map data2 = ydClient.queryData(YDParam.builder().formInstId(LBJId2)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .userId("332051151139376769").build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- String s1 = data2.get("tableField_m96gje14").toString();
- String warehouse1 = JSON.parseArray(s1).getJSONObject(0).get("selectField_m88f1qi8").toString();//所属仓库
- String WarehouseLocation1 = JSON.parseArray(s1).getJSONObject(0).get("textField_m8mnxgql").toString();//所属库位
- String SafetyValue1 = JSON.parseArray(s1).getJSONObject(0).get("numberField_m8873fn4").toString();//安全库存值
- BigDecimal numberFieldM9c8n9go1 = new BigDecimal(JSON.parseArray(s1).getJSONObject(0).get("numberField_m9c8n9go").toString());//仓库数量
- BigDecimal numm1 = numberFieldM9c8n9go1.add(new BigDecimal(map1.get("numberField_m9grj2ij").toString())); //调拨后的库存数量 = 仓库数量 + 调拨数量
- ArrayList<Map<String,String>> maps_YD1 = new ArrayList<>();
- Map sss1=new HashMap<>();
- sss1.put("selectField_m88f1qi8",warehouse1);//所属仓库
- sss1.put("textField_m8mnxgql",WarehouseLocation1);//所属库位
- sss1.put("numberField_m8873fn4",SafetyValue1);//安全库存值
- sss1.put("numberField_m9c8n9go",numm1);//仓库数量
- maps_YD1.add(sss1);
- ydClient.operateData(YDParam.builder().formInstId(LBJId2)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("tableField_m96gje14",maps_YD1)))
- .userId("332051151139376769").build(),YDConf.FORM_OPERATION.update);
- BigDecimal AvailableInventoryQuantity_AAA = null;
- BigDecimal InventoryQuantity_AAA = null;
- if(!data1.get("numberField_m8gz97nk_value").toString().isEmpty()){
- AvailableInventoryQuantity_AAA = new BigDecimal( data1.get("numberField_m8gz97nk").toString());//可用库存数量
- }else {
- AvailableInventoryQuantity_AAA = BigDecimal.valueOf(0);
- }
- if(!data1.get("numberField_m8obn6wk_value").toString().isEmpty()){
- InventoryQuantity_AAA = new BigDecimal(data1.get("numberField_m8obn6wk").toString());//存库数量
- }else {
- InventoryQuantity_AAA = BigDecimal.valueOf(0);
- }
- BigDecimal AvailableInventoryQuantity_BBB = null;
- BigDecimal InventoryQuantity_BBB = null;
- if(!data2.get("numberField_m8gz97nk_value").toString().isEmpty()){
- AvailableInventoryQuantity_BBB = new BigDecimal( data2.get("numberField_m8gz97nk").toString());//可用库存数量
- }else {
- AvailableInventoryQuantity_BBB = BigDecimal.valueOf(0);
- }
- if(!data2.get("numberField_m8obn6wk_value").toString().isEmpty()){
- InventoryQuantity_BBB = new BigDecimal(data2.get("numberField_m8obn6wk").toString());//可用库存数量
- }else {
- InventoryQuantity_BBB = BigDecimal.valueOf(0);
- }
- System.out.println("---------------------------------------零部件子表数据修改完毕--------------------------------");
- // BigDecimal FreezeQuantity_AAA = FreezeQuantity.subtract( new BigDecimal( map1.get("numberField_ma0e13js").toString()));//冻结数量(新) = 冻结数量 - 退货数量
- //TODO:3、调出物料的可用库存
- BigDecimal AvailableQuantity_AAA = AvailableInventoryQuantity_AAA.subtract(new BigDecimal( map1.get("numberField_m9grj2ij").toString()));//可用存库数量(新) = 可用库存数量 - 调拨数量
- BigDecimal Quantity_AAA = InventoryQuantity_AAA.subtract(new BigDecimal(map1.get("numberField_m9grj2ij").toString()));//存库数量(新) = 存库数量 - 调拨数量
- //TODO:4、调入物料的可用库存
- BigDecimal AvailableQuantity_BBB = AvailableInventoryQuantity_BBB.add(new BigDecimal( map1.get("numberField_m9grj2ij").toString()));//可用存库数量(新) = 可用库存数量 + 调拨数量
- BigDecimal Quantity_BBB = InventoryQuantity_BBB.add(new BigDecimal(map1.get("numberField_m9grj2ij").toString()));
- ydClient.operateData(YDParam.builder().formInstId(LBJId)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_m8gz97nk, numberField_m8obn6wk",AvailableQuantity_AAA,Quantity_AAA)))
- .userId("332051151139376769")
- .build(),YDConf.FORM_OPERATION.update);
- ydClient.operateData(YDParam.builder().formInstId(LBJId2)
- .formUuid("FORM-2353BE632D97434DAD55AEBD0866C44DVAT5")
- .appType("APP_GNQ1RGK68X4JNZUEU8RQ")
- .systemToken("XH866P81QDOTQ0218TGZM9WCNXOF24WIP488M7A5")
- .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("numberField_m8gz97nk, numberField_m8obn6wk",AvailableQuantity_BBB,Quantity_BBB)))
- .userId("332051151139376769")
- .build(),YDConf.FORM_OPERATION.update);
- System.out.println("----------------------零部件主表数据修改完毕!------------------");
- }
- return McR.success();
- }
- @Override
- public McR shareRecord(Map data) {
- String pid = getString(data.get("pid"));
- if (Strings.isNotBlank(pid)){
- //发起审批
- String[] dd = McProject.getDd(pid);
- String appKey = "";
- String appSecret = "";
- String agentId = "";
- if (!PublicUtil.isNull(pid) && dd != null && dd.length >= 3) {
- appKey = dd[0];
- appSecret = dd[1];
- agentId = dd[2];
- }
- String[] yida = McProject.getYida(pid);
- String appType = "";
- String systemToken = "";
- if (!PublicUtil.isNull(pid) && dd != null && dd.length >= 2) {
- appType = yida[0];
- systemToken = yida[1];
- }
- // 执行分享逻辑 [ 拼接后的权限组 ]
- McException.assertParamException_Null(data, "compId, userIds, userId, atUserId, isNotice");
- //开始抓取宜搭对应的子表数据
- String processInstanceId = data.get("processInstanceId").toString();
- List<String> atUserId = (List<String>) data.get("atUserId");
- Map map = new HashMap();
- map.put(UtilMap.getString(data, "compId"),UtilMap.getList(data, "userIds"));
- ydClient.operateData(YDParam.builder()
- .appType(appType)
- .systemToken(systemToken)
- .formInstId(processInstanceId)
- .updateFormDataJson(JSON.toJSONString(map))
- .build(), YDConf.FORM_OPERATION.update);
- String userIds = String.valueOf(data.get("atUserId"));
- String[] split = userIds.split(",");
- ArrayList<String> names = new ArrayList<>();
- for(Object auserId : split){
- DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/user/get", null, ddClient.initTokenParams(), UtilMap.map("userid", auserId), DDR_New.class);
- Object result = ddrNew.getResult();
- if (result != null) {
- JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(result));
- String name = jsonObject.getString("name");
- names.add(name);
- }
- }
- List<Map> searchCondition = new ArrayList<>();
- searchCondition.addAll(Arrays.asList(
- YDConf.searchCondition_TextFiled(data.get("processKey").toString(), data.get("processInstanceId").toString(),"eq")
- ));
- String title = UtilMap.getString(data, "content").isEmpty() || !ObjectUtil.isNotNull(UtilMap.getString(data, "content")) ? "单据分享" : UtilMap.getString(data, "content");
- ydClient.operateData(YDParam.builder()
- .appType(appType)
- .systemToken(systemToken)
- .searchCondition(JSON.toJSONString(searchCondition))
- .formUuid(data.get("formId").toString())
- .formDataJson(JSON.toJSONString(UtilMap.map(data.get("processKey").toString()+", "+data.get("empKey").toString()+", "+data.get("titleKey").toString(),
- data.get("processInstanceId").toString(),UtilMap.getList(data, "userIds"),title)))
- .useLatestVersion(true)
- .build(), YDConf.FORM_OPERATION.upsert_v2);
- if (UtilMap.getBoolean(data, "isNotice")) {
- // data.put("content", names.stream().collect(Collectors.joining(",")) + UtilMap.getString(data, "content"));
- String appUrl = data.get("appUrl").toString();
- String pcUrl = data.get("pcUrl").toString();
- if ( !ObjectUtil.isNotNull(UtilMap.getString(data,"sendType")) || UtilMap.getString(data,"sendType").isEmpty() || "工作通知".equals(UtilMap.getString(data,"sendType"))){
- Map<String, String> contentMap = new HashMap<>();
- contentMap.put("title",title);
- contentMap.put("text",title);
- contentMap.put("picUrl",pcUrl+"/processDetail"+"?procInsId="+processInstanceId);
- contentMap.put("messageUrl",pcUrl+"/processDetail"+"?procInsId="+processInstanceId);
- Map<String, Object> msg = new HashMap<>();
- msg.put("msgtype","link");
- msg.put("link",contentMap);
- sendNotification(ddClient.getAccessToken(appKey,appSecret),atUserId,null,false,msg,agentId);
- } else if ("钉钉代办".equals(UtilMap.getString(data, "sendType"))) {
- /*查询钉钉人员*/
- ddClientWorkflow.createTBTask(ddClient.getAccessToken(appKey,appSecret),UtilMap.getString(data, "userId"),"流程分享:"+UtilMap.getString(data, "content"),UtilMap.getString(data, "content"),
- UtilDateTime.getLocalDateTimeTimeStamp(LocalDate.now().plusDays(7).atTime(LocalTime.MAX)), atUserId,null
- ,UtilMap.map("appUrl, pcUrl",appUrl+"/processDetail"+"?procInsId="+processInstanceId,pcUrl+"/processDetail"+"?procInsId="+processInstanceId),false,30,UtilMap.map("dingNotify","1"));
- }
- }
- return McR.success();
- }
- return McR.errorParam("参数缺失!");
- }
- public String sendNotification(String access_token, List<String> userid_list, List<String> dept_id_list, boolean to_all_user, Map msg, String agent_id) {
- Map body = UtilMap.map("agent_id, to_all_user, msg", new Object[]{agent_id, to_all_user, msg});
- if (UtilList.isNotEmpty(userid_list)) {
- body.put("userid_list", String.join(",", userid_list));
- }
- if (UtilList.isNotEmpty(dept_id_list)) {
- body.put("dept_id_list", String.join(",", dept_id_list));
- }
- DDR ddr = DDR.doPost("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2", (Map)null, DDConf.initTokenParams(access_token), body);
- return ddr.getTask_id();
- }
- @Async
- @Override
- public void batchUpdateSpecifiedQuantityData(Map map) {
- try {
- String pid = UtilMap.getString(map, "pid");
- MDC.put("MDC_KEY_PID",pid);
- String formInstId = UtilMap.getString(map, "formInstId");//当前表实例id
- //查询当前表formData
- Map formData = ydClient.queryData(YDParam.builder()
- .formInstanceId(formInstId)
- .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- //目标表筛选字段唯一标识
- String[] searchFields = UtilMap.getString(map, "searchFieldStr").split(",");
- //目标表筛选字段值
- String[] searchFieldValues = UtilMap.getString(map, "searchFieldValueStr").split(",");
- Map searchCondition = new HashMap();
- if (searchFields.length == searchFieldValues.length){
- for (int i = 0; i < searchFields.length; i++) {
- searchCondition.put(searchFields[i],searchFieldValues[i]);
- }
- }else {
- log.info("筛选字段和筛选值数量不一致");
- }
- int quantity = UtilMap.getInt(map, "quantity");//指定更新数量
- if (quantity > 100){
- log.info("更新数量不能大于100");
- }
- String formUuid = UtilMap.getString(map, "formUuid");//目标表uuid
- List<Map> data = (List<Map>) ydClient.queryData(YDParam.builder()
- .searchCondition(JSONObject.toJSONString(searchCondition))
- .formUuid(formUuid)
- .pageSize(quantity)
- .build(), YDConf.FORM_QUERY.retrieve_list).getData();
- //目标表更新字段唯一标识
- String[] fieldStrs = UtilMap.getString(map, "fieldStr").split(",");
- //当前表字段唯一标识
- String[] currentFieldStrs = UtilMap.getString(map, "currentFieldStrs").split(",");
- Map updateFormData = new HashMap();
- if (fieldStrs.length == currentFieldStrs.length){
- for (int i = 0; i < fieldStrs.length; i++) {
- updateFormData.put(fieldStrs[i],YDConf.getDataByCompId(formData,currentFieldStrs[i]));
- }
- }else {
- log.info("更新字段和当前表字段数量不一致");
- }
- for (Map datum : data) {
- String formInstanceId = UtilMap.getString(datum, "formInstanceId");
- ydClient.operateData(YDParam.builder()
- .formInstanceId(formInstanceId)
- .updateFormDataJson(JSONObject.toJSONString(updateFormData))
- .build(), YDConf.FORM_OPERATION.update);
- }
- log.info("批量更新成功");
- }catch (Exception e){
- log.info("更新数据失败:{}",e.getMessage());
- }
- }
- private static void extractOperatorIds(JSONArray array, List<String> result) {
- for (Object item : array) {
- JSONObject obj = (JSONObject) item;
- // 提取当前层级的 operatorUserId 或 operator
- String userId = obj.getString("operatorUserId");
- if (userId == null) userId = obj.getString("operator"); // 处理 domainList 中的字段
- if (userId != null) result.add(userId);
- // 递归处理 domainList
- JSONArray domainList = obj.getJSONArray("domainList");
- if (domainList != null && !domainList.isEmpty()) {
- extractOperatorIds(domainList, result);
- }
- }
- }
- private String getString(Object obj){
- return obj == null ? "" : obj.toString();
- }
- private List<Map> getTableData(List<Map<String, ?>> details){
- List<Map> table = new ArrayList<>();
- for (Map detail : details) {
- Map row = UtilMap.empty();
- for (String subId : details.get(0).keySet()) {
- // ppExt: 组件会返回带有_id/_value字段, 关联表单 & 成员组件赋值为原字段 [关联表单仅仅会返回带Id字段, 成员组件不带Id返回姓名过滤]
- if (subId.endsWith("_value") || (subId.startsWith("employeeField_") && !subId.endsWith("_id"))) {
- continue;
- }
- if (subId.endsWith("_id")) {
- if (subId.startsWith("employeeField_") || subId.startsWith("associationFormField_")) {
- subId = subId.replace("_id", "");
- } else {
- continue;
- }
- }
- row.put(subId, YDConf.getDataByCompId(detail, subId));
- }
- table.add(row);
- }
- return table;
- }
- }
|