ConvergenceMediaController.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
  1. using DataSharing.FwDataExchange;
  2. using DataSharing.RawData;
  3. using DataSharing.Share.Dtos;
  4. using DataSharing.Share.Dtos.HotlineSetting;
  5. using DataSharing.Share.Dtos.YiBin.ConvergenceMedia;
  6. using DataSharing.Share.Enums;
  7. using DataSharing.YiBin.ConvergenceMedia;
  8. using DotNetCore.CAP;
  9. using Hotline.Share.Dtos.File;
  10. using Hotline.Share.Dtos.Order;
  11. using MapsterMapper;
  12. using MediatR;
  13. using Microsoft.AspNetCore.Authorization;
  14. using Microsoft.AspNetCore.Mvc;
  15. using SqlSugar;
  16. using XF.Domain.Filters;
  17. using XF.Domain.Repository;
  18. namespace DataSharing.Host.Controllers.YiBin
  19. {
  20. /// <summary>
  21. /// 融媒体、I宜宾
  22. /// </summary>
  23. public class ConvergenceMediaController : BaseController
  24. {
  25. #region 注入
  26. private readonly IMapper _mapper;
  27. private readonly IMediator _mediator;
  28. private readonly ICapPublisher _capPublisher;
  29. private readonly IChannelConfigurationManager _channelConfigurationManager;
  30. private readonly IRepository<DsOrder> _dataOrderRepository;
  31. private readonly IRepository<DsOrderWorkFlow> _dataOrderWorkFlowRepository;
  32. private readonly IRepository<DsReceiveMediaData> _dsReceiveMediaDataRepository;
  33. private readonly IRepository<DsBulletin> _bulletinRepository;
  34. private readonly FwClient _fwClient;
  35. private readonly IDsUserTokenInfoService _dsUserTokenInfoService;
  36. /// <summary>
  37. ///
  38. /// </summary>
  39. /// <param name="mapper"></param>
  40. /// <param name="mediator"></param>
  41. /// <param name="capPublisher"></param>
  42. /// <param name="channelConfigurationManager"></param>
  43. /// <param name="dataOrderRepository"></param>
  44. /// <param name="dataOrderWorkFlowRepository"></param>
  45. /// <param name="dsReceiveMediaDataRepository"></param>
  46. /// <param name="bulletinRepository"></param>
  47. /// <param name="fwClient"></param>
  48. /// <param name="dsUserTokenInfoService"></param>
  49. public ConvergenceMediaController(IMapper mapper, IMediator mediator,
  50. ICapPublisher capPublisher,
  51. IChannelConfigurationManager channelConfigurationManager,
  52. IRepository<DsOrder> dataOrderRepository,
  53. IRepository<DsOrderWorkFlow> dataOrderWorkFlowRepository,
  54. IRepository<DsReceiveMediaData> dsReceiveMediaDataRepository,
  55. IRepository<DsBulletin> bulletinRepository,
  56. FwClient fwClient,
  57. IDsUserTokenInfoService dsUserTokenInfoService)
  58. {
  59. _mapper = mapper;
  60. _mediator = mediator;
  61. _capPublisher = capPublisher;
  62. _channelConfigurationManager = channelConfigurationManager;
  63. _dataOrderRepository = dataOrderRepository;
  64. _dataOrderWorkFlowRepository = dataOrderWorkFlowRepository;
  65. _dsReceiveMediaDataRepository = dsReceiveMediaDataRepository;
  66. _bulletinRepository = bulletinRepository;
  67. _fwClient = fwClient;
  68. _dsUserTokenInfoService = dsUserTokenInfoService;
  69. }
  70. #endregion
  71. /// <summary>
  72. /// 2.1融媒体写信
  73. /// </summary>
  74. /// <param name="mediaDataReceiveDto"></param>
  75. /// <returns></returns>
  76. [HttpPost("WriteOrder")]
  77. [AllowAnonymous]
  78. public async Task<OpenResponse> WriteOrder([FromForm] MediaDataReceiveDto mediaDataReceiveDto)
  79. {
  80. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(mediaDataReceiveDto.Code, HttpContext.RequestAborted);
  81. if (accountDto is null || accountDto.IsCheckAccount == false)
  82. {
  83. List<WriteOrderResponseDto> responseDtos = new()
  84. {
  85. new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = "密钥错误", Code = "-900" }
  86. };
  87. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<WriteOrderResponseDto>>.Failed(responseDtos, "0", "密钥错误"));
  88. }
  89. //验证数据
  90. string strResult = mediaDataReceiveDto.Validate();
  91. if (!string.IsNullOrEmpty(strResult))
  92. {
  93. List<WriteOrderResponseDto> responseDtos = new()
  94. {
  95. new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = strResult, Code = "0" }
  96. };
  97. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<WriteOrderResponseDto>>.Failed(responseDtos, "0", description: strResult));
  98. }
  99. //写入原始数据
  100. DsReceiveMediaData dsReceiveMediaData = new()
  101. {
  102. ServiceInterface = "WriteOrder",
  103. PlatformsName = accountDto.PlatformSourceName,
  104. ReceiveData = System.Text.Json.JsonSerializer.Serialize(mediaDataReceiveDto)
  105. };
  106. dsReceiveMediaData.Id = await _dsReceiveMediaDataRepository.AddAsync(dsReceiveMediaData, HttpContext.RequestAborted);
  107. AddOrderDto data = new()
  108. {
  109. Title = mediaDataReceiveDto.Title,
  110. FromName = mediaDataReceiveDto.LinkName,
  111. Contact = mediaDataReceiveDto.Mobile,
  112. FullAddress = mediaDataReceiveDto.Address,
  113. Content = mediaDataReceiveDto.Content,
  114. IsSecret = mediaDataReceiveDto.Secrecy == 0 ? false : true,
  115. Source = (Hotline.Share.Enums.Order.ESource)Enum.Parse(typeof(Hotline.Share.Enums.Order.ESource), accountDto.PlatformSource),
  116. FromGender = mediaDataReceiveDto.Gender switch
  117. {
  118. "1" => Hotline.Share.Enums.Order.EGender.Male,
  119. "2" => Hotline.Share.Enums.Order.EGender.Female,
  120. _ => Hotline.Share.Enums.Order.EGender.Unknown,
  121. },
  122. IdentityType = Hotline.Share.Enums.Order.EIdentityType.Citizen,
  123. Transpond = false,
  124. IsEnforcementOrder = false,
  125. ExternalId = Guid.NewGuid().ToString()
  126. };
  127. switch (accountDto.PlatformSource)
  128. {
  129. case "ConvergenceMedia":
  130. data.SourceChannel = "宜宾融媒体";
  131. data.SourceChannelCode = "YBRMT";
  132. break;
  133. case "IYIBIN":
  134. data.SourceChannel = "i宜宾";
  135. data.SourceChannelCode = "IYB";
  136. break;
  137. default:
  138. break;
  139. }
  140. switch (mediaDataReceiveDto.PurTypeID)
  141. {
  142. case 17:
  143. data.AcceptType = "咨询";
  144. data.AcceptTypeCode = "10";
  145. break;
  146. case 18:
  147. data.AcceptType = "举报";
  148. data.AcceptTypeCode = "30";
  149. break;
  150. case 19:
  151. data.AcceptType = "投诉";
  152. data.AcceptTypeCode = "35";
  153. break;
  154. case 20:
  155. data.AcceptType = "求助";
  156. data.AcceptTypeCode = "20";
  157. break;
  158. case 21:
  159. data.AcceptType = "建议";
  160. data.AcceptTypeCode = "15";
  161. break;
  162. case 25:
  163. data.AcceptType = "其他";
  164. data.AcceptTypeCode = "40";
  165. break;
  166. default:
  167. data.AcceptType = "其他";
  168. data.AcceptTypeCode = "40";
  169. break;
  170. }
  171. string areaName = "";
  172. switch (mediaDataReceiveDto.AreaID)
  173. {
  174. case 2:
  175. data.AreaCode = "511504"; areaName = "叙州区";
  176. break;
  177. case 3:
  178. data.AreaCode = "511503"; areaName = "翠屏区";
  179. break;
  180. case 4:
  181. data.AreaCode = "511504"; areaName = "南溪区";
  182. break;
  183. case 5:
  184. data.AreaCode = "511524"; areaName = "长宁县";
  185. break;
  186. case 6:
  187. data.AreaCode = "511528"; areaName = "兴文县";
  188. break;
  189. case 7:
  190. data.AreaCode = "511526"; areaName = "珙县";
  191. break;
  192. case 8:
  193. data.AreaCode = "511525"; areaName = "高县";
  194. break;
  195. case 9:
  196. data.AreaCode = "511527"; areaName = "筠连县";
  197. break;
  198. case 10:
  199. data.AreaCode = "511523"; areaName = "江安县";
  200. break;
  201. case 11:
  202. data.AreaCode = "511529"; areaName = "屏山县";
  203. break;
  204. case 12:
  205. data.AreaCode = "511504"; areaName = "叙州区";
  206. break;
  207. default:
  208. break;
  209. }
  210. data.Address = "四川省宜宾市" + areaName;
  211. //调用工单创建接口
  212. var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(data));
  213. if (result != null && result.code == 0)
  214. {
  215. dsReceiveMediaData.ExternalId = result.result.id;
  216. dsReceiveMediaData.OrderCode = result.result.no;
  217. await _dsReceiveMediaDataRepository.UpdateAsync(dsReceiveMediaData, HttpContext.RequestAborted);
  218. List<WriteOrderResponseDto> responseDtos = new()
  219. {
  220. new WriteOrderResponseDto() { AcceptCode = result.result.no, AcceptPwd = result.result.password, msg = "写信成功", Code = "1" }
  221. };
  222. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<WriteOrderResponseDto>>.Success(responseDtos, "您已成功提交数据!"));
  223. }
  224. else
  225. {
  226. List<WriteOrderResponseDto> responseDtos = new()
  227. {
  228. new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = "接口调用失败", Code = "0" }
  229. };
  230. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<WriteOrderResponseDto>>.Failed(responseDtos, "0", description: "接口调用失败!"));
  231. }
  232. }
  233. /// <summary>
  234. /// 2.2工单列表
  235. /// </summary>
  236. /// <param name="dto"></param>
  237. /// <returns></returns>
  238. [HttpPost("GetOrderByList")]
  239. [AllowAnonymous]
  240. public async Task<OpenResponse> GetOrderByList([FromForm] GetOrderMediaReceiveDto dto)
  241. {
  242. //密钥验证
  243. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.Code, HttpContext.RequestAborted);
  244. if (accountDto is null || accountDto.IsCheckAccount == false)
  245. {
  246. List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
  247. new()
  248. {
  249. msg = "密钥错误",
  250. code = "-900",
  251. data = ""
  252. } };
  253. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
  254. }
  255. //数据处理
  256. string AcceptTypeCode = "";
  257. AcceptTypeCode = dto.PurTypeID switch
  258. {
  259. 17 => "10",
  260. 18 => "30",
  261. 19 => "35",
  262. 20 => "20",
  263. 21 => "15",
  264. 25 => "40",
  265. _ => "",
  266. };
  267. //数据查询
  268. RefAsync<int> total = 0;
  269. var items = await _dataOrderRepository
  270. .Queryable()
  271. //.Where(p => p.Source == Hotline.Share.Enums.Order.ESource.ConvergenceMedia.ToString())
  272. .Where(p => p.Source == accountDto.PlatformSource)
  273. .WhereIF(!string.IsNullOrEmpty(dto.AcceptCode), p => p.OrderNo.Contains(dto.AcceptCode))
  274. .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
  275. .WhereIF(!string.IsNullOrEmpty(dto.Mobile), p => p.Contact.Contains(dto.Mobile))
  276. .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.CaseTypeCode == AcceptTypeCode)
  277. .WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CaseDate >= Convert.ToDateTime(dto.StartDate))
  278. .WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CaseDate < Convert.ToDateTime(dto.EndDate).AddDays(1))
  279. .Select(it => new
  280. {
  281. FlowID = it.Id,
  282. RowID = SqlFunc.RowNumber($"{it.CaseDate} desc "),
  283. Code = it.OrderNo,
  284. it.Title,
  285. AddDate = it.CaseDate,
  286. FromName = it.CaseSource,
  287. PurTypeName = it.CaseType,
  288. ResultState = it.HandleState
  289. })
  290. .ToPageListAsync(dto.CurrentPage, dto.PageSize, total);
  291. //计算总页数
  292. int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
  293. List<GetOrderMediaDataDto> returnData = new()
  294. {
  295. //处理返回
  296. new()
  297. {
  298. PageCount = nPageCount,
  299. data = _mapper.Map<IReadOnlyList<GetOrderMediaDataListDto>>(items)
  300. } };
  301. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetOrderMediaDataDto>>.Success(returnData, "成功"));
  302. }
  303. /// <summary>
  304. /// 2.3 工单查询
  305. /// </summary>
  306. /// <returns></returns>
  307. [HttpPost("GetOrderDetail")]
  308. [AllowAnonymous]
  309. public async Task<OpenResponse> GetOrderDetail([FromForm] MediaOrderDetailReceiveDto dto)
  310. {
  311. //验证密钥
  312. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.Code, HttpContext.RequestAborted);
  313. if (accountDto is null || accountDto.IsCheckAccount == false)
  314. {
  315. List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
  316. new()
  317. {
  318. msg = "密钥错误",
  319. code = "-900",
  320. data = ""
  321. } };
  322. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
  323. }
  324. //验证数据
  325. string strResult = dto.Validate();
  326. if (!string.IsNullOrEmpty(strResult))
  327. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo(strResult), "0", "失败"));
  328. //查询数据
  329. var items = await _dataOrderRepository
  330. .Queryable()
  331. .Where(p => p.OrderNo == dto.AcceptCode)
  332. .Where(p => p.Password == dto.AcceptPwd)
  333. .Where(p => p.Source == accountDto.PlatformSource)
  334. .Select(it => new
  335. {
  336. FlowID = it.Id,
  337. FlowCode = it.OrderNo,
  338. FlowTitle = it.Title,
  339. FlowFromName = it.CaseSource,
  340. FlowPurTypeName = it.CaseType,
  341. FlowConTypeName = it.HotspotName,
  342. FlowAddDate = it.CaseDate,
  343. FlowLKName = it.FromName,
  344. FlowBMName = it.ActualHandleOrgName,
  345. FlowRSFlagName = it.HandleState,
  346. FlowContent = it.Content,
  347. FlowResult = it.ActualOpinion,
  348. })
  349. .ToListAsync();
  350. if (items == null || items.Count == 0)
  351. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo("编号、密码错误!"), "0", "失败"));
  352. else
  353. return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<MediaOrderDetailDataDto>>.Success(_mapper.Map<IReadOnlyList<MediaOrderDetailDataDto>>(items), "成功"));
  354. }
  355. /// <summary>
  356. /// 2.4 今日受理分类统计
  357. /// </summary>
  358. /// <param name="Code"></param>
  359. /// <returns></returns>
  360. [HttpPost("GetPurTypeReport")]
  361. [AllowAnonymous]
  362. public async Task<OpenResponse> GetPurTypeReport([FromForm] string Code)
  363. {
  364. //验证密钥
  365. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(Code, HttpContext.RequestAborted);
  366. if (accountDto is null || accountDto.IsCheckAccount == false)
  367. {
  368. List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
  369. new()
  370. {
  371. msg = "密钥错误",
  372. code = "-900",
  373. data = ""
  374. } };
  375. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
  376. }
  377. //数据查询
  378. var list = await _dataOrderRepository.Queryable()
  379. .Where(p => p.CaseDate >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))
  380. .Where(p => p.CaseDate <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")))
  381. .Select(it => new
  382. {
  383. it.CaseType,
  384. it.CaseTypeCode
  385. })
  386. .MergeTable()//将查询出来的结果合并成一个新表
  387. .GroupBy(it => new { it.CaseType, it.CaseTypeCode })//对新表进行分组
  388. .Select(it => new
  389. {
  390. PurTypeName = it.CaseType,
  391. Count = SqlFunc.AggregateCount(it.CaseTypeCode)
  392. })
  393. .ToListAsync();
  394. var listData = _mapper.Map<List<GetPurTypeReportDataDto>>(list);
  395. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetPurTypeReportDataDto>>.Success(listData, "成功"));
  396. }
  397. /// <summary>
  398. /// 2.5 答复公开
  399. /// </summary>
  400. /// <param name="dto"></param>
  401. /// <returns></returns>
  402. [HttpPost("GetOrderByListOpen")]
  403. [AllowAnonymous]
  404. public async Task<OpenResponse> GetOrderByListOpen([FromForm] GetOrderMediaReceiveOpenDto dto)
  405. {
  406. //密钥验证
  407. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.Code, HttpContext.RequestAborted);
  408. if (accountDto is null || accountDto.IsCheckAccount == false)
  409. {
  410. List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
  411. new()
  412. {
  413. msg = "密钥错误",
  414. code = "-900",
  415. data = ""
  416. } };
  417. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
  418. }
  419. //数据处理
  420. string AcceptTypeCode = "";
  421. AcceptTypeCode = (object)dto.PurTypeID switch
  422. {
  423. 17 => "10",
  424. 18 => "30",
  425. 19 => "35",
  426. 20 => "20",
  427. 21 => "15",
  428. 25 => "40",
  429. _ => "",
  430. };
  431. //查询数据
  432. RefAsync<int> total = 0;
  433. var items = await _dataOrderRepository
  434. .Queryable()
  435. .Where(p => p.IsPublish == EDsPublishState.Open)
  436. .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
  437. .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.CaseTypeCode == AcceptTypeCode)
  438. .WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CaseDate >= Convert.ToDateTime(dto.StartDate).AddDays(-30))
  439. .WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CaseDate < Convert.ToDateTime(dto.EndDate).AddDays(1))
  440. .Select(it => new
  441. {
  442. FlowID = it.Id,
  443. RowID = SqlFunc.RowNumber($"{it.CaseDate} desc "),
  444. Code = it.OrderNo,
  445. it.Title,
  446. AddDate = it.CaseDate,
  447. FromName = it.CaseSource,
  448. PurTypeName = it.CaseType,
  449. ResultState = it.HandleState
  450. })
  451. .ToPageListAsync(dto.CurrentPage, dto.PageSize, total);
  452. //计算总页数
  453. int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
  454. //返回数据处理
  455. List<GetOrderMediaDataDto> dataDto = new()
  456. {
  457. new(){ PageCount = nPageCount,
  458. data = _mapper.Map<IReadOnlyList<GetOrderMediaDataListDto>>(items) }
  459. };
  460. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetOrderMediaDataDto>>.Success(dataDto, "成功"));
  461. }
  462. /// <summary>
  463. /// 2.6 办理明细
  464. /// </summary>
  465. /// <param name="dto"></param>
  466. /// <returns></returns>
  467. [HttpPost("GetOrderByRun")]
  468. [AllowAnonymous]
  469. public async Task<OpenResponse> GetOrderByRun([FromForm] MediaOrderDetailReceiveDto dto)
  470. {
  471. //密钥验证
  472. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.Code, HttpContext.RequestAborted);
  473. if (accountDto is null || accountDto.IsCheckAccount == false)
  474. {
  475. List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
  476. new()
  477. {
  478. msg = "密钥错误",
  479. code = "-900",
  480. data = ""
  481. } };
  482. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
  483. }
  484. //验证数据
  485. string strResult = dto.Validate();
  486. if (!string.IsNullOrEmpty(strResult))
  487. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo(strResult), "0", "失败"));
  488. //验证信件是否存在
  489. var data = await _dataOrderRepository.GetAsync(p => p.OrderNo == dto.AcceptCode && p.Password == dto.AcceptPwd && p.Source == accountDto.PlatformSource, HttpContext.RequestAborted);
  490. if (data == null)
  491. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ReturnData>>.Failed(ReturnData.ReturnDataInfo("编号、密码错误!"), "0", "失败"));
  492. //数据查询
  493. var list = await _dataOrderWorkFlowRepository.Queryable()
  494. .Where(p => p.OrderId == data.OrderId)
  495. .Where(p => p.WorkflowId == data.WorkflowId)
  496. .Select(it => new
  497. {
  498. BMName = it.HandlerOrgName,
  499. TTime = it.StepExpiredTime,
  500. DisposeDate = it.HandleTime
  501. })
  502. .ToListAsync();
  503. return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<GetOrderByRunDataDto>>.Success(_mapper.Map<IReadOnlyList<GetOrderByRunDataDto>>(list), "成功"));
  504. }
  505. /// <summary>
  506. /// 2.1.3 上传附件
  507. /// </summary>
  508. /// <param name="formData"></param>
  509. /// <returns></returns>
  510. [HttpPost("WriteFiles")]
  511. [AllowAnonymous]
  512. public async Task<OpenResponse> WriteFiles([FromForm] IFormCollection formData)
  513. {
  514. string Code = formData["Code"];
  515. string AcceptCode = formData["AcceptCode"];
  516. string AcceptPwd = formData["AcceptPwd"];
  517. //验证密钥
  518. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(Code, HttpContext.RequestAborted);
  519. if (accountDto is null || accountDto.IsCheckAccount == false)
  520. {
  521. List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
  522. new()
  523. {
  524. msg = "密钥错误",
  525. code = "-900",
  526. data = ""
  527. } };
  528. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
  529. }
  530. //验证数据
  531. if (string.IsNullOrEmpty(AcceptCode) || string.IsNullOrEmpty(AcceptPwd))
  532. return OpenResponse.Ok(ConvergenceMediaDeResponse<string>.Failed("编号、密码不能为空!", "0", "失败"));
  533. var dataRaw = await _dsReceiveMediaDataRepository.GetAsync(p => p.OrderCode == AcceptCode, HttpContext.RequestAborted);
  534. if (dataRaw == null)
  535. return OpenResponse.Ok(ConvergenceMediaDeResponse<string>.Failed("编号、密码错误!", "0", "失败"));
  536. IFormFileCollection files = formData.Files;//等价于Request.Form.Files
  537. List<FileDto> fileDtos = new();
  538. foreach (var item in files)
  539. {
  540. //这里需要上文件服务器上传
  541. var businessFileDto = await SendFileData(item);
  542. string strFileName = item.FileName;
  543. string strSuffix = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(strFileName.LastIndexOf(".") + 1) : "";
  544. string strSubFileName = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(0, strFileName.LastIndexOf(".")) : strFileName;
  545. fileDtos.Add(new FileDto()
  546. {
  547. Name = strSubFileName,
  548. Type = strSuffix,
  549. Classify = "受理上传",
  550. Additions = businessFileDto.id,
  551. Path = businessFileDto.path
  552. });
  553. }
  554. UpdateOrderFilesDto updateOrderFiles = new()
  555. {
  556. Files = fileDtos,
  557. Id = dataRaw.ExternalId,
  558. OrderNo = dataRaw.OrderCode
  559. };
  560. //推送数据
  561. var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/update-orderfiles", "Post", System.Text.Json.JsonSerializer.Serialize(updateOrderFiles));
  562. return OpenResponse.Ok(ConvergenceMediaDeResponse<string>.Success("", "上传成功"));
  563. }
  564. /// <summary>
  565. /// 2.7 新闻列表
  566. /// </summary>
  567. /// <param name="dto"></param>
  568. /// <returns></returns>
  569. [HttpPost("GetNoticeListByPage")]
  570. [AllowAnonymous]
  571. public async Task<OpenResponse> GetNoticeListByPage([FromForm] GetNoticeReceiveDto dto)
  572. {
  573. //密钥验证
  574. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.Code, HttpContext.RequestAborted);
  575. if (accountDto is null || accountDto.IsCheckAccount == false)
  576. {
  577. List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
  578. new()
  579. {
  580. msg = "密钥错误",
  581. code = "-900",
  582. data = ""
  583. } };
  584. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
  585. }
  586. int nCurrentPage = 0, nPageSize = 0;
  587. if (true == string.IsNullOrEmpty(dto.CurrentPage))
  588. nCurrentPage = 1;
  589. else
  590. nCurrentPage = Convert.ToInt32(dto.CurrentPage);
  591. if (true == string.IsNullOrEmpty(dto.PageSize))
  592. nPageSize = 10;
  593. else
  594. nPageSize = Convert.ToInt32(dto.PageSize);
  595. switch (dto.CType)
  596. {
  597. case "1":
  598. case "5":
  599. break;
  600. case "6":
  601. dto.CType = "4";
  602. break;
  603. default:
  604. dto.CType = "4";
  605. break;
  606. }
  607. RefAsync<int> total = 0;
  608. var items = await _bulletinRepository
  609. .Queryable()
  610. .Where(p => p.LoseEfficacyTime >= DateTime.Now)
  611. .Where(p => p.BulletinTypeId == dto.CType)
  612. .OrderByDescending(p => p.BulletinTime)
  613. .Select(it => new
  614. {
  615. Page = SqlFunc.RowNumber($"{it.BulletinTime} desc "),
  616. NoticeID = it.Id,
  617. NoticeTypeName = it.BulletinTypeName,
  618. NoticeTitle = it.Title,
  619. NoticeBMName = it.SourceOrgName,
  620. NoticeCreateDate = it.BulletinTime
  621. })
  622. .ToPageListAsync(nCurrentPage, nPageSize, total);
  623. //计算总页数
  624. int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / nPageSize));
  625. //处理返回
  626. List<Share.Dtos.YiBin.ConvergenceMedia.GetNoticeReceiveDataDto> dataDto = new()
  627. {
  628. new(){PageCount = nPageCount,
  629. data = _mapper.Map<IReadOnlyList<Share.Dtos.YiBin.ConvergenceMedia.GetNoticeReceiveDataListDto>>(items)}
  630. };
  631. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<Share.Dtos.YiBin.ConvergenceMedia.GetNoticeReceiveDataDto>>.Success(dataDto, "成功"));
  632. }
  633. /// <summary>
  634. ///2.8 获取详情,修改阅读次数
  635. /// </summary>
  636. /// <param name="dto"></param>
  637. /// <returns></returns>
  638. [AllowAnonymous]
  639. [HttpPost("NoticeDetail")]
  640. public async Task<OpenResponse> GetArticleDetails([FromForm] MediaArticleIdDto dto)
  641. {
  642. //密钥验证
  643. var accountDto = await _dsUserTokenInfoService.CheckAccountAsync(dto.Code, HttpContext.RequestAborted);
  644. if (accountDto is null || accountDto.IsCheckAccount == false)
  645. {
  646. List<ConvergenceMediaDeResponse<string>> convergenceMediaDes = new() {
  647. new()
  648. {
  649. msg = "密钥错误",
  650. code = "-900",
  651. data = ""
  652. } };
  653. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<ConvergenceMediaDeResponse<string>>>.Failed(convergenceMediaDes, "0", "失败"));
  654. }
  655. var data = await _bulletinRepository.GetAsync(p => p.Id == dto.NoticeID, HttpContext.RequestAborted);
  656. MediaArticleDetailsDto detailsDto = new();
  657. if (data != null)
  658. {
  659. data.ReadedNum = data.ReadedNum++;
  660. await _bulletinRepository.UpdateAsync(data, HttpContext.RequestAborted);
  661. detailsDto.NoticeID = data.Id;
  662. detailsDto.NoticeTypeName = data.BulletinTypeName;
  663. detailsDto.NoticeTitle = data.Title;
  664. detailsDto.NoticeBMName = data.SourceOrgName;
  665. detailsDto.NoticeCreateDate = data.BulletinTime;
  666. detailsDto.NoticeRCount = data.ReadedNum;
  667. detailsDto.NoticeContent = data.Content;
  668. }
  669. List<MediaArticleDetailsDto> dataDto = new() { detailsDto };
  670. return OpenResponse.Ok(ConvergenceMediaDeResponse<List<MediaArticleDetailsDto>>.Success(dataDto, "成功"));
  671. }
  672. #region 私有方法-将文件转化为文件流
  673. /// <summary>
  674. /// 将文件流上传到附件服务器
  675. /// </summary>
  676. /// <param name="file"></param>
  677. /// <returns></returns>
  678. private async Task<BusinessFileDto> SendFileData(IFormFile file)
  679. {
  680. var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile();
  681. // 文件名称
  682. string fileName = file.FileName;
  683. // 文件内容字节数据
  684. using var memoryStream = new MemoryStream();
  685. await file.CopyToAsync(memoryStream);
  686. memoryStream.Seek(0, SeekOrigin.Begin);
  687. byte[] fileContentBytes = memoryStream.ToArray();
  688. // 构造字典文件数据
  689. // 接口参数名称为files
  690. CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("fileData", fileContentBytes, fileName, "multipart/form-data");
  691. Dictionary<string, object> dicParam = new()
  692. {
  693. { fileName, fileParameter }
  694. };
  695. string url = string.Format("{0}{1}?source={2}", businessFile.BaseUrl, businessFile.UploadUrlAddress, businessFile.Source);
  696. var result = CFormUpload.MultipartFormDataPost(url, null, dicParam, "");
  697. if (!string.IsNullOrEmpty(result))
  698. {
  699. var resultData = Newtonsoft.Json.JsonConvert.DeserializeObject<BusinessFileResponse>(result);
  700. if (resultData != null && resultData.code == 0)
  701. {
  702. return resultData.result;
  703. }
  704. }
  705. return new BusinessFileDto();
  706. }
  707. #endregion
  708. }
  709. }