采购订单 采购申请单 延期提醒 提前提醒
This commit is contained in:
parent
8cc9e23ae2
commit
73a9939d0b
@ -1,11 +1,15 @@
|
|||||||
package com.ruoyi.system.controller;
|
package com.ruoyi.system.controller;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.ExcelWriter;
|
||||||
@ -838,11 +842,12 @@ public class KingdeeWorkCenterDataController extends BaseController {
|
|||||||
|
|
||||||
@Log(title = "采购订单和采购申请单")
|
@Log(title = "采购订单和采购申请单")
|
||||||
@XxlJob("getPurchaseOrder")
|
@XxlJob("getPurchaseOrder")
|
||||||
|
@PostMapping("/getPurchaseOrder")
|
||||||
public R<Void> getPurchaseOrder() {
|
public R<Void> getPurchaseOrder() {
|
||||||
try {
|
try {
|
||||||
// String robotId = "4d2f037d-0cee-493a-a4ff-1758f67b8069";
|
// 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");
|
String currentTime = DateUtil.format(new Date(), "yyyy年MM月dd日 HH:mm:ss");
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
msg.append("🏭 采购订单和采购申请更新\n\n")
|
msg.append("🏭 采购订单和采购申请更新\n\n")
|
||||||
@ -850,11 +855,17 @@ public class KingdeeWorkCenterDataController extends BaseController {
|
|||||||
.append("🔧 订单数据统计:\n");
|
.append("🔧 订单数据统计:\n");
|
||||||
|
|
||||||
// 获取采购订单和采购申请数据
|
// 获取采购订单和采购申请数据
|
||||||
List<PurchaseOrderExcelDTO> purchaseOrderList = JdUtil.getPurchaseOrder();
|
List<PurchaseOrderExcelDTO> allPurchaseOrderList = JdUtil.getPurchaseOrder();
|
||||||
List<PurchaseRequestExcelDTO> purchaseRequestList = JdUtil.getPurchaseRequestOrder();
|
List<PurchaseRequestExcelDTO> allpurchaseRequestList = JdUtil.getPurchaseRequestOrder();
|
||||||
|
|
||||||
msg.append("- 采购订单:").append(purchaseOrderList.size()).append("条\n");
|
// 过滤采购订单数据
|
||||||
|
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("- 采购申请:").append(purchaseRequestList.size()).append("条\n");
|
||||||
|
msg.append("- 过滤条件:生产令号0259/240605开头,交货日期小于当前时间\n");
|
||||||
|
|
||||||
// 生成Excel文件使用采购模板
|
// 生成Excel文件使用采购模板
|
||||||
String fileName = String.format("采购订单和申请数据_%s.xlsx",
|
String fileName = String.format("采购订单和申请数据_%s.xlsx",
|
||||||
@ -872,17 +883,17 @@ public class KingdeeWorkCenterDataController extends BaseController {
|
|||||||
// 添加采购订单数据
|
// 添加采购订单数据
|
||||||
if (!purchaseOrderList.isEmpty()) {
|
if (!purchaseOrderList.isEmpty()) {
|
||||||
List<Map<String, Object>> orderDataList = convertPurchaseOrderToMapList(purchaseOrderList);
|
List<Map<String, Object>> orderDataList = convertPurchaseOrderToMapList(purchaseOrderList);
|
||||||
dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseOrder", orderDataList));
|
dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseOrderExcelDTO", orderDataList));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加采购申请数据
|
// 添加采购申请数据
|
||||||
if (!purchaseRequestList.isEmpty()) {
|
if (!purchaseRequestList.isEmpty()) {
|
||||||
List<Map<String, Object>> requestDataList = convertPurchaseRequestToMapList(purchaseRequestList);
|
List<Map<String, Object>> requestDataList = convertPurchaseRequestToMapList(purchaseRequestList);
|
||||||
dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseRequest", requestDataList));
|
dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseRequestExcelDTO", requestDataList));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 使用采购模板生成Excel
|
// 使用采购模板生成Excel
|
||||||
String templatePath = "EXCEL模板/采购订单模板.xlsx";
|
String templatePath = "EXCEL模板/采购订单模板1.xlsx";
|
||||||
ExcelTemplateProc.doExportExcelByTemplateProc(templatePath, filePath, staticDataMap, dynamicDataMappingList);
|
ExcelTemplateProc.doExportExcelByTemplateProc(templatePath, filePath, staticDataMap, dynamicDataMappingList);
|
||||||
|
|
||||||
// 发送Excel文件
|
// 发送Excel文件
|
||||||
@ -952,5 +963,171 @@ public class KingdeeWorkCenterDataController extends BaseController {
|
|||||||
}
|
}
|
||||||
return mapList;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2528,8 +2528,8 @@ public class JdUtil {
|
|||||||
JsonObject filterObject = new JsonObject();
|
JsonObject filterObject = new JsonObject();
|
||||||
JsonArray filterString = new JsonArray();
|
JsonArray filterString = new JsonArray();
|
||||||
filterObject.addProperty("FieldName", "FCloseStatus");
|
filterObject.addProperty("FieldName", "FCloseStatus");
|
||||||
filterObject.addProperty("Compare", "67");
|
filterObject.addProperty("Compare", "105");
|
||||||
filterObject.addProperty("Value", 105);
|
filterObject.addProperty("Value", "A");
|
||||||
filterObject.addProperty("Left", "");
|
filterObject.addProperty("Left", "");
|
||||||
filterObject.addProperty("Right", "");
|
filterObject.addProperty("Right", "");
|
||||||
filterObject.addProperty("Logic", 0);
|
filterObject.addProperty("Logic", 0);
|
||||||
@ -2537,8 +2537,8 @@ public class JdUtil {
|
|||||||
|
|
||||||
JsonObject filterObject1 = new JsonObject();
|
JsonObject filterObject1 = new JsonObject();
|
||||||
filterObject1.addProperty("FieldName", "FMRPCloseStatus");
|
filterObject1.addProperty("FieldName", "FMRPCloseStatus");
|
||||||
filterObject1.addProperty("Compare", "67");
|
filterObject1.addProperty("Compare", "105");
|
||||||
filterObject1.addProperty("Value", 105);
|
filterObject1.addProperty("Value", "A");
|
||||||
filterObject1.addProperty("Left", "");
|
filterObject1.addProperty("Left", "");
|
||||||
filterObject1.addProperty("Right", "");
|
filterObject1.addProperty("Right", "");
|
||||||
filterObject1.addProperty("Logic", 0);
|
filterObject1.addProperty("Logic", 0);
|
||||||
@ -2546,8 +2546,8 @@ public class JdUtil {
|
|||||||
|
|
||||||
JsonObject filterObject2 = new JsonObject();
|
JsonObject filterObject2 = new JsonObject();
|
||||||
filterObject2.addProperty("FieldName", "FDocumentStatus");
|
filterObject2.addProperty("FieldName", "FDocumentStatus");
|
||||||
filterObject2.addProperty("Compare", "67");
|
filterObject2.addProperty("Compare", "105");
|
||||||
filterObject2.addProperty("Value", 105);
|
filterObject2.addProperty("Value", "C");
|
||||||
filterObject2.addProperty("Left", "");
|
filterObject2.addProperty("Left", "");
|
||||||
filterObject2.addProperty("Right", "");
|
filterObject2.addProperty("Right", "");
|
||||||
filterObject2.addProperty("Logic", 0);
|
filterObject2.addProperty("Logic", 0);
|
||||||
@ -2588,8 +2588,8 @@ public class JdUtil {
|
|||||||
JsonObject filterObject = new JsonObject();
|
JsonObject filterObject = new JsonObject();
|
||||||
JsonArray filterString = new JsonArray();
|
JsonArray filterString = new JsonArray();
|
||||||
filterObject.addProperty("FieldName", "FDocumentStatus");
|
filterObject.addProperty("FieldName", "FDocumentStatus");
|
||||||
filterObject.addProperty("Compare", "67");
|
filterObject.addProperty("Compare", "105");
|
||||||
filterObject.addProperty("Value", 105);
|
filterObject.addProperty("Value", "C");
|
||||||
filterObject.addProperty("Left", "");
|
filterObject.addProperty("Left", "");
|
||||||
filterObject.addProperty("Right", "");
|
filterObject.addProperty("Right", "");
|
||||||
filterObject.addProperty("Logic", 0);
|
filterObject.addProperty("Logic", 0);
|
||||||
@ -2597,8 +2597,8 @@ public class JdUtil {
|
|||||||
|
|
||||||
JsonObject filterObject1 = new JsonObject();
|
JsonObject filterObject1 = new JsonObject();
|
||||||
filterObject1.addProperty("FieldName", "FCloseStatus");
|
filterObject1.addProperty("FieldName", "FCloseStatus");
|
||||||
filterObject1.addProperty("Compare", "67");
|
filterObject1.addProperty("Compare", "105");
|
||||||
filterObject1.addProperty("Value", 105);
|
filterObject1.addProperty("Value", "A");
|
||||||
filterObject1.addProperty("Left", "");
|
filterObject1.addProperty("Left", "");
|
||||||
filterObject1.addProperty("Right", "");
|
filterObject1.addProperty("Right", "");
|
||||||
filterObject1.addProperty("Logic", 0);
|
filterObject1.addProperty("Logic", 0);
|
||||||
|
|||||||
BIN
ruoyi-system/src/main/resources/EXCEL模板/采购订单模板1.xlsx
Normal file
BIN
ruoyi-system/src/main/resources/EXCEL模板/采购订单模板1.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user