1
wangbin
2024-07-08 4548e24916ac5f63eef736cabdcd634864f8de16
WebAPI/Controllers/BLL/Xt_AccountPeriodController.cs
@@ -6,6 +6,7 @@
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Web.Http;
using WebAPI.Models;
namespace WebAPI.Controllers
@@ -166,7 +167,7 @@
                long HPeriod = list[0].HPeriod;
                DateTime HBeginDate = list[0].HBeginDate;
                DateTime HEndDate = list[0].HEndDate;
                string HEndFlag = list[0].HEndFlag;
                string HEndFlag = "1";
@@ -181,14 +182,14 @@
                "(HYear,HPeriod,HBeginDate,HEndDate" +
                ",HEndFlag" +
                ") " +
                " values(" + HYear + "," + HPeriod + "," + HBeginDate + "," + HEndDate +
                ",'" + HEndFlag + "'" +
                " values('" + HYear + "','" + HPeriod + "','" + HBeginDate + "','" + HEndDate +
                "','" + HEndFlag + "'" +
              ") ");
                //修改上级为非末级代码
                oCN.Commit();
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "新增单据成功!";
                objJsonResult.Message = "结账成功!";
                //objJsonResult.data = null;
                return objJsonResult;
            }
@@ -204,24 +205,32 @@
        }
        /// <summary>
        /// 会计期间列表删除按钮
        /// 会计期间列表反结账按钮
        ///参数:string sql。
        ///返回值:object。
        /// </summary>
        [Route("Xt_AccountPeriod/Delete_Json")]
        [Route("Xt_AccountPeriod/Update_Json")]
        [HttpGet]
        public object Delete_Json(long HYaer,long HPeriod)
        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.RunProc("delete from Xt_AccountPeriod Where HYaer =" + HYaer + " and  HPeriod=" + HPeriod, ref DBUtility.ClsPub.sExeReturnInfo);
                oCN.Commit();
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "删除单据成功!";
                objJsonResult.Message = "反结账成功!";
                //objJsonResult.data = null;
                return objJsonResult;
            }
@@ -235,6 +244,154 @@
            }
        }
        //
        /// <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; //期初数量
        }
    }
}