From 95b33ee3d50afa5c25068f5da93c72530a52b37f Mon Sep 17 00:00:00 2001 From: yangyufu Date: Tue, 19 May 2026 14:37:56 +0800 Subject: [PATCH] =?UTF-8?q?MDM=20-SAP=20CRM=20=E6=96=B0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E4=B8=8A=E7=BA=BF=20=E8=B0=83=E6=95=B4=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PdmBiContainerinfoServiceImpl.java | 2 +- .../PdmBiSubpackagerelationServiceImpl.java | 2 +- .../util/SlitterTaskUtilBakup0519.java | 707 ++++++++++++++++++ .../config/thread/ApiLogExecutorConfig.java | 35 + .../nl/modules/logging/annotation/ApiLog.java | 22 + .../modules/logging/aspect/ApiLogAspect.java | 121 +++ .../sysapi/SysApiLogController.java | 159 ++++ .../service/quartz/config/JobRunner.java | 22 +- .../sysapi/entity/dto/ApiLogQuery.java | 34 + .../sysapi/mapper/SysApiLogMapper.java | 16 + .../sysapi/service/ISysApiLogService.java | 17 + .../sysapi/service/OutboundApiLogger.java | 71 ++ .../sysapi/service/SysApiLogServiceImpl.java | 38 + .../java/org/nl/wms/basedata/st/wql/stivt.xls | Bin 300032 -> 300544 bytes .../wms/ext/crm/rest/CrmToLmsController.java | 17 +- .../wms/ext/mdm/rest/MdmToLmsController.java | 25 +- .../mdm/service/impl/MdmToLmsServiceImpl.java | 8 +- .../wms/ext/mes/rest/MesToLmsController.java | 176 ++++- .../mes/service/impl/LmsToMesServiceImpl.java | 71 +- .../wms/ext/sap/rest/LmsToSapController.java | 8 +- .../wms/ext/sap/rest/SapToLmsController.java | 49 +- .../wms/ext/sap/service/LmsToSapService.java | 17 + .../sap/service/impl/LmsToSapServiceImpl.java | 80 +- .../impl/ProductInstorServiceImpl.java | 10 +- .../nl/wms/pda/st/wql/PDA_PRODUVTIONOUT.wql | 4 +- .../java/org/nl/wms/sch/AutoQueryEnum.java | 6 +- .../wms/sch/manage/AutoQueryProudDayData.java | 10 +- .../nl/wms/sch/manage/AutoQueryUpload.java | 2 +- .../service/impl/ProductScrapServiceImpl.java | 9 +- .../st/instor/wql/QST_IVT_PRODUCTSCRAP.wql | 2 +- .../service/impl/CheckOutBillServiceImpl.java | 2 +- .../st/outbill/wql/QST_IVT_CHECKOUTBILL.wql | 3 +- .../impl/InAndOutRetrunServiceImpl.java | 203 +++-- .../main/resources/config/application-dev.yml | 8 +- lms/nladmin-ui/public/config.js | 2 +- lms/nladmin-ui/src/api/monitor/sysapilog.js | 17 + .../src/views/monitor/sysapiLog/index.vue | 366 +++++++++ .../src/views/system/notice/NoticeIcon.vue | 3 - .../wms/st/inStor/productscrap/AddDialog.vue | 20 +- .../src/views/wms/st/inbill/DivDialog.vue | 1 - 40 files changed, 2196 insertions(+), 169 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/util/SlitterTaskUtilBakup0519.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/config/thread/ApiLogExecutorConfig.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/modules/logging/annotation/ApiLog.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/modules/logging/aspect/ApiLogAspect.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/system/controller/sysapi/SysApiLogController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/entity/dto/ApiLogQuery.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/mapper/SysApiLogMapper.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/ISysApiLogService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/OutboundApiLogger.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/SysApiLogServiceImpl.java create mode 100644 lms/nladmin-ui/src/api/monitor/sysapilog.js create mode 100644 lms/nladmin-ui/src/views/monitor/sysapiLog/index.vue diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/info/service/impl/PdmBiContainerinfoServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/info/service/impl/PdmBiContainerinfoServiceImpl.java index 62f8f24ce..6fb9f2f4e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/info/service/impl/PdmBiContainerinfoServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/info/service/impl/PdmBiContainerinfoServiceImpl.java @@ -95,7 +95,7 @@ public class PdmBiContainerinfoServiceImpl extends ServiceImpl纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650 or 玻璃纤维及其制品|FRP管|6英寸|15-20|1700|阶梯 + * 长度:1300mm + * 外径:6*25.4mm+15*2mm=182.4mm + * 内径:6英寸(25.4mm/英寸) + * 壁厚:15mm(常规)、特殊12mm + * 材质:纸管

+ */ + public static String getPaperTubeInformation(PdmBiSlittingproductionplan plan) { + // 纸管描述 + String tubeDescription; + if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) { + tubeDescription = plan.getPaper_tube_description(); + } else { + tubeDescription = plan.getFRP_description(); + } + // 材质 + return getComposePaperTubeInformation(tubeDescription, plan.getPaper_tube_or_FRP()); + } + + /** + * 获取组成信息 + * @param tubeDescription 纸管信息 + * @param paperOrFrp 材质(1纸管,2FRP管) + * @return 长*外径*内径*壁厚*重量*薄壁厚*阶梯长度*材质(1纸管,2FRP管) + */ + public static String getComposePaperTubeInformation(String tubeDescription, String paperOrFrp) { + if (ObjectUtil.isEmpty(tubeDescription)) { + return ""; + } + return getComposePaperTubeInformation(tubeDescription) + "*" + paperOrFrp; + } + + /** + * 获取组成信息 + * @param tubeDescription 纸管信息 + * @return 长*外径*内径*壁厚*重量*薄壁厚*阶梯长度 + */ + public static String getComposePaperTubeInformation(String tubeDescription) { + if (ObjectUtil.isEmpty(tubeDescription)) { + return ""; + } + boolean flag = tubeDescription.contains("阶梯"); + tubeDescription = tubeDescription.replaceAll("\\|[\\u4e00-\\u9fa5]+$", ""); + // 解析描述数组 + String[] tubeArray = tubeDescription.split("\\|"); + // 定义尺寸与长度 + double dia = Double.parseDouble(Character.toString(tubeArray[2].charAt(0))); + + // 假设壁厚默认值为15,如果描述数组长度为4,则重新赋值 + String th = tubeArray.length == 5 ? tubeArray[3] : "15"; + String th2 = "0"; + String jtLen = "0"; + if (tubeArray[3].contains("-")) { + th = tubeArray[3].split("-")[1]; + th2 = tubeArray[3].split("-")[0]; + } + if (flag) { + switch (tubeArray[tubeArray.length - 1]) { + case "1400": + case "1700": + jtLen = "75"; + break; + case "1500": + case "1600": + jtLen = "150"; + break; + default: + jtLen = "0"; + break; + } + } + // 计算外径和内径 + double externalDiameter = dia * 25.4 + Double.parseDouble(th) * 2; + double internalDiameter = dia * 25.4; + + StringBuilder sb = new StringBuilder(); + // 长*外径*内径*壁厚*重量*材质(1纸管,2FRP管) + // 长 + sb.append(tubeArray[tubeArray.length - 1]); + sb.append("*"); + // 外径 + sb.append(NumberUtil.round(externalDiameter, 1).doubleValue()); + sb.append("*"); + // 内径 + sb.append(NumberUtil.round(internalDiameter, 1).doubleValue()); + sb.append("*"); + // 壁厚 + sb.append(th); + sb.append("*"); + // 重量 + sb.append(0); + sb.append("*"); + // 薄壁厚 + sb.append(th2); + sb.append("*"); + // 阶梯长度 + sb.append(jtLen); + return sb.toString(); + } + + public static void main(String[] args) { +// System.out.println(getComposePaperTubeInformation("玻璃纤维及其制品|FRP管|6英寸|15|1100", "1")); + System.out.println(isNumeric(",3000")); + System.out.println(isNumeric("3000")); + System.out.println(isNumeric("3000.32")); + System.out.println(isNumeric("-3000.32")); + boolean b = checkComplete("1", "2", null); + } + + /** + * 设置所需的套管纸管信息 + * @param param 任务参数 + * @param needPlans 所需的分切计划 + */ + public static void putNeedPaperSpec(JSONObject param, List needPlans) { + log.info("正在设置所需的套管纸管信息..."); + // 纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650 + for (PdmBiSlittingproductionplan plan : needPlans) { + if (SlitterConstant.SLITTER_SUB_VOLUME_LEFT.equals(plan.getLeft_or_right())) { + if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) { + param.put("left", plan.getPaper_tube_material()); + param.put("leftSize", plan.getPaper_tube_model().split("\\|")[2].charAt(0)); + } else { + param.put("left", plan.getFRP_material()); + param.put("leftSize", plan.getFRP_model().split("\\|")[2].charAt(0)); + } + param.put("leftSpec", SlitterTaskUtilBakup0519.getPaperTubeInformation(plan)); + } else { + if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) { + param.put("right", plan.getPaper_tube_material()); + param.put("rightSize", plan.getPaper_tube_model().split("\\|")[2].charAt(0)); + } else { + param.put("right", plan.getFRP_material()); + param.put("rightSize", plan.getFRP_model().split("\\|")[2].charAt(0)); + } + param.put("rightSpec", SlitterTaskUtilBakup0519.getPaperTubeInformation(plan)); + } + } + } + + /** + * 设置当前的拔管纸管信息 + * @param param 任务参数 + * @param oldPlans 老的分切计划 + */ + public static void putCurrentPaperSpec(JSONObject param, List oldPlans) { + for (PdmBiSlittingproductionplan plan : oldPlans) { + if (SlitterConstant.SLITTER_SUB_VOLUME_LEFT.equals(plan.getLeft_or_right())) { + if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) { + param.put("currentLeft", plan.getPaper_tube_material()); + param.put("currentLeftSize", plan.getPaper_tube_model().split("\\|")[2].charAt(0)); + } else { + param.put("currentLeft", plan.getFRP_material()); + param.put("currentLeftSize", plan.getFRP_model().split("\\|")[2].charAt(0)); + } + param.put("currentLeftSpec", SlitterTaskUtilBakup0519.getPaperTubeInformation(plan)); + } else { + if (SlitterConstant.SLITTER_TYPE_PAPER.equals(plan.getPaper_tube_or_FRP())) { + param.put("currentRight", plan.getPaper_tube_material()); + param.put("currentRightSize", plan.getPaper_tube_model().split("\\|")[2].charAt(0)); + } else { + param.put("currentRight", plan.getFRP_material()); + param.put("currentRightSize", plan.getFRP_model().split("\\|")[2].charAt(0)); + } + param.put("currentRightSpec", SlitterTaskUtilBakup0519.getPaperTubeInformation(plan)); + } + } + } + + /** + * 获取设备号 + * @param resourceCode / + * @return / + */ + public static int getNumberByResourceCode(String resourceCode) { + if (ObjectUtil.isEmpty(resourceCode)) { + throw new BadRequestException("输入的设备号编码不能为空!"); + } + String trimStr = resourceCode.trim(); + // 提取最后两位作为字符串 + String lastTwoDigitsString = trimStr.substring(trimStr.length() - 2); + // 将整数再转换回字符串以供返回 + return Integer.parseInt(lastTwoDigitsString); + } + + /** + * 获取上下区域 + * @param num 编码 + * @param area 区域 + * @return / + */ + public static String getPointLocationInCutDevice(int num, String area) { + if (area.equals(B1_AREA_CODE)) { + if (num >= 1 && num <= 6) { + return "0"; + } + } + if (area.equals(B2_AREA_CODE)) { + if (num >= 1 && num <= 5) { + return "0"; + } + } + return "1"; + } + + /** + * 查询是否包含在内 + * @param names 数组 + * @param name 自负床 + * @return Boolean 是 {@code true} or 否{@code false} + */ + public static boolean containscode(String[] names, String name) { + for (String n : names) { + if (name.equals(n)) { + return true; + } + } + return false; + } + + /** + * 获取name在数组中的索引 + * @param names 数组 + * @param name 校验字符 + * @return 索引 + */ + public static int getIndex(String[] names, String name) { + for (int i = 0; i < names.length; i++) { + if (name.equals(names[i])) { + return i; + } + } + // 如果找不到返回-1 + return -1; + } + + /** + * 业务:备货区送纸管托盘时候,将纸管信息带给任务中的参数 + * @param paperList 备货区纸管信息 + * @param param 任务参数json + */ + public static void doSavePaperInfos(List paperList, JSONObject param) { + String[] material_codes = new String[paperList.size()]; + String[] material_specs = new String[paperList.size()]; + int[] qtys = new int[paperList.size()]; + String[] material_codes1 = {null,null,null,null,null}; + String[] material_specs1 = {null,null,null,null,null}; + int[] qtys1 = {0,0,0,0,0}; + for (int i = 0; i < paperList.size(); i++) { + MdPbPapervehicle vehicle = paperList.get(i); + String materialCode = vehicle.getMaterial_code(); + int qty = vehicle.getQty().intValue(); + if (containscode(material_codes, materialCode)) { + int index = getIndex(material_codes, materialCode); + qtys[index] += qty; + } else { + material_codes[i] = vehicle.getMaterial_code(); + String spec = getComposePaperTubeInformation(vehicle.getMaterial_name(), vehicle.getMaterial_code().startsWith("4") ? "1" : "2"); + material_specs[i] = spec; + qtys[i] = qty; + } + //新规格数据处理 + int row_num = Integer.parseInt(vehicle.getRow_num()); + String spec = getComposePaperTubeInformation(vehicle.getMaterial_name(), vehicle.getMaterial_code().startsWith("4") ? "1" : "2"); + material_codes1[row_num-1] = materialCode; + material_specs1[row_num-1] = spec; + qtys1[row_num-1] = qty; + } + // 转成String + String[] qtysStr = Arrays.stream(qtys) + .mapToObj(String::valueOf) + .toArray(String[]::new); + // 转成String + String[] qtysStr1 = Arrays.stream(qtys1) + .mapToObj(String::valueOf) + .toArray(String[]::new); + param.put("to_material", String.join(",", material_codes)); + param.put("to_spec", String.join(",", material_specs)); + param.put("to_qty", String.join(",", qtysStr)); + + param.put("to_material1", String.join(",", material_codes1)); + param.put("to_spec1", String.join(",", material_specs1)); + param.put("to_qty1", String.join(",", qtysStr1)); + param.put("device_code", material_specs); + } + + /** + * 传入JSONArray返回筛选字符串 + * @param array / + * @param name / + * @return / + */ + public static List getAllStringByName(JSONArray array, String name) { + List res = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) { + JSONObject jsonObject = array.getJSONObject(i); + res.add(jsonObject.getString(name)); + } + return res; + } + + /** + * 通过分切计划的上下轴返回对应的气胀轴编码 + * todo: 是否存在问题? + * @param plan 分切机 + * @return 气胀轴编码或者"-" + */ + public static String getQzzNoByUpOrDown(PdmBiSlittingproductionplan plan) { + if (SlitterConstant.SLITTER_SHAFT_UP.equals(plan.getUp_or_down())) { + return plan.getQzzno(); + } else { + return "-"; + } + } + + /** + * 获取纸管长度 + * @param plan 分切计划 + * @return / + */ + public static String getPaperLength(PdmBiSlittingproductionplan plan) { +// String s = "玻璃纤维及其制品|FRP管|6英寸|15|1700"; + String paperStr = ""; + if (plan.getPaper_tube_or_FRP().equals(SlitterConstant.SLITTER_TYPE_PAPER)) { + paperStr = plan.getPaper_tube_model(); + } else { + paperStr = plan.getFRP_model(); + } + String[] split = paperStr.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); + return split[split.length - 1]; + } + + /** + * 获取: 长*外径*内径*壁厚*重量*薄壁厚*阶梯长度 + * @param plan + * @return + */ + public static String getTubeConvertInfo(PdmBiSlittingproductionplan plan) { +// String s = "玻璃纤维及其制品|FRP管|6英寸|15|1700"; + String paperStr = ""; + if (plan.getPaper_tube_or_FRP().equals(SlitterConstant.SLITTER_TYPE_PAPER)) { + paperStr = plan.getPaper_tube_model(); + } else { + paperStr = plan.getFRP_model(); + } + return getComposePaperTubeInformation(paperStr); + } + + /** + * 获取纸管长度 + * @param plan 分切计划 + * @return / + */ + public static String getPaperLengthByCode(String name) { +// String name = "玻璃纤维及其制品|FRP管|6英寸|15|1700"; + String[] split = name.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); + return split[split.length - 1]; + } + /** + * 获取纸管长度 + * @param plan 分切计划 + * @return / + */ + public static Integer getPaperLengthByCodeInt(String name) { +// String name = "玻璃纤维及其制品|FRP管|6英寸|15|1700"; + return Integer.valueOf(getPaperLengthByCode(name)); + } + public static String getPaperSize(PdmBiSlittingproductionplan plan) { +// String s = "玻璃纤维及其制品|FRP管|6英寸|15|1700"; + String paperStr = ""; + if (plan.getPaper_tube_or_FRP().equals(SlitterConstant.SLITTER_TYPE_PAPER)) { + paperStr = plan.getPaper_tube_model(); + } else { + paperStr = plan.getFRP_model(); + } + String[] split = paperStr.replaceAll("\\|[\\u4e00-\\u9fa5]+$", "").split("\\|"); + return split[2].replaceAll("英寸",""); + } + + public static Integer getPaperLengthInt(PdmBiSlittingproductionplan plan) { + return Integer.valueOf(getPaperLength(plan)); + } + + /** + * 设置重量 + * @param plans 分切计划 + * @return 0,0,0,0 + */ + public static void setPaperWeightStr(String weightStr, List plans) { + // 1. 校验输入格式 + String[] parts = weightStr.split(","); + if (parts.length != 4) { + // 没有数据则不修改 + return; + } + + // 2. 遍历四个位置 + for (int index = 0; index < 4; index++) { + // 解析重量值(自动四舍五入到两位小数) + String strValue = parts[index]; + BigDecimal value; + try { + value = new BigDecimal(strValue).setScale(2, RoundingMode.HALF_UP); + } catch (NumberFormatException e) { + continue; // 跳过无效数值 + } + + // 3. 根据索引确定位置规则 + String expectedUp, expectedLeft; + switch (index) { + case 0: // 上左 + expectedUp = "1"; + expectedLeft = "1"; + break; + case 1: // 上右 + expectedUp = "1"; + expectedLeft = "2"; + break; + case 2: // 下左 + expectedUp = "2"; + expectedLeft = "1"; + break; + case 3: // 下右 + expectedUp = "2"; + expectedLeft = "2"; + break; + default: + throw new IllegalStateException("非法索引: " + index); + } + + // 4. 在集合中查找匹配项并更新 + for (PdmBiSlittingproductionplan plan : plans) { + if (expectedUp.equals(plan.getUp_or_down()) && + expectedLeft.equals(plan.getLeft_or_right())) { + plan.setPaper_weight(value.toString()); + break; // 找到后跳出循环 + } + } + } + } + + /** + * 获取重量 + * @param plans 分切计划 + * @return 0,0,0,0 + */ + public static String getPaperWeightStr(List plans) { + String[] weights = new String[4]; + Arrays.fill(weights, "0"); + + for (PdmBiSlittingproductionplan plan : plans) { + // 1. 获取重量并四舍五入 + String weightStr = plan.getPaper_weight(); + BigDecimal weight; + try { + weight = new BigDecimal(weightStr); + } catch (Exception e) { + continue; + } + BigDecimal rounded = weight.setScale(2, RoundingMode.HALF_UP); + + // 2. 根据位置确定数组索引 + String upDown = plan.getUp_or_down(); + String leftRight = plan.getLeft_or_right(); + int index = -1; + + if ("1".equals(upDown)) { + index = ("1".equals(leftRight)) ? 0 : 1; + } else { + index = ("1".equals(leftRight)) ? 2 : 3; + } + + // 3. 更新对应位置的重量(格式化为两位小数) + if (index >= 0 && index < 4) { + weights[index] = rounded.toString(); + } + } + + // 4. 拼接结果字符串 + return String.join(",", weights); + } + + /** + * 固定输入与输出气胀轴库点位 + * @param input + * @return + */ + public static String getQzzkMappedValue(String input) { + switch (input) { + case "B_QZZK01": return "B_QZZK02"; + case "B_QZZK02": return "B_QZZK01"; + case "B_QZZK03": return "B_QZZK04"; + case "B_QZZK04": return "B_QZZK03"; + default: throw new BadRequestException("站点输入错误: " + input); + } + } + + /** + * 下卷前置校验,判断卷的上下轴属性与实际是否一致 - 校验子卷属性 + * @param jsonArray 子卷数组 + * @param plans 计划 + */ + public static void validateConsistency(JSONArray jsonArray, List plans) { + if (plans.size() == 0) { + throw new BadRequestException("计划未找到,请确保MES已推送。"); + } + // 1. 将 List 转为 Map + Map planMap = plans.stream() + .collect(Collectors.toMap( + p -> p.getContainer_name(), + p -> p.getUp_or_down(), + // 如果有重复 key,保留第一个(按需调整) + (existing, replacement) -> existing + )); + + // 2. 遍历 JSONArray + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject item = jsonArray.getJSONObject(i); + String containerName = item.getString("container_name"); + String site = item.getString("site"); + + // 3. 检查 Plan 中是否存在对应的 container_name + if (!planMap.containsKey(containerName)) { + throw new BadRequestException("校验失败: container_name " + containerName + " 在计划列表中不存在"); + } + + // 4. 比较 site 和 up_or_down 是否一致 + String expectedUpDown = planMap.get(containerName); + if (!expectedUpDown.equals(site)) { + throw new BadRequestException("校验失败: 子卷号 " + containerName + + " 的上下轴位置" + + "与MES分切计划中的上下轴位置" + expectedUpDown + "不一致!"); + } + } + log.info("分切下卷计划位置校验通过!"); + } + + /** + * 判断管芯行家对接位是否有所需的管芯、并且数量是符合的。 + * @param tubeCodes + * @param needTubes + * @param papers + * @return + */ + public static boolean containsAllTubes(List tubeCodes, List needTubes, List papers) { + Set tubeSet = new HashSet<>(tubeCodes); + for (String tube : needTubes) { + if (!tubeSet.contains(tube)) { + return false; + } + } + int num = 0; + for (String needTube : needTubes) { + for (MdPbPapervehicle paper : papers) { + if (needTube.equals(paper.getMaterial_code())) { + num += paper.getQty().intValue(); + } + } + if (num == 0) { + return false; + } + } + return true; + } + + /** + * 组成映射Map + * @param tubes + * @return + */ + public static Map countTubes(List tubes) { + if (tubes == null) { + return new HashMap<>(); + } + return tubes.stream() + .filter(tube -> tube != null) + .collect(Collectors.toMap( + Function.identity(), + value -> 1, + Integer::sum + )); + } + + + public static List mapList(Collection from, Function func) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().map(func).collect(Collectors.toList()); + } + + /** + * 转换List + * @param obj + * @return + */ + public static List objectToList(Object obj) { + // 安全转换为List + List errorList = new ArrayList<>(); + if (obj instanceof List) { + for (Object item : (List) obj) { + if (item instanceof String) { + errorList.add((String) item); + } else { + // 非字符串元素处理(按需调整) + errorList.add(item.toString()); + } + } + } else if (obj != null) { + // 如果存储的不是List(如JSON字符串),需额外处理 + throw new IllegalStateException("Expected List type from Redis, but got: " + obj.getClass()); + } + return errorList; + } + + /** + * 判断字符串是否为数字(整数、小数、负数) + */ + public static boolean isNumeric(String str) { + if (str == null || str.isEmpty() || str.trim().isEmpty()) { + return false; + } + String s = str.trim(); + return s.matches("-?\\d+(\\.\\d+)?"); + } + + /** + * 单根轴的数据判断:根据指定的尺寸类型,校验左侧或右侧电流数据是否完整。 + * 当 size 为 1 时,只需一侧数据完整即返回 true; + * 当 size 为 2 时,要求左右两侧数据均完整才返回 true。 + * + * @param param 包含相关字段的 JSON 对象,必须包含以下键: + * "currentLeft", "currentLeftSize", "currentLeftSpec", + * "currentRight", "currentRightSize", "currentRightSpec" + * @param size 校验模式大小,决定校验逻辑: + * - 1:表示任一轴(左或右)数据完整即可(逻辑或) + * - 2:表示左右两轴数据都必须完整(逻辑与) + * @return 符合校验规则时返回 true,否则返回 false + */ + public static boolean singleShaftCheck(JSONObject param, int size) { + String currentLeft = param.getString("currentLeft"); + String currentLeftSize = param.getString("currentLeftSize"); + String currentLeftSpec = param.getString("currentLeftSpec"); + String currentRight = param.getString("currentRight"); + String currentRightSize = param.getString("currentRightSize"); + String currentRightSpec = param.getString("currentRightSpec"); + + // 根据 size 值执行不同的校验策略:1 表示任一轴有效即可,2 表示双轴均需有效 + switch (size) { + case 1: + return checkComplete(currentLeft, currentLeftSpec, currentLeftSize) + || checkComplete(currentRight, currentRightSpec, currentRightSize); + case 2: + return checkComplete(currentLeft, currentLeftSpec, currentLeftSize) + && checkComplete(currentRight, currentRightSpec, currentRightSize); + } + return false; + } + + + public static boolean checkComplete(String... checks) { + if (checks == null) { + return false; + } + for (String check : checks) { + if (ObjectUtil.isEmpty(check)) { + return false; + } + } + return true; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/config/thread/ApiLogExecutorConfig.java b/lms/nladmin-system/src/main/java/org/nl/config/thread/ApiLogExecutorConfig.java new file mode 100644 index 000000000..80927a4c3 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/config/thread/ApiLogExecutorConfig.java @@ -0,0 +1,35 @@ +package org.nl.config.thread; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description 外部系统接口执行异步线程池配置 + */ + +@Configuration +@Slf4j +public class ApiLogExecutorConfig { + + @Bean("apiLogExecutor") + public Executor apiLogExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(5); + executor.setMaxPoolSize(10); + executor.setQueueCapacity(200); + executor.setKeepAliveSeconds(60); + executor.setThreadNamePrefix("sys-api-log-"); + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.setWaitForTasksToCompleteOnShutdown(true); + executor.setAwaitTerminationSeconds(60); + executor.initialize(); + return executor; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/annotation/ApiLog.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/annotation/ApiLog.java new file mode 100644 index 000000000..5e0545e25 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/annotation/ApiLog.java @@ -0,0 +1,22 @@ +package org.nl.modules.logging.annotation; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description 注解 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ApiLog { + + String bizCode() default ""; + + String bizDesc() default ""; + + String systemFlag() default ""; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/logging/aspect/ApiLogAspect.java b/lms/nladmin-system/src/main/java/org/nl/modules/logging/aspect/ApiLogAspect.java new file mode 100644 index 000000000..7f87244a6 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/modules/logging/aspect/ApiLogAspect.java @@ -0,0 +1,121 @@ +package org.nl.modules.logging.aspect; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.nl.common.utils.IdUtil; +import org.nl.modules.logging.annotation.ApiLog; +import org.nl.system.service.sysapi.entity.SysApiLog; +import org.nl.system.service.sysapi.service.ISysApiLogService; +import org.slf4j.MDC; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description aop + */ + + +@Aspect +@Component +@Slf4j +public class ApiLogAspect { + + private final ISysApiLogService apiLogService; + + public ApiLogAspect(ISysApiLogService apiLogService) { + this.apiLogService = apiLogService; + } + + @Around("@annotation(apiLog)") + public Object around(ProceedingJoinPoint joinPoint, ApiLog apiLog) throws Throwable { + long startTime = System.currentTimeMillis(); + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + + SysApiLog logEntity = new SysApiLog(); + logEntity.setLogId(IdUtil.getStringId()); + logEntity.setDirection(1); + logEntity.setSystemFlag(apiLog.systemFlag()); + logEntity.setBizCode(apiLog.bizCode()); + logEntity.setBizDesc(apiLog.bizDesc()); + logEntity.setTraceId(MDC.get("traceId")); + logEntity.setCreateTime(DateUtil.now()); + + try { + if (attributes != null) { + HttpServletRequest request = attributes.getRequest(); + logEntity.setApiUrl(request.getRequestURI()); + logEntity.setRequestMethod(request.getMethod()); + logEntity.setRequestIp(getIpAddress(request)); + logEntity.setRequestHeaders(JSONUtil.toJsonStr(getRequestHeaders(request))); + } + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + Object[] args = joinPoint.getArgs(); + logEntity.setRequestParams(buildRequestParams(method, args)); + + Object result = joinPoint.proceed(); + + long costTime = System.currentTimeMillis() - startTime; + logEntity.setCostTime(costTime); + logEntity.setResponseStatus(200); + logEntity.setStatus("SUCCESS"); + logEntity.setResponseBody(JSONUtil.toJsonStr(result)); + + return result; + + } catch (Throwable throwable) { + long costTime = System.currentTimeMillis() - startTime; + logEntity.setCostTime(costTime); + logEntity.setStatus("FAIL"); + logEntity.setErrorMsg(throwable.getMessage()); + + throw throwable; + + } finally { + apiLogService.saveAsync(logEntity); + } + } + + private String getIpAddress(HttpServletRequest request) { + String ip = request.getHeader("X-Forwarded-For"); + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + private Map getRequestHeaders(HttpServletRequest request) { + Map headers = new HashMap<>(); + headers.put("Content-Type", request.getContentType()); + headers.put("User-Agent", request.getHeader("User-Agent")); + return headers; + } + + private String buildRequestParams(Method method, Object[] args) { + try { + if (args == null || args.length == 0) { + return "{}"; + } + return JSONUtil.toJsonStr(args); + } catch (Exception e) { + return "参数序列化失败"; + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/system/controller/sysapi/SysApiLogController.java b/lms/nladmin-system/src/main/java/org/nl/system/controller/sysapi/SysApiLogController.java new file mode 100644 index 000000000..4d7e65e5c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/system/controller/sysapi/SysApiLogController.java @@ -0,0 +1,159 @@ +package org.nl.system.controller.sysapi; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.modules.logging.annotation.Log; +import org.nl.system.service.sysapi.entity.SysApiLog; +import org.nl.system.service.sysapi.entity.dto.ApiLogQuery; +import org.nl.system.service.sysapi.service.ISysApiLogService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description 外部系统接口日志控制器 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/sysApiLog") +@Slf4j +public class SysApiLogController { + + private final ISysApiLogService apiLogService; + + /** + * 分页查询接口日志列表 + */ + @GetMapping + @Log("查询接口日志列表") + public ResponseEntity> query(ApiLogQuery query) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + + if (query.getDirection() != null) { + wrapper.eq(SysApiLog::getDirection, query.getDirection()); + } + + if (query.getSystemFlag() != null && !query.getSystemFlag().isEmpty()) { + wrapper.eq(SysApiLog::getSystemFlag, query.getSystemFlag()); + } + + if (query.getBizCode() != null && !query.getBizCode().isEmpty()) { + wrapper.eq(SysApiLog::getBizCode, query.getBizCode()); + } + + if (query.getTraceId() != null && !query.getTraceId().isEmpty()) { + wrapper.eq(SysApiLog::getTraceId, query.getTraceId()); + } + + if (query.getApiUrl() != null && !query.getApiUrl().isEmpty()) { + wrapper.like(SysApiLog::getApiUrl, query.getApiUrl()); + } + + if (query.getStatus() != null && !query.getStatus().isEmpty()) { + wrapper.eq(SysApiLog::getStatus, query.getStatus()); + } + + if (query.getBeginTime() != null && !query.getBeginTime().isEmpty()) { + wrapper.ge(SysApiLog::getCreateTime, query.getBeginTime()); + } + + if (query.getEndTime() != null && !query.getEndTime().isEmpty()) { + wrapper.le(SysApiLog::getCreateTime, query.getEndTime()); + } + + if (query.getKeyword() != null && !query.getKeyword().isEmpty()) { + wrapper.and(w -> w.like(SysApiLog::getBizDesc, query.getKeyword()) + .or().like(SysApiLog::getApiDesc, query.getKeyword()) + .or().like(SysApiLog::getRequestParams, query.getKeyword()) + .or().like(SysApiLog::getResponseBody, query.getKeyword())); + } + + wrapper.orderByDesc(SysApiLog::getCreateTime); + + Page page = new Page<>(query.getPage()+1, query.getSize()); + IPage result = apiLogService.page(page, wrapper); + + Map response = new HashMap<>(); + response.put("content", result.getRecords()); + response.put("totalElements", result.getTotal()); + response.put("totalPages", result.getPages()); + response.put("size", result.getSize()); + response.put("number", result.getCurrent()); + + return new ResponseEntity<>(response, HttpStatus.OK); + } + + /** + * 根据ID查询日志详情 + */ + @GetMapping("/{id}") + @Log("查询接口日志详情") + public ResponseEntity findById(@PathVariable String id) { + SysApiLog apiLog = apiLogService.getById(id); + return new ResponseEntity<>(apiLog, HttpStatus.OK); + } + + /** + * 获取业务类型列表(根据系统标识) + */ + @GetMapping("/bizCodeList") + @Log("获取业务类型列表") + public ResponseEntity>> getBizCodeList(@RequestParam String systemFlag, @RequestParam String direction) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysApiLog::getSystemFlag, systemFlag) + .eq(SysApiLog::getDirection, direction) + .select(SysApiLog::getBizCode, SysApiLog::getBizDesc) + .groupBy(SysApiLog::getBizCode, SysApiLog::getBizDesc) + .orderByAsc(SysApiLog::getBizCode); + + List list = apiLogService.list(wrapper); + + List> result = list.stream() + .map(log -> { + Map map = new HashMap<>(); + map.put("bizCode", log.getBizCode()); + map.put("bizDesc", log.getBizCode() + " - " +log.getBizDesc()); + return map; + }) + .collect(Collectors.toList()); + + return new ResponseEntity<>(result, HttpStatus.OK); + } + + /** + * 日志归档 + */ + @PostMapping("/archive") + @Log("接口日志归档") + public ResponseEntity archiveLogs() { + try { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.lt(SysApiLog::getCreateTime, + java.time.LocalDateTime.now().minusDays(30).toString().replace('T', ' ')); + + List oldLogs = apiLogService.list(wrapper); + + if (!oldLogs.isEmpty()) { + log.info("开始归档接口日志,共 {} 条数据", oldLogs.size()); + // TODO: 这里可以实现归档逻辑,比如: + // 1. 备份到历史表 sys_api_log_history + apiLogService.remove(wrapper); + log.info("接口日志归档完成,已删除 {} 条旧数据", oldLogs.size()); + } + return new ResponseEntity<>(HttpStatus.OK); + } catch (Exception e) { + log.error("接口日志归档失败", e); + throw new RuntimeException("日志归档失败: " + e.getMessage()); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/config/JobRunner.java b/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/config/JobRunner.java index c18855cac..5e9e76306 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/config/JobRunner.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/quartz/config/JobRunner.java @@ -39,17 +39,17 @@ public class JobRunner implements ApplicationRunner { System.out.println("本机ip:"+localIp); log.info("--------------------注入定时任务---------------------"); - List quartzJobs = quartzJobService.findByIsPauseIsFalse(); - quartzJobs.forEach(job -> { - if (judgmentIp(job.getJob_ip())) { - log.info("定时任务:{}, 执行ip: {}, 定时任务开启", job.getJob_name(), localIp); - System.out.println("定时任务: " + job.getJob_name() + ", 执行ip: " + localIp + ", 定时任务开启"); - quartzManage.addJob(job); - } else { - log.info("定时任务 {} 未开启, 本机ip{} 与 调度ip{} 不同", job.getJob_name(), localIp, job.getJob_ip()); - System.out.println("定时任务 " + job.getJob_name() + " 未开启, 本机ip: " + localIp + " 与 调度ip: " + job.getJob_ip() + " 不同"); - } - }); +// List quartzJobs = quartzJobService.findByIsPauseIsFalse(); +// quartzJobs.forEach(job -> { +// if (judgmentIp(job.getJob_ip())) { +// log.info("定时任务:{}, 执行ip: {}, 定时任务开启", job.getJob_name(), localIp); +// System.out.println("定时任务: " + job.getJob_name() + ", 执行ip: " + localIp + ", 定时任务开启"); +// quartzManage.addJob(job); +// } else { +// log.info("定时任务 {} 未开启, 本机ip{} 与 调度ip{} 不同", job.getJob_name(), localIp, job.getJob_ip()); +// System.out.println("定时任务 " + job.getJob_name() + " 未开启, 本机ip: " + localIp + " 与 调度ip: " + job.getJob_ip() + " 不同"); +// } +// }); log.info("--------------------定时任务注入完成---------------------"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/entity/dto/ApiLogQuery.java b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/entity/dto/ApiLogQuery.java new file mode 100644 index 000000000..2716887fc --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/entity/dto/ApiLogQuery.java @@ -0,0 +1,34 @@ +package org.nl.system.service.sysapi.entity.dto; +import lombok.Data; +import org.nl.common.domain.query.PageQuery; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description 外部系统接口查询实体Vo类 + */ + +@Data +public class ApiLogQuery extends PageQuery { + + private Integer direction; + + private String systemFlag; + + private String bizCode; + + private String traceId; + + private String apiUrl; + + private String status; + + private String beginTime; + + private String endTime; + + private String keyword; + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/mapper/SysApiLogMapper.java b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/mapper/SysApiLogMapper.java new file mode 100644 index 000000000..55519d5bf --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/mapper/SysApiLogMapper.java @@ -0,0 +1,16 @@ +package org.nl.system.service.sysapi.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.nl.system.service.sysapi.entity.SysApiLog; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description TODO + */ + + +@Mapper +public interface SysApiLogMapper extends BaseMapper { +} diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/ISysApiLogService.java b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/ISysApiLogService.java new file mode 100644 index 000000000..88a3101eb --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/ISysApiLogService.java @@ -0,0 +1,17 @@ +package org.nl.system.service.sysapi.service; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.system.service.sysapi.entity.SysApiLog; +import org.springframework.scheduling.annotation.Async; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description TODO + */ + +public interface ISysApiLogService extends IService { + + @Async("apiLogExecutor") + void saveAsync(SysApiLog apiLog); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/OutboundApiLogger.java b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/OutboundApiLogger.java new file mode 100644 index 000000000..d59889738 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/OutboundApiLogger.java @@ -0,0 +1,71 @@ +package org.nl.system.service.sysapi.service; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.IdUtil; +import org.nl.system.service.sysapi.entity.SysApiLog; +import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description 外部系统外出接口出口日志记录Logger + */ + + +@Component +@Slf4j +public class OutboundApiLogger { + + private static ISysApiLogService apiLogService; + + @Autowired + public void setApiLogService(ISysApiLogService service) { + OutboundApiLogger.apiLogService = service; + } + + public static void log(String systemFlag, String bizCode, String bizDesc, + String apiUrl, String requestMethod, String requestParams, + String responseBody, Integer responseStatus, Long costTime, + String status, String errorMsg) { + try { + SysApiLog logEntity = new SysApiLog(); + logEntity.setLogId(IdUtil.getStringId()); + logEntity.setDirection(0); + logEntity.setSystemFlag(systemFlag); + logEntity.setBizCode(bizCode); + logEntity.setBizDesc(bizDesc); + logEntity.setTraceId(MDC.get("traceId")); + logEntity.setApiUrl(apiUrl); + logEntity.setRequestMethod(requestMethod); + logEntity.setRequestParams(requestParams); + logEntity.setResponseBody(responseBody); + logEntity.setResponseStatus(responseStatus); + logEntity.setCostTime(costTime); + logEntity.setStatus(status); + logEntity.setErrorMsg(errorMsg); + logEntity.setCreateTime(DateUtil.now()); + + apiLogService.saveAsync(logEntity); + } catch (Exception e) { + log.error("记录出站接口日志失败", e); + } + } + + public static void logSuccess(String systemFlag, String bizType, String bizDesc, + String apiUrl, String requestMethod, String requestParams, + String responseBody, Integer responseStatus, Long costTime) { + log(systemFlag, bizType, bizDesc, apiUrl, requestMethod, requestParams, + responseBody, responseStatus, costTime, "SUCCESS", null); + } + + public static void logFail(String systemFlag, String bizType, String bizDesc, + String apiUrl, String requestMethod, String requestParams, + String errorMsg, Long costTime) { + log(systemFlag, bizType, bizDesc, apiUrl, requestMethod, requestParams, + null, null, costTime, "FAIL", errorMsg); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/SysApiLogServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/SysApiLogServiceImpl.java new file mode 100644 index 000000000..5cdea0020 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/system/service/sysapi/service/SysApiLogServiceImpl.java @@ -0,0 +1,38 @@ +package org.nl.system.service.sysapi.service; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.IdUtil; +import org.nl.system.service.sysapi.entity.SysApiLog; +import org.nl.system.service.sysapi.mapper.SysApiLogMapper; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +/** + * @author ManMan.Yang + * @version V1.1 + * @date 2026/5/14 + * @description TODO + */ + + +@Service +@Slf4j +public class SysApiLogServiceImpl extends ServiceImpl implements ISysApiLogService { + + @Override + @Async("apiLogExecutor") + public void saveAsync(SysApiLog apiLog) { + try { + if (apiLog.getLogId() == null) { + apiLog.setLogId(IdUtil.getStringId()); + } + if (apiLog.getCreateTime() == null) { + apiLog.setCreateTime(DateUtil.now()); + } + this.save(apiLog); + } catch (Exception e) { + log.error("保存接口日志失败, logId: {}", apiLog.getLogId(), e); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls index bf82ee93185ab439308c53116d9570d317b91a34..951c2255ea30b546a2ce46442031205a6efed82d 100644 GIT binary patch literal 300544 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 literal 300032 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≤N&~Z0ch(A;oJlHNOgh%R>EzW3(seX~! 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 momRollFoilWeighing(@RequestBody JSONObject jo) { return new ResponseEntity<>(crmToLmsService.getCustomerInfo(jo), HttpStatus.OK); } @PostMapping("/getCPIvtInfo") - @Log("CRM获取LMS成品库存信息") - +// @Log("CRM获取LMS成品库存信息") + @ApiLog( + bizCode = "/crm/getCPIvtInfo", + bizDesc = "CRM获取LMS成品库存信息", + systemFlag = "crm" + ) @SaIgnore public ResponseEntity getCPIvtInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(crmToLmsService.getCPIvtInfo(jo), HttpStatus.OK); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/rest/MdmToLmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/rest/MdmToLmsController.java index affa11b44..4aec30c4a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/rest/MdmToLmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/rest/MdmToLmsController.java @@ -7,6 +7,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.ApiLog; import org.nl.modules.logging.annotation.Log; import org.nl.wms.ext.mdm.entity.CommonResponseDto; import org.nl.wms.ext.mdm.service.MdmToLmsService; @@ -34,20 +35,38 @@ public class MdmToLmsController { private MdmToLmsService mdmToLmsService; @PostMapping("/transCustomerInfo") - @Log("MDM给LMS推送客户信息") +// @Log("MDM给LMS推送客户信息") + @ApiLog( + bizCode = "/mdm/transCustomerInfo", + bizDesc = "MDM给LMS推送客户信息", + systemFlag = "mdm" + ) + @SaIgnore public CommonResponseDto transCustomerInfo(@RequestBody JSONObject jsonData){ return mdmToLmsService.transCustomerInfo(jsonData); } @PostMapping("/transSupplierInfo") - @Log("MDM给LMS推送供应商信息") +// @Log("MDM给LMS推送供应商信息") + @ApiLog( + bizCode = "/mdm/transSupplierInfo", + bizDesc = "MDM给LMS推送供应商信息", + systemFlag = "mdm" + ) + @SaIgnore public CommonResponseDto transSupplierInfo(@RequestBody JSONObject jsonData){ return mdmToLmsService.transSupplierInfo(jsonData); } @PostMapping("/transMaterialInfo") - @Log("MDM给LMS推送物料主数据信息") +// @Log("MDM给LMS推送物料主数据信息") + @ApiLog( + bizCode = "/mdm/transMaterialInfo", + bizDesc = "MDM给LMS推送物料主数据信息", + systemFlag = "mdm" + ) + @SaIgnore public CommonResponseDto transMaterialInfo(@RequestBody JSONObject jsonData){ return mdmToLmsService.transMaterialInfo(jsonData); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/impl/MdmToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/impl/MdmToLmsServiceImpl.java index 723f1fbdc..8d6d073aa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/impl/MdmToLmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mdm/service/impl/MdmToLmsServiceImpl.java @@ -3,13 +3,13 @@ package org.nl.wms.ext.mdm.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.Lists; +import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; @@ -50,7 +50,7 @@ public class MdmToLmsServiceImpl implements MdmToLmsService { for (int i = 0; i < customers.size(); i++) { JSONObject json = customers.getJSONObject(i); //主编码主键 - long mdId = json.getLongValue("mdId"); + long mdId = IdUtil.getLongId(); //客户编号 String mdCode = json.getString("mdCode"); //主数据描述 @@ -151,7 +151,7 @@ public class MdmToLmsServiceImpl implements MdmToLmsService { for (int i = 0; i < supplier.size(); i++) { JSONObject json = supplier.getJSONObject(i); //主编码主键 - long mdId = json.getLongValue("mdId"); + long mdId = IdUtil.getLongId(); //客户编号 String mdCode = json.getString("mdCode"); //主数据描述 @@ -230,7 +230,7 @@ public class MdmToLmsServiceImpl implements MdmToLmsService { for (int i = 0; i < materiels.size(); i++) { JSONObject json = materiels.getJSONObject(i); //主编码主键 - long mdId = json.getLongValue("mdId"); + long mdId = IdUtil.getLongId(); //物料编码 String mdCode = json.getString("mdCode"); //物料名称 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToLmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToLmsController.java index bf02c2339..b296a34b1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToLmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToLmsController.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.ApiLog; import org.nl.modules.logging.annotation.Log; import org.nl.wms.ext.mes.service.MesToLmsService; import org.springframework.http.HttpStatus; @@ -23,177 +24,302 @@ public class MesToLmsController { private final MesToLmsService mesToLmsService; @PostMapping("/momRollFoilStart") - @Log("母卷批次创建信息发送智能物流(MES生箔工序Move In)") +// @Log("母卷批次创建信息发送智能物流(MES生箔工序Move In)") @SaIgnore + @ApiLog( + bizCode = "/mes/momRollFoilStart", + bizDesc = "母卷批次创建信息发送智能物流(MES生箔工序Move In)", + systemFlag = "mes" + ) public ResponseEntity momRollFoilStart(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.momRollFoilStart(jo), HttpStatus.OK); } @PostMapping("momRollFoilWeighing") - @Log("MES获取AGV称重信息") +// @Log("MES获取AGV称重信息") @SaIgnore + @ApiLog( + bizCode = "/mes/momRollFoilWeighing", + bizDesc = "MES获取AGV称重信息", + systemFlag = "mes" + ) public ResponseEntity momRollFoilWeighing(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.momRollFoilWeighing(jo), HttpStatus.OK); } @PostMapping("/momRollFoilComplete") - @Log("MES执行下卷动作告诉LMS") +// @Log("MES执行下卷动作告诉LMS") @SaIgnore + @ApiLog( + bizCode = "/mes/momRollFoilComplete", + bizDesc = "MES执行下卷动作告诉LMS", + systemFlag = "mes" + ) public ResponseEntity momRollFoilComplete(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.momRollFoilComplete(jo), HttpStatus.OK); } @PostMapping("/momRollBakeNextSpecTransfer") - @Log("MES下达烘箱温度和时间配方给智能物流(MES 包装防护工序Move Out)") +// @Log("MES下达烘箱温度和时间配方给智能物流(MES 包装防护工序Move Out)") @SaIgnore + @ApiLog( + bizCode = "/mes/momRollBakeNextSpecTransfer", + bizDesc = "MES下达烘箱温度和时间配方给智能物流(MES 包装防护工序Move Out)", + systemFlag = "mes" + ) public ResponseEntity momRollBakeNextSpecTransfer(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.momRollBakeNextSpecTransfer(jo), HttpStatus.OK); } @PostMapping("/cutPlanTransfer") - @Log("分切包装段:分切计划(单表,包含母卷/改制子卷-包装箱号、空包装箱物料、纸筒/FRP管)MES下发智能物流") +// @Log("分切包装段:分切计划(单表,包含母卷/改制子卷-包装箱号、空包装箱物料、纸筒/FRP管)MES下发智能物流") @SaIgnore + @ApiLog( + bizCode = "/mes/cutPlanTransfer", + bizDesc = "分切包装段:分切计划(单表,包含母卷/改制子卷-包装箱号、空包装箱物料、纸筒/FRP管)MES下发智能物流", + systemFlag = "mes" + ) public ResponseEntity cutPlanTransfer(@RequestBody JSONArray ja) { return new ResponseEntity<>(mesToLmsService.cutPlanTransfer(ja), HttpStatus.OK); } @PostMapping("/callNextAssAndMomRoll") - @Log("分切即将完成,呼叫配送下一个母卷/改制子卷,MES传智能物流") +// @Log("分切即将完成,呼叫配送下一个母卷/改制子卷,MES传智能物流") @SaIgnore + @ApiLog( + bizCode = "/mes/callNextAssAndMomRoll", + bizDesc = "分切即将完成,呼叫配送下一个母卷/改制子卷,MES传智能物流", + systemFlag = "mes" + ) public ResponseEntity callNextAssAndMomRoll(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.callNextAssAndMomRoll(jo), HttpStatus.OK); } @PostMapping("/childRollCutStartComp") - @Log("当母卷开始分切时,MES系统会将对应的子卷进站信息发送给只能物流系统,一方面物流系统可以预估下个母卷的送达时间,也可以闭环期分切计划指令") +// @Log("当母卷开始分切时,MES系统会将对应的子卷进站信息发送给只能物流系统,一方面物流系统可以预估下个母卷的送达时间,也可以闭环期分切计划指令") @SaIgnore + @ApiLog( + bizCode = "/mes/childRollCutStartComp", + bizDesc = "当母卷开始分切时,MES系统会将对应的子卷进站信息发送给只能物流系统,一方面物流系统可以预估下个母卷的送达时间,也可以闭环期分切计划指令", + systemFlag = "mes" + ) public ResponseEntity childRollCutStartComp(@RequestBody JSONArray ja) { return new ResponseEntity<>(mesToLmsService.childRollCutStartComp(ja), HttpStatus.OK); } @PostMapping("/childRollPackComplete") - @Log("包装完成,传智能物流包装箱与子卷关系及子卷属性值,LMS执行入库") +// @Log("包装完成,传智能物流包装箱与子卷关系及子卷属性值,LMS执行入库") @SaIgnore + @ApiLog( + bizCode = "/mes/childRollPackComplete", + bizDesc = "包装完成,传智能物流包装箱与子卷关系及子卷属性值,LMS执行入库", + systemFlag = "mes" + ) public ResponseEntity childRollPackComplete(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.childRollPackComplete(jo), HttpStatus.OK); } @PostMapping("/inventoryTransferInfoSync") - @Log("转单指令在MES平台查看后,更新信息,发送LMS(是否拆包、更新后的入库日期、是否更换外包装箱标签),LMS重打子卷标签、包装箱外标签") +// @Log("转单指令在MES平台查看后,更新信息,发送LMS(是否拆包、更新后的入库日期、是否更换外包装箱标签),LMS重打子卷标签、包装箱外标签") @SaIgnore + @ApiLog( + bizCode = "/mes/inventoryTransferInfoSync", + bizDesc = "转单指令在MES平台查看后,更新信息,发送LMS(是否拆包、更新后的入库日期、是否更换外包装箱标签),LMS重打子卷标签、包装箱外标签", + systemFlag = "mes" + ) public ResponseEntity inventoryTransferInfoSync(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.inventoryTransferInfoSync(jo), HttpStatus.OK); } @PostMapping("/childRollInfoUpdate") - @Log("子卷信息更新:计划外需求有可能入库完成后,ERP才回传计划外需求SalesOrder") +// @Log("子卷信息更新:计划外需求有可能入库完成后,ERP才回传计划外需求SalesOrder") @SaIgnore + @ApiLog( + bizCode = "/mes/childRollInfoUpdate", + bizDesc = "子卷信息更新:计划外需求有可能入库完成后,ERP才回传计划外需求SalesOrder", + systemFlag = "mes" + ) public ResponseEntity childRollInfoUpdate(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.childRollInfoUpdate(jo), HttpStatus.OK); } @PostMapping("/cutPlanTransferCancel") - @Log("分切计划取消") +// @Log("分切计划取消") @SaIgnore + @ApiLog( + bizCode = "/mes/cutPlanTransferCancel", + bizDesc = "分切计划取消", + systemFlag = "mes" + ) public ResponseEntity cutPlanTransferCancel(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.cutPlanTransferCancel(jo), HttpStatus.OK); } @PostMapping("/sendAuditResult") - @Log("子卷审批结果") +// @Log("子卷报废审批结果回传") @SaIgnore + @ApiLog( + bizCode = "/mes/sendAuditResult", + bizDesc = "子卷报废审批结果回传", + systemFlag = "mes" + ) public ResponseEntity sendAuditResult(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.sendAuditResult(jo), HttpStatus.OK); } @PostMapping("/sendProcessInfo") - @Log("表处母卷上料、下料接口") +// @Log("表处母卷上料、下料接口") @SaIgnore + @ApiLog( + bizCode = "/mes/sendProcessInfo", + bizDesc = "表处母卷上料、下料接口", + systemFlag = "mes" + ) public ResponseEntity sendProcessInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.sendProcessInfo(jo), HttpStatus.OK); } @PostMapping("/momRollTRStartMock") - @Log("表处工单推送") +// @Log("表处工单推送") @SaIgnore + @ApiLog( + bizCode = "/mes/momRollTRStartMock", + bizDesc = "表处工单推送", + systemFlag = "mes" + ) public ResponseEntity processFoilStart(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.processFoilStart(jo), HttpStatus.OK); } @PostMapping("/sendTargetHouse") - @Log("MES传递给LMS入线边库或者入成品库") +// @Log("MES传递给LMS入线边库或者入成品库") @SaIgnore + @ApiLog( + bizCode = "/mes/sendTargetHouse", + bizDesc = "MES传递给LMS入线边库或者入成品库", + systemFlag = "mes" + ) public ResponseEntity sendTargetHouse(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.sendTargetHouse(jo), HttpStatus.OK); } @PostMapping("/momSendSplitMfgOrderBOM") - @Log("MES传递LMS订单BOM") +// @Log("MES传递LMS订单BOM") @SaIgnore + @ApiLog( + bizCode = "/mes/momSendSplitMfgOrderBOM", + bizDesc = "MES传递LMS订单BOM", + systemFlag = "mes" + ) public ResponseEntity momSendSplitMfgOrderBOM(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.momSendSplitMfgOrderBOM(jo), HttpStatus.OK); } @PostMapping("/getRollInfo") - @Log("MES传递LMS获取子卷重量信息") +// @Log("MES传递LMS获取子卷重量信息") @SaIgnore + @ApiLog( + bizCode = "/mes/getRollInfo", + bizDesc = "MES传递LMS获取子卷重量信息", + systemFlag = "mes" + ) public ResponseEntity getRollInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.getRollInfo(jo), HttpStatus.OK); } @PostMapping("/sendLevelInfo") - @Log("MES传递LMS定级数据") +// @Log("MES传递LMS定级数据") @SaIgnore + @ApiLog( + bizCode = "/mes/sendLevelInfo", + bizDesc = "MES传递LMS定级数据", + systemFlag = "mes" + ) public ResponseEntity sendLevelInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.sendLevelInfo(jo), HttpStatus.OK); } @PostMapping("/containerNeedDown") - @Log("子卷拼接完成是否下轴") +// @Log("子卷拼接完成是否下轴") @SaIgnore + @ApiLog( + bizCode = "/mes/containerNeedDown", + bizDesc = "子卷拼接完成是否下轴", + systemFlag = "mes" + ) public ResponseEntity containerNeedDown(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.containerNeedDown(jo), HttpStatus.OK); } @PostMapping("/sendSubInfo") - @Log("子卷下料信息MES传递给LMS") +// @Log("子卷下料信息MES传递给LMS") @SaIgnore + @ApiLog( + bizCode = "/mes/sendSubInfo", + bizDesc = "子卷下料信息MES传递给LMS", + systemFlag = "mes" + ) public ResponseEntity sendSubInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.sendSubInfo(jo), HttpStatus.OK); } @PostMapping("/changeSect") - @Log("MES传递给LMS入线边库或者入成品库、撤销入线边库、人工改变入线边还是包装") +// @Log("MES传递给LMS入线边库或者入成品库、撤销入线边库、人工改变入线边还是包装") @SaIgnore + @ApiLog( + bizCode = "/mes/changeSect", + bizDesc = "MES传递给LMS入线边库或者入成品库、撤销入线边库、人工改变入线边还是包装", + systemFlag = "mes" + ) public ResponseEntity changeSect(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.sendTargetHouse(jo), HttpStatus.OK); } @PostMapping("/getWasteFoilWeight") - @Log("分切子卷获取LMS,AGV废箔称重重量") +// @Log("分切子卷获取LMS,AGV废箔称重重量") @SaIgnore + @ApiLog( + bizCode = "/mes/getWasteFoilWeight", + bizDesc = "分切子卷获取LMS,AGV废箔称重重量", + systemFlag = "mes" + ) public ResponseEntity getWasteFoilWeight(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.getWasteFoilWeight(jo), HttpStatus.OK); } @PostMapping("/WasteFoilSuccess") - @Log("分切子卷获取LMS,AGV废箔称重重量") +// @Log("分切子卷获取LMS,AGV废箔称重重量") @SaIgnore + @ApiLog( + bizCode = "/mes/WasteFoilSuccess", + bizDesc = "分切子卷获取LMS,AGV废箔称重重量", + systemFlag = "mes" + ) public ResponseEntity WasteFoilSuccess(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.WasteFoilSuccess(jo), HttpStatus.OK); } @PostMapping("/boxIsPass") - @Log("飞书通知LMS木箱是否通过") +// @Log("飞书通知LMS木箱是否通过") @SaIgnore + @ApiLog( + bizCode = "/mes/boxIsPass", + bizDesc = "飞书通知LMS木箱是否通过", + systemFlag = "mes" + ) public ResponseEntity boxIsPass(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.boxIsPass(jo), HttpStatus.OK); } @PostMapping("/changeBomInfo") - @Log("MES更新LMS分切工单、订单BOM信息") +// @Log("MES更新LMS分切工单、订单BOM信息") @SaIgnore + @ApiLog( + bizCode = "/mes/changeBomInfo", + bizDesc = "MES更新LMS分切工单、订单BOM信息", + systemFlag = "mes" + ) public ResponseEntity changeBomInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(mesToLmsService.changeBomInfo(jo), HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java index 124d255c6..cbd404097 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/LmsToMesServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.ext.mes.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONUtil; import org.nl.common.utils.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -24,6 +25,7 @@ import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.system.service.sysapi.service.OutboundApiLogger; import org.nl.wms.ext.mes.service.LmsToMesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -61,7 +63,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { @Override public JSONObject momRollFoilWeighing(JSONObject param) { log.info("momRollFoilWeighing接口输入参数为:-------------------" + param); - + long startTime = System.currentTimeMillis(); JSONObject result = new JSONObject(); if (StrUtil.equals("0", is_connect_mes)) { result.put("status", HttpStatus.OK.value()); @@ -94,8 +96,16 @@ public class LmsToMesServiceImpl implements LmsToMesService { } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("mes", "/sap/center/lms/004", "LMS的PDA操作AGV下卷,AGV称重完成后AGV称重信息发送MES", + url, "POST", JSONUtil.toJsonStr(param), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("MES提示错误:" + e.getMessage()); } + // 记录成功日志 + OutboundApiLogger.logSuccess("sap", "/sap/center/lms/004", "LMS的PDA操作AGV下卷,AGV称重完成后AGV称重信息发送MES", + url, "POST", JSONUtil.toJsonStr(param), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } @@ -135,7 +145,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { result.put("data", new JSONObject()); return result; } - + long startTime = System.currentTimeMillis(); String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); String api = "CamstarApi/MomRollBakeInBound"; url = url + api; @@ -152,8 +162,16 @@ public class LmsToMesServiceImpl implements LmsToMesService { throw new BadRequestException(result.getString("RTMSG")); } } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("mes", "/CamstarApi/MomRollBakeInBound", "智能桁架将母卷调进烘箱完成,智能物流发送MES", + url, "POST", JSONUtil.toJsonStr(param), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("MES提示错误:" + e.getMessage()); } + // 记录成功日志 + OutboundApiLogger.logSuccess("mes", "/CamstarApi/MomRollBakeInBound", "智能桁架将母卷调进烘箱完成,智能物流发送MES", + url, "POST", JSONUtil.toJsonStr(param), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } @@ -194,7 +212,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { return result; } - + long startTime = System.currentTimeMillis(); String UserName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); String Password = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); param.put("UserName", UserName); @@ -216,8 +234,15 @@ public class LmsToMesServiceImpl implements LmsToMesService { throw new BadRequestException(result.getString("RTMSG")); } } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("mes", "/CamstarApi/MomRollBakeOutBound", "母卷出烘箱信息智能物流传MES", + url, "POST", JSONUtil.toJsonStr(param), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("MES提示错误:" + e.getMessage()); } + OutboundApiLogger.logSuccess("mes", "/CamstarApi/MomRollBakeOutBound", "母卷出烘箱信息智能物流传MES", + url, "POST", JSONUtil.toJsonStr(param), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } @@ -449,7 +474,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { result.put("data", new JSONObject()); return result; } - + long startTime = System.currentTimeMillis(); JSONObject jo = new JSONObject(); jo.put("iPackageBoxSN", PackageBoxSN); jo.put("iSpec", "FGPRODUCT"); @@ -482,8 +507,16 @@ public class LmsToMesServiceImpl implements LmsToMesService { } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("mes", "/CamstarApi/ChildRollFGInboundComplete", "入库完成,LMS回传MES,MES成品入库Move Out", + url, "POST", JSONUtil.toJsonStr(param), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("MES提示错误:" + e.getMessage()); } + // 记录成功日志 + OutboundApiLogger.logSuccess("mes", "/CamstarApi/ChildRollFGInboundComplete", "入库完成,LMS回传MES,MES成品入库Move Out", + url, "POST", JSONUtil.toJsonStr(param), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } @@ -505,7 +538,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { result.put("data", new JSONObject()); return result; } - + long startTime = System.currentTimeMillis(); String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); String api = "CamstarApi/ChildRollFGOutboundComplete"; url = url + api; @@ -525,8 +558,16 @@ public class LmsToMesServiceImpl implements LmsToMesService { } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("mes", "/CamstarApi/ChildRollFGOutboundComplete", "发货完成,LMS同步MES子卷及包装箱状态,MES更新信息", + url, "POST", JSONUtil.toJsonStr(param), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("MES提示错误:" + e.getMessage()); } + // 记录成功日志 + OutboundApiLogger.logSuccess("mes", "/CamstarApi/ChildRollFGOutboundComplete", "发货完成,LMS同步MES子卷及包装箱状态,MES更新信息", + url, "POST", JSONUtil.toJsonStr(param), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } @@ -547,7 +588,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { result.put("data", new JSONObject()); return result; } - + long startTime = System.currentTimeMillis(); String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); String api = "CamstarApi/LMSUnPackage"; url = url + api; @@ -573,8 +614,16 @@ public class LmsToMesServiceImpl implements LmsToMesService { } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("mes", "/CamstarApi/LMSUnPackage", "拆箱出库:回传mes箱号、子卷号", + url, "POST", JSONUtil.toJsonStr(param), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("MES提示错误:" + e.getMessage()); } + // 记录成功日志 + OutboundApiLogger.logSuccess("mes", "/CamstarApi/LMSUnPackage", "拆箱出库:回传mes箱号、子卷号", + url, "POST", JSONUtil.toJsonStr(param), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } @@ -595,7 +644,7 @@ public class LmsToMesServiceImpl implements LmsToMesService { result.put("data", new JSONObject()); return result; } - + long startTime = System.currentTimeMillis(); String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_URL").getValue(); String api = "CamstarApi/LMSPackage"; url = url + api; @@ -621,8 +670,16 @@ public class LmsToMesServiceImpl implements LmsToMesService { } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("mes", "/CamstarApi/LMSPackage", "拆箱入库:回传mes箱号、子卷号", + url, "POST", JSONUtil.toJsonStr(param), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("MES提示错误:" + e.getMessage()); } + // 记录成功日志 + OutboundApiLogger.logSuccess("mes", "/CamstarApi/LMSPackage", "拆箱入库:回传mes箱号、子卷号", + url, "POST", JSONUtil.toJsonStr(param), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/LmsToSapController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/LmsToSapController.java index bdb06a0f4..62fa4db27 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/LmsToSapController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/LmsToSapController.java @@ -22,7 +22,6 @@ public class LmsToSapController { @PostMapping("/returnDelivery") @Log("LMS回传SAP交货单") - public ResponseEntity returnDelivery(@RequestBody JSONObject jo) { return new ResponseEntity<>(LmsToSapService.returnDelivery(jo), HttpStatus.OK); } @@ -41,4 +40,11 @@ public class LmsToSapController { return new ResponseEntity<>(LmsToSapService.returnOutDtl(jo), HttpStatus.OK); } + @PostMapping("/returnScrapDtl") + @Log("LMS成品报废明细回传") + + public ResponseEntity returnScrapDtl(@RequestBody JSONObject jo) { + return new ResponseEntity<>(LmsToSapService.returnScrapDtl(jo), HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java index 86d96282b..fe3ea2761 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.ApiLog; import org.nl.modules.logging.annotation.Log; import org.nl.wms.ext.sap.service.SapToLmsService; import org.springframework.http.HttpStatus; @@ -23,48 +24,72 @@ public class SapToLmsController { @SaIgnore @PostMapping("/getMaterialInfo") - @Log("SAP给LMS推送物料信息") - +// @Log("SAP给LMS推送物料信息") + @ApiLog( + bizCode = "/sap/getMaterialInfo", + bizDesc = "SAP给LMS推送物料信息", + systemFlag = "sap" + ) public ResponseEntity getMaterialInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(sapToLmsService.getMaterialInfo(jo), HttpStatus.OK); } @SaIgnore @PostMapping("/getDeliveryInfo") - @Log("SAP给LMS推送交货单信息") - +// @Log("SAP给LMS推送交货单信息") + @ApiLog( + bizCode = "/sap/getDeliveryInfo", + bizDesc = "SAP给LMS推送交货单信息", + systemFlag = "sap" + ) public ResponseEntity getDeliveryInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(sapToLmsService.getDeliveryInfo(jo), HttpStatus.OK); } @SaIgnore @PostMapping("/getReturnDeliveryInfo") - @Log("SAP给LMS推送退货交货单信息") - +// @Log("SAP给LMS推送退货交货单信息") + @ApiLog( + bizCode = "/sap/getReturnDeliveryInfo", + bizDesc = "SAP给LMS推送退货交货单信息", + systemFlag = "sap" + ) public ResponseEntity getReturnDeliveryInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(sapToLmsService.getReturnDeliveryInfo(jo), HttpStatus.OK); } @SaIgnore @PostMapping("/getCannibalize") - @Log("SAP给LMS推送调拨出库单") - +// @Log("SAP给LMS推送调拨出库单") + @ApiLog( + bizCode = "/sap/getCannibalize", + bizDesc = "SAP给LMS推送调拨出库单", + systemFlag = "sap" + ) public ResponseEntity getCannibalize(@RequestBody JSONObject jo) { return new ResponseEntity<>(sapToLmsService.getCannibalize(jo), HttpStatus.OK); } @SaIgnore @PostMapping("/getReCutInfo") - @Log("SAP给LMS推送改切出库单") - +// @Log("SAP给LMS推送改切出库单") + @ApiLog( + bizCode = "/sap/getReCutInfo", + bizDesc = "SAP给LMS推送改切出库单", + systemFlag = "sap" + ) public ResponseEntity getReCutInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(sapToLmsService.getReCutInfo(jo), HttpStatus.OK); } @SaIgnore @PostMapping("/getUnPlanInfo") - @Log("SAP给LMS推送计划外子卷转单信息") - +// @Log("SAP给LMS推送计划外子卷转单信息") + @ApiLog( + bizCode = "/sap/getUnPlanInfo", + bizDesc = "SAP给LMS推送计划外子卷转单信息", + systemFlag = "sap" + ) public ResponseEntity getUnPlanInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(sapToLmsService.getUnPlanInfo(jo), HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/LmsToSapService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/LmsToSapService.java index f0724e07b..b4abf1cb8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/LmsToSapService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/LmsToSapService.java @@ -52,4 +52,21 @@ public interface LmsToSapService { * KALAB 重量 */ JSONObject returnOutDtl(JSONObject jo); + + /* + WERKS 工厂 + MATNR 物料编码 + LGORT 库存地点 + CHARG SAP批次 + BDMNG 数量 + ZCJZ 返检修改差异重量 + ZGHZL 返检修改后重量 + VRKME 单位 + Z1 MES批次 + VBELN 销售订单 + POSNR 销售订单行 + ZYDYY 移动原因 + ZLYXT 来源系统 + */ + JSONObject returnScrapDtl(JSONObject jo); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/LmsToSapServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/LmsToSapServiceImpl.java index b2ac71814..a2571636e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/LmsToSapServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/LmsToSapServiceImpl.java @@ -2,6 +2,7 @@ package org.nl.wms.ext.sap.service.impl; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -9,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.util.SpringContextHolder; import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.system.service.sysapi.service.OutboundApiLogger; import org.nl.wms.ext.sap.service.LmsToSapService; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -38,7 +40,7 @@ public class LmsToSapServiceImpl implements LmsToSapService { * */ { log.info("returnDelivery接口输入参数为:-------------------" + jo.toString()); - + long startTime = System.currentTimeMillis(); JSONObject result = new JSONObject(); String isConnect = "1"; if (StrUtil.equals("0", isConnect)) { @@ -68,8 +70,16 @@ public class LmsToSapServiceImpl implements LmsToSapService { } } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("sap", "/sap/center/lms/004", "LMS回传SAP交货单", + url, "POST", JSONUtil.toJsonStr(jo), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("SAP提示错误:" + e.getMessage()); } + // 记录成功日志 + OutboundApiLogger.logSuccess("sap", "/sap/center/lms/004", "LMS回传SAP交货单", + url, "POST", JSONUtil.toJsonStr(jo), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } } @@ -100,7 +110,7 @@ public class LmsToSapServiceImpl implements LmsToSapService { * */ { log.info("returnMoveDtl接口输入参数为:-------------------" + jo.toString()); - + long startTime = System.currentTimeMillis(); JSONObject result = new JSONObject(); String isConnect = "1"; if (StrUtil.equals("0", isConnect)) { @@ -129,8 +139,15 @@ public class LmsToSapServiceImpl implements LmsToSapService { } } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("sap", "/sap/center/lms/005", "LMS移库接口回传", + url, "POST", JSONUtil.toJsonStr(jo), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("SAP提示错误:" + e.getMessage()); } + OutboundApiLogger.logSuccess("sap", "/sap/center/lms/005", "LMS移库接口回传", + url, "POST", JSONUtil.toJsonStr(jo), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } } @@ -139,7 +156,7 @@ public class LmsToSapServiceImpl implements LmsToSapService { public JSONObject returnOutDtl(JSONObject jo) { { log.info("returnOutDtl接口输入参数为:-------------------" + jo.toString()); - + long startTime = System.currentTimeMillis(); JSONObject result = new JSONObject(); String isConnect = "1"; if (StrUtil.equals("0", isConnect)) { @@ -170,8 +187,65 @@ public class LmsToSapServiceImpl implements LmsToSapService { } } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("sap", "/sap/center/lms/007", "LMS调拨出库接口回传", + url, "POST", JSONUtil.toJsonStr(jo), e.getMessage(), + System.currentTimeMillis() - startTime); throw new BadRequestException("SAP提示错误:" + e.getMessage()); } + // 记录成功日志 + OutboundApiLogger.logSuccess("sap", "/sap/center/lms/007", "LMS调拨出库接口回传", + url, "POST", JSONUtil.toJsonStr(jo), result.toString(), 200, + System.currentTimeMillis() - startTime); + return result; + } + } + + @Override + public JSONObject returnScrapDtl(JSONObject jo) { + { + log.info("returnScrapDtl接口输入参数为:-------------------" + jo.toString()); + long startTime = System.currentTimeMillis(); + JSONObject result = new JSONObject(); + String isConnect = "1"; + if (StrUtil.equals("0", isConnect)) { + result.put("status", HttpStatus.OK.value()); + result.put("message", "下发成功,但未连接MES!"); + result.put("data", new JSONObject()); + return result; + } + + JSONArray list = new JSONArray(); + + String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("SAP_URL").getValue(); + String token = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("SAP_TOKEN").getValue(); + String sap_client = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("SAP_CLIENT").getValue(); + String api = "/sap/center/lms/001"; + url = url + api; + try { + String resultMsg = HttpRequest.post(url).header("TOKEN", token) + .header("sap-client", sap_client) + .body(String.valueOf(jo)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("returnScrapDtl接口输出参数为:-------------------" + result.toString()); + + String type = result.getString("TYPE"); + if (StrUtil.equals(type, "E")) { + throw new BadRequestException(result.getString("MESSAGE")); + } + + } catch (Exception e) { + // 记录失败日志 + OutboundApiLogger.logFail("sap", "/sap/center/lms/001", "LMS成品报废明细回传", + url, "POST", JSONUtil.toJsonStr(jo), e.getMessage(), + System.currentTimeMillis() - startTime); + throw new BadRequestException("SAP提示错误:" + e.getMessage()); + } + // 记录成功日志 + OutboundApiLogger.logSuccess("sap", "/sap/center/lms/001", "LMS成品报废明细回传", + url, "POST", JSONUtil.toJsonStr(jo), result.toString(), 200, + System.currentTimeMillis() - startTime); return result; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java index 0e546b988..0498387e4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java @@ -182,8 +182,8 @@ public class ProductInstorServiceImpl implements ProductInstorService { //查询仓库 JSONObject stor = new JSONObject(); - if ("BC01".equals(sub_jo.getString("ext_code"))) { - stor = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_delete = '0' AND is_used = '1' AND is_productstore = '0' AND stor_code = 'BC01'").uniqueResult(0); + if ("F002".equals(sub_jo.getString("ext_code"))) { + stor = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_delete = '0' AND is_used = '1' AND is_productstore = '0' AND stor_code = 'F002'").uniqueResult(0); } else { stor = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_delete = '0' AND is_used = '1' AND is_productstore = '1'").uniqueResult(0); } @@ -206,7 +206,7 @@ public class ProductInstorServiceImpl implements ProductInstorService { //判断是否虚拟 if (!"1".equals(is_virtual)) { - if ("BC01".equals(sub_jo.getString("ext_code"))) { + if ("F002".equals(sub_jo.getString("ext_code"))) { throw new BadRequestException("二期仓库木箱,请进行虚拟入库!"); } @@ -388,7 +388,7 @@ public class ProductInstorServiceImpl implements ProductInstorService { // 木箱实称重重量 double real_weight = sub_jo.getDoubleValue("real_weight"); - if (ObjectUtil.isNotEmpty(sub_jo.getString("real_weight")) && "AC01".equals(sub_jo.getString("ext_code"))) { + if (ObjectUtil.isNotEmpty(sub_jo.getString("real_weight")) && "F001".equals(sub_jo.getString("ext_code"))) { // 判断木箱毛重是否超标 if (NumberUtil.sub(box_weight, weight_sys) <= real_weight && NumberUtil.add(box_weight, weight_sys) >= real_weight) { } else { @@ -413,7 +413,7 @@ public class ProductInstorServiceImpl implements ProductInstorService { String task_id = IdUtil.getLongId() + ""; //直接分配虚拟区货位,并确认 - if ("BC01".equals(sub_jo.getString("ext_code"))) { + if ("F002".equals(sub_jo.getString("ext_code"))) { JSONObject jsonObject = WQLObject.getWQLObject("st_ivt_sectattr").query("sect_id = '" + whereJson.getString("sect_id") + "'") .uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/wql/PDA_PRODUVTIONOUT.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/wql/PDA_PRODUVTIONOUT.wql index f66d3abf4..e3ebe180c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/wql/PDA_PRODUVTIONOUT.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/wql/PDA_PRODUVTIONOUT.wql @@ -145,7 +145,7 @@ mst.is_delete = '0' AND mst.io_type = '1' AND point.point_type = '8' - AND mst.stor_code = 'BC01' + AND mst.stor_code = 'F002' OPTION 输入.box_no <> "" point.vehicle_code LIKE 输入.box_no @@ -315,4 +315,4 @@ ENDSELECT ENDQUERY - ENDIF \ No newline at end of file + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AutoQueryEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AutoQueryEnum.java index f9c71f53d..40cdebb92 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AutoQueryEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AutoQueryEnum.java @@ -4,9 +4,9 @@ package org.nl.wms.sch; * 仓库枚举 */ public enum AutoQueryEnum { - AC01("01", "兰州一期仓库", "1582991156504039424"), - BC01("02", "兰州二期仓库", "1582991156504039455"), - WK01("03", "东莞仓库", "1597073830499717120"); + F001("01", "铜箔一期成品库", "1582991156504039424"), + F002("02", "铜箔二期成品库", "1582991156504039455"), + F037("03", "东莞仓库", "1597073830499717120"); private String name; private String code; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryProudDayData.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryProudDayData.java index 40ae3747b..ea6ca6a77 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryProudDayData.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryProudDayData.java @@ -711,34 +711,34 @@ public class AutoQueryProudDayData { // 兰州一期仓(除BC) List collect = dataList.stream() - .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.AC01.getId())) + .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.F001.getId())) .filter(row -> !custBandC.contains(row.getString("customer_name"))) .collect(Collectors.toList()); result.put("Customerqty1", NumberUtil.round(collect.stream().map(row -> row.getDoubleValue("num")).reduce(Double::sum).orElse(0.00).toString(), 2) + ""); // 兰州二期仓(除BC) List collect2 = dataList.stream() - .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.BC01.getId())) + .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.F002.getId())) .filter(row -> !custBandC.contains(row.getString("customer_name"))) .collect(Collectors.toList()); result.put("Customerqty2", NumberUtil.round(collect2.stream().map(row -> row.getDoubleValue("num")).reduce(Double::sum).orElse(0.00).toString(), 2) + ""); // 东莞仓 List collect3 = dataList.stream() - .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.WK01.getId())) + .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.F037.getId())) .collect(Collectors.toList()); result.put("Customerqty3", NumberUtil.round(collect3.stream().map(row -> row.getDoubleValue("num")).reduce(Double::sum).orElse(0.00).toString(), 2) + ""); // 兰州一期仓(B) List collect4 = dataList.stream() - .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.AC01.getId())) + .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.F001.getId())) .filter(row -> custB.contains(row.getString("customer_name"))) .collect(Collectors.toList()); result.put("Customerqty4", NumberUtil.round(collect4.stream().map(row -> row.getDoubleValue("num")).reduce(Double::sum).orElse(0.00).toString(), 2) + ""); // 兰州一期仓(C) List collect5 = dataList.stream() - .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.AC01.getId())) + .filter(row -> row.getString("stor_id").equals(AutoQueryEnum.F001.getId())) .filter(row -> custC.contains(row.getString("customer_name"))) .collect(Collectors.toList()); result.put("Customerqty5", NumberUtil.round(collect5.stream().map(row -> row.getDoubleValue("num")).reduce(Double::sum).orElse(0.00).toString(), 2) + ""); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryUpload.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryUpload.java index e9aa53b4f..b4b0b3967 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryUpload.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryUpload.java @@ -34,7 +34,7 @@ public class AutoQueryUpload { if (tryLock){ //查询已经处于分配中、分配完但还未回传给MES的销售出库单 WQLObject wo = WQLObject.getWQLObject("st_ivt_iostorinv"); - JSONArray send_rows = wo.query("bill_type = '1001' AND bill_status IN ( '30', '40' ) AND stor_code = 'AC01' AND upload_mes = '0' AND is_delete = '0'").getResultJSONArray(0); + JSONArray send_rows = wo.query("bill_type = '1001' AND bill_status IN ( '30', '40' ) AND stor_code = 'F001' AND upload_mes = '0' AND is_delete = '0'").getResultJSONArray(0); this.sendInfo(send_rows); } }finally { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ProductScrapServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ProductScrapServiceImpl.java index c3321550d..c92384a68 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ProductScrapServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ProductScrapServiceImpl.java @@ -108,6 +108,7 @@ public class ProductScrapServiceImpl implements ProductScrapService { mst_jo.put("biz_date", DateUtil.today()); mst_jo.put("stor_id", MapUtil.getStr(map, "stor_id")); mst_jo.put("stor_code", MapUtil.getStr(map, "stor_code")); + mst_jo.put("scrap_type", MapUtil.getStr(map, "scrap_type")); mst_jo.put("stor_name", MapUtil.getStr(map, "stor_name")); mst_jo.put("bill_status", "10"); mst_jo.put("input_optid", currentUserId + ""); @@ -215,6 +216,10 @@ public class ProductScrapServiceImpl implements ProductScrapService { WQLObject ivt = WQLObject.getWQLObject("st_ivt_structivt"); try { + String scrap_type = whereJson.getString("scrap_type"); + if(StrUtil.isEmpty(scrap_type)){ + scrap_type = "1002"; + } // 查询所有明细 JSONArray dtlArr = dtl.query("scrap_id = '" + whereJson.getString("scrap_id") + "'").getResultJSONArray(0); @@ -253,8 +258,8 @@ public class ProductScrapServiceImpl implements ProductScrapService { jsonOutMst.put("create_mode", "03"); jsonOutMst.put("biz_date", DateUtil.now()); jsonOutMst.put("io_type", "1"); - jsonOutMst.put("buss_type", "1002"); - jsonOutMst.put("bill_type", "1002"); + jsonOutMst.put("buss_type", scrap_type); + jsonOutMst.put("bill_type", scrap_type); jsonOutMst.put("source_name", "成品报废审核单"); JSONArray tableData = new JSONArray(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTSCRAP.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTSCRAP.wql index 9eaa2da3c..e2ccfa8ae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTSCRAP.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTSCRAP.wql @@ -127,4 +127,4 @@ code = 'FAIL_SOURCE' ENDSELECT ENDQUERY - ENDIF \ No newline at end of file + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index e6b6a4b70..9b407ddf2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java @@ -5660,7 +5660,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { jsonDtl.put("BWART", "311"); jsonDtl.put("MENGE", json.getDoubleValue("real_qty")); jsonDtl.put("MEINS", json.getString("qty_unit_name")); - jsonDtl.put("WERKS", "2460"); + jsonDtl.put("WERKS", "2461"); JSONObject jsonSect = sectTab.query("sect_id = '" + json.getString("sect_id") + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonSect)) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql index 88f1027f4..bb715c8ec 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql @@ -1042,7 +1042,8 @@ mater.material_code, unit.unit_name AS qty_unit_name, attr.storagevehicle_code AS box_no, - sub.sap_pcsn + sub.sap_pcsn, + sub.sale_order_name source_bill_code FROM ST_IVT_StructIvt ivt LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java index 33fd00387..7370ab455 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java @@ -191,6 +191,7 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { JSONObject stor_jo = WQLObject.getWQLObject("ST_IVT_BSRealStorAttr").query("stor_id = '" + stor_id + "'").uniqueResult(0); String lgort = stor_jo.getString("ext_id"); String is_productstore = stor_jo.getString("is_productstore"); + //生产入库 if (StrUtil.equals(bill_type, "0001") || StrUtil.equals(bill_type, "0007")) { @@ -421,68 +422,69 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { } // 报废出库:回传mes - if (StrUtil.equals(bill_type, "1007") || StrUtil.equals(bill_type, "1008") || StrUtil.equals(bill_type, "1010") || StrUtil.equals(bill_type, "1002")) { +// if (StrUtil.equals(bill_type, "1007") || StrUtil.equals(bill_type, "1008") || StrUtil.equals(bill_type, "1010") || StrUtil.equals(bill_type, "1002")) { +// +// JSONArray disArr = WQL.getWO("QST_IVT_INANDOUTRETRUN").addParam("flag", "3").addParam("iostorinv_id", jo_mst.getString("iostorinv_id")).process().getResultJSONArray(0); +// +// String box_no_in = disArr.toJavaList(JSONObject.class).stream() +// .map(row -> row.getString("box_no")) +// .collect(Collectors.joining("','")); +// +// // 所有子卷 +// List disList = WQLObject.getWQLObject("st_ivt_iostorinvdis").query("box_no in ('" + box_no_in + "') and iostorinv_id = '" + jo_mst.getString("iostorinv_id") + "'").getResultJSONArray(0).toJavaList(JSONObject.class); +// +// // 查询仓库 +// JSONObject jsonStor = WQLObject.getWQLObject("st_ivt_bsrealstorattr") +// .query("stor_code = '" + jo_mst.getString("stor_code") + "'").uniqueResult(0); +// +// for (int j = 0; j < disArr.size(); j++) { +// JSONObject param = new JSONObject(); +// JSONArray item = new JSONArray(); +// +// JSONObject json = disArr.getJSONObject(j); +// +// JSONObject jsonDtl = new JSONObject(); +// JSONArray details = new JSONArray(); +// +// jsonDtl.put("PackageBoxSN", json.getString("box_no")); +// jsonDtl.put("Status", "1"); +// +// List collect = disList.stream() +// .filter(row -> row.getString("box_no").equals(json.getString("box_no"))) +// .collect(Collectors.toList()); +// +// for (int k = 0; k < collect.size(); k++) { +// JSONObject jsonObject = collect.get(k); +// +// JSONObject jsonObject1 = new JSONObject(); +// jsonObject1.put("ContainerName", jsonObject.getString("pcsn")); +// jsonObject1.put("NetWeight",NumberUtil.toStr(jsonObject.getDoubleValue("plan_qty"))); +// details.add(jsonObject1); +// } +// jsonDtl.put("Details", details); +// item.add(jsonDtl); +// +// param.put("Items", item); +// +// // 仓库编码 +// param.put("WareHouse", jsonStor.getString("ext_id")); +// SpringContextHolder.getBean(LmsToMesServiceImpl.class).ChildScrapUpdate(param); +// +// // 更新分配回传成功 +// JSONObject jsonUpdate = new JSONObject(); +// jsonUpdate.put("is_upload", "1"); +// +// WQLObject.getWQLObject("st_ivt_iostorinvdis") +// .update(jsonUpdate,"iostorinv_id = '"+jo_mst.getString("iostorinv_id")+"' and box_no = '"+json.getString("box_no")+"'"); +// } +// +// jo_mst.put("upload_mes", "1"); +// jo_mst.put("is_upload", "1"); +// jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId()); +// jo_mst.put("upload_time", DateUtil.now()); +// WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst); +// } - JSONArray disArr = WQL.getWO("QST_IVT_INANDOUTRETRUN").addParam("flag", "3").addParam("iostorinv_id", jo_mst.getString("iostorinv_id")).process().getResultJSONArray(0); - - String box_no_in = disArr.toJavaList(JSONObject.class).stream() - .map(row -> row.getString("box_no")) - .collect(Collectors.joining("','")); - - // 所有子卷 - List disList = WQLObject.getWQLObject("st_ivt_iostorinvdis").query("box_no in ('" + box_no_in + "') and iostorinv_id = '" + jo_mst.getString("iostorinv_id") + "'").getResultJSONArray(0).toJavaList(JSONObject.class); - - // 查询仓库 - JSONObject jsonStor = WQLObject.getWQLObject("st_ivt_bsrealstorattr") - .query("stor_code = '" + jo_mst.getString("stor_code") + "'").uniqueResult(0); - - for (int j = 0; j < disArr.size(); j++) { - JSONObject param = new JSONObject(); - JSONArray item = new JSONArray(); - - JSONObject json = disArr.getJSONObject(j); - - JSONObject jsonDtl = new JSONObject(); - JSONArray details = new JSONArray(); - - jsonDtl.put("PackageBoxSN", json.getString("box_no")); - jsonDtl.put("Status", "1"); - - List collect = disList.stream() - .filter(row -> row.getString("box_no").equals(json.getString("box_no"))) - .collect(Collectors.toList()); - - for (int k = 0; k < collect.size(); k++) { - JSONObject jsonObject = collect.get(k); - - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("ContainerName", jsonObject.getString("pcsn")); - jsonObject1.put("NetWeight",NumberUtil.toStr(jsonObject.getDoubleValue("plan_qty"))); - details.add(jsonObject1); - } - jsonDtl.put("Details", details); - item.add(jsonDtl); - - param.put("Items", item); - - // 仓库编码 - param.put("WareHouse", jsonStor.getString("ext_id")); - SpringContextHolder.getBean(LmsToMesServiceImpl.class).ChildScrapUpdate(param); - - // 更新分配回传成功 - JSONObject jsonUpdate = new JSONObject(); - jsonUpdate.put("is_upload", "1"); - - WQLObject.getWQLObject("st_ivt_iostorinvdis") - .update(jsonUpdate,"iostorinv_id = '"+jo_mst.getString("iostorinv_id")+"' and box_no = '"+json.getString("box_no")+"'"); - } - - jo_mst.put("upload_mes", "1"); - jo_mst.put("is_upload", "1"); - jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId()); - jo_mst.put("upload_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst); - } /*// 改切出库 if (StrUtil.equals(bill_type, "1003")) { @@ -527,6 +529,10 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelationrecord"); // 子卷包装关系表 WQLObject subTab2 = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); + // 成品报废审核主表 + WQLObject scrapTab = WQLObject.getWQLObject("st_ivt_productscrapmst"); + //成品报废审核明细表 + WQLObject scrapDtlTab = WQLObject.getWQLObject("st_ivt_productscrapdtl"); JSONArray rows = whereJson.getJSONArray("rows"); for (int i = 0; i < rows.size(); i++) { @@ -538,9 +544,8 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { JSONObject stor_jo = WQLObject.getWQLObject("ST_IVT_BSRealStorAttr").query("stor_id = '" + stor_id + "'").uniqueResult(0); String lgort = stor_jo.getString("ext_id"); String is_productstore = stor_jo.getString("is_productstore"); - //退货入库 - if (StrUtil.equals(bill_type, "0002")) { - // 1.回传sap + //退货入库 1.回传sap + if (StrUtil.equals(bill_type, "0002") || StrUtil.equals(bill_type, "0013") || StrUtil.equals(bill_type, "0014")) { JSONArray paramSapMstArr = new JSONArray(); JSONObject paramSapMst = new JSONObject(); @@ -834,7 +839,7 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { jsonDtl.put("BWART", "311"); jsonDtl.put("MENGE", json.getDoubleValue("real_qty")); jsonDtl.put("MEINS", json.getString("qty_unit_name")); - jsonDtl.put("WERKS", "2460"); + jsonDtl.put("WERKS", "2461"); JSONObject jsonSect = sectTab.query("sect_id = '" + json.getString("sect_id") + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonSect)) { @@ -942,6 +947,72 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { } } + + // 报废出库 + // 2026年05月08日 新改需求修改。 + // 修改内容 1: 报废出库以前回传MES,现不回传MES,直接回传SAP + // 修改内容2: 调整报废出库的类型 bill_type 其中 1002 为 其他报废,进行保留,适配历史数据 + // 其他报废类型: 传SAP业务类型字段: 2003:成品库整卷报废 2004:成品库超期报废 2005:成品库退货报废 + if (StrUtil.equals(bill_type, "2003") || StrUtil.equals(bill_type, "2004") || StrUtil.equals(bill_type, "2005") || StrUtil.equals(bill_type, "1002")) { + JSONObject paramSapScrapMst = new JSONObject(); + JSONArray paramSapScrapDtlArr = new JSONArray(); + JSONArray dtlArr = wo_dtl.query("iostorinv_id = '" + jo_mst.getString("iostorinv_id") + "'").getResultJSONArray(0); + for (int k = 0; k < dtlArr.size(); k++) { + JSONObject json = dtlArr.getJSONObject(k); + JSONObject jsonMater = materTab.query("material_id = '" + json.getString("material_id") + "'").uniqueResult(0); + + // 明细 + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("WERKS", "2461"); + jsonDtl.put("MATNR", jsonMater.getString("material_code")); + + //获取分配表相关信息 + JSONArray disArr = wo_dis.query("iostorinvdtl_id = '" + json.getString("iostorinvdtl_id") + "'").getResultJSONArray(0); + for (int j = 0; j < disArr.size(); j++) { + JSONObject json2 = disArr.getJSONObject(j); + JSONObject jsonSect = sectTab.query("sect_id = '" + json2.getString("sect_id") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonSect)) { + jsonDtl.put("LGORT", lgort); // 明細储存地点 + } + JSONObject jsonSub = subTab.query("container_name = '" + json2.getString("pcsn") + "' AND package_box_sn = '" + json2.getString("box_no") + "' AND bill_id = '" + json2.getString("iostorinv_id") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonSub)) { + jsonDtl.put("CHARG", jsonSub.getString("sap_pcsn")); // sap批次 + } + } + // 数量 + jsonDtl.put("BDMNG", json.getString("assign_qty")); + // 返检修改差异重量 + jsonDtl.put("ZCJZ", json.getString("assign_qty")); + // 返检修改后重量 + jsonDtl.put("ZGHZL", "0"); + // 单位 + jsonDtl.put("VRKME", json.getString("qty_unit_name")); + // MES批次 + jsonDtl.put("Z1", json.getString("pcsn")); + + String sourceBillCode = json.getString("source_bill_code"); + String[] billCode = sourceBillCode.split("-"); + if(billCode.length == 2){ + //销售订单 + jsonDtl.put("VBELN", billCode[0]); + //销售订单行 + jsonDtl.put("POSNR", billCode[1]); + } + //移动原因 + jsonDtl.put("ZYDYY", bill_type); + //来源系统 + jsonDtl.put("ZLYXT", "lms"); + paramSapScrapDtlArr.add(jsonDtl); + } + paramSapScrapMst.put("IT_ITEM", paramSapScrapDtlArr); + // 调用接口回传 + SpringContextHolder.getBean(LmsToSapServiceImpl.class).returnScrapDtl(paramSapScrapMst); + jo_mst.put("upload_sap", "1"); + jo_mst.put("is_upload", "1"); + jo_mst.put("upload_optid", SecurityUtils.getCurrentUserId()); + jo_mst.put("upload_time", DateUtil.now()); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(jo_mst); + } } } } @@ -1152,7 +1223,7 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { paramDis.put("ZZWLHD", jsonSub.getString("thickness")); paramDis.put("CHARG", jsonSub.getString("sap_pcsn")); paramDis.put("KALAB", NumberUtil.round(jsonDis.getDoubleValue("plan_qty"), 3)); - paramDis.put("WERKS", "2460"); + paramDis.put("WERKS", "2461"); paramSapMstArr.add(paramDis); } param.put("ITEM", paramSapMstArr); diff --git a/lms/nladmin-system/src/main/resources/config/application-dev.yml b/lms/nladmin-system/src/main/resources/config/application-dev.yml index 564da1c16..93b23cb0f 100644 --- a/lms/nladmin-system/src/main/resources/config/application-dev.yml +++ b/lms/nladmin-system/src/main/resources/config/application-dev.yml @@ -43,9 +43,9 @@ spring: reset-enable: false filters: DruidFilter,stat - url: jdbc:mysql://localhost:3306/lms_xc?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true + url: jdbc:mysql://10.1.3.88:3306/lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true username: root - password: root + password: NLABC&hl123 slave: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver @@ -84,9 +84,9 @@ spring: reset-enable: false filters: DruidFilter,stat - url: jdbc:mysql://127.0.0.1:3306/lms_xc?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true + url: jdbc:mysql://10.1.3.88:3306/lms?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true username: root - password: root + password: NLABC&hl123 rules: readwrite-splitting: data-sources: diff --git a/lms/nladmin-ui/public/config.js b/lms/nladmin-ui/public/config.js index a4c28810e..484ae58e7 100644 --- a/lms/nladmin-ui/public/config.js +++ b/lms/nladmin-ui/public/config.js @@ -1,6 +1,6 @@ window.g = { dev: { - VUE_APP_BASE_API: 'http://localhost:8081' + VUE_APP_BASE_API: 'http://localhost:8013' }, prod: { VUE_APP_BASE_API: 'http://localhost:8081' diff --git a/lms/nladmin-ui/src/api/monitor/sysapilog.js b/lms/nladmin-ui/src/api/monitor/sysapilog.js new file mode 100644 index 000000000..1ff3172a4 --- /dev/null +++ b/lms/nladmin-ui/src/api/monitor/sysapilog.js @@ -0,0 +1,17 @@ +import request from '@/utils/request' + +export function getBizCodeList(systemFlag,direction) { + return request({ + url: 'api/sysApiLog/bizCodeList', + method: 'get', + params: { systemFlag, direction } + }) +} + +export function archiveLogs() { + return request({ + url: 'api/sysApiLog/archive', + method: 'post' + }) +} +export default { getBizCodeList,archiveLogs } diff --git a/lms/nladmin-ui/src/views/monitor/sysapiLog/index.vue b/lms/nladmin-ui/src/views/monitor/sysapiLog/index.vue new file mode 100644 index 000000000..2ccd0d427 --- /dev/null +++ b/lms/nladmin-ui/src/views/monitor/sysapiLog/index.vue @@ -0,0 +1,366 @@ + + + + + + diff --git a/lms/nladmin-ui/src/views/system/notice/NoticeIcon.vue b/lms/nladmin-ui/src/views/system/notice/NoticeIcon.vue index 4920c815d..0be87039f 100644 --- a/lms/nladmin-ui/src/views/system/notice/NoticeIcon.vue +++ b/lms/nladmin-ui/src/views/system/notice/NoticeIcon.vue @@ -140,9 +140,6 @@ export default {