using System; using System.Data; using System.Collections.Generic; using System.Text; using System.Collections; using DSWeb.MvcShipping.Models.RptWmsSettleListEntity; using DSWeb.MvcShipping.Models.RptWmsSettleListViewEntity; using Microsoft.Practices.EnterpriseLibrary.Data; using DSWeb.Areas.CommMng.Models; using DSWeb.EntityDA; using HcUtility.Comm; using System.Data.SqlClient; using HcUtility.Core; using DSWeb.DataAccess; using DSWeb.Models; using DSWeb.MvcShipping.Helper; using DSWeb.Areas.CommMng.DAL; using DSWeb.MvcShipping.Models.WMSRate; using Quartz.Util; namespace DSWeb.MvcShipping.DAL.RptWmsSettleDAL { public class RptWmsSettleDAL { #region Inquery 主表 wms_settle_list static public List GetDataList(string strCondition, string strUserID, string strCompanyID, string usercode, string orgcode, string sort = null) { var strSql = new StringBuilder(); strSql.Append("SELECT GID,(case when ISLOCK=1 then '是' else '' end) as ISLOCK,DUINO,CUSTOMERNAME,CONVERT(char(10), STARTBILLINGDATE, 20) as STARTBILLINGDATE,CONVERT(char(10), ENDBILLINGDATE, 20) as ENDBILLINGDATE,REMARK,CORPID,CREATEUSER,CREATETIME,ISMAKEOUT,MAKEOUTUSER,MAKEOUTTIME,(select top 1 SHOWNAME from [user] where gid=wms_settle_list.CREATEUSER) as CREATEUSER_NAME,(select top 1 SHOWNAME from [user] where gid=wms_settle_list.MAKEOUTUSER) as MAKEOUTUSER_NAME,(select count(distinct BLNO)from wms_settle_detail where duigid=wms_settle_list.GID ) YWCOUNT, (SELECT sum(outfee) from wms_settle_detail where duigid = wms_settle_list.GID)AMOUNT,dbo.[F_WMSSettle_AmountStr](GID) YWSTR from wms_settle_list where CORPID='" + strCompanyID + "' and ISDELETE=0");//CREATEUSER='" + strUserID + "' and if (!string.IsNullOrEmpty(strCondition)) { strSql.Append(" and " + strCondition); } // var sortstring = DatasetSort.Getsortstring(sort); if (!string.IsNullOrEmpty(sortstring)) { strSql.Append(" order by " + sortstring); } else { strSql.Append(" order by DUINO desc,CREATETIME desc"); } return SetData(strSql); } private static List SetData(StringBuilder strSql) { var headList = new List(); Database db = DatabaseFactory.CreateDatabase(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString())) { while (reader.Read()) { RptWmsSettleListEntity data = new RptWmsSettleListEntity(); #region Set DB data to Object data.GID = Convert.ToString(reader["GID"]);//惟一编号 data.ISLOCK = Convert.ToString(reader["ISLOCK"]);//是否对账 data.DUINO = Convert.ToString(reader["DUINO"]);//对账编号 data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]);//对账客户 data.STARTBILLINGDATE = Convert.ToString(reader["STARTBILLINGDATE"]);//开始计费日期 data.ENDBILLINGDATE = Convert.ToString(reader["ENDBILLINGDATE"]);//结束计费日期 data.REMARK = Convert.ToString(reader["REMARK"]);//备注 data.MAKEOUTUSER = Convert.ToString(reader["MAKEOUTUSER_NAME"]);//重新生成人 if (reader["MAKEOUTTIME"] != DBNull.Value) data.MAKEOUTTIME = Convert.ToDateTime(reader["MAKEOUTTIME"]);//重新生成时间 data.YWCOUNT = Convert.ToDecimal(reader["YWCOUNT"]);// data.AMOUNT = Convert.ToDecimal(reader["AMOUNT"]);// data.YWSTR = Convert.ToString(reader["YWSTR"]);// #endregion headList.Add(data); } reader.Close(); } return headList; } #endregion #region Inquery 仓储结算清单明细临时表([wms_settlement_detail_temp]) private static List SetFeeData(String strSql) { var headList = new List(); Database db = DatabaseFactory.CreateDatabase(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString())) { while (reader.Read()) { RptWmsSettleDetailEntity data = new RptWmsSettleDetailEntity(); #region Set DB data to Object data.GID = Convert.ToString(reader["GID"]); data.DUIGID = Convert.ToString(reader["DUIGID"]); data.DUINO = Convert.ToString(reader["DUINO"]); data.BLNO = Convert.ToString(reader["BLNO"]); data.CUSTOMNO = Convert.ToString(reader["CUSTOMNO"]); data.CONTRACTNO = Convert.ToString(reader["CONTRACTNO"]); data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]); data.GOODSNAME = Convert.ToString(reader["GOODSNAME"]); data.OUTFEE = Convert.ToDecimal(reader["OUTFEE"]); #endregion headList.Add(data); } reader.Close(); } return headList; } #endregion #region 仓储结算清单计算 private static int CompareDate(string value1, string value2) { //将日期字符串转换为日期对象 DateTime t1 = Convert.ToDateTime(value1); DateTime t2 = Convert.ToDateTime(value2); //通过DateTIme.Compare()进行比较() int compNum = DateTime.Compare(t1, t2); return compNum; } private static int DateDiff(string strStart, string strEnd) { DateTime dateStart = Convert.ToDateTime(strStart); DateTime dateEnd = Convert.ToDateTime(strEnd); DateTime start = Convert.ToDateTime(dateStart.ToShortDateString()); DateTime end = Convert.ToDateTime(dateEnd.ToShortDateString()); TimeSpan sp = end.Subtract(start); return sp.Days + 1; } #region 计算仓储费 /// /// 计算仓储费 /// /// 事务 /// 开始计费日期 /// 上家承担仓储期限 /// 出库明细关联的入库单wms或wms_in的BSNO /// 出库主表的客户名称 /// 出库量 /// 关联wms_out_detail的GID /// 区别费用收、付类型 /// 登陆用户GID /// 登陆用户名 /// 出库单号或其他单据号 /// 是否计算仓储费 /// 是否库存 /// public static String getWmsRate(string strSTARTBILLINGDATE, string strOLDCUSTFEEDATE, string strINBSNO, string strCUSTOMERNAME, Decimal outnums, string strASSOCIATEDNO, int strFEETYPE, string strUserID, string strShowName, string sBillno, string sOUTGID, bool ck_jsfee, bool isKuCun) { string sR = ""; //int iState = 0; int result = 0; string Sqlstr = ""; #region 计算仓储费 T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); WmsOutDetailDA WmsOutDetailDA = new EntityDA.WmsOutDetailDA(); IList tempWmsRateDetailDetailEntities = new List(); int totalfeedays = 0;//总计费区间仓储天数 int feedays = 0;//区间仓储数 int prescale = 0;//总计费区间仓储数 int feeMonth = 0;//区间仓储月数 Decimal sumfee = 0;//总仓储费 string strSTARTBILLINGDATE2 = strSTARTBILLINGDATE;//按区间计费的开始计费日期 #region 删除费率出库明细表的区间仓储费 Sqlstr = "delete from wms_settle_detail_rate where ASSOCIATEDNO = '" + strASSOCIATEDNO.Trim() + "' and FEETYPE=" + strFEETYPE; //iState = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, Sqlstr, null); bool bl = T_ALL_DA.GetExecuteSqlCommand(Sqlstr); if (!bl) { result = -9; //sqlTran.Rollback(); //Clearh(); return result.ToString(); } #endregion if (ck_jsfee)//是否计算仓储费 { #region 如果入库有免仓储期,则出库时插入费率出库明细表 //按仓储费率计算仓储费 Sqlstr = "SELECT top 1 * FROM wms where GID='" + strINBSNO + "' or gid in (select ASSOCIATEDNO from wms_in where gid='" + strINBSNO + "')"; //DataSet dsrate = SqlHelper.ExecuteQueryDataset(sqlTran, CommandType.Text, Sqlstr, null); DataSet dsrate = T_ALL_DA.GetAllSQL(Sqlstr); if (dsrate != null) { if (dsrate.Tables[0].Rows.Count > 0) { string sAP = dsrate.Tables[0].Rows[0]["FREESTORAGEPERIOD"].ToString().Trim(); if (strFEETYPE == 2) { sAP = dsrate.Tables[0].Rows[0]["FREESTORAGEPERIODAP"].ToString().Trim(); } if (sAP != "0") { WmsRateDetail model3 = new WmsRateDetail(); model3.FEEPRICE = 0; model3.GOODSPFSL = outnums; model3.OUTFEE = 0; model3.FEEUNIT = dsrate.Tables[0].Rows[0]["CHARGEUNIT"].ToString().Trim() + "天"; model3.STARTBILLINGDATE = DateTime.Parse(dsrate.Tables[0].Rows[0]["WMSDATE"].ToString().Trim()); DateTime dt = DateTime.Parse(dsrate.Tables[0].Rows[0]["STARTBILLINGDATE"].ToString().Trim()).AddDays(-1); if (strFEETYPE == 2) dt = DateTime.Parse(dsrate.Tables[0].Rows[0]["STARTBILLINGDATEAP"].ToString().Trim()).AddDays(-1); if (DateTime.Parse(strOLDCUSTFEEDATE) < dt) { dt = DateTime.Parse(strOLDCUSTFEEDATE); } model3.ENDBILLINGDATE = dt; model3.FEESCALE = int.Parse(GetDaysCount("day", model3.STARTBILLINGDATE.ToString().Trim(), dt.ToString().Trim()).ToString()); model3.FEEGRADE = 0; model3.REMARK = ""; model3.CREATEUSER = strUserID; model3.MODIFIEDUSER = strUserID; model3.ASSOCIATEDNO = strASSOCIATEDNO; model3.CUSTOMERNAME = strCUSTOMERNAME; model3.FEETYPE = strFEETYPE; model3.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model3); } } } #endregion feedays = GetDaysCount("day", strSTARTBILLINGDATE, strOLDCUSTFEEDATE.Trim());//WmsOutEntity.DODATE.ToString() 出库-开始计费日期+1 if (feedays > 0) { totalfeedays = feedays; //按仓储费率计算仓储费 Sqlstr = "SELECT GID,FEEGRADE,FEETYPE,FEESCALE,FEEPRICE,ADDPRICE,FEEUNIT,convert(char(10),ENDBILLINGDATE,20) AS ENDBILLINGDATE,REMARK,CREATEUSER,CREATETIME,BSNO,CAPPRICE FROM wms_rate where (BSNO='" + strINBSNO + "' or BSNO in (select ASSOCIATEDNO from wms_in where gid='" + strINBSNO + "')) and FEETYPE=" + strFEETYPE + " order by FEEGRADE "; //dsrate = SqlHelper.ExecuteQueryDataset(sqlTran, CommandType.Text, Sqlstr, null); dsrate = T_ALL_DA.GetAllSQL(Sqlstr); if (dsrate != null) { if (dsrate.Tables[0].Rows.Count > 0) { int nowscale = 0;//区间计费区间(仓储月数/天数) Decimal price = 0;//计费单价 Decimal gradefee = 0;//区间仓储费 int nowgrade = 1; for (int i = 0; i < dsrate.Tables[0].Rows.Count; i++) { if (isKuCun) { if (DateTime.Parse(strSTARTBILLINGDATE) > DateTime.Parse(dsrate.Tables[0].Rows[i]["ENDBILLINGDATE"].ToString())) { continue; } } WmsRateDetail model = new WmsRateDetail(); //nowgrade = int.Parse(dsrate.Tables[0].Rows[i]["FEEGRADE"].ToString());//计费等级 nowscale = int.Parse(dsrate.Tables[0].Rows[i]["FEESCALE"].ToString());//计费区间 price = Decimal.Parse(dsrate.Tables[0].Rows[i]["FEEPRICE"].ToString());//计费单价 Decimal ADDPRICE = Decimal.Parse(dsrate.Tables[0].Rows[i]["ADDPRICE"].ToString());//增值价 Decimal CAPPRICE = Decimal.Parse(dsrate.Tables[0].Rows[i]["CAPPRICE"].ToString());// string FEEUNIT = dsrate.Tables[0].Rows[i]["FEEUNIT"].ToString();//计费单位 string ENDBILLINGDATE = dsrate.Tables[0].Rows[i]["ENDBILLINGDATE"].ToString();//结束计费日期 //计算区间是按天或按月 string DorM = "day"; if (FEEUNIT.IndexOf("月") > -1) { DorM = "month"; } #region 按区间计算仓储费 feedays = GetDaysCount(DorM, strSTARTBILLINGDATE2, strOLDCUSTFEEDATE.Trim());//总仓储月数 if (feedays > nowscale) //总仓储月数 > 区间计费区间(仓储月数/天数) { feeMonth = GetDaysCount(DorM, strSTARTBILLINGDATE2, ENDBILLINGDATE.Trim());//i区间仓储月数 if (feeMonth > nowscale)//i区间仓储月数 > 区间计费区间(仓储月数/天数) { int sjMonth = 0;//实际仓储月数 int sjMonth2 = 0;//实际仓储月数,如果是最后一条的判断数 if (feedays > feeMonth)//总仓储月数 > i区间仓储月数 { sjMonth = nowscale;// feeMonth;// (feeMonth - nowscale);//实际仓储月数 sjMonth2 = feeMonth;//实际仓储月数,如果是最后一条的判断数 if ((i + 1) == dsrate.Tables[0].Rows.Count)//即最后一条时,以后的时间都按最后一条取值 { if (ADDPRICE <= 0)//增值价>0,则求增值费率 { sjMonth = feedays;//(feedays - nowscale);//实际仓储月数 ENDBILLINGDATE = strOLDCUSTFEEDATE; } sjMonth2 = feedays;// (feedays - nowscale);//实际仓储月数 } } else//总仓储月数 <= i区间仓储月数 { //sjMonth = feedays;//(feedays - nowscale);//实际仓储月数 sjMonth = nowscale;// feeMonth;// (feeMonth - nowscale);//实际仓储月数 sjMonth2 = feedays;//实际仓储月数,如果是最后一条的判断数 ENDBILLINGDATE = strOLDCUSTFEEDATE; } // #region 增值价>0,则求增值费率 if (ADDPRICE > 0)//增值价>0,则求增值费率 { //int idiv = (int)(sjMonth / nowscale); //int imod = (int)(sjMonth % nowscale); int idiv = (int)(sjMonth2 / nowscale); int imod = (int)(sjMonth2 % nowscale); Decimal dprice = price;//计费单价 for (int j = 0; j < idiv; j++)//循环求增值费率 { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddDays(nowscale - 1); int dtDays = sjMonth;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddMonths(nowscale).AddDays(-1); if (dtENDBILLINGDATE > DateTime.Parse(ENDBILLINGDATE))//strOLDCUSTFEEDATE { if ((i + 1) == dsrate.Tables[0].Rows.Count && dtENDBILLINGDATE > DateTime.Parse(strOLDCUSTFEEDATE))//即最后一条时,以后的时间都按最后一条取值 { dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); } else { dtENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE);//strOLDCUSTFEEDATE } } FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * dprice * dtDays;// nowscale;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//nowscale;//累计天数 // WmsRateDetail model1 = new WmsRateDetail(); model1.FEEPRICE = dprice; model1.GOODSPFSL = outnums; model1.FEESCALE = dtDays;// nowscale; model1.OUTFEE = gradefee; model1.FEEUNIT = FEEUNIT2; model1.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model1.ENDBILLINGDATE = dtENDBILLINGDATE; //model1.ENDBILLINGDATE = model1.STARTBILLINGDATE.AddDays(nowscale - 1); //if (FEEUNIT.IndexOf("月") > -1) //{ // DateTime dt = model1.STARTBILLINGDATE.AddMonths(nowscale).AddDays(-1); // model1.ENDBILLINGDATE = dt; // if (dt > DateTime.Parse(strOLDCUSTFEEDATE)) // { // model1.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); // } //} model1.FEEGRADE = nowgrade; model1.REMARK = ""; model1.CREATEUSER = strUserID; model1.MODIFIEDUSER = strUserID; model1.ASSOCIATEDNO = strASSOCIATEDNO; model1.CUSTOMERNAME = strCUSTOMERNAME; model1.FEETYPE = strFEETYPE; model1.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model1); // nowgrade++; if (CAPPRICE != 0) { if (dprice < CAPPRICE) { dprice += ADDPRICE; } else { dprice = CAPPRICE; } } else { dprice += ADDPRICE; } strSTARTBILLINGDATE2 = (model1.ENDBILLINGDATE.AddDays(1)).ToString();//按区间计费的开始计费日期 } // if (imod > 0)//增值费率余数大于0,则实际仓储月份等于imod { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddDays(imod - 1); int dtDays = imod;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddMonths(imod).AddDays(-1); if (dtENDBILLINGDATE > DateTime.Parse(ENDBILLINGDATE))//strOLDCUSTFEEDATE { if ((i + 1) == dsrate.Tables[0].Rows.Count && dtENDBILLINGDATE > DateTime.Parse(strOLDCUSTFEEDATE))//即最后一条时,以后的时间都按最后一条取值 { dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); } else { dtENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE);//strOLDCUSTFEEDATE } } FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- //dprice += ADDPRICE; gradefee = outnums * dprice * dtDays;// imod;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//imod;//累计天数 // model.FEEPRICE = dprice; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//imod; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = dtENDBILLINGDATE; //model.ENDBILLINGDATE = model.STARTBILLINGDATE.AddDays(imod - 1); //if (FEEUNIT.IndexOf("月") > -1) //{ // DateTime dt = model.STARTBILLINGDATE.AddMonths(imod).AddDays(-1); // model.ENDBILLINGDATE = dt; // if (dt > DateTime.Parse(strOLDCUSTFEEDATE)) // { // model.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); // } //} model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (model.ENDBILLINGDATE.AddDays(1)).ToString();//按区间计费的开始计费日期 } } else { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE); int dtDays = sjMonth;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * price * dtDays;// sjMonth;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//sjMonth;//累计天数 // model.FEEPRICE = price; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//sjMonth; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE); model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (DateTime.Parse(ENDBILLINGDATE).AddDays(1)).ToString();//按区间计费的开始计费日期 } #endregion //结束费率区间的循环 if (feedays <= feeMonth)//总仓储月数 <= i区间仓储月数 { break;//结束费率区间的循环 } } else//i区间仓储月数 <= 区间计费区间(仓储月数/天数) { int sjMonth = 0;//实际仓储月数 int sjMonth2 = 0;//实际仓储月数,如果是最后一条的判断数 if (feedays > feeMonth)//总仓储月数 > i区间仓储月数 { sjMonth = feeMonth;//实际仓储月数 sjMonth2 = feeMonth;//实际仓储月数,如果是最后一条的判断数 if ((i + 1) == dsrate.Tables[0].Rows.Count)//即最后一条时,以后的时间都按最后一条取值 { if (ADDPRICE <= 0)//增值价>0,则求增值费率 { sjMonth = feedays;// (feedays - nowscale);//实际仓储月数 ENDBILLINGDATE = strOLDCUSTFEEDATE; } sjMonth2 = feedays;// (feedays - nowscale);//实际仓储月数,如果是最后一条的判断数 } } else//总仓储月数 <= i区间仓储月数 { //sjMonth = feedays;//(feedays - nowscale);//实际仓储月数 sjMonth = nowscale;// feeMonth;// (feeMonth - nowscale);//实际仓储月数 sjMonth2 = feedays;//实际仓储月数,如果是最后一条的判断数 ENDBILLINGDATE = strOLDCUSTFEEDATE; } // #region 增值价>0,则求增值费率 if (ADDPRICE > 0)//增值价>0,则求增值费率 { //int idiv = (int)(sjMonth / nowscale); //int imod = (int)(sjMonth % nowscale); int idiv = (int)(sjMonth2 / nowscale); int imod = (int)(sjMonth2 % nowscale); Decimal dprice = price;//计费单价 for (int j = 0; j < idiv; j++)//循环求增值费率 { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddDays(nowscale - 1); int dtDays = sjMonth;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddMonths(nowscale).AddDays(-1); if (dtENDBILLINGDATE > DateTime.Parse(strOLDCUSTFEEDATE)) { dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); } FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * dprice * dtDays;// nowscale;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//nowscale;//累计天数 // WmsRateDetail model1 = new WmsRateDetail(); model1.FEEPRICE = dprice; model1.GOODSPFSL = outnums; model1.FEESCALE = dtDays;//nowscale; model1.OUTFEE = gradefee; model1.FEEUNIT = FEEUNIT2; model1.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model1.ENDBILLINGDATE = dtENDBILLINGDATE; //model1.ENDBILLINGDATE = model1.STARTBILLINGDATE.AddDays(nowscale - 1); //if (FEEUNIT.IndexOf("月") > -1) //{ // DateTime dt = model1.STARTBILLINGDATE.AddMonths(nowscale).AddDays(-1); // model1.ENDBILLINGDATE = dt; // if (dt > DateTime.Parse(strOLDCUSTFEEDATE)) // { // model1.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); // } //} model1.FEEGRADE = nowgrade; model1.REMARK = ""; model1.CREATEUSER = strUserID; model1.MODIFIEDUSER = strUserID; model1.ASSOCIATEDNO = strASSOCIATEDNO; model1.CUSTOMERNAME = strCUSTOMERNAME; model1.FEETYPE = strFEETYPE; model1.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model1); // nowgrade++; if (CAPPRICE != 0) { if (dprice < CAPPRICE) { dprice += ADDPRICE; } else { dprice = CAPPRICE; } } else { dprice += ADDPRICE; } strSTARTBILLINGDATE2 = (model1.ENDBILLINGDATE.AddDays(1)).ToString();//按区间计费的开始计费日期 } // if (imod > 0)//增值费率余数大于0,则实际仓储月份等于imod { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddDays(imod - 1); int dtDays = imod;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddMonths(imod).AddDays(-1); if (dtENDBILLINGDATE > DateTime.Parse(strOLDCUSTFEEDATE)) { dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); } FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- //dprice += ADDPRICE; gradefee = outnums * dprice * dtDays;// imod;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//imod;//累计天数 // model.FEEPRICE = dprice; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//imod; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = dtENDBILLINGDATE; //model.ENDBILLINGDATE = model.STARTBILLINGDATE.AddDays(imod - 1); //if (FEEUNIT.IndexOf("月") > -1) //{ // DateTime dt = model.STARTBILLINGDATE.AddMonths(imod).AddDays(-1); // model.ENDBILLINGDATE = dt; // if (dt > DateTime.Parse(strOLDCUSTFEEDATE)) // { // model.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); // } //} model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (model.ENDBILLINGDATE.AddDays(1)).ToString();//按区间计费的开始计费日期 } } else { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE); int dtDays = sjMonth;//nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * price * dtDays;//sjMonth;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//sjMonth;//累计天数 // model.FEEPRICE = price; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//sjMonth; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE); model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (DateTime.Parse(ENDBILLINGDATE).AddDays(1)).ToString();//按区间计费的开始计费日期 } #endregion //结束费率区间的循环 if (feedays <= feeMonth)//总仓储月数 <= i区间仓储月数 { break;//结束费率区间的循环 } } } else//总仓储月数 <= 区间计费区间(仓储月数/天数) { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); int dtDays = feedays; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * price * dtDays;//feedays;//出库量*计费单价*仓储区间(//仓储天数-上一个计费区间(0)) sumfee += gradefee; prescale += dtDays;//feedays;//累计天数 // model.FEEPRICE = price; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//feedays; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (DateTime.Parse(strOLDCUSTFEEDATE).AddDays(1)).ToString();//按区间计费的开始计费日期 break;//结束费率区间的循环 } #endregion } } else { //仓储费率没有设定 //sqlTran.Rollback(); //result = -2; //Page.ClientScript.RegisterStartupScript(this.GetType(), "key0", ""); //Clearh(); //return result; totalfeedays = 0; feedays = 0; sumfee = 0; } } else { totalfeedays = 0; feedays = 0; sumfee = 0; } } else { totalfeedays = 0; feedays = 0; sumfee = 0; } // #region 按区间计算仓储费,插入费率出库明细表 if (tempWmsRateDetailDetailEntities != null)//是否有要入库的仓储费 { if (tempWmsRateDetailDetailEntities.Count > 0) { foreach (WmsRateDetail model2 in tempWmsRateDetailDetailEntities) { Sqlstr = String.Format("insert into wms_settle_detail_rate(GID,FEEPRICE,GOODSPFSL,OUTFEE,REMARK,CREATEUSER,CREATETIME,ASSOCIATEDNO,CUSTOMERNAME,FEETYPE,FEEGRADE,STARTBILLINGDATE,ENDBILLINGDATE,FEESCALE,FEEUNIT,MODIFIEDUSER,WMSOUTGID)" + " values(newid(),'{0}','{1}','{2}','{3}','{4}',getdate(),'{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}')" , model2.FEEPRICE, model2.GOODSPFSL, model2.OUTFEE, model2.REMARK, model2.CREATEUSER, model2.ASSOCIATEDNO, model2.CUSTOMERNAME, model2.FEETYPE, model2.FEEGRADE, model2.STARTBILLINGDATE, model2.ENDBILLINGDATE, model2.FEESCALE, model2.FEEUNIT, model2.MODIFIEDUSER, model2.WMSOUTGID); //iState = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, Sqlstr, null); //if (iState != 1) bl = T_ALL_DA.GetExecuteSqlCommand(Sqlstr); if (!bl) { result = -1; //sqlTran.Rollback(); //Clearh(); return result.ToString(); } // string str0 = "insert into sys_log(NAME,LOGTYPE,LOGCONTENT,CREATEUSER) values('添加出库明细的费率明细信息','INSERT 插入操作','" + strShowName + " 添加 费率明细信息 出库单号:" + sBillno.Trim() + " ','" + model2.MODIFIEDUSER.ToString() + "')"; //iState = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, str0, null); //if (iState != 1) bl = T_ALL_DA.GetExecuteSqlCommand(str0); if (!bl) { result = -1; //sqlTran.Rollback(); //Clearh(); return result.ToString(); } } } } #endregion } else { tempWmsRateDetailDetailEntities = null; totalfeedays = 0; feedays = 0; sumfee = 0; } #endregion sR = sumfee.ToString() + "," + totalfeedays.ToString(); return sR; } #endregion #region 仓储费临时表--指定时间段内仓储费 public static String getWMSRateInternal(string strSTARTBILLINGDATE, string strENDBILLINGDATE, string strINBSNO, string strCUSTOMERNAME, Decimal outnums, string strASSOCIATEDNO, int strFEETYPE, string strUserID, string strShowName, string sBillno, string sOUTGID, bool ck_jsfee, bool isKuCun) { int result = 0; string sR = ""; int feedays = 0;//区间仓储数 Decimal sumfee = 0;//总仓储费 Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try {//根据出库GID查询出库费用,有多少出库明细就产生多少出库费用 var strSql = new StringBuilder(); strSql.Append(" select * from wms_settle_detail_rate_detail_tmp "); strSql.Append(" where ASSOCIATEDNO = '"+ strASSOCIATEDNO + "' AND FEETYPE = '"+strFEETYPE+"' "); strSql.Append(" order by FEEGRADE desc "); List wmsRateList = new List(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString())) { int existVal = 0; while (reader.Read()) { string strStart = reader["STARTBILLINGDATE"].ToString(); string strEnd = reader["ENDBILLINGDATE"].ToString(); #region 公共信息 WmsRateDetail wmsRateDetail = new WmsRateDetail(); wmsRateDetail.GID = reader["GID"].ToString(); wmsRateDetail.FEEPRICE = Convert.ToDecimal(reader["FEEPRICE"].ToString()); wmsRateDetail.GOODSPFSL = Convert.ToDecimal(reader["GOODSPFSL"].ToString()); wmsRateDetail.OUTFEE = Convert.ToDecimal(reader["OUTFEE"].ToString()); wmsRateDetail.REMARK = reader["REMARK"].ToString(); wmsRateDetail.CREATEUSER = reader["CREATEUSER"].ToString(); wmsRateDetail.CREATETIME = Convert.ToDateTime(reader["CREATETIME"].ToString()); wmsRateDetail.ASSOCIATEDNO = reader["ASSOCIATEDNO"].ToString(); wmsRateDetail.CUSTOMERNAME = reader["CUSTOMERNAME"].ToString(); wmsRateDetail.FEETYPE = Convert.ToInt16(reader["FEETYPE"].ToString()); wmsRateDetail.FEEGRADE = Convert.ToInt16(reader["FEEGRADE"].ToString()); wmsRateDetail.STARTBILLINGDATE = Convert.ToDateTime(reader["STARTBILLINGDATE"].ToString()); wmsRateDetail.ENDBILLINGDATE = Convert.ToDateTime(reader["ENDBILLINGDATE"].ToString()); wmsRateDetail.FEESCALE = Convert.ToInt16(reader["FEESCALE"].ToString()); wmsRateDetail.FEEUNIT = reader["FEEUNIT"].ToString(); wmsRateDetail.MODIFIEDUSER = reader["MODIFIEDUSER"].ToString(); wmsRateDetail.WMSOUTGID = reader["WMSOUTGID"].ToString(); #endregion if (CompareDate(strSTARTBILLINGDATE,strEnd) > 0) { continue; } else if ((CompareDate(strSTARTBILLINGDATE, strEnd) <= 0) && (CompareDate(strSTARTBILLINGDATE, strStart) >= 0)) { //重新计算 wmsRateDetail.STARTBILLINGDATE = Convert.ToDateTime(strSTARTBILLINGDATE); wmsRateDetail.FEESCALE = int.Parse(GetDaysCount("day", strSTARTBILLINGDATE.ToString().Trim(), reader["ENDBILLINGDATE"].ToString().Trim()).ToString()); // wmsRateDetail.FEESCALE = DateDiff(strStart.ToString().Trim(), // reader["ENDBILLINGDATE"].ToString().Trim()); wmsRateDetail.OUTFEE = wmsRateDetail.FEESCALE * wmsRateDetail.GOODSPFSL * wmsRateDetail.FEEPRICE; } else if ((CompareDate(strSTARTBILLINGDATE, strEnd) <= 0) && (CompareDate(strSTARTBILLINGDATE, strStart) <= 0)) { wmsRateDetail.FEESCALE = int.Parse(GetDaysCount("day", strStart.ToString().Trim(), strEnd.ToString().Trim()).ToString()); //wmsRateDetail.FEESCALE = DateDiff(reader["STARTBILLINGDATE"].ToString().Trim(), // reader["ENDBILLINGDATE"].ToString().Trim()); wmsRateDetail.OUTFEE = wmsRateDetail.FEESCALE * wmsRateDetail.GOODSPFSL * wmsRateDetail.FEEPRICE; } wmsRateList.Add(wmsRateDetail); } reader.Close(); } #region 清除 wms_settle_detail_tmp数据 StringBuilder strDelTmp = new StringBuilder(); strDelTmp.Append("delete from wms_settle_detail_rate_detail_tmp"); SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strDelTmp.ToString(), null); #endregion #region 插入wms_rate_detail foreach (var settle in wmsRateList) { StringBuilder strAdd = new StringBuilder(); sumfee += settle.OUTFEE; feedays += settle.FEESCALE; strAdd.Append(@"insert into wms_settle_detail_rate(GID,FEEPRICE,GOODSPFSL,OUTFEE,"); strAdd.Append(@"REMARK,CREATEUSER,CREATETIME,ASSOCIATEDNO,CUSTOMERNAME,"); strAdd.Append(@"FEETYPE,FEEGRADE,STARTBILLINGDATE,ENDBILLINGDATE,FEESCALE,FEEUNIT,MODIFIEDUSER,WMSOUTGID)"); strAdd.Append(@" VALUES("); strAdd.Append("'" + settle.GID + "',"); strAdd.Append("'" + settle.FEEPRICE + "',"); strAdd.Append("'" + settle.GOODSPFSL + "',"); strAdd.Append("'" + settle.OUTFEE + "',"); strAdd.Append("'" + settle.REMARK + "',"); strAdd.Append("'" + settle.CREATEUSER + "',"); strAdd.Append("'" + settle.CREATETIME + "',"); strAdd.Append("'" + settle.ASSOCIATEDNO + "',"); strAdd.Append("'" + settle.CUSTOMERNAME + "',"); strAdd.Append("'" + settle.FEETYPE + "',"); strAdd.Append("'" + settle.FEEGRADE + "',"); strAdd.Append("'" + settle.STARTBILLINGDATE + "',"); strAdd.Append("'" + settle.ENDBILLINGDATE + "',"); strAdd.Append("'" + settle.FEESCALE + "',"); strAdd.Append("'" + settle.FEEUNIT + "',"); strAdd.Append("'" + settle.MODIFIEDUSER + "',"); strAdd.Append("'" + settle.WMSOUTGID + "'"); strAdd.Append(")"); SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strAdd.ToString(), null); } #endregion sqlTran.Commit(); } catch (Exception ee) { sqlTran.Rollback(); } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } sR = sumfee.ToString() + "," + feedays.ToString(); return sR; } #endregion #region 复制出库单中的出库费用到仓储对账表的费用 public static DBResult copyWmsRate(string SettleDetailGID,string WMSOUTGID,int FeeType) { DBResult result = new DBResult(); Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { StringBuilder strAdd = new StringBuilder(); strAdd.Append(@"insert into wms_settle_detail_rate(GID,FEEPRICE,GOODSPFSL,OUTFEE,"); strAdd.Append(@"REMARK,CREATEUSER,CREATETIME,ASSOCIATEDNO,CUSTOMERNAME,"); strAdd.Append(@"FEETYPE,FEEGRADE,STARTBILLINGDATE,ENDBILLINGDATE,FEESCALE,FEEUNIT,MODIFIEDUSER,WMSOUTGID)"); strAdd.Append(@" select "); strAdd.Append("GID,"); strAdd.Append("FEEPRICE,"); strAdd.Append("GOODSPFSL,"); strAdd.Append("OUTFEE,"); strAdd.Append("REMARK,"); strAdd.Append("CREATEUSER,"); strAdd.Append("CREATETIME,"); strAdd.Append("'" + SettleDetailGID + "',"); strAdd.Append("CUSTOMERNAME,"); strAdd.Append("FEETYPE,"); strAdd.Append("FEEGRADE,"); strAdd.Append("STARTBILLINGDATE,"); strAdd.Append("ENDBILLINGDATE ,"); strAdd.Append("FEESCALE ,"); strAdd.Append("FEEUNIT ,"); strAdd.Append("MODIFIEDUSER,"); strAdd.Append("WMSOUTGID "); strAdd.Append(" from wms_rate_detail where WMSOUTGID='" + WMSOUTGID + "' and FEETYPE='" + FeeType + "'"); SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strAdd.ToString(), null); sqlTran.Commit(); } catch (Exception) { sqlTran.Rollback(); result.Success = false; result.Message = "操作出现错误,请重试或联系系统管理员"; return result; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } #endregion result.Success = true; result.Message = "操作成功!"; return result; } #region 计算仓储费--临时表 /// /// 计算仓储费 /// /// 事务 /// 开始计费日期 /// 上家承担仓储期限 /// 出库明细关联的入库单wms或wms_in的BSNO /// 出库主表的客户名称 /// 出库量 /// 关联wms_out_detail的GID /// 区别费用收、付类型 /// 登陆用户GID /// 登陆用户名 /// 出库单号或其他单据号 /// 是否计算仓储费 /// 是否库存 /// public static String getWmsRateTmp(string strSTARTBILLINGDATE, string strOLDCUSTFEEDATE, string strINBSNO, string strCUSTOMERNAME, Decimal outnums, string strASSOCIATEDNO, int strFEETYPE, string strUserID, string strShowName, string sBillno, string sOUTGID, bool ck_jsfee, bool isKuCun) { string sR = ""; //int iState = 0; int result = 0; string Sqlstr = ""; #region 计算仓储费 T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); WmsOutDetailDA WmsOutDetailDA = new EntityDA.WmsOutDetailDA(); IList tempWmsRateDetailDetailEntities = new List(); int totalfeedays = 0;//总计费区间仓储天数 int feedays = 0;//区间仓储数 int prescale = 0;//总计费区间仓储数 int feeMonth = 0;//区间仓储月数 Decimal sumfee = 0;//总仓储费 string strSTARTBILLINGDATE2 = strSTARTBILLINGDATE;//按区间计费的开始计费日期 #region 删除费率出库明细表的区间仓储费 Sqlstr = "delete from wms_settle_detail_rate_detail_tmp where ASSOCIATEDNO = '" + strASSOCIATEDNO.Trim() + "' and FEETYPE=" + strFEETYPE; //iState = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, Sqlstr, null); bool bl = T_ALL_DA.GetExecuteSqlCommand(Sqlstr); if (!bl) { result = -9; //sqlTran.Rollback(); //Clearh(); return result.ToString(); } #endregion if (ck_jsfee)//是否计算仓储费 { #region 如果入库有免仓储期,则出库时插入费率出库明细表 //按仓储费率计算仓储费 Sqlstr = "SELECT top 1 * FROM wms where GID='" + strINBSNO + "' or gid in (select ASSOCIATEDNO from wms_in where gid='" + strINBSNO + "')"; //DataSet dsrate = SqlHelper.ExecuteQueryDataset(sqlTran, CommandType.Text, Sqlstr, null); DataSet dsrate = T_ALL_DA.GetAllSQL(Sqlstr); if (dsrate != null) { if (dsrate.Tables[0].Rows.Count > 0) { string sAP = dsrate.Tables[0].Rows[0]["FREESTORAGEPERIOD"].ToString().Trim(); if (strFEETYPE == 2) { sAP = dsrate.Tables[0].Rows[0]["FREESTORAGEPERIODAP"].ToString().Trim(); } if (sAP != "0") { WmsRateDetail model3 = new WmsRateDetail(); model3.FEEPRICE = 0; model3.GOODSPFSL = outnums; model3.OUTFEE = 0; model3.FEEUNIT = dsrate.Tables[0].Rows[0]["CHARGEUNIT"].ToString().Trim() + "天"; model3.STARTBILLINGDATE = DateTime.Parse(dsrate.Tables[0].Rows[0]["WMSDATE"].ToString().Trim()); DateTime dt = DateTime.Parse(dsrate.Tables[0].Rows[0]["STARTBILLINGDATE"].ToString().Trim()).AddDays(-1); if (strFEETYPE == 2) dt = DateTime.Parse(dsrate.Tables[0].Rows[0]["STARTBILLINGDATEAP"].ToString().Trim()).AddDays(-1); if (DateTime.Parse(strOLDCUSTFEEDATE) < dt) { dt = DateTime.Parse(strOLDCUSTFEEDATE); } model3.ENDBILLINGDATE = dt; model3.FEESCALE = int.Parse(GetDaysCount("day", model3.STARTBILLINGDATE.ToString().Trim(), dt.ToString().Trim()).ToString()); model3.FEEGRADE = 0; model3.REMARK = ""; model3.CREATEUSER = strUserID; model3.MODIFIEDUSER = strUserID; model3.ASSOCIATEDNO = strASSOCIATEDNO; model3.CUSTOMERNAME = strCUSTOMERNAME; model3.FEETYPE = strFEETYPE; model3.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model3); } } } #endregion feedays = GetDaysCount("day", strSTARTBILLINGDATE, strOLDCUSTFEEDATE.Trim());//WmsOutEntity.DODATE.ToString() 出库-开始计费日期+1 if (feedays > 0) { totalfeedays = feedays; //按仓储费率计算仓储费 Sqlstr = "SELECT GID,FEEGRADE,FEETYPE,FEESCALE,FEEPRICE,ADDPRICE,FEEUNIT,convert(char(10),ENDBILLINGDATE,20) AS ENDBILLINGDATE,REMARK,CREATEUSER,CREATETIME,BSNO,CAPPRICE FROM wms_rate where (BSNO='" + strINBSNO + "' or BSNO in (select ASSOCIATEDNO from wms_in where gid='" + strINBSNO + "')) and FEETYPE=" + strFEETYPE + " order by FEEGRADE "; //dsrate = SqlHelper.ExecuteQueryDataset(sqlTran, CommandType.Text, Sqlstr, null); dsrate = T_ALL_DA.GetAllSQL(Sqlstr); if (dsrate != null) { if (dsrate.Tables[0].Rows.Count > 0) { int nowscale = 0;//区间计费区间(仓储月数/天数) Decimal price = 0;//计费单价 Decimal gradefee = 0;//区间仓储费 int nowgrade = 1; for (int i = 0; i < dsrate.Tables[0].Rows.Count; i++) { if (isKuCun) { if (DateTime.Parse(strSTARTBILLINGDATE) > DateTime.Parse(dsrate.Tables[0].Rows[i]["ENDBILLINGDATE"].ToString())) { continue; } } WmsRateDetail model = new WmsRateDetail(); //nowgrade = int.Parse(dsrate.Tables[0].Rows[i]["FEEGRADE"].ToString());//计费等级 nowscale = int.Parse(dsrate.Tables[0].Rows[i]["FEESCALE"].ToString());//计费区间 price = Decimal.Parse(dsrate.Tables[0].Rows[i]["FEEPRICE"].ToString());//计费单价 Decimal ADDPRICE = Decimal.Parse(dsrate.Tables[0].Rows[i]["ADDPRICE"].ToString());//增值价 Decimal CAPPRICE = Decimal.Parse(dsrate.Tables[0].Rows[i]["CAPPRICE"].ToString());// string FEEUNIT = dsrate.Tables[0].Rows[i]["FEEUNIT"].ToString();//计费单位 string ENDBILLINGDATE = dsrate.Tables[0].Rows[i]["ENDBILLINGDATE"].ToString();//结束计费日期 //计算区间是按天或按月 string DorM = "day"; if (FEEUNIT.IndexOf("月") > -1) { DorM = "month"; } #region 按区间计算仓储费 feedays = GetDaysCount(DorM, strSTARTBILLINGDATE2, strOLDCUSTFEEDATE.Trim());//总仓储月数 if (feedays > nowscale) //总仓储月数 > 区间计费区间(仓储月数/天数) { feeMonth = GetDaysCount(DorM, strSTARTBILLINGDATE2, ENDBILLINGDATE.Trim());//i区间仓储月数 if (feeMonth > nowscale)//i区间仓储月数 > 区间计费区间(仓储月数/天数) { int sjMonth = 0;//实际仓储月数 int sjMonth2 = 0;//实际仓储月数,如果是最后一条的判断数 if (feedays > feeMonth)//总仓储月数 > i区间仓储月数 { sjMonth = nowscale;// feeMonth;// (feeMonth - nowscale);//实际仓储月数 sjMonth2 = feeMonth;//实际仓储月数,如果是最后一条的判断数 if ((i + 1) == dsrate.Tables[0].Rows.Count)//即最后一条时,以后的时间都按最后一条取值 { if (ADDPRICE <= 0)//增值价>0,则求增值费率 { sjMonth = feedays;//(feedays - nowscale);//实际仓储月数 ENDBILLINGDATE = strOLDCUSTFEEDATE; } sjMonth2 = feedays;// (feedays - nowscale);//实际仓储月数 } } else//总仓储月数 <= i区间仓储月数 { //sjMonth = feedays;//(feedays - nowscale);//实际仓储月数 sjMonth = nowscale;// feeMonth;// (feeMonth - nowscale);//实际仓储月数 sjMonth2 = feedays;//实际仓储月数,如果是最后一条的判断数 ENDBILLINGDATE = strOLDCUSTFEEDATE; } // #region 增值价>0,则求增值费率 if (ADDPRICE > 0)//增值价>0,则求增值费率 { //int idiv = (int)(sjMonth / nowscale); //int imod = (int)(sjMonth % nowscale); int idiv = (int)(sjMonth2 / nowscale); int imod = (int)(sjMonth2 % nowscale); Decimal dprice = price;//计费单价 for (int j = 0; j < idiv; j++)//循环求增值费率 { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddDays(nowscale - 1); int dtDays = sjMonth;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddMonths(nowscale).AddDays(-1); if (dtENDBILLINGDATE > DateTime.Parse(ENDBILLINGDATE))//strOLDCUSTFEEDATE { if ((i + 1) == dsrate.Tables[0].Rows.Count && dtENDBILLINGDATE > DateTime.Parse(strOLDCUSTFEEDATE))//即最后一条时,以后的时间都按最后一条取值 { dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); } else { dtENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE);//strOLDCUSTFEEDATE } } FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * dprice * dtDays;// nowscale;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//nowscale;//累计天数 // WmsRateDetail model1 = new WmsRateDetail(); model1.FEEPRICE = dprice; model1.GOODSPFSL = outnums; model1.FEESCALE = dtDays;// nowscale; model1.OUTFEE = gradefee; model1.FEEUNIT = FEEUNIT2; model1.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model1.ENDBILLINGDATE = dtENDBILLINGDATE; //model1.ENDBILLINGDATE = model1.STARTBILLINGDATE.AddDays(nowscale - 1); //if (FEEUNIT.IndexOf("月") > -1) //{ // DateTime dt = model1.STARTBILLINGDATE.AddMonths(nowscale).AddDays(-1); // model1.ENDBILLINGDATE = dt; // if (dt > DateTime.Parse(strOLDCUSTFEEDATE)) // { // model1.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); // } //} model1.FEEGRADE = nowgrade; model1.REMARK = ""; model1.CREATEUSER = strUserID; model1.MODIFIEDUSER = strUserID; model1.ASSOCIATEDNO = strASSOCIATEDNO; model1.CUSTOMERNAME = strCUSTOMERNAME; model1.FEETYPE = strFEETYPE; model1.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model1); // nowgrade++; if (CAPPRICE != 0) { if (dprice < CAPPRICE) { dprice += ADDPRICE; } else { dprice = CAPPRICE; } } else { dprice += ADDPRICE; } strSTARTBILLINGDATE2 = (model1.ENDBILLINGDATE.AddDays(1)).ToString();//按区间计费的开始计费日期 } // if (imod > 0)//增值费率余数大于0,则实际仓储月份等于imod { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddDays(imod - 1); int dtDays = imod;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddMonths(imod).AddDays(-1); if (dtENDBILLINGDATE > DateTime.Parse(ENDBILLINGDATE))//strOLDCUSTFEEDATE { if ((i + 1) == dsrate.Tables[0].Rows.Count && dtENDBILLINGDATE > DateTime.Parse(strOLDCUSTFEEDATE))//即最后一条时,以后的时间都按最后一条取值 { dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); } else { dtENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE);//strOLDCUSTFEEDATE } } FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- //dprice += ADDPRICE; gradefee = outnums * dprice * dtDays;// imod;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//imod;//累计天数 // model.FEEPRICE = dprice; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//imod; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = dtENDBILLINGDATE; //model.ENDBILLINGDATE = model.STARTBILLINGDATE.AddDays(imod - 1); //if (FEEUNIT.IndexOf("月") > -1) //{ // DateTime dt = model.STARTBILLINGDATE.AddMonths(imod).AddDays(-1); // model.ENDBILLINGDATE = dt; // if (dt > DateTime.Parse(strOLDCUSTFEEDATE)) // { // model.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); // } //} model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (model.ENDBILLINGDATE.AddDays(1)).ToString();//按区间计费的开始计费日期 } } else { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE); int dtDays = sjMonth;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * price * dtDays;// sjMonth;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//sjMonth;//累计天数 // model.FEEPRICE = price; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//sjMonth; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE); model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (DateTime.Parse(ENDBILLINGDATE).AddDays(1)).ToString();//按区间计费的开始计费日期 } #endregion //结束费率区间的循环 if (feedays <= feeMonth)//总仓储月数 <= i区间仓储月数 { break;//结束费率区间的循环 } } else//i区间仓储月数 <= 区间计费区间(仓储月数/天数) { int sjMonth = 0;//实际仓储月数 int sjMonth2 = 0;//实际仓储月数,如果是最后一条的判断数 if (feedays > feeMonth)//总仓储月数 > i区间仓储月数 { sjMonth = feeMonth;//实际仓储月数 sjMonth2 = feeMonth;//实际仓储月数,如果是最后一条的判断数 if ((i + 1) == dsrate.Tables[0].Rows.Count)//即最后一条时,以后的时间都按最后一条取值 { if (ADDPRICE <= 0)//增值价>0,则求增值费率 { sjMonth = feedays;// (feedays - nowscale);//实际仓储月数 ENDBILLINGDATE = strOLDCUSTFEEDATE; } sjMonth2 = feedays;// (feedays - nowscale);//实际仓储月数,如果是最后一条的判断数 } } else//总仓储月数 <= i区间仓储月数 { //sjMonth = feedays;//(feedays - nowscale);//实际仓储月数 sjMonth = nowscale;// feeMonth;// (feeMonth - nowscale);//实际仓储月数 sjMonth2 = feedays;//实际仓储月数,如果是最后一条的判断数 ENDBILLINGDATE = strOLDCUSTFEEDATE; } // #region 增值价>0,则求增值费率 if (ADDPRICE > 0)//增值价>0,则求增值费率 { //int idiv = (int)(sjMonth / nowscale); //int imod = (int)(sjMonth % nowscale); int idiv = (int)(sjMonth2 / nowscale); int imod = (int)(sjMonth2 % nowscale); Decimal dprice = price;//计费单价 for (int j = 0; j < idiv; j++)//循环求增值费率 { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddDays(nowscale - 1); int dtDays = sjMonth;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddMonths(nowscale).AddDays(-1); if (dtENDBILLINGDATE > DateTime.Parse(strOLDCUSTFEEDATE)) { dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); } FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * dprice * dtDays;// nowscale;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//nowscale;//累计天数 // WmsRateDetail model1 = new WmsRateDetail(); model1.FEEPRICE = dprice; model1.GOODSPFSL = outnums; model1.FEESCALE = dtDays;//nowscale; model1.OUTFEE = gradefee; model1.FEEUNIT = FEEUNIT2; model1.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model1.ENDBILLINGDATE = dtENDBILLINGDATE; //model1.ENDBILLINGDATE = model1.STARTBILLINGDATE.AddDays(nowscale - 1); //if (FEEUNIT.IndexOf("月") > -1) //{ // DateTime dt = model1.STARTBILLINGDATE.AddMonths(nowscale).AddDays(-1); // model1.ENDBILLINGDATE = dt; // if (dt > DateTime.Parse(strOLDCUSTFEEDATE)) // { // model1.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); // } //} model1.FEEGRADE = nowgrade; model1.REMARK = ""; model1.CREATEUSER = strUserID; model1.MODIFIEDUSER = strUserID; model1.ASSOCIATEDNO = strASSOCIATEDNO; model1.CUSTOMERNAME = strCUSTOMERNAME; model1.FEETYPE = strFEETYPE; model1.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model1); // nowgrade++; if (CAPPRICE != 0) { if (dprice < CAPPRICE) { dprice += ADDPRICE; } else { dprice = CAPPRICE; } } else { dprice += ADDPRICE; } strSTARTBILLINGDATE2 = (model1.ENDBILLINGDATE.AddDays(1)).ToString();//按区间计费的开始计费日期 } // if (imod > 0)//增值费率余数大于0,则实际仓储月份等于imod { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddDays(imod - 1); int dtDays = imod;// nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { dtENDBILLINGDATE = dtSTARTBILLINGDATE.AddMonths(imod).AddDays(-1); if (dtENDBILLINGDATE > DateTime.Parse(strOLDCUSTFEEDATE)) { dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); } FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- //dprice += ADDPRICE; gradefee = outnums * dprice * dtDays;// imod;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//imod;//累计天数 // model.FEEPRICE = dprice; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//imod; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = dtENDBILLINGDATE; //model.ENDBILLINGDATE = model.STARTBILLINGDATE.AddDays(imod - 1); //if (FEEUNIT.IndexOf("月") > -1) //{ // DateTime dt = model.STARTBILLINGDATE.AddMonths(imod).AddDays(-1); // model.ENDBILLINGDATE = dt; // if (dt > DateTime.Parse(strOLDCUSTFEEDATE)) // { // model.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); // } //} model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (model.ENDBILLINGDATE.AddDays(1)).ToString();//按区间计费的开始计费日期 } } else { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE); int dtDays = sjMonth;//nowscale; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * price * dtDays;//sjMonth;//出库量*计费单价*实际仓储月数 sumfee += gradefee; prescale += dtDays;//sjMonth;//累计天数 // model.FEEPRICE = price; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//sjMonth; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = DateTime.Parse(ENDBILLINGDATE); model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (DateTime.Parse(ENDBILLINGDATE).AddDays(1)).ToString();//按区间计费的开始计费日期 } #endregion //结束费率区间的循环 if (feedays <= feeMonth)//总仓储月数 <= i区间仓储月数 { break;//结束费率区间的循环 } } } else//总仓储月数 <= 区间计费区间(仓储月数/天数) { //--- BEGIN --- 如果是月则计算开始和结束日期之间的天数 DateTime dtSTARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); DateTime dtENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); int dtDays = feedays; string FEEUNIT2 = FEEUNIT; if (FEEUNIT.IndexOf("月") > -1) { FEEUNIT2 = FEEUNIT.Trim().Substring(0, 1) + "天"; dtDays = GetDaysCount("day", dtSTARTBILLINGDATE.ToString().Trim(), dtENDBILLINGDATE.ToString().Trim());//按月的区间天数 } //--- END --- gradefee = outnums * price * dtDays;//feedays;//出库量*计费单价*仓储区间(//仓储天数-上一个计费区间(0)) sumfee += gradefee; prescale += dtDays;//feedays;//累计天数 // model.FEEPRICE = price; model.GOODSPFSL = outnums; model.FEESCALE = dtDays;//feedays; model.OUTFEE = gradefee; model.FEEUNIT = FEEUNIT2; model.STARTBILLINGDATE = DateTime.Parse(strSTARTBILLINGDATE2); model.ENDBILLINGDATE = DateTime.Parse(strOLDCUSTFEEDATE); model.FEEGRADE = nowgrade; model.REMARK = ""; model.CREATEUSER = strUserID; model.MODIFIEDUSER = strUserID; model.ASSOCIATEDNO = strASSOCIATEDNO; model.CUSTOMERNAME = strCUSTOMERNAME; model.FEETYPE = strFEETYPE; model.WMSOUTGID = sOUTGID; tempWmsRateDetailDetailEntities.Add(model); // nowgrade++; strSTARTBILLINGDATE2 = (DateTime.Parse(strOLDCUSTFEEDATE).AddDays(1)).ToString();//按区间计费的开始计费日期 break;//结束费率区间的循环 } #endregion } } else { //仓储费率没有设定 //sqlTran.Rollback(); //result = -2; //Page.ClientScript.RegisterStartupScript(this.GetType(), "key0", ""); //Clearh(); //return result; totalfeedays = 0; feedays = 0; sumfee = 0; } } else { totalfeedays = 0; feedays = 0; sumfee = 0; } } else { totalfeedays = 0; feedays = 0; sumfee = 0; } // #region 按区间计算仓储费,插入费率出库明细表 if (tempWmsRateDetailDetailEntities != null)//是否有要入库的仓储费 { if (tempWmsRateDetailDetailEntities.Count > 0) { foreach (WmsRateDetail model2 in tempWmsRateDetailDetailEntities) { Sqlstr = String.Format("insert into wms_settle_detail_rate_detail_tmp(GID,FEEPRICE,GOODSPFSL,OUTFEE,REMARK,CREATEUSER,CREATETIME,ASSOCIATEDNO,CUSTOMERNAME,FEETYPE,FEEGRADE,STARTBILLINGDATE,ENDBILLINGDATE,FEESCALE,FEEUNIT,MODIFIEDUSER,WMSOUTGID)" + " values(newid(),'{0}','{1}','{2}','{3}','{4}',getdate(),'{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}')" , model2.FEEPRICE, model2.GOODSPFSL, model2.OUTFEE, model2.REMARK, model2.CREATEUSER, model2.ASSOCIATEDNO, model2.CUSTOMERNAME, model2.FEETYPE, model2.FEEGRADE, model2.STARTBILLINGDATE, model2.ENDBILLINGDATE, model2.FEESCALE, model2.FEEUNIT, model2.MODIFIEDUSER, model2.WMSOUTGID); //iState = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, Sqlstr, null); //if (iState != 1) bl = T_ALL_DA.GetExecuteSqlCommand(Sqlstr); if (!bl) { result = -1; //sqlTran.Rollback(); //Clearh(); return result.ToString(); } // string str0 = "insert into sys_log(NAME,LOGTYPE,LOGCONTENT,CREATEUSER) values('添加出库明细的费率明细信息','INSERT 插入操作','" + strShowName + " 添加 费率明细信息 出库单号:" + sBillno.Trim() + " ','" + model2.MODIFIEDUSER.ToString() + "')"; //iState = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, str0, null); //if (iState != 1) bl = T_ALL_DA.GetExecuteSqlCommand(str0); if (!bl) { result = -1; //sqlTran.Rollback(); //Clearh(); return result.ToString(); } } } } #endregion } else { tempWmsRateDetailDetailEntities = null; totalfeedays = 0; feedays = 0; sumfee = 0; } #endregion sR = sumfee.ToString() + "," + totalfeedays.ToString(); return sR; } #endregion #region 计算仓储时间差 +1 /// /// 计算仓储时间差 +1 /// public static int GetDaysCount(string ymd, string indate, string outdate) { string strSql = String.Format(" select datediff({0},'{1}','{2}') ", ymd, indate, outdate); if (ymd == "day") { strSql = String.Format(" select datediff({0},'{1}','{2}')+1 ", ymd, indate, outdate); } object obj = SqlHelper.GetSingle(SqlHelper.ConnectionStringLocalTransaction, strSql.ToString()); if (obj == null) { return 0; } else { if (ymd == "month") { int inum = int.Parse(obj.ToString()); DateTime dt = DateTime.Parse(indate).AddMonths(inum).AddDays(-1); if (DateTime.Parse(outdate) > dt) { inum = inum + 1; return Convert.ToInt32(inum); } } return Convert.ToInt32(obj); } } #endregion /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// static public List GetFeeDataList(string strCondition, string strCondition2, string strCondition3, string strCondition4, string strSTARTBILLINGDATE, string strENDBILLINGDATE,string strFeeType, string strUserID, string strShowName, string strCompanyID, string orgcode, string sort) { Boolean bFlag = true; Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try {//根据出库GID查询出库费用,有多少出库明细就产生多少出库费用 var strSql = new StringBuilder(); strSql.Append("select * from VW_WMS_SETTLE "); strSql.Append("where (( " + strCondition2); strSql.Append(" ) or ( " + strCondition4 + "))"); strSql.Append(" and " + strCondition3); List wmsSettleList = new List(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString())) { int i = 0; int existVal = 0; while (reader.Read()) { #region 公共信息,不需要判断 RptWmsSettleDetailEntity wmsSettle = new RptWmsSettleDetailEntity(); wmsSettle.GID = Guid.NewGuid().ToString(); wmsSettle.BLNO = reader["BLNO"].ToString(); wmsSettle.STORAGENAME = reader["STORAGENAME"].ToString(); wmsSettle.CUSTOMNO = reader["CUSTNO"].ToString(); wmsSettle.CONTRACTNO = reader["CONTRACTNO"].ToString(); wmsSettle.WMSNO = reader["WMSNO"].ToString(); wmsSettle.GID_LINK = reader["NID"].ToString(); wmsSettle.OUTBSNO = ""; if (!string.IsNullOrEmpty(reader["BSNO_OUT"].ToString())) wmsSettle.OUTBSNO = reader["BSNO_OUT"].ToString(); wmsSettle.GOODSNAME = reader["GOODSNAME"].ToString(); wmsSettle.GOODSMODEL = reader["GOODSMODEL"].ToString(); wmsSettle.GOODSSTANDARD = reader["GOODSSTANDARD"].ToString(); wmsSettle.GOODSRKSL = Convert.ToDecimal(reader["GOODSRKSL"].ToString()); //入库量 wmsSettle.GOODSPFSL = Convert.ToDecimal(reader["GOODSPFSL_OUT"].ToString()); wmsSettle.GOODSSTOCK = Convert.ToDecimal(reader["GOODSSTOCK"].ToString()); wmsSettle.GOODSPACK = Convert.ToDecimal(reader["GOODSPACK"].ToString()); //入库件数 wmsSettle.GOODSPACKPFSL = Convert.ToDecimal(reader["GOODSPACKPFSL_OUT"].ToString()); wmsSettle.GOODSPACKSTOCK = Convert.ToDecimal(reader["GOODSPACKSTOCK"].ToString()); wmsSettle.WMSDATE = reader["WMSDATE"].ToString(); wmsSettle.FEETYPE = Convert.ToInt16(strFeeType); wmsSettle.DODATE = reader["DODATE_OUT"].ToString(); wmsSettle.ENDBILLINGDATE_OUT = reader["DODATE_OUT"].ToString(); wmsSettle.STARTBILLINGDATE_OUT = reader["STARTBILLINGDATE"].ToString(); wmsSettle.CUSTOMERNAME = reader["CUSTOMERNAME"].ToString(); if (wmsSettle.FEETYPE == 2) { wmsSettle.STARTBILLINGDATE_OUT = reader["STARTBILLINGDATEAP"].ToString(); wmsSettle.CUSTOMERNAME = reader["TRUCKNAME"].ToString(); } wmsSettle.OUTFEE = -1; wmsSettle.WMSGID = reader["WMSGID"].ToString(); #endregion decimal tmpGOODSPFSL = 0; #region 开始统计日期之前已经出库,不统计 if ((wmsSettle.OUTBSNO != "") && CompareDate(strSTARTBILLINGDATE,wmsSettle.ENDBILLINGDATE_OUT ) >= 0) { continue; } #endregion #region 在统计日期时间段内有出库单 if ((wmsSettle.OUTBSNO != "") && CompareDate(strENDBILLINGDATE, wmsSettle.ENDBILLINGDATE_OUT) >= 0) { wmsSettle.ENDBILLINGDATE = wmsSettle.ENDBILLINGDATE_OUT; if (CompareDate(strSTARTBILLINGDATE, wmsSettle.STARTBILLINGDATE_OUT) <= 0) { wmsSettle.LINENUM = 3; //入库出库正好落在统计日期区间内,仓储费不必计算,直接用出库费用 wmsSettle.STARTBILLINGDATE = wmsSettle.STARTBILLINGDATE_OUT; wmsSettle.FEEDAYS = DateDiff(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE); wmsSettle.OUTFEE = Convert.ToDecimal(reader["GOODSOUTFEE_OUT"].ToString());//应收 if (wmsSettle.FEETYPE == 2) wmsSettle.OUTFEE = Convert.ToDecimal(reader["GOODSOUTFEEAP_OUT"].ToString());//应付 } else if (CompareDate(strSTARTBILLINGDATE, wmsSettle.STARTBILLINGDATE_OUT) > 0) { wmsSettle.LINENUM = 6; //入库计费日期早于统计日期的开始日期 wmsSettle.STARTBILLINGDATE = strSTARTBILLINGDATE; wmsSettle.FEEDAYS = DateDiff(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE); tmpGOODSPFSL = wmsSettle.GOODSPFSL; //计算仓储费 } } #endregion #region 在统计日期时间段内没有出库单,但是之后有出库单,重新计算仓储费 if ((wmsSettle.OUTBSNO != "") && CompareDate(strENDBILLINGDATE, wmsSettle.ENDBILLINGDATE_OUT) < 0) { wmsSettle.ENDBILLINGDATE = strENDBILLINGDATE; if (CompareDate(strSTARTBILLINGDATE, wmsSettle.STARTBILLINGDATE_OUT) <= 0) { //入库计费日期晚于统计日期的开始日期 wmsSettle.LINENUM = 4; wmsSettle.STARTBILLINGDATE = wmsSettle.STARTBILLINGDATE_OUT; wmsSettle.FEEDAYS = DateDiff(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE); tmpGOODSPFSL = wmsSettle.GOODSPFSL; //计算仓储费 } else if (CompareDate(strSTARTBILLINGDATE, wmsSettle.STARTBILLINGDATE_OUT) > 0) { //入库计费日期早于统计日期的开始日期 wmsSettle.LINENUM = 5 ; wmsSettle.STARTBILLINGDATE = strSTARTBILLINGDATE; wmsSettle.FEEDAYS = DateDiff(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE); tmpGOODSPFSL = wmsSettle.GOODSPFSL; //计算仓储费 } } #endregion #region 统计日期时间段内没有出库,之前出库的不用算,之后也没有出库 if ((wmsSettle.OUTBSNO == "") && CompareDate(strSTARTBILLINGDATE, wmsSettle.STARTBILLINGDATE_OUT) <= 0) { wmsSettle.LINENUM = 1; //入库计费日期晚于统计日期的开始日期 wmsSettle.ENDBILLINGDATE = strENDBILLINGDATE; wmsSettle.STARTBILLINGDATE = wmsSettle.STARTBILLINGDATE_OUT; wmsSettle.FEEDAYS = DateDiff(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE); tmpGOODSPFSL = wmsSettle.GOODSSTOCK; //计算仓储费 //wmsSettle.OUTFEE = Convert.ToDecimal(reader["GOODSOUTFEE_OUT"].ToString());//应收 } else if ((wmsSettle.OUTBSNO == "") && CompareDate(strSTARTBILLINGDATE, wmsSettle.STARTBILLINGDATE_OUT) > 0) { wmsSettle.LINENUM = 2; //入库计费日期早于统计日期的开始日期 wmsSettle.ENDBILLINGDATE = strENDBILLINGDATE; wmsSettle.STARTBILLINGDATE = strSTARTBILLINGDATE; wmsSettle.FEEDAYS = DateDiff(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE); tmpGOODSPFSL = wmsSettle.GOODSSTOCK; //计算仓储费 } #endregion #region 计算仓储费 if (wmsSettle.LINENUM == 1 || wmsSettle.LINENUM == 4) { string getstr = getWmsRate(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE, wmsSettle.WMSGID, wmsSettle.CUSTOMERNAME, tmpGOODSPFSL, wmsSettle.GID, wmsSettle.FEETYPE, strUserID, strShowName, wmsSettle.WMSGID, wmsSettle.WMSGID, true, false); string[] strls = getstr.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); wmsSettle.OUTFEE = Decimal.Parse(strls[0].ToString()); wmsSettle.FEEDAYS = DateDiff(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE); } else if (wmsSettle.LINENUM == 2 || wmsSettle.LINENUM == 5 || wmsSettle.LINENUM == 6) { getWmsRateTmp(wmsSettle.STARTBILLINGDATE_OUT, wmsSettle.ENDBILLINGDATE, wmsSettle.WMSGID, wmsSettle.CUSTOMERNAME, tmpGOODSPFSL, wmsSettle.GID, wmsSettle.FEETYPE, strUserID, strShowName, wmsSettle.WMSGID, wmsSettle.WMSGID, true, false); string getstrInternal = getWMSRateInternal(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE, wmsSettle.WMSGID, wmsSettle.CUSTOMERNAME, tmpGOODSPFSL, wmsSettle.GID, wmsSettle.FEETYPE, strUserID, strShowName, wmsSettle.WMSGID, wmsSettle.WMSGID, true, false); string[] strlsInternal = getstrInternal.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); wmsSettle.OUTFEE = Decimal.Parse(strlsInternal[0].ToString()); wmsSettle.FEEDAYS = DateDiff(wmsSettle.STARTBILLINGDATE, wmsSettle.ENDBILLINGDATE); } else if (wmsSettle.LINENUM == 3) { copyWmsRate(wmsSettle.GID, wmsSettle.GID_LINK, wmsSettle.FEETYPE); } wmsSettleList.Add(wmsSettle); #endregion } reader.Close(); } #region 统计日期之后出库和未出库合并 #endregion #region 清除 wms_settle_detail_tmp数据 StringBuilder strDelTmp = new StringBuilder(); strDelTmp.Append("delete from wms_settle_detail_tmp") ; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strDelTmp.ToString(), null); #endregion foreach (var settle in wmsSettleList) { StringBuilder sb = new StringBuilder(); sb.Append(@"insert into[wms_settle_detail_tmp]([GID],[BLNO],[CUSTOMNO],[CONTRACTNO],[WMSNO],[OUTBSNO],[CUSTOMERNAME],"); sb.Append(@"[STORAGENAME], [GOODSNAME],[WMSDATE],[DODATE],[WMSDAYS],[STARTBILLINGDATE],[ENDBILLINGDATE],"); sb.Append(@"[GOODSPACK],[GOODSPACKPFSL],[GOODSPACKSTOCK],[GOODSRKSL],[GOODSPFSL],[GOODSSTOCK],"); sb.Append(@"[REMARK_OUT],[FEETYPE],[FEEDAYS],[OUTFEE],"); sb.Append(@"[CREATEUSER],[CREATETIME],[CORPID],[GID_LINK],[LINENUM])"); sb.Append(@" VALUES("); sb.Append("'" + settle.GID + "',");//GID sb.Append("'" + settle.BLNO + "',");//BSNO sb.Append("'" + settle.CUSTOMNO + "', ");//备案清单号 sb.Append("'" + settle.CONTRACTNO + "',");//合同号 sb.Append("'" + settle.WMSNO + "',");//入库单号 sb.Append("'" + settle.OUTBSNO + "',");//出库单号 sb.Append("'" + settle.CUSTOMERNAME + "',");//客户名称 sb.Append("'" + settle.STORAGENAME + "',");//仓库名称 sb.Append("'" + settle.GOODSNAME + "',");//品名 sb.Append("'" + settle.WMSDATE + "',");//入库日期 sb.Append("'" + settle.DODATE + "',");//出库日期 sb.Append("'" + settle.WMSDAYS + "',");// sb.Append("'" + settle.STARTBILLINGDATE + "',");//开始计费日期 sb.Append("'" + settle.ENDBILLINGDATE + "',");//结束计费日期 sb.Append("'" + settle.GOODSPACK + "',");//入库件数 sb.Append("'" + settle.GOODSPACKPFSL + "',");//出库件数 sb.Append("'" + settle.GOODSPACKSTOCK + "',");//库存件数 sb.Append("'" + settle.GOODSRKSL + "',");//入库量 sb.Append("'" + settle.GOODSPFSL + "',");//出库量 sb.Append("'" + settle.GOODSSTOCK + "',");//库存量 sb.Append("'" + settle.REMARK_OUT + "',");//备注 sb.Append("'" + settle.FEETYPE + "',");//收付类型 sb.Append("'" + settle.FEEDAYS + "',");//计费天数 sb.Append("'" + settle.OUTFEE + "',");//仓储费 sb.Append("'" + strUserID + "',");//用户ID sb.Append("'" + DateTime.Now.ToString() + "',");//当前时间 sb.Append("'" + strCompanyID + "',");//单位名称 sb.Append("'" +settle.GID_LINK + "',");//出库GID或者入库GID sb.Append("'" + settle.LINENUM + "'");//LINENUM sb.Append(")"); SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, sb.ToString(), null); } sqlTran.Commit(); } catch (Exception ee) { sqlTran.Rollback(); bFlag = false; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } #region 从【仓储结算明细临时表[wms_settlement_detail_temp]】中提取数据列表,并返回js页面 //按提单号合计出一部分数据 StringBuilder strSql2 = new StringBuilder(); strSql2.Append("select s.BLNO,GID,DUIGID,DUINO,CUSTOMNO,CONTRACTNO,CUSTOMERNAME,GOODSNAME,OUTBSNO,t.OUTFEE"); strSql2.Append(" from( "); strSql2.Append(" select *, row_number() over(partition by[BLNO] order by[GID]) as group_idx "); strSql2.Append(" from [wms_settle_detail_tmp]"); strSql2.Append(" ) s"); strSql2.Append(" inner join "); strSql2.Append(" (select BLNO,sum(outfee) as OUTFEE "); strSql2.Append(" from wms_settle_detail_tmp "); strSql2.Append(" group by BLNO) t on t.BLNO= s.blno "); strSql2.Append(" where s.group_idx = 1 and s.CREATEUSER='" + strUserID + "' and s.CORPID='" + strCompanyID + "'"); if (!bFlag) strSql2.Append(" and 1<0 "); return SetFeeData(strSql2.ToString()); #endregion } #endregion #region 保存 public static DBResult Save(RptWmsSettleListEntity model, string condition, string strUserID, string strCompanyID) { DBResult result = new DBResult(); if (model == null) { result.Success = false; result.Message = "没有输入任何需要修改的数据"; } List dataList = new List(); dataList.Add(model); // Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { #region 保存主表wms_settle_list String strSql = "insert into wms_settle_list(GID,DUINO,CUSTOMERNAME,{0}{2}REMARK,CORPID,CREATEUSER,CREATETIME,ISMAKEOUT,MAKEOUTUSER,MAKEOUTTIME) values (@GID,@DUINO,@CUSTOMERNAME,{1}{3}@REMARK,@CORPID,@CREATEUSER,getdate(),@ISMAKEOUT,@MAKEOUTUSER,getdate())"; SqlParameter[] parameters = { new SqlParameter("@GID", SqlDbType.VarChar,36) , new SqlParameter("@DUINO", SqlDbType.VarChar,100) , new SqlParameter("@CUSTOMERNAME", SqlDbType.VarChar,20) , new SqlParameter("@REMARK", SqlDbType.VarChar,1024) , new SqlParameter("@CORPID", SqlDbType.VarChar,36) , new SqlParameter("@CREATEUSER", SqlDbType.VarChar,36) , new SqlParameter("@ISMAKEOUT", SqlDbType.Bit,1) , new SqlParameter("@MAKEOUTUSER", SqlDbType.VarChar,36) }; parameters[0].Value = model.GID; parameters[1].Value = model.DUINO; parameters[2].Value = model.CUSTOMERNAME; parameters[3].Value = model.REMARK; parameters[4].Value = strCompanyID; parameters[5].Value = strUserID; parameters[6].Value = false; parameters[7].Value = strUserID; //操作时间 string strSTARTBILLINGDATE = model.STARTBILLINGDATE.ToString().IndexOf("0001") > -1 ? "" : "'" + model.STARTBILLINGDATE.ToString() + "',"; string strSTARTBILLINGDATE_name = model.STARTBILLINGDATE.ToString().IndexOf("0001") > -1 ? "" : "STARTBILLINGDATE,"; // string strENDBILLINGDATE = model.ENDBILLINGDATE.ToString().IndexOf("0001") > -1 ? "" : "'" + model.ENDBILLINGDATE.ToString() + "',"; string strENDBILLINGDATE_name = model.ENDBILLINGDATE.ToString().IndexOf("0001") > -1 ? "" : "ENDBILLINGDATE,"; // strSql = String.Format(strSql, strSTARTBILLINGDATE_name, strSTARTBILLINGDATE, strENDBILLINGDATE_name, strENDBILLINGDATE); // int existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), parameters); #endregion #region 保存明细表[wms_settle_detail_tmp] strSql = "insert into wms_settle_detail([GID],[DUIGID],[DUINO],[BLNO],[CUSTOMNO],[CONTRACTNO],[WMSNO],[OUTBSNO],[CUSTOMERNAME],[STORAGENAME],[GOODSNAME],[GOODSMODEL],[GOODSSTANDARD],[GOODSGRADE],[WMSDATE],[DODATE],[WMSDAYS],[STARTBILLINGDATE_OUT],[ENDBILLINGDATE_OUT],[GOODSOUTFEE],[GOODSPACK],[GOODSPACKACTUAL],[GOODSPACKPFSL],[GOODSPACKSTOCK],[GOODSRKSL],[GOODSRKSLACTUAL],[GOODSPFSL],[GOODSSTOCK],[CHARGEUNIT],[REMARK_OUT],[FEETYPE],[FEEGRADE],[FEESCALE],[FEEPRICE],[STARTBILLINGDATE],[ENDBILLINGDATE],[FEEDAYS],[OUTFEE],[ARFEE],[CREATEUSER],[CREATETIME],[ISMAKEOUT],[MAKEOUTUSER],[MAKEOUTTIME],[CORPID],[LINENUM],[GID_LINK]) " + "select [GID],'" + model.GID.ToString().Trim() + "' as DUIGID,'" + model.DUINO.ToString().Trim() + "' as [DUINO],[BLNO],[CUSTOMNO],[CONTRACTNO],[WMSNO],[OUTBSNO],[CUSTOMERNAME],[STORAGENAME],[GOODSNAME],[GOODSMODEL],[GOODSSTANDARD],[GOODSGRADE],[WMSDATE],[DODATE],[WMSDAYS],[STARTBILLINGDATE_OUT],[ENDBILLINGDATE_OUT],[GOODSOUTFEE],[GOODSPACK],[GOODSPACKACTUAL],[GOODSPACKPFSL],[GOODSPACKSTOCK],[GOODSRKSL],[GOODSRKSLACTUAL],[GOODSPFSL],[GOODSSTOCK],[CHARGEUNIT],[REMARK_OUT],[FEETYPE],[FEEGRADE],[FEESCALE],[FEEPRICE],[STARTBILLINGDATE],[ENDBILLINGDATE],[FEEDAYS],[OUTFEE],[ARFEE],[CREATEUSER],getdate(),[ISMAKEOUT],[MAKEOUTUSER],getdate(),[CORPID],[LINENUM],[GID_LINK]" + " from [wms_settle_detail_tmp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "'" + condition; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 保存入库GID到关联表 strSql = "insert into wms_settlement_date([GID],[DUIGID],[DUINO],[LINKGID],[TABLENAME],[STARTBILLINGDATE],[ENDBILLINGDATE],[CREATEUSER],[CREATETIME]) " + "select newid() as GID,'" + model.GID.ToString().Trim() + "' as DUIGID,'" + model.DUINO.ToString().Trim() + "' as DUINO,GID_LINK as LINKGID,'wms' as TABLENAME," + strSTARTBILLINGDATE + strENDBILLINGDATE + "CREATEUSER,getdate() from [wms_settlement_detail_temp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "' and (LINENUM=1 or LINENUM=5) " + condition + " group by LINENUM,GID_LINK,CREATEUSER,CORPID"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 保存出库GID到关联表 strSql = "insert into wms_settlement_date([GID],[DUIGID],[DUINO],[LINKGID],[TABLENAME],[STARTBILLINGDATE],[ENDBILLINGDATE],[CREATEUSER],[CREATETIME]) " + "select newid() as GID,'" + model.GID.ToString().Trim() + "' as DUIGID,'" + model.DUINO.ToString().Trim() + "' as DUINO,GID_LINK as LINKGID,'wms_out' as TABLENAME," + strSTARTBILLINGDATE + strENDBILLINGDATE + "CREATEUSER,getdate() from [wms_settlement_detail_temp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "' and (LINENUM=2 or LINENUM=3 or LINENUM=4) " + condition + " group by LINENUM,GID_LINK,CREATEUSER,CORPID"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 保存ch_fee的GID到关联表 strSql = "insert into wms_settlement_date([GID],[DUIGID],[DUINO],[LINKGID],[TABLENAME],[STARTBILLINGDATE],[ENDBILLINGDATE],[CREATEUSER],[CREATETIME]) " + "select newid() as GID,'" + model.GID.ToString().Trim() + "' as DUIGID,'" + model.DUINO.ToString().Trim() + "' as DUINO,GID as LINKGID,'ch_fee' as TABLENAME," + strSTARTBILLINGDATE + strENDBILLINGDATE + "'" + strUserID + "' as CREATEUSER,getdate() from ch_fee where isnull(WMSOUTBSNO,'') in (select GID_LINK from [wms_settlement_detail_temp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "' and (LINENUM=2 or LINENUM=3 or LINENUM=4) " + condition + ") and (FEESTATUS<>9 or FEESTATUS<>8)"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion sqlTran.Commit(); } catch (Exception) { sqlTran.Rollback(); result.Success = false; result.Message = "保存出现错误,请重试或联系系统管理员"; return result; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } result.Success = true; result.Message = "保存成功"; return result; } #endregion #region 保存 public static DBResult Save(string opstatus, string data, string condition, string strUserID, string strCompanyID) { DBResult result = new DBResult(); Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { string strSql = "select CUSTOMERNAME from [wms_settle_detail_tmp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "'" + condition + " group by CUSTOMERNAME"; DataSet ds = SqlHelper.ExecuteQueryDataset(sqlTran, CommandType.Text, strSql, null); if (ds != null) { foreach (DataRow dr in ds.Tables[0].Rows) { string condition2 = " and CUSTOMERNAME='" + dr["CUSTOMERNAME"].ToString().Trim() + "'"; // #region 保存主表wms_settle_list var model = JsonConvert.Deserialize(data); if (opstatus == "add") { model.GID = "WMSD" + Guid.NewGuid().ToString().Replace("-", ""); model.DUINO = PubSysDAL.GetBillNo("0302");//生成编号 model.CUSTOMERNAME = dr["CUSTOMERNAME"].ToString().Trim(); model.CREATEUSER = strUserID; model.CREATETIME = DateTime.Now; model.DbOperationType = DbOperationType.DbotIns; } else if (opstatus == "edit") { model.DbOperationType = DbOperationType.DbotUpd; } else { model.DbOperationType = DbOperationType.DbotDel; } // if (model == null) { result.Success = false; result.Message = "没有输入任何需要修改的数据"; } List dataList = new List(); dataList.Add(model); // strSql = "insert into wms_settle_list(GID,DUINO,CUSTOMERNAME,{0}{2}REMARK,CORPID,CREATEUSER,CREATETIME,ISMAKEOUT,MAKEOUTUSER,MAKEOUTTIME) values (@GID,@DUINO,@CUSTOMERNAME,{1}{3}@REMARK,@CORPID,@CREATEUSER,getdate(),@ISMAKEOUT,@MAKEOUTUSER,getdate())"; SqlParameter[] parameters = { new SqlParameter("@GID", SqlDbType.VarChar,36) , new SqlParameter("@DUINO", SqlDbType.VarChar,100) , new SqlParameter("@CUSTOMERNAME", SqlDbType.VarChar,20) , new SqlParameter("@REMARK", SqlDbType.VarChar,1024) , new SqlParameter("@CORPID", SqlDbType.VarChar,36) , new SqlParameter("@CREATEUSER", SqlDbType.VarChar,36) , new SqlParameter("@ISMAKEOUT", SqlDbType.Bit,1) , new SqlParameter("@MAKEOUTUSER", SqlDbType.VarChar,36) }; parameters[0].Value = model.GID; parameters[1].Value = model.DUINO; parameters[2].Value = model.CUSTOMERNAME; parameters[3].Value = model.REMARK; parameters[4].Value = strCompanyID; parameters[5].Value = strUserID; parameters[6].Value = false; parameters[7].Value = strUserID; //操作时间 string strSTARTBILLINGDATE = model.STARTBILLINGDATE.ToString().IndexOf("0001") > -1 ? "" : "'" + model.STARTBILLINGDATE.ToString() + "',"; string strSTARTBILLINGDATE_name = model.STARTBILLINGDATE.ToString().IndexOf("0001") > -1 ? "" : "STARTBILLINGDATE,"; // string strENDBILLINGDATE = model.ENDBILLINGDATE.ToString().IndexOf("0001") > -1 ? "" : "'" + model.ENDBILLINGDATE.ToString() + "',"; string strENDBILLINGDATE_name = model.ENDBILLINGDATE.ToString().IndexOf("0001") > -1 ? "" : "ENDBILLINGDATE,"; // strSql = String.Format(strSql, strSTARTBILLINGDATE_name, strSTARTBILLINGDATE, strENDBILLINGDATE_name, strENDBILLINGDATE); // int existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), parameters); #endregion #region 保存明细表[wms_settle_detail] strSql = "insert into wms_settle_detail([GID],[DUIGID],[DUINO],[BLNO],[CUSTOMNO],[CONTRACTNO],[WMSNO],[OUTBSNO],[CUSTOMERNAME],[STORAGENAME],[GOODSNAME],[GOODSMODEL],[GOODSSTANDARD],[GOODSGRADE],[WMSDATE],[DODATE],[WMSDAYS],[STARTBILLINGDATE_OUT],[ENDBILLINGDATE_OUT],[GOODSOUTFEE],[GOODSPACK],[GOODSPACKACTUAL],[GOODSPACKPFSL],[GOODSPACKSTOCK],[GOODSRKSL],[GOODSRKSLACTUAL],[GOODSPFSL],[GOODSSTOCK],[CHARGEUNIT],[REMARK_OUT],[FEETYPE],[FEEGRADE],[FEESCALE],[FEEPRICE],[STARTBILLINGDATE],[ENDBILLINGDATE],[FEEDAYS],[OUTFEE],[ARFEE],[CREATEUSER],[CREATETIME],[ISMAKEOUT],[MAKEOUTUSER],[MAKEOUTTIME],[CORPID],[LINENUM],[GID_LINK]) " + "select [GID],'" + model.GID.ToString().Trim() + "' as DUIGID,'" + model.DUINO.ToString().Trim() + "' as [DUINO],[BLNO],[CUSTOMNO],[CONTRACTNO],[WMSNO],[OUTBSNO],[CUSTOMERNAME],[STORAGENAME],[GOODSNAME],[GOODSMODEL],[GOODSSTANDARD],[GOODSGRADE],[WMSDATE],[DODATE],[WMSDAYS],[STARTBILLINGDATE_OUT],[ENDBILLINGDATE_OUT],[GOODSOUTFEE],[GOODSPACK],[GOODSPACKACTUAL],[GOODSPACKPFSL],[GOODSPACKSTOCK],[GOODSRKSL],[GOODSRKSLACTUAL],[GOODSPFSL],[GOODSSTOCK],[CHARGEUNIT],[REMARK_OUT],[FEETYPE],[FEEGRADE],[FEESCALE],[FEEPRICE],[STARTBILLINGDATE],[ENDBILLINGDATE],[FEEDAYS],[OUTFEE],[ARFEE],[CREATEUSER],getdate(),[ISMAKEOUT],[MAKEOUTUSER],getdate(),[CORPID],[LINENUM],[GID_LINK]" + " from [wms_settle_detail_tmp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "'" ; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion /* #region 保存入库GID到关联表 strSql = "insert into wms_settle_date([GID],[DUIGID],[DUINO],[LINKGID],[TABLENAME],[STARTBILLINGDATE],[ENDBILLINGDATE],[CREATEUSER],[CREATETIME]) " + "select newid() as GID,'" + model.GID.ToString().Trim() + "' as DUIGID,'" + model.DUINO.ToString().Trim() + "' as DUINO,GID_LINK as LINKGID,'wms' as TABLENAME," + strSTARTBILLINGDATE + strENDBILLINGDATE + "CREATEUSER,getdate() from [wms_settle_detail_tmp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "' and (LINENUM=1 or LINENUM=2) group by LINENUM,GID_LINK,CREATEUSER,CORPID"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 保存出库GID到关联表 strSql = "insert into wms_settle_date([GID],[DUIGID],[DUINO],[LINKGID],[TABLENAME],[STARTBILLINGDATE],[ENDBILLINGDATE],[CREATEUSER],[CREATETIME]) " + "select newid() as GID,'" + model.GID.ToString().Trim() + "' as DUIGID,'" + model.DUINO.ToString().Trim() + "' as DUINO,GID_LINK as LINKGID,'wms_out' as TABLENAME," + strSTARTBILLINGDATE + strENDBILLINGDATE + "CREATEUSER,getdate() from [wms_settlement_detail_temp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "' and (LINENUM=3 or LINENUM=4 or LINENUM=5 or LINENUM=6) group by LINENUM,GID_LINK,CREATEUSER,CORPID"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion */ } } sqlTran.Commit(); } catch (Exception) { sqlTran.Rollback(); result.Success = false; result.Message = "保存出现错误,请重试或联系系统管理员"; return result; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } result.Success = true; result.Message = "保存成功"; return result; } #endregion #region Inquery 仓储结算清单明细临时表([wms_settlement_detail_temp])根据提单号查询 static public List GetMblnoDetailList(string strCondition, string strUserID, string strCompanyID, string sort = null) { string strSql2 = "SELECT GID,BLNO,CUSTOMNO,CONTRACTNO,WMSNO,OUTBSNO,CUSTOMERNAME,STORAGENAME,GOODSNAME,GOODSMODEL,GOODSSTANDARD,GOODSGRADE,dbo.trimdate(WMSDATE) as WMSDATE,dbo.trimdate(DODATE) as DODATE,WMSDAYS,dbo.trimdate(STARTBILLINGDATE_OUT) as STARTBILLINGDATE_OUT,dbo.trimdate(ENDBILLINGDATE_OUT) as ENDBILLINGDATE_OUT,GOODSOUTFEE,GOODSPACK,GOODSPACKACTUAL,GOODSPACKPFSL,GOODSPACKSTOCK,GOODSRKSL,GOODSRKSLACTUAL,GOODSPFSL,GOODSSTOCK,CHARGEUNIT,REMARK_OUT,FEETYPE,FEEGRADE,FEESCALE,FEEPRICE,dbo.trimdate(STARTBILLINGDATE) as STARTBILLINGDATE,dbo.trimdate(ENDBILLINGDATE) as ENDBILLINGDATE,FEEDAYS,OUTFEE,[ARFEE],CREATEUSER,CREATETIME,ISMAKEOUT,MAKEOUTUSER,MAKEOUTTIME,CORPID,LINENUM,GID_LINK FROM [wms_settle_detail_tmp] where CREATEUSER='" + strUserID + "' and CORPID='" + strCompanyID + "'" + strCondition; var sortstring = DatasetSort.Getsortstring(sort); if (!string.IsNullOrEmpty(sortstring)) { strSql2 += " order by " + sortstring; } else { strSql2 += " order by CUSTOMERNAME,BLNO,WMSNO,LINENUM,OUTBSNO,STARTBILLINGDATE,FEEGRADE"; } return SetMblnoDetailData(strSql2); } private static List SetMblnoDetailData(String strSql) { var headList = new List(); Database db = DatabaseFactory.CreateDatabase(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString())) { while (reader.Read()) { RptWmsSettleDetailEntity data = new RptWmsSettleDetailEntity(); #region Set DB data to Object data.GID = Convert.ToString(reader["GID"]); data.WMSNO = Convert.ToString(reader["WMSNO"]); data.OUTBSNO = Convert.ToString(reader["OUTBSNO"]); data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]); data.STORAGENAME = Convert.ToString(reader["STORAGENAME"]); data.GOODSNAME = Convert.ToString(reader["GOODSNAME"]); data.GOODSMODEL = Convert.ToString(reader["GOODSMODEL"]); data.GOODSSTANDARD = Convert.ToString(reader["GOODSSTANDARD"]); data.GOODSGRADE = Convert.ToString(reader["GOODSGRADE"]); data.WMSDATE = Convert.ToString(reader["WMSDATE"]); data.DODATE = Convert.ToString(reader["DODATE"]); data.WMSDAYS = Convert.ToInt32(reader["WMSDAYS"]); data.STARTBILLINGDATE_OUT = Convert.ToString(reader["STARTBILLINGDATE_OUT"]); data.ENDBILLINGDATE_OUT = Convert.ToString(reader["ENDBILLINGDATE_OUT"]); data.GOODSOUTFEE = Convert.ToDecimal(reader["GOODSOUTFEE"]); data.GOODSPACK = Convert.ToDecimal(reader["GOODSPACK"]); data.GOODSPACKACTUAL = Convert.ToDecimal(reader["GOODSPACKACTUAL"]); data.GOODSPACKPFSL = Convert.ToDecimal(reader["GOODSPACKPFSL"]); data.GOODSPACKSTOCK = Convert.ToDecimal(reader["GOODSPACKSTOCK"]); data.GOODSRKSL = Convert.ToDecimal(reader["GOODSRKSL"]); data.GOODSRKSLACTUAL = Convert.ToDecimal(reader["GOODSRKSLACTUAL"]); data.GOODSPFSL = Convert.ToDecimal(reader["GOODSPFSL"]); data.GOODSSTOCK = Convert.ToDecimal(reader["GOODSSTOCK"]); data.CHARGEUNIT = Convert.ToString(reader["CHARGEUNIT"]); data.REMARK_OUT = Convert.ToString(reader["REMARK_OUT"]); data.FEETYPE = Convert.ToInt32(reader["FEETYPE"]); data.FEEGRADE = Convert.ToInt32(reader["FEEGRADE"]); data.FEESCALE = Convert.ToInt32(reader["FEESCALE"]); data.FEEPRICE = Convert.ToDecimal(reader["FEEPRICE"]); data.STARTBILLINGDATE = Convert.ToString(reader["STARTBILLINGDATE"]); data.ENDBILLINGDATE = Convert.ToString(reader["ENDBILLINGDATE"]); data.FEEDAYS = Convert.ToInt32(reader["FEEDAYS"]); data.OUTFEE = Convert.ToDecimal(reader["OUTFEE"]); data.ARFEE = Convert.ToDecimal(reader["ARFEE"]); data.CREATEUSER = Convert.ToString(reader["CREATEUSER"]); if (reader["CREATETIME"] != DBNull.Value) data.MAKEOUTTIME = Convert.ToDateTime(reader["CREATETIME"]); data.ISMAKEOUT = Convert.ToBoolean(reader["ISMAKEOUT"]); data.MAKEOUTUSER = Convert.ToString(reader["MAKEOUTUSER"]); if (reader["MAKEOUTTIME"] != DBNull.Value) data.MAKEOUTTIME = Convert.ToDateTime(reader["MAKEOUTTIME"]); data.CORPID = Convert.ToString(reader["CORPID"]); data.LINENUM = Convert.ToInt32(reader["LINENUM"]); data.GID_LINK = Convert.ToString(reader["GID_LINK"]); #endregion headList.Add(data); } reader.Close(); } return headList; } #endregion #region Inquery 仓储结算清单明细表(wms_settle_detail)根据提单号查询 static public List GetMblnoDetailListEdit(string strCondition, string strUserID, string strCompanyID, string sort = null) { string strSql2 = "SELECT GID,BLNO,CUSTOMNO,CONTRACTNO,WMSNO,OUTBSNO,CUSTOMERNAME,STORAGENAME,GOODSNAME,GOODSMODEL,GOODSSTANDARD,GOODSGRADE,dbo.trimdate(WMSDATE) as WMSDATE,dbo.trimdate(DODATE) as DODATE,WMSDAYS,dbo.trimdate(STARTBILLINGDATE_OUT) as STARTBILLINGDATE_OUT,dbo.trimdate(ENDBILLINGDATE_OUT) as ENDBILLINGDATE_OUT,GOODSOUTFEE,GOODSPACK,GOODSPACKACTUAL,GOODSPACKPFSL,GOODSPACKSTOCK,GOODSRKSL,GOODSRKSLACTUAL,GOODSPFSL,GOODSSTOCK,CHARGEUNIT,REMARK_OUT,FEETYPE,FEEGRADE,FEESCALE,FEEPRICE,dbo.trimdate(STARTBILLINGDATE) as STARTBILLINGDATE,dbo.trimdate(ENDBILLINGDATE) as ENDBILLINGDATE,FEEDAYS,OUTFEE,[ARFEE],CREATEUSER,CREATETIME,ISMAKEOUT,MAKEOUTUSER,MAKEOUTTIME,CORPID,LINENUM,GID_LINK FROM wms_settle_detail where CORPID='" + strCompanyID + "' and ISDELETE=0" + strCondition;//CREATEUSER='" + strUserID + "' and var sortstring = DatasetSort.Getsortstring(sort); if (!string.IsNullOrEmpty(sortstring)) { strSql2 += " order by " + sortstring; } else { strSql2 += " order by CUSTOMERNAME,BLNO,WMSNO,LINENUM,OUTBSNO,STARTBILLINGDATE,FEEGRADE"; } return SetMblnoDetailData(strSql2); } #endregion #region Inquery 明细表 wms_settle_detail static public List GetDataDetailListEdit(string strCondition, string strUserID, string strCompanyID, string sort = null) { StringBuilder strSql = new StringBuilder(); strSql.Append("select GID,DUIGID,DUINO,CUSTOMNO,CONTRACTNO,CUSTOMERNAME,GOODSNAME,s.BLNO,t.OUTFEE"); strSql.Append(" from( "); strSql.Append(" select *, row_number() over(partition by[BLNO] order by[GID]) as group_idx "); strSql.Append(" from [wms_settle_detail] where "+strCondition); strSql.Append(" ) s"); strSql.Append(" inner join "); strSql.Append(" (select BLNO,sum(outfee) as OUTFEE "); strSql.Append(" from wms_settle_detail where " + strCondition); strSql.Append(" group by BLNO) t on t.BLNO= s.blno "); strSql.Append(" where s.group_idx = 1 and s.CORPID='" + strCompanyID + "'"); if (!string.IsNullOrEmpty(strCondition)) { strSql.Append(" and " + strCondition); } var sortstring = DatasetSort.Getsortstring(sort); if (!string.IsNullOrEmpty(sortstring)) { strSql.Append(" order by " + sortstring); } else { strSql.Append(" order by BLNO,CUSTOMERNAME"); } return SetFeeData(strSql.ToString()); } #endregion #region 获取List合计数 //获取List合计数 public static List GetDataListSum(string tablename, string condition, string strUserID, string strCompanyID, string hjname) { string strSql = "SELECT newid() as GID, '" + hjname + "'as CUSTOMERNAME, isnull(sum(OUTFEE),0) as OUTFEE, isnull(sum(ARFEE),0) as ARFEE FROM " + tablename + " where CORPID='" + strCompanyID + "' and ISDELETE=0 " + condition + " group by CREATEUSER,CORPID,DUIGID";//CREATEUSER='" + strUserID + "' and return SetDataSum(strSql); } //实体类 public static List SetDataSum(String strSql) { var headList = new List(); Database db = DatabaseFactory.CreateDatabase(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql)) { while (reader.Read()) { var data = new RptWmsSettleDetailEntity(); #region Set DB data to Object data.GID = Convert.ToString(reader["GID"]); data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]); data.OUTFEE = Convert.ToDecimal(reader["OUTFEE"]); data.ARFEE = Convert.ToDecimal(reader["ARFEE"]); #endregion headList.Add(data); } reader.Close(); } return headList; } #endregion #region Delete 删除主表 public static DBResult Delete_Main(string gids, string strUserID, string strCompanyID) { DBResult result = new DBResult(); if (gids.Trim() == "") { result.Success = false; result.Message = "没有输入任何需要修改的数据"; } gids = "'" + gids.Trim().Replace(",","','") + "'"; // Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { #region 判断【ch_fee】中的费用状态,是否允许删除 string sbool = "0"; T_ALL_DA T_ALL_DA = new T_ALL_DA(); string ls = "select count(gid) nums from ch_fee where WMSOUTBSNO in (" + gids + ") and (ISINVOICE=1 or AUDITSTATUS=1 or ORDERINVOICE<>0.00 or DEBITNO is not null or FEESTATUS<>1)"; sbool = T_ALL_DA.GetStrSQL("nums", ls); if (sbool.Trim() == "0") { ls = "select count(gid) nums from ch_fee_do where feeid in (select gid from ch_fee where WMSOUTBSNO in (" + gids + "))"; sbool = T_ALL_DA.GetStrSQL("nums", ls); if (sbool.Trim() != "0") { sqlTran.Rollback(); result.Success = false; result.Message = "有“已申请开票、已开发票或已对帐”的费用,不允许删除,请重新操作!"; return result; } } else { sqlTran.Rollback(); result.Success = false; result.Message = "有“已申请开票、已开发票、已对帐”的费用,不允许删除,请重新操作!"; return result; } #endregion string strError = ""; int iNum = 0; /* #region 判断是否有下一个阶段汇总的数据 string strSql = "select *,STARTBILLINGDATE_MAIN=(select top 1 STARTBILLINGDATE from wms_settle_list where gid=wms_settle_detail.DUIGID),ENDBILLINGDATE_MAIN=(select top 1 ENDBILLINGDATE from wms_settle_list where gid=wms_settle_detail.DUIGID) from wms_settle_detail where ISDELETE=0 and DUIGID in (" + gids + ")"; DataSet ds = SqlHelper.ExecuteQueryDataset(sqlTran, CommandType.Text, strSql, null); if (ds != null) { foreach (DataRow dr in ds.Tables[0].Rows) { strSql = "select count(*) from wms_settle_detail where BLNO='" + dr["BLNO"].ToString().Trim() + "' and DUIGID in (select gid from wms_settle_list where STARTBILLINGDATE>'" + dr["ENDBILLINGDATE_MAIN"].ToString().Trim() + "')"; object statusObj = SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, strSql, null); if (statusObj != null) { iNum = int.Parse(statusObj.ToString().Trim()); } if (iNum > 0) { strError += "、" + dr["BLNO"].ToString().Trim(); } } } if (strError.Trim() != "") { strError = strError.Trim().Substring(1); result.Success = false; result.Message = "提单号" + strError + "已经有下一个阶段汇总的数据,因此不允许删除此账单!"; return result; } #endregion */ #region 把【ch_fee】中WMSOUTBSNO与【仓储结算主表wms_settlement_list】GID关联的数据删除 String strSql = "delete from ch_fee where WMSOUTBSNO in (" + gids + ")"; int existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算关联表wms_settlement_date】中数据【ISDELETE】设为【1】 strSql = "delete from wms_settle_date where DUIGID in (" + gids + ")"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算明细表wms_settlement_detail】中数据【ISDELETE】设为【1】 strSql = "delete from wms_settle_detail where DUIGID in (" + gids + ")"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算主表wms_settlement_list】中数据【ISDELETE】设为【1】 strSql = "delete from wms_settle_list where gid in (" + gids + ")"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion sqlTran.Commit(); } catch (Exception) { sqlTran.Rollback(); result.Success = false; result.Message = "删除出现错误,请重试或联系系统管理员"; return result; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } result.Success = true; result.Message = "删除数据成功"; return result; } #endregion #region Delete 删除明细表 public static DBResult Delete_Detail(RptWmsSettleDetailEntity model, string DUIGID, string strBLNOs, string strUserID) { DBResult result = new DBResult(); if (model == null) { result.Success = false; result.Message = "没有输入任何需要修改的数据"; } List dataList = new List(); dataList.Add(model); // string strError = ""; Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { /* #region 判断是否有下一个阶段汇总的数据 int iNum = 0; string strSql = "select *,STARTBILLINGDATE_MAIN=(select top 1 STARTBILLINGDATE from wms_settle_list where gid=wms_settle_detail.DUIGID),ENDBILLINGDATE_MAIN=(select top 1 ENDBILLINGDATE from wms_settle_list where gid=wms_settle_detail.DUIGID) from wms_settle_detail where ISDELETE=0 " + strBLNOs; DataSet ds = SqlHelper.ExecuteQueryDataset(sqlTran, CommandType.Text, strSql, null); if (ds != null) { foreach (DataRow dr in ds.Tables[0].Rows) { strSql = "select count(*) from wms_settle_detail where BLNO='" + dr["BLNO"].ToString().Trim() + "' and DUIGID in (select gid from wms_settle_list where STARTBILLINGDATE>'" + dr["ENDBILLINGDATE_MAIN"].ToString().Trim() + "')"; object statusObj = SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, strSql, null); if (statusObj != null) { iNum = int.Parse(statusObj.ToString().Trim()); } if (iNum > 0) { strError += "、" + dr["BLNO"].ToString().Trim(); } } } #endregion */ #region 把【ch_fee】中与【仓储结算明细表[wms_settle_detail]】中关联的数据删除,因为添加锁定功能,则暂时屏蔽 //string strSql = "delete from ch_fee where WMSOUTBSNO in (select gid from wms_settlement_detail where 1=1 " + DUIGID + strBLNOs + ")"; //int existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【删除仓储结算关联表wms_settle_date】中数据【ISDELETE】设为【1】 //strSql = "update wms_settle_list set ISDELETE=1,DELETEUSER='" + strUserID + // "',DELETETIME=getdate() where 1=1" + DUIGID; string strSql = "delete from wms_settle_list where 1=1" + DUIGID; int existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算关联表wms_settle_date】中数据【ISDELETE】设为【1】 //strSql = "update wms_settle_date set ISDELETE=1,DELETEUSER='" + strUserID + "',DELETETIME=getdate() where 1=1" + DUIGID + " and LINKGID //in (select GID_LINK from wms_settle_detail where ISDELETE=0 " + strBLNOs + ")"; //existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算明细表wms_settle_detail】中数据【ISDELETE】设为【1】 //strSql = "update wms_settle_detail set ISDELETE=1,DELETEUSER='" + strUserID + "',DELETETIME=getdate() where 1=1 " + DUIGID + strBLNOs; strSql = "delete from wms_settle_detail where 1=1 " + DUIGID + strBLNOs; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算明细表wms_settle_detail】中数据【ISDELETE】设为【1】 strSql = "delete from wms_settle_detail_tmp where 1=1 " + DUIGID + strBLNOs; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion sqlTran.Commit(); } catch (Exception) { sqlTran.Rollback(); result.Success = false; result.Message = "删除出现错误,请重试或联系系统管理员"; return result; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } if (strError.Trim() != "") { strError = strError.Trim().Substring(1); result.Success = false; result.Message = "删除数据成功,但部分提单号" + strError + "已经有下一个阶段汇总的数据不允许删除!"; return result; } else { result.Success = true; result.Message = "删除数据成功"; return result; } } public static DBResult Delete_Detail_Detail( string GID) { DBResult result = new DBResult(); List dataList = new List(); string strError = ""; Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { #region 把【仓储结算明细表wms_settle_detail】中数据【ISDELETE】设为【1】 //strSql = "update wms_settle_detail set ISDELETE=1,DELETEUSER='" + strUserID + "',DELETETIME=getdate() where 1=1 " + DUIGID + strBLNOs; string strSql = $"delete from wms_settle_detail where GID='{GID}'"; int existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算明细表wms_settle_detail】中数据【ISDELETE】设为【1】 strSql = $"delete from wms_settle_detail_tmp where GID='{GID}'"; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion sqlTran.Commit(); } catch (Exception) { sqlTran.Rollback(); result.Success = false; result.Message = "删除出现错误,请重试或联系系统管理员"; return result; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } if (strError.Trim() != "") { strError = strError.Trim().Substring(1); result.Success = false; result.Message = "删除数据成功,但部分提单号" + strError + "已经有下一个阶段汇总的数据不允许删除!"; return result; } else { result.Success = true; result.Message = "删除数据成功"; return result; } } #endregion #region 费用入账 public static DBResult setislock(string gids, string strUserID, string strCompanyID, string strDEPTNAME) { DBResult result = new DBResult(); if (gids.Trim() == "") { result.Success = false; result.Message = "没有输入任何需要修改的数据"; } #region 权限操作范围 RangeDA RangeDA = new EntityDA.RangeDA(); string strRange = RangeDA.GetOPERATERANGE(strUserID.Trim(), "modRptWmsSettlementListIndex");//仓储结算清单列表 if (strRange.Trim().Equals("0"))//全部 { strRange = ""; } else if (strRange.Trim().Equals("1"))//分公司 { strRange = RangeDA.GetRptWmsSettlementListIndexCompany(strCompanyID.Trim()); } else if (strRange.Trim().Equals("2"))//部门 { strRange = RangeDA.GetRptWmsSettlementListIndexDEPT(strCompanyID, strUserID, strDEPTNAME); } else if (strRange.Trim().Equals("3"))//个人 { strRange = RangeDA.GetRptWmsSettlementListIndexPerson(strCompanyID, strUserID); } else if (strRange.Trim().Equals("4"))//无 { strRange = " and 1<0"; } else//空 { strRange = " and 1<0"; } #endregion // Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { gids = "'" + gids.Trim().Replace(",","','") + "'"; #region 从【仓储结算明细临时表wms_settlement_detail】中提取数据,按提单号循环插入ch_Fee,因为添加锁定功能,则暂时屏蔽 string strSql = "insert into ch_fee(GID,BSNO,FEETYPE,FEENAME,CUSTOMERNAME,UNIT,UNITPRICE,QUANTITY,AMOUNT,EXCHANGERATE,CURRENCY,COMMISSIONRATE,FEEFRT,REMARK,ISADVANCEDPAY,ENTEROPERATOR,ENTERDATE,FEESTATUS,WMSOUTBSNO,LINENUM,[TAXRATE],[NOTAXAMOUNT],[TAX],[ORDERSETTLEMENT],[TAXUNITPRICE],[ORDERINVSETTLEMENT]) " + "select newid() as GID,bsno=(select top 1 bsno from V_op_bill where mblno=[wms_settlement_detail].blno),1,'仓储费',CUSTOMERNAME,'单票',sum(isnull(OUTFEE,0)),1,sum(isnull(OUTFEE,0)),1,'RMB',0,'PP',((select top 1 CONVERT(char(10), STARTBILLINGDATE, 20) AS STARTBILLINGDATE from wms_settlement_detail where blno=wms_settlement_detail.blno and STARTBILLINGDATE is not null and CORPID='" + strCompanyID + "' and ISLOCK=0 and ISDELETE=0 and isnull(OUTFEE,0)<>0 and DUIGID in (" + gids + ")" + strRange + " order by STARTBILLINGDATE)+'至'+(select top 1 CONVERT(char(10), ENDBILLINGDATE, 20) AS ENDBILLINGDATE from wms_settlement_detail where blno=wms_settlement_detail.blno and ENDBILLINGDATE is not null and CORPID='" + strCompanyID + "' and ISLOCK=0 and ISDELETE=0 and isnull(OUTFEE,0)<>0 and DUIGID in (" + gids + ")" + strRange + " order by ENDBILLINGDATE desc)+'仓储结算清单'+DUINO+'”中的单票仓储费汇总'),0,'" + strUserID + "',getdate(),1,DUIGID,LINENUM=(select top 1 LINENUM=isnull((select top 1 LINENUM from ch_fee where bsno=(select top 1 bsno from v_op_bill where mblno=[wms_settlement_detail].blno) and feetype=1 order by LINENUM desc),0)+1),0,sum(isnull(OUTFEE,0)),0,0,sum(isnull(OUTFEE,0)),0" + " from [wms_settlement_detail] where CORPID='" + strCompanyID + "' and ISLOCK=0 and ISDELETE=0 and isnull(OUTFEE,0)<>0 and DUIGID in (" + gids + ")" + strRange + " group by blno,CUSTOMERNAME,CREATEUSER,CORPID,DUINO,DUIGID";//CREATEUSER='" + strUserID + "' and int existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算明细表wms_settlement_detail】中的指定数据锁定 strSql = "update wms_settlement_detail set ISLOCK=1,LOCKUSER='" + strUserID + "',LOCKTIME=getdate() where ISLOCK=0 and DUIGID in (" + gids + ")" + strRange; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算主表wms_settlement_detail_temp】中的指定数据锁定 strSql = "update wms_settlement_list set ISLOCK=1,LOCKUSER='" + strUserID + "',LOCKTIME=getdate() where ISLOCK=0 and gid in (" + gids + ")" + strRange; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion sqlTran.Commit(); } catch (Exception) { sqlTran.Rollback(); result.Success = false; result.Message = "操作出现错误,请重试或联系系统管理员"; return result; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } result.Success = true; result.Message = "操作成功!(注意如果用户权限不够,将不予以入账!)"; return result; } #endregion #region 取消入账 public static DBResult setnotlock(string gids, string strUserID, string strCompanyID, string strDEPTNAME) { DBResult result = new DBResult(); if (gids.Trim() == "") { result.Success = false; result.Message = "没有输入任何需要修改的数据"; } #region 权限操作范围 RangeDA RangeDA = new EntityDA.RangeDA(); string strRange = RangeDA.GetOPERATERANGE(strUserID.Trim(), "modRptWmsSettlementListIndex");//仓储结算清单列表 if (strRange.Trim().Equals("0"))//全部 { strRange = ""; } else if (strRange.Trim().Equals("1"))//分公司 { strRange = RangeDA.GetRptWmsSettlementListIndexCompany(strCompanyID.Trim()); } else if (strRange.Trim().Equals("2"))//部门 { strRange = RangeDA.GetRptWmsSettlementListIndexDEPT(strCompanyID, strUserID, strDEPTNAME); } else if (strRange.Trim().Equals("3"))//个人 { strRange = RangeDA.GetRptWmsSettlementListIndexPerson(strCompanyID, strUserID); } else if (strRange.Trim().Equals("4"))//无 { strRange = " and 1<0"; } else//空 { strRange = " and 1<0"; } #endregion // Database db = DatabaseFactory.CreateDatabase(); using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { gids = "'" + gids.Trim().Replace(",", "','") + "'"; #region 判断【ch_fee】中的费用状态,是否允许取消入账 string sbool = "0"; T_ALL_DA T_ALL_DA = new T_ALL_DA(); //string ls = "select count(gid) nums from ch_fee where WMSOUTBSNO in (select gid from wms_settlement_list where ISLOCK=1 and gid in(" + gids + ") " + strRange + ") and (ISINVOICE=1 or AUDITSTATUS=1 or ORDERINVOICE<>0.00 or DEBITNO is not null or FEESTATUS<>1)"; string ls = "select count(gid) nums from ch_fee where WMSOUTBSNO in (select gid from wms_settlement_list where ISLOCK=1 and gid in(" + gids + ") " + strRange + ") and (ISINVOICE=1 or ORDERINVOICE<>0.00 or DEBITNO is not null or (FEESTATUS<>1 and FEESTATUS<>6))"; sbool = T_ALL_DA.GetStrSQL("nums", ls); if (sbool.Trim() == "0") { ls = "select count(gid) nums from ch_fee_do where feeid in (select gid from ch_fee where WMSOUTBSNO in (select gid from wms_settlement_list where ISLOCK=1 and gid in(" + gids + ") " + strRange + "))"; sbool = T_ALL_DA.GetStrSQL("nums", ls); if (sbool.Trim() != "0") { sqlTran.Rollback(); result.Success = false; result.Message = "有“已申请开票、已开发票或已对帐”的费用,不允许取消入账,请重新操作!"; return result; } } else { sqlTran.Rollback(); result.Success = false; result.Message = "有“已申请开票、已开发票、已对帐”的费用,不允许取消入账,请重新操作!"; return result; } #endregion #region 从【仓储结算明细临时表wms_settlement_detail】中提取数据,按提单号循环插入ch_Fee,因为添加锁定功能,则暂时屏蔽 string strSql = "delete from ch_fee where WMSOUTBSNO in (select gid from wms_settlement_list where ISLOCK=1 and gid in(" + gids + ") " + strRange + ")"; int existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算明细表wms_settlement_detail】中的指定数据锁定 strSql = "update wms_settlement_detail set ISLOCK=0,LOCKUSER='" + strUserID + "',LOCKTIME=getdate() where ISLOCK=1 and DUIGID in (" + gids + ")" + strRange; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion #region 把【仓储结算主表wms_settlement_detail_temp】中的指定数据锁定 strSql = "update wms_settlement_list set ISLOCK=0,LOCKUSER='" + strUserID + "',LOCKTIME=getdate() where ISLOCK=1 and gid in (" + gids + ")" + strRange; existVal = SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, strSql.ToString(), null); #endregion sqlTran.Commit(); } catch (Exception) { sqlTran.Rollback(); result.Success = false; result.Message = "入账出现错误,请重试或联系系统管理员"; return result; } finally { SqlHelper.CloseConnection(); sqlTran.Dispose(); } } result.Success = true; result.Message = "入账数据成功"; return result; } #endregion // } }