From 1503b9d7ed1d71b98bd5715c23d236ef3c019ead Mon Sep 17 00:00:00 2001
From: hzj <1831054011@qq.com>
Date: 星期一, 13 十月 2025 15:40:20 +0800
Subject: [PATCH] Merge branch 'main' of http://8.134.184.104:10801/r/came

---
 ConfigLoader.java          |    1 
 admin_save_127.asp         |   88 +++++++
 alipay-config.properties   |    1 
 SimpleQRCodeGenerator.java |    1 
 admin_save_27.gds          |  158 +++++++++++++
 weixin/upload_file.php     |  216 ++++++++++++++++++
 weixin/upload_test.html    |  214 +++++++++++++++++
 AlipayQRCodeUtil.java      |    1 
 pom.xml                    |    1 
 AlipayQRCodeGenerator.java |    1 
 10 files changed, 682 insertions(+), 0 deletions(-)

diff --git a/AlipayQRCodeGenerator.java b/AlipayQRCodeGenerator.java
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/AlipayQRCodeGenerator.java
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/AlipayQRCodeUtil.java b/AlipayQRCodeUtil.java
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/AlipayQRCodeUtil.java
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/ConfigLoader.java b/ConfigLoader.java
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/ConfigLoader.java
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/SimpleQRCodeGenerator.java b/SimpleQRCodeGenerator.java
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/SimpleQRCodeGenerator.java
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/admin_save_127.asp b/admin_save_127.asp
new file mode 100644
index 0000000..5ab7118
--- /dev/null
+++ b/admin_save_127.asp
@@ -0,0 +1,88 @@
+
+<%
+'-------------------------------------------------------------鍙戠エ鐢宠
+ServiceOrdID= SafeRequest(request("ServiceOrdID"))
+DispatchOrdID=SafeRequest(request("DispatchOrdID"))
+InvoiceID=SafeRequest(request("InvoiceID"))
+ReturnID	= SafeRequest(request("ReturnID"))
+
+InvoiceType	= SafeRequest(request("InvoiceType"))	'鍙戠エ绫诲瀷
+InvoiceName	= SafeRequest(request("InvoiceName"))	'鍙戠エ鎶ご
+InvoiceMakeout		= SafeRequest(request("InvoiceMakeout"))	'鍙戠エ澶囨敞
+
+InvoiceCompanyPhone= SafeRequest(request("InvoiceCompanyPhone"))	'浼佷笟鐢佃瘽
+InvoiceCompanyID	= SafeRequest(request("InvoiceCompanyID"))	'绾崇◣璇嗗埆鍙�
+InvoiceCompanyAdd	= SafeRequest(request("InvoiceCompanyAdd"))	'浼佷笟娉ㄥ唽鍦板潃
+InvoiceCompanyBank	= SafeRequest(request("InvoiceCompanyBank"))	'浼佷笟寮�鎴烽摱琛�
+InvoiceCompanyBankNo= SafeRequest(request("InvoiceCompanyBankNo"))	'浼佷笟閾惰璐﹀彿
+InvoiceZipCode		= SafeRequest(request("InvoiceZipCode"))	'閭紪
+Invoice_strAdd		= SafeRequest(request("Invoice_strAdd"))	'閭瘎鍦板潃
+Invoice_strName		= SafeRequest(request("Invoice_strName"))	 '鑱旂郴浜�
+Invoice_strPhone	= SafeRequest(request("Invoice_strPhone"))	'鑱旂郴鐢佃瘽
+Invoice_strEmail	= SafeRequest(request("Invoice_strEmail"))	'鐢靛瓙閭
+
+InvoiceMoney		= SafeRequest(request("InvoiceMoney"))	 '鍙戠エ閲戦
+
+If InvoiceMoney="" Or InvoiceMoney="0" Then%>
+	Response.Write "寮�绁ㄩ噾棰濅笉鍙负0!!"
+	Response.End
+End If
+If InvoiceMoney="" Or InvoiceMoney="0" Or InvoiceType="" Or ServiceOrdID="" Then
+    	Response.Write "鍙傛暟閿欒!!"
+	    Response.End
+End If
+
+If InvoiceID="0" Or InvoiceID="" Then
+	sql="insert into InvoiceData (ServiceOrderIDPK, InvoiceType, InvoiceName, InvoiceMakeout, InvoiceCompanyPhone, InvoiceCompanyID, InvoiceCompanyAdd, InvoiceCompanyBank, InvoiceCompanyBankNo, InvoiceZipCode, Invoice_strAdd, Invoice_strName, Invoice_strPhone,Invoice_strEmail,InvoiceMoney,ApplyOAID) values ("&ServiceOrdID&","&InvoiceType&",'"&InvoiceName&"','"&InvoiceMakeout&"','"&InvoiceCompanyPhone&"','"&InvoiceCompanyID&"','"&InvoiceCompanyAdd&"','"&InvoiceCompanyBank&"','"&InvoiceCompanyBankNo&"','"&InvoiceZipCode&"','"&Invoice_strAdd&"','"&Invoice_strName&"','"&Invoice_strPhone&"','"&Invoice_strEmail&"',"&InvoiceMoney&","&session("adminID")&")"
+	objConn.Execute sql
+Else
+	sql="update InvoiceData set InvoiceType="&InvoiceType&",InvoiceName='"&InvoiceName&"',InvoiceMakeout='"&InvoiceMakeout&"',InvoiceCompanyPhone='"&InvoiceCompanyPhone&"',InvoiceCompanyID='"&InvoiceCompanyID&"',InvoiceCompanyAdd='"&InvoiceCompanyAdd&"',InvoiceCompanyBank='"&InvoiceCompanyBank&"',InvoiceCompanyBankNo='"&InvoiceCompanyBankNo&"',InvoiceZipCode='"&InvoiceZipCode&"',Invoice_strAdd='"&Invoice_strAdd&"',Invoice_strEmail='"&Invoice_strEmail&"',Invoice_strName='"&Invoice_strName&"',Invoice_strPhone='"&Invoice_strPhone&"',AuditStatus=0,AuditMakeout='"&AuditMakeout&"',InvoiceNo='"&InvoiceNo&"',InvoiceMoney="&InvoiceMoney&",AuditOAID="&session("adminID")&",AuditTime=getdate() where InvoiceID="&InvoiceID
+	objConn.Execute sql
+End If
+
+Call OA_Running("鐢宠鍙戠エ:"&ServiceOrdID)
+rsRollbackTrans(objConn.Errors.count)
+
+'浼佸井閫氱煡%>
+<!--#include virtual="/weixin/JsonPost_1000006.gds"-->
+<%
+Set rs = Server.CreateObject("ADODB.Recordset")
+sql="select InvoiceID from InvoiceData where  AuditStatus not in (3,4) and ServiceOrderIDPK="&ServiceOrdID
+rs.open sql,objConn,1,1
+If not rs.Eof then
+	InvoiceID	= rs("InvoiceID")
+end if
+rs.close()
+title="鏂扮殑鍙戠エ鐢宠(PC鍚庡彴)"
+description=InvoiceName&",鏈変竴涓柊鐨勫彂绁ㄧ敵璇�,璇峰嵆鏃跺鐞�"
+sql="SELECT OA_weixinID=STUFF((SELECT '|' + OA_weixinUserID from OA_User where OA_Power like '%030205%' and OA_execLevel>=1 FOR XML PATH('')), 1, 1, '')"
+rs.open sql,objConn,1,1
+If not rs.Eof then
+	touser	= rs("OA_weixinID")
+end if
+rs.close()
+'touser="liaojunliang|ylkx_vicgame"	'娴嬭瘯
+If touser<>"" And title<>"" Then
+	'寰俊OA淇℃伅涓嬪彂鎺ュ彛
+	appUrl="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="&access_token
+	args1="{"
+	args1=args1&"""touser"": """&touser&""","	'鎴愬憳ID鍒楄〃锛堟秷鎭帴鏀惰�咃紝澶氫釜鎺ユ敹鑰呯敤鈥榺鈥欏垎闅旓紝鏈�澶氭敮鎸�1000涓級銆傜壒娈婃儏鍐碉細鎸囧畾涓篅all锛屽垯鍚戝叧娉ㄨ浼佷笟搴旂敤鐨勫叏閮ㄦ垚鍛樺彂閫� |liaojunliang
+	args1=args1&"""toparty"": """","		'閮ㄩ棬ID鍒楄〃锛屽涓帴鏀惰�呯敤鈥榺鈥欏垎闅旓紝鏈�澶氭敮鎸�100涓�傚綋touser涓篅all鏃跺拷鐣ユ湰鍙傛暟
+	args1=args1&"""totag"": """","			'鏍囩ID鍒楄〃锛屽涓帴鏀惰�呯敤鈥榺鈥欏垎闅斻�傚綋touser涓篅all鏃跺拷鐣ユ湰鍙傛暟
+	args1=args1&"""agentid"": 1000006,"			'浼佷笟搴旂敤鐨刬d锛屾暣鍨嬨�傚彲鍦ㄥ簲鐢ㄧ殑璁剧疆椤甸潰鏌ョ湅
+	args1=args1&"""msgtype"": ""news"","
+	args1=args1&"""news"": {"
+		args1=args1&"""articles"":["
+			args1=args1&"{"
+			args1=args1&"""title"": ""銆�"&title&"銆�"","
+			args1=args1&"""description"": """&description&""","
+			args1=args1&"""url"": ""https://sys.966120.com.cn/m_Invoice.gds?InvoiceID="&InvoiceID&"&ServiceOrdID="&ServiceOrdID&"&order_type=11"""
+			args1=args1&"}"  
+		args1=args1&"]"
+	args1=args1&"}"
+	args1=args1&"}"
+	call PostBody(appUrl,args1)
+End If
+Response.Write "success"
+Response.End
+%>
\ No newline at end of file
diff --git a/admin_save_27.gds b/admin_save_27.gds
new file mode 100644
index 0000000..d3f6155
--- /dev/null
+++ b/admin_save_27.gds
@@ -0,0 +1,158 @@
+<%
+
+
+'鍑鸿溅鐗╁搧鍗曞彿鐢熸垚
+Function NewDispatchMRPOrderID(OrderType,DispatchOrdID,Type1)
+	NewDispatchMRPOrderID="MRP-"&OrderType&"-"&DispatchOrdID&Type1
+End Function
+'鍑鸿溅鐗╁搧鍗曡繑鍥�
+Function DispatchMRPOrderReturn(OrderType,DispatchOrdID)
+	MRP_OrderID_Out=NewDispatchMRPOrderID(OrderType,DispatchOrdID,"Out")
+	MRP_OrderID=NewDispatchMRPOrderID(OrderType,DispatchOrdID,"In")
+	OutWarehouseID=5	'杞嚭浠�(鍑鸿溅浠诲姟)
+	InWarehouseID=2		'杞叆浠�(闆嗙洓鎬婚儴姝e父浠撲竴)
+	Set adminrs = Server.CreateObject("ADODB.Recordset")
+	sql="select MRP_OrderID from MRP_OrderManoeuvre where MRP_OrderID='"&MRP_OrderID&"' and OrderState=3"
+	adminrs.open sql,objConn,1,1
+	if adminrs.Eof Then
+		adminrs.close()
+		sql="select MRP_OrderID from MRP_OrderManoeuvre where MRP_OrderID='"&MRP_OrderID_Out&"' and OrderState=3"
+		adminrs.open sql,objConn,1,1
+		if not adminrs.Eof then
+			'鏂板缓杞粨鍗�
+			sql="insert into MRP_OrderManoeuvre (MRP_OrderID,OutWarehouseID,InWarehouseID,OrderState,OrderTime_OAid,TotalQty,OrderRemarks,AuditTime,AuditTime_OAid,OutTime,OutTime_OAid,InTime,InTime_OAid) select '"&MRP_OrderID&"',"&OutWarehouseID&","&InWarehouseID&",3,"&session("adminID")&",TotalQty,OrderRemarks,getdate(),"&session("adminID")&",getdate(),"&session("adminID")&",getdate(),"&session("adminID")&" from MRP_OrderManoeuvre where MRP_OrderID='"&MRP_OrderID_Out&"' and OrderState=3"
+			objConn.Execute sql
+			sql="insert into MRP_OrderDetail (MRP_OrderIDPK,StItmIDPK,OD_Qty,OD_QtyA,OD_Price,OD_Remarks) select '"&MRP_OrderID&"',StItmIDPK,OD_Qty,OD_QtyA,OD_Price,OD_Remarks from MRP_OrderDetail where MRP_OrderIDPK='"&MRP_OrderID_Out&"'"
+			objConn.Execute sql
+			sql="insert into MRP_Stock (StItmIDPK,StockQty,StockWarehouseID,MRP_OrderIDPK,StockTime_OAid) select StItmIDPK,-StockQty,"&OutWarehouseID&",'"&MRP_OrderID&"',"&session("adminID")&" from MRP_Stock where MRP_OrderIDPK='"&MRP_OrderID_Out&"' and StockWarehouseID="&OutWarehouseID
+			objConn.Execute sql
+			sql="insert into MRP_Stock (StItmIDPK,StockQty,StockWarehouseID,MRP_OrderIDPK,StockTime_OAid) select StItmIDPK,StockQty,"&InWarehouseID&",'"&MRP_OrderID&"',"&session("adminID")&" from MRP_Stock where MRP_OrderIDPK='"&MRP_OrderID_Out&"' and StockWarehouseID="&OutWarehouseID
+			objConn.Execute sql
+		end If
+	End If
+	adminrs.close()
+End Function
+
+Function Get_TritonshAPI(UserUUID,orderStatus,ServiceOrdID,iuid,CoName,CoPhone,orderPrice,orderSource)
+	'url="https://api.966120.com.cn/v1/cuituAPI.php"
+	'Origin="OrdID="&ServiceOrdID&"&method="&method&"&iuid="&iuid&"&uuid="&uuid
+	'HTMLCODE= GetBody(url,Origin)
+	appUrl="https://market.tritonsh.com/order/orderDeal"
+	args1="{"
+	'args1=args1&"""id"": """&uuid&""","			'瀵规柟璁㈠崟ID
+	args1=args1&"""userId"": """&iuid&""","	'瀵规柟鐢ㄦ埛ID(浠嬬粛浜篒D)
+	args1=args1&"""orderStatus"": """&orderStatus&""","			'璁㈠崟鐘舵��	0锛氬垵濮嬭鍗� , 1锛氭渶缁堣鍗曠姸鎬�
+	args1=args1&"""orderType"":0,"				'涓嬪崟绫诲瀷	0:鏈汉涓嬪崟,1:浠d汉涓嬪崟
+	If orderSource="1" Then
+		args1=args1&"""orderSource"":""浠e涓嬪崟"","
+	ElseIf orderSource="2" Then
+		args1=args1&"""orderSource"":""闈㈠闈簩缁寸爜"","
+	ElseIf  orderSource="3" Then
+		args1=args1&"""orderSource"":""鎺ㄥ箍娴锋姤"","
+	End If
+	args1=args1&"""orderUserPhone"": """&CoPhone&""","		'瀹㈡埛鎵嬫満鍙�
+	args1=args1&"""userName"": """&CoName&""","				'瀹㈡埛濮撳悕
+	args1=args1&"""orderPrice"": """&orderPrice&""","	'璁㈠崟閲戦
+	args1=args1&"""orderServiceNo"": """&ServiceOrdID&""""	'璁㈠崟鏈嶅姟鍗曞彿
+	args1=args1&"}"
+	'call PostBody(appUrl,args1)
+	'Response.Write args1&"<br>"
+	HTMLCODE= PostBody1(appUrl,args1)
+	sql="update ServiceOrder set ToUserUUID="&UserUUID&" where ServiceOrdID="&ServiceOrdID
+	objConn.Execute sql
+	sql="update UserUUID set ToServiceOrdID="&ServiceOrdID&",TritonshJson='"&HTMLCODE&"',TritonshTime=getdate() where id="&UserUUID
+	objConn.Execute sql
+	'Response.Write HTMLCODE&"<br>"
+	'Response.end
+	'HTMLCODE= GetBody(url,Origin)
+End Function
+
+DispatchOrdID			= SafeRequest(Request("DispatchOrdID"))'璋冨害鍗曞彿
+ServiceOrdID			= SafeRequest(Request("ServiceOrdID"))	'瀵瑰簲鏈嶅姟鍗曞彿
+ServiceOrdDel			= SafeRequest(Request("ServiceOrdDel"))'鏄惁鍚屾椂鍙栨秷鏈嶅姟鍙�(1鏄�,0鍚�)
+Del						= SafeRequest(Request("Del"))	'寮哄埗鍙栨秷(YES/NO)
+CancelReason			= SafeRequest(Request("CancelReason"))'鍙栨秷鍘熷洜
+CancelReasonTXT			= SafeRequest(Request("CancelReasonTXT"))'鍙栨秷鍘熷洜澶囨敞
+CancelReasonTXT			= CancelReasonTXT&"[鍙栨秷鎿嶄綔:"&OAUser(session("adminID"),"UserName")&"]"
+Source					= SafeRequest(Request("Source"))	'鍙栨秷鏉ユ簮(PC/Phone)
+If CancelReason="" Then CancelReason=0
+If ServiceOrdDel="" Then ServiceOrdDel=0
+If Source="Phone" Then SourceURL="m_"
+Set rs = Server.CreateObject("ADODB.Recordset")
+'楠岃瘉璋冨害鍗曟槸鍚﹀彲鍙栨秷
+If DispatchOrdID<>"" Then
+	If Del<>"YES" then
+		sql="select DispatchOrdState,DispatchOrd_AP_Check from DispatchOrd where DispatchOrdID="&DispatchOrdID
+		rs.open sql,objConn,1,1
+		If rs.eof Then
+			Response.Redirect "/DispatchOrder.gds?SystemMessageType=4&SMT=1"
+		Else
+			DispatchOrdState	= rs("DispatchOrdState")
+			DispatchOrd_AP_Check= rs("DispatchOrd_AP_Check")
+			If CInt(DispatchOrdState)>=4 Then
+				Response.Redirect "/"&SourceURL&"DispatchOrder.gds?DispatchOrdID="&DispatchOrdID&"&SystemMessageType=4&SMT=10"
+			ElseIf DispatchOrd_AP_Check=1 Then
+				Response.Redirect "/"&SourceURL&"DispatchOrder.gds?DispatchOrdID="&DispatchOrdID&"&SystemMessageType=4&SMT=11"
+			End if
+		End If
+		rs.close()
+	End if
+	sql="update DispatchOrd set DispatchOrdState=10,DispatchOrdStartDate=getdate(),DispatchOrdCancelReason="&CancelReason&",DispatchOrdCancelReasonTXT='"&CancelReasonTXT&"',DispatchOrd_OAName=(SELECT STUFF(( select ',' + OA_Name from DispatchOrd_Entourage,OA_User where OA_User_ID=EntourageOAid and DispatchOrdIDDt=DispatchOrdID and EntourageState<>4 order by EntourageLead desc FOR XML PATH('')), 1, 1, '') AS EntourageName),DispatchOrd_OAEntourage=(SELECT STUFF(( select ',' + vtext from DispatchOrd_Entourage,OA_User,dictionary where OA_User_ID=EntourageOAid and DispatchOrdIDDt=DispatchOrdID and EntourageState<>4 and vtitle='DispatchOrdEntourage' and vID=EntourageID order by EntourageLead desc FOR XML PATH('')), 1, 1, '') AS EntouragePost),DispatchOrdUpdateOAid="&session("adminID")&",DispatchOrdUpdateTime=getdate() where DispatchOrdID="&DispatchOrdID
+	objConn.Execute sql
+	'淇敼鐩稿叧鏈嶅姟鍗曠姸鎬�
+	If ServiceOrdID<>"" then
+		sql="select DispatchOrdID from DispatchOrd where ServiceOrdIDDt="&ServiceOrdID&" and DispatchOrdState<>10"
+		rs.open sql,objConn,1,1
+		If rs.eof Then
+			If ServiceOrdDel="1" Then
+				sql="update ServiceOrder set ServiceOrdState=4,ServiceOrd_AP_ID="&session("adminID")&",ServiceOrd_AP_Time=getdate(),ServiceOrdCancelReason="&CancelReason&",ServiceOrdCancelReasonTXT='"&CancelReasonTXT&"' where ServiceOrdID="&ServiceOrdID
+			else
+				sql="update ServiceOrder set ServiceOrdState=2,ServiceOrdStartDate=getdate(),ServiceOrdCancelReason="&CancelReason&",ServiceOrdCancelReasonTXT='"&CancelReasonTXT&"' where ServiceOrdID="&ServiceOrdID
+			End If
+			objConn.Execute sql
+		End If
+		rs.close()
+	End If
+	'閲嶇偣璁櫒褰掕繕
+	Call DispatchMRPOrderReturn(14,DispatchOrdID)
+	ReturnURL="/"&SourceURL&"DispatchOrder.gds?DispatchOrdID="&DispatchOrdID
+	Call OA_Running("鍙栨秷璋冨害鍗�:"&DispatchOrdID)
+ElseIf ServiceOrdID<>"" Then
+	If Del<>"YES" then
+		sql="select ServiceOrdState,ServiceOrd_AP_Check,ServiceOrdCoName,ServiceOrdCoPhone,ToUserUUID from ServiceOrder where ServiceOrdID="&ServiceOrdID
+		rs.open sql,objConn,1,1
+		If rs.eof Then
+			Response.Redirect "/"&SourceURL&"ServiceOrder_List.gds?SystemMessageType=4&SMT=1"
+		Else
+			ServiceOrdState	= rs("ServiceOrdState")
+			ServiceOrdCoName= rs("ServiceOrdCoName")
+			ServiceOrdCoPhone= rs("ServiceOrdCoPhone")
+			ToUserUUID		= rs("ToUserUUID")
+			If CInt(ServiceOrdState)=3 Then
+				Response.Redirect "/"&SourceURL&"ServiceOrder.gds?ServiceOrdID="&ServiceOrdID&"&SystemMessageType=4&SMT=10"
+			ElseIf ServiceOrd_AP_Check=1 Then
+				Response.Redirect "/"&SourceURL&"ServiceOrder.gds?ServiceOrdID="&ServiceOrdID&"&SystemMessageType=4&SMT=11"
+			End if
+		End If
+		rs.close()
+	End if
+	sql="update ServiceOrder set ServiceOrdState=4,ServiceOrd_AP_ID="&session("adminID")&",ServiceOrd_AP_Time=getdate(),ServiceOrdCancelReason="&CancelReason&",ServiceOrdCancelReasonTXT='"&CancelReasonTXT&"' where ServiceOrdState<>4 and ServiceOrdID="&ServiceOrdID
+	objConn.Execute sql
+	'钀ラ攢灏忕▼搴忔暟鎹洿鏂�
+	If ToUserUUID<>"0" And ToUserUUID<>"" Then 
+		sql="select top 1 id,iuid from UserUUID where id="&ToUserUUID
+		rs.open sql,objConn,1,1
+		if not rs.eof Then
+			iuid=rs("iuid")
+			Call Get_TritonshAPI(ToUserUUID,1,ServiceOrdID,iuid,ServiceOrdCoName,ServiceOrdCoPhone,0)
+		End If
+		rs.close()
+	End If
+	ReturnURL="/"&SourceURL&"ServiceOrder_List.gds?OrdState=0"
+	Call OA_Running("鍙栨秷璋冨害鍗�:"&ServiceOrdID)
+End If
+
+objConn.Execute "exec OrdDataUP "&ServiceOrdID
+rsRollbackTrans(objConn.Errors.count)
+Response.Redirect ReturnURL&"&SystemMessageType=3&SMT=8&h_menu1_1="&session("h_menu1_1")
+Response.End
\ No newline at end of file
diff --git a/alipay-config.properties b/alipay-config.properties
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/alipay-config.properties
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/weixin/upload_file.php b/weixin/upload_file.php
new file mode 100644
index 0000000..1acba43
--- /dev/null
+++ b/weixin/upload_file.php
@@ -0,0 +1,216 @@
+<?php
+header('Content-Type: application/json; charset=utf-8');
+
+// 璁剧疆閿欒鎶ュ憡
+error_reporting(E_ALL);
+ini_set('display_errors', 1);
+
+// 鍏佽璺ㄥ煙璇锋眰锛堝鏋滈渶瑕侊級
+header('Access-Control-Allow-Origin: *');
+header('Access-Control-Allow-Methods: POST');
+header('Access-Control-Allow-Headers: Content-Type');
+
+// 妫�鏌ヨ姹傛柟娉�
+if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
+    echo json_encode([
+        'success' => false,
+        'message' => '鍙敮鎸丳OST璇锋眰'
+    ]);
+    exit;
+}
+
+// 鑾峰彇鍙傛暟
+$uploadFileName = isset($_POST['uploadFileName']) ? $_POST['uploadFileName'] : '';
+$file = isset($_FILES['file']) ? $_FILES['file'] : null;
+
+// 楠岃瘉鍙傛暟
+if (empty($uploadFileName)) {
+    echo json_encode([
+        'success' => false,
+        'message' => 'uploadFileName鍙傛暟涓嶈兘涓虹┖'
+    ]);
+    exit;
+}
+
+if (!$file || $file['error'] !== UPLOAD_ERR_OK) {
+    $errorMessage = '鏂囦欢涓婁紶澶辫触';
+    if ($file) {
+        switch ($file['error']) {
+            case UPLOAD_ERR_INI_SIZE:
+                $errorMessage = '鏂囦欢澶у皬瓒呰繃php.ini闄愬埗';
+                break;
+            case UPLOAD_ERR_FORM_SIZE:
+                $errorMessage = '鏂囦欢澶у皬瓒呰繃琛ㄥ崟闄愬埗';
+                break;
+            case UPLOAD_ERR_PARTIAL:
+                $errorMessage = '鏂囦欢鍙湁閮ㄥ垎琚笂浼�';
+                break;
+            case UPLOAD_ERR_NO_FILE:
+                $errorMessage = '娌℃湁鏂囦欢琚笂浼�';
+                break;
+            case UPLOAD_ERR_NO_TMP_DIR:
+                $errorMessage = '鎵句笉鍒颁复鏃舵枃浠跺す';
+                break;
+            case UPLOAD_ERR_CANT_WRITE:
+                $errorMessage = '鏂囦欢鍐欏叆澶辫触';
+                break;
+        }
+    }
+    echo json_encode([
+        'success' => false,
+        'message' => $errorMessage
+    ]);
+    exit;
+}
+
+// 楠岃瘉鏂囦欢绫诲瀷锛堝彲閫夛級
+$allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'];
+if (!in_array($file['type'], $allowedTypes)) {
+    echo json_encode([
+        'success' => false,
+        'message' => '涓嶆敮鎸佺殑鏂囦欢绫诲瀷锛�' . $file['type']
+    ]);
+    exit;
+}
+
+// 楠岃瘉鏂囦欢澶у皬锛堥檺鍒朵负10MB锛�
+$maxFileSize = 10 * 1024 * 1024; // 10MB
+if ($file['size'] > $maxFileSize) {
+    echo json_encode([
+        'success' => false,
+        'message' => '鏂囦欢澶у皬瓒呰繃闄愬埗锛堟渶澶�10MB锛�'
+    ]);
+    exit;
+}
+
+try {
+    // 鍒涘缓骞存湀鐩綍
+    $yearMonth = date('Ym');
+    $uploadDir = "../upload/{$yearMonth}/";
+    
+    // 濡傛灉鐩綍涓嶅瓨鍦ㄥ垯鍒涘缓
+    if (!is_dir($uploadDir)) {
+        if (!mkdir($uploadDir, 0755, true)) {
+            throw new Exception('鏃犳硶鍒涘缓鐩綍锛�' . $uploadDir);
+        }
+    }
+    
+    // 鐢熸垚鍞竴鏂囦欢鍚�
+    $fileExtension = pathinfo($file['name'], PATHINFO_EXTENSION);
+    $uniqueFileName = $uploadFileName . '_' . time() . '_' . uniqid() . '.' . $fileExtension;
+    $filePath = $uploadDir . $uniqueFileName;
+    
+    // 绉诲姩涓婁紶鐨勬枃浠�
+    if (!move_uploaded_file($file['tmp_name'], $filePath)) {
+        throw new Exception('鏂囦欢淇濆瓨澶辫触');
+    }
+    
+    // 濡傛灉鏄浘鐗囷紝鐢熸垚缂╃暐鍥�
+    $thumbnailPath = '';
+    if (in_array($file['type'], ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'])) {
+        $thumbnailPath = $uploadDir . 's_' . $uniqueFileName;
+        createThumbnail($filePath, $thumbnailPath, 100, 0);
+    }
+    
+    // 杩斿洖鎴愬姛淇℃伅
+    $response = [
+        'success' => true,
+        'message' => '鏂囦欢涓婁紶鎴愬姛',
+        'data' => [
+            'originalName' => $file['name'],
+            'fileName' => $uniqueFileName,
+            'filePath' => str_replace('../', 'https://sys.966120.com.cn/', $filePath),
+            'thumbnailPath' => $thumbnailPath ? str_replace('../', 'https://sys.966120.com.cn/', $thumbnailPath) : '',
+            'fileSize' => $file['size'],
+            'fileType' => $file['type'],
+            'uploadTime' => date('Y-m-d H:i:s')
+        ]
+    ];
+    
+    echo json_encode($response);
+    
+} catch (Exception $e) {
+    echo json_encode([
+        'success' => false,
+        'message' => '涓婁紶澶辫触锛�' . $e->getMessage()
+    ]);
+}
+
+/**
+ * 鍒涘缓缂╃暐鍥�
+ * @param string $sourcePath 婧愬浘鐗囪矾寰�
+ * @param string $targetPath 鐩爣缂╃暐鍥捐矾寰�
+ * @param int $width 瀹藉害
+ * @param int $height 楂樺害锛�0琛ㄧず鎸夋瘮渚嬬缉鏀撅級
+ */
+function createThumbnail($sourcePath, $targetPath, $width, $height) {
+    $imageInfo = getimagesize($sourcePath);
+    if (!$imageInfo) {
+        return false;
+    }
+    
+    $sourceWidth = $imageInfo[0];
+    $sourceHeight = $imageInfo[1];
+    $imageType = $imageInfo[2];
+    
+    // 璁$畻缂╃暐鍥惧昂瀵�
+    if ($height == 0) {
+        $height = floor($width / $sourceWidth * $sourceHeight);
+    } elseif ($width == 0) {
+        $width = floor($height / $sourceHeight * $sourceWidth);
+    }
+    
+    // 鍒涘缓婧愬浘鍍�
+    switch ($imageType) {
+        case IMAGETYPE_GIF:
+            $sourceImage = imagecreatefromgif($sourcePath);
+            break;
+        case IMAGETYPE_JPEG:
+            $sourceImage = imagecreatefromjpeg($sourcePath);
+            break;
+        case IMAGETYPE_PNG:
+            $sourceImage = imagecreatefrompng($sourcePath);
+            break;
+        default:
+            return false;
+    }
+    
+    if (!$sourceImage) {
+        return false;
+    }
+    
+    // 鍒涘缓缂╃暐鍥�
+    $thumbnailImage = imagecreatetruecolor($width, $height);
+    
+    // 淇濇寔PNG閫忔槑搴�
+    if ($imageType == IMAGETYPE_PNG) {
+        imagealphablending($thumbnailImage, false);
+        imagesavealpha($thumbnailImage, true);
+        $transparent = imagecolorallocatealpha($thumbnailImage, 255, 255, 255, 127);
+        imagefilledrectangle($thumbnailImage, 0, 0, $width, $height, $transparent);
+    }
+    
+    // 璋冩暣鍥惧儚澶у皬
+    imagecopyresampled($thumbnailImage, $sourceImage, 0, 0, 0, 0, $width, $height, $sourceWidth, $sourceHeight);
+    
+    // 淇濆瓨缂╃暐鍥�
+    $result = false;
+    switch ($imageType) {
+        case IMAGETYPE_GIF:
+            $result = imagegif($thumbnailImage, $targetPath);
+            break;
+        case IMAGETYPE_JPEG:
+            $result = imagejpeg($thumbnailImage, $targetPath, 90);
+            break;
+        case IMAGETYPE_PNG:
+            $result = imagepng($thumbnailImage, $targetPath, 9);
+            break;
+    }
+    
+    // 閲婃斁鍐呭瓨
+    imagedestroy($sourceImage);
+    imagedestroy($thumbnailImage);
+    
+    return $result;
+}
+?> 
\ No newline at end of file
diff --git a/weixin/upload_test.html b/weixin/upload_test.html
new file mode 100644
index 0000000..7abe10e
--- /dev/null
+++ b/weixin/upload_test.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>鏂囦欢涓婁紶娴嬭瘯</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            max-width: 800px;
+            margin: 0 auto;
+            padding: 20px;
+        }
+        .upload-form {
+            border: 2px dashed #ccc;
+            padding: 20px;
+            text-align: center;
+            margin-bottom: 20px;
+        }
+        .upload-form:hover {
+            border-color: #999;
+        }
+        .form-group {
+            margin-bottom: 15px;
+        }
+        label {
+            display: block;
+            margin-bottom: 5px;
+            font-weight: bold;
+        }
+        input[type="text"], input[type="file"] {
+            width: 100%;
+            padding: 8px;
+            border: 1px solid #ddd;
+            border-radius: 4px;
+            box-sizing: border-box;
+        }
+        button {
+            background-color: #4CAF50;
+            color: white;
+            padding: 10px 20px;
+            border: none;
+            border-radius: 4px;
+            cursor: pointer;
+            font-size: 16px;
+        }
+        button:hover {
+            background-color: #45a049;
+        }
+        button:disabled {
+            background-color: #cccccc;
+            cursor: not-allowed;
+        }
+        .result {
+            margin-top: 20px;
+            padding: 15px;
+            border-radius: 4px;
+        }
+        .success {
+            background-color: #d4edda;
+            border: 1px solid #c3e6cb;
+            color: #155724;
+        }
+        .error {
+            background-color: #f8d7da;
+            border: 1px solid #f5c6cb;
+            color: #721c24;
+        }
+        .progress {
+            width: 100%;
+            height: 20px;
+            background-color: #f0f0f0;
+            border-radius: 10px;
+            overflow: hidden;
+            margin-top: 10px;
+        }
+        .progress-bar {
+            height: 100%;
+            background-color: #4CAF50;
+            width: 0%;
+            transition: width 0.3s ease;
+        }
+        .file-info {
+            margin-top: 10px;
+            font-size: 14px;
+            color: #666;
+        }
+    </style>
+</head>
+<body>
+    <h1>鏂囦欢涓婁紶娴嬭瘯</h1>
+    
+    <div class="upload-form">
+        <form id="uploadForm" enctype="multipart/form-data">
+            <div class="form-group">
+                <label for="uploadFileName">鏂囦欢鍚嶅墠缂�锛�</label>
+                <input type="text" id="uploadFileName" name="uploadFileName" placeholder="渚嬪锛歵est123" required>
+            </div>
+            
+            <div class="form-group">
+                <label for="file">閫夋嫨鏂囦欢锛�</label>
+                <input type="file" id="file" name="file" required>
+                <div class="file-info">
+                    鏀寔鐨勬枃浠剁被鍨嬶細JPG, PNG, GIF, PDF, DOC, DOCX<br>
+                    鏈�澶ф枃浠跺ぇ灏忥細10MB
+                </div>
+            </div>
+            
+            <button type="submit" id="submitBtn">涓婁紶鏂囦欢</button>
+        </form>
+        
+        <div class="progress" id="progress" style="display: none;">
+            <div class="progress-bar" id="progressBar"></div>
+        </div>
+    </div>
+    
+    <div id="result"></div>
+
+    <script>
+        document.getElementById('uploadForm').addEventListener('submit', function(e) {
+            e.preventDefault();
+            
+            const formData = new FormData();
+            const uploadFileName = document.getElementById('uploadFileName').value;
+            const file = document.getElementById('file').files[0];
+            
+            if (!uploadFileName || !file) {
+                showResult('璇峰~鍐欐枃浠跺悕鍓嶇紑骞堕�夋嫨鏂囦欢', false);
+                return;
+            }
+            
+            formData.append('uploadFileName', uploadFileName);
+            formData.append('file', file);
+            
+            // 鏄剧ず杩涘害鏉�
+            document.getElementById('progress').style.display = 'block';
+            document.getElementById('submitBtn').disabled = true;
+            
+            // 妯℃嫙杩涘害
+            let progress = 0;
+            const progressInterval = setInterval(() => {
+                progress += Math.random() * 10;
+                if (progress > 90) progress = 90;
+                document.getElementById('progressBar').style.width = progress + '%';
+            }, 100);
+            
+            fetch('upload_file.php', {
+                method: 'POST',
+                body: formData
+            })
+            .then(response => response.json())
+            .then(data => {
+                clearInterval(progressInterval);
+                document.getElementById('progressBar').style.width = '100%';
+                
+                setTimeout(() => {
+                    document.getElementById('progress').style.display = 'none';
+                    document.getElementById('submitBtn').disabled = false;
+                    
+                    if (data.success) {
+                        showResult(`
+                            <h3>涓婁紶鎴愬姛锛�</h3>
+                            <p><strong>鍘熷鏂囦欢鍚嶏細</strong>${data.data.originalName}</p>
+                            <p><strong>淇濆瓨鏂囦欢鍚嶏細</strong>${data.data.fileName}</p>
+                            <p><strong>鏂囦欢澶у皬锛�</strong>${formatFileSize(data.data.fileSize)}</p>
+                            <p><strong>鏂囦欢绫诲瀷锛�</strong>${data.data.fileType}</p>
+                            <p><strong>涓婁紶鏃堕棿锛�</strong>${data.data.uploadTime}</p>
+                            <p><strong>鏂囦欢璺緞锛�</strong><a href="${data.data.filePath}" target="_blank">${data.data.filePath}</a></p>
+                            ${data.data.thumbnailPath ? `<p><strong>缂╃暐鍥撅細</strong><a href="${data.data.thumbnailPath}" target="_blank">${data.data.thumbnailPath}</a></p>` : ''}
+                        `, true);
+                    } else {
+                        showResult('涓婁紶澶辫触锛�' + data.message, false);
+                    }
+                }, 500);
+            })
+            .catch(error => {
+                clearInterval(progressInterval);
+                document.getElementById('progress').style.display = 'none';
+                document.getElementById('submitBtn').disabled = false;
+                showResult('缃戠粶閿欒锛�' + error.message, false);
+            });
+        });
+        
+        function showResult(message, isSuccess) {
+            const resultDiv = document.getElementById('result');
+            resultDiv.innerHTML = message;
+            resultDiv.className = 'result ' + (isSuccess ? 'success' : 'error');
+        }
+        
+        function formatFileSize(bytes) {
+            if (bytes === 0) return '0 Bytes';
+            const k = 1024;
+            const sizes = ['Bytes', 'KB', 'MB', 'GB'];
+            const i = Math.floor(Math.log(bytes) / Math.log(k));
+            return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
+        }
+        
+        // 鏂囦欢閫夋嫨鏃舵樉绀烘枃浠朵俊鎭�
+        document.getElementById('file').addEventListener('change', function(e) {
+            const file = e.target.files[0];
+            if (file) {
+                const fileInfo = document.querySelector('.file-info');
+                fileInfo.innerHTML = `
+                    宸查�夋嫨鏂囦欢锛�${file.name}<br>
+                    鏂囦欢澶у皬锛�${formatFileSize(file.size)}<br>
+                    鏂囦欢绫诲瀷锛�${file.type}<br>
+                    鏀寔鐨勬枃浠剁被鍨嬶細JPG, PNG, GIF, PDF, DOC, DOCX<br>
+                    鏈�澶ф枃浠跺ぇ灏忥細10MB
+                `;
+            }
+        });
+    </script>
+</body>
+</html> 
\ No newline at end of file

--
Gitblit v1.9.1