MessageManageServe.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. using QWPlatform.IService;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using QWPlatform.SystemLibrary;
  8. using QWPlatform.SystemLibrary.LogManager;
  9. using System.Data;
  10. using PMS.BusinessModels.Problem;
  11. using PMS.BusinessModels.Account;
  12. using PMS.EntityModels.NoticeManager;
  13. using PMS.Plugins.Common;
  14. namespace PMS.DBService.MessageManage
  15. {
  16. public class MessageManageServe: DataServiceBase
  17. {
  18. private static Logger Log = Logger.Instance;
  19. /// <summary>
  20. /// 本部添加公告
  21. /// </summary>
  22. /// <param name="model"></param>
  23. /// <param name="channel"></param>
  24. /// <returns></returns>
  25. public bool AddMessageByBB(MessageManageModel model,string ID)
  26. {
  27. ///获取序列
  28. var number = this.SqlBuilder.SqlText("select 公告通知_编号.nextval from dual").Select<int>();
  29. return this.InsertBuilder.Column("ID", ID)
  30. .Column("编号", number)
  31. .Column("标题", model.Title)
  32. .Column("内容", model.Deatil)
  33. .Column("发布时间", this.DataBaseBuilder.GetDateTime)
  34. .Column("添加人", model.PersonName)
  35. .Column("添加人ID", model.PersonId)
  36. .Column("通知对象",model.NotifyTagert)
  37. .Column("通知类型", model.Type)
  38. .Column("优先级", model.Property)
  39. .Column("首页显示", model.IsShow)
  40. .Column("截止日期", model.EndDate)
  41. .Column("附件ID",model.FJID)
  42. .Insert("公告通知")
  43. .Execute()>0;
  44. }
  45. /// <summary>
  46. /// 渠道添加公告
  47. /// </summary>
  48. /// <param name="model"></param>
  49. /// <param name="channel"></param>
  50. /// <returns></returns>
  51. public bool AddMessageByQD(MessageManageModel model,UserInfo user,string ID)
  52. {
  53. ///获取序列
  54. var number = this.SqlBuilder.SqlText("select 公告通知_编号.nextval from dual").Select<int>();
  55. return this.InsertBuilder.Column("ID", ID)
  56. .Column("编号", number)
  57. .Column("标题", model.Title)
  58. .Column("内容", model.Deatil)
  59. .Column("发布时间", this.DataBaseBuilder.GetDateTime)
  60. .Column("添加人", model.PersonName)
  61. .Column("添加人ID", model.PersonId)
  62. .Column("通知对象", model.NotifyTagert)
  63. .Column("通知类型", model.Type)
  64. .Column("优先级", model.Property)
  65. .Column("首页显示", model.IsShow)
  66. .Column("渠道ID", user.CompanyID)
  67. .Column("截止日期",model.EndDate)
  68. .Column("附件ID", model.FJID)
  69. .Insert("公告通知")
  70. .Execute() > 0;
  71. }
  72. public bool DeleteMessage(MessageManageModel model)
  73. {
  74. return this.UpdateBuilder.Column("是否删除", 1)
  75. .Column("删除时间", this.DataBaseBuilder.GetDateTime)
  76. .Where("ID", model.ID)
  77. .Update("公告通知")
  78. .Execute() > 0;
  79. }
  80. /// <summary>
  81. /// 通知类型
  82. /// </summary>
  83. /// <returns></returns>
  84. public DataTable NoticeType()
  85. {
  86. return SelectBuilder.From("基础编码").Where("分类ID", "0A469BFA-7BCC-4F87-9BBF-56E2FDB762F4").Columns("显示名").Columns("ID").Columns("代码").Where("启用", 1).Select();
  87. }
  88. /// <summary>
  89. /// 根据公告ID获取通知对象
  90. /// </summary>
  91. /// <param name="v"></param>
  92. /// <param name="id"></param>
  93. /// <returns></returns>
  94. public DataTable GetNatureByID(string id)
  95. {
  96. return SelectBuilder.From("基础编码").Where("分类ID", "D3EDEA7A-7F07-4DD3-9A6B-34DB16A6E982").Where("启用", 1).Where("代码", id).Columns("显示名").Select();
  97. }
  98. /// <summary>
  99. /// 修改操作
  100. /// </summary>
  101. /// <param name="model"></param>
  102. /// <returns></returns>
  103. public int Edit_Notice(MessageManageModel model)
  104. {
  105. try
  106. {
  107. return UpdateBuilder.Update("公告通知").Column("标题", model.Title).Column("内容", model.Deatil).Column("通知类型", model.Type).Column("通知对象", model.NotifyTagert).Column("附件ID",model.FJID).Column("优先级", model.Property).Column("首页显示", model.IsShow).Column("截止日期", model.EndDate).Where("ID",model.ID).Execute();
  108. }
  109. catch (Exception ex)
  110. {
  111. Logger.Instance.Error("调用Edit_Notice时发生异常错误", ex);
  112. return 0;
  113. }
  114. }
  115. /// <summary>
  116. /// 判断是否显示
  117. /// </summary>
  118. /// <param name="userInfo"></param>
  119. /// <returns></returns>
  120. public Mssage_config PanDuanIsShow(UserInfo userInfo)
  121. {
  122. var bytes = SelectBuilder.From("参数配置").Where("所属账户", userInfo.ID).Where("参数名", PMS.BusinessModels.PMSCONSTS.MESAAGECONFIG).Columns("参数内容").Select<byte[]>();
  123. if (bytes != null)
  124. {
  125. return QWPlatform.SystemLibrary.Serialize.SerializeHelper.DeserializeBinary(bytes) as Mssage_config;
  126. }
  127. return null;
  128. }
  129. /// <summary>
  130. /// 是否启用
  131. /// </summary>
  132. /// <param name="id"></param>
  133. /// <returns></returns>
  134. public int NoticeStatus(string id)
  135. {
  136. var status = SelectBuilder.From("公告通知").Columns("是否启用").Where("ID", id).Select<int>();
  137. status=status == 1 ?0 : 1;
  138. UpdateBuilder.Update("公告通知").Where("ID", id).Column("是否启用", status).Execute();
  139. return status == 1 ? 1 : 0;
  140. }
  141. /// <summary>
  142. /// 添加手机公告
  143. /// </summary>
  144. /// <param name="model"></param>
  145. /// <returns></returns>
  146. public string Add_AppPush(AppPush_Model model)
  147. {
  148. string id = Guid.NewGuid().ToString();
  149. var r= InsertBuilder.Insert("APP图片公告")
  150. .Column("ID", id)
  151. .Column("标题", model.BT)
  152. .Column("描述", model.MS)
  153. .Column("添加人ID", model.TJRID)
  154. .Column("添加时间",this.DataBaseBuilder.GetDateTime)
  155. .Execute();
  156. if (r == 1)
  157. {
  158. return id;
  159. }
  160. return "";
  161. }
  162. /// <summary>
  163. /// 删除app公告
  164. /// </summary>
  165. /// <param name="id"></param>
  166. /// <returns></returns>
  167. public int Del_AppNotice(string id)
  168. {
  169. return DeleteBulider.Delete("APP图片公告").Where("ID", id).Execute();
  170. }
  171. /// <summary>
  172. /// 获取启用的app公告
  173. /// </summary>
  174. /// <returns></returns>
  175. public DataTable GetWorkNotice()
  176. {
  177. return SelectBuilder.From("APP图片公告").Columns("ID,标题,描述,图片ID").Where("是否启用", 1).OrderBy("添加时间 desc").Select();
  178. }
  179. public DataTable GetWorkNotiveById(string id)
  180. {
  181. return SelectBuilder.From("APP图片公告").Columns("ID,标题,描述,图片ID").Where("ID", id).Select();
  182. }
  183. public int Edit_NoticeFJ(string FJID,string ID)
  184. {
  185. return UpdateBuilder.Update("公告通知").Column("附件ID",FJID ).Where("ID", ID).Execute();
  186. }
  187. /// <summary>
  188. /// 删除附件
  189. /// </summary>
  190. /// <param name="id"></param>
  191. /// <returns></returns>
  192. public int DeleteFJ(string id)
  193. {
  194. return UpdateBuilder.Update("公告通知").Column("附件ID", DBNull.Value).Where("ID", id).Execute();
  195. }
  196. /// <summary>
  197. /// 添加图片ID
  198. /// </summary>
  199. /// <param name="tPID"></param>
  200. /// <returns></returns>
  201. public int Edit_AppImg(AppPush_Model model)
  202. {
  203. return UpdateBuilder.Update("APP图片公告").Column("图片ID", model.TPID).Where("ID", model.ID).Execute();
  204. }
  205. /// <summary>
  206. /// App公告是否启用
  207. /// </summary>
  208. /// <param name="id"></param>
  209. /// <returns></returns>
  210. public int AppNoticeStatus(string id)
  211. {
  212. var status = SelectBuilder.From("APP图片公告").Columns("是否启用").Where("ID", id).Select<int>();
  213. status = status == 1 ? 0 : 1;
  214. DataTable dt = SelectBuilder.From("APP图片公告").Columns("*").Where("是否启用", 1).OrderBy("添加时间 desc").Select();
  215. if (dt.Rows.Count <6)
  216. {
  217. UpdateBuilder.Update("APP图片公告").Where("ID", id).Column("是否启用", status).Execute();
  218. return status == 1 ? 1 : 0;
  219. }
  220. else
  221. {
  222. if (status == 0)
  223. {
  224. UpdateBuilder.Update("APP图片公告").Where("ID", id).Column("是否启用", status).Execute();
  225. return 0;
  226. }
  227. }
  228. return -1;
  229. }
  230. /// <summary>
  231. /// APP首页推送
  232. /// </summary>
  233. /// <param name="startnumber"></param>
  234. /// <param name="endnumber"></param>
  235. /// <param name="query"></param>
  236. /// <param name="user"></param>
  237. /// <returns></returns>
  238. public DataTable APPDataBind(int startnumber, int endnumber,out int total)
  239. {
  240. string sql = @"select ID,标题,描述,图片ID,添加时间,decode(是否启用,'1','启用','停用') as 状态,
  241. (select 姓名 from 人员信息 where id=r.添加人ID)as 添加人 from APP图片公告 r order by 添加时间 desc";
  242. return SqlBuilder.SqlText(sql).Paging(startnumber, endnumber).Select(out total);
  243. }
  244. /// <summary>
  245. /// 显示最新公告通知
  246. /// </summary>
  247. /// <param name="user"></param>
  248. /// <returns></returns>
  249. public DataTable GetMessageOnIndexChannel(UserInfo user)
  250. {
  251. string sql = @"select * from (select * from 公告通知
  252. where (渠道ID is null or 渠道ID=:渠道)
  253. and 首页显示 =1 and instr(通知对象,:NotifyTagert)>0
  254. and ID not in(select 公告ID from 用户公告标记 where 标记人ID=:PersonId and 是否显示=0)
  255. and sysdate<截止日期
  256. and 是否删除=0 and 是否启用=1 order by 发布时间 desc)
  257. where rownum<4";
  258. return SqlBuilder.SqlText(sql).Parameters("渠道", user.CompanyID).Parameters("NotifyTagert",user.PersonProperty).Parameters("PersonId",user.PersonID).Select();
  259. }
  260. /// <summary>
  261. /// 通知数目
  262. /// </summary>
  263. /// <param name="user"></param>
  264. /// <returns></returns>
  265. public int GetCount(UserInfo user)
  266. {
  267. var sql = @"select Count(1) from 公告通知
  268. where (渠道ID is null or 渠道ID=:渠道)
  269. and instr(通知对象,:NotifyTagert)>0
  270. and 是否启用=1
  271. and 首页显示 =1
  272. and 是否删除=0
  273. and sysdate<截止日期
  274. and ID not in(select 公告ID from 用户公告标记 where 标记人ID=:PersonId and 是否显示=0)";
  275. return this.SqlBuilder.SqlText(sql)
  276. .Parameters("渠道", user.CompanyID)
  277. .Parameters("NotifyTagert", user.PersonProperty)
  278. .Parameters("PersonId",user.PersonID)
  279. .Select<int>();
  280. }
  281. /// <summary>
  282. /// 根据ID获取通知信息
  283. /// </summary>
  284. /// <param name="user"></param>
  285. /// <returns></returns>
  286. public DataTable ShowNotice(UserInfo user)
  287. {
  288. return SelectBuilder.From("公告通知").Where("首页显示", 1).Select();
  289. }
  290. /// <summary>
  291. /// 获取渠道
  292. /// </summary>
  293. /// <param name="personProperty"></param>
  294. /// <returns></returns>
  295. public DataTable GetChannelByNature(UserInfo user)
  296. {
  297. string sql = "select ID,名称 from 渠道信息";
  298. if (user.PersonProperty !=1)
  299. {
  300. sql += " where ID=:渠道ID";
  301. return SqlBuilder.SqlText(sql).Parameters("渠道ID", user.CompanyID).Select();
  302. }
  303. return SqlBuilder.SqlText(sql).Select();
  304. }
  305. /// <summary>
  306. /// 根据ID获取通知信息
  307. /// </summary>
  308. /// <param name="v"></param>
  309. /// <param name="id"></param>
  310. /// <returns></returns>
  311. public DataTable GetNoticeByID(string id)
  312. {
  313. return SelectBuilder.From("公告通知").Where("ID", id).Columns("*").Select();
  314. }
  315. /// <summary>
  316. /// 通知对象
  317. /// </summary>
  318. /// <returns></returns>
  319. public DataTable NoticePerson(int PersonProperty)
  320. {
  321. string sql = "select ID,显示名,代码 from 基础编码 where 分类ID='D3EDEA7A-7F07-4DD3-9A6B-34DB16A6E982' and 启用=1";
  322. if(PersonProperty!=1)
  323. {
  324. sql += " and 代码!=1";
  325. }
  326. return SqlBuilder.SqlText(sql).Select();
  327. }
  328. /// <summary>
  329. /// 通知优先级
  330. /// </summary>
  331. /// <returns></returns>
  332. public DataTable NoticeOrder()
  333. {
  334. return SelectBuilder.From("基础编码").Where("分类ID", "A10D6027-DEDD-4B6D-9549-33830DE52AEA").Columns("显示名").Columns("ID").Columns("代码").Where("启用", 1).Select();
  335. }
  336. public DataTable SelecteMessageById(string id)
  337. {
  338. return this.SelectBuilder.From("公告通知").Where("ID", id).Columns("编号,标题,内容,发布时间,添加人,附件ID").Select();
  339. }
  340. /// <summary>
  341. /// 公告信息绑定
  342. /// </summary>
  343. /// <param name="page"></param>
  344. /// <param name="rows"></param>
  345. /// <param name="query"></param>
  346. /// <returns></returns>
  347. public string DataBind(int page, int rows, string query,UserInfo user)
  348. {
  349. var exe = this.ProcedureBuilder
  350. .Procedure("B_公告通知管理.p_公告信息_Select")
  351. .Paramter("查询条件_In", query)
  352. .Paramter("人员性质_In", user.PersonProperty)
  353. .Paramter("渠道ID_In", user.CompanyID)
  354. .Paramter("开始行_In", page)
  355. .Paramter("结束行_In", rows)
  356. .ParamterOut("total", DbType.Double, 0)
  357. .ParamterOut("Resultlist", true);
  358. exe.Execute();
  359. var dt = exe.ParameterValue<DataTable>("Resultlist");
  360. var total = exe.ParameterValue<decimal>("total");
  361. return dt.ToEasyUIGridJson(int.Parse(total.ToString()));
  362. }
  363. /// <summary>
  364. /// 首页通知公告信息
  365. /// </summary>
  366. /// <param name="PersonProperty"></param>
  367. /// <returns></returns>
  368. public DataTable GetHome(UserInfo user)
  369. {
  370. var SqlBuilder = this.SqlBuilder;
  371. var sql = @"select * from
  372. (select 标题,ID,ROUND(sysdate - 发布时间,2)*24 as 发布时间,通知类型 from 公告通知 where 是否删除=0 and 是否启用=1 and instr(通知对象,:PersonProperty)>0 ";
  373. SqlBuilder.Parameters("PersonProperty", user.PersonProperty);
  374. //如果不为总部人员显示配置信息
  375. if (user.PersonProperty != 1)
  376. {
  377. sql += " and (渠道ID=:渠道ID or 渠道ID is null)";
  378. SqlBuilder.Parameters("渠道ID", user.CompanyID);
  379. }
  380. else
  381. {
  382. sql += " and (渠道ID is null ) ";
  383. }
  384. sql += " order by 发布时间 asc) where rownum<=5";
  385. return SqlBuilder.SqlText(sql).Select();
  386. }
  387. /// <summary>
  388. /// 首页获取公告列表
  389. /// </summary>
  390. /// <param name="page"></param>
  391. /// <param name="rows"></param>
  392. /// <param name="PersonProperty"></param>
  393. /// <param name="total"></param>
  394. /// <returns></returns>
  395. public DataTable HomeGetList(int page, int rows, UserInfo user, out int total)
  396. {
  397. total = 0;
  398. var SqlBuilder = this.SqlBuilder;
  399. var sql = @"select 编号,标题,内容,ID,发布时间,ROUND(sysdate - 发布时间,2)*24 as 发布时间小时,decode(通知类型,1,'公告','通知') as 类型,添加人 from 公告通知 where 通知类型=1 and 是否删除=0 and 是否启用=1 and instr(通知对象,:PersonProperty)>0 ";
  400. SqlBuilder.Parameters("PersonProperty", user.PersonProperty);
  401. //如果不为总部人员显示配置信息
  402. if (user.PersonProperty != 1)
  403. {
  404. sql += " and (渠道ID=:渠道ID_In or 渠道ID is null) order by 发布时间 desc";
  405. SqlBuilder.Parameters("渠道ID_In",user.CompanyID);
  406. }
  407. else
  408. {
  409. sql += " and ( 渠道ID is null) order by 发布时间 desc";
  410. }
  411. return SqlBuilder.SqlText(sql).Paging(page,rows).Select(out total);
  412. }
  413. /// <summary>
  414. /// 首页获通知列表
  415. /// </summary>
  416. /// <param name="page"></param>
  417. /// <param name="rows"></param>
  418. /// <param name="PersonProperty"></param>
  419. /// <param name="total"></param>
  420. /// <returns></returns>
  421. public DataTable HomeGetNotice(int page, int rows, UserInfo user, out int total)
  422. {
  423. total = 0;
  424. var SqlBuilder = this.SqlBuilder;
  425. var sql = @"select 编号,标题,ID,发布时间,decode(通知类型,1,'公告','通知') as 类型,添加人 from 公告通知 where 通知类型=2 and 是否删除=0 and 是否启用=1 and instr(通知对象,:PersonProperty)>0 ";
  426. SqlBuilder.Parameters("PersonProperty", user.PersonProperty);
  427. //如果不为总部人员显示配置信息
  428. if (user.PersonProperty != 1)
  429. {
  430. sql += " and (渠道ID=:渠道ID_In or 渠道ID is null) order by 发布时间 desc";
  431. SqlBuilder.Parameters("渠道ID_In", user.CompanyID);
  432. }
  433. else
  434. {
  435. sql += " and ( 渠道ID is null) order by 发布时间 desc";
  436. }
  437. return SqlBuilder.SqlText(sql).Paging(page, rows).Select(out total);
  438. }
  439. public bool SaveNoticeConfig(string PersonId, string NoticeId,bool IsOpen)
  440. {
  441. var r = this.SqlBuilder.SqlText("select ID from 用户公告标记 where 公告ID=:NoticeId and 标记人ID=:PersonId")
  442. .Parameters("NoticeId", NoticeId)
  443. .Parameters("PersonId", PersonId)
  444. .Exists();
  445. if (r)
  446. {
  447. return this.UpdateBuilder.Column("是否显示", IsOpen?0:1)
  448. .Column("标记时间", this.DataBaseBuilder.GetDateTime)
  449. .Where("公告ID", NoticeId)
  450. .Where("标记人ID", PersonId)
  451. .Update("用户公告标记")
  452. .Execute() > 0;
  453. }
  454. else
  455. {
  456. return this.InsertBuilder.Column("是否显示", IsOpen?0:1)
  457. .Column("标记时间", this.DataBaseBuilder.GetDateTime)
  458. .Insert("用户公告标记")
  459. .Column("公告ID", NoticeId)
  460. .Column("标记人ID", PersonId)
  461. .Column("ID",Guid.NewGuid().ToString())
  462. .Execute() > 0;
  463. }
  464. }
  465. /// <summary>
  466. /// 模板转换
  467. /// </summary>
  468. /// <param name="type">1阿里短信模板,2微信消息模板</param>
  469. /// <param name="TemplateID">模板id</param>
  470. /// <param name="TempParame">模板内容</param>
  471. /// <param name="sign_name">短信签名</param>
  472. /// <returns></returns>
  473. public string ConvertWeChatTemp(int type, string TemplateID, Dictionary<string, string> TempParame, string sign_name)
  474. {
  475. var TemplateContent = "";
  476. //从数据库查询数据
  477. var _messageTemplate = new List<MessageTemplate>();
  478. try
  479. {
  480. var dataTable = this.SqlBuilder.SqlText("select * from 消息模板 t where t.模版CODE=:TemplateID and t.数据表示=1")
  481. .Parameters("TemplateID", TemplateID)
  482. .Select();
  483. if (dataTable.Rows.Count > 0)
  484. {
  485. _messageTemplate = Tools.ConvertToList<MessageTemplate>(dataTable);
  486. }
  487. TemplateContent = _messageTemplate.FirstOrDefault().内容;//替换后的模板内容
  488. foreach (var item in TempParame)
  489. {
  490. TemplateContent = TemplateContent.Replace("${" + item.Key + "}", item.Value); // 替换.Replace("被替换字符", "替换的字符")
  491. }
  492. if (type == 1)
  493. {
  494. var ParameterContents = "【" + sign_name + "】" + TemplateContent;
  495. var lenths = ParameterContents.Length;
  496. }
  497. Log.Info("组装后的消息模板:" + TemplateContent);
  498. }
  499. catch (Exception ex)
  500. {
  501. }
  502. return TemplateContent;
  503. }
  504. }
  505. }