From 8642cc943c7e803834d1553eb97de3bad1a0fae1 Mon Sep 17 00:00:00 2001
From: yzh <snbbt@21cn.com>
Date: 星期二, 10 五月 2022 13:36:38 +0800
Subject: [PATCH] 充值功能优化,客户表增加余额、订单表增加充值金额

---
 web/web/GwOrder.ashx |  387 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 337 insertions(+), 50 deletions(-)

diff --git a/web/web/GwOrder.ashx b/web/web/GwOrder.ashx
index 7e9019d..485c75d 100644
--- a/web/web/GwOrder.ashx
+++ b/web/web/GwOrder.ashx
@@ -9,6 +9,7 @@
 {
     private GwOrderDao _Dao = new GwOrderDao();
     private GwSpDao _GwSpDao = new GwSpDao();
+    private GwClientDao _GwClientDao = new GwClientDao();
     private GwOpGroupDao _GwOpGroupDao = new GwOpGroupDao();
     private GwProductDao _GwProductDao = new GwProductDao();
     private SysXhDao _SysXhDao = new SysXhDao();
@@ -170,22 +171,22 @@
             TotalCount = recordCount
         });
     }
-        
+
     private JsonPageResult GwOrderList(PageContext<SysUser> context)
     {
-            /**
-        string string1 = context.GetString("SpID");
-        string string2 = context.GetString("ClientID");
-        string string3 = context.GetString("ClientName");
-        string str1 = context.GetString("sDate");
-        string str2 = context.GetString("EndTime");
-        if (string.IsNullOrEmpty(str1))
-            str1 = DateTime.Now.AddDays(-1.0).ToString("yyyy-MM-dd");
-        if (string.IsNullOrEmpty(str2))
-            str2 = DateTime.Now.ToString("yyyy-MM-dd");
-            **/
+        /**
+    string string1 = context.GetString("SpID");
+    string string2 = context.GetString("ClientID");
+    string string3 = context.GetString("ClientName");
+    string str1 = context.GetString("sDate");
+    string str2 = context.GetString("EndTime");
+    if (string.IsNullOrEmpty(str1))
+        str1 = DateTime.Now.AddDays(-1.0).ToString("yyyy-MM-dd");
+    if (string.IsNullOrEmpty(str2))
+        str2 = DateTime.Now.ToString("yyyy-MM-dd");
+        **/
 
-        
+
         string spId = context.GetString("spId");
         string clientId = context.GetString("clientId");
         string clientName = context.GetString("clientName");
@@ -282,12 +283,26 @@
     //璁㈠崟瀹℃牳
     private JsonPageResult Audit(PageContext<SysUser> context)
     {
+        string spId = context.GetString("spId");
         string orderId = context.GetString("orderId");
+        int basicNum = context.GetInt("basicNum");
+        int givingNum = context.GetInt("givingNum");
+        string clientId = "";
+        int payAmount = 0;
+        int tmpPayAmount = Math.Max((int) (context.GetDecimal("payAmount", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 1);
+        payAmount = tmpPayAmount;
+        //double price = context.GetDecimal(price);
+        int num = Math.Max((int) (context.GetDecimal("price", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 1);
+        string remark = context.GetString("remark");
         int status = context.GetInt("status");  //0-瀹℃牳涓嶉�氳繃锛�1-瀹℃牳閫氳繃
         string auditReason = context.GetString("auditReason");
+        DateTime createTime = DateTime.Now;
+        string creator = context.OperatorID;
 
         string beforeFlowCode = null;   //涔嬪墠鐨勬祦绋嬬紪鐮�
-        string currentFlowCode = null;   //褰撳墠鐨勬祦绋嬬紪鐮�
+        int nowSort = 0;
+        string nowFlowCode = null;   //褰撳墠鐨勬祦绋嬬紪鐮�
+        int nextSort = 0;
         string nextFlowCode = null;   //涓嬩竴涓祦绋嬬紪鐮�
 
 
@@ -297,12 +312,183 @@
         if (gwOrder.Status !=0 && gwOrder.Status !=1)
             throw new ArgumentException("璇ヨ鍗曞凡澶勭悊,鎿嶄綔澶辫触锛�");
 
+        clientId = gwOrder.ClientId;
+
+        //鑾峰彇璁㈠崟瀹℃牳娴佺▼
+        string flowGroup = null;    //娴佺▼缁勫悎
+        string[] flowGroupS = null;
+        string[] flowCodeS = null;
+        string flowCode = null;
+        int sort = 0;
+        string flowNodeCode = null;
+        int orderStatus = 0;    //璁㈠崟鐘舵��
+
+        SysFlow SysFlow = new SysFlow();
+        SysFlow.FlowCode = "F_DDSH";    //璁㈠崟娴佺▼
+        SysFlow.Status = 1;    //鐘舵�侊細0-绂佺敤锛�1-鍚敤
+
+        SysFlow sysFlow = _SysFlowDao.Get(SysFlow);
+        if (sysFlow == null)
+        {
+            throw new ArgumentException("璁㈠崟瀹℃牳娴佺▼涓嶅瓨鍦紝璇风郴缁熺鐞嗛厤缃紒");
+        }
+
+        //渚嬶細1#KHSH|2#CWSH
+        flowGroup = sysFlow.FlowGroup;
+
+
         GwOrderAudit gworderAudit = new GwOrderAudit();
-        gworderAudit.AuditStatus = 1;
+        //gworderAudit.AuditStatus = 1;
         gworderAudit.OrderId = orderId;
         List<GwOrderAudit> gworderAuditList = _GwOrderAuditDao.List(gworderAudit);
         if(gworderAuditList==null || gworderAuditList.Count<=0 )
         {
+            //鑾峰彇瀹℃牳娴佺▼鐨勭涓�鐜妭
+            nowSort = 0;
+        }
+        else
+        {
+            //鑾峰彇瀹℃牳娴佺▼鐨勪笅鐜妭
+            GwOrderAudit gwOrderAudit = gworderAuditList[0];
+            nowSort = gwOrderAudit.AuditSort;
+
+        }
+
+        //鑾峰彇瀹℃牳娴佺▼鐨勭涓�鐜妭娴佺▼浠g爜
+        nowFlowCode = getNextFlowCode(flowGroup, nowSort);
+
+        if(string.IsNullOrEmpty(nowFlowCode))
+        {
+            //褰撳墠澶勭悊娌℃湁娴佺▼浠g爜
+            throw new ArgumentException("娴佺▼澶勭悊宸插畬鎴愶紝璇疯仈绯荤鐞嗗憳锛�");
+        }
+        else
+        {
+            object[] tmpFlowCode = splitFlowCodes(nowFlowCode);
+            if(tmpFlowCode==null)
+            {
+                throw new ArgumentException("娴佺▼浠g爜涓叉牸寮忛敊璇紝璇疯仈绯荤鐞嗗憳锛�");
+            }
+            else
+            {
+                nowSort = int.Parse(tmpFlowCode[0].ToString() );
+                flowCode = tmpFlowCode[1].ToString();
+            }
+
+
+            //鑾峰彇鐢ㄦ埛鏉冮檺
+            SysFlowNode newSysFlowNode = new SysFlowNode();
+            newSysFlowNode.BusinessType = 1;   //涓氬姟绫诲瀷:1-鍏呭�硷紱99-鍏朵粬
+            newSysFlowNode.FlowNodeCode = flowCode;
+            newSysFlowNode.UserId = creator;
+
+            List<SysFlowNode> newSysFlowNodeList = _SysFlowNodeDao.IsAuth(newSysFlowNode);
+            if(newSysFlowNodeList==null || newSysFlowNodeList.Count <=0 )
+            {
+                throw new ArgumentException("鐢ㄦ埛鏃犲鏍告潈闄愶紝璇疯仈绯荤鐞嗗憳锛�");
+            }
+            else
+            {
+                nextSort = nowSort + 1;
+                //鑾峰彇瀹℃牳娴佺▼鐨勭涓�鐜妭娴佺▼浠g爜
+                nextFlowCode = getNextFlowCode(flowGroup, nextSort);
+
+            }
+
+        }
+
+        //淇濆瓨璁㈠崟瀹℃牳琛�
+        string auditId = _SysXhDao.getXh("GW_ORDER_AUDIT");  //鑾峰彇鐢熸垚璁㈠崟瀹℃牳ID
+        this._GwOrderAuditDao.Add(new GwOrderAudit()
+        {
+            AuditId = auditId,
+            OrderId = orderId,
+            AuditSort = nowSort,
+            AuditStatus = status,
+            Auditor = creator,
+            AuditReason = auditReason,
+            AuditTime = createTime
+
+        });
+
+        //瀹℃牳涓嶉�氳繃
+        if (status==0)
+        {
+
+            orderStatus = 3;
+            //status:0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛�
+            this._Dao.UpdateStatus(orderStatus, orderId);
+
+        }
+        else if(status==1)
+        {
+            int beforeBasicNum = 0;
+            int beforeGivingNum = 0;
+            int balance = 0;
+            int topUpAmountTotal = 0;
+            if (string.IsNullOrEmpty(nextFlowCode))
+            {
+                orderStatus = 2;
+
+                //鑾峰彇璐﹀彿淇℃伅
+                GwSp gwSp = _GwSpDao.Get(spId);
+
+                beforeBasicNum = gwSp.BasicNum;
+                beforeGivingNum = gwSp.GivingNum;
+                //balance = Convert.ToInt32(gwSp.Balance);
+
+                //鑾峰彇瀹㈡埛淇℃伅
+                GwClient gwClient = _GwClientDao.Get(gwSp.ClientID);
+                balance =  int.Parse(gwClient.Balance.ToString() );
+                topUpAmountTotal = int.Parse(gwClient.Top_up_Amount_Total.ToString() );
+
+                //涓�1-棰勪粯璐�
+                if (gwSp.ChargeType==1 && (balance + payAmount) < num * basicNum)
+                {
+                    throw new ArgumentException("瀹㈡埛浣欓鍙婂厖鍊奸噾棰濅笉瓒宠喘涔帮紝璇疯皟鏁村悗鎻愪氦锛�");
+                }
+
+                //gwSp.Balance = balance - num * basicNum;
+                //gwSp.BasicNum = beforeBasicNum + basicNum;
+                //gwSp.GivingNum = beforeGivingNum + givingNum;
+
+                _GwSpDao.UpdateBalanceByOrder(balance - num * basicNum
+                    , beforeBasicNum + basicNum
+                    , beforeGivingNum + givingNum
+                    , spId
+                    );
+
+
+                //鏈夊厖鍊奸噾棰濇椂锛屾洿鏂板鎴风疮璁″厖鍊奸噾棰濓紙鍘橈級
+                if (payAmount > 0) {
+                    //GwClient gwClient = new GwClient();
+                    gwClient = new GwClient();
+                    gwClient.Top_up_Amount_Total = topUpAmountTotal + payAmount;    //绱閲戦:鍗曚綅锛堝帢锛�
+                    gwClient.Balance = ((balance + payAmount) - num * basicNum) ;   //璐︽埛浣欓:鍗曚綅锛堝帢锛�
+                    gwClient.ClientID = clientId;
+
+                    _GwClientDao.UpdateClientAmount(gwClient);
+                }
+            }
+            else
+            {
+                orderStatus = 1;
+            }
+            //status:0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛�
+            //this._Dao.UpdateStatus(orderStatus, orderId);
+
+            //鑾峰彇璁㈠崟
+            //GwOrder newGwOrder = _Dao.Get(orderId);
+            //newGwOrder.BasicNum = basicNum;
+            //newGwOrder.GivingNum = givingNum;
+            //newGwOrder.OrderNumTotal = basicNum + givingNum;
+            //newGwOrder.OrderAmountTotal = basicNum * num ;
+            //newGwOrder.BeforeBalanceNum = beforeGivingNum + beforeGivingNum;
+            //newGwOrder.Status = orderStatus;
+            //鏇存柊璁㈠崟
+            _Dao.UpdateBalanceAndStatus(basicNum, givingNum, basicNum + givingNum, basicNum * num, payAmount,  beforeGivingNum + beforeGivingNum, orderStatus, orderId );
+
+            //Dao.Update(newGwOrder);
 
         }
 
@@ -313,7 +499,8 @@
         //涓嶆槸鏈�鍚庡鏍哥幆鑺傛椂锛岀珯鍐呴�氱煡
 
         //status:0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛�
-        this._Dao.UpdateStatus(status, orderId);
+        //this._Dao.UpdateStatus(status, orderId);
+
         return new JsonPageResult(true, "瀹℃牳鎿嶄綔鎴愬姛锛�");
 
     }
@@ -332,6 +519,7 @@
 
         int orderNumTotal = context.GetInt("orderNumTotal", 0);
         int orderAmountTotal = context.GetInt("orderAmountTotal", 0);
+        int payAmount = 0;
         int beforeBalanceNum = context.GetInt("beforeBalanceNum", 0);
         //瀹㈡湇浜哄憳鎻愪氦璁㈠崟鏃剁殑鐘舵�佷负1-瀹℃牳涓��
         int status = 1; //0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛涚敵璇疯鍗曞湪鏈鏍告儏鍐典笅鍙互鍙栨秷銆�
@@ -339,7 +527,9 @@
         DateTime createTime = DateTime.Now;
         string creator = context.OperatorID;
 
-        int num = Math.Max((int) (context.GetDecimal("price", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 1);
+        int tmpPayAmount = Math.Max((int) (context.GetDecimal("payAmount", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 0);
+        payAmount = tmpPayAmount;
+        int num = Math.Max((int) (context.GetDecimal("price", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 0);
         price = num;
 
         //鏍¢獙
@@ -359,9 +549,32 @@
             throw new ArgumentException("璐﹀彿涓嶈兘涓虹┖锛�");
         }
 
-        if (basicNum<=0 && givingNum <= 0)
+        if (basicNum<=0 && givingNum <= 0 && payAmount <=0)
         {
-            throw new ArgumentException("鍩烘湰鏉℃暟鎴栬禒閫佹潯鏁板繀椤诲ぇ浜庨浂锛�");
+            throw new ArgumentException("鍏呭�奸噾棰濇垨鍩烘湰鏉℃暟鎴栬禒閫佹潯鏁板繀椤诲ぇ浜庨浂锛�");
+        }
+
+        //鑾峰彇璐﹀彿淇℃伅
+        GwSp gwSp = _GwSpDao.Get(spId);
+        int balance = 0;
+        if (gwSp == null)
+        {
+            throw new ArgumentException("璐﹀彿涓嶅瓨鍦紒");
+        }
+        else if (gwSp.Status==0)
+        {
+            throw new ArgumentException("璐﹀彿宸茬鐢紒");
+        }
+
+
+        //鑾峰彇瀹㈡埛淇℃伅
+        GwClient gwClient = _GwClientDao.Get(gwSp.ClientID);
+        balance =  int.Parse(gwClient.Balance.ToString() );
+
+        //涓�1-棰勪粯璐�
+        if (gwSp.ChargeType==1 && (balance + payAmount) < num * basicNum)
+        {
+            throw new ArgumentException("瀹㈡埛浣欓鍙婂厖鍊奸噾棰濅笉瓒宠喘涔帮紝璇疯皟鏁村悗鎻愪氦锛�");
         }
 
         //鑾峰彇璁㈠崟瀹℃牳娴佺▼
@@ -414,26 +627,14 @@
 
         //鑾峰彇鐢ㄦ埛鏉冮檺
         SysFlowNode sysFlowNode = new SysFlowNode();
-            sysFlowNode.BusinessType = 1;   //涓氬姟绫诲瀷:1-鍏呭�硷紱99-鍏朵粬
-            sysFlowNode.FlowNodeCode = flowNodeCode;
-            sysFlowNode.UserId = creator;
-        
-            List<SysFlowNode> sysFlowNodeList = _SysFlowNodeDao.IsAuth(sysFlowNode);
-            if(sysFlowNodeList==null || sysFlowNodeList.Count <=0 )
-        {
-                throw new ArgumentException("鐢ㄦ埛娌℃湁鍏呭�兼潈闄愶紝璇疯仈绯荤鐞嗗憳锛�");
-        }
-        
+        sysFlowNode.BusinessType = 1;   //涓氬姟绫诲瀷:1-鍏呭�硷紱99-鍏朵粬
+        sysFlowNode.FlowNodeCode = flowNodeCode;
+        sysFlowNode.UserId = creator;
 
-        //鑾峰彇璁㈠崟淇℃伅
-        GwSp gwSp = _GwSpDao.Get(spId);
-        if (gwSp == null)
+        List<SysFlowNode> sysFlowNodeList = _SysFlowNodeDao.IsAuth(sysFlowNode);
+        if(sysFlowNodeList==null || sysFlowNodeList.Count <=0 )
         {
-            throw new ArgumentException("璐﹀彿涓嶅瓨鍦紒");
-        }
-        else if (gwSp.Status==0)
-        {
-            throw new ArgumentException("璐﹀彿宸茬鐢紒");
+            throw new ArgumentException("鐢ㄦ埛娌℃湁鍏呭�兼潈闄愶紝璇疯仈绯荤鐞嗗憳锛�");
         }
 
         productId = gwSp.ProductId;
@@ -442,7 +643,7 @@
         orderNumTotal = basicNum + givingNum;
         orderAmountTotal = basicNum * price;
 
-            
+
         string orderId = _SysXhDao.getXh("GW_ORDER");  //鑾峰彇鐢熸垚璁㈠崟ID
         this._Dao.Add(new GwOrder()
         {
@@ -456,6 +657,7 @@
             Price = price,    //鍗曚环鎹㈢畻
             OrderNumTotal = orderNumTotal,
             OrderAmountTotal = orderAmountTotal,
+            PayAmount = payAmount,
             BeforeBalanceNum = beforeBalanceNum,
             Status = status,
             Remark = remark,
@@ -464,19 +666,22 @@
 
         });
 
-            
-        string auditId = _SysXhDao.getXh("GW_ORDER_AUDIT");  //鑾峰彇鐢熸垚璁㈠崟瀹℃牳ID
-        this._GwOrderAuditDao.Add(new GwOrderAudit()
+        //娴佺▼缁勫悎涓虹┖鏃�
+        if (!string.IsNullOrEmpty(flowGroup))
         {
-            AuditId = auditId,
-            OrderId = orderId,
-            AuditSort = sort,
-            AuditStatus = status,
-            Auditor = creator,
-            //AuditReason = null,
-            AuditTime = createTime
+            string auditId = _SysXhDao.getXh("GW_ORDER_AUDIT");  //鑾峰彇鐢熸垚璁㈠崟瀹℃牳ID
+            this._GwOrderAuditDao.Add(new GwOrderAudit()
+            {
+                AuditId = auditId,
+                OrderId = orderId,
+                AuditSort = sort,
+                AuditStatus = status,
+                Auditor = creator,
+                //AuditReason = null,
+                AuditTime = createTime
 
-        });
+            });
+        }
 
 
         return new JsonPageResult(true, "鐢熸垚璁㈠崟淇℃伅鎴愬姛锛�");
@@ -496,13 +701,17 @@
 
         int orderNumTotal = context.GetInt("orderNumTotal", 0);
         int orderAmountTotal = context.GetInt("orderAmountTotal", 0);
+        int payAmount = 0;
         int beforeBalanceNum = context.GetInt("beforeBalanceNum", 0);
         int status = 0;
         string remark = context.GetString("remark");
         DateTime createTime = DateTime.Now;
         string creator = context.OperatorID;
 
-        int num = Math.Max((int) (context.GetDecimal("price", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 1);
+        int tmpPayAmount = Math.Max((int) (context.GetDecimal("payAmount", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 0);
+        payAmount = tmpPayAmount;
+
+        int num = Math.Max((int) (context.GetDecimal("price", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 0);
         price = num;
 
         //鏍¢獙
@@ -539,6 +748,7 @@
             Price = price,    //鍗曚环鎹㈢畻
             OrderNumTotal = orderNumTotal,
             OrderAmountTotal = orderAmountTotal,
+            PayAmount = payAmount,
             BeforeBalanceNum = beforeBalanceNum,
             Status = status,
             Remark = remark,
@@ -703,4 +913,81 @@
         return string.Empty;
     }
 
+
+    //鑾峰彇娴佺▼缁勪腑鐨勪笅涓�涓祦绋�
+    public string getNextFlowCode(string flowGroup, int sort)
+    {
+        if (string.IsNullOrEmpty(flowGroup) )
+        {
+            return null;
+        }
+
+        string[] flowGroups = null;
+        string[] flowCodes = null;
+        int nextSort = 0;
+        string flowCode = null;
+        string sortAndFlowCode = null;
+        flowGroups = flowGroup.Split('|');
+        Console.WriteLine(flowGroups.Length);
+        if (flowGroups.Length > 1)
+        {
+            for (int i=0; i<flowGroups.Length; i++)
+            {
+                sortAndFlowCode = flowGroups[i];
+                if (string.IsNullOrEmpty(sortAndFlowCode))
+                {
+                    continue;
+                }
+                else
+                {
+                    flowCodes = sortAndFlowCode.Split('#');
+                    if(flowCodes.Length!=2)
+                    {
+
+                        throw new ArgumentException("娴佺▼缁勫悎涓插瓨鍦ㄦ牸寮忛敊璇紒");
+                    }
+                    else
+                    {
+                        nextSort = string.IsNullOrEmpty(flowCodes[0])? 0: Convert.ToInt32(flowCodes[0]);   //搴忓彿
+                        flowCode = flowCodes[1];   //娴佺▼浠g爜
+
+                        if (nextSort<=sort)
+                        {
+                            continue;
+                        }
+
+                        //return flowCode;
+                        return sortAndFlowCode;
+
+                    }
+                }
+
+            }
+        }
+
+        return "";
+    }
+
+
+    //鎷嗗垎娴佺▼搴忓彿鍜屾祦绋嬩唬鐮�
+    public object[] splitFlowCodes(string sortAndFlowCode)
+    {
+        if(string.IsNullOrEmpty(sortAndFlowCode) )
+        {
+            return null;
+        }
+
+        string[] splitFlowCodes = sortAndFlowCode.Split('#');
+        if (splitFlowCodes.Length != 2)
+        {
+            throw new ArgumentException("娴佺▼缁勫悎涓叉牸寮忛敊璇紒");
+
+        }
+        else
+        {
+            return splitFlowCodes;
+        }
+
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.1