Library.cs 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944
  1. using EyeSoft.Runtime.InteropServices;
  2. using NPOI.SS.Formula.Functions;
  3. using OASystem.Domain.Entities.Financial;
  4. using OASystem.Domain.Entities.Groups;
  5. using OASystem.Domain.ViewModels.Groups;
  6. using OASystem.Domain.ViewModels.QiYeWeChat;
  7. using OASystem.Infrastructure.Repositories.Groups;
  8. using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
  9. namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
  10. {
  11. public static class AppNoticeLibrary
  12. {
  13. private static readonly IQiYeWeChatApiService _qiYeWeChatApiService = AutofacIocManager.Instance.GetService<IQiYeWeChatApiService>();
  14. private static readonly DelegationInfoRepository _grpDeleRep = AutofacIocManager.Instance.GetService<DelegationInfoRepository>();
  15. #region 获取企微Id
  16. public static List<string> GetQiyeChatUserIdList(List<string> userId)
  17. {
  18. List<string> result = new List<string>();
  19. try
  20. {
  21. foreach (string item in userId)
  22. {
  23. int uid = int.Parse(item);
  24. Sys_Users users = _grpDeleRep.Query<Sys_Users>(s => s.Id == uid).First();
  25. if (!string.IsNullOrEmpty(users.QiyeChatUserId))
  26. {
  27. result.Add(users.QiyeChatUserId);
  28. }
  29. }
  30. }
  31. catch (Exception ex)
  32. {
  33. }
  34. return result;
  35. }
  36. #endregion
  37. #region 确认出团
  38. /// <summary>
  39. /// 向指定群聊发送- 确认出团 -通知
  40. /// </summary>
  41. /// <param name="diId"></param>
  42. /// <param name="qwEnum"></param>
  43. /// <returns></returns>
  44. public static async Task<bool> SendChatMsg_GroupStatus_Create(int diId, QiyeWeChatEnum qwEnum)
  45. {
  46. Grp_DelegationInfo entity = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == diId).First();
  47. string dateRange = string.Format(@"{0}至{1}", entity.VisitStartDate.ToString("yyyy-MM-dd"), entity.VisitEndDate.ToString("yyyy-MM-dd"));
  48. string grpTypeStr = (_grpDeleRep.Query<Sys_SetData>(s => s.Id == entity.TeamDid).First()).Name;
  49. GroupStatus_CreateModel info = new GroupStatus_CreateModel()
  50. {
  51. ClientName = entity.ClientName,
  52. ClientUnit = entity.ClientUnit,
  53. TeamName = entity.TeamName,
  54. VisitDays = entity.VisitDays,
  55. VisitPNumber = entity.VisitPNumber,
  56. VisitDateRange = dateRange,
  57. TeamDid_Text = grpTypeStr
  58. };
  59. string chatId = qwEnum.GetEnumDescription();
  60. //发送信息
  61. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.GroupStatus_Create(info));
  62. if (result.errcode != 0)
  63. {
  64. //抄送日志
  65. return false;
  66. }
  67. return true;
  68. }
  69. /// <summary>
  70. /// 向指定用户发送- 确认出团 -通知
  71. /// </summary>
  72. /// <param name="diId"></param>
  73. /// <param name="userId"></param>
  74. /// <returns></returns>
  75. public static async Task<bool> SendUserMsg_GroupStatus_Create(int diId, List<string> userId)
  76. {
  77. Grp_DelegationInfo entity = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == diId).First();
  78. string dateRange = string.Format(@"{0}至{1}", entity.VisitStartDate.ToString("yyyy-MM-dd"), entity.VisitEndDate.ToString("yyyy-MM-dd"));
  79. string grpTypeStr = (_grpDeleRep.Query<Sys_SetData>(s => s.Id == entity.TeamDid).First()).Name;
  80. GroupStatus_CreateModel info = new GroupStatus_CreateModel()
  81. {
  82. ClientName = entity.ClientName,
  83. ClientUnit = entity.ClientUnit,
  84. TeamName = entity.TeamName,
  85. VisitDays = entity.VisitDays,
  86. VisitPNumber = entity.VisitPNumber,
  87. VisitDateRange = dateRange,
  88. TeamDid_Text = grpTypeStr
  89. };
  90. //发送信息
  91. List<string> qwUserIdList = GetQiyeChatUserIdList(userId);
  92. if (qwUserIdList.Count > 0)
  93. {
  94. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.GroupStatus_Create(info));
  95. if (result.errcode != 0)
  96. {
  97. //抄送日志
  98. return false;
  99. }
  100. }
  101. return true;
  102. }
  103. #endregion
  104. #region 团组费用审核
  105. /// <summary>
  106. /// 向指定群聊发送- 费用申请 -通知
  107. /// </summary>
  108. /// <param name="diId"></param>
  109. /// <param name="qwEnum"></param>
  110. /// <returns></returns>
  111. public static async Task<bool> SendChatMsg_GroupStatus_ApplyFee(int Grp_CreditCardPaymentId, int sign, QiyeWeChatEnum qwEnum)
  112. {
  113. string chatId = qwEnum.GetEnumDescription();
  114. Grp_CreditCardPayment ccp = _grpDeleRep.Query<Grp_CreditCardPayment>(s => s.Id == Grp_CreditCardPaymentId).First();
  115. Grp_DelegationInfo group = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == ccp.DIId).First();
  116. Sys_SetData payMoneyCurrencySetData = _grpDeleRep.Query<Sys_SetData>(s => s.Id == ccp.PaymentCurrency).First();
  117. string priceStr = string.Format(@"{0} {1}", ccp.PayMoney, payMoneyCurrencySetData.Name);
  118. List<Grp_CreditCardPayment> entityList = _grpDeleRep
  119. .Query<Grp_CreditCardPayment>(s => s.DIId == ccp.DIId && s.IsDel == 0 && s.CreateUserId > 0 && s.IsAuditGM == 0)
  120. .ToList();
  121. GroupStatus_ApplyFeeModel info = new GroupStatus_ApplyFeeModel()
  122. {
  123. QueueCount = entityList.Count,
  124. TeamName = group.TeamName,
  125. Price = priceStr
  126. };
  127. if (sign == 2)
  128. {
  129. info.TitleStr = "[更新]一项费用待审核";
  130. }
  131. //CTable
  132. #region CTable
  133. if (ccp.CTable == 76)//76,酒店预订
  134. {
  135. Grp_HotelReservations _HotelReservations = _grpDeleRep.Query<Grp_HotelReservations>(s => s.Id == ccp.CId).First();
  136. info.CreateDt = _HotelReservations.CreateTime.ToString("yyyy-MM-dd HH:mm");
  137. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _HotelReservations.CreateUserId).First();
  138. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  139. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  140. info.PriceModule = "酒店预订";
  141. info.PriceName = _HotelReservations.HotelName;
  142. }
  143. else if (ccp.CTable == 79) //79://车/导游地接
  144. {
  145. Grp_CarTouristGuideGroundReservations _CarTouristGuideGroundReservations = _grpDeleRep.Query<Grp_CarTouristGuideGroundReservations>(s => s.Id == ccp.CId).First();
  146. info.CreateDt = _CarTouristGuideGroundReservations.CreateTime.ToString("yyyy-MM-dd HH:mm");
  147. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _CarTouristGuideGroundReservations.CreateUserId).First();
  148. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  149. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  150. info.PriceModule = "车/导游地接";
  151. info.PriceName = _CarTouristGuideGroundReservations.PriceName;
  152. }
  153. else if (ccp.CTable == 80) //签证
  154. {
  155. List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
  156. Grp_VisaInfo _VisaInfos = _grpDeleRep.Query<Grp_VisaInfo>(s => s.Id == ccp.CId).First();
  157. info.CreateDt = _VisaInfos.CreateTime.ToString("yyyy-MM-dd HH:mm");
  158. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _VisaInfos.CreateUserId).First();
  159. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  160. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  161. info.PriceModule = "签证";
  162. info.PriceName = getClientNameStr(clientNameList, _VisaInfos.VisaClient);
  163. }
  164. else if (ccp.CTable == 81)//邀请/公务活动
  165. {
  166. Grp_InvitationOfficialActivities _InvitationOfficialActivities = _grpDeleRep.Query<Grp_InvitationOfficialActivities>(s => s.Id == ccp.CId).First();
  167. info.CreateDt = _InvitationOfficialActivities.CreateTime.ToString("yyyy-MM-dd HH:mm");
  168. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _InvitationOfficialActivities.CreateUserId).First();
  169. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  170. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  171. info.PriceModule = "邀请/公务活动";
  172. info.PriceName = _InvitationOfficialActivities.InviterArea;
  173. }
  174. else if (ccp.CTable == 82)//团组客户保险
  175. {
  176. List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
  177. Grp_Customers _Customers = _grpDeleRep.Query<Grp_Customers>(s => s.Id == ccp.CId).First();
  178. info.CreateDt = _Customers.CreateTime.ToString("yyyy-MM-dd HH:mm");
  179. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _Customers.CreateUserId).First();
  180. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  181. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  182. info.PriceModule = "团组客户保险";
  183. info.PriceName = getClientNameStr(clientNameList, _Customers.ClientName);
  184. }
  185. else if (ccp.CTable == 85) //机票预订
  186. {
  187. Grp_AirTicketReservations _AirTicketReservations = _grpDeleRep.Query<Grp_AirTicketReservations>(s => s.Id == ccp.CId).First();
  188. info.CreateDt = _AirTicketReservations.CreateTime.ToString("yyyy-MM-dd HH:mm");
  189. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _AirTicketReservations.CreateUserId).First();
  190. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  191. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  192. info.PriceModule = "机票预订";
  193. info.PriceName = "(" + _AirTicketReservations.FlightsCode + ")";
  194. }
  195. else if (ccp.CTable == 98) //其他款项
  196. {
  197. Grp_DecreasePayments _DecreasePayments = _grpDeleRep.Query<Grp_DecreasePayments>(s => s.Id == ccp.CId).First();
  198. info.CreateDt = _DecreasePayments.CreateTime.ToString("yyyy-MM-dd HH:mm");
  199. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _DecreasePayments.CreateUserId).First();
  200. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  201. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  202. info.PriceModule = "其他款项";
  203. info.PriceName = _DecreasePayments.PriceName;
  204. }
  205. #endregion
  206. //发送信息
  207. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.GroupStatus_ApplyFee(info));
  208. if (result.errcode != 0)
  209. {
  210. //抄送日志
  211. return false;
  212. }
  213. return true;
  214. }
  215. /// <summary>
  216. /// 向财务群发送费用审核结果通知(审核通过条件下发送)
  217. /// </summary>
  218. /// <param name="Grp_CreditCardPaymentId"></param>
  219. /// <param name="qwEnum"></param>
  220. /// <returns></returns>
  221. public static async Task<bool> SendChatMsg_GroupStatus_AuditFee(int Grp_CreditCardPaymentId, QiyeWeChatEnum qwEnum)
  222. {
  223. string chatId = qwEnum.GetEnumDescription();
  224. Grp_CreditCardPayment ccp = _grpDeleRep.Query<Grp_CreditCardPayment>(s => s.Id == Grp_CreditCardPaymentId).First();
  225. Grp_DelegationInfo group = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == ccp.DIId).First();
  226. Sys_SetData payMoneyCurrencySetData = _grpDeleRep.Query<Sys_SetData>(s => s.Id == ccp.PaymentCurrency).First();
  227. string priceStr = string.Format(@"{0} {1}", ccp.PayMoney, payMoneyCurrencySetData.Name);
  228. AuditResult_ApplyFee_GroupModel info = new AuditResult_ApplyFee_GroupModel()
  229. {
  230. TeamName = group.TeamName,
  231. Price = priceStr,
  232. GMAuditDate = "-"
  233. };
  234. DateTime gmAuditDt;
  235. bool bGMAuditDt = DateTime.TryParse(ccp.AuditGMDate, out gmAuditDt);
  236. info.GMAuditDate = gmAuditDt.ToString("yyyy-MM-dd HH:mm");
  237. //CTable
  238. #region CTable
  239. if (ccp.CTable == 76)//76,酒店预订
  240. {
  241. Grp_HotelReservations _HotelReservations = _grpDeleRep.Query<Grp_HotelReservations>(s => s.Id == ccp.CId).First();
  242. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _HotelReservations.CreateUserId).First();
  243. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  244. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  245. info.PriceModule = "酒店预订";
  246. info.PriceName = _HotelReservations.HotelName;
  247. }
  248. else if (ccp.CTable == 79) //79://车/导游地接
  249. {
  250. Grp_CarTouristGuideGroundReservations _CarTouristGuideGroundReservations = _grpDeleRep.Query<Grp_CarTouristGuideGroundReservations>(s => s.Id == ccp.CId).First();
  251. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _CarTouristGuideGroundReservations.CreateUserId).First();
  252. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  253. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  254. info.PriceModule = "车/导游地接";
  255. info.PriceName = _CarTouristGuideGroundReservations.PriceName;
  256. }
  257. else if (ccp.CTable == 80) //签证
  258. {
  259. List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
  260. Grp_VisaInfo _VisaInfos = _grpDeleRep.Query<Grp_VisaInfo>(s => s.Id == ccp.CId).First();
  261. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _VisaInfos.CreateUserId).First();
  262. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  263. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  264. info.PriceModule = "签证";
  265. info.PriceName = getClientNameStr(clientNameList, _VisaInfos.VisaClient);
  266. }
  267. else if (ccp.CTable == 81)//邀请/公务活动
  268. {
  269. Grp_InvitationOfficialActivities _InvitationOfficialActivities = _grpDeleRep.Query<Grp_InvitationOfficialActivities>(s => s.Id == ccp.CId).First();
  270. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _InvitationOfficialActivities.CreateUserId).First();
  271. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  272. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  273. info.PriceModule = "邀请/公务活动";
  274. info.PriceName = _InvitationOfficialActivities.InviterArea;
  275. }
  276. else if (ccp.CTable == 82)//团组客户保险
  277. {
  278. List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
  279. Grp_Customers _Customers = _grpDeleRep.Query<Grp_Customers>(s => s.Id == ccp.CId).First();
  280. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _Customers.CreateUserId).First();
  281. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  282. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  283. info.PriceModule = "团组客户保险";
  284. info.PriceName = getClientNameStr(clientNameList, _Customers.ClientName);
  285. }
  286. else if (ccp.CTable == 85) //机票预订
  287. {
  288. Grp_AirTicketReservations _AirTicketReservations = _grpDeleRep.Query<Grp_AirTicketReservations>(s => s.Id == ccp.CId).First();
  289. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _AirTicketReservations.CreateUserId).First();
  290. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  291. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  292. info.PriceModule = "机票预订";
  293. info.PriceName = "(" + _AirTicketReservations.FlightsCode + ")";
  294. }
  295. else if (ccp.CTable == 98) //其他款项
  296. {
  297. Grp_DecreasePayments _DecreasePayments = _grpDeleRep.Query<Grp_DecreasePayments>(s => s.Id == ccp.CId).First();
  298. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _DecreasePayments.CreateUserId).First();
  299. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  300. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  301. info.PriceModule = "其他款项";
  302. info.PriceName = _DecreasePayments.PriceName;
  303. }
  304. #endregion
  305. //发送信息
  306. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.AuditResult_ApplyFee_Chat(info));
  307. if (result.errcode != 0)
  308. {
  309. //抄送日志
  310. return false;
  311. }
  312. return true;
  313. }
  314. /// <summary>
  315. /// 向指定用户发送-团组费用审核结果
  316. /// </summary>
  317. /// <param name="Grp_CreditCardPaymentId"></param>
  318. /// <param name="userId"></param>
  319. /// <returns></returns>
  320. public static async Task<bool> SendUserMsg_GroupStatus_AuditFee(int Grp_CreditCardPaymentId, List<string> userId, QiyeWeChatEnum qwEnum)
  321. {
  322. Grp_CreditCardPayment ccp = _grpDeleRep.Query<Grp_CreditCardPayment>(s => s.Id == Grp_CreditCardPaymentId).First();
  323. Grp_DelegationInfo group = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == ccp.DIId).First();
  324. Sys_SetData payMoneyCurrencySetData = _grpDeleRep.Query<Sys_SetData>(s => s.Id == ccp.PaymentCurrency).First();
  325. string priceStr = string.Format(@"{0} {1}", ccp.PayMoney, payMoneyCurrencySetData.Name);
  326. AuditResult_ApplyFee_GroupModel info = new AuditResult_ApplyFee_GroupModel()
  327. {
  328. TeamName = group.TeamName,
  329. Price = priceStr,
  330. GMAuditDate = "-"
  331. };
  332. DateTime gmAuditDt;
  333. bool bGMAuditDt = DateTime.TryParse(ccp.AuditGMDate, out gmAuditDt);
  334. info.GMAuditDate = gmAuditDt.ToString("yyyy-MM-dd HH:mm");
  335. if (ccp.IsAuditGM == 2)
  336. {
  337. info.Result = "总经理审核未通过";
  338. info.ResultColor = "warning";
  339. }
  340. //CTable
  341. #region CTable
  342. if (ccp.CTable == 76)//76,酒店预订
  343. {
  344. Grp_HotelReservations _HotelReservations = _grpDeleRep.Query<Grp_HotelReservations>(s => s.Id == ccp.CId).First();
  345. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _HotelReservations.CreateUserId).First();
  346. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  347. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  348. info.PriceModule = "酒店预订";
  349. info.PriceName = _HotelReservations.HotelName;
  350. }
  351. else if (ccp.CTable == 79) //79://车/导游地接
  352. {
  353. Grp_CarTouristGuideGroundReservations _CarTouristGuideGroundReservations = _grpDeleRep.Query<Grp_CarTouristGuideGroundReservations>(s => s.Id == ccp.CId).First();
  354. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _CarTouristGuideGroundReservations.CreateUserId).First();
  355. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  356. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  357. info.PriceModule = "车/导游地接";
  358. info.PriceName = _CarTouristGuideGroundReservations.PriceName;
  359. }
  360. else if (ccp.CTable == 80) //签证
  361. {
  362. List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
  363. Grp_VisaInfo _VisaInfos = _grpDeleRep.Query<Grp_VisaInfo>(s => s.Id == ccp.CId).First();
  364. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _VisaInfos.CreateUserId).First();
  365. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  366. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  367. info.PriceModule = "签证";
  368. info.PriceName = getClientNameStr(clientNameList, _VisaInfos.VisaClient);
  369. }
  370. else if (ccp.CTable == 81)//邀请/公务活动
  371. {
  372. Grp_InvitationOfficialActivities _InvitationOfficialActivities = _grpDeleRep.Query<Grp_InvitationOfficialActivities>(s => s.Id == ccp.CId).First();
  373. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _InvitationOfficialActivities.CreateUserId).First();
  374. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  375. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  376. info.PriceModule = "邀请/公务活动";
  377. info.PriceName = _InvitationOfficialActivities.InviterArea;
  378. }
  379. else if (ccp.CTable == 82)//团组客户保险
  380. {
  381. List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
  382. Grp_Customers _Customers = _grpDeleRep.Query<Grp_Customers>(s => s.Id == ccp.CId).First();
  383. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _Customers.CreateUserId).First();
  384. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  385. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  386. info.PriceModule = "团组客户保险";
  387. info.PriceName = getClientNameStr(clientNameList, _Customers.ClientName);
  388. }
  389. else if (ccp.CTable == 85) //机票预订
  390. {
  391. Grp_AirTicketReservations _AirTicketReservations = _grpDeleRep.Query<Grp_AirTicketReservations>(s => s.Id == ccp.CId).First();
  392. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _AirTicketReservations.CreateUserId).First();
  393. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  394. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  395. info.PriceModule = "机票预订";
  396. info.PriceName = "(" + _AirTicketReservations.FlightsCode + ")";
  397. }
  398. else if (ccp.CTable == 98) //其他款项
  399. {
  400. Grp_DecreasePayments _DecreasePayments = _grpDeleRep.Query<Grp_DecreasePayments>(s => s.Id == ccp.CId).First();
  401. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == _DecreasePayments.CreateUserId).First();
  402. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  403. info.CreateUser = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  404. info.PriceModule = "其他款项";
  405. info.PriceName = _DecreasePayments.PriceName;
  406. }
  407. #endregion
  408. //发送信息
  409. List<string> qwUserIdList = GetQiyeChatUserIdList(userId);
  410. if (qwUserIdList.Count > 0)
  411. {
  412. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.AuditResult_ApplyFee_User(info));
  413. if (ccp.IsAuditGM == 1)
  414. {
  415. await SendChatMsg_GroupStatus_AuditFee(Grp_CreditCardPaymentId, qwEnum);
  416. }
  417. if (result.errcode != 0)
  418. {
  419. //抄送日志
  420. return false;
  421. }
  422. }
  423. return true;
  424. }
  425. /// <summary>
  426. /// 向指定用户发送-团组费用支付结果
  427. /// </summary>
  428. /// <param name="Grp_CreditCardPaymentId"></param>
  429. /// <param name="userId"></param>
  430. /// <returns></returns>
  431. public static async Task<bool> SendUserMsg_GroupStatus_PayResult(int Grp_CreditCardPaymentId, List<string> userId)
  432. {
  433. //, QiyeWeChatEnum qiyeWeChat
  434. Grp_CreditCardPayment ccp = _grpDeleRep.Query<Grp_CreditCardPayment>(s => s.Id == Grp_CreditCardPaymentId).First();
  435. Grp_DelegationInfo group = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == ccp.DIId).First();
  436. Sys_SetData payMoneyCurrencySetData = _grpDeleRep.Query<Sys_SetData>(s => s.Id == ccp.PaymentCurrency).First();
  437. string priceStr = string.Format(@"{0} {1}", ccp.PayMoney, payMoneyCurrencySetData.Name);
  438. PayResult_Group_ToUserModel info = new PayResult_Group_ToUserModel()
  439. {
  440. PayDt = DateTime.Now.ToString("yyyy-MM-dd HH:mm"),
  441. Price = priceStr,
  442. TeamName = group.TeamName
  443. };
  444. #region CTable
  445. if (ccp.CTable == 76)//76,酒店预订
  446. {
  447. Grp_HotelReservations _HotelReservations = _grpDeleRep.Query<Grp_HotelReservations>(s => s.Id == ccp.CId).First();
  448. info.PriceModule = "酒店预订";
  449. info.PriceName = _HotelReservations.HotelName;
  450. }
  451. else if (ccp.CTable == 79) //79://车/导游地接
  452. {
  453. Grp_CarTouristGuideGroundReservations _CarTouristGuideGroundReservations = _grpDeleRep.Query<Grp_CarTouristGuideGroundReservations>(s => s.Id == ccp.CId).First();
  454. info.PriceModule = "车/导游地接";
  455. info.PriceName = _CarTouristGuideGroundReservations.PriceName;
  456. }
  457. else if (ccp.CTable == 80) //签证
  458. {
  459. List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
  460. Grp_VisaInfo _VisaInfos = _grpDeleRep.Query<Grp_VisaInfo>(s => s.Id == ccp.CId).First();
  461. info.PriceModule = "签证";
  462. info.PriceName = getClientNameStr(clientNameList, _VisaInfos.VisaClient);
  463. }
  464. else if (ccp.CTable == 81)//邀请/公务活动
  465. {
  466. Grp_InvitationOfficialActivities _InvitationOfficialActivities = _grpDeleRep.Query<Grp_InvitationOfficialActivities>(s => s.Id == ccp.CId).First();
  467. info.PriceModule = "邀请/公务活动";
  468. info.PriceName = _InvitationOfficialActivities.InviterArea;
  469. }
  470. else if (ccp.CTable == 82)//团组客户保险
  471. {
  472. List<SimplClientInfo> clientNameList = getSimplClientList(group.Id);
  473. Grp_Customers _Customers = _grpDeleRep.Query<Grp_Customers>(s => s.Id == ccp.CId).First();
  474. info.PriceModule = "团组客户保险";
  475. info.PriceName = getClientNameStr(clientNameList, _Customers.ClientName);
  476. }
  477. else if (ccp.CTable == 85) //机票预订
  478. {
  479. Grp_AirTicketReservations _AirTicketReservations = _grpDeleRep.Query<Grp_AirTicketReservations>(s => s.Id == ccp.CId).First();
  480. info.PriceModule = "机票预订";
  481. info.PriceName = "(" + _AirTicketReservations.FlightsCode + ")";
  482. }
  483. else if (ccp.CTable == 98) //其他款项
  484. {
  485. Grp_DecreasePayments _DecreasePayments = _grpDeleRep.Query<Grp_DecreasePayments>(s => s.Id == ccp.CId).First();
  486. info.PriceModule = "其他款项";
  487. info.PriceName = _DecreasePayments.PriceName;
  488. }
  489. #endregion
  490. //发送信息
  491. List<string> qwUserIdList = GetQiyeChatUserIdList(userId);
  492. if (qwUserIdList.Count > 0)
  493. {
  494. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.PayResult_Group_ToUser(info));
  495. if (result.errcode != 0)
  496. {
  497. //抄送日志
  498. return false;
  499. }
  500. }
  501. return true;
  502. }
  503. #endregion
  504. #region 团组出发、结束提醒(财务群)
  505. public static async Task<bool> SendChatMsg_GroupRemindersToCaiwu(List<Grp_DelegationInfo> list_7day, List<Grp_DelegationInfo> list_3day, QiyeWeChatEnum qwEnum)
  506. {
  507. string chatId = qwEnum.GetEnumDescription();
  508. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.GroupRemindersToCaiwuChat(list_7day, list_3day));
  509. if (result.errcode != 0)
  510. {
  511. //抄送日志
  512. return false;
  513. }
  514. return true;
  515. }
  516. #endregion
  517. #region 日付申请审核
  518. /// <summary>
  519. /// 日付申请提交时推送财务群
  520. /// </summary>
  521. /// <param name="dailyPayId"></param>
  522. /// <param name="qwEnum"></param>
  523. /// <returns></returns>
  524. public static async Task<bool> DailyPayReminders_Create_ToCaiwuChat(int dailyPayId, int sign, QiyeWeChatEnum qwEnum)
  525. {
  526. string chatId = qwEnum.GetEnumDescription();
  527. Fin_DailyFeePayment fin_DailyFeePayment = _grpDeleRep.Query<Fin_DailyFeePayment>(s => s.Id == dailyPayId).First();
  528. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == fin_DailyFeePayment.CreateUserId).First();
  529. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  530. string users = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  531. string[] companyArr = new string[] { "未知", "成都泛美商务有限公司", "四川泛美交流有限公司", "成都纽茵教育科技有限公司", "成都鸿企中元科技有限公司", "测试公司1" };
  532. string companyStr = "未知";
  533. if (fin_DailyFeePayment.CompanyId < companyArr.Length)
  534. {
  535. companyStr = companyArr[fin_DailyFeePayment.CompanyId];
  536. }
  537. Sys_SetData sd_tansferType = _grpDeleRep.Query<Sys_SetData>(s => s.Id == fin_DailyFeePayment.TransferTypeId).First();
  538. Sys_SetData sd_priceType = _grpDeleRep.Query<Sys_SetData>(s => s.Id == fin_DailyFeePayment.PriceTypeId).First();
  539. string feeSignStr = string.Format(@"{0}-{1}", sd_tansferType.Name, sd_priceType.Name);
  540. string priceStr = fin_DailyFeePayment.SumPrice.ToString("#0.00");
  541. DailyPayReminders_Create_ToCaiwuChatModel info = new DailyPayReminders_Create_ToCaiwuChatModel()
  542. {
  543. CreateDt = fin_DailyFeePayment.CreateTime.ToString("yyyy-MM-dd HH:mm"),
  544. CreateUser = users,
  545. Price = priceStr,
  546. Company = companyStr,
  547. FeeSign = feeSignStr,
  548. PriceName = fin_DailyFeePayment.Instructions
  549. };
  550. if (sign == 2)
  551. {
  552. info.TitleStr = "[更新]一项费用待审核";
  553. }
  554. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.DailyPayReminders_Create_ToCaiwuChat(info));
  555. if (result.errcode != 0)
  556. {
  557. //抄送日志
  558. return false;
  559. }
  560. return true;
  561. }
  562. /// <summary>
  563. /// 日付申请审核结果推送给申请人
  564. /// </summary>
  565. /// <param name="dailyPayId"></param>
  566. /// <param name="userId"></param>
  567. /// <param name="qwEnum"></param>
  568. /// <returns></returns>
  569. public static async Task<bool> DailyPayReminder_Audit_ToUser(int dailyPayId, List<string> userId, QiyeWeChatEnum qwEnum)
  570. {
  571. Fin_DailyFeePayment fin_DailyFeePayment = _grpDeleRep.Query<Fin_DailyFeePayment>(s => s.Id == dailyPayId).First();
  572. Sys_Users user = _grpDeleRep.Query<Sys_Users>(s => s.Id == fin_DailyFeePayment.CreateUserId).First();
  573. Sys_JobPost job = _grpDeleRep.Query<Sys_JobPost>(s => s.Id == user.JobPostId).First();
  574. string users = string.Format(@"{0}-{1}", job.JobName, user.CnName);
  575. string priceStr = fin_DailyFeePayment.SumPrice.ToString("#0.00");
  576. DailyPayReminder_Audit_ToUserModel info = new DailyPayReminder_Audit_ToUserModel()
  577. {
  578. Price = priceStr,
  579. PriceName = fin_DailyFeePayment.Instructions
  580. };
  581. if (fin_DailyFeePayment.FAudit == 1)
  582. {
  583. info.AuditDate = fin_DailyFeePayment.MAuditDate.ToString("yyyy-MM-dd HH:mm");
  584. if (fin_DailyFeePayment.MAudit == 1)
  585. {
  586. info.Result = "你有一笔日付申请已通过审核";
  587. info.ResultColor = "info";
  588. //发送至财务群
  589. DailyPayReminder_Audit_ToCaiwuChatModel chatInfo = new DailyPayReminder_Audit_ToCaiwuChatModel()
  590. {
  591. AuditDate = info.AuditDate,
  592. CreateUser = users,
  593. Price = priceStr,
  594. PriceName = fin_DailyFeePayment.Instructions
  595. };
  596. string chatId = qwEnum.GetEnumDescription();
  597. await _qiYeWeChatApiService.GroupStatus_SendChatMsg_Markdown(chatId, MarkdownLib.DailyPayReminder_Audit_ToCaiwuChat(chatInfo));
  598. }
  599. else if (fin_DailyFeePayment.MAudit == 2)
  600. {
  601. info.Result = "你有一笔日付申请未通过总经理审核";
  602. info.ResultColor = "warning";
  603. }
  604. }
  605. else if (fin_DailyFeePayment.FAudit == 2)
  606. {
  607. info.AuditDate = fin_DailyFeePayment.FAuditDate.ToString("yyyy-MM-dd HH:mm");
  608. info.Result = "你有一笔日付申请未通过财务审核";
  609. info.ResultColor = "warning";
  610. }
  611. List<string> qwUserIdList = GetQiyeChatUserIdList(userId);
  612. if (qwUserIdList.Count > 0)
  613. {
  614. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.DailyPayReminder_Audit_ToUser(info));
  615. if (result.errcode != 0)
  616. {
  617. //抄送日志
  618. return false;
  619. }
  620. }
  621. return true;
  622. }
  623. /// <summary>
  624. /// 日付申请已付款推送给申请人
  625. /// </summary>
  626. /// <returns></returns>
  627. public static async Task<bool> DailyPayReminder_Pay_ToUser(int dailyPayId, List<string> userId)
  628. {
  629. Fin_DailyFeePayment fin_DailyFeePayment = _grpDeleRep.Query<Fin_DailyFeePayment>(s => s.Id == dailyPayId).First();
  630. string priceStr = fin_DailyFeePayment.SumPrice.ToString("#0.00");
  631. DailyPayReminder_Pay_ToUserModel info = new DailyPayReminder_Pay_ToUserModel()
  632. {
  633. PayDt = DateTime.Now.ToString("yyyy-MM-dd HH:mm"),
  634. PriceName = fin_DailyFeePayment.Instructions,
  635. Price = priceStr
  636. };
  637. List<string> qwUserIdList = GetQiyeChatUserIdList(userId);
  638. if (qwUserIdList.Count > 0)
  639. {
  640. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.DailyPayReminder_Pay_ToUser(info));
  641. if (result.errcode != 0)
  642. {
  643. //抄送日志
  644. return false;
  645. }
  646. }
  647. return true;
  648. }
  649. #endregion
  650. #region 三公费用更改通知
  651. /// <summary>
  652. /// 三公费用更改通知发送总经理(21)
  653. /// </summary>
  654. /// <param name="sign"></param>
  655. /// <returns></returns>
  656. public static async Task<bool> SendUserMsg_GroupShare_ToGM(int diId,List<string> receivedUserIds, int updateUserId, string url)
  657. {
  658. Grp_DelegationInfo groupInfo = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == diId).First();
  659. GroupShare_ToGMModel info = new GroupShare_ToGMModel()
  660. {
  661. RefreshDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm"),
  662. TeamName = groupInfo.TeamName,
  663. CreateUser = _grpDeleRep.Query<Sys_Users>(s => s.Id == updateUserId).First()?.CnName ?? "-",
  664. Url = url
  665. };
  666. if (receivedUserIds.Count > 0)
  667. {
  668. List<string> qwUserIdList = GetQiyeChatUserIdList(receivedUserIds);
  669. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.GroupShare_ToGM(info));
  670. if (result.errcode != 0)
  671. {
  672. //抄送日志
  673. return false;
  674. }
  675. }
  676. return true;
  677. }
  678. /// <summary>
  679. /// 三公费用确认通知发送财务部人员
  680. /// </summary>
  681. /// <param name="sign"></param>
  682. /// <returns></returns>
  683. public static async Task<bool> SendUserMsg_GroupShare_ToFinance(int diId)
  684. {
  685. Grp_DelegationInfo groupInfo = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == diId).First();
  686. GroupShare_ToUserModel info = new GroupShare_ToUserModel()
  687. {
  688. RefreshDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm"),
  689. TeamName = groupInfo.TeamName
  690. };
  691. List<string> receivedUserIds = _grpDeleRep.Query<Sys_Users>(s => s.IsDel == 0 && s.DepId == 3).Select(x => x.Id.ToString()).ToList();
  692. receivedUserIds = new List<string>() { "208","4", "233" };
  693. if (receivedUserIds.Count > 0)
  694. {
  695. List<string> qwUserIdList = GetQiyeChatUserIdList(receivedUserIds);
  696. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.GroupShare_ToFinance(info));
  697. if (result.errcode != 0)
  698. {
  699. //抄送日志
  700. return false;
  701. }
  702. }
  703. return true;
  704. }
  705. #endregion
  706. #region 成本通知
  707. /// <summary>
  708. /// 成本通知发送给对应岗位用户
  709. /// </summary>
  710. /// <param name="diId"></param>
  711. /// <returns></returns>
  712. public static async Task<bool> SendUserMsg_GroupShare_ToJob(int diId)
  713. {
  714. Grp_DelegationInfo groupInfo = _grpDeleRep.Query<Grp_DelegationInfo>(s => s.Id == diId).First();
  715. List<Sys_Users> list_user = _grpDeleRep.Query<Sys_Users>(s => s.IsDel == 0 && (s.JobPostId == 24 || s.JobPostId == 25 || s.JobPostId == 28)).ToList();
  716. //List<Sys_Users> list_user = _grpDeleRep.Query<Sys_Users>(s => s.IsDel == 0 && (s.JobPostId == 40 || s.JobPostId == 41)).ToList();
  717. List<string> userIds = new List<string>();
  718. list_user.ForEach(s => userIds.Add(s.Id.ToString()));
  719. List<string> qwUserIdList = GetQiyeChatUserIdList(userIds);
  720. GroupShare_ToUserModel info = new GroupShare_ToUserModel()
  721. {
  722. RefreshDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm"),
  723. TeamName = groupInfo.TeamName
  724. };
  725. if (qwUserIdList.Count > 0)
  726. {
  727. ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.GroupShare_ToUser(info));
  728. if (result.errcode != 0)
  729. {
  730. //抄送日志
  731. return false;
  732. }
  733. }
  734. return true;
  735. }
  736. #endregion
  737. #region Helper
  738. private static string getClientNameStr(List<SimplClientInfo> list, string origin)
  739. {
  740. string result = origin;
  741. if (Regex.Match(origin, @"\d+,?").Value.Length > 0)
  742. {
  743. string[] temparr = origin.Split(',');
  744. string fistrStr = temparr[0];
  745. int count = temparr.Count();
  746. int tempId;
  747. bool success = int.TryParse(fistrStr, out tempId);
  748. if (success)
  749. {
  750. SimplClientInfo tempInfo = list.FirstOrDefault(s => s.Id == tempId);
  751. if (tempInfo != null)
  752. {
  753. if (count > 1)
  754. {
  755. result = string.Format(@"{0}{1}等{2}人", tempInfo.LastName, tempInfo.FirstName, count);
  756. }
  757. else
  758. {
  759. result = string.Format(@"{0}{1}", tempInfo.LastName, tempInfo.FirstName);
  760. }
  761. }
  762. }
  763. }
  764. return result;
  765. }
  766. private static List<SimplClientInfo> getSimplClientList(int diId)
  767. {
  768. string sql = string.Format("select b.Id,b.Pinyin,b.lastName,b.firstName,b.phone from Grp_TourClientList a, Crm_DeleClient b where a.clientid = b.id and a.isdel = 0 and a.diid = {0}", diId);
  769. List<SimplClientInfo> arr = _grpDeleRep._sqlSugar.SqlQueryable<SimplClientInfo>(sql).ToList();
  770. return arr;
  771. }
  772. #endregion
  773. }
  774. }