采购订单 采购申请单 延期提醒 提前提醒

This commit is contained in:
tzy 2025-09-15 01:18:15 +08:00
parent 8cc9e23ae2
commit 73a9939d0b
3 changed files with 196 additions and 19 deletions

View File

@ -1,11 +1,15 @@
package com.ruoyi.system.controller;
import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
@ -838,11 +842,12 @@ public class KingdeeWorkCenterDataController extends BaseController {
@Log(title = "采购订单和采购申请单")
@XxlJob("getPurchaseOrder")
@PostMapping("/getPurchaseOrder")
public R<Void> getPurchaseOrder() {
try {
// String robotId = "4d2f037d-0cee-493a-a4ff-1758f67b8069";
String robotId = "483489b2-b219-468c-851f-f56a34a62d91";
//String robotId = "483489b2-b219-468c-851f-f56a34a62d91";
String robotId = "8af8abea-3f21-4ca7-ad0a-5b7a2cf4d78e";
String currentTime = DateUtil.format(new Date(), "yyyy年MM月dd日 HH:mm:ss");
StringBuilder msg = new StringBuilder();
msg.append("🏭 采购订单和采购申请更新\n\n")
@ -850,11 +855,17 @@ public class KingdeeWorkCenterDataController extends BaseController {
.append("🔧 订单数据统计:\n");
// 获取采购订单和采购申请数据
List<PurchaseOrderExcelDTO> purchaseOrderList = JdUtil.getPurchaseOrder();
List<PurchaseRequestExcelDTO> purchaseRequestList = JdUtil.getPurchaseRequestOrder();
msg.append("- 采购订单:").append(purchaseOrderList.size()).append("\n");
List<PurchaseOrderExcelDTO> allPurchaseOrderList = JdUtil.getPurchaseOrder();
List<PurchaseRequestExcelDTO> allpurchaseRequestList = JdUtil.getPurchaseRequestOrder();
// 过滤采购订单数据
List<PurchaseOrderExcelDTO> purchaseOrderList = filterPurchaseOrders(allPurchaseOrderList);
// 过滤采购申请单数据
List<PurchaseRequestExcelDTO> purchaseRequestList = filterReqPurchaseOrders(allpurchaseRequestList);
msg.append("- 采购订单(已过滤):").append(purchaseOrderList.size()).append("\n");
msg.append("- 采购申请:").append(purchaseRequestList.size()).append("\n");
msg.append("- 过滤条件生产令号0259/240605开头交货日期小于当前时间\n");
// 生成Excel文件使用采购模板
String fileName = String.format("采购订单和申请数据_%s.xlsx",
@ -872,17 +883,17 @@ public class KingdeeWorkCenterDataController extends BaseController {
// 添加采购订单数据
if (!purchaseOrderList.isEmpty()) {
List<Map<String, Object>> orderDataList = convertPurchaseOrderToMapList(purchaseOrderList);
dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseOrder", orderDataList));
dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseOrderExcelDTO", orderDataList));
}
// 添加采购申请数据
if (!purchaseRequestList.isEmpty()) {
List<Map<String, Object>> requestDataList = convertPurchaseRequestToMapList(purchaseRequestList);
dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseRequest", requestDataList));
dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseRequestExcelDTO", requestDataList));
}
// 使用采购模板生成Excel
String templatePath = "EXCEL模板/采购订单模板.xlsx";
String templatePath = "EXCEL模板/采购订单模板1.xlsx";
ExcelTemplateProc.doExportExcelByTemplateProc(templatePath, filePath, staticDataMap, dynamicDataMappingList);
// 发送Excel文件
@ -952,5 +963,171 @@ public class KingdeeWorkCenterDataController extends BaseController {
}
return mapList;
}
/**
* 过滤采购订单数据
*/
/* private List<PurchaseOrderExcelDTO> filterPurchaseOrders(List<PurchaseOrderExcelDTO> allOrders) {
String currentTime = DateUtil.format(new Date(), "yyyy-MM-dd");
return allOrders.stream()
.filter(order -> {
String productionOrderNo = order.getFUCHNText2();
String deliveryDate = order.getFDeliveryDate();
// 过滤条件1: FUCHNText2 不为空
if (productionOrderNo == null || productionOrderNo.trim().isEmpty()) {
return false;
}
// 过滤条件2: 生产令号以NO开头
if (!productionOrderNo.startsWith("NO")) {
return false;
}
// 过滤条件3: 生产令号以0259开头或240605开头
if (!productionOrderNo.startsWith("0259") && !productionOrderNo.startsWith("240605")) {
return false;
}
// 过滤条件4: 交货日期小于当前时间
if (deliveryDate != null && !deliveryDate.trim().isEmpty()) {
try {
// 处理日期格式 2024-02-22T00:00:00
String dateStr = deliveryDate.split("T")[0]; // 提取日期部分
if (dateStr.compareTo(currentTime) >= 0) {
return false; // 交货日期大于等于当前时间过滤掉
}
} catch (Exception e) {
log.warn("解析交货日期失败: {}", deliveryDate, e);
return false;
}
}
return true;
})
.collect(java.util.stream.Collectors.toList());
}*/
/**
* 过滤采购订单数据
*/
/**
* 过滤采购订单数据
*/
private List<PurchaseOrderExcelDTO> filterPurchaseOrders(List<PurchaseOrderExcelDTO> allOrders) {
LocalDate today = LocalDate.now();
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
log.info("开始过滤采购订单,总数: {}, 当前日期: {}", allOrders.size(), today.format(outputFormatter));
List<PurchaseOrderExcelDTO> filteredOrders = new ArrayList<>();
for (PurchaseOrderExcelDTO allOrder : allOrders) {
String productionOrderNo = allOrder.getFUCHNText2();
String deliveryDate = allOrder.getFDeliveryDate();
// 条件1: 生产令号不能为空
if (productionOrderNo == null || productionOrderNo.trim().isEmpty()) {
log.debug("过滤掉: 生产令号为空");
continue;
}
// 条件2: 不能以 NO / GMJ / GSC 开头
if (productionOrderNo.startsWith("NO")
|| productionOrderNo.startsWith("GMJ")
|| productionOrderNo.startsWith("GSC")) {
log.debug("过滤掉: 生产令号不符合前缀条件: {}", productionOrderNo);
continue;
}
// 条件3: 交货日期不能为空并且必须早于今天
if (deliveryDate == null || deliveryDate.trim().isEmpty()) {
log.debug("过滤掉: 交货日期为空");
continue;
}
try {
String dateStr = deliveryDate.split("T")[0]; // yyyy-MM-dd 部分
LocalDate delivery = LocalDate.parse(dateStr, inputFormatter);
// 转换格式
String formatted = delivery.format(outputFormatter);
allOrder.setFDeliveryDate(formatted);
if (!delivery.isBefore(today)) {
log.debug("过滤掉: 交货日期未过期: {}", formatted);
continue;
}
} catch (Exception e) {
log.warn("解析交货日期失败: {}", deliveryDate, e);
continue;
}
filteredOrders.add(allOrder);
}
log.info("过滤完成,剩余数量: {}", filteredOrders.size());
return filteredOrders;
}
/**
* 过滤采购申请订单数据
*/
private List<PurchaseRequestExcelDTO> filterReqPurchaseOrders(List<PurchaseRequestExcelDTO> allOrders) {
LocalDate today = LocalDate.now();
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
log.info("开始过滤采购申请订单,总数: {}, 当前日期: {}", allOrders.size(), today.format(outputFormatter));
List<PurchaseRequestExcelDTO> filteredOrders = new ArrayList<>();
for (PurchaseRequestExcelDTO allOrder : allOrders) {
String productionOrderNo = allOrder.getFUCHNText();
String deliveryDate = allOrder.getFArrivalDate();
// 条件1: 生产令号不能为空
if (productionOrderNo == null || productionOrderNo.trim().isEmpty()) {
log.debug("过滤掉: 生产令号为空");
continue;
}
// 条件2: 不能以 NO / 0259 / 240605 开头
if (productionOrderNo.startsWith("NO")
|| productionOrderNo.startsWith("0259")
|| productionOrderNo.startsWith("240605")) {
log.debug("过滤掉: 生产令号不符合前缀条件: {}", productionOrderNo);
continue;
}
// 条件3: 交货日期不能为空并且必须早于今天
if (deliveryDate == null || deliveryDate.trim().isEmpty()) {
log.debug("过滤掉: 交货日期为空");
continue;
}
try {
String dateStr = deliveryDate.split("T")[0]; // yyyy-MM-dd 部分
LocalDate delivery = LocalDate.parse(dateStr, inputFormatter);
// 转换格式
String formatted = delivery.format(outputFormatter);
allOrder.setFArrivalDate(formatted);
if (!delivery.isBefore(today)) {
log.debug("过滤掉: 交货日期未过期: {}", formatted);
continue;
}
} catch (Exception e) {
log.warn("解析交货日期失败: {}", deliveryDate, e);
continue;
}
filteredOrders.add(allOrder);
}
log.info("过滤完成,剩余数量: {}", filteredOrders.size());
return filteredOrders;
}
}

View File

@ -2528,8 +2528,8 @@ public class JdUtil {
JsonObject filterObject = new JsonObject();
JsonArray filterString = new JsonArray();
filterObject.addProperty("FieldName", "FCloseStatus");
filterObject.addProperty("Compare", "67");
filterObject.addProperty("Value", 105);
filterObject.addProperty("Compare", "105");
filterObject.addProperty("Value", "A");
filterObject.addProperty("Left", "");
filterObject.addProperty("Right", "");
filterObject.addProperty("Logic", 0);
@ -2537,8 +2537,8 @@ public class JdUtil {
JsonObject filterObject1 = new JsonObject();
filterObject1.addProperty("FieldName", "FMRPCloseStatus");
filterObject1.addProperty("Compare", "67");
filterObject1.addProperty("Value", 105);
filterObject1.addProperty("Compare", "105");
filterObject1.addProperty("Value", "A");
filterObject1.addProperty("Left", "");
filterObject1.addProperty("Right", "");
filterObject1.addProperty("Logic", 0);
@ -2546,8 +2546,8 @@ public class JdUtil {
JsonObject filterObject2 = new JsonObject();
filterObject2.addProperty("FieldName", "FDocumentStatus");
filterObject2.addProperty("Compare", "67");
filterObject2.addProperty("Value", 105);
filterObject2.addProperty("Compare", "105");
filterObject2.addProperty("Value", "C");
filterObject2.addProperty("Left", "");
filterObject2.addProperty("Right", "");
filterObject2.addProperty("Logic", 0);
@ -2588,8 +2588,8 @@ public class JdUtil {
JsonObject filterObject = new JsonObject();
JsonArray filterString = new JsonArray();
filterObject.addProperty("FieldName", "FDocumentStatus");
filterObject.addProperty("Compare", "67");
filterObject.addProperty("Value", 105);
filterObject.addProperty("Compare", "105");
filterObject.addProperty("Value", "C");
filterObject.addProperty("Left", "");
filterObject.addProperty("Right", "");
filterObject.addProperty("Logic", 0);
@ -2597,8 +2597,8 @@ public class JdUtil {
JsonObject filterObject1 = new JsonObject();
filterObject1.addProperty("FieldName", "FCloseStatus");
filterObject1.addProperty("Compare", "67");
filterObject1.addProperty("Value", 105);
filterObject1.addProperty("Compare", "105");
filterObject1.addProperty("Value", "A");
filterObject1.addProperty("Left", "");
filterObject1.addProperty("Right", "");
filterObject1.addProperty("Logic", 0);