|
|
using System;
|
|
|
using System.Data;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Text;
|
|
|
using DSWeb.Common.DB;
|
|
|
using System.Linq;
|
|
|
using DSWeb.MvcShipping.Helper;
|
|
|
using DSWeb.Common.Helper;
|
|
|
using DSWeb.Areas.CommMng.Models;
|
|
|
using static DSWeb.Areas.CommMng.DAL.BasicDataRefDAL;
|
|
|
using DSWeb.EntityDA;
|
|
|
using Microsoft.Practices.EnterpriseLibrary.Data;
|
|
|
using DSWeb.Areas.CommMng.DAL;
|
|
|
using HcUtility.Comm;
|
|
|
using System.Web.Mvc;
|
|
|
using DSWeb.MvcShipping.DAL.DsSendmail;
|
|
|
using iTextSharp.text.pdf;
|
|
|
using iTextSharp.text;
|
|
|
using System.IO;
|
|
|
using sun.swing;
|
|
|
using DSWeb.Areas.Import.DAL.ReceiptDoc;
|
|
|
using DSWeb.Areas.SysMng.DAL.SysUser;
|
|
|
using Renci.SshNet.Common;
|
|
|
using DSWeb.MvcShipping.DAL.MsSeaeOrderDAL;
|
|
|
using System.Data.Entity.Migrations;
|
|
|
using Aspose.Words.Saving;
|
|
|
using System.Web;
|
|
|
using DSWeb.MvcShipping.DAL.MsSysBillNoSet;
|
|
|
using DSWeb.Areas.MvcShipping.Helper;
|
|
|
using MailKit.Security;
|
|
|
using MimeKit;
|
|
|
using System.Net.Mime;
|
|
|
using Aspose.Cells.Charts;
|
|
|
using System.Net.Mail;
|
|
|
using DSWeb.Areas.MvcShipping.DAL.MsOp_BLISSUE;
|
|
|
using System.Web.UI.WebControls;
|
|
|
|
|
|
namespace DSWeb.MvcShipping.DAL.BillCheckOut
|
|
|
{
|
|
|
public class BillCheckOutDAL
|
|
|
{
|
|
|
|
|
|
|
|
|
public static List<BillCheckOut_md> GetDataList(int start, int limit, string sort, string strCondition,string userid,string username, string companyid, ref int count)
|
|
|
{
|
|
|
var rangstr = GetRangDAStr("index", userid, username, companyid);
|
|
|
|
|
|
var strSql = new StringBuilder();
|
|
|
strSql.Append(" select * from ");
|
|
|
strSql.Append(" BillCheckOut where 1=1 ");
|
|
|
|
|
|
var sortstring = DatasetSort.Getsortstring(sort);
|
|
|
|
|
|
|
|
|
PagedQuaryParam pp = new PagedQuaryParam();
|
|
|
|
|
|
pp.strSql = strSql.ToString();
|
|
|
pp.start = start;
|
|
|
pp.limit = limit;
|
|
|
pp.strCondition = strCondition;
|
|
|
pp.defaultsortstr = "CREATETIME desc";
|
|
|
pp.sortstring = sortstring;
|
|
|
pp.rangestr = rangstr;
|
|
|
|
|
|
var result = PagedQuaryStr(pp);
|
|
|
|
|
|
count = PagedCount(pp);
|
|
|
|
|
|
return SetData(result);
|
|
|
}
|
|
|
|
|
|
public static List<VW_BillCheckOut_Detail_md> GetBodyList(string LINKGID)
|
|
|
{
|
|
|
var cdc = new CommonDataContext();
|
|
|
|
|
|
|
|
|
var dataList = cdc.VW_BillCheckOut_Detail.Where(x=>x.LINKGID== LINKGID).ToList();
|
|
|
|
|
|
//var count = dataList.Count();
|
|
|
|
|
|
//var list = dataList.Skip(start).Take(limit).ToList();
|
|
|
|
|
|
return dataList;
|
|
|
}
|
|
|
|
|
|
public static string GetRangDAStr(string tb, string userid, string username, string companyid)
|
|
|
{
|
|
|
string str = "";
|
|
|
var strSql = new StringBuilder();
|
|
|
strSql.Append("SELECT ");
|
|
|
strSql.Append(" VISIBLERANGE,OPERATERANGE,AUTHORITYID,VSSQL ");
|
|
|
strSql.Append(" from VW_User_Authority ");
|
|
|
strSql.Append(" where [NAME]='modBillCheckOut' and USERID='" + userid + "' and ISDELETE=0");
|
|
|
|
|
|
string visiblerange = "4";
|
|
|
string operaterange = "4";
|
|
|
string AUTHORITYID = "";
|
|
|
string VSSQL = "";
|
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
|
|
|
|
|
|
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
|
|
|
{
|
|
|
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
visiblerange = Convert.ToString(reader["VISIBLERANGE"]);
|
|
|
operaterange = Convert.ToString(reader["OPERATERANGE"]);
|
|
|
AUTHORITYID = Convert.ToString(reader["AUTHORITYID"]);
|
|
|
VSSQL = Convert.ToString(reader["VSSQL"]);
|
|
|
break;
|
|
|
}
|
|
|
reader.Close();
|
|
|
}
|
|
|
if (visiblerange == "4")
|
|
|
{
|
|
|
str = "1=2";
|
|
|
}
|
|
|
else if (visiblerange == "3")
|
|
|
{
|
|
|
|
|
|
str = " (INPUTBY='" + username + "' OR SENDER='" + username + "' OR CHECKOUTUSER='" + username + "' )";
|
|
|
|
|
|
}
|
|
|
else if (visiblerange == "2")
|
|
|
{
|
|
|
if (tb == "index")
|
|
|
{
|
|
|
var rangeDa = new RangeDA();
|
|
|
var deptid = rangeDa.GetDEPTGID(userid);
|
|
|
|
|
|
str = $" exists(select 1 from vw_user where deptgid='{deptid}' and SHOWNAME in(INPUTBY,SENDER,CHECKOUTUSER)) ";
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
str = " (UPPER(CORPID)='" + companyid + "' or SALECORPID='" + companyid + "') ";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else if (visiblerange == "5")
|
|
|
{
|
|
|
if (tb == "index")
|
|
|
{
|
|
|
var userstr = new StringBuilder();
|
|
|
userstr.Append(" select COMPANYID from user_authority_range_company where userid='" + userid + "' and AUTHORITYID='" + AUTHORITYID + "' and VISIBLERANGE=1");
|
|
|
Database userdb = DatabaseFactory.CreateDatabase();
|
|
|
using (IDataReader reader = userdb.ExecuteReader(CommandType.Text, userstr.ToString()))
|
|
|
{
|
|
|
str = "";
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
if (str == "")
|
|
|
{
|
|
|
str = " (CORPID='" + Convert.ToString(reader["COMPANYID"]) + "' or SALECORPID='" + Convert.ToString(reader["COMPANYID"]) + "' ";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
str = str + " or CORPID='" + Convert.ToString(reader["COMPANYID"]) + "' or SALECORPID='" + Convert.ToString(reader["COMPANYID"]) + "'";
|
|
|
};
|
|
|
}
|
|
|
str = str + ")";
|
|
|
reader.Close();
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
str = " (UPPER(CORPID)='" + companyid + "' or SALECORPID='" + companyid + "') ";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else if (visiblerange == "6")
|
|
|
{
|
|
|
if (tb == "index")
|
|
|
{
|
|
|
|
|
|
str = " EXISTS (select 1 from user_authority_range_op P left join [user] u on (u.GID=P.OPID) where (INPUTBY=U.SHOWNAME OR SENDER=U.SHOWNAME OR CHECKOUTUSER=U.SHOWNAME ) AND P.userid='" + userid + "' and P.AUTHORITYID='" + AUTHORITYID + "' and P.VISIBLERANGE=1) ";
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
str = " (UPPER(CORPID)='" + companyid + "' or SALECORPID='" + companyid + "') ";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else if (visiblerange == "1")
|
|
|
{
|
|
|
str = " (UPPER(B.Corpid)='" + companyid + "' or B.SALECORPID='" + companyid + "') ";
|
|
|
}
|
|
|
VSSQL = VSSQL.Trim();
|
|
|
if (!string.IsNullOrEmpty(VSSQL))
|
|
|
{
|
|
|
|
|
|
if (!string.IsNullOrEmpty(str))
|
|
|
{
|
|
|
str = str + " and (" + VSSQL + ") ";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
str = " (" + VSSQL + ") ";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return str;
|
|
|
}
|
|
|
|
|
|
private static List<BillCheckOut_md> SetData(StringBuilder strSql, bool isNoForward = false)
|
|
|
{
|
|
|
var headList = new List<BillCheckOut_md>();
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
|
|
|
{
|
|
|
while (reader.Read())
|
|
|
{
|
|
|
BillCheckOut_md data = new BillCheckOut_md();
|
|
|
#region Set DB data to Object
|
|
|
|
|
|
|
|
|
data.GID = Convert.ToString(reader["GID"]);
|
|
|
data.CHECKOUTNO = Convert.ToString(reader["CHECKOUTNO"]);
|
|
|
data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]);
|
|
|
data.CORPID = Convert.ToString(reader["CORPID"]);
|
|
|
data.SALECORPID = Convert.ToString(reader["SALECORPID"]);
|
|
|
data.INPUTBY = Convert.ToString(reader["INPUTBY"]);
|
|
|
if (reader["CREATETIME"] != DBNull.Value)
|
|
|
data.CREATETIME = Convert.ToDateTime(reader["CREATETIME"]);
|
|
|
data.MODIFIER = Convert.ToString(reader["MODIFIER"]);
|
|
|
if (reader["MODIFYTIME"] != DBNull.Value)
|
|
|
data.MODIFYTIME = Convert.ToDateTime(reader["MODIFYTIME"]);
|
|
|
//if (reader["SENDED"] != DBNull.Value)
|
|
|
// data.SENDED = Convert.ToBoolean(reader["SENDED"]);
|
|
|
data.SENDED =(bool) getValue(reader, "SENDED");
|
|
|
data.SENDER = Convert.ToString(reader["SENDER"]);
|
|
|
if (reader["SENDTIME"] != DBNull.Value)
|
|
|
data.SENDTIME = Convert.ToDateTime(reader["SENDTIME"]);
|
|
|
data.RECEIVER = Convert.ToString(reader["RECEIVER"]);
|
|
|
data.RECEIVEEMAIL = Convert.ToString(reader["RECEIVEEMAIL"]);
|
|
|
data.SENDEREMAIL = Convert.ToString(reader["SENDEREMAIL"]);
|
|
|
//if (reader["ISCHECKOUT"] != DBNull.Value)
|
|
|
// data.ISCHECKOUT = Convert.ToBoolean(reader["ISCHECKOUT"]);
|
|
|
data.ISCHECKOUT = (bool)getValue(reader, "ISCHECKOUT");
|
|
|
if (reader["CHECKOUTTIME"] != DBNull.Value)
|
|
|
data.CHECKOUTTIME = Convert.ToDateTime(reader["CHECKOUTTIME"]);
|
|
|
|
|
|
data.CHECKOUTUSER = Convert.ToString(reader["CHECKOUTUSER"]);
|
|
|
data.MAILPDFURL = Convert.ToString(reader["MAILPDFURL"]);
|
|
|
data.SIGNPDFURL = Convert.ToString(reader["SIGNPDFURL"]);
|
|
|
#endregion
|
|
|
headList.Add(data);
|
|
|
}
|
|
|
reader.Close();
|
|
|
}
|
|
|
return headList;
|
|
|
}
|
|
|
|
|
|
public static DBResult DoSave(string opstatus, string data, string SHOWNAME, string companyid) {
|
|
|
|
|
|
var result = new DBResult();
|
|
|
try {
|
|
|
var cdc = new CommonDataContext();
|
|
|
var headData = JsonConvert.Deserialize<BillCheckOut_md>(data);
|
|
|
|
|
|
if (headData == null) headData=new BillCheckOut_md();
|
|
|
|
|
|
if (headData.SENDED == null) headData.SENDED = false;
|
|
|
if (headData.ISCHECKOUT == null) headData.ISCHECKOUT = false;
|
|
|
|
|
|
if (opstatus == "add")
|
|
|
{
|
|
|
headData.GID = Guid.NewGuid().ToString();
|
|
|
headData.INPUTBY = SHOWNAME;
|
|
|
headData.CORPID= companyid;
|
|
|
|
|
|
var billnoset = MsSysBillNoSetDAL.GetData("OPLBNAME='签单管理'", companyid);
|
|
|
if (billnoset.BILLTYPE != "")
|
|
|
headData.CHECKOUTNO = MsSysBillNoSetDAL.GetBillNo(billnoset, headData.INPUTBY.ToString().Trim(), headData.INPUTBY.ToString().Trim());
|
|
|
else {
|
|
|
result.SetErrorInfo("未配置命名规则【签单管理】");
|
|
|
return result;
|
|
|
}
|
|
|
//headData.CHECKOUTNO = PubSysDAL.GetBillNo("0311");
|
|
|
cdc.BillCheckOut.Add(headData);
|
|
|
}
|
|
|
else if (opstatus == "edit")
|
|
|
{
|
|
|
var oldheaddata = cdc.BillCheckOut.First(x => x.GID == headData.GID);
|
|
|
oldheaddata = AutoMapperHelper.MapTo<BillCheckOut_md, BillCheckOut_md>(headData);
|
|
|
cdc.BillCheckOut.AddOrUpdate(oldheaddata);
|
|
|
}
|
|
|
|
|
|
//设定sended ischange默认值
|
|
|
|
|
|
|
|
|
cdc.SaveChanges();
|
|
|
headData = cdc.BillCheckOut.FirstOrDefault(x => x.GID == headData.GID);
|
|
|
|
|
|
result.OK("保存成功", headData);
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
result.SetErrorInfo(e.Message);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
#region 通知签单
|
|
|
/// <summary>
|
|
|
/// 向客户发出签单条
|
|
|
/// </summary>
|
|
|
/// <param name="BSNOs"></param>
|
|
|
/// <returns></returns>
|
|
|
public static DBResult NoticeCustomerToCheckOut(string BSNOs,string path,string username)
|
|
|
{
|
|
|
var result = new DBResult();
|
|
|
|
|
|
var gidList= BSNOs.Split(',').ToList();
|
|
|
|
|
|
var cdc = new CommonDataContext();
|
|
|
|
|
|
var headList = cdc.BillCheckOut.Where(x => gidList.Contains(x.GID)).ToList();
|
|
|
|
|
|
foreach (var item in headList) {
|
|
|
|
|
|
var cansend = CanSend(item);
|
|
|
if (!cansend.Success) return cansend;
|
|
|
|
|
|
}
|
|
|
|
|
|
var customernames = headList.Select(s => s.CUSTOMERNAME).ToList();
|
|
|
var 客户账期和欠费 = cdc.V_CUSTOMER_NODR.Where(x => customernames.Contains(x.CUSTOMERNAME)).ToList();
|
|
|
|
|
|
DBResult 判断能否发邮件(BillCheckOut_md head) {
|
|
|
var _result = new DBResult();
|
|
|
|
|
|
var 客户info = cdc.info_client.FirstOrDefault(x => x.SHORTNAME == head.CUSTOMERNAME);
|
|
|
|
|
|
if (客户info.ISSP == true) {
|
|
|
return _result.OK();
|
|
|
}
|
|
|
|
|
|
if (客户账期和欠费.Exists(x => x.CUSTOMERNAME == head.CUSTOMERNAME))
|
|
|
{
|
|
|
|
|
|
var zq= 客户账期和欠费.First(x => x.CUSTOMERNAME == head.CUSTOMERNAME);
|
|
|
|
|
|
var bsnolist = cdc.BillCheckOut_Detail.Where(x => x.LINKGID == head.GID).Select(s => s.BSNO).ToList();
|
|
|
var billgainList = cdc.v_op_bill_gain.Where(x => bsnolist.Contains(x.PARENTID)).ToList();
|
|
|
|
|
|
if (zq.ACCTYPE == "票结")
|
|
|
{//看这些业务欠费没有
|
|
|
|
|
|
if (billgainList.Exists(x => x.TTLNODR > 0))
|
|
|
{
|
|
|
|
|
|
var 特放通过 = true;
|
|
|
foreach (var item in billgainList.Where(x => x.TTLNODR > 0))
|
|
|
{
|
|
|
|
|
|
var _r = BasicDataRefDAL.特放审批通过(item.BSNO);
|
|
|
|
|
|
if (!_r.Success)
|
|
|
{
|
|
|
_result.SetErrorInfo(item.MBLNO);
|
|
|
_result.setMessage2(item.BSNO);
|
|
|
特放通过 = false;
|
|
|
//break;
|
|
|
}
|
|
|
}
|
|
|
if (特放通过) return _result.OK();
|
|
|
|
|
|
return _result;
|
|
|
}
|
|
|
else {
|
|
|
return _result.OK();
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
//if (zq.ACCTYPE == "月结")
|
|
|
{
|
|
|
if (zq.CQTTLNODR > 0)
|
|
|
{
|
|
|
|
|
|
var 特放通过 = true;
|
|
|
foreach (var item in billgainList)
|
|
|
{
|
|
|
|
|
|
var _r = BasicDataRefDAL.特放审批通过(item.BSNO);
|
|
|
|
|
|
if (!_r.Success)
|
|
|
{
|
|
|
_result.SetErrorInfo(item.MBLNO);
|
|
|
_result.setMessage2(item.BSNO);
|
|
|
特放通过 = false;
|
|
|
}
|
|
|
}
|
|
|
if (特放通过) return _result.OK();
|
|
|
|
|
|
return _result;
|
|
|
}
|
|
|
else {
|
|
|
return _result.OK();
|
|
|
}
|
|
|
}
|
|
|
return _result;
|
|
|
}
|
|
|
else {
|
|
|
//_result = false;
|
|
|
_result.SetErrorInfo("");
|
|
|
}
|
|
|
return _result;
|
|
|
}
|
|
|
var nosendCust = new List<string>();
|
|
|
|
|
|
var cansendemail = new DBResult();
|
|
|
foreach (var item in headList)
|
|
|
{
|
|
|
//20230608 判断客户是否欠费
|
|
|
//如月结 看是否有超期欠费
|
|
|
//如票结 看是否该票欠费
|
|
|
|
|
|
//如有 则不发邮件
|
|
|
cansendemail = 判断能否发邮件(item);
|
|
|
if (!cansendemail.Success) {
|
|
|
if (nosendCust.Exists(x => x == item.CUSTOMERNAME))
|
|
|
{
|
|
|
|
|
|
}
|
|
|
else {
|
|
|
nosendCust.Add(item.CUSTOMERNAME);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _r= DoSendMail(item,path, cansendemail.Success);
|
|
|
if (_r.Success)
|
|
|
{
|
|
|
item.SENDED = cansendemail.Success;
|
|
|
item.SENDTIME = DateTime.Now;
|
|
|
item.SENDER = username;
|
|
|
}
|
|
|
else {
|
|
|
return _r;
|
|
|
}
|
|
|
}
|
|
|
cdc.SaveChanges();
|
|
|
result.OK("生成和发送签单条成功。");
|
|
|
if (nosendCust!=null && nosendCust.Count>0) {
|
|
|
var custstr = string.Join( ",",nosendCust);
|
|
|
result.Message=$"以下客户由于欠费原因没有发送邮件【{custstr}】,业务号【{cansendemail.Message}】,要填写特殊放单申请吗?";
|
|
|
result.Data = cansendemail.Message2;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public static DBResult SaveSignPdf(string GID, string Base64Str, string path, string username) {
|
|
|
var result = new DBResult();
|
|
|
|
|
|
try
|
|
|
{
|
|
|
var cdc = new CommonDataContext();
|
|
|
|
|
|
var head = cdc.BillCheckOut.FirstOrDefault(x => x.GID == GID);
|
|
|
|
|
|
byte[] bytes = Convert.FromBase64String(Base64Str);
|
|
|
|
|
|
string location = path+"/"+ head.CHECKOUTNO + "_Sign.pdf";
|
|
|
|
|
|
head.SIGNPDFURL = location;
|
|
|
|
|
|
if (File.Exists(location))
|
|
|
{
|
|
|
File.Delete(location);
|
|
|
}
|
|
|
|
|
|
System.IO.FileStream stream = new FileStream(location, FileMode.CreateNew);
|
|
|
System.IO.BinaryWriter writer = new BinaryWriter(stream);
|
|
|
writer.Write(bytes, 0, bytes.Length);
|
|
|
writer.Close();
|
|
|
|
|
|
head.ISCHECKOUT = true;
|
|
|
head.CHECKOUTUSER=username;
|
|
|
head.CHECKOUTTIME=DateTime.Now;
|
|
|
|
|
|
//head.SIGNPDFURL = location;
|
|
|
cdc.BillCheckOut.AddOrUpdate(head);
|
|
|
cdc.SaveChanges();
|
|
|
|
|
|
//var BodyList = cdc.BillCheckOut_Detail.Where(x => x.LINKGID == GID).ToList();
|
|
|
//var BsnoList = BodyList.Select(s => s.BSNO).ToList();
|
|
|
//var condition = "b.bsno in('"+string.Join(",", BsnoList) +"')";
|
|
|
//var _recordcount = 0;
|
|
|
//var blissuedataList = MsOp_BLISSUEDAL.GetDataList(condition, 0, 999, out _recordcount, "");
|
|
|
|
|
|
//var QCResult = MsOp_BLISSUEDAL.QC(blissuedataList, username, "签单条签字签出", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), username);
|
|
|
var QCResult = DoQC(GID, username);
|
|
|
result.OK(head.SIGNPDFURL);
|
|
|
}
|
|
|
catch (Exception e) {
|
|
|
result.SetErrorInfo(e.Message);
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
public static DBResult DoQC(string GID,string username) {
|
|
|
var cdc = new CommonDataContext();
|
|
|
var BodyList = cdc.BillCheckOut_Detail.Where(x => x.LINKGID == GID).ToList();
|
|
|
var BsnoList = BodyList.Select(s => s.BSNO).ToList();
|
|
|
var condition = "b.bsno in('" + string.Join("','", BsnoList) + "')";
|
|
|
var _recordcount = 0;
|
|
|
var blissuedataList = MsOp_BLISSUEDAL.GetDataList(condition, 0, 999, out _recordcount, "");
|
|
|
|
|
|
var QCResult = MsOp_BLISSUEDAL.QC(blissuedataList, username, "签单条签字签出", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), username);
|
|
|
return QCResult;
|
|
|
}
|
|
|
public static DBResult CanSend(BillCheckOut_md head) {
|
|
|
var result = new DBResult();
|
|
|
result.OK();
|
|
|
if (string.IsNullOrWhiteSpace(head.RECEIVEEMAIL)) {
|
|
|
result.SetErrorInfo("未指定收件人邮箱");
|
|
|
}
|
|
|
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public static DBResult DoSendMail(BillCheckOut_md head, string path,bool dosend=true)
|
|
|
{
|
|
|
var result = new DBResult();
|
|
|
//1根据业务的明细 生成一个pdf
|
|
|
|
|
|
result=MakeCheckOutPdf( head, path);
|
|
|
|
|
|
if (!result.Success) return result;
|
|
|
|
|
|
var filename = result.Message;
|
|
|
|
|
|
//2作为附件发出
|
|
|
if (dosend)
|
|
|
{
|
|
|
result = SendCheckOutEmail(head, path);
|
|
|
}
|
|
|
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public static DBResult MakeCheckOutPdf(BillCheckOut_md head, string path) {
|
|
|
var result = new DBResult();
|
|
|
|
|
|
//读取基本dpf 在其中增加内容
|
|
|
PDFHelper ph = new PDFHelper();
|
|
|
|
|
|
result = ph.MakePdf_BillCheckOut(head, path);
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public static DBResult SendCheckOutEmail(BillCheckOut_md head,string path)
|
|
|
{
|
|
|
var cdc = new CommonDataContext();
|
|
|
var result = new DBResult(true, "");
|
|
|
try
|
|
|
{
|
|
|
head = cdc.BillCheckOut.FirstOrDefault(x => x.GID == head.GID);
|
|
|
var detailList = cdc.VW_BillCheckOut_Detail.Where(x => x.LINKGID == head.GID).ToList();
|
|
|
var mblnoList = detailList.Select(s => s.MBLNO).ToList();
|
|
|
var mblnostr = string.Join(",", mblnoList);
|
|
|
if (mblnostr.Length > 50) {
|
|
|
mblnostr = mblnostr.Substring(0, 50) + "...等";
|
|
|
}
|
|
|
|
|
|
var mailtitle = mblnostr+" 领单申请";
|
|
|
|
|
|
var Body = new StringBuilder();
|
|
|
Body.Append("<html> <Body>");
|
|
|
Body.Append("<br />尊敬的客户:<br />您的提单已经生成,请携带领单申请书签单,谢谢!");
|
|
|
//Body.Append("<br />客户名称:" + headData.CUSTOMERNAME);
|
|
|
//Body.Append("<br />揽货人" + headData.SALE);
|
|
|
//Body.Append("<br />录入人" + headData.INPUTBY);
|
|
|
//Body.Append("<br />港口:" + headData.DESTINATION);
|
|
|
//Body.Append("<br />船期:" + headData.ETD);
|
|
|
//Body.Append("<br />船公司:" + headData.CARRIER);
|
|
|
//Body.Append("<br />箱量:" + headData.CNTRTOTAL);
|
|
|
//Body.Append("<br />备注:" + OrderData.REMARK);
|
|
|
Body.Append("</Body></html> ");
|
|
|
var mailto = head.RECEIVEEMAIL;
|
|
|
//var oplist = SysUserDAL.GetDataList("U.SHOWNAME='" + op + "' or U.SHOWNAME='" + headData.SALE + "' or U.SHOWNAME='" + OrderData.INPUTBY + "' ");
|
|
|
//foreach (var opbs in oplist)
|
|
|
//{
|
|
|
// if (opbs.EMAIL1 != "")
|
|
|
// {
|
|
|
// if (mailto == "")
|
|
|
// mailto = opbs.EMAIL1;
|
|
|
// else
|
|
|
// mailto = mailto + ";" + opbs.EMAIL1;
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
//if (mailto != "")
|
|
|
//{
|
|
|
// var j = 0;
|
|
|
// var filepath = "";
|
|
|
// var doclist = ReceiptDocDAL.GetDocList("BSNO='" + headData.BSNO + "'", " MODIFIEDTIME DESC ");
|
|
|
// foreach (var doc in doclist)
|
|
|
// {
|
|
|
// if (j == 0)
|
|
|
// {
|
|
|
// filepath = doc.Driect_URL;
|
|
|
// }
|
|
|
|
|
|
// j = j = 1;
|
|
|
// }
|
|
|
|
|
|
// result = MsSeaeOrderDAL.SendMailWithFile(mailtitle, Body.ToString(), filepath, mailto, Convert.ToString(Session["SHOWNAME"]));
|
|
|
//}
|
|
|
|
|
|
//20230328 首先trycatch删除 head.MAILPDFURL_*的文件
|
|
|
//然后复制一个head.MAILPDFURL文件,至head.MAILPDFURL_yyyyMMddHHmm.pdf
|
|
|
|
|
|
|
|
|
//DirectoryInfo direction = new DirectoryInfo(filepath);
|
|
|
//var allfilename = head.MAILPDFURL.Replace(".pdf", "_*");
|
|
|
//FileInfo[] files= direction.GetFiles(allfilename,SearchOption.AllDirectories);
|
|
|
//if (files != null && files.Length > 0) {
|
|
|
// for (int i = 0; i < files.Length; i++)
|
|
|
// {
|
|
|
// try {
|
|
|
// File.Delete(files[i].FullName);
|
|
|
// }
|
|
|
// catch(Exception ex)
|
|
|
// {
|
|
|
|
|
|
// }
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
var filedic = GetLogicInfo(head.GID, "filename");
|
|
|
var upddic = new Dictionary<string,string>();
|
|
|
if (filedic!=null && filedic.Count>0)
|
|
|
foreach (var item in filedic) {
|
|
|
|
|
|
if (item.Value == "1") {
|
|
|
try
|
|
|
{
|
|
|
File.Delete(path+"/" + item.Key);
|
|
|
upddic.Add(item.Key, "0");
|
|
|
}
|
|
|
catch(Exception ex)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string sourceFile = path+"/" + head.CHECKOUTNO+".pdf";
|
|
|
string filelastname = DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
|
|
|
string destinationFile = sourceFile.Replace(".pdf","_") + filelastname ;
|
|
|
//记录复制的附件到
|
|
|
if (System.IO.File.Exists(sourceFile))
|
|
|
{
|
|
|
// true is overwrite
|
|
|
System.IO.File.Copy(sourceFile, destinationFile, true);
|
|
|
}
|
|
|
|
|
|
upddic.Add(head.CHECKOUTNO + "_" + filelastname , "1");
|
|
|
|
|
|
SaveLogicInfo(head.GID, "filename", upddic);
|
|
|
|
|
|
//var sendpath = destinationFile.Replace(path, "../../UploadFiles/MailFile");
|
|
|
|
|
|
SendEmail se = new SendEmail(mailto, head.SENDER, "", "", mailtitle, Body.ToString(), true);
|
|
|
se.Attachments(destinationFile);
|
|
|
se.SetSmtp();
|
|
|
|
|
|
|
|
|
result.OK("发送成功");
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
result.Success = false;
|
|
|
result.Message = e.Message;
|
|
|
BasicDataRefDAL.SaveLog(e.Message, "", "签单条邮件", "发送错误");
|
|
|
}
|
|
|
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
public class BillCheckOutEmail
|
|
|
{
|
|
|
Multipart multipart = new Multipart("mixed");
|
|
|
/// <summary>
|
|
|
/// 添加文件
|
|
|
/// </summary>
|
|
|
/// <param name="file"></param>
|
|
|
/// <param name="name"></param>
|
|
|
public bool AddFile(string file, string name)
|
|
|
{
|
|
|
if (!System.IO.File.Exists(file))
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
try
|
|
|
{
|
|
|
System.IO.FileStream fs = new System.IO.FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
|
|
|
|
|
|
//附件
|
|
|
var attimg = new MimePart(MediaTypeNames.Application.Octet)
|
|
|
{
|
|
|
Content = new MimeContent(fs, ContentEncoding.Default),
|
|
|
ContentDisposition = new MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment),
|
|
|
ContentTransferEncoding = ContentEncoding.Default,
|
|
|
FileName = name,
|
|
|
IsAttachment = true,
|
|
|
};
|
|
|
multipart.Add(attimg);
|
|
|
return true;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 发送
|
|
|
/// </summary>
|
|
|
/// <param name="subject">主题</param>
|
|
|
/// <param name="from">发送人</param>
|
|
|
/// <param name="to">接收人</param>
|
|
|
/// <param name="html">邮件内容支持html</param>
|
|
|
/// <returns></returns>
|
|
|
public string Send(string subject, string from, string to, string html)
|
|
|
{
|
|
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
|
|
{
|
|
|
MimeMessage mail = new MimeMessage();
|
|
|
mail.From.Add(new MailboxAddress("Yuan天空", from));
|
|
|
mail.To.Add(new MailboxAddress(to, to));
|
|
|
mail.Subject = subject;
|
|
|
if (string.IsNullOrEmpty(html))
|
|
|
{
|
|
|
return "发送内容不能为空";
|
|
|
}
|
|
|
|
|
|
var Html = new TextPart(MimeKit.Text.TextFormat.Html)
|
|
|
{
|
|
|
Text = html
|
|
|
};
|
|
|
multipart.Add(Html);
|
|
|
mail.Body = multipart;
|
|
|
|
|
|
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
|
|
//连接邮箱服务器
|
|
|
//!!!需要注意的是阿里云服务器默认是禁止25端口的,安全组添加也不行需要提交阿里云审核才能开通 , 这里使用587端口是可以发送的(服务器实测发送延迟很高 ,本地调试发送挺快, 不知道是不是服务器配置比较低的原因)
|
|
|
smtp.Connect("smtp.qq.com", 587, SecureSocketOptions.None);
|
|
|
//登录认证 qq邮箱账号和授权密钥
|
|
|
smtp.Authenticate("xxxx@qq.com", "xxxx");
|
|
|
smtp.Timeout = 600000;
|
|
|
string res = "";
|
|
|
smtp.Send(mail);
|
|
|
smtp.Disconnect(true);
|
|
|
return res;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
}
|
|
|
}
|