| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- 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<Map> selectAllProcured(Map data) {
- List<Map> lastList = new ArrayList<>();
- Map<String, Object> 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<Map> 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<Map> 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<Map> selectDegreeTemplate() {
- List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
- .appType("APP_ERBDTFS82HOVBPL3NFH0")
- .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
- .formUuid("FORM-643380CCDB014FF29AAEF983B52346C6IBXS")
- .build());
- List<Map> 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<Map> mapList = (List<Map>) 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<Map> 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<String> dateList = new ArrayList<>();
- dateList.add(String.valueOf(firstDayTimestamp));
- dateList.add(String.valueOf(lastDayTimestamp));
- //项目点数据
- List<Map> 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<String> dateList = new ArrayList<>();
- dateList.add(String.valueOf(firstDayTimestamp));
- dateList.add(String.valueOf(lastDayTimestamp));
- //项目点数据
- List<Map> 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<Object, Long> groupCountMap = dataList.stream()
- .collect(Collectors.groupingBy(
- //成本组织编码 + 供应商编码 + 项目点编号
- map -> (String) map.get("textField_lus384vk")
- + "-" + map.get("textField_ltxstp8g")
- + "=" + map.get("textField_ltxstp86"),
- Collectors.counting()
- ));
- Comparator<Map.Entry<Object, Long>> comparator = Map.Entry.comparingByValue();
- // if (!ascending) {
- comparator = comparator.reversed();
- // }
- // 3. 转换为List<Map>格式返回
- List<Map<String, Object>> collect = groupCountMap.entrySet().stream()
- .sorted(comparator)
- .map(entry -> {
- Map<String, Object> 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<String> processedKeys = new HashSet<>();
- List<Map> 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<String> 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<Map> finalDataList = dataList;
- final int[] totalCount = {0};
- final double[] amountSum = {0.0};
- final int[] successCount = {0};
- final int[] errorCount = {0};
- try {
- lastDataList.forEach(e->{
- //根据第一步拼接好的集合做发起流程操作
- List<Map> tableList = new ArrayList<>();
- final String[] cbzz = {"",""};
- final String[] gys = {"",""};
- e.forEach((k,v)->{
- List<String> v1 = (List<String>) v;
- if (v1.size()>=3){
- //供应商数据
- String[] split = k.toString().split("-");
- List<Map> 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<Map> 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<String>) v) {
- List<Map> 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<Map> tableList, Map i) {
- Map<String, Object> 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");
- }
- }
|