You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NoticeService.cs 20 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. using Dapper;
  2. using Learun.DataBase.Repository;
  3. using Learun.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Text;
  8. namespace Learun.Application.OA
  9. {
  10. /// <summary>
  11. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  12. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  13. /// 创建人:陈彬彬
  14. /// 日 期:2017.04.17
  15. /// 描 述:公告管理
  16. /// </summary>
  17. public class NoticeService : RepositoryFactory
  18. {
  19. #region 获取数据
  20. /// <summary>
  21. /// 公告列表
  22. /// </summary>
  23. /// <param name="pagination">分页参数</param>
  24. /// <param name="keyword">关键词</param>
  25. /// <returns></returns>
  26. /// <summary>
  27. /// 公告列表
  28. /// </summary>
  29. /// <param name="pagination">分页参数</param>
  30. /// <param name="keyword">关键词</param>
  31. /// <returns></returns>
  32. public IEnumerable<NewsEntity> GetPageList(Pagination pagination, string keyword)
  33. {
  34. try
  35. {
  36. var user = LoginUserInfo.Get();
  37. var strSql = new StringBuilder();
  38. strSql.Append("SELECT * FROM LR_OA_News t WHERE t.F_TypeId = 2 and F_Status<>'-1' and F_DeleteMark=0");
  39. if (!string.IsNullOrEmpty(keyword))
  40. {
  41. strSql.Append(" AND F_FullHead like @keyword");
  42. }
  43. if (user.Description != "超级管理员")
  44. {
  45. strSql.Append(" AND F_CreateUserName ='" + user.realName + "'");
  46. }
  47. return this.BaseRepository().FindList<NewsEntity>(strSql.ToString(), new { keyword = "%" + keyword + "%" }, pagination);
  48. }
  49. catch (Exception ex)
  50. {
  51. if (ex is ExceptionEx)
  52. {
  53. throw;
  54. }
  55. else
  56. {
  57. throw ExceptionEx.ThrowServiceException(ex);
  58. }
  59. }
  60. }
  61. /// <summary>
  62. /// 公告列表
  63. /// </summary>
  64. /// <param name="pagination">分页参数</param>
  65. /// <param name="keyword">关键词</param>
  66. /// <returns></returns>
  67. public IEnumerable<NewsEntity> GetPageLists(Pagination pagination, string keyword)
  68. {
  69. try
  70. {
  71. var user = LoginUserInfo.Get();
  72. var strSql = new StringBuilder();
  73. strSql.Append("SELECT * FROM LR_OA_News t WHERE t.F_TypeId = 2 and F_Status<>'-1' and F_DeleteMark=0");
  74. var queryParam = keyword.ToJObject();
  75. // 虚拟参数
  76. var dp = new DynamicParameters(new { });
  77. if (!queryParam["F_FullHead"].IsEmpty())
  78. {
  79. dp.Add("F_FullHead", "%" + queryParam["F_FullHead"].ToString() + "%", DbType.String);
  80. strSql.Append(" AND t.F_FullHead Like @F_FullHead ");
  81. }
  82. if (!queryParam["F_CreateUserId"].IsEmpty())
  83. {
  84. dp.Add("F_CreateUserId", queryParam["F_CreateUserId"].ToString(), DbType.String);
  85. strSql.Append(" AND t.F_CreateUserId = @F_CreateUserId ");
  86. }
  87. if (!queryParam["F_CategoryId"].IsEmpty())
  88. {
  89. dp.Add("F_CategoryId", queryParam["F_CategoryId"].ToString(), DbType.String);
  90. strSql.Append(" AND t.F_CategoryId = @F_CategoryId ");
  91. }
  92. if (!queryParam["F_SourceName"].IsEmpty())
  93. {
  94. dp.Add("F_SourceName", queryParam["F_SourceName"].ToString(), DbType.String);
  95. strSql.Append(" AND t.F_SourceName Like @F_SourceName ");
  96. }
  97. //if (!string.IsNullOrEmpty(keyword))
  98. //{
  99. // strSql.Append(" AND F_FullHead like @keyword");
  100. //}
  101. if (user.Description != "超级管理员")
  102. {
  103. strSql.Append(" AND F_CreateUserName ='" + user.realName + "'");
  104. }
  105. return this.BaseRepository().FindList<NewsEntity>(strSql.ToString(), dp, pagination);
  106. }
  107. catch (Exception ex)
  108. {
  109. if (ex is ExceptionEx)
  110. {
  111. throw;
  112. }
  113. else
  114. {
  115. throw ExceptionEx.ThrowServiceException(ex);
  116. }
  117. }
  118. }
  119. public IEnumerable<NewsEntity> GetPageListRevert(Pagination pagination, string keyword)
  120. {
  121. try
  122. {
  123. var strSql = new StringBuilder();
  124. strSql.Append("SELECT * FROM LR_OA_News t WHERE t.F_TypeId = 2 and F_Status='-1' ");
  125. if (!string.IsNullOrEmpty(keyword))
  126. {
  127. strSql.Append(" AND F_FullHead like @keyword");
  128. }
  129. return this.BaseRepository().FindList<NewsEntity>(strSql.ToString(), new { keyword = "%" + keyword + "%" }, pagination);
  130. }
  131. catch (Exception ex)
  132. {
  133. if (ex is ExceptionEx)
  134. {
  135. throw;
  136. }
  137. else
  138. {
  139. throw ExceptionEx.ThrowServiceException(ex);
  140. }
  141. }
  142. }
  143. /// <summary>
  144. /// 新闻公告实体
  145. /// </summary>
  146. /// <param name="keyValue">主键值</param>
  147. /// <returns></returns>
  148. public NewsEntity GetEntity(string keyValue)
  149. {
  150. try
  151. {
  152. return this.BaseRepository().FindEntity<NewsEntity>(keyValue);
  153. }
  154. catch (Exception ex)
  155. {
  156. if (ex is ExceptionEx)
  157. {
  158. throw;
  159. }
  160. else
  161. {
  162. throw ExceptionEx.ThrowServiceException(ex);
  163. }
  164. }
  165. }
  166. #endregion
  167. #region 提交数据
  168. /// <summary>
  169. /// 删除
  170. /// </summary>
  171. /// <param name="keyValue">主键</param>
  172. public void DeleteEntity(string keyValue)
  173. {
  174. var db = this.BaseRepository().BeginTrans();
  175. try
  176. {
  177. var list = keyValue.Split(',');
  178. foreach (var item in list)
  179. {
  180. var entity = db.FindEntity<NewsEntity>(x => x.F_NewsId == item);
  181. if (entity != null)
  182. {
  183. db.Delete(entity);
  184. }
  185. }
  186. db.Commit();
  187. }
  188. catch (Exception ex)
  189. {
  190. db.Rollback();
  191. if (ex is ExceptionEx)
  192. {
  193. throw;
  194. }
  195. else
  196. {
  197. throw ExceptionEx.ThrowServiceException(ex);
  198. }
  199. }
  200. }
  201. public void RecycleForm(string keyValue, string status)
  202. {
  203. var db = this.BaseRepository().BeginTrans();
  204. try
  205. {
  206. var list = keyValue.Split(',');
  207. foreach (var item in list)
  208. {
  209. var entity = db.FindEntity<NewsEntity>(x => x.F_NewsId == item);
  210. if (entity != null)
  211. {
  212. entity.F_Status = status;
  213. db.Update(entity);
  214. }
  215. }
  216. db.Commit();
  217. }
  218. catch (Exception ex)
  219. {
  220. db.Rollback();
  221. if (ex is ExceptionEx)
  222. {
  223. throw;
  224. }
  225. else
  226. {
  227. throw ExceptionEx.ThrowServiceException(ex);
  228. }
  229. }
  230. }
  231. /// <summary>
  232. /// 保存(新增、修改)
  233. /// </summary>
  234. /// <param name="keyValue">主键值</param>
  235. /// <param name="newsEntity">新闻公告实体</param>
  236. /// <returns></returns>
  237. public void SaveEntity(string keyValue, NewsEntity newsEntity)
  238. {
  239. try
  240. {
  241. newsEntity.F_TypeId = 2;
  242. if (!string.IsNullOrEmpty(keyValue))
  243. {
  244. newsEntity.Modify(keyValue);
  245. this.BaseRepository().Update(newsEntity);
  246. }
  247. else
  248. {
  249. newsEntity.Create();
  250. this.BaseRepository().Insert(newsEntity);
  251. }
  252. }
  253. catch (Exception ex)
  254. {
  255. if (ex is ExceptionEx)
  256. {
  257. throw;
  258. }
  259. else
  260. {
  261. throw ExceptionEx.ThrowServiceException(ex);
  262. }
  263. }
  264. }
  265. #endregion
  266. #region 扩展数据
  267. /// <summary>
  268. /// 公告列表
  269. /// </summary>
  270. /// <param name="keyword">关键词</param>
  271. /// <returns></returns>
  272. public IEnumerable<NewsEntity> GetList(string keyword, string categoryId = null)
  273. {
  274. try
  275. {
  276. var userinfo = LoginUserInfo.Get();
  277. var userId = userinfo.userId;
  278. var deptId = userinfo.departmentId;
  279. var postIds = userinfo.postIds;
  280. var strSql = new StringBuilder();
  281. strSql.Append("SELECT t.*,r.RNewsId,r.RTime FROM LR_OA_News t ");
  282. strSql.Append(" left join LR_OA_NewsRead r on t.F_NewsId = r.NewsId and r.RUserId=@userId ");
  283. strSql.Append(" WHERE t.F_TypeId = 2 and t.F_DeleteMark=0 and t.F_EnabledMark=1 ");
  284. strSql.Append($@" and (
  285. ((t.F_SendDeptId is null or len(t.F_SendDeptId)=0) and (t.F_SendPostId is null or len(t.F_SendPostId)=0))
  286. ");
  287. if (!string.IsNullOrEmpty(deptId))
  288. {
  289. strSql.Append($" or (t.F_SendDeptId is not null and t.F_SendDeptId like '%{deptId}%')");
  290. }
  291. if (!string.IsNullOrEmpty(postIds))
  292. {
  293. strSql.Append(" or (t.F_SendPostId is not null and ");
  294. if (postIds.Contains(","))
  295. {
  296. string postidSql = " (";
  297. foreach (var postId in postIds)
  298. {
  299. postidSql += $" t.F_SendPostId like '%{postId}%' or";
  300. }
  301. postidSql = postidSql.Substring(0, postidSql.LastIndexOf("or")) + ")";
  302. strSql.Append(postidSql);
  303. }
  304. else
  305. {
  306. strSql.Append($" t.F_SendPostId like '%{postIds}%'");
  307. }
  308. strSql.Append(")");
  309. }
  310. strSql.Append(") ");
  311. if (!string.IsNullOrEmpty(categoryId))
  312. {
  313. strSql.Append($" AND t.F_CategoryId = '{categoryId}'");
  314. }
  315. if (!string.IsNullOrEmpty(keyword))
  316. {
  317. strSql.Append(" AND t.F_FullHead like @keyword");
  318. }
  319. strSql.Append(" ORDER BY t.F_ReleaseTime DESC ");
  320. return this.BaseRepository().FindList<NewsEntity>(strSql.ToString(), new { keyword = "%" + keyword + "%", userId = userId });
  321. }
  322. catch (Exception ex)
  323. {
  324. if (ex is ExceptionEx)
  325. {
  326. throw;
  327. }
  328. else
  329. {
  330. throw ExceptionEx.ThrowServiceException(ex);
  331. }
  332. }
  333. }
  334. /// <summary>
  335. /// 公告列表
  336. /// </summary>
  337. /// <param name="keyword">关键词</param>
  338. /// <returns></returns>
  339. public IEnumerable<NewsEntity> GetLists(string queryJson, string categoryId = null)
  340. {
  341. try
  342. {
  343. var userinfo = LoginUserInfo.Get();
  344. var userId = userinfo.userId;
  345. var deptId = userinfo.departmentId;
  346. var postIds = userinfo.postIds;
  347. var strSql = new StringBuilder();
  348. strSql.Append("SELECT t.*,r.RNewsId,r.RTime FROM LR_OA_News t ");
  349. strSql.Append($" left join LR_OA_NewsRead r on t.F_NewsId = r.NewsId and r.RUserId='{userId}' ");
  350. strSql.Append(" WHERE t.F_TypeId = 2 and t.F_DeleteMark=0 and t.F_EnabledMark=1 ");
  351. strSql.Append($@" and (
  352. ((t.F_SendDeptId is null or len(t.F_SendDeptId)=0) and (t.F_SendPostId is null or len(t.F_SendPostId)=0))
  353. ");
  354. var queryParam = queryJson.ToJObject();
  355. // 虚拟参数
  356. var dp = new DynamicParameters(new { });
  357. if (!string.IsNullOrEmpty(deptId))
  358. {
  359. strSql.Append($" or (t.F_SendDeptId is not null and t.F_SendDeptId like '%{deptId}%')");
  360. }
  361. if (!string.IsNullOrEmpty(postIds))
  362. {
  363. strSql.Append(" or (t.F_SendPostId is not null and ");
  364. if (postIds.Contains(","))
  365. {
  366. string postidSql = " (";
  367. foreach (var postId in postIds)
  368. {
  369. postidSql += $" t.F_SendPostId like '%{postId}%' or";
  370. }
  371. postidSql = postidSql.Substring(0, postidSql.LastIndexOf("or")) + ")";
  372. strSql.Append(postidSql);
  373. }
  374. else
  375. {
  376. strSql.Append($" t.F_SendPostId like '%{postIds}%'");
  377. }
  378. strSql.Append(")");
  379. }
  380. strSql.Append(") ");
  381. if (!queryParam["categoryId"].IsEmpty())
  382. {
  383. strSql.Append($" AND t.F_CategoryId = '{queryParam["categoryId"]}'");
  384. }
  385. //if (!string.IsNullOrEmpty(keyword))
  386. //{
  387. // strSql.Append(" AND t.F_FullHead like @keyword");
  388. //}
  389. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  390. {
  391. dp.Add("startTime", queryParam["StartTime"].ToDate(), DbType.DateTime);
  392. dp.Add("endTime", queryParam["EndTime"].ToDate(), DbType.DateTime);
  393. strSql.Append(" AND ( t.F_ReleaseTime >= @startTime AND t.F_ReleaseTime <= @endTime ) ");
  394. }
  395. if (!queryParam["F_FullHead"].IsEmpty())
  396. {
  397. dp.Add("F_FullHead", "%" + queryParam["F_FullHead"].ToString() + "%", DbType.String);
  398. strSql.Append(" AND t.F_FullHead like @F_FullHead");
  399. }
  400. if (!queryParam["F_CreateUserId"].IsEmpty())
  401. {
  402. dp.Add("F_CreateUserId", queryParam["F_CreateUserId"].ToString(), DbType.String);
  403. strSql.Append(" AND t.F_CreateUserId = @F_CreateUserId");
  404. }
  405. if (!queryParam["F_SourceName"].IsEmpty())
  406. {
  407. dp.Add("F_SourceName", queryParam["F_SourceName"].ToString(), DbType.String);
  408. strSql.Append(" AND t.F_SourceName = @F_SourceName");
  409. }
  410. strSql.Append(" ORDER BY t.F_ReleaseTime DESC ");
  411. return this.BaseRepository().FindList<NewsEntity>(strSql.ToString(), dp);
  412. }
  413. catch (Exception ex)
  414. {
  415. if (ex is ExceptionEx)
  416. {
  417. throw;
  418. }
  419. else
  420. {
  421. throw ExceptionEx.ThrowServiceException(ex);
  422. }
  423. }
  424. }
  425. /// <summary>
  426. /// 公告列表
  427. /// </summary>
  428. /// <param name="keyword">关键词</param>
  429. /// <returns></returns>
  430. public IEnumerable<NewsEntity> GetListApp(Pagination pagination, string queryJson)
  431. {
  432. try
  433. {
  434. var userinfo = LoginUserInfo.Get();
  435. var userId = userinfo.userId;
  436. var deptId = userinfo.departmentId;
  437. var postIds = userinfo.postIds;
  438. var strSql = new StringBuilder();
  439. var queryParam = queryJson.ToJObject();
  440. // 虚拟参数
  441. strSql.Append("SELECT t.*,r.RNewsId,r.RTime FROM LR_OA_News t ");
  442. strSql.Append(" left join LR_OA_NewsRead r on t.F_NewsId = r.NewsId and r.RUserId='" + userId + "' ");
  443. strSql.Append(" WHERE t.F_TypeId = 2 and t.F_DeleteMark=0 and t.F_EnabledMark=1 and t.F_Status = 2 ");
  444. strSql.Append($@" and (
  445. ((t.F_SendDeptId is null or len(t.F_SendDeptId)=0) and (t.F_SendPostId is null or len(t.F_SendPostId)=0))
  446. ");
  447. var dp = new DynamicParameters(new { });
  448. if (!string.IsNullOrEmpty(deptId))
  449. {
  450. strSql.Append($" or (t.F_SendDeptId is not null and t.F_SendDeptId like '%{deptId}%')");
  451. }
  452. if (!string.IsNullOrEmpty(postIds))
  453. {
  454. strSql.Append(" or (t.F_SendPostId is not null and ");
  455. if (postIds.Contains(","))
  456. {
  457. string postidSql = " (";
  458. foreach (var postId in postIds)
  459. {
  460. postidSql += $" t.F_SendPostId like '%{postId}%' or";
  461. }
  462. postidSql = postidSql.Substring(0, postidSql.LastIndexOf("or")) + ")";
  463. strSql.Append(postidSql);
  464. }
  465. else
  466. {
  467. strSql.Append($" t.F_SendPostId like '%{postIds}%'");
  468. }
  469. strSql.Append(")");
  470. }
  471. strSql.Append(") ");
  472. if (!queryParam["categoryId"].IsEmpty())
  473. {
  474. //strSql.Append($" AND t.F_CategoryId = '{categoryId}'");
  475. dp.Add("categoryId", queryParam["categoryId"].ToString(), DbType.String);
  476. strSql.Append(" AND t.F_CategoryId = @categoryId ");
  477. }
  478. if (!queryParam["FullHead"].IsEmpty())
  479. {
  480. //strSql.Append(" AND t.F_FullHead like @keyword");
  481. dp.Add("FullHead", "%" + queryParam["FullHead"].ToString() + "%", DbType.String);
  482. strSql.Append(" AND t.F_FullHead like @FullHead ");
  483. }
  484. //strSql.Append(" ORDER BY t.F_ReleaseTime DESC ");
  485. return this.BaseRepository().FindList<NewsEntity>(strSql.ToString(), dp, pagination);
  486. }
  487. catch (Exception ex)
  488. {
  489. if (ex is ExceptionEx)
  490. {
  491. throw;
  492. }
  493. else
  494. {
  495. throw ExceptionEx.ThrowServiceException(ex);
  496. }
  497. }
  498. }
  499. #endregion
  500. public void ChangeStatusById(string keyValue, int status, string processId)
  501. {
  502. try
  503. {
  504. BaseRepository().ExecuteBySql($"UPDATE dbo.LR_OA_News SET F_Status='{status}',F_ProgressId='{processId}' WHERE F_NewsId='{keyValue}'", null);
  505. }
  506. catch (Exception ex)
  507. {
  508. throw ExceptionEx.ThrowServiceException(ex);
  509. }
  510. }
  511. public NewsEntity GetEntityByProcessId(string processId)
  512. {
  513. try
  514. {
  515. return this.BaseRepository().FindEntity<NewsEntity>(t => t.F_ProgressId == processId);
  516. }
  517. catch (Exception ex)
  518. {
  519. if (ex is ExceptionEx)
  520. {
  521. throw;
  522. }
  523. else
  524. {
  525. throw ExceptionEx.ThrowServiceException(ex);
  526. }
  527. }
  528. }
  529. }
  530. }