using Newtonsoft.Json; 
 | 
using Newtonsoft.Json.Linq; 
 | 
using Pub_Class; 
 | 
using System; 
 | 
using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using System.Data; 
 | 
using System.Data.SqlClient; 
 | 
using System.Globalization; 
 | 
using System.Web.Http; 
 | 
using WebAPI.Models; 
 | 
namespace WebAPI.Controllers 
 | 
{ 
 | 
    public class Xt_AccountPeriodController : ApiController 
 | 
    { 
 | 
        public DBUtility.ClsPub.Enum_BillStatus BillStatus; 
 | 
  
 | 
        private json objJsonResult = new json(); 
 | 
        SQLHelper.ClsCN oCN = new SQLHelper.ClsCN(); 
 | 
        DataSet ds; 
 | 
  
 | 
  
 | 
        /// <summary> 
 | 
        /// 返回会计期间列表 
 | 
        ///参数:string sql。 
 | 
        ///返回值:object。 
 | 
        /// </summary> 
 | 
        [Route("Xt_AccountPeriod/list")] 
 | 
        [HttpGet] 
 | 
        public object list(string sWhere) 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                List<object> columnNameList = new List<object>(); 
 | 
                if (sWhere == null || sWhere.Equals("")) 
 | 
                { 
 | 
                    ds = oCN.RunProcReturn("select * from h_v_Xt_AccountPeriodList " + sWhere, "h_v_Xt_AccountPeriodList"); 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    string sql1 = "select * from h_v_Xt_AccountPeriodList where 1 = 1 "; 
 | 
                    string sql = sql1 + sWhere; 
 | 
                    ds = oCN.RunProcReturn(sql, "h_v_Xt_AccountPeriodList"); 
 | 
                } 
 | 
  
 | 
                //添加列名 
 | 
                foreach (DataColumn col in ds.Tables[0].Columns) 
 | 
                { 
 | 
                    Type dataType = col.DataType; 
 | 
                    string ColmString = "{\"ColmCols\":\"" + col.ColumnName + "\",\"ColmType\":\"" + dataType.Name + "\"}"; 
 | 
                    columnNameList.Add(JsonConvert.DeserializeObject(ColmString));//获取到DataColumn列对象的列名 
 | 
                } 
 | 
  
 | 
                //if (ds.Tables[0].Rows.Count != 0 || ds != null) 
 | 
                //{ 
 | 
                objJsonResult.code = "1"; 
 | 
                objJsonResult.count = 1; 
 | 
                objJsonResult.Message = "Sucess!"; 
 | 
                objJsonResult.data = ds.Tables[0]; 
 | 
                objJsonResult.list = columnNameList; 
 | 
                return objJsonResult; 
 | 
                //} 
 | 
                //else 
 | 
                //{ 
 | 
                //objJsonResult.code = "0"; 
 | 
                //objJsonResult.count = 0; 
 | 
                //objJsonResult.Message = "无数据"; 
 | 
                //objJsonResult.data = null; 
 | 
                //return objJsonResult; 
 | 
                //} 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                objJsonResult.code = "0"; 
 | 
                objJsonResult.count = 0; 
 | 
                objJsonResult.Message = "Exception!" + e.ToString(); 
 | 
                objJsonResult.data = null; 
 | 
                return objJsonResult; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 修改单据-保存按钮 
 | 
        ///参数:string sql。 
 | 
        ///返回值:object。 
 | 
        /// </summary> 
 | 
        [Route("Xt_AccountPeriod/AddBill1")] 
 | 
        [HttpPost] 
 | 
        public object AddBill1([FromBody] JObject oMain) 
 | 
        { 
 | 
  
 | 
            try 
 | 
            { 
 | 
                var _value = oMain["oMain"].ToString(); 
 | 
                string msg1 = _value.ToString(); 
 | 
                string[] sArray = msg1.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); 
 | 
                string msg2 = sArray[0].ToString(); 
 | 
                string msg3 = sArray[1].ToString(); 
 | 
                string msg4 = sArray[2].ToString(); 
 | 
                string msg5 = sArray[3].ToString(); 
 | 
                //反序列化 
 | 
                msg2 = "[" + msg2.ToString() + "]"; 
 | 
                List<Xt_AccountPeriod> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Xt_AccountPeriod>>(msg2); 
 | 
  
 | 
                long HItemID = list[0].id; 
 | 
                long HYear = list[0].HYear; 
 | 
                long HPeriod = list[0].HPeriod; 
 | 
                DateTime HBeginDate = list[0].HBeginDate; 
 | 
                DateTime HEndDate = list[0].HEndDate; 
 | 
                string HEndFlag = list[0].HEndFlag; 
 | 
  
 | 
  
 | 
  
 | 
                //若MAINDI重复则重新获取 
 | 
                oCN.BeginTran(); 
 | 
                //主表 
 | 
                oCN.RunProc("Update Xt_AccountPeriod set " + 
 | 
                    " HYear=" + HYear +  
 | 
                    ",HPeriod=" + HPeriod +  
 | 
                    ",HBeginDate='" + HBeginDate + "'" + 
 | 
                    ",HEndDate='" + HEndDate + "'" + 
 | 
                    ",HEndFlag= '" + HEndFlag + "' HYear=" + HYear + "  and  HPeriod=" + HPeriod, ref DBUtility.ClsPub.sExeReturnInfo); 
 | 
                //修改子项目代码 
 | 
                //oCN.RunProc("exec h_p_Gy_UpdateNumber Gy_Department,'" + HNumber + ".','" + this.HOldNumber + ".'", ref DBUtility.ClsPub.sExeReturnInfo); 
 | 
                //将上级 为非末级 
 | 
                // 
 | 
                oCN.Commit(); 
 | 
                objJsonResult.code = "1"; 
 | 
                objJsonResult.count = 1; 
 | 
                objJsonResult.Message = "修改单据成功!"; 
 | 
                //objJsonResult.data = null; 
 | 
                return objJsonResult; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                oCN.RollBack(); 
 | 
                objJsonResult.code = "0"; 
 | 
                objJsonResult.count = 0; 
 | 
                objJsonResult.Message = "Exception!" + e.Message; 
 | 
                objJsonResult.data = null; 
 | 
                return objJsonResult; 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        /// <summary> 
 | 
        /// 新增单据-保存按钮 
 | 
        ///参数:string sql。 
 | 
        ///返回值:object。 
 | 
        /// </summary> 
 | 
        [Route("Xt_AccountPeriod/AddBill")] 
 | 
        [HttpPost] 
 | 
        public object AddBill([FromBody] JObject oMain) 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                var _value = oMain["oMain"].ToString(); 
 | 
                string msg1 = _value.ToString(); 
 | 
                //反序列化 
 | 
                msg1 = "[" + msg1.ToString() + "]"; 
 | 
  
 | 
  
 | 
  
 | 
                List<Xt_AccountPeriod> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Xt_AccountPeriod>>(msg1); 
 | 
  
 | 
                long HYear = list[0].HYear; 
 | 
                long HPeriod = list[0].HPeriod; 
 | 
                DateTime HBeginDate = list[0].HBeginDate; 
 | 
                DateTime HEndDate = list[0].HEndDate; 
 | 
                string HEndFlag = "1"; 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
                //若MAINDI重复则重新获取 
 | 
                oCN.BeginTran(); 
 | 
                //主表 
 | 
                oCN.RunProc("Insert Into Xt_AccountPeriod " + 
 | 
                "(HYear,HPeriod,HBeginDate,HEndDate" + 
 | 
                ",HEndFlag" + 
 | 
                ") " + 
 | 
                " values('" + HYear + "','" + HPeriod + "','" + HBeginDate + "','" + HEndDate +  
 | 
                "','" + HEndFlag + "'" + 
 | 
              ") "); 
 | 
                //修改上级为非末级代码 
 | 
                oCN.Commit(); 
 | 
                objJsonResult.code = "1"; 
 | 
                objJsonResult.count = 1; 
 | 
                objJsonResult.Message = "结账成功!"; 
 | 
                //objJsonResult.data = null; 
 | 
                return objJsonResult; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                oCN.RollBack(); 
 | 
                objJsonResult.code = "0"; 
 | 
                objJsonResult.count = 0; 
 | 
                objJsonResult.Message = "Exception!" + e.Message; 
 | 
                objJsonResult.data = null; 
 | 
                return objJsonResult; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 会计期间列表反结账按钮 
 | 
        ///参数:string sql。 
 | 
        ///返回值:object。 
 | 
        /// </summary> 
 | 
        [Route("Xt_AccountPeriod/Update_Json")] 
 | 
        [HttpGet] 
 | 
        public object Update_Json(long HYear, long HPeriod ,string num) 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                //若MAINDI重复则重新获取 
 | 
                oCN.BeginTran(); 
 | 
                if (num=="1")//结账 
 | 
                { 
 | 
                    oCN.RunProc("update  Xt_AccountPeriod set HEndFlag=1 Where HYear =" + HYear + " and  HPeriod=" + HPeriod, ref DBUtility.ClsPub.sExeReturnInfo); 
 | 
                } 
 | 
                else//反结账 
 | 
                { 
 | 
                    oCN.RunProc("update  Xt_AccountPeriod set HEndFlag=0 Where HYear =" + HYear + " and  HPeriod=" + HPeriod, ref DBUtility.ClsPub.sExeReturnInfo); 
 | 
                } 
 | 
                //主表 
 | 
                
 | 
                oCN.Commit(); 
 | 
                objJsonResult.code = "1"; 
 | 
                objJsonResult.count = 1; 
 | 
                objJsonResult.Message = "反结账成功!"; 
 | 
                //objJsonResult.data = null; 
 | 
                return objJsonResult; 
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                objJsonResult.code = "0"; 
 | 
                objJsonResult.count = 0; 
 | 
                objJsonResult.Message = "Exception!" + e.ToString(); 
 | 
                objJsonResult.data = null; 
 | 
                return objJsonResult; 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        /// <summary> 
 | 
        /// 结账获取最后一次结账时间 
 | 
        /// </summary> 
 | 
        /// <param name="sWhere"></param> 
 | 
        /// <returns></returns> 
 | 
        [Route("Xt_AccountPeriod/Lastlist")] 
 | 
        [HttpGet] 
 | 
        public object Lastlist() 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                //当lastYear=2024   lastPeriod=1是,要获取上年最后一月的时间 fistYear  fistPeriod 
 | 
                string lastYear = ""; 
 | 
                string lastPeriod = ""; 
 | 
                string fistYear = ""; 
 | 
                string fistPeriod = ""; 
 | 
                List<object> columnNameList = new List<object>(); 
 | 
  
 | 
                ds = oCN.RunProcReturn("select top  1 * from h_v_Xt_AccountPeriodList where 是否结账 = '是' Order by 开始日期 DESC", "h_v_Xt_AccountPeriodList"); 
 | 
  
 | 
                //获取要结账的年月 
 | 
                if (ds.Tables[0].Rows[0]["会计月份"].ToString()=="1") 
 | 
                { 
 | 
                    fistYear = (Int64.Parse(ds.Tables[0].Rows[0]["会计年份"].ToString()) - 1).ToString(); 
 | 
                    fistPeriod = (Int64.Parse(ds.Tables[0].Rows[0]["会计月份"].ToString()) + 11).ToString(); 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    lastYear = ds.Tables[0].Rows[0]["会计年份"].ToString(); 
 | 
                    lastPeriod = ds.Tables[0].Rows[0]["会计月份"].ToString(); 
 | 
                }                
 | 
                 
 | 
                DateTime lastEndDate = (DateTime)ds.Tables[0].Rows[0]["结束日期"]; 
 | 
  
 | 
                // 计算要结账的信息                    
 | 
                DateTime nextBeginDate = lastEndDate.AddDays(1); 
 | 
                DateTime nextEndDate = nextBeginDate.AddMonths(1).AddDays(-1); 
 | 
  
 | 
                ds = oCN.RunProcReturn("select COUNT(*) 未审核 from Kf_ICStockBillMain where HChecker =''  and HDate >='" + nextBeginDate + "' and HDate <='" + nextEndDate + "' ", "Kf_ICStockBillMain"); 
 | 
                if (ds.Tables[0].Rows[0]["未审核"].ToString() == "0") 
 | 
                { 
 | 
                    if (fistYear=="") 
 | 
                    { 
 | 
                        //查询上月每个仓库,仓位,物料所数量多少,根据上月数量+本月进入支出数量,插入期初库存表 
 | 
                        string sql = "SELECT b.HWHID AS 仓库, b.HSPID AS 仓位,b.HMaterID AS 物料," + 
 | 
                            "SUM(CASE WHEN a.HYear = '" + lastYear + "' AND a.HPeriod = '" + lastPeriod + "' THEN b.HQty ELSE 0 END) AS 期初," + 
 | 
                            "SUM(CASE WHEN a.HYear = '" + lastYear + "' AND a.HPeriod = '" + lastPeriod + "' THEN b.HQty ELSE 0 END) AS 本期, " + 
 | 
                            "SUM(CASE WHEN a.HYear = '" + lastYear + "' AND (a.HPeriod = '" + lastPeriod + "' OR a.HPeriod = '" + lastPeriod + "') THEN b.HQty ELSE 0 END) AS 总计  " + 
 | 
                            "FROM  Kf_ICStockBillMain a INNER JOIN Kf_ICStockBillSub b ON a.HInterID = b.HInterID WHERE a.HYear = '" + lastYear + "' AND (a.HPeriod = '" + lastPeriod + "' OR a.HPeriod = '" + lastPeriod + "') " + 
 | 
                            "GROUP BY  b.HWHID,b.HSPID,b.HMaterID  ORDER BY b.HWHID,b.HSPID,b.HMaterID"; 
 | 
                        ds = oCN.RunProcReturn(sql, "Kf_ICStockBillMain"); 
 | 
  
 | 
                        DataTable dt = ds.Tables[0];  
 | 
                        List<Kf_ICInvBal> stockBillItemList = new List<Kf_ICInvBal>();  
 | 
  
 | 
                        foreach (DataRow row in dt.Rows) 
 | 
                        { 
 | 
                            Kf_ICInvBal item = new Kf_ICInvBal(); 
 | 
  
 | 
                            item.HYear = lastYear; 
 | 
                            item.HPeriod = lastPeriod; 
 | 
                            item.HWhID = Convert.ToInt32(row["仓库"]); 
 | 
                            item.HSPID = Convert.ToInt32(row["仓位"]); 
 | 
                            item.HMaterID = Convert.ToInt32(row["物料"]); 
 | 
                            item.HBeginQty = Convert.ToDecimal(row["总计"]); 
 | 
  
 | 
                            oCN.RunProc("INSERT INTO Kf_ICInvBal (HYear, HPeriod, HWhID, HSPID, HMaterID, HBeginQty)  VALUES('"+ item.HYear + "', '" + item.HPeriod + "', '" + item.HWhID + "', '" + item.HSPID + "', '" + item.HMaterID + "', '" + item.HBeginQty + "')"); 
 | 
                        } 
 | 
  
 | 
                        // 现在stockBillItemList包含了从DataTable中读取并处理过的数据 
 | 
                    } 
 | 
  
 | 
                    else 
 | 
                    { 
 | 
                        //查询上月每个仓库,仓位,物料所数量多少,根据上月数量+本月进入支出数量,插入期初库存表 
 | 
                        string sql = "SELECT b.HWHID AS 仓库, b.HSPID AS 仓位,b.HMaterID AS 物料," + 
 | 
                            "SUM(CASE WHEN a.HYear = '" + fistYear + "' AND a.HPeriod = '" + fistPeriod + "' THEN b.HQty ELSE 0 END) AS 期初," + 
 | 
                            "SUM(CASE WHEN a.HYear = '" + lastYear + "' AND a.HPeriod = '" + lastPeriod + "' THEN b.HQty ELSE 0 END) AS 本期, " + 
 | 
                            "SUM(CASE WHEN (a.HYear = '" + fistYear + "' AND a.HPeriod = '" + fistPeriod + "') OR  (a.HYear = '" + lastYear + "' AND a.HPeriod = '" + lastPeriod + "') THEN b.HQty ELSE 0 END) AS 总计  " + 
 | 
                            "FROM  Kf_ICStockBillMain a INNER JOIN Kf_ICStockBillSub b ON a.HInterID = b.HInterID WHERE (a.HYear = '" + fistYear + "' AND a.HPeriod = '" + fistPeriod + "') OR  (a.HYear = '" + lastYear + "' AND a.HPeriod = '" + lastPeriod + "') " + 
 | 
                            "GROUP BY  b.HWHID,b.HSPID,b.HMaterID  ORDER BY b.HWHID,b.HSPID,b.HMaterID"; 
 | 
                        ds = oCN.RunProcReturn(sql, "Kf_ICStockBillMain"); 
 | 
                        DataTable dt = ds.Tables[0]; 
 | 
                        List<Kf_ICInvBal> stockBillItemList = new List<Kf_ICInvBal>(); 
 | 
  
 | 
                        foreach (DataRow row in dt.Rows) 
 | 
                        { 
 | 
                            Kf_ICInvBal item = new Kf_ICInvBal(); 
 | 
  
 | 
                            item.HYear = fistYear; 
 | 
                            item.HPeriod = fistPeriod; 
 | 
                            item.HWhID = Convert.ToInt32(row["仓库"]); 
 | 
                            item.HSPID = Convert.ToInt32(row["仓位"]); 
 | 
                            item.HMaterID = Convert.ToInt32(row["物料"]); 
 | 
                            item.HBeginQty = Convert.ToDecimal(row["总计"]); 
 | 
  
 | 
                            oCN.RunProc("INSERT INTO Kf_ICInvBal (HYear, HPeriod, HWhID, HSPID, HMaterID, HBeginQty)  VALUES('" + item.HYear + "', '" + item.HPeriod + "', '" + item.HWhID + "', '" + item.HSPID + "', '" + item.HMaterID + "', '" + item.HBeginQty + "')"); 
 | 
                        } 
 | 
                    } 
 | 
                    
 | 
  
 | 
                    //查询要结账的日期 
 | 
                    ds = oCN.RunProcReturn("select top  1 * from h_v_Xt_AccountPeriodList where 是否结账 = '是' Order by 开始日期 DESC", "h_v_Xt_AccountPeriodList");                  
 | 
                    //添加列名 
 | 
                    foreach (DataColumn col in ds.Tables[0].Columns) 
 | 
                    { 
 | 
                        Type dataType = col.DataType; 
 | 
                        string ColmString = "{\"ColmCols\":\"" + col.ColumnName + "\",\"ColmType\":\"" + dataType.Name + "\"}"; 
 | 
                        columnNameList.Add(JsonConvert.DeserializeObject(ColmString));//获取到DataColumn列对象的列名 
 | 
                    } 
 | 
                    objJsonResult.code = "1"; 
 | 
                    objJsonResult.count = 1; 
 | 
                    objJsonResult.Message = "Sucess!"; 
 | 
                    objJsonResult.data = ds.Tables[0]; 
 | 
                    objJsonResult.list = columnNameList; 
 | 
                    return objJsonResult; 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    objJsonResult.code = "0"; 
 | 
                    objJsonResult.count = 0; 
 | 
                    objJsonResult.Message = "结账日期中有未审核的单据"; 
 | 
                    objJsonResult.data = null;                     
 | 
                    return objJsonResult; 
 | 
                }                
 | 
            } 
 | 
            catch (Exception e) 
 | 
            { 
 | 
                objJsonResult.code = "0"; 
 | 
                objJsonResult.count = 0; 
 | 
                objJsonResult.Message = "Exception!" + e.ToString(); 
 | 
                objJsonResult.data = null; 
 | 
                return objJsonResult; 
 | 
            } 
 | 
        } 
 | 
  
 | 
  
 | 
        public class Kf_ICInvBal 
 | 
        { 
 | 
            public string  HYear; //会计年 
 | 
            public string HPeriod; //会计月 
 | 
            public int HWhID; //仓库内码 
 | 
            public int HSPID; //仓位内码 
 | 
            public int HMaterID; //物料内码 
 | 
            public decimal HBeginQty; //期初数量 
 | 
        } 
 | 
  
 | 
  
 | 
    } 
 | 
} 
 |