Explorar o código

feat(mjava): 补 ALYConf 抽 URL 常量 + 迁 util→utils.crypto + 规则锚点

- O3 新增 server/aliyun/ALYConf.java(4 个发票市场 URL 常量),
  ALYInvoiceImpl 内硬编码 URL 替换为 ALYConf.URL_*,server/
  层结构对齐其他产品板块
- O2 util/crypto/RSACrypt.java 迁到 utils/crypto/RSACrypt.java
  (package 同步改),本仓零引用经 R4 grep 确认,清掉 util/
  与 utils/ 并存的拧巴目录(util/ 自动消失)
- O6 仓库 CLAUDE.md 与 openspec/specs/project-baseline.md
  修正 stale mjava-baseline.md 引用(指向 后端/CLAUDE.md,
  实际权威位置),加 capability spec client-service-layering
  锚点
malk hai 1 semana
pai
achega
79f06ddb1e

+ 3 - 2
CLAUDE.md

@@ -5,8 +5,9 @@ Java 后端基座 + 客户子项目仓库。Spring Boot 2.2.13 + MySQL,第一
 ## 开发前必读
 
 - 仓库基线:`openspec/specs/project-baseline.md`(代码锚点 + 子项目清单)
-- 通用规范:`/Users/malk/Desktop/Tech/claude/后端/mjava-baseline.md`(11 章,权威)
-- 宜搭特化:`/Users/malk/Desktop/Tech/claude/后端/yida-serverside.md`
+- 通用规范:`/Users/malk/Desktop/Tech/claude/后端/CLAUDE.md`(含 Client/Service 分层规则 R1~R7)
+- 宜搭特化:`/Users/malk/Desktop/Tech/claude/后端/.claude/docs/yida-serverside.md`
+- 分层规则 capability spec:`openspec/specs/client-service-layering/spec.md`(archive 后;当前在 `openspec/changes/standardize-client-service-layering/specs/`)
 
 ## OpenSpec 工作流(opsx)
 

+ 20 - 0
mjava/src/main/java/com/malk/server/aliyun/ALYConf.java

@@ -0,0 +1,20 @@
+package com.malk.server.aliyun;
+
+/**
+ * 阿里云市场 - 接口 URL 常量
+ * 服务: 发票验真(fapiao / invoice market)
+ */
+public class ALYConf {
+
+    // 发票验真: PDF 文件
+    public static final String URL_INVOICE_PDF = "https://fapiao.market.alicloudapi.com/v2/invoice/pdf";
+
+    // 发票验真: 发票号码查验
+    public static final String URL_INVOICE_QUERY = "https://fapiao.market.alicloudapi.com/v2/invoice/query";
+
+    // 发票验真: 二维码查验
+    public static final String URL_INVOICE_QRCODE = "https://fapiao.market.alicloudapi.com/v2/invoice/qrcode";
+
+    // 发票验真: OCR 图片识别
+    public static final String URL_INVOICE_OCR = "https://invoice.market.alicloudapi.com/v2/invoice/ocr";
+}

+ 5 - 4
mjava/src/main/java/com/malk/service/aliyun/impl/ALYInvoiceImpl.java

@@ -1,6 +1,7 @@
 package com.malk.service.aliyun.impl;
 
 import com.alibaba.fastjson.JSONException;
+import com.malk.server.aliyun.ALYConf;
 import com.malk.server.aliyun.ALYR;
 import com.malk.server.common.McException;
 import com.malk.service.aliyun.ALYInvoice;
@@ -44,7 +45,7 @@ public class ALYInvoiceImpl implements ALYInvoice {
     public Map<String, ?> invoiceCheckPDF(String appcode, String pdfUrl) {
         Map<String, Object> param = new HashMap<>();
         param.put("pdfUrl", pdfUrl);
-        return doPostForResource("https://fapiao.market.alicloudapi.com/v2/invoice/pdf", appcode, param, null, null);
+        return doPostForResource(ALYConf.URL_INVOICE_PDF, appcode, param, null, null);
     }
 
     /**
@@ -61,7 +62,7 @@ public class ALYInvoiceImpl implements ALYInvoice {
             checkCode = checkCode.substring(checkCode.length() - 6);
         }
         bodys.put("checkCode", checkCode);
-        return doPostForResource("https://fapiao.market.alicloudapi.com/v2/invoice/query", appcode, null, null, bodys);
+        return doPostForResource(ALYConf.URL_INVOICE_QUERY, appcode, null, null, bodys);
     }
 
     /**
@@ -71,7 +72,7 @@ public class ALYInvoiceImpl implements ALYInvoice {
     public Map<String, ?> invoiceCheckCode(String appcode, String code) {
         Map<String, String> bodys = new HashMap<>();
         bodys.put("code", code);
-        return doPostForResource("https://fapiao.market.alicloudapi.com/v2/invoice/qrcode", appcode, null, bodys, null);
+        return doPostForResource(ALYConf.URL_INVOICE_QRCODE, appcode, null, bodys, null);
     }
 
     /**
@@ -82,6 +83,6 @@ public class ALYInvoiceImpl implements ALYInvoice {
         Map<String, Object> param = new HashMap<>();
         param.put("url", imgUrl);
 //        param.put("extType", true);
-        return doPostForResource("https://invoice.market.alicloudapi.com/v2/invoice/ocr", appcode, null, null, param);
+        return doPostForResource(ALYConf.URL_INVOICE_OCR, appcode, null, null, param);
     }
 }

+ 1 - 1
mjava/src/main/java/com/malk/util/crypto/RSACrypt.java

@@ -1,4 +1,4 @@
-package com.malk.util.crypto;
+package com.malk.utils.crypto;
 
 import javax.crypto.Cipher;
 import java.security.KeyFactory;

+ 5 - 4
openspec/specs/project-baseline.md

@@ -6,9 +6,10 @@
 
 **不在本文件**。规范正文维护在跨仓库共享的文档中心:
 
-- 通用后端基座:`/Users/malk/Desktop/Tech/claude/后端/mjava-baseline.md`
-- 宜搭服务端特化:`/Users/malk/Desktop/Tech/claude/后端/yida-serverside.md`
+- 通用后端基座:`/Users/malk/Desktop/Tech/claude/后端/CLAUDE.md`(含 Client/Service 分层规则 R1~R7)
+- 宜搭服务端特化:`/Users/malk/Desktop/Tech/claude/后端/.claude/docs/yida-serverside.md`
 - 顶层共享规范:`/Users/malk/Desktop/Tech/claude/CLAUDE.md`
+- 分层规则 capability spec:`openspec/specs/client-service-layering/spec.md`(archive 后;当前在 `openspec/changes/standardize-client-service-layering/specs/`)
 
 本文件只做三件事:**指路、列代码锚点、列子项目清单**。
 
@@ -38,8 +39,8 @@
 |------|------|------|
 | `mjava` | 基座 jar | 无 repackage,被子项目 `${mjava.version}` 依赖 |
 | `mjava-mcli` | 客户模板 | 最小化 Boot.java + yml;新客户接入复制此模块 |
-| `mjava-shunfeng` | 生产客户 | 会议聚合(腾讯会议/Zoom/钉钉日程) |
-| `mjava-guangming` | 生产客户 | 钉钉 SSO 邮箱 |
+| `mjava-pro` | 平台增强 | 多租户/动态 DDL 等高级能力(建设中) |
+| `mjava-com` | 通用 action | 钉钉/宜搭 action 注册中心(建设中) |
 
 ## 新客户接入(简版)