From c2cf0a2b83b1890cfb5a3aea1a8f95b83ef29f4a Mon Sep 17 00:00:00 2001
From: shicf <shi_chongfu@163.com>
Date: 星期六, 31 五月 2025 10:48:17 +0800
Subject: [PATCH] 添加允许get请求的地址配置

---
 doc/系统设计 | 1016 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,016 insertions(+), 0 deletions(-)

diff --git "a/doc/\347\263\273\347\273\237\350\256\276\350\256\241" "b/doc/\347\263\273\347\273\237\350\256\276\350\256\241"
new file mode 100644
index 0000000..625af50
--- /dev/null
+++ "b/doc/\347\263\273\347\273\237\350\256\276\350\256\241"
@@ -0,0 +1,1016 @@
+锘跨増鏈帶鍒讹細
+    褰撳墠浜у搧鐗堟湰1.0.0
+    琛嶇敓椤圭洰鐗堟湰
+        1.1.0       picc锛堢坏闃充汉淇濓級
+        1.2.0       xn
+    璇︾粏瑙i噴
+        锛�1锛夌洰鍓嶇殑鐗堟湰鍙峰叡鏈�3绾э紝鏍囧噯鐗堟寜鐓�1.0.0
+        锛�2锛夌涓�浣嶄綔涓轰骇鍝佸ぇ鐗堟湰
+        锛�3锛夌浜屼綅浣滀负瀵瑰簲椤圭洰鐨勭増鏈�
+        锛�4锛夌涓変綅浣滀负灏忕増鏈崌绾�
+        锛�5锛変緥濡傦紝褰撳墠鐗堟湰涓�1.0.0锛岀敱璇ョ増鏈鐢熺殑A椤圭洰锛屽垯A椤圭洰鐗堟湰涓�1.1.0锛涚户缁鐢熺殑B椤圭洰锛岀増鏈负1.2.0锛涜嫢鏄疉椤圭洰鍗囩骇锛屽垯鍙互灏嗙増鏈洿鏂颁负1.1.1銆�
+        锛�6锛変絾鍑¢」鐩崰鐢ㄤ箣鍚庯紝璇ユ暟瀛楀氨涓�鐩村綊璇ラ」鐩娇鐢�
+        锛�7锛夊綋浜у搧鐗堟湰鍗囩骇鍒�2.0.0涔嬪悗锛岃鐢熺殑椤圭洰鐗堟湰鍒欎负2.x.0
+
+1.鏁版嵁婧�
+	蹇呴』閰嶇疆榛樿鐨勬暟鎹簮锛屽悕绉板繀椤讳负default,瑙乤pplication.properties
+	sourceName=default
+2.琛ㄨ璁�
+	id瀛楁: 绫诲瀷=bigint 锛岄暱搴�11    
+	uuid瀛楁銆乽uid寮曠敤瀛楁锛氾紝闀垮害閮芥槸80
+	瀛楁绫诲瀷闄や簡閫氱敤String...澶栵紝杩樻湁涓�涓被鍨�:parentuuid,鐢ㄦ瀛楁琛ㄧず涓诲瓙琛ㄧ殑鍏崇郴锛�
+	鍚屾椂杩樺繀椤婚厤鍏宠仈鐨勭埗琛ㄥ悕绉帮紝鍚屼竴涓叧鑱旂埗琛紝鍙兘閰嶄竴涓猵arentuuid绫诲瀷鐨勫瓧娈碉紝濡傛灉鏄櫘閫氫富澶栭敭鍏宠仈锛屽氨涓嶇敤parentuuid
+	姣斿锛歜utton琛� 鐨勫瓧娈靛畾涔夛紝鐖惰〃function
+	瀛楁鍚�                                             瀛楁绫诲瀷                           鍏宠仈涓昏〃
+	id
+	uuid
+	......
+	function_uuid      parentuuid     mrbase_sys_datamodel_table(淇濆瓨琛ㄧ殑uuid锛屾樉绀鸿〃鐨勫悕绉帮紝榛樿鍏宠仈涓昏〃鐨剈uid)
+	瀛楁鐨勯暱搴︿负涓嬫媺閫夋嫨锛屾牴鎹笉鍚岀殑鏁版嵁绫诲瀷锛屽畾涔変笉鍚岀殑闀垮害閫夐」锛屽锛�10銆�20銆�50銆�100绛�
+	
+	瀛楁绫诲瀷锛�
+	闄ゆ爣鍑嗙殑string datetime int double ,杩樻湁鐗规畩锛歱arentuuid(涓诲瓙琛ㄥ叧绯伙紝璁板綍鐖惰〃uuid)銆乧ode(缂栫爜瀛楁 000-000-002)銆乻erialNumber(GXD201209020001)
+	瀛楁绫诲瀷=parentuuid鏃讹紝蹇呴』field_relation_table瀛楁濉啓鐖惰〃鐨剈uid鍚﹀垯涔熶笉鑳戒綔涓轰富瀛愯〃淇濆瓨
+	
+	鎵�鏈夌被鍨嬶細string銆乮nt銆乶umber(灏忔暟)銆乨atetime銆乸arentuuid銆乧ode銆乻erialNumber銆乮dcard銆乽rl銆乮p銆乵ac銆乪mail銆乽serid銆乷rgUuid銆乫ile銆乫lowStatus銆乼able_name
+	
+3.缂撳瓨鏁版嵁
+ * 	缂撳瓨閰嶇疆琛細SYS_CACHE_CONFIG
+ *	 瀛楁锛欼D銆乽uid銆乧ache_name銆乀ABLENAME(S200)銆丆ACHEFIELD(鍒嗙骇缂撳瓨瀛楁锛岄�楀彿鍒嗛殧),FIELDS(S4000,瀛楁鍚嶏紝閫楀彿鍒嗛殧)銆乫ilter(S4000)銆佸娉ㄨ鏄�....
+ *  cache_name:鍞竴
+ * 	甯哥敤鏁版嵁銆佸熀纭�鏁版嵁缂撳瓨
+ * 	閫氱敤缂撳瓨锛氶�氳繃閰嶇疆琛ㄣ�佸瓧娈碉紙澶氫釜锛夈�佹煡璇㈡潯浠舵潵鎸囧畾瑕佺紦瀛樼殑鏁版嵁鍐呭锛岄噰鐢∕ap灏佽锛宬ey=cache_name锛屽��=DataTableEntity
+ * 	鐗规畩缂撳瓨锛氬崟鐙啓鏂规硶鍔犺浇鏁版嵁骞跺鐞嗘暟鎹紝灏佽鍚岄�氱敤缂撳瓨涓�鏍�
+ * 	鏀寔鍒嗙粍缂撳瓨锛屾棤闄愮骇,鍒嗙粍瀛楁蹇呴』鍦ㄧ紦瀛樺瓧娈甸噷闈�
+ 	鏀寔鍔犺浇瀛愯〃鏁版嵁
+ * 	缂撳瓨鏁版嵁锛屽瓨鍦ㄦ暟鎹笉涓�鑷撮棶棰橈紝褰撲袱涓繘绋嬪悓鏃跺涓�涓〃鐨勭紦瀛樿繘琛岃鍜屽啓鏃�---------------
+ *	鏂板銆佷慨鏀广�佸垹闄ょ紦瀛樿〃鏃讹紝瑕佹洿鏂扮紦瀛�-------------------------------------
+ *	 鍒濆鏁版嵁
+	table_name=mrbase_sys_datamodel_table
+	table_name=mrbase_sys_datamodel_field |  cache_fields=*  |  group_field=table_uuid
+	table_name=mrbase_sys_datamodel_field        |  cache_fields=*  |  filter=field_type='parentUuid'
+	table_name=mrbase_function_permission |  cache_fields=role_uuid,function_uuid,button_uuid | group_field=role_uuid
+	
+*缂撳瓨鍒锋柊锛屾暟鎹柊澧炪�佷慨鏀广�佸垹闄ゆ椂閮戒細鍒锋柊瀵瑰簲鐨勮琛ㄧ殑鎵�鏈夌紦瀛橀厤缃紝杩樺彲浠ヨ皟鑷畾涔夌殑浠g爜杩涜鍒锋柊锛坆ean_name銆乥ean_method(String uuid) 鍙傛暟鏄搷浣滄暟鎹殑uuid ,bean_method() 鍚姩鏃朵細璋冩鏂规硶锛屽繀椤诲畾涔変袱涓柟娉�       锛�
+*缂撳瓨鐨勪娇鐢ㄦ煡璇㈡柟娉曪細
+	鏈夊垎缁勶紝鍒嗙粍瀛楁锛屽搴斿�� 
+	 瀵瑰簲缂撳瓨涓搴旂殑鍒嗙粍瀛楁锛屾暣涓弬鏁颁负杩欙紝琛ㄧず娌℃湁鍒嗙粍锛屽彧鑳藉悗闈笉涓虹┖锛屼笉鑳藉墠闈负绌猴紝渚嬪锛�
+	缂撳瓨鐨勫垎缁勫瓧娈碉細field1銆乫ield2銆乫ield3 ,鑾峰彇鏃跺弬鏁板�硷紝鍙兘涓夌鎯呭喌锛歿value1,null,null}銆亄value1,value2,null}銆亄value1,value2,value2},
+	涓嶈兘鍑虹幇 {value1,null,value3} 銆亄null,null,value3}  銆亄null,value2,value3} 绛夋儏鍐�
+	濡傦細
+	DataTableEntity dt=DataPoolCacheImpl.getInstance().getCacheData("鎵�鏈夊瓧娈典俊鎭苟鎸夎〃鍒嗙粍",new String[] {tableUuid});
+	鏈垎缁勶細
+	DataTableEntity table=DataPoolCacheImpl.getInstance().getCacheData("鎵�鏈夎〃淇℃伅");
+
+	锛�1锛塺edis宸ュ叿绫�
+	閰嶇疆鏂囦欢锛歭x-base-server\lx-base-server-cache\src\main\resource\cache.properties
+	绫伙細com.lx.base.cache.util.RedisUtil
+	浠嬬粛锛�
+	    鍏ㄩ儴涓洪潤鎬佹柟娉曪紝鏃犻渶娉ㄥ叆锛屽寘鍚簡瀵筴ey浠ュ強5绉嶅熀鏈被鍨嬶紙string,hash,list,set,zset锛夌殑鎿嶄綔锛屾柟娉曞悕绉扮粡杩囩畝鍖栧拰褰掍竴鍖栵紝涓庡師鐢熷懡浠ょ◢鏈変笉鍚岋紱
+	    鎸夌収key,string,hash,list,set,zset鐨勯『搴忔帓鍒楁柟娉曪紝涓嶅悓绫诲瀷闂村瓨鍦ㄦ敞閲婂垎鍓诧紝鑻ユ槸鍚庣画鏈夋柊澧烇紝搴斿綋鍐欏湪瀵瑰簲鐨勮寖鍥村唴锛�
+	    鏂板/淇敼绫荤殑鏂规硶浠dd/set寮�澶达紝鍚庨潰绱ц窡绫诲瀷锛屾渶鍚庤窡鏂规硶鐗规�э紱
+	    鑾峰彇绫绘柟娉曚互get寮�澶达紝鍚庨潰绱ц窡绫诲瀷锛屾渶鍚庤窡鏂规硶鐗规�э紱锛堢壒娈婄殑锛屾眰鍙栦氦宸苟闆嗗苟瀛樺偍杩斿洖鐨勬槸涓暟锛夛紱
+	    鍒ゅ畾鏄惁瀛樺湪涓篹xists寮�澶达紝鍚庨潰绱ц窡绫诲瀷锛�
+	    鍒犻櫎绫绘柟娉曚互del寮�澶达紝鍚庨潰绱ц窡绫诲瀷锛屾渶鍚庤窡鏂规硶鐗规�э紱
+	    鐩稿鐗规畩鐨勫懡鍚�-clearOutTime锛堢Щ闄よ秴鏃舵椂闂达級锛宺eplaceListAimValue锛坙ist-鏇挎崲鎸囧畾涓嬫爣鐨勫�硷級锛宮oveSet锛坰et-绉诲姩鍊煎埌鎸囧畾key鐨剆et涓級
+	娴嬭瘯绫伙細com.lx.base.cache.TestRedisUtil
+	浠嬬粛锛�
+	    闄ょ涓�涓负鑾峰彇鏁版嵁鏂规硶澶栵紝鍚庨潰鍧囦负鍗曞厓娴嬭瘯锛屽彲浠ュ湪杩欓噷鎵惧埌瀵瑰簲鐨勭ず渚嬩唬鐮侊紱
+	    闄ら儴鍒嗙被杞崲鐨勯噸杞芥柟娉曟病鏈夊啓鍗曞厓娴嬭瘯锛屾湁浜涢噸杞界殑鏂规硶鏀惧湪涓�涓崟鍏冩祴璇曞唴锛屽熀纭�鐨勮幏鍙栫被鏂规硶娌℃湁鍗曠嫭鍐欏崟鍏冩祴璇曪紱
+	    姣忎竴涓崟鍏冩祴璇曞潎宸查�氳繃锛屼絾鏄竴娆℃�у叏寮�鏃讹紝鏈湴鍗″湪绾︿竴鍗婂锛�
+	    鍗曞厓娴嬭瘯鐨勬柟娉曞悕涓簍est + 瀹為檯鏂规硶鍚嶏紙棣栧瓧姣嶈浆澶у啓锛夛紱
+	    闄edisUtil鏂板鏂规硶鎴栬�呮祴璇曟柟娉曞瓨鍦ㄩ敊璇紝灏介噺涓嶆洿鏂拌绫伙紝鏇存柊鏃讹紝闇�瑕佹敞閲婃墍鏈夊崟鍏冩祴璇曟柟娉曪紱
+
+4.json鏁版嵁涓紝瀛楁~type~锛屼笉鏄瓧娈靛悕锛屾槸瀛愯〃鏁版嵁鍦ㄤ慨鏀规椂鍊欑殑鎿嶄綔绫诲瀷锛屾柊澧炪�佷慨鏀广�佸垹闄�
+	鏂板锛寀uid娌℃湁鍊硷紝 鍙兘涓嶅啓~type~=xxx
+	淇敼,uuid鏈夊�硷紝 鍙兘涓嶅啓~type~=xxx
+	鍙湁鍒犻櫎鏃剁敤杩欎釜瀛楁鏉ュ尯鍒�,鍗硚type~=del
+	淇敼涓诲瓙琛ㄦ暟鎹� 涓昏〃蹇呴』鏈塽uid瀛楁锛屽瓙琛ㄦ暟鎹腑涓変釜绉嶆儏鍐碉細鏂板 ~type~="",uuid="",淇敼锛殈type~="",uuid="涓嶄负绌�"锛屽垹闄わ細~type~="del",uuid="涓嶄负绌�"
+	瀛愯〃鍒楁暟瑕佷竴鑷�
+	
+5.鎵�鏈夊疄浣撶被鍨嬶紝閮藉繀椤绘湁涓瓧娈� table_name锛屽瓨琛ㄥ悕绉� ,鍙互瀹炰綋绫讳腑瀹氫箟鎴愬父閲�
+
+6.API璇锋眰鍙傛暟
+	API璇锋眰json鐨勫弬鏁板悕绉帮細formData锛�   Token鍙傛暟灏佽鍦╦son涓紝鍚嶇О锛歛ccessToken
+	RequestParameterEntity 灏佽鎵�鏈夊弬鏁拌姹傦紝璇︾粏瑙佽绫�
+	Object bean=request.getAttribute("requestPara");
+	String accessToken = null;
+	if(bean !=null)	{	
+		RequestParameterEntity reqp=(RequestParameterEntity)bean;
+		accessToken=reqp.getToken();
+	}
+	-----鑾峰彇琛ㄥ崟鏁版嵁------
+	public FieldSetEntity getFormData() {
+		return formData;
+	}
+
+7.鎵�鏈塩ontroller 蹇呴』缁ф壙  AbstractBaseController
+	淇敼銆佸垹闄� 杩斿洖
+	OK()
+	鐧诲綍杩斿洖
+	OK_login
+	鏂板杩斿洖
+	OK_Add(String uuid)
+	鏌ヨ杩斿洖
+	OK_List(FieldSetEntity fs)
+	OK_List(DataTableEntity dt)
+	
+	閫氱敤閿欒杩斿洖锛� 鏂板銆佷慨鏀广�佸垹闄ゃ�佹煡璇㈠け璐�
+	public String error(String code,String msg )
+
+9.鎵�鏈塻ervice 蹇呴』缁ф壙  AbstractBaseService
+	/**
+	 * 鏁版嵁鏌ヨ ,spring 娉ㄥ叆
+	 */
+	@Autowired
+	public BaseDao baseDao = null;
+	
+10.~table~ 鍙傛暟鍦ㄦ柊澧炪�佷慨鏀规帴鍙f椂蹇呴』鏀惧埌鏁版嵁鐨勫墠闈紝浠ユ鏉ラ鍏堣幏鍙栧埌	
+
+13.楂樼骇鍙傜収涓嬫媺妗嗘帴鍙f暟鎹�
+{
+	"code":200,
+	"~table~":"xxxxx",
+	"data":[{"value_field":"xxxx","view_fields":"xxxx","f1":"xxx","f2":"xxxx","f3":"xxx","code":"xxx"}
+	,{"value_field":"xxxx","view_fields":"xxxx","f1":"xxx","f2":"xxxx","f3":"xxx","code":"xxx"}],
+	"pagesize":20,
+	"cpage":4,
+	"totalCount":343,
+	"status":"success",
+	"msg":"鎴愬姛"
+}
+鏅�氫笅鎷夋鎺ュ彛
+{
+	"code":200,
+	"~table~":"mrbase_sys_dict",
+	"data":[{"dict_value":"xxxx","dict_label":"xxxx"}
+	,{"dict_value":"xxxx","dict_label":"xxxx"}],
+	"pagesize":0,
+	"cpage":0,
+	"totalCount":0,
+	"status":"success",
+	"msg":"鎴愬姛"
+}
+
+14.涓嬫媺鍙傜収閰嶇疆锛屼繚瀛樻椂select_fields蹇呴』澶勭悊鐢熸垚锛寁alue_field+" value_field,"+view_fields+" view_fields "+prompt_fieldxxxxx
+	prompt_fieldxxxxx,鏄敱prompt_field瀛楁澶勭悊鑰屾垚锛屽锛歠ield1,field2,field3 ,澶勭悊鍚庡彉鎴�    ,field1 f1,field2 f2,field3 f3,org_level_code code
+	鏈�鍚巗elect_fields=xxxx value_field,xxxx view_fields,field1 f1,field2 f2,field3 f3,鍏朵腑 value_field銆乿iew_fields銆乫1銆乫2銆乫3 鏄浐瀹氬瓧娈�
+	鍏朵腑filter瀛楁锛屾槸閰嶇疆浜哄憳鎵嬪啓鐨剆ql鏉′欢锛屽瓧绗︿覆涓彲鑳介厤缃姩鎬佸弬鏁帮紝鏍煎紡涓猴細~鍙傛暟鍚嶇О~锛屽墠绔皟鐢ㄦ鍙傜収鏃讹紝涔熷繀椤讳紶瀵瑰簲鐨勫弬鏁板�� 锛屼緥濡傦細
+	閰嶇疆filter: uuid=~cust_uuid~ and name like '%~cust_name~%'
+	鍓嶇鍙傛暟锛歿cust_uuid="sdgeasge",cust_name="涓浗"}
+	
+	filter瀛楁涓繕鍙互閰嶇疆绯荤粺鍙橀噺锛屽锛歩s_used=1 and uuid in (select  language_uuid from mrbase_sys_company_language where org_level_uuid='{{COMPANY_UUID}}') 
+	{{COMPANY_UUID}}:褰撳墠鐧诲綍浜哄憳鐨勫叕鍙窾UID.
+	
+	display_type锛� 1:鍒楄〃  2:鏍戠粨鏋勶紝褰撶瓑浜�2琛ㄧず姝ゅ弬鐓ф暟鎹樉绀烘爲鍨嬶紝鍚屾椂  code_field銆乸arent_code_field 銆乨elay_load瑕佸繀濉紝
+	code_field锛氫笂涓嬬骇鍏崇郴琛ㄤ腑鐨� 缂栫爜瀛楁锛�001锛屾瀛楁涔熷鐞嗗悗鏀惧埌select_fields瀛楁涓幓锛氱敓鎴�   xxxxx  code,姝ゅ墠绔湪鐐瑰嚮涓�涓妭鐐规椂锛屽彇code鐨勫�间紶缁欐帴鍙o紝鎺ヨ繑鍥炲叾涓嬮潰鐨勫瓙鏁版嵁
+	parent_code_field锛氱埗缂栫爜瀛楁锛�001
+	org_filter_field锛氭牴鎹〃涓殑鍏徃瀛楁杩涜鏁版嵁杩囨护锛屽涓互閫楀彿鍒嗛殧
+	usr_filter_field锛氫汉鍛樻暟鎹繃婊ゆ潯浠跺瓧娈碉紝蹇呴』鏄暟鎹簮琛ㄤ腑鐨勪汉鍛樺瓧娈碉紝鍙互澶氫釜锛岄�楀彿鍒嗛殧锛�
+	
+14.1 涓嬫媺鍙傜収(楂樼骇鍙傜収銆佹暟鎹瓧鍏�)鍦ㄥ垪琛ㄤ腑鏄剧ず锛�
+	閰嶇疆mrbase_sys_datamodel_field.field_reference瀛楁锛岄厤鍙傜収鍚嶇О鎴栨暟鎹瓧鍏稿悕绉帮紝濡傛灉鏄暟鎹瓧鍏稿悕绉板姞涔﹀悕鍙锋嫭璧锋潵,濡傦細銆奼ender銆�
+	鍦ㄥ垪琛ㄧ殑鏌ヨ鏂规硶锛屽鍒楄〃鏁版嵁杩涜灏佽涓�娆★細baseDao.loadPromptData(dt);
+
+15.token鍙傛暟  token=xxxxxxxx,鏀惧埌json鏁版嵁涓紝鏁翠釜json浣滀负涓�涓弬鏁� formData={"token"="xxxxxxxx",xxxxxxxxx}
+
+16.鍒涘缓鍗曚綅绠$悊鍛橈紝浣跨敤mrbase_sys_user琛紝is_manamger榛樿涓烘槸
+	鍒涘缓绠$悊鍛樻椂锛屽垎閰嶏紝鍙兘缁欎笅绾х鐞嗗憳鍒嗛厤鑷凡鑼冨洿鍐呯殑鏉冮檺锛屽垵濮嬩竴涓秴绾х鐞嗗憳锛屽垵濮嬩竴涓秴绾х鐞嗗憳瑙掕壊銆傚垎缁欒秴绾х鍛�
+	鍒涘缓鍗曚綅绠$悊鍛橈紝鍙兘鍒涘缓涓嬬骇鍗曚綅鐨勭鐞嗗憳锛屽彲浠ュ叧鑱斿涓笅绾у崟浣嶏紝瀵规瘡涓崟浣嶈繘琛屽崟鐙殑鏉冮檺璁剧疆锛屽繀椤诲厛閫夎鑹叉潈闄愶紝
+	鍔熻兘涓爣璇嗘槸鍚︽槸鍚庡彴绠$悊鍔熻兘 锛岀鐞嗗憳鑷韩鐨勬潈闄愬繀椤绘槸鍚庡彴鍔熻兘锛屼负鏅�氫汉鍛樺垎閰嶆潈闄愭椂锛屽繀椤绘槸闈炲悗鍙扮鐞嗗姛鑳�
+17.鍔熻兘涓庢寜閽產pi鍚堟垚涓�涓紝閲囩敤涓诲瓙琛ㄦ柟寮忔搷浣�
+18.寮�鍙戝姛鑳藉弬鐓ystem宸ョ▼涓殑浠g爜
+19.鑾峰彇application涓殑閰嶇疆鍙傛暟锛屼娇鐢細
+	String path = Global.getSystemConfig("upload.file.path", "d:");
+20.寮�鍙戞ā寮�
+	涓�涓礋璐d竴涓姛鑳芥ā鍧楃殑寮�鍙戯紝鍖呮嫭鎺ュ彛灞傘�佹湇鍔″眰
+20.鍖呭悕瑙勫垯锛屼互com.lx.+妯″潡鍚嶇О+.controller(service銆乪ntity)
+
+21.鍏ㄩ儴鍦╨x__Server涓嬮潰鍒涘缓maven妯″潡锛屼笉鏄痬aven宸ョ▼
+   <groupId>com.lx</groupId>   涓嶇敤鏀�
+    <artifactId>-server</artifactId> 浠ュ紑澶达紝鍚庨潰鏄ā鍧楀悕绉�
+    <version>1.0.0-SNAPSHOT</version> 涓嶇敤鏀�
+22.濡傛灉瑕佸紩鐢╦ar锛屽崟鐙湪pom涓坊鍔犱緷璧栵紝鍐呴儴宸ョ▼ 涔熸槸杩欎箞鐩稿紩
+23.spring bean寮曠敤
+private static MenuService menuService = SpringContextHolder.getBean(MenuService.class);
+
+24.鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+	SystemUser user = SpringMVCContextHolder.getCurrentUser();
+25.鑾峰彇褰撳墠request銆乺eponse銆乻ession绛�
+	SpringMVCContextHolder.getHttpxxxx()
+	
+26.瀵规暟鎹殑鎿嶄綔锛屽彲浠ュ弬鑰冧唬鐮侊細JsonUtil锛屽浣曠敓鎴愮殑 FieldSetEnttiy,濡備綍鍦╢s涓幏鍙栧瓙琛紙DataTableEntity锛夛紝濡備綍鑾峰彇fs涓殑瀛楁鍊硷紝濡備綍鍦―ataTableEntity涓幏鍙栦竴鏉¤褰曪紝鍜屼竴鏉¤褰曚腑鐨勫瓧娈靛�� 
+
+27.瀵逛竴鏉¤褰曠殑璇诲啓鎿嶄綔
+
+28.瀵规暟鎹泦鐨勮鍐欐搷浣�
+	浠庣紦瀛樹腑鑾峰彇鍒版暟鎹泦
+	DataTableEntity dt=DataPoolCacheImpl.getInstance().getCacheData("鎵�鏈夊瓧娈典俊鎭苟鎸夎〃鍒嗙粍");
+
+		DataTableEntity table=DataPoolCacheImpl.getInstance().getCacheData("mrbase_sys_datamodel_table");
+		String tableUuid=null;
+		String subTableUUid=null;
+		寰幆姣忎竴鏉℃暟鎹�
+		for(int i=0;i<table.getRows();i++) {
+			if(tableUuid != null && subTableUUid != null )
+				break;
+				鑾峰彇涓�鏉¤褰曚腑鐨勪竴涓瓧娈靛��
+			if(tableName.equals(table.getString(i,"table_name"))){
+				tableUuid=table.getString(i, "uuid");
+			}
+			if(subTableName.equals(table.getString(i,"table_name"))){
+				subTableUUid=table.getString(i, "uuid");
+			}
+		}
+29.浜嬪姟鎿嶄綔
+   	鎵�鏈夋柊澧炪�佷慨鏀广�佸垹闄ら兘瑕佸仛浜嬪姟
+   	鐞嗚涓婁簨鍔″缓绔嬪湪Service灞傦紝涓嶅湪controller灞�
+   	 瀹炵幇鏂瑰紡锛�
+   	----------------------------------------------------------------
+   	service绫讳腑瑕佸仛浜嬪姟鐨勬柟娉曟坊鍔犳敞瑙o細@Transactional锛屽涓嬶細
+   	/***
+  	   * 鏂板瀹㈡埛鏁版嵁浜嬪姟澶勭悊(骞朵笖鍦ㄧ粍缁囨灦鏋勪腑鏂板涓�鏉℃渶椤剁骇鐨勬暟鎹�)
+     * @param fse 瀹㈡埛鍗曚綅鏁版嵁
+     * @return
+     * @throws BaseException
+     */
+    @Transactional
+    public String addClient(FieldSetEntity fse) throws BaseException{
+   	-----------------------------------------------------------------
+   	娣诲姞service绫荤殑鎺ュ彛绫伙紝鎺ュ彛绫诲繀椤诲畾涔夎鍋氫簨鍔$殑鏂规硶
+   	controller蹇呴』缁ф壙AbstractBaseController
+   	-----------------------------------------------------------------
+   	controller涓殑鍏蜂綋璋冪敤锛�
+   	鎶� systemClientsService.addClient(fse); 鏀规垚浠ヤ笅浠g爜
+   	
+   	 /**浜嬪姟澶勭悊瀹炵幇**/
+        ISystemClientsService service=(ISystemClientsService)getProxyInstance(systemClientsService);
+        String uuid = service.addClient(fse);
+        
+      ISystemClientsService 锛歴ervice绫荤殑鎺ュ彛绫�
+      systemClientsService锛歴pring娉ㄥ叆鐨剆ervice绫�
+    -------------------------------------------------------------------   
+        
+30.鏌ヨ鍒楄〃涓寘鍚瓙琛ㄦ暟鎹�
+	/**
+	 * 
+	 * @param tableName
+	 * @param filter
+	 * @param para
+	 * @param fields
+	 * @param orderby
+	 * @param psize
+	 * @param pindex
+	 * @param isMoreSubData 鏄惁鍚屾椂鏌ヨ鎵�鏈夊瓙琛ㄧ殑瀵瑰簲鏁版嵁
+	 * @return
+	 * @throws BaseException
+	 */
+	public  DataTableEntity listTable(String tableName,String filter,Object para[],String fields[],String orderby, int psize,int pindex,boolean isMoreSubData)
+
+
+	/**
+	 * @ 鏌ヨ鍒楄〃鏁版嵁鐨勬墍鏈夊瓙琛ㄦ暟鎹� String 1=姣忔潯璁板綍uuid锛孲tring 2= 瀛愯〃鍚嶇О 
+	 * @param uuids 閫楀彿鍒嗛殧 鐖跺垪琛╱uids
+	 * @param table_name
+	 * @return
+	 */
+	public Map <String,Map<String,DataTableEntity>> listSubData(String uuids,String tableName ) throws BaseException;
+31.鍏充簬闄勪欢鑾峰彇鎿嶄綔
+	RequestParameterEntity.getFormData().getString(闄勪欢瀛楁);//涓婁紶鐨勫師濮嬫枃浠跺悕锛屽涓互閫楀彿鍒嗛殧
+	RequestParameterEntity.getFiles().get(鍘熷鏂囦欢鍚�); //瀵瑰簲鐨勬枃浠讹紝鏂囦欢鍚嶏細uuid+"_"+鏂囦欢鐨勫師濮嬪悕绉�  锛屼竴娆″彧鑳借幏鍙栦竴涓�
+	
+32.鍏充簬鎵嬪啓sql璇彞鏌ヨ鍜屽垎椤电殑瑕佹眰
+ 	select TIMESTAMPDIFF(YEAR,aciwe.start_datetime,aciwe.end_datetime) AS start_datetime from a,b where f1=f2 鎴� a left join b on f1=f2
+         瀛楁鍒悕蹇呴』鏄〃涓殑瀛楁锛屽惁鍒欐棤娉曡幏鍙栧埌瀵瑰簲瀛楁鐨勮〃鍚嶅拰瀛楁淇℃伅瀹氫箟锛屽锛�
+   start_datetime 蹇呴』鏄� a琛ㄦ垨b琛ㄤ腑鐨勪竴涓瓧娈�
+   
+         澶氳〃鍏宠仈鏌ヨ锛岃〃瀹氫箟锛歛,b 鎴� a left join b on f1=f2 鏁翠釜鍋氫负琛�
+                                    鏉′欢瀹氫箟锛寃here 鍚庨潰 锛� f1=f2 
+ 33.濡傛煡sql璇彞涓病鏈塽uid瀛楁锛屾棤娉曟煡璇㈠嚭瀛愯〃         
+ 
+ 34.绯荤粺閿欒璇存槑
+ 	                          
+   	绯荤粺閿欒鍒嗕负涓ょ锛氫富鍔ㄦ姏鍑洪敊璇�佹崟鑾烽敊璇�
+   	涓诲姩鎶涘嚭锛�
+   	/**
+	 * 鏋勯�犲嚱鏁�---涓诲姩鎶涘嚭鐨勯敊璇�
+	 * @param code  閿欒鐮佷唬鐮�
+	 * @param error 閿欒淇℃伅
+	 * @param c     閿欒鍙戠敓鐨勭被
+	 * @param method 閿欒鍙戠敓鏂规硶
+	 */
+	public  BaseException(String code,String error,Class c,String method);
+	
+   	鎹曡幏閿欒:
+   	/**
+	 * 鏋勯�犲嚱鏁帮紝璁板綍閿欒鍒板簱---鎹曡幏鐨勯敊璇�
+	 * @param code  閿欒鐮佷唬鐮�
+	 * @param exc   鎹曡幏鐨勯敊璇�
+	 */
+	public  BaseException(String code,String error,Class c,String method,Exception sysExc)
+	
+35.licese鏀寔
+  	纭欢淇℃伅璇诲彇搴撴枃浠讹紝涓嬭浇鍦板潃锛歨ttp://sigar.hyperic.com/
+        windows鐗�                                                                  mac鐗�                                                            linux鐗�
+  	sigar-x86-winnt.dll                 xxxxx                  xxxxxxxxxx
+  	sigar-amd64-winnt.dll               xxxxxx                 xxxxxxxxx
+	鍚屾椂灏嗗搴旂殑dll鏂囦欢鎴栬�卻o鏂囦欢娣诲姞鍒扮郴缁熺洰褰曘�備緥濡傦細windows涓嬫妸sigar-x86-winnt.dll娣诲姞鍒癱:\WINDOWS\system32鎴栬�卝dk鐨刡in鐩綍銆�
+
+36.鍏充簬閫氱敤缂栫爜 001-002-003
+	琛ㄤ腑瀛樻斁缂栫爜鐨勫瓧娈碉紝蹇呴』鍦╩rbase_sys_datamodel_field琛ㄤ腑璇ュ瓧娈电殑field_type=code
+	鐣岄潰璋冪敤鎺ュ彛鑾峰彇缂栫爜锛�/api/common/createCode锛岃娴嬭瘯绫籆odeTest
+	濡傛灉鐣岄潰娌℃湁璋冪敤鎺ュ彛鐢熸垚缂栫爜锛屽垯鍙互鍦ㄤ笟鍔ontroller涓彲璋冧互涓嬩唬鐮佽幏鍙�
+	String code=codeService.createCode(fse.getString("table_name"), fse.getString("field_name"), fse.getString("parentCode")==null?"":fse.getString("parentCode"));
+	鍦ㄦ柊澧炵殑controller涓皟鐢紝鍦ㄥ簳灞侱ao涓殑淇濆瓨鏂规硶涓幏鍙栬幏鍙栫殑涓存椂缂栫爜鍘婚獙璇佹槸鍚﹁鍗犵敤锛屽崰鐢ㄥ垯閲嶆柊鐢熸垚锛屼繚璇佸敮涓�鎬�
+	杩斿洖json鍊间腑code鐨勫�煎嵆涓虹敓鎴愮殑缂栫爜鍊�
+	
+37.閫氱敤鍙傛暟楠岃瘉銆佹暟鎹繚瀛橀獙璇�
+	鍙傛暟楠岃瘉锛歝om.lx..module.sys.config.RegistValidate绫�
+	鍦╮egistValidateParameter鏂规硶涓坊鍔犻獙璇佷唬鐮侊紝濡傦細
+	DataValidateInterceptor.registValidatPara("/api/prompt/findPrompt","client_uuid",VerifyRegularUtil.VALIDATE_REQUIRED);
+	鍙傛暟1锛氭帴鍙�
+	鍙傛暟2锛氶獙璇佸瓧娈�
+	鍙傛暟3锛氶獙璇佺被鍨�
+	鏁版嵁淇濆瓨楠岃瘉锛屽湪core鍖呬腑鐨刣ao涓嚜鍔ㄦ牴鎹暟鎹〃瀛楁鐨勯厤缃獙璇侊紝閫氬父涓嶇敤閰嶏紝浣嗗鏋滄湁鍏跺畠楠岃瘉锛屼篃鍙互鍦ㄤ繚瀛樺拰淇敼鎺ュ彛涓厤缃紝鍚﹀垯淇濆瓨鍜屼慨鏀规帴鍙d笉鐢ㄩ厤
+	鏍规嵁瀛楁绫诲瀷杩涜楠岃瘉锛屽锛氬瓧娈垫槸mail锛宮rbase_sys_datamodel_field.field_type=email,鐜板彧鏀寔锛�
+	int銆乶umber(灏忔暟)銆乮dcard銆乽rl銆乮p銆乵ac銆乨atetime銆乴ength銆乪mail
+	
+38.properties閰嶇疆鏂囦欢鍙傛暟鑾峰彇
+	璋冪敤锛�
+	Global.getPropertyToBoolean("druid.datasource.testOnBorrow", "false")
+	鏂规硶锛�
+	/**
+	 * 鑾峰彇閰嶇疆,濡傛灉鑾峰彇涓嶅埌閰嶇疆锛屽垯浼犻粯璁ゅ��
+	 * @key key鍊�
+	 * @defaultValue 涓虹┖鏃剁殑榛樿鍊�
+	 */
+	public static String getSystemConfig(String key,String defaultValue)
+	public static Integer getPropertyToInteger(String key, String defValue)
+	public static Long getPropertyToLong(String key, String defValue)
+	public static Boolean getPropertyToBoolean(String key, String defValue)
+39.鏁版嵁鏉冮檺
+	鍦ㄥ垪琛ㄤ腑娣诲姞鏁版嵁鏉冮檺鏉′欢鐨勮幏鍙栵紝娣诲姞鍒板垪琛ㄦ煡璇㈡柟娉曚腑銆�
+	/**
+	 * 鑾峰彇浜哄憳鐨勬暟鎹潈闄愶紝鎬诲叆鍙� 锛屼笉杩囨护浜哄憳锛屽彧杩囨护鍏徃
+	 * 鎸囧畾瑕佽繃婊ょ殑 鍏徃瀛楁  浣跨敤榛樿鍏徃瀛楁杩涜杩囨护-org_level_uuid
+	 * @return
+	 */
+	public  String getDataFilter();
+	/**
+	 * 鑾峰彇浜哄憳鐨勬暟鎹潈闄愶紝鎬诲叆鍙� 锛屼笉杩囨护浜哄憳锛屽彧杩囨护鍏徃
+	 * @param org_fields   鎸囧畾瑕佽繃婊ょ殑鍏徃瀛楁锛屼负绌哄垯锛屼娇鐢ㄩ粯璁ゅ叕鍙稿瓧娈佃繘琛岃繃婊�-org_level_uuid
+	 * @return
+	 */
+	public  String getDataFilter(String org_fields)
+	/**
+	 * 鑾峰彇浜哄憳鐨勬暟鎹潈闄愶紝鎬诲叆鍙� 锛岃繃婊ゆ寚瀹氫汉鍛樺瓧娈碉紝浣跨敤榛樿鍏徃瀛楁杩涜杩囨护-org_level_uuid
+	 * @tableName 浜哄憳杩囨护鐨勮〃
+	 * @param staff_fields  
+	 * @return
+	 */
+	public  String getDataFilter(String tableName,String staff_fields)
+	/**
+	 * 鑾峰彇浜哄憳鐨勬暟鎹潈闄愶紝鎬诲叆鍙� ,浜哄憳 鍏徃鍚屾椂杩囨护
+	 * @param tableName   鎸囧畾鏄摢寮犺〃鐨勬暟鎹� 鏉冮檺杩囨护
+	 * @param staff_fields 鎸囧畾瑕佽繃婊ょ殑浜哄憳瀛楁 锛屼负绌哄垯锛屼笉鐢ㄤ汉鍛樿繃婊�
+	 * @param org_fields   鎸囧畾瑕佽繃婊ょ殑 鍏徃瀛楁锛屼负绌哄垯锛屼娇鐢ㄩ粯璁ゅ叕鍙稿瓧娈佃繘琛岃繃婊�-org_level_uuid
+	 * @return
+	 */
+	public  String getDataFilter(String tableName,String staff_fields,String org_fields)
+	
+ 40.鍏充簬娴佹按鍙�  
+ 	鍙渶瑕佸湪閰嶇疆涓厤缃祦姘村彿,瑙佽〃mrbase_sys_swift_config
+	琛ㄤ腑瀛樻斁娴佹按鍙风殑瀛楁锛屽繀椤诲湪mrbase_sys_datamodel_field琛ㄤ腑璇ュ瓧娈电殑field_type=serialNumber 锛岀ず渚嬭test琛�
+	鐣岄潰璋冪敤鎺ュ彛鑾峰彇缂栫爜锛�/api/common/createSerialNumber锛岃娴嬭瘯绫籆odeTest锛屽繀浼犲弬鏁帮細serialNumberName锛屽搴旇〃娴佹按鍙烽厤缃〃涓殑swift_config_name瀛楁鍊�
+	杩斿洖json鍊间腑serialNumber鐨勫�煎嵆涓虹敓鎴愮殑娴佹按鍙�
+	濡傛灉鐣岄潰娌℃湁璋冪敤鎺ュ彛鐢熸垚缂栫爜锛屽垯鍙互鍦ㄤ笟鍔ontroller涓彲璋冧互涓嬩唬鐮佽幏鍙�
+	String serialNumber=serialNumberService.createSerialNumber(serialNumberName);
+	鍦ㄦ柊澧炵殑controller涓皟鐢紝鍦ㄥ簳灞侱ao涓殑淇濆瓨鏂规硶涓幏鍙栬幏鍙栫殑涓存椂缂栫爜鍘婚獙璇佹槸鍚﹁鍗犵敤锛屽崰鐢ㄥ垯閲嶆柊鐢熸垚锛屼繚璇佸敮涓�鎬�
+	鎺�
+	 閰嶇疆鏀寔鏍煎紡锛�
+	  [YYYY]锛氬勾
+	  [MM] 锛氭湀
+	  [DD] 锛氭棩
+	  [COMPANY_NAME]锛氬叕鍙稿悕绉�,瀵瑰簲org_level_name
+	  [COMPANY_CODE]锛氬叕鍙哥紪鐮�  org_level_code
+	  [DEPT_NAME]锛氶儴闂ㄥ悕绉皁rg_level_name
+	  [DEPT_CODE]锛氶儴闂ㄧ紪鐮乷rg_level_code
+41.鎺ュ彛绛惧悕璁よ瘉
+   	绯荤粺鍙傛暟鏂囦欢涓彲閰嶇疆锛�
+    #鏄惁鍚敤鎺ュ彛绛惧悕璁よ瘉
+	signature.isEnable=false
+	#鍦ㄥ惎鐢ㄦ帴鍙g鍚嶈璇佹椂锛屾帓闄ゆ寚瀹氭帴鍙f棤闇�绛惧悕璁よ瘉
+	signature.exclude.path=/login,/logout,/relogin
+	#鎺ュ彛绛惧悕璁よ瘉鏈夋晥鏈燂紝鍗曚綅绉掞紝绛惧悕璁よ瘉鏈夋晥鏈�=绌烘垨0锛屽垯琛ㄧず涓嶉獙璇�
+	signature.expire=10
+	-------------
+	浣跨敤MD5鍔犲瘑锛屽姞瀵嗗唴瀹癸細鍙傛暟formData鐨勫��+KEY(鍗曠嫭鎸囧畾)
+	鍓嶇鍔犲瘑鍚庣殑瀛楃涓茶澶у啓锛歴ign=GEGSTLLSEGEL
+	formData涓鍖呭惈timestamp鏃堕棿鎴崇殑鍊硷紝鏍煎紡涓猴細yyyyMMddHHmmss
+42.閫氱敤鍒犻櫎楠岃瘉
+	璋冪敤锛�
+		妯″潡 system
+		绫�     SystemDeleteValidationService
+		鏂规硶 public  boolean  deleteValidation(String tableName, String uuids,String delete_filter) throws BaseException {
+	鍙傛暟璇存槑锛�
+	 	tableName鍒犻櫎鏁版嵁琛ㄨ〃鍚�
+	 	uuids瑕佸垹闄ゆ暟鎹殑uuid,澶氫釜鐢ㄩ�楀彿鍒嗛殧
+	 	delete_filter鍒犻櫎鏉′欢  fields='name'
+	杩斿洖璇存槑锛�
+		楠岃瘉閫氳繃娌℃湁鍏宠仈浠讳綍鏁版嵁杩斿洖true
+		鍙傛暟缂哄け杩斿洖false
+		楠岃瘉娌¢�氳繃鍏宠仈浜嗗叾浠栬〃鏁版嵁鎶涘嚭寮傚父锛屽紓甯镐俊鎭腑鎻愮ず鍏宠仈鏁版嵁琛紝澶氫釜鐢ㄩ�楀彿鍒嗛殧
+43.鍥介檯鍖�
+	label:
+		鐢ㄦ埛鐧诲綍鎴愬姛鍚庯紝璋冩帴鍙�:
+		/api/language/load-international-info/{version}
+		鍔犺浇鎸囧畾瀹㈡埛绔�佺増鏈彿銆侀粯璁よ瑷�鐨勬墍鏈夊浗闄呭寲鏁版嵁
+		瀹㈡埛绔�佺増鏈彿銆侀粯璁よ瑷�鎺ュ彛鍙傛暟涓婁紶
+		
+	value:
+		1銆侀鍏堥厤缃〃銆佸瓧娈典负鍥介檯鍖栧瓧娈�
+		2銆佸墠绔皟鎺ュ彛鑾峰彇鍝簺琛ㄦ湁鍝簺鍥介檯鍖栧瓧娈碉紝鍦ㄧ晫闈㈢殑涓搴斿厓绱犲悗闈㈡坊鍔犲湴鐞冨浘鏍囷紝鐐瑰浘鏍囧脊鍑哄浗闄呭寲褰曞叆
+		       鎺ュ彛:/api/language/list-international-fields-info/{version}
+		3銆佹柊澧炰繚瀛樻暟鎹甹son鏍煎紡锛�
+		{
+		聽聽聽聽"token":"11111-鏂板鎻愪氦鏁版嵁",
+		聽聽聽聽"system_language_code":"ZH",
+		聽聽聽聽"system_client_type":"PC",
+		聽聽聽聽"system_client_version":"iphome聽X聽13.1.3",
+		聽聽聽聽"app_version":"V2.0.0",
+		聽聽聽聽"time_zone_offset":"240",
+		聽聽聽聽"sign":"eyJhbGciOiJIUzI1N",
+		聽聽聽聽"~table~":"mrbase_sys_users",
+		聽聽聽聽"name":[
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"en":"internationalization"
+		聽聽聽聽聽聽聽聽},
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"zh":"鍥介檯鍖�"
+		聽聽聽聽聽聽聽聽}
+		聽聽聽聽],
+		聽聽聽聽"address":[
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"en":"zhuhai"
+		聽聽聽聽聽聽聽聽},
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"zh":"鐝犳捣"
+		聽聽聽聽聽聽聽聽}
+		聽聽聽聽],
+		聽聽聽聽"phone":"18123938722",
+		聽聽聽聽"sub_table_name":[
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"filed1":"value1",
+		聽聽聽聽聽聽聽聽聽聽聽聽"filed2":"value2",
+		聽聽聽聽聽聽聽聽聽聽聽聽"name":[
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"en":"internationalization"
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽},
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"zh":"鍥介檯鍖�"
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
+		聽聽聽聽聽聽聽聽聽聽聽聽],
+		聽聽聽聽聽聽聽聽聽聽聽聽"address":[
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"en":"zhuhai"
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽},
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"zh":"鐝犳捣"
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
+		聽聽聽聽聽聽聽聽聽聽聽聽]
+		聽聽聽聽聽聽聽聽}
+		聽聽聽聽]
+		}
+		4銆佹煡璇㈠垪琛ㄦ暟鎹�
+		棣栧厛鏌ヨ鍑烘墍鏈変笟鍔℃暟鎹紝鍐嶈皟
+		/**
+		 * 涓氬姟浠g爜灞傝皟鐢�
+		 * 鑾峰彇涓氬姟瀵瑰簲瀛楁鐨勫浗闄呭寲鏁版嵁,濡傛灉language_code涓嶄负绌猴紝琛ㄦ槑鏄墜鏈虹
+		 * @param dt 涓氬姟琛ㄦ暟鎹� 
+		 * @param language_code 涓嶄负绌哄垯涓烘墜鏈虹
+		 * @return
+		 */
+		DataTableEntity baseDao.listInternationDataTable(DataTableEntity dt,String language_code ) 灏佽鍥介檯鍖栨暟鎹埌姣忔潯璁板綍鐨勬瘡涓浗闄呭寲瀛楁銆�
+		FieldSetEntity  baseDao.listInternationDataTable(FieldSetEntity fs,String language_code )  灏佽鍥介檯鍖栨暟鎹埌鍗曟潯璁板綍鐨勬瘡涓浗闄呭寲瀛楁銆�
+		
+		//baseDao.processInternationDataTable(DataTableEntity dt,String language_code ),鍥介檯鍖栧瓧娈典笉鏄暟缁勬牸寮�
+		//baseDao.processInternationDataTable(FieldSetEntity fs,String language_code ) 鍥介檯鍖栧瓧娈典笉鏄暟缁勬牸寮�
+		杩斿洖json鏍煎紡锛�
+		
+		{
+		聽聽聽聽"code":"200",
+		聽聽聽聽"data":[
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"100001",
+		聽聽聽聽聽聽聽聽聽聽聽聽"name":[
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"xxxxx",
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"en":"internat"
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽},
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"xxxxx",
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"zh":"鍥介檯鍖�"
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
+		聽聽聽聽聽聽聽聽聽聽聽聽],
+		聽聽聽聽聽聽聽聽聽聽聽聽"address":[
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"xxxxx",
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"en":"zhuhai"
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽},
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"xxxxx",
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"zh":"鐝犳捣"
+		聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
+		聽聽聽聽聽聽聽聽聽聽聽聽],
+		聽聽聽聽聽聽聽聽聽聽聽聽"phone":"18123938729"
+		聽聽聽聽聽聽聽聽}
+		聽聽聽聽],
+		聽聽聽聽"msg":"鎴愬姛",
+		聽聽聽聽"status":"success"
+		}
+		
+		5銆佷慨鏀逛繚瀛樻暟鎹甹son鏍煎紡锛�
+		{
+		聽聽聽聽"token":"11111-鏂板鎻愪氦鏁版嵁",
+		聽聽聽聽"language_code":"zh",
+		聽聽聽聽"client_type":"PC",
+		聽聽聽聽"client_version":"iphome聽X聽13.1.3",
+		聽聽聽聽"app_version":"V2.0.0",
+		聽聽聽聽"time_zone_offset":"240",
+		聽聽聽聽"sign":"eyJhbGciOiJIUzI1N",
+		聽聽聽聽"~table~":"mrbase_sys_users",
+		聽聽聽聽"uuid":"100001",
+		聽聽聽聽"name":[
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"xxxxx",
+		聽聽聽聽聽聽聽聽聽聽聽聽"en":"internationalization"
+		聽聽聽聽聽聽聽聽},
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"xxxxx",
+		聽聽聽聽聽聽聽聽聽聽聽聽"zh":"鍥介檯鍖�"
+		聽聽聽聽聽聽聽聽}
+		聽聽聽聽],
+		聽聽聽聽"address":[
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"xxxxx",
+		聽聽聽聽聽聽聽聽聽聽聽聽"en":"zhuhai"
+		聽聽聽聽聽聽聽聽},
+		聽聽聽聽聽聽聽聽{
+		聽聽聽聽聽聽聽聽聽聽聽聽"uuid":"xxxxx",
+		聽聽聽聽聽聽聽聽聽聽聽聽"zh":"鐝犳捣"
+		聽聽聽聽聽聽聽聽}
+		聽聽聽聽],
+		聽聽聽聽"phone":"18123938722"
+		}
+		
+		6.涓嶈兘鍥介檯鍖栫殑琛細
+		mrbase_sys_cache_config 缂撳瓨閰嶇疆
+		mrbase_sys_data_sources 鏁版嵁搴撹繛鎺ラ厤缃�
+		mrbase_sys_datamodel_field 鏁版嵁缁撴瀯瀛楁淇℃伅
+		mrbase_sys_datamodel_table 鏁版嵁缁撴瀯琛ㄤ俊鎭�
+		mrbase_sys_language_code
+		mrbase_sys_language_cont_values
+		mrbase_sys_language_master
+		mrbase_sys_language_values
+		mrbase_sys_message_exchange
+		mrbase_sys_message_message_exchange
+		mrbase_sys_message_template
+		mrbase_sys_message_template_language
+		mrbase_sys_message_user_exchange
+		mrbase_sys_prompt
+		mrbase_sys_swift_config
+		mrbase_sys_tree_config
+		mrbase_sys_version_buttons_mapping
+		瀹氭椂浠诲姟鎵�鏈夎〃
+44.鏂囦欢涓婁紶--绗笁鏂规枃浠舵湇鍔″櫒
+    1锛夎幏鍙栧鎴蜂笂浼犵殑鏂囦欢鎬诲ぇ灏忥細com.lx.base.file.service.FileManagerService
+        /**
+         * 鑾峰彇瀹㈡埛涓婁紶鐨勬枃浠舵�诲ぇ灏�
+         * @param clientUUID        瀹㈡埛UUID
+         * @return                  宸蹭笂浼犳枃浠舵�诲ぇ灏�
+         * @throws BaseException    鍩烘湰寮傚父
+         */
+        public int findClientFileUsedCapacity(String clientUUID) throws BaseException
+    2锛夎幏鍙栧鎴峰墿浣欑殑鏂囦欢鎬诲ぇ灏忥細com.lx.base.file.service.FileManagerService
+        /**
+         * 鑾峰彇瀹㈡埛鍓╀綑鐨勬枃浠舵�诲ぇ灏�
+         * @param clientUUID    瀹㈡埛UUID
+         * @return              鍓╀綑绌洪棿澶у皬
+         */
+        public int findClientFileResidueCapacity(String clientUUID) throws BaseException
+
+        /**
+         * 鑾峰彇瀹㈡埛鍓╀綑鐨勬枃浠舵�诲ぇ灏�
+         * @param fse           瀹㈡埛fse
+         * @return              鍓╀綑绌洪棿澶у皬
+         */
+        public int findClientFileResidueCapacity(FieldSetEntity fse) throws BaseException
+    3锛変笂浼犳枃浠�
+        1>鍓嶇涓婁紶鏂囦欢锛岃繑鍥炴枃浠朵俊鎭粰鍚庣锛岃皟鐢ㄨ姹傚墠缂�/api/fileManager/add-file-record-plan/{version}锛岃鎯呰showdoc涓�14-1銆佹枃浠舵柊澧炲噯澶囷紝鍚庣杩斿洖fse
+        浼犲叆json绀轰緥锛�
+        {
+          "org_level_uuid": "b8631dad-6cc1-4d5a-9f6f-e8c76e6a5464",
+          "~table~": "mrbase_sys_attachments",
+          "attachment_title": "test_202006221036.doc",
+          "client_uuid": "06f959c8-4f41-407c-9bcc-8137a8b22f50",
+          "language": "mslc1112",
+          "function_uuid": "97779f8b-9657-47e7-8915-2f51113210fe",
+          "client_type": "web",
+          "attachment_data_table": "test_project",
+          "version": "v1",
+          "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhZG1pbiIsImlhdCI6MTU5Mjc5MzY3OSwic3ViIjoic2hpX2Nob25nZnVAMTYzLmNvbSIsImlzcyI6Ind3dy5tcmMuY29tIiwiZXhwIjoxNTkyODY1Njc5fQ.kgffR0iYgjKhFSNI-ak5hPCf3453aOYXIrwHte7pRAY",
+          "product_uuid": "001",
+          "staff_uuid": "e2f158ec-a6c7-40e0-a201-4fd7eb2e0e98",
+          "attachment_data_field": "attachment",
+          "attachment_size": "1"
+        }
+        2>鍓嶇寰楀埌鍚庣杩斿洖鍚庢嫾鎺rl锛岃皟鐢ㄨ嚦鏈嶅姟鍣ㄧ涓婁紶鏂囦欢锛屾牴鎹湇鍔″櫒绔姸鎬佽繑鍥炶皟鐢ㄨ姹傚墠缂�/api/fileManager/add-file-callback/{version}锛岃鎯呰showdoc涓�14-2銆佹枃浠舵柊澧炵粨鏋滃洖璋冦�傛湇鍔$鏂板鎴愬姛鏈湴鎵ц淇敼锛屽彉鏇存枃浠惰褰曠姸鎬佷负涓婁紶鎴愬姛锛岃繑鍥瀠pdate锛涙湇鍔$鏂板澶辫触鏈湴鎵ц鍒犻櫎锛岃繕鍘熻褰曪紝杩斿洖del
+        浼犲叆json绀轰緥锛�
+        {
+          "result": "1",
+          "uuid": "c48c0147-8b2f-4a8d-9d5b-46c55ceb725b",
+          "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhZG1pbiIsImlhdCI6MTU5Mjc5NjMzNiwic3ViIjoic2hpX2Nob25nZnVAMTYzLmNvbSIsImlzcyI6Ind3dy5tcmMuY29tIiwiZXhwIjoxNTkyODY4MzM2fQ.LiUeajNzZAHWuT5O_YdPh5IOp7geVjklBGrWUBz79fo"
+        }
+    4锛夊垹闄ゆ枃浠�
+        1>鍓嶇鍒犻櫎鏂囦欢锛岃繑鍥炴枃浠朵俊鎭粰鍚庣锛岃皟鐢ㄨ姹傚墠缂�/api/fileManager/del-file-record-plan/{version}锛岃鎯呰showdoc涓�14-3銆佹枃浠跺垹闄ゅ噯澶囷紝鍚庣杩斿洖fse
+        浼犲叆json绀轰緥锛�
+        {
+          "uuid": "c48c0147-8b2f-4a8d-9d5b-46c55ceb725b",
+          "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhZG1pbiIsImlhdCI6MTU5MjgwNDMyOSwic3ViIjoic2hpX2Nob25nZnVAMTYzLmNvbSIsImlzcyI6Ind3dy5tcmMuY29tIiwiZXhwIjoxNTkyODc2MzI5fQ.Fsau5aHByePG7E-p68Y8_Py6yGAcYwbxQLwhkz20MGQ"
+        }
+        2>鍓嶇寰楀埌鍚庣杩斿洖鍚庢嫾鎺rl锛岃皟鐢ㄨ嚦鏈嶅姟鍣ㄧ鍒犻櫎鏂囦欢锛屾牴鎹湇鍔″櫒绔姸鎬佽繑鍥炶皟鐢ㄨ姹傚墠缂�/api/fileManager/del-file-callback/{version}锛岃鎯呰showdoc涓�14-4銆佹枃浠跺垹闄ょ粨鏋滃洖璋冦�傛湇鍔$鍒犻櫎鎴愬姛鏈湴鎵ц鍒犻櫎锛岃繑鍥瀌el锛涙湇鍔$鍒犻櫎澶辫触鏈湴鎵ц淇敼锛岃繕鍘熸枃浠惰褰曠姸鎬侊紝杩斿洖update
+        浼犲叆json绀轰緥锛�
+        {
+          "result": "0",
+          "uuid": "c48c0147-8b2f-4a8d-9d5b-46c55ceb725b",
+          "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhZG1pbiIsImlhdCI6MTU5MjgwNTg4OSwic3ViIjoic2hpX2Nob25nZnVAMTYzLmNvbSIsImlzcyI6Ind3dy5tcmMuY29tIiwiZXhwIjoxNTkyODc3ODg5fQ.0x7xmEM2G8qXq7jiYQiy6iDm48tYEqVS9UqhlHUB9xk"
+        }
+45.鏈湴鏂囦欢涓婁紶--绯荤粺鏈嶅姟鍣�
+    鏍稿績锛氶渶瑕乻igar-amd64-winnt.dll鎴栬�卻igar-x86-winnt.dll鏂囦欢缃簬jdk鐨刡in涓垨鑰卌鐩榳indows/system32
+	涓婁紶鐩綍閰嶇疆锛岃properties鏂囦欢涓殑upload.file銆倄xxx 鍑犱釜鐩稿叧鍙傛暟
+	涓婁紶鏂囦欢鑷姩瀛樺埌鐩綍涓嬶紝鍦╟ontroller鎴杝ervice灞備腑璇诲彇鎿嶄綔銆�
+	
+46.娑堟伅鏈嶅姟
+    1.鏂板缓闃熷垪
+     public static void createQueue(String queue_name)
+     鏃犺繑鍥炲��
+    2.鍒犻櫎闃熷垪
+     public static void deleteQueue(String queue_name)
+     鏃犺繑鍥炲��
+    3.鏂板缓浜ゆ崲鏈�
+    messageService.addExchange
+    鍙傛暟
+    "exchange_uuid":"鏂板缓浜ゆ崲鏈�"
+    杩斿洖鍊硷細浜ゆ崲鏈簎uid
+    4.缁戝畾浜ゆ崲鏈�
+    messageService.bindExchange
+    鍙傛暟锛�
+    {"user_uuid":"鐢ㄦ埛uuid",
+    "exchange_uuid":"浜ゆ崲鏈簎uid"}
+    杩斿洖鍊硷細Boolean
+    5.瑙g粦浜ゆ崲鏈�
+     messageService.unbindExchange
+     鍙傛暟锛�
+     {"user_uuid":"鐢ㄦ埛uuid",
+     "exchange_uuid":"浜ゆ崲鏈簎uid"}
+     杩斿洖鍊硷細boolean
+     6.娣诲姞娑堟伅涓旀坊鍔犳秷鎭褰�
+     messageService.addMessage
+     鍙傛暟锛�
+       {
+       "exchange_uuid":"浜ゆ崲鏈簎uid"
+       "message_uuid"锛�"鐢ㄦ埛uuid"
+       "message":"娑堟伅鍐呭"
+       "template_id":"妯℃澘id"
+       "create_by":"鎿嶄綔浜簎uid"
+       "virtual_hosts":"铏氭嫙鏈哄悕"
+        }
+47.缁煎悎鎼滅储锛�
+    findService.listUuid
+    鍙傛暟锛�
+    {
+    ~table~锛歔鈥溾��,鈥濃��,鈥濃��,鈥濃�漖	//鏁版嵁搴撹〃
+    Conditions:[{condition:value},{},{}...]	//鏉′欢
+    language:value    //鍥介檯鍖栬瑷�
+    }
+    杩斿洖鍊硷細list<String> uuids
+    
+    褰撴煡璇㈣鍚嶏紝浣跨敤澶氳〃鑱斿悎鏌ヨ锛屽苟浣跨敤浜嗗埆鍚嶆椂锛岄渶瑕佹坊鍔犺〃鍒悕銆佸瓧娈靛埆鍚嶈缃紝骞舵妸sql璇彞浣跨敤select * from (鏌ヨ璇彞+鏁版嵁鏉冮檺鏉′欢+楂樼骇鏌ヨ鏉′欢)  b 鎷捣鏉ワ紝娉ㄦ剰
+ 48.浠ヤ笅鍐呭鍙樻洿   
+ 1.core鍖呭紩鍏ュ彉鏇�
+<dependency>
+	<groupId>com.lx</groupId>
+	<artifactId>base-server-core</artifactId>
+	<version>1.0.0-releases</version>
+</dependency>
+2.鎵�鏈夊紩鍏ore鍖呬腑绫荤殑璺緞鍚湁鍏ㄩ儴鏇挎崲鎴恇ase,濡傦細
+import com.product..core.dao.BaseDao;    ->  import com.product.base.core.dao.BaseDao;
+
+3.鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛瀵瑰簲鍛樺伐淇℃伅锛�
+	鏀规垚getCurrentStaff()  FieldSetEntity
+
+4.鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛瀵瑰簲鍛樺伐鎵�灞炲叕鍙镐俊鎭�
+	getCurrentCompany()  FieldSetEntity
+鍗曠嫭鑾峰彇鍏徃鐨剈uid銆乷rg_level_name(鍏徃鍚嶇О) org_level_code(鍏徃缂栫爜)
+
+4.鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛瀵瑰簲鍛樺伐鎵�灞為儴闂ㄤ俊鎭�
+	getCurrentDept()  FieldSetEntity
+鍗曠嫭鑾峰彇閮ㄩ棬uuid
+
+5.鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛瀵瑰簲鍛樺伐鎵�灞炲鎴蜂俊鎭�
+	getCurrentCustomer()
+鍗曠嫭鑾峰彇瀹㈡埛uuid 銆佸鎴峰悕绉般�佸鎴风紪鐮�
+
+6.鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛瀵瑰簲绠$悊鍛樹俊鎭�
+	getCurrentManager()
+
+7.鑾峰彇鏌ヨ鏁版嵁闆嗙殑鎵�鏈塽uid
+	public String DataTableEntity.getUuids()  鍘� 锛屾敼涓轰互涓�
+
+	鎸囧畾琛ㄧ殑鎵�鏈塽uid,杩斿洖鏁扮粍
+	-> public Object[] getUuids(Object tableName) 
+	鎸囧畾琛ㄧ殑鎵�鏈塽uid锛岃繑鍥為�楀彿鍒嗛殧鐨勫瓧绗︿覆
+	-> public String getUuidsToString(Object tableName) 
+	杩斿洖榛樿琛ㄧ殑鎵�鏈塽uid,杩斿洖鏁扮粍
+	-> public Object[] getUuids()
+	杩斿洖榛樿琛ㄧ殑鎵�鏈塽uid,杩斿洖閫楀彿鍒嗛殧鐨勫瓧绗︿覆
+	-> public String getUuidsToString() 
+8.鐧诲綍涓婁紶鍥哄畾鍙傛暟
+	system_language_code 璇█缂栫爜 zh en
+	system_client_type   瀹㈡埛绫诲瀷
+	system_client_version 浠g爜鐗堟湰
+
+9.鎺ュ彛鐗堟湰鍙峰ぇ鍐橵鍐嶅姞3涓暟瀛楀涓嬶細
+鎵�鏈夋帴鍙e繀椤讳笂浼犵増鏈彿
+http://{IP}:{PORT}/{ProjectName}/api/app/homepage/get-home-page-list/v1 鎴杤2
+
+10.new FieldSetEntity()鍚庯紝棣栧厛瑕佽缃〃鍚嶏紝鎵嶈兘璋僺etValue(String fieldName,Object fieldValue)锛� 鍚﹀垯鍙兘璋僺etValue(String fieldName,Object fieldValue,Object tableName)
+
+11.public FieldSetEntity getLeaderStaff() throws BaseException  SystemUser.getLeaderStaff()鑾峰彇褰撳墠浜烘墍鐩村睘棰嗗淇℃伅
+
+12.public FieldSetEntity getJobPost() throws BaseException   SystemUser.getJobPost()鑾峰彇褰撳墠浜烘墍宀椾綅淇℃伅
+
+13.public DataTableEntity loadDirectSubordinate(String staffUuid) throws BaseException     StaffManagerService.loadDirectSubordinate()    鑾峰彇鎸囧畾浜哄憳鐨勭洿鎺ヤ笅灞�
+
+14.public DataTableEntity loadAllSubordinate(String staffUuid) throws BaseException   StaffManagerService.loadAllSubordinate()      鑾峰彇鎸囧畾浜哄憳鐨勬墍鏈夌洿鎺ヤ笅灞�
+
+15.public FieldSetEntity loadStaffLeader(Integer userid)    StaffManagerService.loadStaffLeader()                                     鑾峰彇浜哄憳鐨勭洿灞為瀵�
+
+16.public FieldSetEntity loadStaffLeader(String staffUuid)    StaffManagerService.loadStaffLeader()                                     鑾峰彇浜哄憳鐨勭洿灞為瀵�
+
+17.鏌ヨ鍑烘潵鐨勬暟鎹泦DataTableEntity 鎴朏ieldSetEntity 涓幏鍙栧埌FieldMetaEntity,璋僷ublic void addAliasField(String tableName_fieldName,String alias)娣诲姞鏌ヨ涓娇鐢ㄧ殑鍥介檯鍖栬繖娈靛埆鍚嶃��
+tableName_fieldName锛� 琛ㄥ悕涓庡瓧娈靛悕缁勫悎锛屼腑闂翠互鐐瑰垎闅�  table.field
+Alias锛� sql涓搴旂殑瀛楁鍒悕
+
+18.濡傛灉澶氳〃鑱斿悎鏌ヨ锛岃鍙栧浗闄呭寲鍊肩殑琛紝蹇呴』鍙栬琛╱uid瀛楁锛屾湁閲嶅uuid锛岃嚜鍔ㄦ坊鍔犲埆鍚嶏紝鏌ヨ鍑烘潵鐨剈uid浼氬湪鍚庨潰娣诲姞鏁版嵁閫掑锛屽锛歶uid1,uuid2,绗竴涓猽uid涓嶄細鍙橈紝濡傛灉瑕佹墜鍔ㄥ閲嶅鐨剈uid鍙栧埆鍚嶏紝涔熷簲鎸夋瑙勫垯杩涜锛屽惁鍒欏彲鑳藉嚭鐜板浗闄呰幏鍙栦笉鍒版暟鎹瓑鎯呭喌
+19.濡傛灉澶氳〃鑱斿悎鏌ヨ锛屽叾瀹冨瓧娈甸噸澶嶄笌uuid閲嶅绫讳技,
+澶氳〃鑱斿悎鏌ヨ锛屽悓涓�涓〃锛屽悓涓�涓瓧娈碉紝浣跨敤涓ゆ锛岄渶瑕乻elect * from () b 鎶婃煡璇富浣撴嫭璧锋潵鍚屾椂琛ㄥ繀椤昏缃埆鍚�
+20.FeildSetEntity涓幏鍙朞bject鏃舵湁涓や釜鏂规硶锛歡etValue(String fieldName)鍜実etObject(String fieldName),鍖哄埆鍦ㄤ簬锛実etValue锛圫tring fieldName锛変細鎶婂浗闄呭寲瀛楁鍊艰浆鎴怞SONObject瀵硅薄锛岃�実etObject(String fieldName)鍙槸杩斿洖鍩虹鏁版嵁
+
+48.鎵嬫満绔疛SON鏁版嵁鏍煎紡鐨勮皟鐢�
+	璇█缂栫爜鑾峰彇
+	String language_code=reqp.getOther().get(com.lx.base.core.config.CmnConst.SYSTEM_LANGUAGE_CODE ).toString();
+	String client_type=reqp.getOther().get(com.lx.base.core.config.CmnConst.SYSTEM_CLIENT_TYPE ).toString();
+	鏁版嵁淇濆瓨锛�
+		baseDao.add(FieldSetEntityfse,String language_code);
+		baseDao.add(FieldSetEntity fs,boolean subData,String language_code)
+		baseDao.add(DataTableEntity fs,String language_code)
+	鏁版嵁淇敼锛�
+		baseDao.update(FieldSetEntity fs,String language_code)
+        baseDao.update(FieldSetEntity fs,boolean subData,String language_code)
+    	baseDao.update(DataTableEntity fs,String language_code)
+       鏁版嵁鏌ヨ锛�
+       	FieldSetEntity listInternationDataTable(FieldSetEntity fs,String language_code )
+       	DataTableEntity listInternationDataTable(DataTableEntity dt,String language_code ) 
+49.鍚庣閿欒淇℃伅鍥介檯鍖�
+	1)閿欒淇℃伅鏋氫妇绫绘敞鍏ワ紝鍚姩绫讳腑娣诲姞娉ㄥ叆浠g爜锛�
+	DataPoolCacheImpl.getInstance()
+			.appendErrorEnumClass("com.lx.base.core.config.ErrorCode")
+			.appendErrorEnumClass("com.lx.base.module.sys.config.SystemCode")
+			.appendErrorEnumClass("com.lx.base.module.sys.config.SystemErrorCode");
+	2)鐗规畩鎯呭喌璋冪敤锛圓bstractBaseController.error()銆丅aseException.getMessage()銆乬etMessageInfo()宸插疄鐜帮級
+	String message=DataPoolCacheImpl.getInstance().getErrorLanguageInternation(code, language_code);
+	
+50.楂樼骇鍙傜収鏁版嵁杩斿洖瑙勫垯
+    1)鎵�鏈夊崟浣嶉珮绾у弬鐓ф暟鎹� f1 鍏ㄧО f2 鐭紪鐮�
+    2)鎵�鏈夐儴闂ㄩ珮绾у弬鐓ф暟鎹� f1 鍏ㄧО f2 鐭紪鐮�
+    3)鎵�鏈夊矖浣嶉珮绾у弬鐓ф暟鎹� f1 鍏ㄧО 
+    4)鎵�鏈夊矖浣嶇瓑绾ч珮绾у弬鐓ф暟鎹� f1 绛夌骇绾у埆 f2 缁勫悕
+    5)鎵�鏈夋ā鍧楅珮绾у弬鐓ф暟鎹� f1 鐭紪鐮�
+    6)鎵�鏈夊姛鑳介珮绾у弬鐓ф暟鎹� f1 鐭紪鐮�
+    7)鎵�鏈夊鎴烽珮绾у弬鐓ф暟鎹� f1 鐭紪鐮�
+51.楂樼骇鍙傜収閰嶇疆
+    鏁版嵁婧愯〃瀛楁鏇存敼涓哄悗绔帴鍙o紝浠嶥ataPoolCacheImpl.getInstance().getCacheData("鎵�鏈夎〃淇℃伅");涓幏鍙栨墍鏈夎〃
+    琛ㄥ埆鍚嶏細浠� "a"+table_id涓鸿〃鍒悕
+    閲嶅鍏宠仈琛ㄩ厤缃細SystemPromptService.getPromptRepetitionJoinTable() 锛屽満鏅� 鍏徃 join 閮ㄩ棬 銆佸憳宸oin涓嬪睘
+    鍏宠仈绫诲瀷 left join  , inner join , right join
+    鍗曡〃锛�
+        鏁版嵁婧愯〃澶氬嚭鍒悕
+        瀛楁锛氳〃鍒悕 "."瀛楁鍚�
+    澶氳〃
+        is_multiple = 1
+        relate_filter(澶氳〃鍏宠仈鏉′欢锛�
+        relate_type(鍏宠仈绫诲瀷锛�
+        鍦ㄩ�夋嫨浜嗘暟鎹簮琛�  a 锛宐锛� c , d琛ㄥ埆鍚嶅垎鍒负 a1,a2,a3,a4
+        鍏宠仈绫诲瀷= left join锛堟牴鎹笟鍔¢渶姹傚畾锛岀洰鍓嶅彧鑳介�夋嫨1绉嶅叧鑱旀柟寮�)
+        澶氳〃鍏宠仈鏉′欢 = a1.uuid=a2.uuid,a3.uuid=a1.uuid,a2.uuid=a4.uuid 澶氫釜琛ㄧ殑鍏宠仈鏉′欢 鐢� "," 鍒嗛殧锛�
+        澶氳〃鍏宠仈鏉′欢濉啓椤哄簭搴斾笌琛ㄩ『搴忓搴斾笉鍙鍊�
+        姣忎釜琛ㄥ叧鑱斿繀椤诲湪瀵瑰簲鐨勪竴缁勫叧鑱旀潯浠朵腑鐢ㄥ埌   琛ㄥ埆鍚�"."瀛楁
+        閿欒绀鸿寖锛氣�渁1.uuid=a2.uuid,a3.uuid=a1.uuid鈥�  锛岄珮绾у弬鐓ц〃鍏宠仈涓暟涓庢潯浠朵釜鏁颁笉鍖归厤
+52.鍔熻兘鏉冮檺楠岃瘉
+	蹇呴』閰嶇疆mrbase_sys_function_buttons.api_url閰嶇疆鎸夐挳瀵瑰簲鍚庣鎺ュ彛鍦板潃锛屽涓�楀彿鍒嗛殧,涓嶈兘鍚増鏈彿锛屽锛�
+	鎺ュ彛鍦板潃锛�/api/management/delete-user/v1 閰嶇疆鍦板潃锛�/api/management/delete-user
+	
+53.鏁版嵁鎿嶄綔鏉冮檺楠岃瘉
+	涓昏閽堝鍗曟潯鏁版嵁鐨勫垹 銆佹敼 銆佹煡鎿嶄綔锛屽湪鍒� 銆佹敼 銆佹煡鐨勭浉搴旀帴鍙h皟鐢�
+	蹇呴』璁剧疆mrbase_sys_datamodel_field.field_type,userid锛氬瓨鏀句汉鍛樼殑瀛楁绫诲瀷锛宱rgUuid锛氬瓨鏀剧粍缁囨満鏋勭殑瀛楁绫诲瀷
+	1)Controller鎺ュ彛灞傝皟鐢�
+	2)璋冩硶
+		/**
+		 * 瀵瑰崟鏉℃暟鎹繘琛屾搷浣滅殑鏉冮檺楠岃瘉
+		 * @param tableName 琛ㄥ悕
+		 * @param uuid uuid
+		 * @param type 楠岃瘉绫诲瀷 1=浜哄憳楠岃瘉 2= 缁勭粐鏈烘瀯楠岃瘉 3 涓よ�呴兘楠岃瘉
+		 * @return
+		 */
+		public boolean validDataPermission(String tableName,String uuid ,int type)
+		/**
+		 * 瀵瑰崟鏉℃暟鎹繘琛屾搷浣滅殑鏉冮檺楠岃瘉
+		 * @param fs  涓婁紶鏁版嵁锛屽繀椤诲寘鍚〃鍚� uuid ,鍚︿竴寰嬮�氳繃
+		 * @param type 楠岃瘉绫诲瀷 1=浜哄憳楠岃瘉 2= 绾х粐鏈烘瀯楠岃瘉 3 涓よ�呴兘楠岃瘉  
+		 * @return
+		 */
+		public boolean validDataPermission(FieldSetEntity fs ,int type)
+		/**
+		 * 瀵瑰崟鏉℃暟鎹繘琛屾搷浣滅殑鏉冮檺楠岃瘉 ,鐗规畩鏉冮檺鏉′欢 锛屼笉鏍规嵁浜� 缁勭粐鏈烘瀯杩囨护
+		 * @param tableName 琛ㄥ悕
+		 * @param uuid uuid
+		 * @param filter 鐗规畩鏉冮檺鏉′欢  
+		 * @return
+		 */
+		public boolean validDataPermission(String tableName,String uuid,String filter)
+		/**
+		 * 瀵瑰崟鏉℃暟鎹繘琛屾搷浣滅殑鏉冮檺楠岃瘉 ,鐗规畩鏉冮檺鏉′欢 锛屼笉鏍规嵁浜� 缁勭粐鏈烘瀯杩囨护
+		 * @param fs  涓婁紶鏁版嵁锛屽繀椤诲寘鍚〃鍚� uuid ,鍚︿竴寰嬮�氳繃
+		 * @param filter 鐗规畩鏉冮檺鏉′欢 
+		 * @return
+		 */
+		public boolean validDataPermission(FieldSetEntity fs ,String filter)
+	3)鏁版嵁鎿嶄綔鐨勬潈闄愰獙璇�,鐗规畩鏉′欢璋冪敤绀轰緥
+	if(!permissionService.validDataPermission(fse, "(client_uuid is null or client_uuid='') or client_uuid='"
+	+SpringMVCContextHolder.getCurrentUser().getClient_uuid()+"'")) {
+		SpringMVCContextHolder.getSystemLogger().error(SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getValue(),
+				SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getText());
+		return this.error(SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getValue(), SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getText());
+	}
+	
+	4)鎸変汉鍛樸�佺粍缁囨満鏋勯獙璇佹暟鎹潈闄愯皟鐢ㄧず渚�
+		蹇呴』璁剧疆mrbase_sys_datamodel_field.field_type,userid锛氬瓨鏀句汉鍛樼殑瀛楁绫诲瀷锛宱rgUuid锛氬瓨鏀剧粍缁囨満鏋勭殑瀛楁绫诲瀷
+		if(!permissionService.validDataPermission(fse,CoreConst.DATA_PERMISSION_VALID_TYPE_ALL)) {
+			SpringMVCContextHolder.getSystemLogger().error(SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getValue(),
+					SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getText());
+			return this.error(SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getValue(), SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getText());
+		}
+54.涓氬姟浠g爜閫昏緫澶勭悊
+	瑙勫垯鏄笟鍔′唬鐮佺被蹇呴』娉ㄥ唽鎴恠pring鐨刡ean,琚皟鐢ㄧ殑鏂规硶鍙兘鏈変竴涓狥ieldSetEntity鍙傛暟锛岄噷闈㈠皝瑁呬笟鍔′唬鐮佷腑闇�瑕佺殑鍊硷紝濡傦細
+  public void addBalance(FieldSetEntity fs)
+  {
+    this.logger.info("   ");
+    this.staffBusinessService.addBalance(fs);
+    this.logger.info(" ");
+  }
+  
+54.娑堟伅鐢熸垚
+	/**
+	 * 涓嶆敮鎸佹墜鏈虹
+	 * 鎵�鏈夊簲鐢ㄦ湇鍔$敓鎴愭秷鎭皟浜涙柟娉曞幓娣诲姞娑堟伅
+	 * 鏍规嵁message.server.ip鍙傛暟鍒ゆ柇鏄惁绛変簬127.0.0.1
+	 * 鏄細鍒欑洿鎺ヨ皟writeUserMessage鏈満鏂规硶娣诲姞娑堟伅
+	 * 鍚︼細鍒欒皟娑堟伅鏈嶅姟鍣ㄦ帴鍙f坊鍔犳秷鎭�
+	 * @param userids      娑堟伅鎺ユ敹浜�               蹇呭~
+	 * @param content      娑堟伅鍐呭                 涓嶅繀濉�
+	 * @param title        娑堟伅鏍囬                 蹇呭~
+	 * @param send_user_id 娑堟伅鍙戦�佷汉               蹇呭~
+	 * @param message_type 娑堟伅绫诲瀷                 蹇呭~  
+	 * @param url		   娑堟伅閾炬帴鍦板潃             涓嶅繀濉�
+	 * @param source_table 涓氬姟鏁版嵁琛�               涓嶅繀濉�
+	 * @param source_uuid  涓氬姟鏁版嵁琛╱uid           涓嶅繀濉�
+	 * @param create_by    鍒涘缓浜�       userid      蹇呭~ 
+	 * @param is_send_mail 鏄惁鍙戦�侀偖浠� 0:鍚� 1锛氭槸   蹇呭~
+	 * @param is_send_sms  鏄惁鍙戦�佺煭淇� 0:鍚� 1锛氭槸   蹇呭~
+	 */
+	WebsocketMesssageServiceThread.getInstance().appendMessage(String ....); 
+	/**
+	 * 鏀寔鎵嬫満绔紝鏂规硶閲嶈浇锛屽浜嗕竴涓猰obile_url鍙傛暟
+	 * 鎵�鏈夊簲鐢ㄦ湇鍔$敓鎴愭秷鎭皟浜涙柟娉曞幓娣诲姞娑堟伅
+	 * 鏍规嵁message.server.ip鍙傛暟鍒ゆ柇鏄惁绛変簬127.0.0.1
+	 * 鏄細鍒欑洿鎺ヨ皟writeUserMessage鏈満鏂规硶娣诲姞娑堟伅
+	 * 鍚︼細鍒欒皟娑堟伅鏈嶅姟鍣ㄦ帴鍙f坊鍔犳秷鎭�
+	 * @param userids      娑堟伅鎺ユ敹浜�
+	 * @param content      娑堟伅鍐呭
+	 * @param title        娑堟伅鏍囬
+	 * @param send_user_id 娑堟伅鍙戦�佷汉
+	 * @param message_type 娑堟伅绫诲瀷
+	 * @param url		   娑堟伅閾炬帴鍦板潃
+	 * @param source_table 鏁版嵁琛�
+	 * @param source_uuid  鏁版嵁琛╱uid
+	 * @param create_by    鍒涘缓浜�
+	 * @param is_send_mail 鏄惁鍙戦�侀偖浠�
+	 * @param is_send_sms  鏄惁鍙戦�佺煭淇�
+	 * @param mobile_url   鎵嬫満绔疷RL
+	 * @throws BaseException
+	 */
+	WebsocketMesssageServiceThread.getInstance().appendMessage(String ....);
+	
+	//娑堟伅绫诲瀷
+	//琛ㄥ悕甯搁噺瀹氫箟
+	public static final int MESSAGE_TOP_TYPE_SYSTEM =1; //"绯荤粺娑堟伅";	
+	public static final int MESSAGE_TYPE_ANNOUNCEMENT =11; //"鍏憡娑堟伅";
+	
+	public static final int MESSAGE_TOP_TYPE_TASK =2; //"浠诲姟娑堟伅";
+	public static final int MESSAGE_TYPE_APPROVE =21; //"寰呭姙娑堟伅";		
+	public static final int MESSAGE_TYPE_COORDINATION =22; //"鍗忓悓娑堟伅";
+    public static final int MESSAGE_TYPE_TASK = 23;// "浠诲姟妯″潡娑堟伅";
+
+	public static final int MESSAGE_TOP_TYPE_WARNING =3; //"棰勮娑堟伅";
+	public static final int MESSAGE_TYPE_WARNING =31; //"棰勮娑堟伅";
+	
+55.瀛愯〃鎺掑簭瑙勫垯,涓嫭鍙峰唴琛ㄧず瀛愯〃鎺掑簭 鏀惧埌orderby鍙傛暟涓� 
+String s="main_field1,main_field2,{sub_table1:sub_table1_field1 desc,sub_table1_field2},{sub_table2:sub_table2_field1 desc,sub_table2_field2}"
+56.閿欒淇℃伅涓殑鍔ㄦ�佸彉閲忔浛鎹�
+鏇垮垯浣跨敤{}鎶婂彉閲忓悕鎷捣鏉ワ紝姝ゅ彉閲忓悕灏嗗湪Exception涓幏鍙栵細DATA_VERIFY_UNIQUE_ERROR("鏁版嵁涓嶆槸鍞竴锛歿value}", ModuleEnum.CORE.getValue() + "097"),
+绀轰緥锛�
+	be.setMessagePara("fieldxxxx","鏈幏鍙栧埌鐧诲綍Token淇℃伅");
+	be.setMessagePara("fieldxxxx",fs.getString("field"));
+"fieldxxxx"瀵瑰簲閿欒瀹氫箟涓殑{fieldxxxx}
+
+56.鍙嶅皠寮曠敤bean :com.product.core.util.ReflectUtil
+	/**
+	 * 
+	 * @param beanName 琚唬鐞嗗鍍廱ean 鍚嶇О
+	 * @param methodName 鏂规硶鍚嶇О
+	 * @param objects  鍙傛暟
+	 * @return
+	 * @throws BaseException
+	 */
+	public static  Object invoke(String beanName,String methodName,Object[] objects) throws BaseException
+
+57.浜х敓娑堟伅鐨勮〃锛屽繀椤诲湪瀵瑰簲琛ㄧ殑produce_msg瀛楁涓�间负1
+
+58.鑷姩鍙戣捣娴佺▼
+    com.lx.tool.flow.service.FlowService#autoSendFlow
+
+    鎻忚堪锛�
+        锛�1锛塻ervice鏂规硶锛岄潪鎺ュ彛鏂规硶
+        锛�2锛夋牴鎹紶鍏ョ殑鍙傛暟锛岃嚜鍔ㄥ彂璧锋祦绋嬶紝鍒涘缓娴佺▼鐨勭涓�姝ワ紝鐩存帴鍒般�愬紑濮嬨�戠幆鑺�
+
+    浼犲叆鍙傛暟锛歠se
+        {
+            "type_code"锛� "5a1dd74e-5b69-479c-afa0-a7db3e7fd6b2",
+            "~table~": "lx_oa_conference_apply",
+            "accepters": "376",
+            "uuid": "5aadc03d-6ae3-470c-8507-4aaf660d9495",
+            "flow_title": "6c娴嬭瘯鑷姩鍙戣捣娴佺▼"
+        }
+
+    鍙傛暟鎻忚堪锛�
+        锛�1锛塼ype_code锛氱被鍨媢uid锛岀被鍨嬪敮涓�璇嗗埆
+        锛�2锛墌table~锛氫笟鍔¤〃鍚�
+        锛�3锛塧ccepters锛氭帴鏀朵汉锛屽彧鑳戒负涓�涓�
+        锛�4锛塽uid锛氫笟鍔¤〃uuid
+        锛�5锛塮low_title锛氭祦绋嬫爣棰�
+59.浜т腑鎵撳寘閮ㄧ讲
+	jar閮ㄧ讲锛氭墦寮�宸ョ▼鐨刾om.mxl,鍙抽敭->Run as -> Maven install->杩涘叆宸ョ▼鐩綍->target鐩綍->copy 鎶婂畬鍖呯殑宸ョ▼jar锛屾斁鍒版湇鍔″櫒鐨勮繍琛岀洰褰曚笅鐨刲ib鐩綍涓嬶紙渚嬪200涓婏細D:\LXServer\product-server\lib锛�
+	鍓嶇鏂囦欢閮ㄧ讲锛氳繘鍏x-web骞惰繍琛宲acked.bat锛岄噸鏂扮敓鎴恉ist鐩綍->杩涘叆dist鐩綍copy闄aseUrl.js浠ュ鐨勬墍鏈夋枃浠讹紝鏀惧埌鏈嶅姟鍣ㄧ殑杩愯鐩綍涓嬬殑web鐩綍涓嬨��
+	閲嶅惎锛堣繍琛屾闈㈠揩鎹烽敭锛�
+	
+60.鍒嗛〉鏌ヨsql
+	select  '6973' as staff_uuid  杩欑娌℃湁from鐨勮鍙�,瑕佹坊鍔� from dual锛屽惁鍒欏垎椤垫煡璇細鍑洪敊
+
+61.鏌ヨ鍗曟潯璁板綍锛実etFieldSet... 涓� getFieldSetEntity...鐨勫尯鍒細 鍓嶉潰鏂规硶鍦ㄦ病鏈夋煡鍒版暟鎹椂杩斿洖涓嶄负绌猴紝鍚庨潰鏂规硶鍦ㄦ病鏈夋煡鍒版暟鎹椂杩斿洖null
+
+62.閰嶇疆鎶ヨ〃
+	鍋囪杩囨护鏉′欢涓�"start_time>=('2021-12-01 00:00:00','%Y-%m-%d %H:%i:%s')"
+	{$$} 绫诲瀷涓�0锛屽彧鍙栧�硷紝鍗充负"2021-12-01 00:00:00"
+	{^^} 绫诲瀷涓�1锛屽彇闄ゅ紑瀛楁澶栫殑鎵�鏈夊唴瀹癸紝鍗充负">=('2021-12-01 00:00:00','%Y-%m-%d %H:%i:%s')"
+	{&&} 绫诲瀷涓�2锛屽彇鎵�鏈夊唴瀹癸紝鍖呭惈瀛楁锛屽嵆涓�"start_time>=('2021-12-01 00:00:00','%Y-%m-%d %H:%i:%s')"
+	[[]] 鑻ユ槸鏍规嵁涓婇潰鐨勬墍鏈夋柟寮忔浛鎹箣鍚庝緷鐒跺瓨鍦ㄤ换鎰忎竴绉嶏紝鍓旈櫎鍖呭惈鍦ㄥ唴鐨勮繃婊ゆ潯浠�
+
+63.鏈夋湭鐭ラ敊璇啓娉�
+		catch (BaseException e) {
+            throw e;
+        }
+        catch (Exception e) {
+        	BaseException be=new BaseException(FlowCode.SIGN_FAIL);
+        	//SIGN_FAIL("绛剧珷澶辫触:{error}", ModuleEnum.ADMINISTRAT.getValue() + "080"),
+        	//鍘熼敊璇殑淇℃伅浣滀负鍙傛暟浼犺繃鍘伙紝涓�骞舵樉绀�
+        	be.setMessagePara("error", e.getMessage());
+            throw be;
+        }
+64.鏁版嵁寤烘ā瑙勫垯
+   瀛楁鏄剧ず鍚嶇О锛�4-6涓瓧锛岀簿缁冿紝鎻忚堪鎵嶆槸鍐欏娉ㄧ被鍨嬫枃瀛�
+   瀛楁绫诲瀷锛岀敤鎴烽�塙serId锛屽浜洪�塙serIds,缁勭粐鏈烘瀯閫塷rgUuid,澶氫釜閫塷rgUuids锛屼笉鑳介�塖tring, 涓婚敭pk锛屽紩鐢ㄥ閿〃瀛楁閫塽uid
+   鏄弬鐓х殑锛屼竴瀹氳鍔犱笂鍙傜収鍚嶏紝楂樼骇鍙傜収鍚嶅拰鏁版嵁瀛楀吀鍚嶏紝鏁版嵁瀛楀吀瑕佸姞銆妜xx銆嬫潵鍖哄垎
+   寮曠敤澶栭敭琛紝涓�瀹氳閫夛紝涓斿搴旂殑瀛楁绫诲瀷涓�瀹氳鏄疷UID
+        
+        
\ No newline at end of file

--
Gitblit v1.9.2