|
|
@@ -18,10 +18,11 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
@@ -136,4 +137,205 @@ public class purchaseServiceImpl implements PurchaseService {
|
|
|
});
|
|
|
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().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());
|
|
|
+
|
|
|
+ //分组求和
|
|
|
+ Map<Object, Long> groupCountMap = dataList.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ //成本组织编码 + 项目点编号 + 供应商编码 + 物耗申请订单号
|
|
|
+ map -> (String) map.get("textField_lus384vk") + "-" + map.get("textField_ltxstp86")
|
|
|
+ + "-" + map.get("textField_ltxstp8g") + "=" + map.get("textField_ltxstp83"),
|
|
|
+ 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());
|
|
|
+
|
|
|
+ System.out.println(collect);
|
|
|
+ // 记录已经处理过的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);
|
|
|
+ break;
|
|
|
+ } else if (countI + countR < 100) {
|
|
|
+ processedKeys.add(orderNumR);
|
|
|
+ orders.add(orderNumR);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (countI == 100) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //记录重复key
|
|
|
+ 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){
|
|
|
+
|
|
|
+ for (String s : (List<String>) v) {
|
|
|
+ List<Map> costList = finalDataList.stream().filter(map -> s.equals(map.get("textField_ltxstp83"))).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], gys[1], 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");
|
|
|
+ }
|
|
|
}
|