From 2a26a5fa027d17aa11bde0b7fdc4e80bde554c84 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 12 十月 2026 14:58:29 +0800
Subject: [PATCH] 银川九鸿化工需求:商机状态组改为非必填

---
 docs/project-business/data/objects.json                                                                                    |    2 +-
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java    |    8 ++++----
 docs/project-business/data/flows.json                                                                                      |    2 +-
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java                    |   12 ++++++++++--
 docs/sql/config_export_all_20260904.sql                                                                                    |    4 ++--
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java                                   |    1 +
 docs/project-business/index.html                                                                                           |    6 +++---
 docs/project-business/data/modules.json                                                                                    |    2 +-
 docs/project-business/mermaid/02-sales-flow.mmd                                                                            |    2 +-
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessSaveReqVO.java |    3 +--
 10 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/docs/project-business/data/flows.json b/docs/project-business/data/flows.json
index 4192807..71a569c 100644
--- a/docs/project-business/data/flows.json
+++ b/docs/project-business/data/flows.json
@@ -3,7 +3,7 @@
     {"id": "sales", "name": "閿�鍞祦绋�", "mermaid": "mermaid/02-sales-flow.mmd", "color": "#4f9cff",
      "summary": "绾跨储杞寲瀹㈡埛 鈫� 鍟嗘満鎺ㄨ繘 鈫� 鎶ヤ环(鍙疉I璇嗗埆) 鈫� 鍚堝悓 BPM 瀹℃壒 鈫� 鐢熸垚 ERP 閿�鍞鍗曞苟瀹℃壒 鈫� 闇�鐢熶骇琛岃嚜鍔ㄥ缓 MPS 鈫� 鍙戣揣閫氱煡 鈫� 閿�鍞嚭搴�(OQC)鍥炲啓 鈫� 寮�绁�(BPM) 鈫� 鍥炴(鍏堝紑绁ㄦ牎楠�)銆�",
      "steps": [
-       {"stage": "鑾峰", "action": "绾跨储杞寲瀹㈡埛銆佸缓鑱旂郴浜恒�佺珛椤瑰晢鏈�", "roles": ["閿�鍞唴鍕�"]},
+       {"stage": "鑾峰", "action": "绾跨储杞寲瀹㈡埛銆佸缓鑱旂郴浜恒�佺珛椤瑰晢鏈猴紙鍟嗘満鐘舵�佺粍/闃舵閫夊~锛屼笉閫変篃鑳藉缓鍗曪級", "roles": ["閿�鍞唴鍕�"]},
        {"stage": "鎶ヤ环", "action": "鍟嗘満璧㈠崟鍚庡缓鎶ヤ环鍗�(AI OCR 棰勫~)锛岃浆鍚堝悓", "roles": ["閿�鍞唴鍕�"]},
        {"stage": "绛剧害", "action": "鍚堝悓鎻愪氦 BPM 瀹℃壒(鍙�夋祦绋嬪畾涔�)锛岄�氳繃=20", "roles": ["閿�鍞�", "瀹℃壒浜�"]},
        {"stage": "鎺ュ崟", "action": "鍚堝悓涓�閿敓鎴愰攢鍞鍗�(XSDD)锛岄攢鍞鍗曞啀璧� BPM锛涘鎵归�氳繃鑷姩涓� needProduction 鏄庣粏鍒涘缓 MPS", "roles": ["閿�鍞�", "璁″垝鍛�"]},
diff --git a/docs/project-business/data/modules.json b/docs/project-business/data/modules.json
index dd2e10b..6ae9415 100644
--- a/docs/project-business/data/modules.json
+++ b/docs/project-business/data/modules.json
@@ -11,7 +11,7 @@
     {"key": "crm", "name": "閿�鍞鐞嗭紙瀹㈡埛鍏崇郴锛�", "color": "#4f9cff", "tag": "CRM", "flow": "sales",
      "positioning": "閿�鍞墠绔細浠庣嚎绱㈠埌鍥炴鐨勫鎴风粡钀�",
      "problem": "瀹㈡埛璧勪骇娌夋穩銆佸晢鏈鸿浆鍖栥�佸悎鍚屽鎵逛笌寮�绁ㄥ洖娆剧鎺�",
-     "features": ["绾跨储杞寲瀹㈡埛", "鍏捣姹犱笌棰嗗彇涓婇檺", "鑱旂郴浜�", "鍟嗘満鑷畾涔夐樁娈�", "璺熻繘璁板綍", "鎶ヤ环鍗�(AI OCR)", "鍚堝悓(BPM瀹℃壒鈫掔敓鎴愰攢鍞鍗�)", "寮�绁�(BPM)鈫掑洖娆�(鍏堝紑绁ㄦ牎楠�)", "鍥炴璁″垝", "閿�鍞洰鏍�", "鏁版嵁鏉冮檺涓夌骇(璐熻矗浜�/鍙/璇诲啓)"],
+     "features": ["绾跨储杞寲瀹㈡埛", "鍏捣姹犱笌棰嗗彇涓婇檺", "鑱旂郴浜�", "鍟嗘満鑷畾涔夐樁娈�(鐘舵�佺粍閫夊~)", "璺熻繘璁板綍", "鎶ヤ环鍗�(AI OCR)", "鍚堝悓(BPM瀹℃壒鈫掔敓鎴愰攢鍞鍗�)", "寮�绁�(BPM)鈫掑洖娆�(鍏堝紑绁ㄦ牎楠�)", "鍥炴璁″垝", "閿�鍞洰鏍�", "鏁版嵁鏉冮檺涓夌骇(璐熻矗浜�/鍙/璇诲啓)"],
      "objects": ["绾跨储", "瀹㈡埛", "鑱旂郴浜�", "鍟嗘満", "鎶ヤ环鍗�", "鍚堝悓", "鍙戠エ", "鍥炴", "閿�鍞洰鏍�"],
      "roles": ["閿�鍞唴鍕�", "閿�鍞粡鐞�", "璐㈠姟(寮�绁ㄥ洖娆�)"],
      "upstream": ["涓绘暟鎹�(鐗╂枡)"], "downstream": ["杩涢攢瀛�(閿�鍞鍗�)", "鍞悗(瀹㈡埛)", "AI(鎶ヤ环OCR)"],
diff --git a/docs/project-business/data/objects.json b/docs/project-business/data/objects.json
index d7544d7..80c1910 100644
--- a/docs/project-business/data/objects.json
+++ b/docs/project-business/data/objects.json
@@ -5,7 +5,7 @@
     {"name": "瀹㈡埛", "module": "閿�鍞鐞�", "table": "crm_customer", "doc": "瀹㈡埛涓绘。锛屽叕娴锋睜/閿佸畾/鎴愪氦鐘舵�侊紝璐熻矗浜烘暟鎹潈闄�", "upstream": ["绾跨储"], "downstream": ["鑱旂郴浜�", "鍟嗘満", "鎶ヤ环鍗�", "鍚堝悓", "鍞悗宸ュ崟", "鏀舵鍗�"], "keywords": "瀹㈡埛 customer 鍏捣"},
     {"name": "绾跨储", "module": "閿�鍞鐞�", "table": "crm_clue", "doc": "鍘熷閿�鍞嚎绱紝浠呬竴娆¤浆鍖栦负瀹㈡埛", "upstream": [], "downstream": ["瀹㈡埛"], "keywords": "绾跨储 clue"},
     {"name": "鑱旂郴浜�", "module": "閿�鍞鐞�", "table": "crm_contact", "doc": "瀹㈡埛涓嬭仈绯讳汉锛屼笌鍟嗘満澶氬澶�", "upstream": ["瀹㈡埛"], "downstream": ["鍟嗘満"], "keywords": "鑱旂郴浜� contact"},
-    {"name": "鍟嗘満", "module": "閿�鍞鐞�", "table": "crm_business", "doc": "閿�鍞満浼氾紝DB 閰嶇疆寮忛樁娈垫帹杩涳紝缁撴潫鎬�: 璧�/杈�/鏃犳晥", "upstream": ["瀹㈡埛"], "downstream": ["鎶ヤ环鍗�", "鍚堝悓"], "keywords": "鍟嗘満 business 璧㈠崟 杈撳崟 闃舵"},
+    {"name": "鍟嗘満", "module": "閿�鍞鐞�", "table": "crm_business", "doc": "閿�鍞満浼氾紝DB 閰嶇疆寮忛樁娈垫帹杩涳紙鍟嗘満鐘舵�佺粍/闃舵涓洪�夊~锛氫笉閫夌姸鎬佺粍涔熻兘寤哄崟锛屾鏃舵棤榛樿闃舵銆佷笉鍙彉鏇撮樁娈点�佷笉鍙備笌鐘舵�佺粍缁熻锛夛紝缁撴潫鎬�: 璧�/杈�/鏃犳晥", "upstream": ["瀹㈡埛"], "downstream": ["鎶ヤ环鍗�", "鍚堝悓"], "keywords": "鍟嗘満 business 璧㈠崟 杈撳崟 闃舵 鐘舵�佺粍"},
     {"name": "鎶ヤ环鍗�", "module": "閿�鍞鐞�", "table": "crm_sale_quotation", "doc": "QT缂栧彿锛岄�� MDM 鐗╂枡鎶ヤ环锛孉I OCR 褰曞叆锛岃崏绋库啋宸茶浆鍚堝悓", "upstream": ["鍟嗘満"], "downstream": ["鍚堝悓"], "keywords": "鎶ヤ环 quotation QT"},
     {"name": "鍚堝悓", "module": "閿�鍞鐞�", "table": "crm_contract", "doc": "HT缂栧彿(鏂板/缂栬緫鍧囧彲鑷畾涔夛紝鐣欑┖鍒欐柊澧炶嚜鍔ㄧ敓鎴愩�佺紪杈戜繚鎸佸師缂栧彿)锛孊PM 瀹℃壒(0鑽夌/10瀹℃壒涓�/20閫氳繃/30椹冲洖/40鍙栨秷/50浣滃簾)锛岄�氳繃鍚庡彲鐢熸垚閿�鍞鍗�", "upstream": ["鎶ヤ环鍗�"], "downstream": ["閿�鍞鍗�", "鍥炴璁″垝", "寮�绁�"], "keywords": "鍚堝悓 contract 瀹℃壒"},
     {"name": "鍙戠エ", "module": "閿�鍞鐞�", "table": "crm_invoice", "doc": "KP缂栧彿锛孊PM 瀹℃壒锛岀疮璁″紑绁ㄢ墹鍚堝悓棰濓紝闄勪欢蹇呬紶", "upstream": ["鍚堝悓"], "downstream": ["鍥炴"], "keywords": "寮�绁� 鍙戠エ invoice"},
diff --git a/docs/project-business/index.html b/docs/project-business/index.html
index 14ddfa6..2e5d350 100644
--- a/docs/project-business/index.html
+++ b/docs/project-business/index.html
@@ -341,7 +341,7 @@
     {"key": "crm", "name": "閿�鍞鐞嗭紙瀹㈡埛鍏崇郴锛�", "color": "#4f9cff", "tag": "CRM", "flow": "sales",
      "positioning": "閿�鍞墠绔細浠庣嚎绱㈠埌鍥炴鐨勫鎴风粡钀�",
      "problem": "瀹㈡埛璧勪骇娌夋穩銆佸晢鏈鸿浆鍖栥�佸悎鍚屽鎵逛笌寮�绁ㄥ洖娆剧鎺�",
-     "features": ["绾跨储杞寲瀹㈡埛", "鍏捣姹犱笌棰嗗彇涓婇檺", "鑱旂郴浜�", "鍟嗘満鑷畾涔夐樁娈�", "璺熻繘璁板綍", "鎶ヤ环鍗�(AI OCR)", "鍚堝悓(BPM瀹℃壒鈫掔敓鎴愰攢鍞鍗�)", "寮�绁�(BPM)鈫掑洖娆�(鍏堝紑绁ㄦ牎楠�)", "鍥炴璁″垝", "閿�鍞洰鏍�", "鏁版嵁鏉冮檺涓夌骇(璐熻矗浜�/鍙/璇诲啓)"],
+     "features": ["绾跨储杞寲瀹㈡埛", "鍏捣姹犱笌棰嗗彇涓婇檺", "鑱旂郴浜�", "鍟嗘満鑷畾涔夐樁娈�(鐘舵�佺粍閫夊~)", "璺熻繘璁板綍", "鎶ヤ环鍗�(AI OCR)", "鍚堝悓(BPM瀹℃壒鈫掔敓鎴愰攢鍞鍗�)", "寮�绁�(BPM)鈫掑洖娆�(鍏堝紑绁ㄦ牎楠�)", "鍥炴璁″垝", "閿�鍞洰鏍�", "鏁版嵁鏉冮檺涓夌骇(璐熻矗浜�/鍙/璇诲啓)"],
      "objects": ["绾跨储", "瀹㈡埛", "鑱旂郴浜�", "鍟嗘満", "鎶ヤ环鍗�", "鍚堝悓", "鍙戠エ", "鍥炴", "閿�鍞洰鏍�"],
      "roles": ["閿�鍞唴鍕�", "閿�鍞粡鐞�", "璐㈠姟(寮�绁ㄥ洖娆�)"],
      "upstream": ["涓绘暟鎹�(鐗╂枡)"], "downstream": ["杩涢攢瀛�(閿�鍞鍗�)", "鍞悗(瀹㈡埛)", "AI(鎶ヤ环OCR)"],
@@ -440,7 +440,7 @@
     {"name": "瀹㈡埛", "module": "閿�鍞鐞�", "table": "crm_customer", "doc": "瀹㈡埛涓绘。锛屽叕娴锋睜/閿佸畾/鎴愪氦鐘舵�侊紝璐熻矗浜烘暟鎹潈闄�", "upstream": ["绾跨储"], "downstream": ["鑱旂郴浜�", "鍟嗘満", "鎶ヤ环鍗�", "鍚堝悓", "鍞悗宸ュ崟", "鏀舵鍗�"], "keywords": "瀹㈡埛 customer 鍏捣"},
     {"name": "绾跨储", "module": "閿�鍞鐞�", "table": "crm_clue", "doc": "鍘熷閿�鍞嚎绱紝浠呬竴娆¤浆鍖栦负瀹㈡埛", "upstream": [], "downstream": ["瀹㈡埛"], "keywords": "绾跨储 clue"},
     {"name": "鑱旂郴浜�", "module": "閿�鍞鐞�", "table": "crm_contact", "doc": "瀹㈡埛涓嬭仈绯讳汉锛屼笌鍟嗘満澶氬澶�", "upstream": ["瀹㈡埛"], "downstream": ["鍟嗘満"], "keywords": "鑱旂郴浜� contact"},
-    {"name": "鍟嗘満", "module": "閿�鍞鐞�", "table": "crm_business", "doc": "閿�鍞満浼氾紝DB 閰嶇疆寮忛樁娈垫帹杩涳紝缁撴潫鎬�: 璧�/杈�/鏃犳晥", "upstream": ["瀹㈡埛"], "downstream": ["鎶ヤ环鍗�", "鍚堝悓"], "keywords": "鍟嗘満 business 璧㈠崟 杈撳崟 闃舵"},
+    {"name": "鍟嗘満", "module": "閿�鍞鐞�", "table": "crm_business", "doc": "閿�鍞満浼氾紝DB 閰嶇疆寮忛樁娈垫帹杩涳紙鍟嗘満鐘舵�佺粍/闃舵涓洪�夊~锛氫笉閫夌姸鎬佺粍涔熻兘寤哄崟锛屾鏃舵棤榛樿闃舵銆佷笉鍙彉鏇撮樁娈点�佷笉鍙備笌鐘舵�佺粍缁熻锛夛紝缁撴潫鎬�: 璧�/杈�/鏃犳晥", "upstream": ["瀹㈡埛"], "downstream": ["鎶ヤ环鍗�", "鍚堝悓"], "keywords": "鍟嗘満 business 璧㈠崟 杈撳崟 闃舵 鐘舵�佺粍"},
     {"name": "鎶ヤ环鍗�", "module": "閿�鍞鐞�", "table": "crm_sale_quotation", "doc": "QT缂栧彿锛岄�� MDM 鐗╂枡鎶ヤ环锛孉I OCR 褰曞叆锛岃崏绋库啋宸茶浆鍚堝悓", "upstream": ["鍟嗘満"], "downstream": ["鍚堝悓"], "keywords": "鎶ヤ环 quotation QT"},
     {"name": "鍚堝悓", "module": "閿�鍞鐞�", "table": "crm_contract", "doc": "HT缂栧彿(鏂板/缂栬緫鍧囧彲鑷畾涔夛紝鐣欑┖鍒欐柊澧炶嚜鍔ㄧ敓鎴愩�佺紪杈戜繚鎸佸師缂栧彿)锛孊PM 瀹℃壒(0鑽夌/10瀹℃壒涓�/20閫氳繃/30椹冲洖/40鍙栨秷/50浣滃簾)锛岄�氳繃鍚庡彲鐢熸垚閿�鍞鍗�", "upstream": ["鎶ヤ环鍗�"], "downstream": ["閿�鍞鍗�", "鍥炴璁″垝", "寮�绁�"], "keywords": "鍚堝悓 contract 瀹℃壒"},
     {"name": "鍙戠エ", "module": "閿�鍞鐞�", "table": "crm_invoice", "doc": "KP缂栧彿锛孊PM 瀹℃壒锛岀疮璁″紑绁ㄢ墹鍚堝悓棰濓紝闄勪欢蹇呬紶", "upstream": ["鍚堝悓"], "downstream": ["鍥炴"], "keywords": "寮�绁� 鍙戠エ invoice"},
@@ -490,7 +490,7 @@
     {"id": "sales", "name": "閿�鍞祦绋�", "mermaid": "mermaid/02-sales-flow.mmd", "color": "#4f9cff",
      "summary": "绾跨储杞寲瀹㈡埛 鈫� 鍟嗘満鎺ㄨ繘 鈫� 鎶ヤ环(鍙疉I璇嗗埆) 鈫� 鍚堝悓 BPM 瀹℃壒 鈫� 鐢熸垚 ERP 閿�鍞鍗曞苟瀹℃壒 鈫� 闇�鐢熶骇琛岃嚜鍔ㄥ缓 MPS 鈫� 鍙戣揣閫氱煡 鈫� 閿�鍞嚭搴�(OQC)鍥炲啓 鈫� 寮�绁�(BPM) 鈫� 鍥炴(鍏堝紑绁ㄦ牎楠�)銆�",
      "steps": [
-       {"stage": "鑾峰", "action": "绾跨储杞寲瀹㈡埛銆佸缓鑱旂郴浜恒�佺珛椤瑰晢鏈�", "roles": ["閿�鍞唴鍕�"]},
+       {"stage": "鑾峰", "action": "绾跨储杞寲瀹㈡埛銆佸缓鑱旂郴浜恒�佺珛椤瑰晢鏈猴紙鍟嗘満鐘舵�佺粍/闃舵閫夊~锛屼笉閫変篃鑳藉缓鍗曪級", "roles": ["閿�鍞唴鍕�"]},
        {"stage": "鎶ヤ环", "action": "鍟嗘満璧㈠崟鍚庡缓鎶ヤ环鍗�(AI OCR 棰勫~)锛岃浆鍚堝悓", "roles": ["閿�鍞唴鍕�"]},
        {"stage": "绛剧害", "action": "鍚堝悓鎻愪氦 BPM 瀹℃壒(鍙�夋祦绋嬪畾涔�)锛岄�氳繃=20", "roles": ["閿�鍞�", "瀹℃壒浜�"]},
        {"stage": "鎺ュ崟", "action": "鍚堝悓涓�閿敓鎴愰攢鍞鍗�(XSDD)锛岄攢鍞鍗曞啀璧� BPM锛涘鎵归�氳繃鑷姩涓� needProduction 鏄庣粏鍒涘缓 MPS", "roles": ["閿�鍞�", "璁″垝鍛�"]},
diff --git a/docs/project-business/mermaid/02-sales-flow.mmd b/docs/project-business/mermaid/02-sales-flow.mmd
index 8424ee3..727b302 100644
--- a/docs/project-business/mermaid/02-sales-flow.mmd
+++ b/docs/project-business/mermaid/02-sales-flow.mmd
@@ -2,7 +2,7 @@
   A[绾跨储 crm_clue] -->|杞寲路浠呬竴娆 B[瀹㈡埛 crm_customer]
   B --> C[鑱旂郴浜� crm_contact]
   B --> D[鍟嗘満 crm_business]
-  D -->|鑷畾涔夐樁娈垫帹杩泑 E{鍟嗘満缁撴潫}
+  D -->|鑷畾涔夐樁娈垫帹杩�(鐘舵�佺粍閫夊~)| E{鍟嗘満缁撴潫}
   E -->|璧㈠崟| F[鎶ヤ环鍗� QT路鑽夌0鈫掑凡杞悎鍚�10]
   E -->|杈撳崟鎴栨棤鏁坾 X[缁撴潫]
   F -->|杞悎鍚屄峰甫鍏ュ鎴蜂骇鍝佹姌鎵 G[鍚堝悓 HT路鑽夌0鈫掑鎵逛腑10]
diff --git a/docs/sql/config_export_all_20260904.sql b/docs/sql/config_export_all_20260904.sql
index d9bc193..21b4863 100644
--- a/docs/sql/config_export_all_20260904.sql
+++ b/docs/sql/config_export_all_20260904.sql
@@ -4060,8 +4060,8 @@
   `contact_last_time` datetime DEFAULT NULL COMMENT '鏈�鍚庤窡杩涙椂闂�',
   `contact_next_time` datetime DEFAULT NULL COMMENT '涓嬫鑱旂郴鏃堕棿',
   `owner_user_id` bigint DEFAULT NULL COMMENT '璐熻矗浜虹殑鐢ㄦ埛缂栧彿',
-  `status_type_id` bigint NOT NULL COMMENT '鍟嗘満鐘舵�佺粍缂栧彿',
-  `status_id` bigint NOT NULL COMMENT '鍟嗘満鐘舵�佺紪鍙�',
+  `status_type_id` bigint DEFAULT NULL COMMENT '鍟嗘満鐘舵�佺粍缂栧彿',
+  `status_id` bigint DEFAULT NULL COMMENT '鍟嗘満鐘舵�佺紪鍙�',
   `end_status` int DEFAULT NULL COMMENT '缁撴潫鐘舵��',
   `end_remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '缁撴潫鏃剁殑澶囨敞',
   `deal_time` datetime DEFAULT NULL COMMENT '棰勮鎴愪氦鏃ユ湡',
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java
index b910cf0..856b502 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java
@@ -52,15 +52,15 @@
     @ExcelProperty("璐熻矗浜洪儴闂�")
     private String ownerUserDeptName;
 
-    @Schema(description = "鍟嗘満鐘舵�佺粍缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "25714")
+    @Schema(description = "鍟嗘満鐘舵�佺粍缂栧彿锛堟湭璁剧疆鐘舵�佺粍鏃朵负绌猴級", example = "25714")
     private Long statusTypeId;
-    @Schema(description = "鍟嗘満鐘剁粍鍚嶅瓧", requiredMode = Schema.RequiredMode.REQUIRED, example = "杩涜涓�")
+    @Schema(description = "鍟嗘満鐘剁粍鍚嶅瓧", example = "杩涜涓�")
     @ExcelProperty("鍟嗘満鐘舵�佺粍")
     private String statusTypeName;
 
-    @Schema(description = "鍟嗘満鐘舵�佺紪鍙�", requiredMode = Schema.RequiredMode.REQUIRED, example = "30320")
+    @Schema(description = "鍟嗘満鐘舵�佺紪鍙凤紙鏈缃姸鎬佺粍鏃朵负绌猴級", example = "30320")
     private Long statusId;
-    @Schema(description = "鐘舵�佸悕绉�", requiredMode = Schema.RequiredMode.REQUIRED, example = "璺熻繘涓�")
+    @Schema(description = "鐘舵�佸悕绉�", example = "璺熻繘涓�")
     @ExcelProperty("鍟嗘満鐘舵��")
     private String statusName;
 
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessSaveReqVO.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessSaveReqVO.java
index 53059be..6246cb1 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessSaveReqVO.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessSaveReqVO.java
@@ -43,9 +43,8 @@
     @DiffLogField(name = "璐熻矗浜�", function = SysAdminUserParseFunction.NAME)
     private Long ownerUserId;
 
-    @Schema(description = "鍟嗘満鐘舵�佺粍缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "25714")
+    @Schema(description = "鍟嗘満鐘舵�佺粍缂栧彿锛堥潪蹇呭~锛氭湭閫夋嫨鏃朵笉甯﹂粯璁ら樁娈碉紝涔熶笉鍙備笌鐘舵�佺粍缁熻锛�", example = "25714")
     @DiffLogField(name = "鍟嗘満鐘舵�佺粍")
-    @NotNull(message = "鍟嗘満鐘舵�佺粍涓嶈兘涓虹┖")
     private Long statusTypeId;
 
     @Schema(description = "棰勮鎴愪氦鏃ユ湡")
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
index c133f54..0314c01 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
@@ -32,6 +32,7 @@
     ErrorCode BUSINESS_UPDATE_STATUS_FAIL_END_STATUS = new ErrorCode(1_020_002_002, "鏇存柊鍟嗘満鐘舵�佸け璐ワ紝鍘熷洜锛氬凡缁忔槸缁撴潫鐘舵��");
     ErrorCode BUSINESS_UPDATE_STATUS_FAIL_STATUS_EQUALS = new ErrorCode(1_020_002_003, "鏇存柊鍟嗘満鐘舵�佸け璐ワ紝鍘熷洜锛氬凡缁忔槸璇ョ姸鎬�");
     ErrorCode BUSINESS_CONTACT_CUSTOMER_NOT_MATCH = new ErrorCode(1_020_002_004, "鍟嗘満鍏宠仈鐨勮仈绯讳汉涓嶅睘浜庤瀹㈡埛");
+    ErrorCode BUSINESS_UPDATE_STATUS_FAIL_NO_STATUS_TYPE = new ErrorCode(1_020_002_005, "鍟嗘満銆恵}銆戞湭璁剧疆銆屽晢鏈虹姸鎬佺粍銆嶏紝鏃犳硶鍙樻洿銆屽晢鏈洪樁娈点�嶃�傝鍦ㄦ柊澧炲晢鏈烘椂閫夋嫨銆屽晢鏈虹姸鎬佺粍銆嶏紙闇�鍏堝湪銆愯惀閿�绠$悊 - 绯荤粺閰嶇疆 - 鍟嗘満鐘舵�侀厤缃�戜腑鍒涘缓鐘舵�佺粍锛夛紝鎴栨敼涓哄彧鍙樻洿銆岀粨鏉熺姸鎬併��");
 
     // ========== 鑱旂郴浜虹鐞� 1-020-003-000 ==========
     ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_020_003_000, "鑱旂郴浜轰笉瀛樺湪");
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
index 65c09cf..dad93f7 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
@@ -100,7 +100,11 @@
 
         // 2.1 鎻掑叆鍟嗘満
         CrmBusinessDO business = BeanUtils.toBean(createReqVO, CrmBusinessDO.class);
-        business.setStatusId(businessStatusService.getBusinessStatusListByTypeId(createReqVO.getStatusTypeId()).get(0).getId()); // 榛樿鐘舵��
+        // 鍟嗘満鐘舵�佺粍涓洪�夊~锛氭湭閫夋嫨鏃朵笉璁剧疆榛樿闃舵锛屼篃涓嶅弬涓庛�屽晢鏈虹姸鎬佺粍銆嶇淮搴︾殑缁熻
+        if (createReqVO.getStatusTypeId() != null) {
+            List<CrmBusinessStatusDO> statusList = businessStatusService.getBusinessStatusListByTypeId(createReqVO.getStatusTypeId());
+            business.setStatusId(CollUtil.isNotEmpty(statusList) ? statusList.get(0).getId() : null); // 榛樿鐘舵��
+        }
         calculateTotalPrice(business, businessProducts);
         businessMapper.insert(business);
         // 2.2 鎻掑叆鍟嗘満鍏宠仈鍟嗗搧
@@ -297,6 +301,10 @@
         // 1.3 鏍¢獙鍟嗘満鐘舵��
         CrmBusinessStatusDO status = null;
         if (reqVO.getStatusId() != null) {
+            // 鍟嗘満鐘舵�佺粍涓洪�夊~锛氭湭璁剧疆鐘舵�佺粍鐨勫晢鏈烘病鏈夊彲閫夐樁娈碉紝涓嶅厑璁稿彉鏇淬�屽晢鏈洪樁娈点��
+            if (business.getStatusTypeId() == null) {
+                throw exception(BUSINESS_UPDATE_STATUS_FAIL_NO_STATUS_TYPE, business.getName());
+            }
             status = businessStatusService.validateBusinessStatus(business.getStatusTypeId(), reqVO.getStatusId());
         }
         // 1.4 鏍¢獙鏄笉鏄姸鎬佹病鍙樻洿
@@ -312,7 +320,7 @@
         // 3. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
         LogRecordContext.putVariable("businessName", business.getName());
         LogRecordContext.putVariable("oldStatusName", getBusinessStatusName(business.getEndStatus(),
-                businessStatusService.getBusinessStatus(business.getStatusId())));
+                business.getStatusId() != null ? businessStatusService.getBusinessStatus(business.getStatusId()) : null));
         LogRecordContext.putVariable("newStatusName", getBusinessStatusName(reqVO.getEndStatus(), status));
     }
 

--
Gitblit v1.9.3