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; 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 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 }; } 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 }; } 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"; var defaultPAYEE = MsSysParamSetDAL.GetData("PARAMNAME='INVSKR'").PARAMVALUE; var defaultCHECKER = MsSysParamSetDAL.GetData("PARAMNAME='INVFHR'").PARAMVALUE; if (!string.IsNullOrEmpty(defaultPAYEE)) head.PAYEE = defaultPAYEE; if (!string.IsNullOrEmpty(defaultCHECKER)) head.CHECKER = defaultCHECKER; 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 }; } 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 }; } 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 }; } 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 }; } 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 }; } 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 }; } 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 }; } 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 }; } 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 }; } 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.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,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 == "") { headData.CUSTBANK = dsHSCODE.Tables[0].Rows[0]["Rmbbank"].ToString(); } } } } if (headData.CUSTBANK == null) headData.CUSTBANK = ""; 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 = "诺诺发票接口"; } 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) }; //} 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) }; //} 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 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); 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); 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) { JsonResponse result = new JsonResponse(); try { var BILLList = new List(); var billnoList = BasicDataRefDAL.getStrListfromCommaStr(BILLNOS, ','); var pdflist = new List(); BasicDataRefDAL.ClearPath(BasicDataRefDAL.getPath("INVOICEPDF")); foreach (var billno in billnoList) { 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); pdflist.Sort(delegate (string p1, string p2) { return p1.CompareTo(p2); }); } 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) { 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 = "诺诺发票接口"; 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 = 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 newwindowurl = "https://open.jss.com.cn/authorization.html?client_id=" + HangXinRequestHelper.appSecret + "&response_type=code&redirect_uri=" + HangXinRequestHelper.redirectUri + "&appKey=" + HangXinRequestHelper.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; } } } 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); } 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 + "'"); } } 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"); } } 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); } 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; } /// /// 发票作废 /// /// /// /// 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 = HangXinRequestHelper.getHelper(head.TAXCODE); 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) { //首先判断是否有 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); //被冲红的蓝票信息 var BlueInvoice = ChinvoiceDAL.GetData(" cm.billno='" + bill + "'"); if (!checkresult.Success) { return new ContentResult() { Content = JsonConvert.Serialize(checkresult) }; } else { var head = (ChInvoice_HangXin)checkresult.Data; 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 + "'"); //如果已经存在一张相应的红票,则将现在这个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 { //将该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); } var modb = new ModelObjectDB(); result = ChinvoiceDAL.SaveInvDetail(head.GID, detailList); if (result.Success == true) { result = modb.Save(head); //ChinvoiceDAL.UpdateInvNoUse(headData.INVOICENO, Convert.ToString(Session["USERID"]),headData.BILLNO); //if (headData.EXCHANGERATE != 0) //{ // ChinvoiceDAL.updateFeeTax(headData.BILLNO, headData.EXCHANGERATE); //} }; 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); } 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); } ChinvoiceDAL.SetRed(returndate); //将原票内的申请和费用恢复原状 // result = SetInvoiceFee(BlueInvoice); } } jsonRespose.Success = result.Success; jsonRespose.Message = result.Message; jsonRespose.Data = returndate; } return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) }; } /// /// 红票票面备注 固定追加 /// 对应正数发票代码: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 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 = "没有找到可以开票的发票信息,可能是权限不足或登录信息丢失。"; } //如果该税号的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 发票模板 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 发票票册 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 }; } 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表内容 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++) { 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(); } 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 } }