using System; using System.Linq; using System.Web.Mvc; using DSWeb.Areas.Account.DAL.Chfee_Invoice_HangXin; using DSWeb.Areas.Account.DAL.Chfee_Invoiceapplication; using DSWeb.Areas.Account.Models.Chfee_Invoiceapplication; using DSWeb.Areas.Account.Models.Chfee_Invoice_HangXin; using DSWeb.Areas.Account.Models.Chfee_do_detail; using DSWeb.Areas.Account.Models.BillChfeeDetail; using DSWeb.MvcShipping.Helper; using DSWeb.MvcShipping.Comm.Cookie; using DSWeb.Areas.CommMng.DAL; using System.Collections.Generic; using HcUtility.Comm; using HcUtility.Core; using DSWeb.EntityDA; using DSWeb.Areas.Account.Models.Chfee_Exrate; using System.IO; using Microsoft.Practices.EnterpriseLibrary.Data; using System.Text; using System.Data; using InvokeWebService; using DSWeb.Areas.Account.Models.RytInvoice; using System.Xml.Serialization; using System.Xml; using DSWeb.MvcShipping.DAL.MsSysParamSet; using DSWeb.Areas.SysMng.DAL.DBTableConn; using DSWeb.Areas.SysMng.Models.DBTableConn; using Spire.Pdf; using Aspose.Words; using iTextSharp.text; using iTextSharp.text.pdf; using DSWeb.MvcShipping.DAL.MsSysInvInterFaceSet; using DSWeb.Common.Helper; using DSWeb.MvcShipping.DAL.MsBaseInfoDAL; using System.ServiceModel.Configuration; using DSWeb.Areas.MvcShipping.Helper; using DSWeb.SoftMng.Model; using DSWeb.MvcShipping.DAL.MsInfoClient; using System.Web.UI.WebControls; using DSWeb.Areas.CommMng.Models; using DSWeb.SoftMng.Filter; namespace DSWeb.Areas.Account.Controllers { [JsonRequestBehavior] public class Chfee_invoice_HangXinController : Controller { // // GET: public ActionResult Index() { return View(); } // // GET: / public ActionResult Edit() { return View(); } public ActionResult BLEdit() { return View(); } public ActionResult AppEdit() { return View(); } public ActionResult BookEdit() { return View(); } public ActionResult BookIndex() { return View(); } public ActionResult DetailView() { return View(); } public ActionResult OUTDB_P2_Index() { return View(); } public ActionResult OUTDB_P2_Edit() { return View(); } #region Get [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetDataList(int start, int limit, string sort, string condition) { var canlogin = BasicDataRefDAL.CheckLogin(Session); if (!canlogin.Success) { return (ContentResult)canlogin.Data; } if (sort != null) { sort = sort.Replace("OPERATORNAME", "OPERATOR"); sort = sort.Replace("DELOPERATORNAME", "DELETEOPERATOR"); sort = sort.Replace("SALECORP", "SALECORPID"); sort = sort.Replace("INVOICECATEGORYREF", "INVOICECATEGORY"); sort = sort.Replace("INVOICETYPEREF", "INVOICETYPE"); sort = sort.Replace("APPLICANT", "(select top 1 (select ShowName from [user] where GID=ap.applicant) APPLICANT from ch_fee_invoiceapplication ap where invbillno=cm.BILLNO)"); } var dataList = ChinvoiceDAL.GetDataList(start, limit, condition, Convert.ToString(Session["USERID"]), CookieConfig.GetCookie_UserCode(Request), Convert.ToString(Session["COMPANYID"]), sort); int count = ChinvoiceDAL.getTotalCount(condition, CookieConfig.GetCookie_UserId(Request), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"])); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetDataListStr(int start, int limit, string sort, string condition, int billtype) { var dataListStr = ChinvoiceDAL.GetDataListStr(condition, Convert.ToString(Session["USERID"]), CookieConfig.GetCookie_UserCode(Request), Convert.ToString(Session["COMPANYID"]), sort); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", data = dataListStr }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetData(string handle, string condition, bool isapp) { ChInvoice_HangXin head = null; if (handle == "edit" || handle == "copyadd") { head = ChinvoiceDAL.GetData(condition); } if (head == null) { head = new ChInvoice_HangXin(); } if (handle == "add") { head.OPERATOR = Convert.ToString(Session["USERID"]); head.OPERATORNAME = Convert.ToString(Session["SHOWNAME"]); head.CREATEUSER = Convert.ToString(Session["USERID"]); head.PTORRED = "1";//默认为正票 head.SALECORPID = Session["COMPANYID"].ToString(); head.PAYEE = Convert.ToString(Session["SHOWNAME"]); head.CHECKER = Convert.ToString(Session["SHOWNAME"]); head.PUSHMOBILE = "0"; head.INVOICELINE = MsSysParamSetDAL.GetData("PARAMNAME='DEFAULTINVOICELINE'").PARAMVALUE; var defaultPAYEE = MsSysParamSetDAL.GetData("PARAMNAME='INVSKR'").PARAMVALUE; var defaultCHECKER = MsSysParamSetDAL.GetData("PARAMNAME='INVFHR'").PARAMVALUE; var defaultINVKPR = MsSysParamSetDAL.GetData("PARAMNAME='INVKPR'").PARAMVALUE; if (!string.IsNullOrEmpty(defaultPAYEE)) head.PAYEE = defaultPAYEE; if (!string.IsNullOrEmpty(defaultCHECKER)) head.CHECKER = defaultCHECKER; if (!string.IsNullOrEmpty(defaultINVKPR)) { head.OPERATORNAME = defaultINVKPR; T_ALL_DA T_ALL_DA = new T_ALL_DA(); var USERID = T_ALL_DA.GetStrSQL("USERID", "select top 1 USERID from VW_user where SHOWNAME='" + defaultINVKPR + "'"); head.OPERATOR = USERID; } if (isapp) { head.INVOICETYPE = 2; head.INVOICETYPEREF = "申请发票"; } else { head.INVOICETYPE = 1; head.INVOICETYPEREF = "自由发票"; } } var json = JsonConvert.Serialize( new { Success = true, Message = "查询成功", data = head }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetDetailList(string condition) { var dataList = ChinvoiceDAL.GetDetailList(condition); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetBillList(string condition, string sort) { var dataList = ChinvoiceDAL.GetBodyList(condition, sort); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetTruckBillList(string condition, string sort) { var dataList = ChinvoiceDAL.GetTruckBodyList(condition, sort); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetBillSum(string condition) { var dataList = ChinvoiceDAL.GetBodySumList(condition); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetFeeDataList(int start, int limit, string sort, string condition) { var dataList = ChinvoiceDAL.GetFeeDataList(condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"]), sort); var list = dataList.Skip(start).Take(limit); var json = JsonConvert.Serialize( new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = list.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetBillDataList(int start, int limit, string sort, string condition) { var dataList = ChinvoiceDAL.GetAddBillList(start, limit, condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"]), sort); int count = ChinvoiceDAL.getAddBillTotalCount(condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"])); var json = JsonConvert.Serialize( new { Success = true, Message = "查询成功", totalCount = count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetTruckBillDataList(int start, int limit, string sort, string condition) { var dataList = ChinvoiceDAL.GetAddTruckBillList(start, limit, condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"]), sort); int count = ChinvoiceDAL.getAddTruckBillTotalCount(condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"])); var json = JsonConvert.Serialize( new { Success = true, Message = "查询成功", totalCount = count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetFeeDetailList(string sort, string condition) { var dataList = ChinvoiceDAL.GetFeeDetailList(condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"]), sort); var json = JsonConvert.Serialize( new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetAddSum(string condition) { var dataList = ChinvoiceDAL.GetAddSum(condition, Convert.ToString(Session["USERID"]), Convert.ToString(Session["SHOWNAME"]), Convert.ToString(Session["COMPANYID"])); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } #endregion #region save public ContentResult Save(string opstatus, string data, string body) { var headData = JsonConvert.Deserialize(data); var bodyList = JsonConvert.Deserialize>(body); if (opstatus == "add") { headData.GID = Guid.NewGuid().ToString(); headData.BILLNO = PubSysDAL.GetBillNo("0308"); headData.COMPANYID = Convert.ToString(Session["COMPANYID"]); headData.OPERATOR = Convert.ToString(Session["USERID"]); headData.OPERATETIME = DateTime.Now; headData.CREATEUSER = Convert.ToString(Session["USERID"]); headData.CREATETIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); headData.DbOperationType = DbOperationType.DbotIns; } else if (opstatus == "edit") { headData.DbOperationType = DbOperationType.DbotUpd; headData.ModelUIStatus = "E"; } else { headData.DbOperationType = DbOperationType.DbotDel; } //填写未指定但当前可以填写的其他信息 if ((!headData.ISFRINV) && (headData.INVOICECUSTNAME == "" || headData.CUSTRATENO == "")) { T_ALL_DA T_ALL_DA = new T_ALL_DA(); DataSet dsHSCODE = T_ALL_DA.GetAllSQL("SELECT Gid,CODENAME as CustCode,SHORTNAME as CustName,CODENAME+'-'+SHORTNAME as CodeAndName,BillRises1,INVADDRTEL,[DESCRIPTION],RmbBillRises,(select top 1 BANKNAME+' '+ACCOUNT FROM info_client_bank WHERE CURRENCY='RMB' AND LINKID=info_client.GID) Rmbbank,Rmbaccount,usdBillRises,(select top 1 BANKNAME+' '+ACCOUNT FROM info_client_bank WHERE CURRENCY='USD' AND LINKID=info_client.GID) usdbank,usdaccount,TaxNo,Addr,Tel from info_client WHERE SHORTNAME='" + headData.CUSTOMERNAME + "'"); if (dsHSCODE != null) { if (dsHSCODE.Tables[0].Rows.Count > 0) { if (dsHSCODE.Tables[0].Rows[0]["BillRises1"].ToString() != "") headData.INVOICECUSTNAME = dsHSCODE.Tables[0].Rows[0]["BillRises1"].ToString(); else headData.INVOICECUSTNAME = dsHSCODE.Tables[0].Rows[0]["DESCRIPTION"].ToString(); if (headData.CUSTRATENO == "") headData.CUSTRATENO = dsHSCODE.Tables[0].Rows[0]["TaxNo"].ToString(); if (headData.CUSTADDRTEL == "") { if (dsHSCODE.Tables[0].Rows[0]["INVADDRTEL"].ToString() != "") headData.CUSTADDRTEL = dsHSCODE.Tables[0].Rows[0]["INVADDRTEL"].ToString(); else headData.CUSTADDRTEL = dsHSCODE.Tables[0].Rows[0]["Addr"].ToString() + " " + dsHSCODE.Tables[0].Rows[0]["Tel"].ToString(); } if (string.IsNullOrEmpty(headData.CUSTTEL)) { if (dsHSCODE.Tables[0].Rows[0]["Tel"].ToString() != "") headData.CUSTTEL = dsHSCODE.Tables[0].Rows[0]["Tel"].ToString(); } if (string.IsNullOrEmpty(headData.CUSTADDR)) { if (dsHSCODE.Tables[0].Rows[0]["Addr"].ToString() != "") headData.CUSTADDR = dsHSCODE.Tables[0].Rows[0]["Addr"].ToString(); } if (headData.CUSTBANK == "") { if (headData.RECVCURR == "USD") headData.CUSTBANK = dsHSCODE.Tables[0].Rows[0]["usdbank"].ToString(); else headData.CUSTBANK = dsHSCODE.Tables[0].Rows[0]["Rmbbank"].ToString(); } } } } if ((!headData.ISFRINV) && (string.IsNullOrEmpty(headData.CUSTTEL) || string.IsNullOrEmpty(headData.CUSTADDR))) { T_ALL_DA T_ALL_DA = new T_ALL_DA(); DataSet dsHSCODE = T_ALL_DA.GetAllSQL("SELECT Gid,CODENAME as CustCode,SHORTNAME as CustName,CODENAME+'-'+SHORTNAME as CodeAndName,BillRises1,INVADDRTEL,[DESCRIPTION],RmbBillRises,(select top 1 BANKNAME+' '+ACCOUNT FROM info_client_bank WHERE CURRENCY='RMB' AND LINKID=info_client.GID) Rmbbank,Rmbaccount,usdBillRises,usdbank,usdaccount,TaxNo,Addr,Tel from info_client WHERE SHORTNAME='" + headData.CUSTOMERNAME + "'"); if (dsHSCODE != null) { if (dsHSCODE.Tables[0].Rows.Count > 0) { var custaddtel = ""; if (headData.CUSTADDRTEL == "") { if (dsHSCODE.Tables[0].Rows[0]["INVADDRTEL"].ToString() != "") custaddtel = dsHSCODE.Tables[0].Rows[0]["INVADDRTEL"].ToString(); else custaddtel = dsHSCODE.Tables[0].Rows[0]["Addr"].ToString() + " " + dsHSCODE.Tables[0].Rows[0]["Tel"].ToString(); headData.CUSTADDRTEL = custaddtel; } else { if (dsHSCODE.Tables[0].Rows[0]["INVADDRTEL"].ToString() != "") custaddtel = dsHSCODE.Tables[0].Rows[0]["INVADDRTEL"].ToString(); else custaddtel = dsHSCODE.Tables[0].Rows[0]["Addr"].ToString() + " " + dsHSCODE.Tables[0].Rows[0]["Tel"].ToString(); } if (string.IsNullOrEmpty(headData.CUSTTEL) && !string.IsNullOrEmpty(custaddtel)) { if (custaddtel.Length != 0) headData.CUSTTEL = ChinvoiceDAL.GetTelephoneList(custaddtel); } if (string.IsNullOrEmpty(headData.CUSTADDR) && !string.IsNullOrEmpty(custaddtel.Trim())) { if (custaddtel.Length != 0) headData.CUSTADDR = custaddtel.Replace(headData.CUSTTEL, ""); } } } } if (headData.CUSTBANK == null) headData.CUSTBANK = ""; if (!string.IsNullOrEmpty(headData.RECVCURR) && string.IsNullOrEmpty(headData.CUSTBANK) && !string.IsNullOrEmpty(headData.CUSTOMERNAME)) { var bankList = MsInfoClientDAL.GetBankList("LINKID in (select GID FROM info_client WHERE SHORTNAME='" + headData.CUSTOMERNAME + "')"); if (bankList != null && bankList.Count != 0) { foreach (var bank in bankList) { if ((bank.CURRENCY == headData.RECVCURR) && (bank.ISINVDEF == "1")) headData.CUSTBANK = bank.BANKNAME_ACCOUNT; } } } var isPost = true; var errorstr = ""; if (headData.INVOICENO != "") { var ct = ChinvoiceDAL.GetRdCount("GID<>'" + headData.GID + "' AND INVOICENO='" + headData.INVOICENO + "' and COMPANYID='" + Convert.ToString(Session["COMPANYID"]) + "'"); if (ct != 0) { isPost = false; errorstr = "发票号重复"; } } if (string.IsNullOrEmpty(headData.INVITERFACE)) { var INVITERFACE = MsSysInvInterFaceSetDAL.GetData("INVOICELINE='" + headData.INVOICELINEREF + "'", ""); if (INVITERFACE.INVITERFACE == "") headData.INVITERFACE = INVITERFACE.INVITERFACE; else headData.INVITERFACE = "诺诺发票接口"; } else { } if (!string.IsNullOrEmpty(headData.CUSTTEL) && (headData.CUSTTEL.Trim().Length > 20)) { isPost = false; errorstr = "客户电话长度不允许超过20"; } //if (!string.IsNullOrEmpty(headData.CUSTADDR) && (headData.CUSTADDR.Trim().Length > 80)) //{ // isPost = false; // errorstr = "客户电话长度不允许超过80"; //} if (!string.IsNullOrEmpty(headData.SALECORPID) && !string.IsNullOrEmpty(headData.ACCOUNT)) { var banklist = MsBaseInfoDAL.GetAllBANKList("LINKID='" + headData.SALECORPID + "'"); if (banklist.Find(x => (x.CURRENCY == headData.RECVCURR || x.CURRENCY == "") && x.BANKACCOUNT == headData.ACCOUNT) == null) { isPost = false; errorstr = "银行及账号于收款单位和币别不一致,请检查"; } } if (isPost) { if (headData.INVOICEMAKETIME == "") headData.INVOICEMAKETIME = null; if (headData.ETD == "") headData.ETD = null; headData.CUSTRATENO = headData.CUSTRATENO.Trim(); headData.CUSTBANK = headData.CUSTBANK.Trim(); headData.REMARK = headData.REMARK.Trim(); var BILLNO = headData.BILLNO; var modb = new ModelObjectDB(); DBResult result = ChinvoiceDAL.SaveInvDetail(headData.GID, bodyList); if (result.Success == true) { result = modb.Save(headData); //ChinvoiceDAL.UpdateInvNoUse(headData.INVOICENO, Convert.ToString(Session["USERID"]),headData.BILLNO); //if (headData.EXCHANGERATE != 0) //{ // ChinvoiceDAL.updateFeeTax(headData.BILLNO, headData.EXCHANGERATE); //} }; var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = ChinvoiceDAL.GetData(" BILLNO='" + BILLNO + "'", Convert.ToString(Session["USERID"]), CookieConfig.GetCookie_UserCode(Request), Convert.ToString(Session["COMPANYID"])) }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } else { var jsonRespose = new JsonResponse { Success = false, Message = errorstr + "不允许保存!" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } } public ContentResult AddDetail(string bill, string data, string curr, bool islist, string GID, string invoiceno) { //首先判断是否有 modInvoiceImport发票引入费用 权限 //var ar = BasicDataRefDAL.GetAR("modInvoiceImport", Session["USERID"].ToString()); //if var bodyList = JsonConvert.Deserialize>(data); var headdata = ChinvoiceDAL.GetData(" BILLNO='" + bill + "'", Convert.ToString(Session["USERID"]), CookieConfig.GetCookie_UserCode(Request), Convert.ToString(Session["COMPANYID"])); var modb = new ModelObjectDB(); DBResult result = ChinvoiceDAL.AddDetail(bill, bodyList, curr, Convert.ToString(Session["COMPANYID"]), islist, GID, headdata); if (result.Success) { ChinvoiceDAL.p_update_Amount(bill, GID); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult AddBill(string bill, string feesql, string storeCurrExrate, bool islist, string GID, bool custgroup = false) { //首先判断是否有 modInvoiceImport发票引入费用 权限 var headData = JsonConvert.Deserialize(bill); var exrateList = JsonConvert.Deserialize>(storeCurrExrate); if ((exrateList == null) || (exrateList.Count == 0)) { exrateList = ChinvoiceDAL.GetCurrExrateData(headData.CUSTOMERNAME, headData.CURRENCY, feesql, custgroup); if (exrateList.Count == 0) { var modb = new ModelObjectDB(); DBResult result = ChinvoiceDAL.AddBill(headData, feesql, exrateList, Convert.ToString(Session["COMPANYID"]), islist, GID, Convert.ToString(Session["USERID"]), custgroup); if (result.Success) { ChinvoiceDAL.p_update_Amount(headData.BILLNO, GID); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } else { var jsonRespose = new JsonResponse { Success = true, Message = "查询成功", Data = exrateList.ToList() }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } } else { var modb = new ModelObjectDB(); DBResult result = ChinvoiceDAL.AddBill(headData, feesql, exrateList, Convert.ToString(Session["COMPANYID"]), islist, GID, Convert.ToString(Session["USERID"])); if (result.Success) { ChinvoiceDAL.p_update_Amount(headData.BILLNO, GID); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } } public ContentResult DelBill(string data, string billno, string GID) { //首先判断是否有 modInvoiceImport发票引入费用 权限 var bodyList = JsonConvert.Deserialize>(data); DBResult result = ChinvoiceDAL.DelFeeDo(bodyList, GID); if (result.Success) { ChinvoiceDAL.p_update_Amount(billno, GID); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } // public ContentResult Delete(string data) { var headData = JsonConvert.Deserialize(data); headData = ChinvoiceDAL.GetData(" cm.BILLNO='" + headData.BILLNO + "'"); DBResult result; //首先判断是否有 modInvLock 发票开出锁定 //20191205 防止已经获得【流水号】的发票业务被删除 if (!string.IsNullOrWhiteSpace(headData.INVOICESERIALNUM) && headData.INVAMOUNT > 0) { var jsonRespose1 = new JsonResponse { Success = false, Message = "已经获得流水号且仍包含费用的发票业务不能删除" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose1) }; } if (!string.IsNullOrWhiteSpace(headData.INVOICESERIALNUM) && !string.IsNullOrWhiteSpace(headData.INVOICENO)) { var jsonRespose1 = new JsonResponse { Success = false, Message = "已经实际开出的发票业务不能删除" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose1) }; } if (headData.EINVOICESTATEREF == "开票中") { var jsonRespose1 = new JsonResponse { Success = false, Message = "当前发票状态不允许删除" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose1) }; } result = SetInvoiceFee(headData); if (result.Success == true) { var modb = new ModelObjectDB(); modb.Delete(headData); ChinvoiceDAL.UpdateInvNoCancelUse(headData.INVOICENO); T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); var blUpSQL = " insert into sys_log(GID,NAME,LOGTYPE,LOGTIME,LOGCONTENT,CREATEUSER) values(NEWID(),'" + headData.BILLNO + "','删除发票','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + headData.INVOICENO + '(' + headData.CUSTOMERNAME + ')' + "','" + Convert.ToString(Session["USERID"]) + "')"; bool bl = T_ALL_DA.GetExecuteSqlCommand(blUpSQL); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } /// /// 看看USERID是否能操作这条数据的ModName功能 /// /// /// /// /// private bool CanOperate(ChInvoice_HangXin head, string ModName) { var rangestr = BasicDataRefDAL.CanOperateStr_INVOICE(ModName, Session["USERID"].ToString()); var _L = ChinvoiceDAL.GetData("GID='" + head.GID + "' and " + rangestr); if (_L.GID == head.GID) { return true; } else return false; } /// /// 发票作废 /// /// /// public ContentResult DeleteUp(string data) { //首先判断是否有 modInvLock 发票开出锁定 var headData = JsonConvert.Deserialize(data); //if (!CanOperate(headData, "modInvLock")) { // var jsonRespose = new JsonResponse { Success =false, Message = "您还不具备针对这条业务的‘发票开出锁定’权限" }; // return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; //} T_ALL_DA T_ALL_DA = new T_ALL_DA(); var strCT = T_ALL_DA.GetStrSQL("CT", "select COUNT(*) CT from ch_fee_do_payapplication where PAYBILLNO='" + headData.BILLNO + "'"); if (strCT != "0" && strCT != "") { var jsonRespose2 = new JsonResponse { Success = false, Message = "已发票结算,不允许作废" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose2) }; } return DeleteUp(headData); } private ContentResult DeleteUp(ChInvoice_HangXin headData) { //首先判断是否有 modInvLock 发票开出锁定 //if (!CanOperate(headData, "modInvLock")) //{ // var jsonRespose1 = new JsonResponse { Success = false, Message = "您还不具备针对这条业务的‘发票开出锁定’权限" }; // return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose1) }; //} T_ALL_DA T_ALL_DA = new T_ALL_DA(); var strCT = T_ALL_DA.GetStrSQL("CT", "select COUNT(*) CT from ch_fee_do_payapplication where PAYBILLNO='" + headData.BILLNO + "'"); if (strCT != "0" && strCT != "") { var jsonRespose2 = new JsonResponse { Success = false, Message = "已发票结算,不允许作废" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose2) }; } DBResult result; result = SetInvoiceFee(headData); if (result.Success == true) { ChinvoiceDAL.UpdateDelete(headData.BILLNO, Convert.ToString(Session["USERID"])); //ChinvoiceDAL.UpdateInvNoDelete(headData.INVOICENO, Convert.ToString(Session["USERID"])); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } /// /// 发票作废取消 /// /// /// public ContentResult CancelDeleteUp(string data) { var headData = JsonConvert.Deserialize(data); //首先判断是否有 modInvLock 发票开出锁定 //if (!CanOperate(headData, "modInvLock")) //{ // var jsonRespose1 = new JsonResponse { Success = false, Message = "您还不具备针对这条业务的‘发票开出锁定’权限" }; // return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose1) }; //} DBResult result; result = ChinvoiceDAL.UpdateDelete(headData.BILLNO, Convert.ToString(Session["USERID"]), false); if (result.Success == true) { ChinvoiceDAL.UpdateInvNoDelete(headData.INVOICENO, Convert.ToString(Session["USERID"]), false); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } #endregion public ContentResult GetInvoiceNo(string condition) { var dataList = ChinvoiceDAL.GetInvoiceNo(Convert.ToString(Session["COMPANYID"]), Convert.ToString(Session["USERID"])); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } #region 发票申请添加 public ContentResult AddAppDetail(string bill, string data, string invoiceno, string GID) { var bodyList = JsonConvert.Deserialize>(data); var StrGid = ""; if (bodyList != null) { foreach (var enumValue in bodyList) { if (StrGid == "") StrGid = "'" + enumValue.GID + "'"; else StrGid = StrGid + ",'" + enumValue.GID + "'"; } } if (StrGid != "") { StrGid = "(" + StrGid + ")"; var dataList = ChinvoiceapplicationDAL.GetDataInvList(" BILLSTATUS=0 and cm.GID IN " + StrGid, Convert.ToString(Session["USERID"]), CookieConfig.GetCookie_UserCode(Request), Convert.ToString(Session["COMPANYID"])); if (dataList != null && dataList.Count != 0) { var modb = new ModelObjectDB(); DBResult result = ChinvoiceDAL.AddAppDetail(bill, dataList, invoiceno, Convert.ToString(Session["COMPANYID"]), GID); if (result.Success) { ChinvoiceDAL.p_update_Amount(bill, GID); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } else { var jsonRespose = new JsonResponse { Success = false, Message = "发票申请已生成发票,请刷新!" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } } else { var jsonRespose = new JsonResponse { Success = false, Message = "无需要添加的发票申请!" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } } public ContentResult DelAppBill(string data, string billno, string GID) { var bodyList = JsonConvert.Deserialize>(data); DBResult result = ChinvoiceDAL.DelAppList(bodyList, billno); if (result.Success) { ChinvoiceDAL.p_update_Amount(billno, GID); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult DelInvDetail(string billno, string body, string GID) { var bodyList = JsonConvert.Deserialize>(body); DBResult result = ChinvoiceDAL.DelInvDetail(bodyList); if (result.Success) { ChinvoiceDAL.p_update_Amount(billno, GID); } var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } #endregion #region 锁定和撤销锁定 public ContentResult Lock(string bill) { //首先判断是否有 modInvLock 发票开出锁定 DBResult result = ChinvoiceDAL.Lock(bill, Convert.ToString(Session["USERID"])); var json = JsonConvert.Serialize(result); return new ContentResult() { Content = json }; } public ContentResult UnLock(string bill) { //首先判断是否有 modInvLock 发票开出锁定 DBResult result = ChinvoiceDAL.UnLock(bill, Convert.ToString(Session["USERID"])); var json = JsonConvert.Serialize(result); return new ContentResult() { Content = json }; } public ContentResult LockList(string bills) { //首先判断是否有 modInvLock 发票开出锁定 DBResult result = ChinvoiceDAL.LockList(bills, Convert.ToString(Session["USERID"])); var json = JsonConvert.Serialize(result); return new ContentResult() { Content = json }; } public ContentResult UnLockList(string bills) { //首先判断是否有 modInvLock 发票开出锁定 DBResult result = ChinvoiceDAL.UnLockList(bills, Convert.ToString(Session["USERID"])); var json = JsonConvert.Serialize(result); return new ContentResult() { Content = json }; } #endregion #region 保存指定发票业务list的PDF文件 将其拼合成一个dpf后返回url public ContentResult GetONEPDF(string BILLNOS, string sort = "") { JsonResponse result = new JsonResponse(); try { var BILLList = new List(); //var billnoList = BasicDataRefDAL.getStrListfromCommaStr(BILLNOS, ','); var billnoSqlStr = "'" + BILLNOS.Replace(",", "','") + "'"; var condition = $" cm.billno in({billnoSqlStr})"; DatasetSort _sort = new DatasetSort(); var sortstr = @"[{""property"":""INVOICEMAKETIME"",""direction"":""asc""}]"; //if (!string.IsNullOrWhiteSpace(sort)) //{ // if (sort == "INVOICEMAKETIME") // { // //_sort.property="INVOICEMAKETIME"; // // _sort.direction = "asc"; // sortstr = @"[{""property"":""INVOICEMAKETIME"",""direction"":""asc""}]"; // } //} var dataList = ChinvoiceDAL.GetDataList(0, 9999, condition, Convert.ToString(Session["USERID"]), CookieConfig.GetCookie_UserCode(Request), Convert.ToString(Session["COMPANYID"]), sortstr); if (dataList == null || dataList.Count == 0) { result.Success = false; result.Message = "没有可以打印的发票文件"; return result.getContentReult(); } //var _h = dataList[0]; //if (_h.INVITERFACE == "诺诺全电发票") //{ // //诺诺全电 保持用开票时间排序 //} //else //{ //} BasicDataRefDAL.ClearPath(BasicDataRefDAL.getPath("INVOICEPDF")); var pdflist = new List(); foreach (var invoice in dataList) { //var billno = bill.BILLNO; //var invoice = ChinvoiceDAL.GetData($" BILLNO ='{billno}' "); if (!string.IsNullOrWhiteSpace(invoice.INVOICEPDFURL)) { var filename = BasicDataRefDAL.HttpDownloadFile(invoice.INVOICEPDFURL, "INVOICEPDF", invoice.INVOICENO + ".pdf"); pdflist.Add(filename); //if (pdflist.Count == 1) { // pdflist.Add(filename); //} } } if (pdflist.Count == 0) { result.Success = false; result.Message = "没有可以打印的发票文件"; return result.getContentReult(); } else { //pdflist.OrderBy(o => o); //var _h = dataList[0]; //if (_h.INVITERFACE == "诺诺全电发票") //{ // //诺诺全电 //} //else //{ // pdflist.Sort(delegate (string p1, string p2) // { // return p1.CompareTo(p2); // }); //} //20240325 原逻辑是将pdf文件根据文件名(发票号)排序,现在是查询时用开票时间排序,生成时不排序 } var pdfarray = pdflist.ToArray(); SavePDF(pdfarray); result.Success = true; result.Message = ""; result.Data = "../../INVOICEPDF/" + Session["USERID"].ToString() + ".pdf"; } catch (Exception e) { result.Success = false; result.Message = e.Message; } return result.getContentReult(); } private void SavePDF(string[] pdfarray) { string outputFileName = BasicDataRefDAL.getPath("INVOICEPDF") + Session["USERID"].ToString() + ".pdf"; //PdfDocumentBase doc = PdfDocument.MergeFiles(pdfarray); //doc.Pages.Insert(0); //doc.Pages.RemoveAt(0); //doc.Save(outputFileName, FileFormat.PDF); iTextSharp.text.Document document = new iTextSharp.text.Document(new PdfReader(pdfarray[0]).GetPageSize(1)); PdfCopy copy = new PdfCopy(document, new FileStream(outputFileName, FileMode.Create)); document.Open(); for (int i = 0; i < pdfarray.Length; i++) { PdfReader reader = new PdfReader(pdfarray[i]); int n = reader.NumberOfPages; for (int j = 1; j <= n; j++) { document.NewPage(); PdfImportedPage page = copy.GetImportedPage(reader, j); copy.AddPage(page); } } document.Close(); } //private void SavePDF_Aspose(string[] pdfarray) //{ // string outputFileName = BasicDataRefDAL.getPath("INVOICEPDF") + Session["USERID"].ToString() + ".pdf"; // PdfDocumentBase doc = PdfDocument.MergeFiles(pdfarray); // doc.Pages.Insert(0); // doc.Pages.RemoveAt(0); // doc.Save(outputFileName, FileFormat.PDF); //} #endregion public ContentResult ExpInv(string bills) { var bodyList = JsonConvert.Deserialize>(bills); var path = Server.MapPath("../../EDIFiles/ExportInv"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } // var result = new DBResult(); var filename = ""; filename = ChinvoiceDAL.CreateInvList(bodyList, path); if (filename != "") { //result.Data = "../../EDIFiles/ExportInv/" + filename; result.Data = filename; filename = Path.GetFileName(filename); result.Success = true; result.Message = filename; } else { result.Success = false; result.Message = "无当前匹配的导出文件!"; } // var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = result.Data }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult ExpDZInv(string bills) { var bodyList = JsonConvert.Deserialize>(bills); var path = Server.MapPath("../../EDIFiles/ExportInv"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } // var result = new DBResult(); var filename = ""; filename = ChinvoiceDAL.CreateDZInvList(bodyList, path, Convert.ToString(Session["COMPANYID"])); if (filename != "") { //result.Data = "../../EDIFiles/ExportInv/" + filename; result.Data = filename; filename = Path.GetFileName(filename); result.Success = true; result.Message = filename; } else { result.Success = false; result.Message = "无当前匹配的导出文件!"; } // var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = result.Data }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } #region 航信接口调用 public ContentResult test(string str) { var result = new KPResponse(); var _s = str.Replace("\\\"", "\""); result = DSWeb.TruckMng.Helper.JsonConvert.Deserialize(_s); var jsonRespose = new JsonResponse { Success = true, Message = "", Data = result }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ActionResult test2(string str) { return View(str); } /// /// 接收诺诺平台跳回的url信息, /// 20191122后已无作用 /// /// /// /// //public ActionResult setCustCode(string code, string taxnum) //{ // BasicDataRefDAL.SaveLog("code="+ code+ ";taxnum="+ taxnum,"诺诺平台","认证窗口回调","接收认证数据"); // var hx = HangXinRequestHelper.getHelper(taxnum); // if (hx.code != code || hx.needStart ) // { // hx.code = code; // hx.setISVToken(); // } // return View(); //} private JsonResponse checkinfo(string BILLNO, string redirecturl, string redReason = "", bool setred = false) { var result = new DBResult(); var head = new ChInvoice_HangXin(); //var detail = new List var jsonRespose = new JsonResponse { Success = true, Message = result.Message, Data = result.Data }; //首先判断数据完整性与合法性 head = ChinvoiceDAL.GetData("cm.BILLNO='" + BILLNO + "'"); if (string.IsNullOrEmpty(head.INVOICELINE)) { jsonRespose.Success = false; jsonRespose.Message = "发票种类不能为空!"; } if (head.BILLNO != "") { if (string.IsNullOrEmpty(head.INVITERFACE)) { var INVITERFACE = MsSysInvInterFaceSetDAL.GetData("INVOICELINE='" + head.INVOICELINEREF + "'", ""); if (INVITERFACE.INVITERFACE != "") head.INVITERFACE = INVITERFACE.INVITERFACE; else head.INVITERFACE = "诺诺发票接口"; if (head.INVITERFACE == "诺诺全电发票") { if (setred) { if (!string.IsNullOrWhiteSpace(redReason)) { head.redReason = redReason; } else { //jsonRespose.Success = false; //jsonRespose.Message = "必须选择冲红理由!"; //return jsonRespose; head.redReason = "2"; } } } head.DbOperationType = DbOperationType.DbotUpd; head.ModelUIStatus = "E"; var modb = new ModelObjectDB(); result = modb.Save(head); } else { if (head.INVITERFACE == "诺诺全电发票") { if (setred) { if (!string.IsNullOrWhiteSpace(redReason)) { head.redReason = redReason; head.DbOperationType = DbOperationType.DbotUpd; head.ModelUIStatus = "E"; var modb = new ModelObjectDB(); result = modb.Save(head); } else { //jsonRespose.Success = false; //jsonRespose.Message = "必须选择冲红理由!"; //return jsonRespose; head.redReason = "2"; head.DbOperationType = DbOperationType.DbotUpd; head.ModelUIStatus = "E"; var modb = new ModelObjectDB(); result = modb.Save(head); } } } } //head = list[0]; jsonRespose.Data = head; } else { jsonRespose.Success = false; jsonRespose.Message = "没有找到可以开票的发票信息,可能是权限不足或登录信息丢失。"; } var checkcan = checkCanPost(head); if (checkcan.Success == false) { jsonRespose.Success = false; jsonRespose.Message = checkcan.Message; } else { if (head.INVITERFACE == "诺诺发票接口" || head.INVITERFACE == "") { //如果该税号的token需要 返回认证窗口 var hx = HangXinRequestHelper.getHelper(head.TAXCODE); if (!hx.CanUse) { jsonRespose.Success = false; jsonRespose.Message = hx.ERRORMSG; return jsonRespose; } HangXinRequestHelper.redirectUri = redirecturl; //getRedirecturl(redirecturl); if (hx.needStart) { BasicDataRefDAL.SaveLog("checkinfo;BILLNO=" + BILLNO, "", "诺诺平台", "返回认证窗口"); jsonRespose = TokenPage(); } } else { jsonRespose.Success = true; jsonRespose.Message = ""; return jsonRespose; } } return jsonRespose; } private JsonResponse TokenPage() { var jsonRespose = new JsonResponse { Success = true, Message = "", Data = "" }; jsonRespose.Success = false; jsonRespose.Message = "需要认证诺诺用户名和密码"; var 原诺诺第三方方式开票 = HangXinRequestHelper.getHelper(""); var newwindowurl = "https://open.jss.com.cn/authorization.html?client_id=" + 原诺诺第三方方式开票.appSecret + "&response_type=code&redirect_uri=" + HangXinRequestHelper.redirectUri + "&appKey=" + 原诺诺第三方方式开票.appKey + ""; jsonRespose.Data = newwindowurl; return jsonRespose; } /// /// 航信接口 开票 /// /// /// public ContentResult NNMakeInv(string bill, string redirecturl) { //首先判断是否有 modInvLock 发票开出锁定 var result = new DBResult(); //var detail = new List var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = result.Data }; //首先判断数据完整性与合法性 var checkresult = checkinfo(bill, redirecturl); if (!checkresult.Success) { return new ContentResult() { Content = JsonConvert.Serialize(checkresult) }; } else { var head = (ChInvoice_HangXin)checkresult.Data; decimal invamount = 0; var invitems = ChinvoiceapplicationDAL.GetDetailList("PID='" + head.GID + "'", ""); foreach (var invitem in invitems) { invamount = invamount + invitem.AMOUNT + invitem.TAX; } if (invamount != head.INVAMOUNT) { var jsonRespose2 = new JsonResponse { Success = false, Message = "开票明细与开票金额不一致,请检查!" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose2) }; } ChInvoice_HangXin returndate = null; if (head.INVITERFACE == "诺诺发票接口" || head.INVITERFACE == "") { var hx = HangXinRequestHelper.getHelper(head.TAXCODE); if (!hx.CanUse) { jsonRespose.Success = false; jsonRespose.Message = hx.ERRORMSG; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } //20191107 如果该发票存在流水号 则首先去诺诺平台进行一次读取 //如开票信息形如 /*"{\"code\":\"E0000\",\"describe\":\"查询发票信息成功\",\"result\":[{\"orderNo\":\"IN2019110700005\",\"taxExcludedAmount\":500.00,\"c_invoiceid\":\"19110716260203390480\",\"invoiceImageUrl\":\"\",\"buyerName\":\"青岛世悠联国际物流有限公司\",\"invoiceCode\":\"\",\"invoiceNum\":\"\",\"resultMsg\":\"[][2019-11-07 16:30:02] 单据号:19110716260203390480,开具结果:0,开具失败原因:开票异常:\",\"checkCode\":\"\",\"invoiceSerialNum\":\"19110716260203390480\",\"statusMsg\":\"开票失败\",\"buyerTaxNum\":\"91370202MA3CGDCU83\",\"invoiceFileUrl\":\"\",\"invoiceLine\":\"电子增值税普通发票\",\"taxIncludedAmount\":500.00,\"status\":3}]}"*/ //则可能代表失败的原因是 ukey验证 的部分,也许重启税控软件和诺诺客户端可以解决问题。 if (!string.IsNullOrEmpty(head.INVOICESERIALNUM)) {//如果该发票流水号不为空 result = hx.ReadInvoice(head); } else { HangXinRequestHelper.redirectUri = getRedirecturl(redirecturl); var detailList = ChinvoiceDAL.GetDetailList("PID='" + head.GID + "'"); //var CodeGoodInvList = MsCodeGoodInvDAL.GetDataList(" gid in (SELECT GOODSNAME FROM ch_fee_invoicedetail where PID = '"+ head.GID + "')"); if (!string.IsNullOrWhiteSpace(hx.accessToken)) { result = hx.PostInvoice(head, detailList); } if (result.Message == "需要重新认证" || string.IsNullOrWhiteSpace(hx.accessToken)) { BasicDataRefDAL.SaveLog("PostInvoice 反回‘需要重新认证’", "", "诺诺平台", "返回认证窗口"); var _r = TokenPage(); return new ContentResult() { Content = JsonConvert.Serialize(_r) }; } //returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); } } else if (head.INVITERFACE == "瑞宏发票接口") { RuihongHelper ruihongHelper = new RuihongHelper(); string msg = null; if (!string.IsNullOrEmpty(head.INVOICESERIALNUM)) {//如果该发票流水号不为空 result.Success = ruihongHelper.QueryInvoiceRecord(head.GID, head.INVOICESERIALNUM, out msg); result.Message = msg; } else { if (head.PTORRED == "2") { result.Success = ruihongHelper.RedInvoiceRecord(head.GID, out msg); result.Message = msg; } else { result.Success = ruihongHelper.PostInvoiceRecord(head.GID, out msg); result.Message = msg; } } } else if (head.INVITERFACE == "诺诺全电发票") { var hx = 诺诺全电发票.getHelper(head); if (!hx.CanUse) { jsonRespose.Success = false; jsonRespose.Message = hx.ERRORMSG; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } if (!string.IsNullOrEmpty(head.INVOICESERIALNUM)) {//如果该发票流水号不为空 result = hx.ReadInvoice(head); } else { //HangXinRequestHelper.redirectUri = getRedirecturl(redirecturl); var detailList = ChinvoiceDAL.GetDetailList("PID='" + head.GID + "'"); //var CodeGoodInvList = MsCodeGoodInvDAL.GetDataList(" gid in (SELECT GOODSNAME FROM ch_fee_invoicedetail where PID = '"+ head.GID + "')"); if (!string.IsNullOrWhiteSpace(hx.accessToken)) { result = hx.PostInvoice(head, detailList); } } } returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); if (returndate.EINVOICESTATE == "2" && returndate.BILLSTATUS == 0) { //20200106 添加 如sys_param_set.PARAMNAME=INVOICEAUTOLOCK 没有值或值为false 则不执行锁定 var needautolock = MsSysParamSetDAL.GetSysParam("INVOICEAUTOLOCK").isnullortrue(); if (needautolock) { ChinvoiceDAL.Lock(returndate.BILLNO, Convert.ToString(Session["USERID"])); } returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); } jsonRespose.Success = result.Success; jsonRespose.Message = result.Message; jsonRespose.Data = returndate; } return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } /// /// 读取诺诺平台上的发票信息 通过发票流水号 ch_fee_invoice.invoiceser /// /// /// /// public ContentResult NNReadInv(string BILLNO, string redirecturl) { //如果已有pdf地址 则直接返回 var headdata = ChinvoiceDAL.GetData(" cm.BILLNO='" + BILLNO + "'"); JsonResponse result = new JsonResponse(); if (!string.IsNullOrWhiteSpace(headdata.INVOICEPDFURL)) { result.Success = true; result.Data = headdata; } else { if (headdata.INVITERFACE == "诺诺发票接口" || headdata.INVITERFACE == "") { result = Do_NNReadInv(BILLNO, redirecturl); } else if (headdata.INVITERFACE == "瑞宏发票接口") { RuihongHelper ruihongHelper = new RuihongHelper(); string msg = null; var succ = ruihongHelper.QueryInvoiceRecord(headdata.GID, headdata.INVOICESERIALNUM, out msg); result.Success = succ; result.Message = msg; result.Data = ChinvoiceDAL.GetData(" BILLNO='" + headdata.BILLNO + "'"); } else if (headdata.INVITERFACE == "诺诺全电发票") { //诺诺全电发票的红票 读取其实是 读取红字确认单查询接口 if (headdata.PTORRED == "1") { result = Do_NuoNuoQuanDianReadInv(BILLNO); } if (headdata.PTORRED == "2") { var _r = NNRedConfirm_Read(BILLNO); return BasicDataRefDAL.GetContentResult(_r); } } } return result.getContentReult(); } public ContentResult NNReadInv_P2(string BILLNO, string redirecturl) { var headdata = ChinvoiceDAL.GetData(" cm.BILLNO='" + BILLNO + "'"); JsonResponse result = new JsonResponse(); if (!string.IsNullOrWhiteSpace(headdata.INVOICEPDFURL)) { result.Success = true; result.Data = headdata; } else { if (headdata.INVITERFACE == "诺诺发票接口" || headdata.INVITERFACE == "") { result = Do_NNReadInv(BILLNO, redirecturl); if (result.Success) { //将相应信息写回P2 //1.正票/冲红 根据BSNO将P2的发票号和发票代码写回 //2.作废 根据BSNO将P2的 B_CANCEL设为1 var invoice = (ChInvoice_HangXin)result.Data; var sqlstr = $" update M_INVOICE set INVOICE_NO='{invoice.INVOICENO}',INVOICE_CODE='{invoice.INVOICECODE}',REMARK='{invoice.REMARK}' where INVOICE_ID='{invoice.BSNO}'"; BasicDataRefDAL.ExecSql_DB(sqlstr, "P2DB"); } } else if (headdata.INVITERFACE == "瑞宏发票接口") { RuihongHelper ruihongHelper = new RuihongHelper(); string msg = null; var succ = ruihongHelper.QueryInvoiceRecord(headdata.GID, headdata.INVOICESERIALNUM, out msg); var invoice = ChinvoiceDAL.GetData(" BILLNO='" + headdata.BILLNO + "'"); result.Success = succ; result.Message = msg; result.Data = invoice; var sqlstr = $" update M_INVOICE set INVOICE_NO='{invoice.INVOICENO}',INVOICE_CODE='{invoice.INVOICECODE}',REMARK='{invoice.REMARK}' where INVOICE_ID='{invoice.BSNO}'"; BasicDataRefDAL.ExecSql_DB(sqlstr, "P2DB"); } else if (headdata.INVITERFACE == "诺诺全电发票") { //诺诺全电发票的红票 读取其实是 读取红字确认单查询接口 if (headdata.PTORRED == "1") { result = Do_NuoNuoQuanDianReadInv(BILLNO); if (result.Success) { //将相应信息写回P2 //1.正票/冲红 根据BSNO将P2的发票号和发票代码写回 //2.作废 根据BSNO将P2的 B_CANCEL设为1 var invoice = (ChInvoice_HangXin)result.Data; var sqlstr = $" update M_INVOICE set INVOICE_NO='{invoice.INVOICENO}',INVOICE_CODE='{invoice.INVOICECODE}',REMARK='{invoice.REMARK}' where INVOICE_ID='{invoice.BSNO}'"; BasicDataRefDAL.ExecSql_DB(sqlstr, "P2DB"); } } if (headdata.PTORRED == "2") { var _r = NNRedConfirm_Read(BILLNO); if (_r.Success) { //将相应信息写回P2 //1.正票/冲红 根据BSNO将P2的发票号和发票代码写回 //2.作废 根据BSNO将P2的 B_CANCEL设为1 var invoice = (ChInvoice_HangXin)result.Data; var sqlstr = $" update M_INVOICE set INVOICE_NO='{invoice.INVOICENO}',INVOICE_CODE='{invoice.INVOICECODE}',REMARK='{invoice.REMARK}' where INVOICE_ID='{invoice.BSNO}'"; BasicDataRefDAL.ExecSql_DB(sqlstr, "P2DB"); } return BasicDataRefDAL.GetContentResult(_r); } } } return result.getContentReult(); } private JsonResponse Do_NNReadInv(string BILLNO, string redirecturl) { //var hx = HangXinRequestHelper.getHelper(taxnum); //var result = new DBResult(); //var detail = new List var jsonRespose = new JsonResponse { Success = false, Message = "", Data = "" }; //首先判断数据完整性与合法性 var checkresult = checkCanRead(BILLNO, redirecturl); if (!checkresult.Success) return checkresult; var head = (ChInvoice_HangXin)checkresult.Data; var hx = HangXinRequestHelper.getHelper(head.TAXCODE); if (!hx.CanUse) { jsonRespose.Success = false; jsonRespose.Message = hx.ERRORMSG; return jsonRespose; } if (hx.accessToken == "") { BasicDataRefDAL.SaveLog("NNReadInv;税号" + head.TAXCODE + "的 accessToken为空", "", "诺诺平台", "返回认证窗口"); var _r = TokenPage(); return _r; } var result = hx.ReadInvoice(head); if (result.Message == "需要重新认证") { //HangXinRequestHelper.clear(hx.accessToken); BasicDataRefDAL.SaveLog("ReadInvoice 反回‘需要重新认证’", "", "诺诺平台", "返回认证窗口"); var _r = TokenPage(); return _r; } var returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); if (head.PTORRED == "2") { ChinvoiceDAL.SetRed(head); //将原票内的申请和费用恢复原状 var BlueInvoice = ChinvoiceDAL.GetData(" cm.INVOICECODE='" + head.REDCODE + "' and cm.INVOICENO='" + head.REDNUM + "'"); result = SetInvoiceFee(BlueInvoice); } //如果状态为开出成功 则执行锁定 if (returndate.EINVOICESTATE == "2" && returndate.BILLSTATUS == 0) { //ChinvoiceDAL.Lock(returndate.BILLNO); //20200106 添加 如sys_param_set.PARAMNAME=INVOICEAUTOLOCK 没有值或值为false 则不执行锁定 var needautolock = MsSysParamSetDAL.GetSysParam("INVOICEAUTOLOCK").isnullortrue(); if (needautolock) { ChinvoiceDAL.Lock(returndate.BILLNO, Convert.ToString(Session["USERID"])); } returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); } result.Data = returndate; jsonRespose = new JsonResponse(result); return jsonRespose; } public JsonResponse Do_NuoNuoQuanDianReadInv(string BILLNO) { //var hx = HangXinRequestHelper.getHelper(taxnum); //var result = new DBResult(); //var detail = new List var jsonRespose = new JsonResponse { Success = false, Message = "", Data = "" }; //首先判断数据完整性与合法性 var checkresult = checkCanRead(BILLNO); if (!checkresult.Success) return checkresult; var head = (ChInvoice_HangXin)checkresult.Data; var hx = 诺诺全电发票.getHelper(head); if (!hx.CanUse) { jsonRespose.Success = false; jsonRespose.Message = hx.ERRORMSG; return jsonRespose; } if (hx.accessToken == "") { BasicDataRefDAL.SaveLog("NNReadInv;税号" + head.TAXCODE + "的 accessToken为空", "", "诺诺平台", "返回认证窗口"); var _r = TokenPage(); return _r; } var result = hx.ReadInvoice(head); if (!result.Success) { return new JsonResponse { Success = result.Success, Message = result.Message, Data = "" }; ; } //if (result.Message == "需要重新认证") //{ // //HangXinRequestHelper.clear(hx.accessToken); // BasicDataRefDAL.SaveLog("ReadInvoice 反回‘需要重新认证’", "", "诺诺平台", "返回认证窗口"); // var _r = TokenPage(); // return _r; //} var returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); if (head.PTORRED == "2") { ChinvoiceDAL.SetRed(head); //将原票内的申请和费用恢复原状 var BlueInvoice = ChinvoiceDAL.GetData(" cm.INVOICECODE='" + head.REDCODE + "' and cm.INVOICENO='" + head.REDNUM + "'"); result = SetInvoiceFee(BlueInvoice); } //如果状态为开出成功 则执行锁定 if (returndate.EINVOICESTATE == "2" && returndate.BILLSTATUS == 0) { //ChinvoiceDAL.Lock(returndate.BILLNO); //20200106 添加 如sys_param_set.PARAMNAME=INVOICEAUTOLOCK 没有值或值为false 则不执行锁定 var needautolock = MsSysParamSetDAL.GetSysParam("INVOICEAUTOLOCK").isnullortrue(); if (needautolock) { ChinvoiceDAL.Lock(returndate.BILLNO, Convert.ToString(Session["USERID"])); } returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); } result.Data = returndate; jsonRespose = new JsonResponse(result); return jsonRespose; } public static string getRedirecturl(string redirecturl) { return redirecturl; } /// /// 将发票业务内的申请或者费用恢复原状 /// /// /// public DBResult SetInvoiceFee(ChInvoice_HangXin BlueInvoice) { //var result = new DBResult(); //if (BlueInvoice.INVOICETYPE == 2) //{ // //申请开票 // var dataList = ChinvoiceapplicationDAL.GetDataListAll("INVBILLNO='" + BlueInvoice.BILLNO + "'", Convert.ToString(Session["USERID"]), CookieConfig.GetCookie_UserCode(Request), Convert.ToString(Session["COMPANYID"])); // result = ChinvoiceDAL.DelAppList(dataList, BlueInvoice.BILLNO); //} //else //{ // var dataList = ChinvoiceDAL.GetBodyList("BILLNO='" + BlueInvoice.BILLNO + "'"); // result = ChinvoiceDAL.DelFeeDo(dataList, BlueInvoice.GID); //} //return result; var result = ChinvoiceDAL.SetInvoiceFee(BlueInvoice, Session); return result; } /// /// 发票作废 /// /// /// /// public ContentResult NNVoidInv(string BILLNO, string redirecturl) { //首先判断是否有 modInvLock 发票开出锁定 var result = Do_NNVoidInv(BILLNO, redirecturl); return result.getContentReult(); } public ContentResult NNVoidInv_P2(string BILLNO, string redirecturl) { //首先判断是否有 modInvLock 发票开出锁定 var result = Do_NNVoidInv(BILLNO, redirecturl); if (result.Success) { //将相应信息写回P2 //1.正票/冲红 根据BSNO将P2的发票号和发票代码写回 //2.作废 根据BSNO将P2的 B_CANCEL设为1 var invoice = (ChInvoice_HangXin)result.Data; var sqlstr = $" update M_INVOICE set B_CANCEL='1' where INVOICE_ID='{invoice.BSNO}'"; BasicDataRefDAL.ExecSql_DB(sqlstr, "P2DB"); } return result.getContentReult(); } public JsonResponse Do_NNVoidInv(string BILLNO, string redirecturl) { var jsonRespose = new JsonResponse { Success = false, Message = "", Data = "" }; //首先判断数据完整性与合法性 以及如果缺少认证信息则返回重新进行认证 var checkresult = checkinfo(BILLNO, redirecturl); if (!checkresult.Success) return checkresult; var head = (ChInvoice_HangXin)checkresult.Data; if (string.IsNullOrEmpty(head.INVOICESERIALNUM)) { jsonRespose.Success = false; jsonRespose.Message = "没有进行平台开票的发票无法进行作废操作。"; return jsonRespose; } if (head.PTORRED == "2" || head.SETRED == "true") { jsonRespose.Success = false; jsonRespose.Message = "冲红或被冲红的发票不能作废"; return jsonRespose; } if (head.ISDELETE == "true") { jsonRespose.Success = false; jsonRespose.Message = "已作废的发票不能再次作废"; return jsonRespose; } if (head.ISEInvoice) { jsonRespose.Success = false; jsonRespose.Message = "电子发票不能作废,只能冲红"; return jsonRespose; } var hx = new HangXinRequestHelper(); if (head.INVITERFACE == "诺诺发票接口" || head.INVITERFACE == "") { hx = HangXinRequestHelper.getHelper(head.TAXCODE); } else if (head.INVITERFACE == "瑞宏发票接口") { } else if (head.INVITERFACE == "诺诺全电发票") { //hx = 诺诺全电发票.getHelper(head.TAXCODE); //jsonRespose.Success = false; //jsonRespose.Message = "全电发票没有作废操作,请执行冲红操作。"; //return jsonRespose; } if (!hx.CanUse) { jsonRespose.Success = false; jsonRespose.Message = hx.ERRORMSG; return jsonRespose; } var result = hx.VoidInvoice(head); var _result = new ContentResult(); //发送作废成功,则实际进行作废操作 if (result.Success) { _result = DeleteUp(head); } var returndate = ChinvoiceDAL.GetData(" cm.BILLNO='" + BILLNO + "'"); result.Data = returndate; JsonResponse respose = new JsonResponse(result); return respose; } /// /// 发票冲红 /// /// /// /// public ContentResult NNSetRed(string bill, string redirecturl, string redReason = "") { //首先判断是否有 modInvLock 发票开出锁定 var result = new DBResult(); //var detail = new List var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = result.Data }; //首先判断数据完整性与合法性 及检查平台认证 var checkresult = checkinfo(bill, redirecturl, redReason, true); //被冲红的蓝票信息 var BlueInvoice = ChinvoiceDAL.GetData(" cm.billno='" + bill + "'"); BlueInvoice.billUuid = BlueInvoice.GID.Replace("-", ""); if (BlueInvoice.ISNEEDFEE == "1") { jsonRespose.Success = false; jsonRespose.Message = $"该蓝票已结算,当前无法冲红"; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } if (!checkresult.Success) { return new ContentResult() { Content = JsonConvert.Serialize(checkresult) }; } else { var head = (ChInvoice_HangXin)checkresult.Data; var BlueHead = head; if (head.INVITERFACE == "诺诺全电发票") { //全电发票没有发票代码 if (string.IsNullOrEmpty(head.INVOICENO)) { jsonRespose.Success = false; jsonRespose.Message = "该电子发票没有发票号,无法进行冲红。"; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } if (string.IsNullOrEmpty(redReason)) { jsonRespose.Success = false; jsonRespose.Message = "必须选择冲红理由。"; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } //增加判断 如果原票createtime晚于当前时间24小时之前,则报错不允许开出 //20231120 取消此限制 //if (BlueInvoice.INVOICEMAKETIME == null || BlueInvoice.INVOICEMAKETIME == "" || Convert.ToDateTime(BlueInvoice.INVOICEMAKETIME) > DateTime.Now.AddDays(-1)) //{ // jsonRespose.Success = false; // jsonRespose.Message = $"该蓝票为{BlueInvoice.INVOICEMAKETIME}开出,当前无法冲红"; // return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; //} } if (head.INVITERFACE != "诺诺全电发票") { if (string.IsNullOrEmpty(head.INVOICENO) || string.IsNullOrEmpty(head.INVOICECODE)) { jsonRespose.Success = false; jsonRespose.Message = "该发票没有发票号和发票代码,无法进行冲红。"; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } } var beRedBillNo = head.BILLNO; var RedCode = head.INVOICECODE; var RedNo = head.INVOICENO; var detailList = ChinvoiceDAL.GetDetailList("PID='" + head.GID + "'"); var redhead = AutoMapperHelper.MapTo(head); //如果已经存在一张相应的红票,则将现在这个head变成那个红票 var _existRed = ChinvoiceDAL.GetData(" REDNUM='" + head.INVOICENO + "' and REDCODE='" + head.INVOICECODE + "' "); if (_existRed.BILLNO != "*") { head = _existRed; head.REMARK = REDREMARK(head.REMARK); detailList = ChinvoiceDAL.GetDetailList("PID='" + head.GID + "'"); head.DbOperationType = DbOperationType.DbotUpd; head.ModelUIStatus = "E"; } else { if (head.INVITERFACE != "诺诺全电发票") { //将该head改成一个新的发票信息 //将发票明细也同样处理 head.GID = System.Guid.NewGuid().ToString(); head.BILLNO = PubSysDAL.GetBillNo("0308"); head.PTORRED = "2"; // 开票类型 红票 head.INVOICECODE = ""; head.INVOICENO = ""; head.EINVOICESTATE = "0"; head.INVOICESERIALNUM = ""; //head.BILLSTATUS = 0; head.REDCODE = RedCode; head.REDNUM = RedNo; head.INVAMOUNT = head.INVAMOUNT * -1; head.INVOICEPDFURL = ""; head.INVOICEINFOURL = ""; head.DbOperationType = DbOperationType.DbotIns; head.ModelUIStatus = "I"; head.BILLSTATUS = 1; foreach (var detail in detailList) { //数量 税额 含税金额 不含税金额 取负数 detail.SetRed(); detail.PID = "*"; } #region SR2020060200007 红票清空推送模式和推送邮箱 head.PUSHMODE = "-1"; head.PUSHEMAIL = ""; head.PUSHMOBILE = "0"; #endregion head.REMARK = REDREMARK(head.REMARK); } if (head.INVITERFACE == "诺诺全电发票") { redhead.GID = System.Guid.NewGuid().ToString(); //redhead.BILLNO = PubSysDAL.GetBillNo("0308"); redhead.PTORRED = "2"; // 开票类型 红票 redhead.redReason = redReason; redhead.REDCODE = RedCode; redhead.REDNUM = RedNo; redhead.INVAMOUNT = redhead.INVAMOUNT * -1; redhead.INVOICEPDFURL = ""; redhead.INVOICEINFOURL = ""; redhead.DbOperationType = DbOperationType.DbotIns; redhead.ModelUIStatus = "I"; redhead.BILLSTATUS = 1; foreach (var detail in detailList) { //数量 税额 含税金额 不含税金额 取负数 detail.SetRed(); detail.PID = "*"; } redhead.REMARK = REDREMARK_Quandian(redhead); } } var modb = new ModelObjectDB(); if (head.INVITERFACE != "诺诺全电发票") { //一般的红票业务此时保存红票信息 result = ChinvoiceDAL.SaveInvDetail(head.GID, detailList); if (result.Success == true) { result = modb.Save(head); }; } var returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); if (head.INVITERFACE == "诺诺发票接口" || head.INVITERFACE == "") { var hx = HangXinRequestHelper.getHelper(head.TAXCODE); if (!hx.CanUse) { jsonRespose.Success = false; jsonRespose.Message = hx.ERRORMSG; return jsonRespose.getContentReult(); } HangXinRequestHelper.redirectUri = getRedirecturl(redirecturl); result = hx.PostInvoice(head, detailList); returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); //如果状态为开出成功 则执行锁定 //并将被冲红的原发票的setred属性设置成true if (returndate.EINVOICESTATE == "2" && returndate.BILLSTATUS == 0) { //ChinvoiceDAL.Lock(returndate.BILLNO); //20200106 添加 如sys_param_set.PARAMNAME=INVOICEAUTOLOCK 没有值或值为false 则不执行锁定 var needautolock = MsSysParamSetDAL.GetSysParam("INVOICEAUTOLOCK").isnullortrue(); if (needautolock) { ChinvoiceDAL.Lock(returndate.BILLNO, Convert.ToString(Session["USERID"])); } ChinvoiceDAL.SetRed(returndate); //将原票内的申请和费用恢复原状 // result = SetInvoiceFee(BlueInvoice); } } else if (head.INVITERFACE == "瑞宏发票接口") { RuihongHelper ruihongHelper = new RuihongHelper(); string msg = null; result.Success = ruihongHelper.RedInvoiceRecord(returndate.GID, out msg); result.Message = msg; if (result.Success) { var needautolock = MsSysParamSetDAL.GetSysParam("INVOICEAUTOLOCK").isnullortrue(); if (needautolock) { ChinvoiceDAL.Lock(returndate.BILLNO, Convert.ToString(Session["USERID"])); } ChinvoiceDAL.SetRed(returndate); //将原票内的申请和费用恢复原状 // result = SetInvoiceFee(BlueInvoice); } } else if (head.INVITERFACE == "诺诺全电发票") { var hx = 诺诺全电发票.getHelper(head); if (head.PTORRED == "2") { redhead = AutoMapperHelper.MapTo(head); //redhead.REDNUM = head.INVOICENO; result = hx.ReadInvoice(redhead); if (!result.Success) { return BasicDataRefDAL.GetContentResult(result); } else { ChinvoiceDAL.SetRed(redhead); BlueInvoice = ChinvoiceDAL.GetData(" cm.INVOICECODE='" + head.REDCODE + "' and cm.INVOICENO='" + head.REDNUM + "'"); result = SetInvoiceFee(BlueInvoice); return BasicDataRefDAL.GetContentResult(result); } } else { //20230529 //1 如果ch_fee_invoice.billuuid有值的话 //这个值是最近一次提交的红字确认单订单编码 //用这个值读取红字确认单状态 如成功则做红票相应的处理 //如状态15申请中 则不做操作返回申请中 //如非成功和15 则返回错误 并清空billuuid; //2 如果ch_fee_invoice.billuuid无值 则重新产生值并发出红字确认单 //此时head.billUuid如果不为空 代表已有红字申请单 if (!string.IsNullOrWhiteSpace(head.billUuid))//&& { //redhead.BILLNO = redhead.billUuid; redhead.GID = redhead.billUuid; var _r = hx.ReadRedConfirm(ref redhead, detailList); if (!_r.Success) { if (_r.Message != "红字确认单申请中" && _r.Message != "提交失败,请先完成扫脸身份认证后再试。") { //head.billUuid = ""; //modb.Save(head); } else { modb.Save(head); } return BasicDataRefDAL.GetContentResult(_r); } else { //var hx = 诺诺全电发票.getHelper(head.TAXCODE); if (!hx.CanUse) { result.SetErrorInfo(hx.ERRORMSG); return BasicDataRefDAL.GetContentResult(result); } //if (hx.accessToken == "") //{ // BasicDataRefDAL.SaveLog("NNReadInv;税号" + head.TAXCODE + "的 accessToken为空", "", "诺诺平台", "返回认证窗口"); // var _r = TokenPage(); // return _r; //} result = hx.ReadInvoice(redhead); if (!result.Success) { return BasicDataRefDAL.GetContentResult(result); } //if (result.Message == "需要重新认证") //{ // //HangXinRequestHelper.clear(hx.accessToken); // BasicDataRefDAL.SaveLog("ReadInvoice 反回‘需要重新认证’", "", "诺诺平台", "返回认证窗口"); // var _r = TokenPage(); // return _r; //} returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); if (redhead.PTORRED == "2") { ChinvoiceDAL.SetRed(redhead); //将原票内的申请和费用恢复原状 BlueInvoice = ChinvoiceDAL.GetData(" cm.INVOICECODE='" + redhead.REDCODE + "' and cm.INVOICENO='" + redhead.REDNUM + "'"); result = SetInvoiceFee(BlueInvoice); } //如果状态为开出成功 则执行锁定 if (returndate.EINVOICESTATE == "2" && returndate.BILLSTATUS == 0) { //ChinvoiceDAL.Lock(returndate.BILLNO); //20200106 添加 如sys_param_set.PARAMNAME=INVOICEAUTOLOCK 没有值或值为false 则不执行锁定 var needautolock = MsSysParamSetDAL.GetSysParam("INVOICEAUTOLOCK").isnullortrue(); if (needautolock) { ChinvoiceDAL.Lock(returndate.BILLNO, Convert.ToString(Session["USERID"])); } returndate = ChinvoiceDAL.GetData(" BILLNO='" + head.BILLNO + "'"); } result.Data = returndate; return BasicDataRefDAL.GetContentResult(result); } } else { //head.billUuid如果为空 代表还没发红字申请单 //获取红票信息并发出 redhead.BILLNO = PubSysDAL.GetBillNo("0308"); head.billUuid = head.GID.Replace("-", ""); redhead.GID = head.billUuid; //T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA(); //var blUpSQL = $" update ch_fee_invoice set billUuid='{head.billUuid}' where GID='{redhead.GID}'"; //bool bl = T_ALL_DA.GetExecuteSqlCommand(blUpSQL); result = hx.PostRedConfirm(redhead, ref head, detailList, Session); if (result.Success == false) { } else { returndate = (ChInvoice_HangXin)result.Data; } } //诺诺全电票根据红字申请单的结果读取确认单 } modb.Save(head); } jsonRespose.Success = result.Success; jsonRespose.Message = result.Message; jsonRespose.Data = returndate; } return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } /// /// 诺诺全电发票 读取红字申请单 /// /// /// public DBResult NNRedConfirm_Read(string BILLNO) { ChInvoice_HangXin head = ChinvoiceDAL.GetData("cm.BILLNO='" + BILLNO + "'"); var result = new DBResult(); var hx = 诺诺全电发票.getHelper(head); if (!hx.CanUse) { result.SetErrorInfo(hx.ERRORMSG); return result; } result = hx.ReadRedConfirm(ref head); if (!result.Success) { return result; } else { var _r = Do_NuoNuoQuanDianReadInv(head.BILLNO); result.Success = _r.Success; result.Message = _r.Message; result.Data = _r.Data; } return result; } /// /// 红票票面备注 固定追加 /// 对应正数发票代码:037021900111号码:84769822 /// 共42字节,而总长度不能超过130字节 /// 因此红票的备注需要截断超过88字节长度的部分 /// /// /// private string REDREMARK(string REMARK) { if (REMARK.Length <= 88) return REMARK; else { while ((REMARK.Length > 88) && (REMARK.IndexOf(" ") >= 0)) { REMARK = REMARK.Replace(" ", " "); } if (REMARK.Length > 88) { REMARK = REMARK.Replace("\n", ""); } if (REMARK.Length > 88) { REMARK = REMARK.Substring(0, 88); } return REMARK; } } private string REDREMARK_Quandian(ChInvoice_HangXin head) { // var 购方信息 = " 购方账号:" + head.CUSTBANK; var 销方信息 = " 销方账号:" + head.ACCOUNT; head.REMARK += 购方信息 + 销方信息; return head.REMARK; } /// /// 检查能否发出开票信息 /// /// /// private DBResult checkCanPost(ChInvoice_HangXin head) { var result = new DBResult(true, "", ""); if (head.ISFRINV) { return result; } if (string.IsNullOrEmpty(head.INVOICECUSTNAME)) setErrorMessage(ref result, "购方名称 不能为空"); if (string.IsNullOrEmpty(head.PUSHMOBILE)) setErrorMessage(ref result, "推送的手机号码 不能为空"); var ErrorInfo = "销售方公司(我方公司)没有维护:"; var LocalErrorInfo = "销售方公司(我方公司)没有维护:"; if (string.IsNullOrWhiteSpace(head.TAXCODE)) { result.Success = false; LocalErrorInfo += " 税务登记号 "; } if (string.IsNullOrWhiteSpace(head.ADDRESS)) { result.Success = false; if (LocalErrorInfo != ErrorInfo) LocalErrorInfo += "、"; LocalErrorInfo += " 公司地址 "; } if (string.IsNullOrWhiteSpace(head.BILLRISES)) { result.Success = false; if (LocalErrorInfo != ErrorInfo) LocalErrorInfo += "、"; LocalErrorInfo += " 公司发票抬头 "; } if (string.IsNullOrWhiteSpace(head.OFFICEPHONE)) { result.Success = false; if (LocalErrorInfo != ErrorInfo) LocalErrorInfo += "、"; LocalErrorInfo += " 办公电话 "; } if (LocalErrorInfo != ErrorInfo) { LocalErrorInfo += " ,请在企业信息内录入。"; setErrorMessage(ref result, LocalErrorInfo); } if (head.PTORRED == "2") { if (string.IsNullOrEmpty(head.REDCODE)) setErrorMessage(ref result, "冲红时 蓝票代码 不能为空"); if (string.IsNullOrEmpty(head.REDCODE)) setErrorMessage(ref result, "冲红时 蓝票号码 不能为空"); } return result; } /// /// 检查能否发出读取发票信息 /// /// /// /// private JsonResponse checkCanRead(string BILLNO, string redirecturl = "") { var result = new DBResult(); var head = new ChInvoice_HangXin(); //var detail = new List var jsonRespose = new JsonResponse { Success = true, Message = result.Message, Data = result.Data }; //首先判断数据完整性与合法性 head = ChinvoiceDAL.GetData("cm.BILLNO='" + BILLNO + "'"); if (head.BILLNO != "") { //head = list[0]; jsonRespose.Data = head; } else { jsonRespose.Success = false; jsonRespose.Message = "没有找到可以开票的发票信息,可能是权限不足或登录信息丢失。"; } if (redirecturl != "") { //如果该税号的token需要 返回认证窗口 var hx = HangXinRequestHelper.getHelper(head.TAXCODE); if (!hx.CanUse) { jsonRespose.Success = false; jsonRespose.Message = hx.ERRORMSG; return jsonRespose; } HangXinRequestHelper.redirectUri = getRedirecturl(redirecturl); if (hx.needStart) { BasicDataRefDAL.SaveLog("checkinfo;BILLNO=" + BILLNO, "", "诺诺平台", "返回认证窗口"); jsonRespose = TokenPage(); } } return jsonRespose; } private void setErrorMessage(ref DBResult r, string message) { r.setMessage(false, message); } #endregion public ContentResult UpdatePrint(string billno) { DBResult result = ChinvoiceDAL.UpdatePrint(billno); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } #region 发票模板 [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetRemarksTemplate(string TemplateName) { DBResult result = ChinvoiceDAL.GetRemarksTemplate(Convert.ToString(Session["COMPANYID"]), TemplateName); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = result.Data }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult SaveRemarksTemplate(string Template, string TemplateName) { DBResult result = ChinvoiceDAL.SaveRemarksTemplate(Template, Convert.ToString(Session["COMPANYID"]), TemplateName); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult GetRemarksData(string billno, string TemplateName) { var dataList = ChinvoiceDAL.GetBsList("c.BILLNO='" + billno + "'"); DBResult result = ChinvoiceDAL.GetRemarksData(dataList, Convert.ToString(Session["COMPANYID"]), billno, TemplateName); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = result.Data }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } #endregion #region 发票票册 [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetBookDataList(int start, int limit, string sort, string condition) { var dataList = ChinvoiceDAL.GetBookDataList(condition, Convert.ToString(Session["COMPANYID"]), sort); var list = dataList.Skip(start).Take(limit); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = list.ToList() }); return new ContentResult() { Content = json }; } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetBookData(string handle, string condition) { ChInvoiceBook_HangXin head = null; if (handle == "edit") { var list = ChinvoiceDAL.GetBookDataList(condition, Convert.ToString(Session["COMPANYID"])); if (list.Count > 0) head = list[0]; } if (head == null) { head = new ChInvoiceBook_HangXin(); } if (handle == "add") { head.CREATEUSER = Convert.ToString(Session["USERID"]); head.CREATEUSERREF = Convert.ToString(Session["SHOWNAME"]); head.COMPANYID = Convert.ToString(Session["COMPANYID"]); } var json = JsonConvert.Serialize( new { Success = true, Message = "查询成功", data = head }); return new ContentResult() { Content = json }; } public ContentResult SaveBook(string opstatus, string data) { var headData = JsonConvert.Deserialize(data); if (opstatus == "add") { headData.GID = Guid.NewGuid().ToString(); headData.COMPANYID = Convert.ToString(Session["COMPANYID"]); headData.CREATEUSER = Convert.ToString(Session["USERID"]); headData.CREATETIME = DateTime.Now.ToString(); headData.DbOperationType = DbOperationType.DbotIns; } else if (opstatus == "edit") { headData.DbOperationType = DbOperationType.DbotUpd; headData.ModelUIStatus = "E"; } else { headData.DbOperationType = DbOperationType.DbotDel; } if (headData.TYPE == "") headData.TYPE = "0"; var BILLNO = headData.GID; var modb = new ModelObjectDB(); DBResult result = modb.Save(headData); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = ChinvoiceDAL.GetBookData(" GID='" + BILLNO + "'", Convert.ToString(Session["COMPANYID"])) }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult DeleteBook(string data) { var headData = JsonConvert.Deserialize(data); var isfee = ChinvoiceDAL.GetMakeOutCount(headData.GID); if (isfee) { var jsonRespose = new JsonResponse { Success = false, Message = "此票册已有开出发票,不允许删除!" }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } else { DBResult result; var modb = new ModelObjectDB(); result = modb.Delete(headData); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } } public ContentResult CreateBookitems(string data) { var headData = JsonConvert.Deserialize(data); DBResult result = ChinvoiceDAL.CreateBookitems(headData, Convert.ToString(Session["USERID"])); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult LockBookitems(string data) { var headData = JsonConvert.Deserialize>(data); DBResult result = ChinvoiceDAL.LockBookitems(headData); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult CancelLockBookitems(string data) { var headData = JsonConvert.Deserialize>(data); DBResult result = ChinvoiceDAL.CancelLockBookitems(headData); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } public ContentResult GetBookitemsDataList(string condition, string sort) { var dataList = ChinvoiceDAL.GetBookitemsDataList(condition, sort); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = dataList.Count, data = dataList.ToList() }); return new ContentResult() { Content = json }; } public ContentResult DeleteUpBook(string data) { var headData = JsonConvert.Deserialize(data); DBResult result; result = ChinvoiceDAL.DeleteUpBook(headData.GID, Convert.ToString(Session["USERID"])); var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message }; return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } #endregion #region 参照部分 #endregion #region 联力 连接P2系统的sql数据库表 查询没有发票号的M_invoice表内容 [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 public ContentResult GetP2Invoice(string condition) { var canlogin = BasicDataRefDAL.CheckLogin(Session); if (!canlogin.Success) { return (ContentResult)canlogin.Data; } var _count = 0; //(string TABLENAME,string _PKEY,string _sql,string DBNAME) BaseTableMC fromdbbase = new BaseTableMC("M_INVOICE", "INVOICE_ID", "", "P2DB"); var dataList = DBTableConnDAL.getToList(fromdbbase, "联力P2发票", condition); var list_2 = ModelObjectBill.getDicList(ModelObjectConvert.ToModelObjectList(dataList)); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = _count, data = list_2.ToList() }); return new ContentResult() { Content = json }; } public ContentResult GetP2Invoice_Fee(string INVOICE_ID) { var canlogin = BasicDataRefDAL.CheckLogin(Session); if (!canlogin.Success) { return (ContentResult)canlogin.Data; } var _count = 0; //(string TABLENAME,string _PKEY,string _sql,string DBNAME) BaseTableMC fromdbbase = new BaseTableMC("M_INVOICE", "INVOICE_ID", "", "P2DB"); if (string.IsNullOrWhiteSpace(INVOICE_ID)) INVOICE_ID = "0"; var dataList = DBTableConnDAL.getToList(fromdbbase, "联力P2发票_明细", $"INVOICE_ID='{INVOICE_ID}'"); var resultlist = new List(); var splitword = "\r\n"; if (dataList.Count > 0) { foreach (var data in dataList) { var feenamearray = data.GetSplitField("FEENAME", splitword); var amoutarray = data.GetSplitField("AMOUNT", splitword); var PRICEarray = data.GetSplitField("PRICE", splitword); var ratearray = data.GetSplitField("RATE", splitword); var NUMarray = data.GetSplitField("NUM", splitword); if (feenamearray.Length > 1) { for (var _i = 0; _i < feenamearray.Length; _i++) { if (string.IsNullOrWhiteSpace(feenamearray[_i])) continue; var resultdata = new BaseTableMC(); resultdata.SetValue("CURRENCY", data.GetValue("CURRENCY")); resultdata.SetValue("FEENAME", feenamearray[_i]); resultdata.SetValue("AMOUNT", amoutarray[_i]); resultdata.SetValue("PRICE", PRICEarray[_i]); resultdata.SetValue("RATE", ratearray[_i]); resultdata.SetValue("NUM", NUMarray[_i]); resultlist.Add(resultdata); } } else { resultlist.Add(data); } } } var list_2 = ModelObjectBill.getDicList(ModelObjectConvert.ToModelObjectList(resultlist)); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = _count, data = list_2.ToList() }); return new ContentResult() { Content = json }; } public ContentResult GetP2_CUST(string condition = " isnull(invoice_no,'')='' ") { var canlogin = BasicDataRefDAL.CheckLogin(Session); if (!canlogin.Success) { return (ContentResult)canlogin.Data; } var _count = 0; //(string TABLENAME,string _PKEY,string _sql,string DBNAME) BaseTableMC fromdbbase = new BaseTableMC("M_INVOICE", "INVOICE_ID", "", "P2DB"); var dataList = DBTableConnDAL.getToList(fromdbbase, "联力P2发票_开票单位", condition, " select distinct COMPANY_CODE from M_INVOICE "); var list_2 = ModelObjectBill.getDicList(ModelObjectConvert.ToModelObjectList(dataList)); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = _count, data = list_2.ToList() }); return new ContentResult() { Content = json }; } public ContentResult GetP2_CURRENCY(string condition = " isnull(invoice_no,'')='' ") { var canlogin = BasicDataRefDAL.CheckLogin(Session); if (!canlogin.Success) { return (ContentResult)canlogin.Data; } var _count = 0; //(string TABLENAME,string _PKEY,string _sql,string DBNAME) BaseTableMC fromdbbase = new BaseTableMC("M_INVOICE", "INVOICE_ID", "", "P2DB"); var dataList = DBTableConnDAL.getToList(fromdbbase, "联力P2发票_币别", condition, " select distinct CURR_TYPE from M_INVOICE "); var list_2 = ModelObjectBill.getDicList(ModelObjectConvert.ToModelObjectList(dataList)); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = _count, data = list_2.ToList() }); return new ContentResult() { Content = json }; } public ContentResult GetP2_CREATOR(string condition = " isnull(invoice_no,'')='' ") { var canlogin = BasicDataRefDAL.CheckLogin(Session); if (!canlogin.Success) { return (ContentResult)canlogin.Data; } var _count = 0; //(string TABLENAME,string _PKEY,string _sql,string DBNAME) BaseTableMC fromdbbase = new BaseTableMC("M_INVOICE", "INVOICE_ID", "", "P2DB"); var dataList = DBTableConnDAL.getToList(fromdbbase, "联力P2发票_申请人", condition, " select distinct CREATE_BY from M_INVOICE "); var list_2 = ModelObjectBill.getDicList(ModelObjectConvert.ToModelObjectList(dataList)); var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = _count, data = list_2.ToList() }); return new ContentResult() { Content = json }; } public ContentResult SaveNewP2(string opstatus, string data, string GID, string localdata) { var headData = JsonConvert.Deserialize(data); var localData = JsonConvert.Deserialize(localdata); BaseTableMC fromdbbase = new BaseTableMC("M_INVOICE", "INVOICE_ID", "", "P2DB"); var P2DataList = DBTableConnDAL.getToList(fromdbbase, "联力P2发票", " INVOICE_ID='" + headData.BSNO + "'"); var bodyList = new List(); var SaveBodyList = new List(); var P2Data = new BaseTableMC(); if (P2DataList.Count() > 0) { P2Data = P2DataList[0]; } if (opstatus == "add") { //查看是否已被使用 如是则返回错误并结束 var isexists = CheckExists(" BSNO='" + headData.BSNO + "' "); if (!isexists.Success) { return isexists.getContentReult(); } localData.GID = Guid.NewGuid().ToString(); localData.BILLNO = PubSysDAL.GetBillNo("0308"); localData.COMPANYID = Convert.ToString(Session["COMPANYID"]); localData.OPERATOR = Convert.ToString(Session["USERID"]); localData.OPERATETIME = DateTime.Now; localData.DbOperationType = DbOperationType.DbotIns; } else if (opstatus == "edit") { //localData = ChinvoiceDAL.GetData(" GID='"+ GID + "' "); var isexists = CheckExists(" BSNO='" + headData.BSNO + "' and GID<>'" + GID + "' "); if (!isexists.Success) { return isexists.getContentReult(); } localData.DbOperationType = DbOperationType.DbotUpd; bodyList = ChinvoiceDAL.GetDetailList(" PID='" + localData.GID + "' "); } localData.SetP2Value(P2Data); if (bodyList.Count > 0) { ChinvoiceDAL.DelInvDetail(bodyList); } SaveBodyList = ChInvoiceDetail.GetP2DetailList(P2Data, (localData.PTORRED == "2")); var BILLNO = localData.BILLNO; var modb = new ModelObjectDB(); DBResult result = ChinvoiceDAL.SaveInvDetail(localData.GID, SaveBodyList); if (result.Success == true) { result = modb.Save(localData); //ChinvoiceDAL.UpdateInvNoUse(headData.INVOICENO, Convert.ToString(Session["USERID"]),headData.BILLNO); //if (headData.EXCHANGERATE != 0) //{ // ChinvoiceDAL.updateFeeTax(headData.BILLNO, headData.EXCHANGERATE); //} }; var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message, Data = ChinvoiceDAL.GetData(" BILLNO='" + BILLNO + "'", Convert.ToString(Session["USERID"]), CookieConfig.GetCookie_UserCode(Request), Convert.ToString(Session["COMPANYID"])) }; return jsonRespose.getContentReult(); } [SqlKeyWordsFilter(Type = "Action")]//sql 防注入过滤器 private JsonResponse CheckExists(string condition) { var existsdata = ChinvoiceDAL.GetData(condition); JsonResponse result = new JsonResponse(); if (!string.IsNullOrWhiteSpace(existsdata.GID)) { result.Success = false; result.Message = "该发票已经被使用!"; } else { result.Success = true; } return result; } #endregion } }