公司的EDM软件已经很多年了,需要更新程序并添加一些功能。功能描述:暂时内部使用,要有登陆及权限过滤功能;发送邮件和问卷检测功能。
概述
新需求中程序属于一个流程中的子系统,所以对扩展有要求,登陆时考虑到高并发和容灾,拟采用多进程方式,于是将session记录到数据库里;
发送邮件过程中,由于要发送的邮箱属于10W级,而SMTP服务器限制较多(同一Ip/邮箱,一段时间发送数量上线,发送速度限制,每天部分邮局发送数量上限),对于发送时数据的整理要求较高,还要检测导入的邮箱是否有错误,历史上是否有退订和发送失败中的再次发送不可能成功邮箱的记录,排除不可能成功的邮箱;
问卷需要对导入的文件进行检测是否有多、缺、乱的格式,并生成可访问的链接。
框架搭建
1、框架模型:
原本是想试验一下领域驱动模型来设计,不过最后把自己绕进去了,出不来了,待到有所成的时候再写吧。这里简要的介绍一下:
Models就不用说了,数据库模型;
Commons里面是一些公共类和页面显示数据模型;
1 using System; 2 using System.Collections.Generic; 3 4 namespace Commons.DTO 5 { 6 public class SendTypePages 7 { 8 public int Id { get; set; } 9 public string CustomerName { get; set; } 10 public string EdmName { get; set; } 11 public string Person { get; set; } 12 public string EdmUrl { get; set; } 13 public string DesignUrl { get; set; } 14 public string EmailUrl { get; set; } 15 public string SetTime { get; set; } 16 public string SendStatus { get; set; } 17 } 18 19 public class StopSendType 20 { 21 public int Id { get; set; } 22 public string EdmBeginUrl { get; set; } 23 public string SendStatus { get; set; } 24 public string EdmName { get; set; } 25 } 26 27 public class SendTypeStatis 28 { 29 public string EdmName { get; set; } 30 public string EdmNewUrl { get; set; } 31 public string SetTime { get; set; } 32 public int? TotalCounts { get; set; } 33 public string SendStatus { get; set; } 34 public string CustomerName { get; set; } 35 public double TheBackCount { get; set; } 36 public double TheArriveCount { get; set; } 37 public double TheOpenCount { get; set; } 38 public double EdmBeginUrl { get; set; } 39 public double TheOpenTimesCount { get; set; } 40 public double TheSendCount { get; set; } 41 public double TheTotalCount { get; set; } 42 public double TheUnableCount { get; set; } 43 public string TheArriveProcent { get; set; } 44 public string TheOpenProcent { get; set; } 45 } 46 47 public class TheBackEmailPage 48 { 49 public int Id { get; set; } 50 public string CustomerName { get; set; } 51 public string EdmName { get; set; } 52 public string Email { get; set; } 53 public string Reason { get; set; } 54 public string SetTime { get; set; } 55 } 56 57 public class JsonDate 58 { 59 public int id { get; set; } 60 public string text { get; set; } 61 public List<JsonDate> children { get; set; } 62 } 63 64 public class CustomerList 65 { 66 public int Id { get; set; } 67 public string CustomerName { get; set; } 68 public string Remarks { get; set; } 69 public string Phone { get; set; } 70 public string Email { get; set; } 71 public string Enterprise { get; set; } 72 public string Setion { get; set; } 73 } 74 75 public class QuestionnaireList 76 { 77 public int Id { get; set; } 78 public string CustomerName { get; set; } 79 public string Name { get; set; } 80 public int ReportTimes { get; set; } 81 public int GetBackTimes { get; set; } 82 public string UpTime { get; set; } 83 } 84 85 public class CustomerDto 86 { 87 public int Id { get; set; } 88 public string CustomerName { get; set; } 89 public string Phone { get; set; } 90 public string Email { get; set; } 91 public string Remarks { get; set; } 92 public string Enterprise { get; set; } 93 public string Setion { get; set; } 94 } 95 96 public class SendTest 97 { 98 public int Id { get; set; } 99 public string Email { get; set; } 100 public int IsOpen { get; set; } 101 public int IsReturn { get; set; } 102 public string TheBackReason { get; set; } 103 } 104 105 public class SendTypeEmailDto 106 { 107 public string QqEmail { get; set; } 108 public string WangyiEmail { get; set; } 109 public string TomEmail { get; set; } 110 public string SinaEmail { get; set; } 111 public string SohuEmail { get; set; } 112 public string OtherEmail { get; set; } 113 } 114 }