Library.cs 41 KB

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