package com.malk.lanyun.service.impl; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.malk.lanyun.service.PurchaseService; import com.malk.server.aliwork.YDConf; import com.malk.server.aliwork.YDParam; import com.malk.server.common.McR; import com.malk.service.aliwork.YDClient; import com.malk.service.aliwork.YDService; import com.malk.service.dingtalk.DDClient; import com.malk.service.dingtalk.DDClient_Personnel; import com.malk.utils.UtilMap; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; @Service @Slf4j public class purchaseServiceImpl implements PurchaseService { @Value("${dingtalk.appKey}") private String dingtalkAppKey; @Value("${dingtalk.appSecret}") private String dingtalkAppSecret; @Value("${dingtalk.agentId}") private Long agentId; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private YDService ydService; @Autowired private YDClient ydClient; @Autowired private DDClient ddClient; @Autowired private DDClient_Personnel ddClientPersonnel; @Override public List selectAllProcured(Map data) { List lastList = new ArrayList<>(); Map param = new HashMap<>(); param.put("selectField_mff51th7","否"); if (ObjectUtil.isNotNull(data.get("gszt"))){ param.put("selectField_ltxstp89",data.get("gszt")); } if (ObjectUtil.isNotNull(data.get("gysmc"))){ param.put("textField_ltxstp8h",data.get("gysmc")); } if ("物耗/配件".equals(data.get("type"))){ List dataList = ydService.queryFormData_all(YDParam.builder() .appType("APP_ERBDTFS82HOVBPL3NFH0") .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") .formUuid("FORM-A8064C8333E24DEA88618D018DE0AE84WJPQ") .searchFieldJson(JSON.toJSONString(param)) .build()); dataList.forEach(e->{ if (Double.parseDouble(e.get("numberField_ltxyjf0s_value").toString()) > 0){ lastList.add(e); } }); }else { List dataList = ydService.queryFormData_all(YDParam.builder() .appType("APP_ERBDTFS82HOVBPL3NFH0") .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") .formUuid("FORM-0E95A616B4A54BBBB42AAEEEDCC4D9206XGA") .searchFieldJson(JSON.toJSONString(param)) .build()); dataList.forEach(e->{ if (Double.parseDouble(e.get("numberField_ltxyjf0s_value").toString()) > 0){ lastList.add(e); } }); } return lastList; } @Override public void startPurchaseOrder(Map data) { log.info(":{}",data.get("records")); // ydClient.operateData(YDParam.builder().userId("026150181237-1254068060") // .appType("APP_ERBDTFS82HOVBPL3NFH0") // .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") // .formUuid("FORM-A4B37CFEB8524947939C00523373532BT3TH") // .formDataJson(JSON.toJSONString(UtilMap.map("dateField_ls2u8mbv, departmentSelectField_ls2u8mbw, employeeField_ls2u8mbx, tableField_ls2u8mc6, associationFormField_ls2u8mcb, dateField_ls1ky8c5", // beginTime,department,header,tableList,jsonArray,sendTime))) // .build(), YDConf.FORM_OPERATION.start); } @Override public List selectDegreeTemplate() { List dataList = ydService.queryFormData_all(YDParam.builder() .appType("APP_ERBDTFS82HOVBPL3NFH0") .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") .formUuid("FORM-643380CCDB014FF29AAEF983B52346C6IBXS") .build()); List sonList = ydService.queryDetails(YDParam.builder(). appType("APP_ERBDTFS82HOVBPL3NFH0") .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") .formInstanceId(dataList.get(0).get("formInstanceId").toString()) .formUuid("FORM-643380CCDB014FF29AAEF983B52346C6IBXS") .tableFieldId("tableField_lr3hv46q") .build()); return sonList; } @Override public McR updateProcured(Map data) { List mapList = (List) data.get("records"); mapList.forEach(e->{ Double thisBuyNum = Double.parseDouble(e.get("thisBuyNum").toString());//本次采购数量 Double canBuyNum = Double.parseDouble(e.get("numberField_ltxyjf0s").toString());//可下单数量 Double buyingNum = Double.parseDouble(e.get("numberField_ltxyjf0r").toString());//申请中数量 String isAll = "否"; if (thisBuyNum == canBuyNum){ isAll = "是"; } ydClient.operateData(YDParam.builder() .appType("APP_ERBDTFS82HOVBPL3NFH0") .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") .formInstanceId(e.get("formInstanceId").toString()) .useLatestVersion(true) .updateFormDataJson(JSON.toJSONString(UtilMap.map("numberField_ltxyjf0s, numberField_ltxyjf0r, selectField_mff51th7",canBuyNum-thisBuyNum,buyingNum+buyingNum,isAll))) .build(), YDConf.FORM_OPERATION.update); }); return McR.error("400","更新错误"); } @Override public List selectAllProcuredNew(Map data) { LocalDateTime firstDay = LocalDateTime.now().plusMonths(-1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0); // 获取月份的最后一天 LocalDateTime lastDay = LocalDateTime.now().withDayOfMonth(LocalDate.now().plusMonths(-1).lengthOfMonth()) .withHour(23).withMinute(59).withSecond(59).withNano(999999999); // 转换回时间戳 long firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); long lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); List dateList = new ArrayList<>(); dateList.add(String.valueOf(firstDayTimestamp)); dateList.add(String.valueOf(lastDayTimestamp)); //项目点数据 List dataList = ydService.queryFormData_all(YDParam.builder() .appType("APP_ERBDTFS82HOVBPL3NFH0") .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") .formUuid("FORM-A8064C8333E24DEA88618D018DE0AE84WJPQ") .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_ltxstp81",dateList))) .build()); //过滤参与批量发起为否的数据 dataList = dataList.stream().filter(map -> !"否".equals(map.get("selectField_mgswtsqu"))).collect(Collectors.toList()); return dataList; } @Override public void startPurchaseOrderNew(String formInstanceId) { LocalDateTime firstDay = LocalDateTime.now().plusYears(-1).plusMonths(-11).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0); // 获取月份的最后一天 LocalDateTime lastDay = LocalDateTime.now().plusYears(-1).plusMonths(1).withDayOfMonth(LocalDate.now().lengthOfMonth()) .withHour(23).withMinute(59).withSecond(59).withNano(999999999); // 转换回时间戳 long firstDayTimestamp = firstDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); long lastDayTimestamp = lastDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); List dateList = new ArrayList<>(); dateList.add(String.valueOf(firstDayTimestamp)); dateList.add(String.valueOf(lastDayTimestamp)); //项目点数据 List dataList = ydService.queryFormData_all(YDParam.builder() .appType("APP_ERBDTFS82HOVBPL3NFH0") .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") .formUuid("FORM-A8064C8333E24DEA88618D018DE0AE84WJPQ") .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_ltxstp81",dateList))) .build()); //过滤参与批量发起为否的数据 dataList = dataList.stream().filter(map -> "是".equals(map.get("selectField_mgswtsqu"))).collect(Collectors.toList()); //分组求和 Map groupCountMap = dataList.stream() .collect(Collectors.groupingBy( //成本组织编码 + 供应商编码 + 项目点编号 map -> (String) map.get("textField_lus384vk") + "-" + map.get("textField_ltxstp8g") + "=" + map.get("textField_ltxstp86"), Collectors.counting() )); Comparator> comparator = Map.Entry.comparingByValue(); // if (!ascending) { comparator = comparator.reversed(); // } // 3. 转换为List格式返回 List> collect = groupCountMap.entrySet().stream() .sorted(comparator) .map(entry -> { Map result = new HashMap<>(); String[] split = entry.getKey().toString().split("="); result.put("groupBy",split[0]); result.put("orderNum", split[1]); result.put("count", entry.getValue()); return result; }) .collect(Collectors.toList()); // 记录已经处理过的key,避免重复添加 Set processedKeys = new HashSet<>(); List lastDataList = new ArrayList<>(); for (int i = 0; i < collect.size(); i++) { String orderNumI = UtilMap.getString(collect.get(i), "orderNum"); //相加成功的作为一个list if (!processedKeys.contains(orderNumI)) { processedKeys.add(orderNumI); List orders = new ArrayList<>(); orders.add(orderNumI); //第一层的数据条数 int countI = UtilMap.getInt(collect.get(i), "count"); String groupBy = UtilMap.getString(collect.get(i), "groupBy"); if (countI < 100) { //数据处理 for (int r = collect.size() - 1; r >= 0; r--) { String orderNumR = UtilMap.getString(collect.get(r), "orderNum"); if (!processedKeys.contains(orderNumR) && groupBy.equals(collect.get(r).get("groupBy"))) { int countR = UtilMap.getInt(collect.get(r), "count"); if (countI + countR > 100) { continue; } else if (countI + countR == 100) { processedKeys.add(orderNumR); orders.add(orderNumR); countI += countR; break; } else if (countI + countR < 100) { processedKeys.add(orderNumR); orders.add(orderNumR); countI += countR; } } } } else if (countI == 100) { continue; } //记录重复key lastDataList.add(UtilMap.map(groupBy, orders)); // lastDataList.add(UtilMap.map(String.valueOf(UUID.randomUUID()), orders)); } } List finalDataList = dataList; final int[] totalCount = {0}; final double[] amountSum = {0.0}; final int[] successCount = {0}; final int[] errorCount = {0}; try { lastDataList.forEach(e->{ //根据第一步拼接好的集合做发起流程操作 List tableList = new ArrayList<>(); final String[] cbzz = {"",""}; final String[] gys = {"",""}; e.forEach((k,v)->{ List v1 = (List) v; if (v1.size()>=3){ //供应商数据 String[] split = k.toString().split("-"); List gysList = ydService.queryFormData_all(YDParam.builder() .appType("APP_ERBDTFS82HOVBPL3NFH0") .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") .formUuid("FORM-87B1C91392824C5AA9330F574C157622855R") .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_lrhgjspd",split[1]))) .build()); List gysAss = new ArrayList<>(); gysAss.add(UtilMap.map("formType, formUuid, instanceId, appType, title, subTitle", "receipt", "FORM-87B1C91392824C5AA9330F574C157622855R", gysList.get(0).get("formInstanceId"), "APP_ERBDTFS82HOVBPL3NFH0", gysList.get(0).get("textField_lrhgjspc"), "")); for (String s : (List) v) { List costList = finalDataList.stream().filter(map -> s.equals(map.get("textField_ltxstp86")) && split[0].equals(map.get("textField_lus384vk")) && split[1].equals(map.get("textField_ltxstp8g"))).collect(Collectors.toList()); costList.forEach(c->{ gys[0] = UtilMap.getString(c,"textField_ltxstp8g"); gys[1] = UtilMap.getString(c,"textField_ltxstp8h"); cbzz[0] = UtilMap.getString(c,"textField_lus384vk"); cbzz[1] = UtilMap.getString(c,"selectField_ltxstp89"); extracted(totalCount, amountSum, tableList, c); }); } /*发起流程*/ // ydClient.operateData(YDParam.builder() // .appType("APP_ERBDTFS82HOVBPL3NFH0") // .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") // .formUuid("FORM-70F543E10887467188485B1E8AB3FFFDJUGK") // .formDataJson(JSON.toJSONString(UtilMap.map("selectField_lr26l3h7, textField_lus384vk, selectField_lr26l3h8, " + // "textField_lr26l3hf, textField_lwg62y7o, numberField_lr26l3hq, numberField_lr26l3hr, tableField_ltxug6h1", // cbzz[1], cbzz[0], "物耗/配件", gys[0], gysAss, totalCount[0], amountSum[0], tableList))) // .build(), YDConf.FORM_OPERATION.start); } }); successCount[0]++; }); } catch (Exception ex) { errorCount[0]++; ex.printStackTrace(); return; } // ydClient.operateData(YDParam.builder() // .appType("APP_ERBDTFS82HOVBPL3NFH0") // .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP") // .formInstanceId(formInstanceId) //// .useLatestVersion(true) //// .updateFormDataJson(JSONObject.toJSONString(new HashMap<>())) // .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_mhdgj16d, textField_mhdgj16e, textField_mhdgj16f, textField_mhdgj16g", // lastDataList.size(),successCount[0],errorCount[0],"同步完毕"))) // .build(), YDConf.FORM_OPERATION.update); log.info("总条数:{} 执行成功条数:{} 失败条数:{}",lastDataList.size(),successCount[0],errorCount[0]); } private void extracted(int[] totalCount, double[] amountSum, List tableList, Map i) { Map tableData = UtilMap.map("textField_lu22o9f1, textField_ltxug6gp, textField_lus3rn9y, textField_lus3rn9x, " + "textField_ltxug6gn, numberField_ltxug6gq, numberField_mff54y69, numberField_ltxug6gr, " + "numberField_ltxug6gs, numberField_lv1rs4aa, numberField_ltxug6gt, numberField_lvvyh9la, " + "numberField_lyinhl6g, textField_ltxug6gu, textField_lup6gfl1, textField_lu22o9f0, " + "textField_lu2gyq5g, textField_lu825bqq, addressField_m1mxxnin, textField_ltxug6gw, " + "textField_lufl71pv, textField_lu825bqp, employeeField_lwa3x3uh, employeeField_lwa3x3ui, " + "employeeField_lxu7fhde, associationFormField_ltxug6gm", UtilMap.getString(i, "textField_ltxstp84"), UtilMap.getString(i, "textField_ltxstp8c"), UtilMap.getString(i, "textField_ltxstp8e"), UtilMap.getString(i, "textField_ltxstp8f"), UtilMap.getString(i, "textField_ltxstp8a"), UtilMap.getString(i, "buyNum"), UtilMap.getString(i, "numberField_ltxyjf0s"), UtilMap.getString(i, "numberField_ltxstp8l"), UtilMap.getString(i, "numberField_ltxstp8d"), UtilMap.getString(i, "numberField_lv1r2pay"), UtilMap.getString(i, "inTaxAmount"), UtilMap.getString(i, "outTaxAmount"), UtilMap.getString(i, "taxAmount"), UtilMap.getString(i, "textField_ltxstp8n"), UtilMap.getString(i, "textField_ltxstp85"), UtilMap.getString(i, "textField_ltxstp86"), UtilMap.getString(i, "textField_ltxstp88"), UtilMap.getString(i, "textField_luhs4y3r"), UtilMap.getString(i, "addressField_lt4209fv"), UtilMap.getString(i, "textField_ltxstp87"), UtilMap.getString(i, "textField_ltxstp8b"), UtilMap.getString(i, "textField_ltxstp7y"), UtilMap.getString(i, "employeeField_lwa3x3uh"), UtilMap.getString(i, "employeeField_lwa3x3ui"), UtilMap.getString(i, "employeeField_lx03kyul"), Arrays.asList(UtilMap.map("appType, formUuid, formType, instanceId, title, subTitle", "APP_ERBDTFS82HOVBPL3NFH0", "FORM-0E95A616B4A54BBBB42AAEEEDCC4D9206XGA","receipt", UtilMap.getString(i,"formInstanceId"), UtilMap.getString(i,"textField_ltxstp8b"), UtilMap.getString(i,"textField_ltxstp84")))); tableList.add(tableData); totalCount[0] = totalCount[0] + UtilMap.getInt(i,"numberField_ltxyjf0s"); amountSum[0] = amountSum[0] + UtilMap.getDouble(i,"numberField_ltxstp8l") * UtilMap.getInt(i,"numberField_ltxyjf0s"); } }