TourClientListRepository.cs 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168
  1. using AutoMapper;
  2. using MathNet.Numerics.Distributions;
  3. using NPOI.SS.Formula.PTG;
  4. using NPOI.Util;
  5. using OASystem.Domain;
  6. using OASystem.Domain.AesEncryption;
  7. using OASystem.Domain.Dtos.CRM;
  8. using OASystem.Domain.Dtos.Groups;
  9. using OASystem.Domain.Entities.Customer;
  10. using OASystem.Domain.Entities.Groups;
  11. using OASystem.Domain.ViewModels.Financial;
  12. using OASystem.Domain.ViewModels.Groups;
  13. using OASystem.Infrastructure.Tools;
  14. using Org.BouncyCastle.Utilities.Encoders;
  15. using StackExchange.Redis;
  16. using System;
  17. using System.Collections;
  18. using System.Collections.Generic;
  19. using System.Diagnostics;
  20. using System.Globalization;
  21. using System.Linq;
  22. using System.Text;
  23. using System.Threading.Tasks;
  24. namespace OASystem.Infrastructure.Repositories.Groups
  25. {
  26. /// <summary>
  27. /// 接团客户名单
  28. /// 仓库
  29. /// </summary>
  30. public class TourClientListRepository :BaseRepository<Grp_TourClientList,TourClientListView>
  31. {
  32. private readonly Result _result;
  33. private readonly IMapper _mapper;
  34. public TourClientListRepository(SqlSugarClient sqlSugar, IMapper mapper)
  35. : base(sqlSugar)
  36. {
  37. _result = new Result() { Code = -1, Msg = "操作失败!" };
  38. _mapper = mapper;
  39. }
  40. /// <summary>
  41. /// 根据团组Id客人名单List
  42. /// </summary>
  43. /// <param name="portId"></param>
  44. /// <param name="diId"></param>
  45. /// <returns></returns>
  46. public async Task<List<SimplClientInfo>> _GuestNameItemByDiId(int portId, int diId)
  47. {
  48. List<SimplClientInfo> simplClients = new List<SimplClientInfo>();
  49. if (portId == 1 || portId == 2 || portId == 3) // 1 web 2 Android 3 ios
  50. {
  51. string sql = $@"Select b.Id,b.Pinyin,b.lastName,b.firstName,b.phone From Grp_TourClientList a, Crm_DeleClient b
  52. Where a.clientid = b.id and a.isdel = 0 and a.diId = {diId}";
  53. simplClients = await _sqlSugar.SqlQueryable<SimplClientInfo>(sql).ToListAsync();
  54. foreach (var item in simplClients)
  55. {
  56. EncryptionProcessor.DecryptProperties(item);
  57. }
  58. }
  59. else
  60. {
  61. _result.Msg = "请传入有效的PortType参数,1 Web 2 Android 3 IOS!";
  62. }
  63. return simplClients;
  64. }
  65. /// <summary>
  66. /// 根据团组Id查询List
  67. /// </summary>
  68. /// <param name="portId"></param>
  69. /// <param name="diId"></param>
  70. /// <returns></returns>
  71. public async Task<Result> _ItemByDiId(int portId, int diId)
  72. {
  73. if (portId == 1 || portId == 2 || portId == 3 ) // 1 web 2 Android 3 ios
  74. {
  75. string sql = string.Format(@"
  76. SELECT
  77. tcl.Id,
  78. tcl.DiId,
  79. tcl.IsAccompany,
  80. temp.*,
  81. u.CnName AS Operator,
  82. tcl.CreateTime AS OperatingTime,
  83. ssd.name AS ShippingSpaceType
  84. FROM
  85. Grp_TourClientList tcl
  86. LEFT JOIN (
  87. SELECT
  88. dc.Id AS DcId,
  89. dc.LastName,
  90. dc.FirstName,
  91. ccom.CompanyFullName,
  92. dc.Job,
  93. cc.CertNo AS IDCardNo,
  94. dc.Sex,
  95. dc.BirthDay
  96. FROM
  97. Crm_DeleClient dc
  98. LEFT JOIN Crm_CustomerCompany ccom ON dc.CrmCompanyId = ccom.Id
  99. AND ccom.IsDel = 0
  100. LEFT JOIN Crm_CustomerCert cc ON dc.Id = cc.DcId
  101. AND cc.SdId = 773
  102. AND cc.IsDel = 0
  103. WHERE
  104. dc.IsDel = 0
  105. ) temp ON temp.DcId = tcl.ClientId
  106. LEFT JOIN Sys_Users u ON tcl.CreateUserId = u.Id
  107. LEFT JOIN sys_setdata ssd ON ssd.isdel = 0 AND ssd.id = tcl.ShippingSpaceTypeid
  108. WHERE
  109. tcl.IsDel = 0
  110. AND tcl.DiId = {0}", diId);
  111. var data = await _sqlSugar.SqlQueryable<TourClientListByDiIdView>(sql).ToListAsync();
  112. foreach (var item in data)
  113. {
  114. EncryptionProcessor.DecryptProperties(item);
  115. }
  116. _result.Code = 0;
  117. _result.Data = data;
  118. }
  119. else
  120. {
  121. _result.Msg = "请传入有效的PortType参数,1 Web 2 Android 3 IOS!";
  122. }
  123. return _result;
  124. }
  125. /// <summary>
  126. /// 基础数据 Init
  127. /// </summary>
  128. /// <param name="portId"></param>
  129. /// <returns></returns>
  130. public async Task<JsonView> _BasicDataInit(int portId)
  131. {
  132. var view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
  133. if (portId == 1 || portId == 2 || portId == 3) // 1 web 2 Android 3 ios
  134. {
  135. var setData = await _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0) .ToListAsync();
  136. var shippingSpaceTypeData = setData.Where(it => it.STid == 44).ToList(); //舱位类型
  137. var shippingSpaceTypeData1 = _mapper.Map<List<SetDataInfoView>>(shippingSpaceTypeData);
  138. //var passportTypeData = setData.Where(it => it.STid == 74).ToList(); //护照类型
  139. //List<SetDataInfoView> _PassportTypeData = _mapper.Map<List<SetDataInfoView>>(passportTypeData);
  140. //客户信息资料
  141. var clientInfoSql = string.Format(@"Select dc.Id As DcId,dc.LastName,dc.FirstName,dc.Pinyin,dc.Sex,ccom.CompanyFullName,dc.Job,
  142. cc1.CertNo As IDCardNo,dc.Phone,dc.BirthDay
  143. From Crm_DeleClient dc
  144. Left Join Crm_CustomerCompany ccom On dc.CrmCompanyId = ccom.Id And ccom.IsDel = 0
  145. Left Join Crm_CustomerCert cc1 On dc.Id = cc1.DcId And cc1.SdId = 773 And cc1.IsDel = 0
  146. Where dc.IsDel = 0");
  147. var clientData = _sqlSugar.SqlQueryable<TourClientListDetailsView>(clientInfoSql).ToList();
  148. //公司信息
  149. var clientCompanySql = string.Format(@"Select Id,CompanyFullName From Crm_CustomerCompany Where IsDel = 0");
  150. var clientCompanyData = _sqlSugar.SqlQueryable<CustomerCompanyCiew>(clientCompanySql).ToList();
  151. clientCompanyData = clientCompanyData.DistinctBy(it => it.CompanyFullName).ToList();
  152. foreach ( var item in clientData)
  153. {
  154. if (item.FirstName.Length > 5 && item.LastName.Length > 5)
  155. {
  156. EncryptionProcessor.DecryptProperties(item);
  157. }
  158. }
  159. foreach (var item in clientCompanyData)
  160. {
  161. if (item.CompanyFullName.Length > 5)
  162. {
  163. EncryptionProcessor.DecryptProperties(item);
  164. }
  165. }
  166. var _view = new {
  167. ShippingSpaceTypeData = shippingSpaceTypeData1,
  168. ClientData = clientData,
  169. ClientCompanyData = clientCompanyData
  170. //PassportTypeData = _PassportTypeData
  171. };
  172. view.Code = StatusCodes.Status200OK;
  173. view.Data = _view;
  174. }
  175. else
  176. {
  177. view.Msg = "请传入有效的PortType参数,1 Web 2 Android 3 IOS!";
  178. }
  179. return view;
  180. }
  181. /// <summary>
  182. /// 根据Id查询Details
  183. /// </summary>
  184. /// <param name="portId"></param>
  185. /// <param name="id"></param>
  186. /// <returns></returns>
  187. public async Task<Result> _Details(int portId, int id)
  188. {
  189. if (portId == 1 || portId == 2 || portId == 3) // 1 web 2 Android 3 ios
  190. {
  191. string sql = string.Format(@"
  192. SELECT
  193. tcl.Id,
  194. tcl.DiId,
  195. tcl.IsAccompany,
  196. temp.*,
  197. tcl.ShippingSpaceTypeId,
  198. tcl.ShippingSpaceSpecialNeeds,
  199. tcl.HotelSpecialNeeds,
  200. tcl.MealSpecialNeeds,
  201. tcl.Remark
  202. FROM
  203. Grp_TourClientList tcl
  204. LEFT JOIN (
  205. SELECT
  206. dc.Id AS DcId,
  207. dc.LastName,
  208. dc.FirstName,
  209. dc.Pinyin,
  210. dc.Sex,
  211. ccom.CompanyFullName,
  212. dc.Job,
  213. cc1.CertNo AS IDCardNo,
  214. dc.Phone,
  215. dc.BirthDay,
  216. cc2.PassportType,
  217. cc2.CertNo AS PassportNo,
  218. cc2.Country,
  219. cc2.Area,
  220. cc2.IssueDt,
  221. cc2.ExpiryDt
  222. FROM
  223. Crm_DeleClient dc
  224. LEFT JOIN Crm_CustomerCompany ccom ON dc.CrmCompanyId = ccom.Id
  225. AND ccom.IsDel = 0
  226. LEFT JOIN Crm_CustomerCert cc1 ON dc.Id = cc1.DcId
  227. AND cc1.SdId = 773
  228. AND cc1.IsDel = 0
  229. LEFT JOIN Crm_CustomerCert cc2 ON dc.Id = cc2.DcId
  230. AND cc2.SdId = 774
  231. AND cc2.IsDel = 0
  232. WHERE
  233. dc.IsDel = 0
  234. ) temp ON temp.DcId = tcl.ClientId
  235. WHERE
  236. tcl.IsDel = 0
  237. AND tcl.Id = {0}", id);
  238. var data = await _sqlSugar.SqlQueryable<TourClientListDetailsView>(sql).FirstAsync();
  239. if (data != null)
  240. {
  241. EncryptionProcessor.DecryptProperties(data);
  242. data.BirthDay = data.BirthDay?.DateFormat("yyyy-MM-dd") ?? "";
  243. _result.Code = 0;
  244. _result.Data = data;
  245. }
  246. }
  247. else
  248. {
  249. _result.Msg = "请传入有效的PortType参数,1 Web 2 Android 3 IOS!";
  250. }
  251. return _result;
  252. }
  253. /// <summary>
  254. /// Add Or Edit
  255. /// </summary>
  256. /// <param name="portId"></param>
  257. /// <param name="id"></param>
  258. /// <returns></returns>
  259. public async Task<Result> _AddOrEdit(TourClientListAddOrEditDto dto)
  260. {
  261. if (string.IsNullOrEmpty(dto.CompanyFullName))
  262. {
  263. _result.Msg = "客户单位名称为空!";
  264. return _result;
  265. }
  266. //if (string.IsNullOrEmpty(dto.IDCardNo))
  267. //{
  268. // _result.Msg = "客户身份证No为空!";
  269. // return _result;
  270. //}
  271. if (dto.ShippingSpaceTypeId < 0)
  272. {
  273. _result.Msg = "舱位类型为空!";
  274. return _result;
  275. }
  276. if (dto.Id >= 0)
  277. {
  278. #region 参数处理
  279. _sqlSugar.BeginTran();
  280. int clientId = -1;
  281. int crmCompanyId = -1;
  282. string idNo = "", birthDay = "";
  283. int sex = -1;
  284. #region 身份证验证
  285. if (!string.IsNullOrEmpty(dto.IDCardNo))
  286. {
  287. var idBool = dto.IDCardNo.IsValidChineseId();
  288. if (idBool)
  289. {
  290. idNo = dto.IDCardNo;
  291. DateTime? birthDayDt = CommonFun.GetBirthDateFromIdentityCard(dto.IDCardNo);
  292. if (birthDayDt != null)
  293. {
  294. birthDay = birthDayDt?.ToString("yyyy-MM-dd") ?? "";
  295. }
  296. sex = CommonFun.GetGenderFromIdentityCard(dto.IDCardNo);
  297. }
  298. #region dto重新赋值
  299. if (string.IsNullOrEmpty(dto.BirthDay)) dto.BirthDay = birthDay;
  300. if (dto.Sex < 0) dto.Sex = sex;
  301. #endregion
  302. }
  303. #endregion
  304. EncryptionProcessor.EncryptProperties(dto);
  305. var clientInfo = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0
  306. && it.LastName.Equals(dto.LastName)
  307. && it.FirstName.Equals(dto.FirstName)
  308. //&& it.Phone.Equals(dto.Phone)
  309. ).FirstAsync();
  310. Crm_CustomerCompany _CustomerCompany = new Crm_CustomerCompany()
  311. {
  312. CompanyFullName = dto.CompanyFullName,
  313. LastedOpUserId = dto.UserId,
  314. CreateUserId = dto.UserId
  315. };
  316. Crm_CustomerCert _CustomerCert = new Crm_CustomerCert()
  317. {
  318. SdId = 773,
  319. CertNo = dto.IDCardNo,
  320. CreateUserId = dto.UserId
  321. };
  322. Crm_DeleClient _DeleClient = new Crm_DeleClient()
  323. {
  324. LastName = dto.LastName,
  325. FirstName = dto.FirstName,
  326. Pinyin = dto.Pinyin,
  327. Phone = dto.Phone,
  328. Sex = dto.Sex,
  329. BirthDay = dto.BirthDay == "" ? null : Convert.ToDateTime(dto.BirthDay),
  330. Job = dto.Job,
  331. CreateUserId = dto.UserId
  332. };
  333. //客户单位/公司 操作
  334. //1.添加 or 修改 公司基本信息
  335. if (clientInfo == null)
  336. {
  337. var companyInfo = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0 &&
  338. it.CompanyFullName.Equals(dto.CompanyFullName)
  339. ).FirstAsync();
  340. if (companyInfo != null) crmCompanyId = companyInfo.Id;
  341. else
  342. {
  343. var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
  344. if (companyAdd < 0)
  345. {
  346. _result.Msg = "客户公司信息添加失败!";
  347. _sqlSugar.RollbackTran();
  348. return _result;
  349. }
  350. crmCompanyId = companyAdd;
  351. }
  352. }
  353. else
  354. {
  355. var companyInfo = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0 &&
  356. it.CompanyFullName.Equals(dto.CompanyFullName)
  357. ).FirstAsync();
  358. if (companyInfo != null)
  359. {
  360. crmCompanyId = companyInfo.Id;
  361. if (companyInfo.CompanyFullName.Equals(dto.CompanyFullName))
  362. {
  363. companyInfo.CompanyFullName = _CustomerCompany.CompanyFullName;
  364. var companyEdit = await _sqlSugar.Updateable(companyInfo).UpdateColumns(it =>
  365. new
  366. {
  367. it.CompanyFullName,
  368. }
  369. )
  370. .Where(it => it.Id == companyInfo.Id)
  371. .ExecuteCommandAsync();
  372. if (companyEdit < 0)
  373. {
  374. _result.Msg = "客户公司信息修改失败!";
  375. _sqlSugar.RollbackTran();
  376. return _result;
  377. }
  378. }
  379. }
  380. else
  381. {
  382. var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
  383. if (companyAdd < 0)
  384. {
  385. _result.Msg = "客户公司信息添加失败!";
  386. _sqlSugar.RollbackTran();
  387. return _result;
  388. }
  389. crmCompanyId = companyAdd;
  390. }
  391. }
  392. _DeleClient.CrmCompanyId = crmCompanyId;
  393. //客户人员 操作
  394. //2.添加 or 修改 客户基本信息
  395. if (clientInfo != null) //该客户存在 修改信息
  396. {
  397. clientId = clientInfo.Id;
  398. var clientEdit = await _sqlSugar.Updateable(_DeleClient).UpdateColumns(it =>
  399. new
  400. {
  401. it.CrmCompanyId,
  402. it.LastName,
  403. it.FirstName,
  404. it.Pinyin,
  405. it.Job,
  406. it.Sex,
  407. it.Phone,
  408. it.BirthDay
  409. }
  410. )
  411. .Where(it => it.Id == clientId)
  412. .ExecuteCommandAsync();
  413. if (clientEdit < 0)
  414. {
  415. _result.Msg = "客户基础信息修改失败!";
  416. _sqlSugar.RollbackTran();
  417. return _result;
  418. }
  419. }
  420. else //不存在添加 客户信息
  421. {
  422. _DeleClient.CrmCompanyId = crmCompanyId;
  423. var clientAdd = await _sqlSugar.Insertable(_DeleClient).ExecuteReturnIdentityAsync();
  424. if (clientAdd < 0)
  425. {
  426. _result.Msg = "客户基本信息添加失败!";
  427. _sqlSugar.RollbackTran();
  428. return _result;
  429. }
  430. clientId = clientAdd;
  431. }
  432. //客户身份证操作
  433. //3.添加 or 修改 身份证信息
  434. _CustomerCert.DcId = clientId;
  435. if (clientInfo == null)
  436. {
  437. var certInfo = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 &&
  438. it.SdId == 773 && //卡类型 身份证
  439. it.CertNo == dto.IDCardNo //人员Id
  440. ).FirstAsync();
  441. if (certInfo == null)
  442. {
  443. var certAdd = await _sqlSugar.Insertable(_CustomerCert).ExecuteReturnIdentityAsync();
  444. if (certAdd < 0)
  445. {
  446. _result.Msg = "客户身份证添加失败!";
  447. _sqlSugar.RollbackTran();
  448. return _result;
  449. }
  450. }
  451. }
  452. else
  453. {
  454. var certInfo = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 &&
  455. it.SdId == 773 && //卡类型 身份证
  456. it.DcId == clientInfo.Id //人员Id
  457. ).FirstAsync();
  458. if (certInfo == null)
  459. {
  460. var certAdd = await _sqlSugar.Insertable(_CustomerCert).ExecuteReturnIdentityAsync();
  461. if (certAdd < 0)
  462. {
  463. _result.Msg = "客户身份证添加失败!";
  464. _sqlSugar.RollbackTran();
  465. return _result;
  466. }
  467. }
  468. else
  469. {
  470. var certEdit = await _sqlSugar.Updateable(_CustomerCert).UpdateColumns(it =>
  471. new
  472. {
  473. it.CertNo,
  474. }
  475. )
  476. .Where(it => it.Id == certInfo.Id)
  477. .ExecuteCommandAsync();
  478. if (certEdit < 0)
  479. {
  480. _result.Msg = "客户身份证修改失败!";
  481. _sqlSugar.RollbackTran();
  482. return _result;
  483. }
  484. }
  485. }
  486. //团组客户信息名单操作
  487. Grp_TourClientList _TourClientList = new Grp_TourClientList()
  488. {
  489. IsAccompany = dto.IsAccompany,
  490. DiId = dto.DiId,
  491. ClientId = clientId,
  492. ShippingSpaceTypeId = dto.ShippingSpaceTypeId,
  493. ShippingSpaceSpecialNeeds = dto.ShippingSpaceSpecialNeeds,
  494. HotelSpecialNeeds = dto.HotelSpecialNeeds,
  495. MealSpecialNeeds = dto.MealSpecialNeeds,
  496. Remark = dto.Remark ?? "",
  497. CreateUserId = dto.UserId
  498. };
  499. #endregion
  500. if (dto.Id == 0) // 添加
  501. {
  502. var tourClientAdd = await _sqlSugar.Insertable(_TourClientList).ExecuteReturnIdentityAsync();
  503. if (tourClientAdd < 0)
  504. {
  505. _result.Msg = "接团客户名单添加失败!";
  506. _sqlSugar.RollbackTran();
  507. return _result;
  508. }
  509. }
  510. else if (dto.Id > 0) //修改
  511. {
  512. var certEdit = await _sqlSugar.Updateable(_TourClientList).UpdateColumns(it =>
  513. new
  514. {
  515. it.IsAccompany,
  516. it.ClientId,
  517. it.ShippingSpaceTypeId,
  518. it.ShippingSpaceSpecialNeeds,
  519. it.HotelSpecialNeeds,
  520. it.MealSpecialNeeds,
  521. it.Remark,
  522. }
  523. )
  524. .Where(it => it.Id == dto.Id)
  525. .ExecuteCommandAsync();
  526. if (certEdit < 0)
  527. {
  528. _result.Msg = "接团客户名单失败修改!";
  529. _sqlSugar.RollbackTran();
  530. return _result;
  531. }
  532. }
  533. _result.Code = 0;
  534. _sqlSugar.CommitTran();
  535. }
  536. else
  537. {
  538. _result.Msg = "请传入有效的id参数!";
  539. }
  540. return _result;
  541. }
  542. /// <summary>
  543. /// AddMultiple
  544. /// 添加多个
  545. /// </summary>
  546. /// <param name="portId"></param>
  547. /// <param name="id"></param>
  548. /// <returns></returns>
  549. public async Task<Result> _AddMultiple(TourClientListAddMultipleDto dto)
  550. {
  551. if (dto.DiId < 0)
  552. {
  553. _result.Msg = string.Format(@"请传入有效的团组Id参数!");
  554. return _result;
  555. }
  556. List<TourClientListInfo> _TourClientListInfos = dto.TourClientListInfos;
  557. if (_TourClientListInfos == null || _TourClientListInfos.Count < 0)
  558. {
  559. _result.Msg = string.Format(@"接团客户名单信息集合为空,不执行批量添加!");
  560. return _result;
  561. }
  562. List<Crm_DeleClient> _DeleClients = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0).ToListAsync();
  563. List<Crm_CustomerCompany> _CustomerCompanies = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0).ToListAsync();
  564. List<Crm_CustomerCert> _CustomerCerts = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 && it.SdId == 773).ToListAsync(); // 身份证类型证件信息
  565. string _Msg = "";
  566. int _DiId = dto.DiId;
  567. int _UserId = dto.UserId;
  568. foreach (var item in _TourClientListInfos)
  569. {
  570. EncryptionProcessor.EncryptProperties(item);
  571. _sqlSugar.BeginTran();
  572. int companyId = -1;
  573. int clientId = -1;
  574. string clientName = string.Format(@"{0}{1}", item.LastName, item.FirstName);
  575. Crm_DeleClient _DeleClientInfo = _DeleClients.Where(it => it.LastName.Equals(item.LastName) &&
  576. it.FirstName.Equals(item.FirstName) &&
  577. it.Phone.Equals(item.Phone)).FirstOrDefault();
  578. if (_DeleClientInfo == null) //添加
  579. {
  580. if (!string.IsNullOrEmpty(item.CompanyFullName))
  581. {
  582. var companyInfo = _CustomerCompanies.Where(it => it.CompanyFullName.Equals(item.CompanyFullName)).FirstOrDefault();
  583. if (companyInfo != null) companyId = companyInfo.Id;
  584. else
  585. {
  586. Crm_CustomerCompany _CustomerCompany = new Crm_CustomerCompany()
  587. {
  588. CompanyFullName = item.CompanyFullName,
  589. LastedOpUserId = _UserId,
  590. CreateUserId = _UserId
  591. };
  592. var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
  593. if (companyAdd < 0)
  594. {
  595. _Msg += string.Format("{0} 公司信息添加失败!请前往客户信息确认!\r\n", clientName);
  596. }
  597. companyId = companyAdd;
  598. }
  599. }
  600. _DeleClientInfo = new Crm_DeleClient()
  601. {
  602. LastName = item.LastName,
  603. FirstName = item.FirstName,
  604. Pinyin = item.Pinyin,
  605. CrmCompanyId = companyId,
  606. Job = item.Job,
  607. Sex = item.Sex,
  608. Phone = item.Phone
  609. };
  610. //string temp_birthDay = "";
  611. DateTime tempDt_Birthday;
  612. bool b_birth = DateTime.TryParse(item.BirthDay, out tempDt_Birthday);
  613. _DeleClientInfo.BirthDay = b_birth ? tempDt_Birthday : null;
  614. var clientAdd = await _sqlSugar.Insertable(_DeleClientInfo).ExecuteReturnIdentityAsync();
  615. if (clientAdd < 0)
  616. {
  617. _Msg += string.Format("{0} 基本信息添加失败,本条客户名单不添加!请重新添加!\r\n", clientName);
  618. _sqlSugar.RollbackTran();
  619. continue;
  620. }
  621. clientId = clientAdd;
  622. if (!string.IsNullOrEmpty(item.IDCardNo))
  623. {
  624. Crm_CustomerCert _CustomerCert = _CustomerCerts.Where(it => it.DcId == clientId && it.CertNo.Equals(item.IDCardNo)).FirstOrDefault();
  625. if (_CustomerCert == null)
  626. {
  627. _CustomerCert = new Crm_CustomerCert()
  628. {
  629. DcId = clientId,
  630. SdId = 773,
  631. CertNo = item.IDCardNo,
  632. CreateUserId = _UserId,
  633. };
  634. var customerCertAdd = await _sqlSugar.Insertable(_CustomerCert).ExecuteCommandAsync();
  635. if (customerCertAdd < 0)
  636. {
  637. _Msg += string.Format("{0} 身份证信息添加失败!请前往客户信息确认!\r\n", clientName);
  638. }
  639. }
  640. }
  641. }
  642. else //修改客户基本信息
  643. {
  644. clientId = _DeleClientInfo.Id;
  645. if (!string.IsNullOrEmpty(item.CompanyFullName))
  646. {
  647. var companyInfo = _CustomerCompanies.Where(it => it.CompanyFullName.Equals(item.CompanyFullName)).FirstOrDefault();
  648. if (companyInfo != null) companyId = companyInfo.Id;
  649. else
  650. {
  651. Crm_CustomerCompany _CustomerCompany = new Crm_CustomerCompany()
  652. {
  653. CompanyFullName = item.CompanyFullName,
  654. LastedOpUserId = _UserId,
  655. CreateUserId = _UserId
  656. };
  657. var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnEntityAsync();
  658. if (companyAdd == null)
  659. {
  660. _Msg += string.Format("{0} 公司信息添加失败!请前往客户信息确认!\r\n", clientName);
  661. }
  662. _CustomerCompanies.Add(companyAdd);
  663. companyId = companyAdd.Id;
  664. }
  665. }
  666. Crm_DeleClient _DeleClient = new Crm_DeleClient() {
  667. CrmCompanyId = companyId,
  668. LastName = item.LastName,
  669. FirstName = item.FirstName,
  670. Pinyin = item.Pinyin,
  671. Sex = item.Sex,
  672. Phone = item.Phone
  673. };
  674. //string temp_birthDay = "";
  675. DateTime tempDt_Birthday;
  676. bool b_birth = DateTime.TryParse(item.BirthDay, out tempDt_Birthday);
  677. _DeleClient.BirthDay = b_birth ? tempDt_Birthday : null;
  678. var clientEdit = await _sqlSugar.Updateable(_DeleClient).UpdateColumns(it =>
  679. new
  680. {
  681. it.CrmCompanyId,
  682. it.LastName,
  683. it.FirstName,
  684. it.Sex,
  685. it.Phone,
  686. it.BirthDay
  687. }
  688. )
  689. .Where(it => it.Id == clientId)
  690. .ExecuteCommandAsync();
  691. if (clientEdit < 0)
  692. {
  693. _Msg += string.Format("{0} 基本信息修改失败,!请前往客户信息修改!\r\n", clientName);
  694. }
  695. }
  696. //团组客户信息名单操作
  697. Grp_TourClientList _TourClientList = new Grp_TourClientList()
  698. {
  699. DiId = _DiId,
  700. IsAccompany = item.IsAccompany,
  701. ClientId = clientId,
  702. ShippingSpaceTypeId = item.ShippingSpaceTypeId,
  703. CreateUserId = _UserId,
  704. ShippingSpaceSpecialNeeds = item.ShippingSpaceSpecialNeeds,
  705. HotelSpecialNeeds = item.HotelSpecialNeeds,
  706. MealSpecialNeeds = item.MealSpecialNeeds,
  707. Remark = item.Remark
  708. };
  709. //判断现有团组客户名单是否存在该客户
  710. var QuerFirstClient = _sqlSugar.Queryable<Grp_TourClientList>().First(x => x.ClientId == _TourClientList.ClientId && x.DiId == _TourClientList.DiId && x.IsDel == 0);
  711. if (QuerFirstClient != null)
  712. {
  713. QuerFirstClient.IsDel = 1;
  714. QuerFirstClient.DeleteUserId = dto.UserId;
  715. QuerFirstClient.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  716. var UpdateTrue = _sqlSugar.Updateable(QuerFirstClient).UpdateColumns(x => new { x.IsDel,x.DeleteUserId,x.DeleteTime}).ExecuteCommand() > 0;
  717. }
  718. var tourClientAdd = await _sqlSugar.Insertable(_TourClientList).ExecuteReturnIdentityAsync();
  719. if (tourClientAdd < 0)
  720. {
  721. _Msg += string.Format("{0} 接团客户名单添加失败!请检查数据完整性后重新添加!\r\n", clientName);
  722. _sqlSugar.RollbackTran();
  723. continue;
  724. }
  725. _sqlSugar.CommitTran();
  726. }
  727. if (!string.IsNullOrEmpty(_Msg)) _result.Msg = _Msg;
  728. else _result.Msg = string.Format("操作成功!");
  729. _result.Code = 0;
  730. return _result;
  731. }
  732. public async Task<Result> OperMultiple(List<TourClientListProcessInfo> _TourClientListInfos , int diid,int userId)
  733. {
  734. if (diid < 0)
  735. {
  736. _result.Msg = string.Format(@"请传入有效的团组Id参数!");
  737. return _result;
  738. }
  739. if (_TourClientListInfos == null || _TourClientListInfos.Count < 0)
  740. {
  741. _result.Msg = string.Format(@"接团客户名单信息集合为空,不执行批量添加!");
  742. return _result;
  743. }
  744. _sqlSugar.BeginTran();
  745. try
  746. {
  747. _sqlSugar.Updateable<Grp_TourClientList>().SetColumns(x=> new Grp_TourClientList { IsDel = 1 } ).Where(x=>x.DiId == diid).ExecuteCommand();
  748. foreach (var item in _TourClientListInfos)
  749. {
  750. EncryptionProcessor.EncryptProperties(item);
  751. //客户信息
  752. var clientInfo = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0 &&
  753. it.LastName.Equals(item.LastName) &&
  754. it.FirstName.Equals(item.FirstName) &&
  755. it.Phone.Equals(item.Phone)
  756. ).FirstAsync();
  757. Crm_CustomerCompany _CustomerCompany = new Crm_CustomerCompany()
  758. {
  759. CompanyFullName = item.CompanyFullName,
  760. LastedOpUserId = userId,
  761. CreateUserId = userId
  762. };
  763. Crm_CustomerCert _CustomerCert = new Crm_CustomerCert()
  764. {
  765. SdId = 773,
  766. CertNo = item.IDCardNo,
  767. CreateUserId = userId
  768. };
  769. Crm_DeleClient _DeleClient = new Crm_DeleClient()
  770. {
  771. LastName = item.LastName,
  772. FirstName = item.FirstName,
  773. Pinyin = item.Pinyin,
  774. Phone = item.Phone,
  775. Sex = item.Sex,
  776. BirthDay = string.IsNullOrEmpty(item.BirthDay) ? null : Convert.ToDateTime(item.BirthDay),
  777. Job = item.Job,
  778. CreateUserId = userId
  779. };
  780. int clientId = -1;
  781. int crmCompanyId = -1;
  782. //客户单位/公司 操作
  783. //1.添加 or 修改 公司基本信息
  784. if (clientInfo == null)
  785. {
  786. var companyInfo = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0 &&
  787. it.CompanyFullName.Equals(item.CompanyFullName)
  788. ).FirstAsync();
  789. if (companyInfo != null) crmCompanyId = companyInfo.Id;
  790. else
  791. {
  792. var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
  793. if (companyAdd < 0)
  794. {
  795. _result.Msg = "客户公司信息添加失败!";
  796. _sqlSugar.RollbackTran();
  797. return _result;
  798. }
  799. crmCompanyId = companyAdd;
  800. }
  801. }
  802. else
  803. {
  804. var companyInfo = await _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0 &&
  805. it.Id == clientInfo.CrmCompanyId
  806. ).FirstAsync();
  807. if (companyInfo != null)
  808. {
  809. crmCompanyId = companyInfo.Id;
  810. if (!companyInfo.CompanyFullName.Equals(item.CompanyFullName))
  811. {
  812. companyInfo.CompanyFullName = item.CompanyFullName;
  813. var companyEdit = await _sqlSugar.Updateable(companyInfo).UpdateColumns(it =>
  814. new
  815. {
  816. it.CompanyFullName,
  817. }
  818. )
  819. .Where(it => it.Id == companyInfo.Id)
  820. .ExecuteCommandAsync();
  821. if (companyEdit < 0)
  822. {
  823. _result.Msg = "客户公司信息修改失败!";
  824. _sqlSugar.RollbackTran();
  825. return _result;
  826. }
  827. }
  828. }
  829. else
  830. {
  831. var companyAdd = await _sqlSugar.Insertable(_CustomerCompany).ExecuteReturnIdentityAsync();
  832. if (companyAdd < 0)
  833. {
  834. _result.Msg = "客户公司信息添加失败!";
  835. _sqlSugar.RollbackTran();
  836. return _result;
  837. }
  838. crmCompanyId = companyAdd;
  839. }
  840. }
  841. //客户人员 操作
  842. //2.添加 or 修改 客户基本信息
  843. if (clientInfo != null) //该客户存在 修改信息
  844. {
  845. clientId = clientInfo.Id;
  846. _DeleClient.CrmCompanyId = crmCompanyId;
  847. var clientEdit = await _sqlSugar.Updateable(_DeleClient).UpdateColumns(it =>
  848. new
  849. {
  850. it.LastName,
  851. it.FirstName,
  852. it.Pinyin,
  853. it.Sex,
  854. it.Phone,
  855. it.BirthDay
  856. }
  857. )
  858. .Where(it => it.Id == clientId)
  859. .ExecuteCommandAsync();
  860. if (clientEdit < 0)
  861. {
  862. _result.Msg = "客户基础信息修改失败!";
  863. _sqlSugar.RollbackTran();
  864. return _result;
  865. }
  866. }
  867. else //不存在添加 客户信息
  868. {
  869. _DeleClient.CrmCompanyId = crmCompanyId;
  870. var clientAdd = await _sqlSugar.Insertable(_DeleClient).ExecuteReturnIdentityAsync();
  871. if (clientAdd < 0)
  872. {
  873. _result.Msg = "客户基本信息添加失败!";
  874. _sqlSugar.RollbackTran();
  875. return _result;
  876. }
  877. clientId = clientAdd;
  878. }
  879. //客户身份证操作
  880. //3.添加 or 修改 身份证信息
  881. _CustomerCert.DcId = clientId;
  882. if (clientInfo == null)
  883. {
  884. var certInfo = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 &&
  885. it.SdId == 773 && //卡类型 身份证
  886. it.CertNo == item.IDCardNo //人员Id
  887. ).FirstAsync();
  888. if (certInfo == null)
  889. {
  890. var certAdd = await _sqlSugar.Insertable(_CustomerCert).ExecuteReturnIdentityAsync();
  891. if (certAdd < 0)
  892. {
  893. _result.Msg = "客户身份证添加失败!";
  894. _sqlSugar.RollbackTran();
  895. return _result;
  896. }
  897. }
  898. }
  899. else
  900. {
  901. var certInfo = await _sqlSugar.Queryable<Crm_CustomerCert>().Where(it => it.IsDel == 0 &&
  902. it.SdId == 773 && //卡类型 身份证
  903. it.DcId == clientInfo.Id //人员Id
  904. ).FirstAsync();
  905. if (certInfo == null)
  906. {
  907. var certAdd = await _sqlSugar.Insertable(_CustomerCert).ExecuteReturnIdentityAsync();
  908. if (certAdd < 0)
  909. {
  910. _result.Msg = "客户身份证添加失败!";
  911. _sqlSugar.RollbackTran();
  912. return _result;
  913. }
  914. }
  915. else
  916. {
  917. var certEdit = await _sqlSugar.Updateable(_CustomerCert).UpdateColumns(it =>
  918. new
  919. {
  920. it.CertNo,
  921. }
  922. )
  923. .Where(it => it.Id == certInfo.Id)
  924. .ExecuteCommandAsync();
  925. if (certEdit < 0)
  926. {
  927. _result.Msg = "客户身份证修改失败!";
  928. _sqlSugar.RollbackTran();
  929. return _result;
  930. }
  931. }
  932. }
  933. //团组客户信息名单操作
  934. Grp_TourClientList _TourClientList = new Grp_TourClientList()
  935. {
  936. DiId = diid,
  937. ClientId = clientId,
  938. ShippingSpaceTypeId = item.ShippingSpaceTypeId,
  939. ShippingSpaceSpecialNeeds = item.ShippingSpaceSpecialNeeds,
  940. HotelSpecialNeeds = item.HotelSpecialNeeds,
  941. MealSpecialNeeds = item.MealSpecialNeeds,
  942. Remark = item.Remark,
  943. CreateUserId = userId,
  944. IsAccompany = item.IsAccompany,
  945. };
  946. var tourClientAdd = await _sqlSugar.Insertable(_TourClientList).ExecuteReturnIdentityAsync();
  947. if (tourClientAdd < 0)
  948. {
  949. _result.Msg = "接团客户名单添加失败!";
  950. _sqlSugar.RollbackTran();
  951. return _result;
  952. }
  953. }
  954. _result.Code = 0;
  955. _sqlSugar.CommitTran();
  956. }
  957. catch (Exception ex)
  958. {
  959. _sqlSugar.RollbackTran();
  960. _result.Msg = "程序异常 -- " + ex.Message;
  961. }
  962. return _result;
  963. }
  964. /// <summary>
  965. /// Del
  966. /// </summary>
  967. /// <param name="portId"></param>
  968. /// <param name="id"></param>
  969. /// <returns></returns>
  970. public async Task<Result> _Del(int id, int userId)
  971. {
  972. if (id > 0)
  973. {
  974. Grp_TourClientList _TourClientList = new Grp_TourClientList()
  975. {
  976. Id = id,
  977. IsDel = 1,
  978. DeleteUserId = userId,
  979. DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
  980. };
  981. var certEdit = await _sqlSugar.Updateable(_TourClientList).UpdateColumns(it =>
  982. new
  983. {
  984. it.IsDel,
  985. it.DeleteUserId,
  986. it.DeleteTime,
  987. }
  988. )
  989. .Where(it => it.Id == id)
  990. .ExecuteCommandAsync();
  991. if (certEdit < 0)
  992. {
  993. _result.Msg = string.Format(@"接团客户名单删除修改!");
  994. return _result;
  995. }
  996. _result.Code = 0;
  997. }
  998. else
  999. {
  1000. _result.Msg = string.Format(@"请传入有效的Id参数");
  1001. }
  1002. return _result;
  1003. }
  1004. /// <summary>
  1005. /// 分割客户名称
  1006. /// </summary>
  1007. /// <param name="ids"></param>
  1008. /// <returns></returns>
  1009. public string _ResolveCustomerName(string ids)
  1010. {
  1011. string clientStr = "";
  1012. if (string.IsNullOrEmpty(ids)) return clientStr;
  1013. var intList = new List<int>();
  1014. //if (ids.Contains(","))
  1015. //{
  1016. // string[] numbers = ids.Split(',');
  1017. // foreach (string numberStr in numbers)
  1018. // {
  1019. // if (int.TryParse(numberStr.Trim(), out int number))
  1020. // {
  1021. // intList.Add(number);
  1022. // }
  1023. // }
  1024. //}
  1025. //else
  1026. //{
  1027. // if (int.TryParse(ids.Trim(), out int number))
  1028. // {
  1029. // intList.Add(number);
  1030. // }
  1031. //}
  1032. string sql = string.Format(@$"Select * From Crm_DeleClient Where IsDel = 0 And Id In ({ids})");
  1033. var infos = _sqlSugar.SqlQueryable<Crm_DeleClient>(sql).ToList();
  1034. if (infos.Count > 0)
  1035. {
  1036. //解密
  1037. infos.ForEach(x => {
  1038. x.FirstName = AesEncryptionHelper.Decrypt(x.FirstName);
  1039. x.LastName = AesEncryptionHelper.Decrypt(x.LastName);
  1040. });
  1041. var infos1 = infos.Select(it => it.LastName + it.FirstName).ToList();
  1042. clientStr = string.Join(",", infos1);
  1043. }
  1044. return clientStr;
  1045. }
  1046. private class CustomerNameInfo
  1047. {
  1048. public int Id { get; set; }
  1049. public string Name { get; set; }
  1050. }
  1051. }
  1052. }