using System; using System.Data; using System.Data.Common; using System.Collections; using System.Collections.Generic; using System.Text; using DSWeb.MvcShipping.Models.MsChFeeAutoDui; using Microsoft.Practices.EnterpriseLibrary.Data; using DSWeb.EntityDA; using DSWeb.Areas.CommMng.Models; using HcUtility.Comm; using System.Data.SqlClient; using DSWeb.DataAccess; using System.IO; using HcUtility.Core; using DSWeb.Areas.CommMng.DAL; using System.Web; using DSWeb.TruckMng.Comm.Cookie; using DSWeb.MvcShipping.Controllers; using DSWeb.TruckMng.Helper.Repository; using DSWeb.TruckMng.Helper; using DSWeb.MvcShipping.DAL.Chfee_AuditDAL; using DSWeb.Areas.Account.Models.MsOpBill; using System.Linq; using DSWeb.Common.DB; using com.sun.tools.corba.se.idl.toJavaPortable; namespace DSWeb.MvcShipping.DAL.MsChFeeAutoDuiDAL { public class MsChFeeAutoDuiDAL { #region 查询 static public List GetDataList ( string strCondition, string sort = null ) { var strSql = new StringBuilder(); strSql.Append(" select CH_FEE_AutoDui.GID,CUSTOMERNAME,FEETYPE,DUISTATUS,dbo.trimdate(STARTDATE) STARTDATE "); strSql.Append(" ,dbo.trimdate(ENDDATE) ENDDATE,OP,dbo.trimtime(OPDATE) OPDATE,CH_FEE_AutoDui.REMARK,CH_FEE_AutoDui.REMARK2,STATUS,'' STATUS_REF,convert(bigint ,TimeMark) as TimeMark "); strSql.Append(" ,isnull(HAVEDEBIT,0) HAVEDEBIT,DUINO,FEEDC,CURR,FSTATUS,DUITYPE,FEEDUITYPE,FEEDUITYPECONDIT,SALECORP,D.RMBAMOUNT,D.USDAMOUNT,D.L_RMBAMOUNT,D.L_USDAMOUNT "); strSql.Append(" from CH_FEE_AutoDui "); strSql.Append(" left join (select BSNO,SUM(RMBAMOUNT) RMBAMOUNT,SUM(USDAMOUNT) USDAMOUNT,SUM(L_RMBAMOUNT) L_RMBAMOUNT,SUM(L_USDAMOUNT) L_USDAMOUNT FROM CH_FEE_AutoDuiDetail GROUP BY BSNO) D ON (D.BSNO=GID) "); if (!string.IsNullOrEmpty(strCondition)) { strSql.Append(" where " + strCondition); } else { } // var sortstring = DatasetSort.Getsortstring(sort); if (!string.IsNullOrEmpty(sortstring)) { strSql.Append(" order by " + sortstring); } else { strSql.Append(" order by OPDATE desc"); } return SetData(strSql); } static public MsChFeeAutoDuimb GetData ( string condition ) { var _t = ""; var list = GetDataList(condition, _t); if (list.Count > 0) return list[0]; return new MsChFeeAutoDuimb(); } 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()) { MsChFeeAutoDuimb data = new MsChFeeAutoDuimb(); #region Set DB data to Object data.GID = Convert.ToString(reader["GID"]); data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]); data.FEETYPE = Convert.ToString(reader["FEETYPE"]);//1收 2付 3全部 data.DUISTATUS = Convert.ToString(reader["DUISTATUS"]); data.STARTDATE = Convert.ToString(reader["STARTDATE"]); data.ENDDATE = Convert.ToString(reader["ENDDATE"]); data.OP = Convert.ToString(reader["OP"]); data.OPDATE = Convert.ToString(reader["OPDATE"]); data.REMARK = Convert.ToString(reader["REMARK"]); data.REMARK2 = Convert.ToString(reader["REMARK2"]); data.STATUS = Convert.ToString(reader["STATUS"]);//暂时用来存放对账编号 data.STATUS_REF = "";//暂时无用 data.TimeMark = Convert.ToString(reader["TimeMark"]); data.HAVEDEBIT = Convert.ToString(reader["HAVEDEBIT"]); data.DUINO = Convert.ToString(reader["DUINO"]); data.FEEDC = Convert.ToString(reader["FEEDC"]); data.CURR = Convert.ToString(reader["CURR"]); data.FSTATUS = Convert.ToString(reader["FSTATUS"]); data.DUITYPE = Convert.ToString(reader["DUITYPE"]);//1收 2付 3全部 if (data.DUITYPE == "") data.DUITYPE = "1"; data.FEEDUITYPE = Convert.ToString(reader["FEEDUITYPE"]); data.FEEDUITYPECONDIT = Convert.ToString(reader["FEEDUITYPECONDIT"]); data.SALECORP= Convert.ToString(reader["SALECORP"]); data.RMBAMOUNT = Convert.ToString(reader["RMBAMOUNT"]); data.USDAMOUNT = Convert.ToString(reader["USDAMOUNT"]); data.L_RMBAMOUNT = Convert.ToString(reader["L_RMBAMOUNT"]); data.L_USDAMOUNT = Convert.ToString(reader["L_USDAMOUNT"]); #endregion headList.Add(data); } reader.Close(); } return headList; } #endregion #region 查询对账明细 static public List GetBodyList ( string strCondition, string sort = null ) { var strSql = new StringBuilder(); strSql.Append("select dl.*,b.ETD,B.CUSTOMERNAME,B.OP,B.CARRIER,B.TEU,B.SALE,B.CUSTNO,b.DOC,b.SALEDEPT,(select name from company where gid= b.SALECORPID)SALECORP from "); // strSql.Append("(select GID,BSNO,(select top 1 BSNO from v_op_bill where (MBLNO=D.b_mblno or HBLNO=D.MBLNO) and OPLBNAME in('海运进口','海运出口','空运进口','空运出口')) B_BSNO,MBLNO,B_MBLNO,RMBAMOUNT,USDAMOUNT,L_RMBAMOUNT,L_USDAMOUNT,ISOK,REMARK,REMARK2 "); strSql.Append("(select GID,BSNO,B_BSNO,MBLNO,B_MBLNO,RMBAMOUNT,USDAMOUNT,L_RMBAMOUNT,L_USDAMOUNT,ISOK,REMARK,REMARK2 "); strSql.Append(" from CH_FEE_AutoDuiDetail D "); if (!string.IsNullOrEmpty(strCondition)) { strSql.Append(" where " + strCondition); } else { } strSql.Append(") as dl left join v_op_bs B ON (B.BSNO=dl.B_BSNO) "); // var sortstring = DatasetSort.Getsortstring(sort); if (!string.IsNullOrEmpty(sortstring)) { strSql.Append(" order by " + sortstring); } else { strSql.Append(" order by ISOK,ETD,MBLNO"); } return SetBody(strSql); } static public string GetBodyListStr(string strCondition, string sort = null) { var strSql = new StringBuilder(); strSql.Append("select dl.*,b.ETD,B.CUSTOMERNAME,B.OP,B.CARRIER,B.TEU,B.SALE,B.CUSTNO ,b.DOC,b.SALEDEPT,(select name from company where gid= b.SALECORPID)SALECORP from "); // strSql.Append("(select GID,BSNO,(select top 1 BSNO from v_op_bill where (MBLNO=D.b_mblno or HBLNO=D.MBLNO) and OPLBNAME in('海运进口','海运出口','空运进口','空运出口')) B_BSNO,MBLNO,B_MBLNO,RMBAMOUNT,USDAMOUNT,L_RMBAMOUNT,L_USDAMOUNT,ISOK,REMARK,REMARK2 "); strSql.Append("(select GID,BSNO,B_BSNO,MBLNO,B_MBLNO,RMBAMOUNT,USDAMOUNT,L_RMBAMOUNT,L_USDAMOUNT,ISOK,REMARK,REMARK2 "); strSql.Append(",isnull(RMBAMOUNT,0)-isnull(L_RMBAMOUNT,0) Y_RMBAMOUNT,isnull(USDAMOUNT,0)-isnull(L_USDAMOUNT,0) Y_USDAMOUNT "); strSql.Append(" "); strSql.Append(" from CH_FEE_AutoDuiDetail D "); if (!string.IsNullOrEmpty(strCondition)) { strSql.Append(" where " + strCondition); } else { } strSql.Append(") as dl left join v_op_bs B ON (B.BSNO=dl.B_BSNO) "); // var sortstring = DatasetSort.Getsortstring(sort); if (!string.IsNullOrEmpty(sortstring)) { strSql.Append(" order by " + sortstring); } else { strSql.Append(" order by ISOK,ETD,MBLNO"); } return strSql.ToString(); } static public List GetBodyJoinList ( string strCondition, string sort = null ) { var strSql = new StringBuilder(); strSql.Append("select D.GID,D.BSNO,B.BSNO B_BSNO,D.MBLNO,d.B_MBLNO,dbo.trimdate(B.ETD) ETD,B.CUSTOMERNAME,B.OP,B.CARRIER,B.TEU,B.SALE,B.CUSTNO,D.RMBAMOUNT,D.USDAMOUNT,D.L_RMBAMOUNT,D.L_USDAMOUNT,D.ISOK,D.REMARK,D.REMARK2 "); strSql.Append(" ,b.DOC,b.SALEDEPT,(select name from company where gid= b.SALECORPID)SALECORP "); strSql.Append(" from CH_FEE_AutoDuiDetail D left join V_op_bill B on B.MBLNO=D.MBLNO "); if (!string.IsNullOrEmpty(strCondition)) { strSql.Append(" where " + strCondition); } else { } // var sortstring = DatasetSort.Getsortstring(sort); if (!string.IsNullOrEmpty(sortstring)) { strSql.Append(" order by " + sortstring); } else { strSql.Append(" order by ISOK,ETD,MBLNO"); } return SetBody(strSql); } static public List GetLocalList ( string CUSTOMERNAME,string AutoDui_GID, string FEETYPE,string HAVEDEBIT,string FEEDC,string CURR,string FSTATUS,string FEEDUITYPE,string FEEDUITYPECONDIT,string SALECORP) { var strSql = new StringBuilder(); if (FEETYPE == "2") { strSql.Append(" SELECT '' GID,'" + AutoDui_GID + "' BSNO,B.MBLNO,B.MBLNO B_MBLNO,'' B_BSNO,'' ETD,'' CUSTOMERNAME,'' OP,B.CARRIER,MAX(B.TEU) TEU,'' SALE,'' CUSTNO,'0' RMBAMOUNT,'0' USDAMOUNT,'0' ISOK,'' REMARK,'' REMARK2, "); if (FSTATUS == "3" || FSTATUS == "4") { strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 2 THEN (CASE CURRENCY WHEN 'RMB' THEN ISNULL(AMOUNT-SETTLEMENT-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0),0) ELSE 0 END) ELSE 0 END),0)- "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 1 THEN (CASE CURRENCY WHEN 'RMB' THEN ISNULL(AMOUNT-SETTLEMENT-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0),0) ELSE 0 END) ELSE 0 END),0) AS L_RMBAMOUNT, "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 2 THEN (CASE CURRENCY WHEN 'USD' THEN ISNULL(AMOUNT-SETTLEMENT-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0),0) ELSE 0 END)ELSE 0 END),0)- "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 1 THEN (CASE CURRENCY WHEN 'USD' THEN ISNULL(AMOUNT-SETTLEMENT-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0),0) ELSE 0 END)ELSE 0 END),0) AS L_USDAMOUNT "); } else { strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 2 THEN (CASE CURRENCY WHEN 'RMB' THEN ISNULL(AMOUNT-SETTLEMENT,0) ELSE 0 END) ELSE 0 END),0)- "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 1 THEN (CASE CURRENCY WHEN 'RMB' THEN ISNULL(AMOUNT-SETTLEMENT,0) ELSE 0 END) ELSE 0 END),0) AS L_RMBAMOUNT, "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 2 THEN (CASE CURRENCY WHEN 'USD' THEN ISNULL(AMOUNT-SETTLEMENT,0) ELSE 0 END)ELSE 0 END),0)- "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 1 THEN (CASE CURRENCY WHEN 'USD' THEN ISNULL(AMOUNT-SETTLEMENT,0) ELSE 0 END)ELSE 0 END),0) AS L_USDAMOUNT "); } strSql.Append(" ,b.DOC,b.SALEDEPT,(select name from company where gid= b.SALECORPID)SALECORP "); strSql.Append(" FROM CH_FEE F "); strSql.Append(" INNER JOIN V_OP_BILL B ON (F.BSNO=B.BSNO) "); strSql.Append(" where F.AMOUNT<>F.SETTLEMENT and F.CUSTOMERNAME='" + CUSTOMERNAME + "' and EXISTS (select 1 from CH_FEE_AutoDuiDetail fd where (fd.MBLNO=B.MBLNO OR fd.MBLNO=B.HBLNO) and fd.BSNO='" + AutoDui_GID + "') and isnull(b.MBLNO,'')<>'' and isnull(b.iscancel,0)<>1 "); if (HAVEDEBIT == "0") { strSql.Append(" and isnull(f.ISDEBIT,0)=0 "); } if ((FEEDC != "0") && (FEEDC.Trim()!= "")){ strSql.Append(" and f.FEETYPE="+FEEDC); } if (CURR!= "") { strSql.Append(" and f.CURRENCY='" + CURR+"'"); } if (FSTATUS =="1"|| FSTATUS == "3") { strSql.Append(" AND (F.FEESTATUS=0 or F.FEESTATUS=8 or F.FEESTATUS=9)"); } else if (FSTATUS =="2") { strSql.Append(" AND (F.FEESTATUS!=0 and F.FEESTATUS!=8 and F.FEESTATUS!=9) "); } if (FSTATUS == "3" || FSTATUS == "4") { strSql.Append(" AND (f.AMOUNT-isnull(f.SETTLEMENT,0)-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0))<>0"); } if (SALECORP != "") { strSql.Append(" and f.SALECORP='" + SALECORP + "'"); } if (FEEDUITYPE != "") { if (FEEDUITYPECONDIT == "不等于") { strSql.Append(" and not EXISTS (select 1 from code_fee c where c.[NAME]=f.FEENAME and c.DUITYPE='" + FEEDUITYPE + "') "); } else { strSql.Append(" and EXISTS (select 1 from code_fee c where c.[NAME]=f.FEENAME and c.DUITYPE='" +FEEDUITYPE + "') "); } } strSql.Append(" GROUP BY B.MBLNO,B.CARRIER,b.DOC,b.SALEDEPT,b.SALECORPID "); } else { strSql.Append(" SELECT '' GID,'" + AutoDui_GID + "' BSNO,B.MBLNO,B.MBLNO B_MBLNO,'' B_BSNO,'' ETD,'' CUSTOMERNAME,'' OP,B.CARRIER,MAX(B.TEU) TEU,'0' RMBAMOUNT,'0' USDAMOUNT,'0' ISOK,'' REMARK,'' REMARK2, "); if (FSTATUS == "3" || FSTATUS == "4") { strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 2 THEN (CASE CURRENCY WHEN 'RMB' THEN ISNULL(AMOUNT-SETTLEMENT-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0),0) ELSE 0 END) ELSE 0 END),0)- "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 1 THEN (CASE CURRENCY WHEN 'RMB' THEN ISNULL(AMOUNT-SETTLEMENT-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0),0) ELSE 0 END) ELSE 0 END),0) AS L_RMBAMOUNT, "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 2 THEN (CASE CURRENCY WHEN 'USD' THEN ISNULL(AMOUNT-SETTLEMENT-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0),0) ELSE 0 END)ELSE 0 END),0)- "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 1 THEN (CASE CURRENCY WHEN 'USD' THEN ISNULL(AMOUNT-SETTLEMENT-isnull(f.ORDERAMOUNT,0)+isnull(f.ORDERSETTLEMENT,0),0) ELSE 0 END)ELSE 0 END),0) AS L_USDAMOUNT "); } else { strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 1 THEN (CASE CURRENCY WHEN 'RMB' THEN ISNULL(AMOUNT-SETTLEMENT,0) ELSE 0 END) ELSE 0 END),0)- "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 2 THEN (CASE CURRENCY WHEN 'RMB' THEN ISNULL(AMOUNT-SETTLEMENT,0) ELSE 0 END) ELSE 0 END),0) AS L_RMBAMOUNT, "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 1 THEN (CASE CURRENCY WHEN 'USD' THEN ISNULL(AMOUNT-SETTLEMENT,0) ELSE 0 END)ELSE 0 END),0)- "); strSql.Append(" isnull(SUM(CASE FEETYPE WHEN 2 THEN (CASE CURRENCY WHEN 'USD' THEN ISNULL(AMOUNT-SETTLEMENT,0) ELSE 0 END)ELSE 0 END),0) AS L_USDAMOUNT "); } strSql.Append(" ,b.DOC,b.SALEDEPT,(select name from company where gid= b.SALECORPID)SALECORP "); strSql.Append(" FROM CH_FEE F "); strSql.Append(" INNER JOIN V_OP_BILL B ON (F.BSNO=B.BSNO) "); strSql.Append(" where F.AMOUNT<>F.SETTLEMENT and F.CUSTOMERNAME='" + CUSTOMERNAME + "' and EXISTS (select 1 from CH_FEE_AutoDuiDetail fd where (fd.MBLNO=B.MBLNO OR fd.MBLNO=B.HBLNO) and fd.BSNO='" + AutoDui_GID + "') "); if (HAVEDEBIT == "0") { strSql.Append(" and isnull(f.ISDEBIT,0)=0 "); } if ((FEEDC != "0") && (FEEDC.Trim()!= "")) { strSql.Append(" and f.FEETYPE=" + FEEDC); } if (CURR != "") { strSql.Append(" and f.CURRENCY='" + CURR + "'"); } if (SALECORP != "") { strSql.Append(" and f.SALECORP='" + SALECORP + "'"); } if (FSTATUS == "1") { strSql.Append(" AND (F.FEESTATUS=0 or F.FEESTATUS=8 or F.FEESTATUS=9)"); } else if (FSTATUS == "2") { strSql.Append(" AND (F.FEESTATUS!=0 and F.FEESTATUS!=8 and F.FEESTATUS!=9) "); } if (FEEDUITYPE != "") { if (FEEDUITYPECONDIT == "不等于") { strSql.Append(" and not EXISTS (select 1 from code_fee c where c.[NAME]=f.FEENAME and c.DUITYPE='" + FEEDUITYPE + "') "); } else { strSql.Append(" and EXISTS (select 1 from code_fee c where c.[NAME]=f.FEENAME and c.DUITYPE='" + FEEDUITYPE + "') "); } } strSql.Append(" GROUP BY B.MBLNO,B.CARRIER,b.DOC,b.SALEDEPT,b.SALECORPID "); } return SetBody(strSql); } private static List SetBody ( StringBuilder strSql ) { var headList = new List(); Database db = DatabaseFactory.CreateDatabase(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = strSql.ToString(); cmd.CommandTimeout = 120000; //要加这一句 using (IDataReader reader = db.ExecuteReader(cmd)) { while (reader.Read()) { CH_FEE_AutoDuiDetailmb data = new CH_FEE_AutoDuiDetailmb(); #region Set DB data to Object data.GID = Convert.ToString(reader["GID"]); data.BSNO = Convert.ToString(reader["BSNO"]); data.B_BSNO = Convert.ToString(reader["B_BSNO"]); data.ETD = Convert.ToString(reader["ETD"]); data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]); data.OP = Convert.ToString(reader["OP"]); data.CARRIER = Convert.ToString(reader["CARRIER"]); data.TEU = Convert.ToString(reader["TEU"]); data.SALE = Convert.ToString(reader["SALE"]); data.CUSTNO = Convert.ToString(reader["CUSTNO"]); data.MBLNO = Convert.ToString(reader["MBLNO"]); data.B_MBLNO = Convert.ToString(reader["B_MBLNO"]); data.RMBAMOUNT = Convert.ToString(reader["RMBAMOUNT"]); data.USDAMOUNT = Convert.ToString(reader["USDAMOUNT"]); data.L_RMBAMOUNT = Convert.ToString(reader["L_RMBAMOUNT"]); data.L_USDAMOUNT = Convert.ToString(reader["L_USDAMOUNT"]); data.ISOK = Convert.ToString(reader["ISOK"]); data.REMARK = Convert.ToString(reader["REMARK"]); data.REMARK2 = Convert.ToString(reader["REMARK2"]); try { data.Y_RMBAMOUNT = Convert.ToDecimal(data.RMBAMOUNT) - Convert.ToDecimal(data.L_RMBAMOUNT); data.Y_USDAMOUNT = Convert.ToDecimal(data.USDAMOUNT) - Convert.ToDecimal(data.L_USDAMOUNT); } catch { } data.DOC = Convert.ToString(reader["DOC"]); data.SALEDEPT = Convert.ToString(reader["SALEDEPT"]); data.SALECORP = Convert.ToString(reader["SALECORP"]); #endregion headList.Add(data); } reader.Close(); } return headList; } #endregion #region 导入excel public enum RowState : uint { Insert, Update, None } /// /// 处理excel导入的对账单 /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// public static bool ImportExcelData ( HttpRequestBase request, DataTable table, out string msg, out Int32 InsertCount, out Int32 UpdateCount, string AutoDui_GID, string CUSTOMERNAME, string FEETYPE, out List headList, string userid, string username, string companyid ) { var isSucess = false; msg = ""; headList = new List(); var headdate = GetData("GID='" + AutoDui_GID + "'"); if (table == null) throw new ArgumentNullException("table"); var billNoList = new List(); Database db = DatabaseFactory.CreateDatabase(); InsertCount = 0; UpdateCount = 0; msg = ""; /* var objcodename = db.ExecuteScalar(CommandType.Text, "select ISAGENTCN from Info_Client where shortname='" + AIRLINES + "'"); var ISAGENTCN = Convert.ToString(objcodename); var AIRCODE_OBJ = db.ExecuteScalar(CommandType.Text, "select codename from Info_Client where shortname='" + AIRLINES + "'"); var AIRCODE = Convert.ToString(AIRCODE_OBJ); */ using (DbConnection connection = db.CreateConnection()) //using (SqlTransaction idbTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { connection.Open(); try { var orgCode = CookieConfig.GetCookie_OrgCode(request); var userCode = CookieConfig.GetCookie_UserCode(request); var userName = CookieConfig.GetCookie_UserName(request); var _i = 0; //var ExpDate = ""; //var headList = new List(); var _DelDetailList = new List(); var _oldDetailList_NoMBL = GetBodyList(" BSNO = '" + AutoDui_GID + "' "); var mblnoList = _oldDetailList_NoMBL.Select(s => s.MBLNO).Distinct().ToList(); var cdc = new CommonDataContext(); //var billList = cdc.v_op_bs.Where(x => mblnoList.Contains(x.MBLNO) ).ToList(); foreach (DataRow row in table.Rows) { _i++; //if (_i < 1) continue; //var _ACCDATE = ACCDATE; var _p = 0; if(string.IsNullOrEmpty(Convert.ToString(row[_p + 0]).Replace(" ", "").Replace("'", ""))) { break; } var _Detail = new CH_FEE_AutoDuiDetailmb(); //_Detail.GID = Guid.NewGuid().ToString(); //_Detail.MBLNO = Convert.ToString(row[_p + 0]).Replace(" ", "").Replace("'", "");//.Trim() //20221121 保留中间的空格,去掉首尾空格 var _mblno = Convert.ToString(row[_p + 0]).Replace("'", ""); _Detail.MBLNO = _mblno.Trim(); _Detail.B_MBLNO = _Detail.MBLNO; //20221122 增加逻辑 如果是已退舱的业务 跳过 //20221128 改为显示但不对账 在remake当中实现 //var currbs = cdc.v_op_bs.Where(x => x.MBLNO == _mblno && (x.ISCANCEL == 1 || x.ISCANCEL == 2 || x.ISCANCEL == 4)).ToList(); //if (currbs != null && currbs.Count > 0) //{ // continue; //} _Detail.MBLNO = GetMBLNO(_Detail.B_MBLNO); var RMBAMOUNT = Convert.ToDecimal(row[_p + 1]); var USDAMOUNT = Convert.ToDecimal(row[_p + 2]); _Detail.RMBAMOUNT= Convert.ToString(RMBAMOUNT); _Detail.USDAMOUNT= Convert.ToString(USDAMOUNT); // _Detail.B_MBLNO= //var L_RMBAMOUNT = GetCustFee(CUSTOMERNAME, _Detail.MBLNO, FEETYPE, "RMB", headdate.HAVEDEBIT); //if (L_RMBAMOUNT == "") { //业务当中没有该提单号的业务 var 已有该提单号=false; var 此次表内有该提单号 = false; foreach (var _old in _oldDetailList_NoMBL) { if (_old.MBLNO == _Detail.MBLNO) { 已有该提单号 = true; continue; } } //if (已有该提单号 == false) {//如果在此次表内就有重复提单号 foreach (var _h in headList) { if (_h.MBLNO == _Detail.MBLNO) { 此次表内有该提单号 = true; _h.RMBAMOUNT = Convert.ToString(Convert.ToDecimal(_h.RMBAMOUNT) + Convert.ToDecimal(_Detail.RMBAMOUNT)); _h.USDAMOUNT = Convert.ToString(Convert.ToDecimal(_h.USDAMOUNT) + Convert.ToDecimal(_Detail.USDAMOUNT)); continue; } } if (已有该提单号 || 此次表内有该提单号) { continue; } if (已有该提单号) {//如果该自动对账当中已经存在相同提单号的记录 _Detail = _oldDetailList_NoMBL[0]; //_Detail.BSNO=""; _Detail.RMBAMOUNT = Convert.ToString(RMBAMOUNT); _Detail.USDAMOUNT = Convert.ToString(USDAMOUNT); _Detail.L_RMBAMOUNT = "0"; _Detail.L_USDAMOUNT = "0"; UpdateCount++; }/*else if (此次表内有该提单号) {//如果该自动对账当中已经存在相同提单号的记录 _Detail = _oldDetailList_NoMBL[0]; //_Detail.BSNO=""; _Detail.RMBAMOUNT = Convert.ToString(RMBAMOUNT + Convert.ToDecimal(_Detail.RMBAMOUNT)); _Detail.USDAMOUNT = Convert.ToString(USDAMOUNT + Convert.ToDecimal(_Detail.USDAMOUNT)); _Detail.L_RMBAMOUNT = "0"; _Detail.L_USDAMOUNT = "0"; //UpdateCount++; } */ else {//如果不存在 _Detail.GID = Guid.NewGuid().ToString(); _Detail.BSNO = ""; _Detail.RMBAMOUNT = Convert.ToString(RMBAMOUNT); _Detail.USDAMOUNT = Convert.ToString(USDAMOUNT); _Detail.L_RMBAMOUNT = "0"; _Detail.L_USDAMOUNT = "0"; InsertCount++; } /* if (msg == "") { //msg = "有如下提单号在系统内还不存在:" + _Detail.MBLNO; } else { //msg = msg + " ; " + _Detail.MBLNO; }*/ //_Detail.L_RMBAMOUNT="0"; //_Detail.L_USDAMOUNT="0"; headList.Add(_Detail); //continue; //} //headList.Add(_Detail); } var duihead = GetData("GID='" + AutoDui_GID + "'"); duihead.DbOperationType = DbOperationType.DbotUpd; duihead.ModelUIStatus = "E"; var modb = new ModelObjectRepository(); DBResult result = modb.Save(duihead, ModelObjectConvert.ToModelObjectList(headList), ModelObjectConvert.ToModelObjectList(_DelDetailList) ); T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); //var blUpSQL = " update CH_FEE_AutoDuiDetail set B_BSNO=(select top 1 BSNO from v_op_bS where (MBLNO=D.b_mblno or HBLNO=D.MBLNO) and OPLBNAME in('海运进口','海运出口','空运进口','空运出口') ) FROM CH_FEE_AutoDuiDetail d where bsno='" + duihead.GID+"'"; var blUpSQL = " update CH_FEE_AutoDuiDetail set B_BSNO=(select top 1 BSNO from v_op_bS where (MBLNO=D.mblno or HBLNO=D.MBLNO) and isnull(MBLNO,'')<>'' and isnull(iscancel,0)<>1 ) FROM CH_FEE_AutoDuiDetail d where bsno='" + duihead.GID + "'"; bool bl = T_ALL_DA.GetExecuteSqlCommand(blUpSQL); // result = ReMake(duihead, userid, username, companyid); isSucess = true; } catch (Exception exception) { //idbTran.Rollback(); isSucess = false; msg = exception.Message; } } //UnKnowenTruckNo = UnKnowenTruckNo + " " + UnKnowenAirPort; return isSucess; } public static string GetMBLNO(string MBLNO) { Database db = DatabaseFactory.CreateDatabase(); using (DbConnection connection = db.CreateConnection()) //using (SqlTransaction idbTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { connection.Open(); try { var _L_RMBAMOUNT = db.ExecuteScalar(CommandType.Text, "select MBLNO FROM v_op_bill where MBLNO='"+MBLNO+"' "); if (string.IsNullOrEmpty(Convert.ToString(_L_RMBAMOUNT))) { _L_RMBAMOUNT = db.ExecuteScalar(CommandType.Text, "select MBLNO FROM v_op_bill where BSNO IN (SELECT BSNO FROM op_manifest WHERE MBLNO='" + MBLNO + "') "); if (string.IsNullOrEmpty(Convert.ToString(_L_RMBAMOUNT))) return MBLNO; else return Convert.ToString(_L_RMBAMOUNT); } else { return MBLNO; } } catch (Exception exception) { return ""; } } } public static string GetCustRMBFee ( string CUSTOMERNAME, string MBLNO ) { Database db = DatabaseFactory.CreateDatabase(); using (DbConnection connection = db.CreateConnection()) //using (SqlTransaction idbTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { connection.Open(); try { var _L_RMBAMOUNT = db.ExecuteScalar(CommandType.Text, "select dbo.[F_GetFee_BS_Cust_NoDui_RMB]('" + MBLNO + "','" + CUSTOMERNAME + "') "); var L_RMBAMOUNT = "0"; if (string.IsNullOrEmpty(Convert.ToString(_L_RMBAMOUNT))) { } else { L_RMBAMOUNT = Convert.ToString(_L_RMBAMOUNT); } return L_RMBAMOUNT; } catch (Exception exception) { return "0"; } } } public static string GetCustUSDFee ( string CUSTOMERNAME, string MBLNO ) { Database db = DatabaseFactory.CreateDatabase(); using (DbConnection connection = db.CreateConnection()) //using (SqlTransaction idbTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { connection.Open(); try { var _L_USDAMOUNT = db.ExecuteScalar(CommandType.Text, "select dbo.[F_GetFee_BS_Cust_NoDui_USD]('" + MBLNO + "','" + CUSTOMERNAME + "') "); var L_USDAMOUNT = "0"; if (string.IsNullOrEmpty(Convert.ToString(_L_USDAMOUNT))) { } else { L_USDAMOUNT = Convert.ToString(_L_USDAMOUNT); } return L_USDAMOUNT; } catch (Exception exception) { return "0"; } } } public static string GetCustFee ( string CUSTOMERNAME, string MBLNO ,string TYPE,string Currency,string HAVEDEBIT ) { Database db = DatabaseFactory.CreateDatabase(); using (DbConnection connection = db.CreateConnection()) //using (SqlTransaction idbTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { connection.Open(); try { var _L_AMOUNT = new object(); if (HAVEDEBIT == "0") {//不含已对账 _L_AMOUNT = db.ExecuteScalar(CommandType.Text, "select dbo.[F_GetFee_BS_Cust_NoDui]('" + MBLNO + "','" + CUSTOMERNAME + "'," + TYPE + ",'" + Currency + "') "); } else {//包含已对账 _L_AMOUNT = db.ExecuteScalar(CommandType.Text, "select dbo.[F_GetFee_BS_Cust_HaveDui]('" + MBLNO + "','" + CUSTOMERNAME + "'," + TYPE + ",'" + Currency + "') "); } var L_AMOUNT = "0"; if (string.IsNullOrEmpty(Convert.ToString(_L_AMOUNT))) { L_AMOUNT = Convert.ToString(_L_AMOUNT); } else { L_AMOUNT = Convert.ToString(_L_AMOUNT); } return L_AMOUNT; } catch (Exception exception) { return ""; } } } public static DBResult ReMake ( MsChFeeAutoDuimb _head, string userid, string username, string companyid ) { var head = GetData("GID='" + _head.GID + "'"); var DetailList = MsChFeeAutoDuiDAL.GetBodyList("BSNO='" + head.GID + "'"); if (_head.DUITYPE!="2") DetailList = InsertLocalDetail(head, DetailList, userid, username, companyid); var _DelDetailList = new List(); var modb = new ModelObjectRepository(); DBResult result = modb.SaveComm("BSNO", head.GID, ModelObjectConvert.ToModelObjectList(DetailList), ModelObjectConvert.ToModelObjectList(_DelDetailList) ); DetailList = GetBodyList("BSNO='" + head.GID + "'"); //var _DelDetailList = new List(); var LocalDetailList = GetLocalList(head.CUSTOMERNAME,head.GID,head.FEETYPE,head.HAVEDEBIT,head.FEEDC,head.CURR,head.FSTATUS,head.FEEDUITYPE,head.FEEDUITYPECONDIT,head.SALECORP); //var LocalDetailList = DetailList; var cdc = new CommonDataContext(); //var result = new DBResult(); Database db = DatabaseFactory.CreateDatabase(); using (DbConnection connection = db.CreateConnection()) //using (SqlTransaction idbTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { connection.Open(); try { foreach (CH_FEE_AutoDuiDetailmb _D in DetailList) { var currbs = cdc.v_op_bill.Where(x => x.MBLNO == _D.MBLNO && (x.ISCANCEL == 1 || x.ISCANCEL == 2 || x.ISCANCEL == 4)).ToList(); var currbs_Cando = cdc.v_op_bill.Where(x => x.MBLNO == _D.MBLNO && (x.ISCANCEL == null || x.ISCANCEL == 0 )).ToList(); if (currbs != null && currbs.Count > 0 && (currbs_Cando==null || currbs_Cando.Count==0)) { //增加判断 如果 _D.REMARK2 = "该业务已退舱"; continue; } if (_D.B_BSNO == "") { _D.REMARK2 = "我方无此提单号"; continue; } else { } if (_D.ISOK == "1" || _D.ISOK == "True") { //重新计算时不再跳过对账成功的业务。 //continue; } var _localDetail=new CH_FEE_AutoDuiDetailmb(); var get = false; foreach (var _L in LocalDetailList) { if (_L.MBLNO.ToUpper() == _D.MBLNO.ToUpper()) { _localDetail = _L; get = true; continue; } } if (get == false) { _D.L_RMBAMOUNT = "0"; _D.L_USDAMOUNT = "0"; } else { _D.L_RMBAMOUNT = _localDetail.L_RMBAMOUNT; _D.L_USDAMOUNT = _localDetail.L_USDAMOUNT; } if (_D.REMARK2 != "对方账单无此提单号") { if (Convert.ToDecimal(_D.RMBAMOUNT) == Convert.ToDecimal(_D.L_RMBAMOUNT) && Convert.ToDecimal(_D.USDAMOUNT) == Convert.ToDecimal(_D.L_USDAMOUNT)) { _D.ISOK = "1"; _D.REMARK2 = "自动对账成功"; } else { _D.ISOK = "0"; if (Convert.ToDecimal(_D.RMBAMOUNT) > Convert.ToDecimal(_D.L_RMBAMOUNT)) { _D.REMARK2 = "对方RMB金额较多"; } else if (Convert.ToDecimal(_D.RMBAMOUNT) < Convert.ToDecimal(_D.L_RMBAMOUNT)) { _D.REMARK2 = "我方RMB金额较多"; } if (Convert.ToDecimal(_D.USDAMOUNT) > Convert.ToDecimal(_D.L_USDAMOUNT)) { if (_D.REMARK2.Contains("对方RMB金额较多") == true) { _D.REMARK2 = "对方金额较多"; } else { if (_D.REMARK2.Contains("对方USD金额较多") == false) { _D.REMARK2 = _D.REMARK2 + "对方USD金额较多"; } } } else if (Convert.ToDecimal(_D.USDAMOUNT) < Convert.ToDecimal(_D.L_USDAMOUNT)) { if (_D.REMARK2.Contains("我方RMB金额较多")==true) { _D.REMARK2 = "我方金额较多"; } else { if (_D.REMARK2.Contains("我方USD金额较多") == false) { _D.REMARK2 = _D.REMARK2 + "我方USD金额较多"; } } } } } } head.DbOperationType = DbOperationType.DbotUpd; head.ModelUIStatus = "E"; head.STATUS = GetSTATUS(DetailList); if (head.STATUS == "对账平衡") { head.DUISTATUS = "对账平衡"; } else { head.DUISTATUS = "对账不平衡"; } //var modb = new ModelObjectRepository(); result = modb.Save(head, ModelObjectConvert.ToModelObjectList(DetailList), ModelObjectConvert.ToModelObjectList(_DelDetailList) ); } catch (Exception exception) { //idbTran.Rollback(); result.Success = false; result.Message = exception.Message; } } //UnKnowenTruckNo = UnKnowenTruckNo + " " + UnKnowenAirPort; return result; } private static List InsertLocalDetail ( MsChFeeAutoDuimb head, List DetailList, string userid, string username, string companyid ) { //如果有开始和结束日期,查询所有结算对象中包含head.customername的业务 //然后遍历DetailList,如果提单号没有则向DetailList当中添加该业务。 var BillList = new List(); if (head.STARTDATE != "" && head.ENDDATE != "") { if (head.HAVEDEBIT == "0") { // BillList = Chfee_AuditDAL.Chfee_AuditDAL.GetBillDataList(" OPLBNAME='海运出口' and ETD between '" + head.STARTDATE + "' and '" + head.ENDDATE + "' and exists(select 1 from ch_fee where customername='" + head.CUSTOMERNAME + "' and bsno=V_op_Bill.BSNO and Amount<>settlement and isnull(ISDEBIT,0)=0) ", userid, username, companyid); BillList = Chfee_AuditDAL.Chfee_AuditDAL.GetBillDataList(" ETD between '" + head.STARTDATE + "' and '" + head.ENDDATE + "' and exists(select 1 from ch_fee where customername='" + head.CUSTOMERNAME + "' and bsno=V_op_Bill.BSNO and Amount<>settlement and isnull(ISDEBIT,0)=0) ", userid, username, companyid); } else { BillList = Chfee_AuditDAL.Chfee_AuditDAL.GetBillDataList(" ETD between '" + head.STARTDATE + "' and '" + head.ENDDATE + "' and exists(select 1 from ch_fee where customername='" + head.CUSTOMERNAME + "' and bsno=V_op_Bill.BSNO and Amount<>settlement) ", userid, username, companyid); } foreach (var _bill in BillList) { var 需要添加 = true; foreach (var _d in DetailList) { if (_bill.MBLNO == _d.MBLNO) { 需要添加 = false; continue; } } if (需要添加) { var newdetail = new CH_FEE_AutoDuiDetailmb(); newdetail.GID = Guid.NewGuid().ToString(); newdetail.MBLNO = _bill.MBLNO; newdetail.ISOK = "0"; newdetail.BSNO = ""; newdetail.RMBAMOUNT = "0"; newdetail.USDAMOUNT = "0"; newdetail.L_RMBAMOUNT = "0"; newdetail.L_USDAMOUNT = "0"; newdetail.B_MBLNO= _bill.MBLNO; newdetail.REMARK2 = "对方账单无此提单号"; DetailList.Add(newdetail); } } } return DetailList; } public static string GetSTATUS ( List DetailList ) { var _r = ""; var _rb = true; var _RMB=0M; var _USD=0M; foreach (var _D in DetailList) { if (_D.ISOK != "1") { _rb = false; _RMB += Convert.ToDecimal(_D.RMBAMOUNT) - Convert.ToDecimal(_D.L_RMBAMOUNT); _USD += Convert.ToDecimal(_D.USDAMOUNT) - Convert.ToDecimal(_D.L_USDAMOUNT); } } if (_rb != true) { _r = "对账不平衡:"; if (_RMB > 0) { _r += "对方RMB金额较多,差额" + Convert.ToString(_RMB); } if (_RMB < 0) { _r += "我方RMB金额较多,差额" + Convert.ToString(_RMB); } if (_USD > 0) { if (_r != "对账不平衡:") { _r += ","; } _r += "对方USD金额较多,差额" + Convert.ToString(_USD); } if (_USD < 0) { if (_r != "对账不平衡:") { _r += ","; } _r += "我方USD金额较多,差额" + Convert.ToString(_USD); } } if (_rb == true) { return "对账平衡"; } else { return _r; } } #endregion } }