VisaProcessRepository.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. using AutoMapper;
  2. using OASystem.Domain;
  3. using OASystem.Domain.Dtos.Groups;
  4. using OASystem.Domain.Entities.Groups;
  5. using OASystem.Domain.ViewModels.Groups;
  6. using OASystem.Infrastructure.Tools;
  7. namespace OASystem.Infrastructure.Repositories.Groups
  8. {
  9. /// <summary>
  10. /// 签证流程步骤仓储
  11. /// </summary>
  12. public class VisaProcessRepository : BaseRepository<Grp_VisaProcessSteps, Grp_VisaProcessSteps>
  13. {
  14. private readonly IMapper _mapper;
  15. public VisaProcessRepository(SqlSugarClient sqlSugar, IMapper mapper)
  16. : base(sqlSugar)
  17. {
  18. _mapper = mapper;
  19. }
  20. /// <summary>
  21. /// 创建签证流程步骤
  22. /// </summary>
  23. /// <param name="groupId"></param>
  24. /// <param name="createUderId"></param>
  25. /// <returns></returns>
  26. public async Task<Result> Create(int createUderId,int groupId)
  27. {
  28. //团组有效验证
  29. var groupIsValid = await _sqlSugar.Queryable<Grp_DelegationInfo>()
  30. .Where(g => g.Id == groupId && g.IsDel == 0)
  31. .AnyAsync();
  32. if (!groupIsValid)
  33. {
  34. return new Result(400, "团组无效,无法创建签证流程步骤。");
  35. }
  36. var existingSteps = await _sqlSugar.Queryable<Grp_VisaProcessSteps>()
  37. .Where(s => s.GroupId == groupId && s.IsDel == 0)
  38. .AnyAsync();
  39. if (existingSteps)
  40. {
  41. return new Result(400, "该团组的签证流程步骤已存在,无法重复创建。");
  42. }
  43. var steps = Grp_VisaProcessSteps.StepsInit(groupId, createUderId);
  44. var add = await _sqlSugar.Insertable(steps).ExecuteCommandAsync();
  45. if (add < 1) return new Result(400, "签证流程步骤创建失败。");
  46. return new Result(200,"Success");
  47. }
  48. /// <summary>
  49. /// 签证流程 Info
  50. /// </summary>
  51. /// <param name="dto"></param>
  52. /// <param name="createUderId"></param>
  53. /// <returns></returns>
  54. public async Task<Result> Info(VisaProcessInfoByGroupIdDto dto)
  55. {
  56. //团组有效验证
  57. //var groupIsValid = await _sqlSugar.Queryable<Grp_DelegationInfo>()
  58. // .Where(g => g.Id == dto.GroupId && g.IsDel == 0)
  59. // .AnyAsync();
  60. //if (!groupIsValid)
  61. //{
  62. // return new Result(400, "团组无效,无法查询签证流程步骤。");
  63. //}
  64. var query = await _sqlSugar.Queryable<Grp_VisaProcessSteps>()
  65. .Where(s => s.GroupId == dto.GroupId && s.IsDel == 0)
  66. .OrderBy(s => s.Step)
  67. .ToListAsync();
  68. var infos = query.Select(s => new
  69. {
  70. s.Id,
  71. s.GroupId,
  72. s.Step,
  73. s.DataType,
  74. s.TypedValue,
  75. //s.StoreVal,
  76. s.IsCompleted,
  77. s.AttachUrl,
  78. s.TypedFileNameValue,
  79. s.Remark
  80. }).ToList();
  81. string msg = "Success";
  82. //如果不存在,则返回默认数据
  83. if (infos == null || infos.Count < 1)
  84. {
  85. infos = Grp_VisaProcessSteps.StepsInit(dto.GroupId, 208)
  86. .Select(s => new {
  87. s.Id,
  88. s.GroupId,
  89. s.Step,
  90. s.DataType,
  91. s.TypedValue,
  92. //s.StoreVal,
  93. s.IsCompleted,
  94. s.AttachUrl,
  95. s.TypedFileNameValue,
  96. s.Remark
  97. }).ToList();
  98. msg = "签证流程步骤信息不存在,展示默认数据。";
  99. }
  100. //数据按照类型处理
  101. var datas = new List<object>();
  102. var view = new VisaProcessStepsInfoView();
  103. foreach (var item in infos)
  104. {
  105. if (item.DataType == "string")
  106. {
  107. var info = new VisaProcessStepsInfoByStringView
  108. {
  109. Id = item.Id,
  110. GroupId = item.GroupId,
  111. Step = item.Step,
  112. DataType = item.DataType,
  113. TypedValue = item.TypedValue == null ? "" : item.TypedValue.ToString(),
  114. //StoreVal = item.StoreVal,
  115. IsCompleted = item.IsCompleted,
  116. AttachUrl = item.TypedFileNameValue,
  117. Remark = item.Remark
  118. };
  119. if (item.Step == 1) view.Step1 = info;
  120. else if (item.Step == 2) view.Step2 = info;
  121. else if (item.Step == 3) view.Step3 = info;
  122. else if (item.Step == 4) view.Step4 = info;
  123. else if (item.Step == 5) view.Step5 = info;
  124. else if (item.Step == 8) view.Step8 = info;
  125. datas.Add(info);
  126. }
  127. else if (item.DataType == "bool")
  128. {
  129. bool boolVal = false;
  130. if (item.TypedValue != null)
  131. {
  132. boolVal = (bool)item.TypedValue;
  133. }
  134. var info = new VisaProcessStepsInfoByBoolView
  135. {
  136. Id = item.Id,
  137. GroupId = item.GroupId,
  138. Step = item.Step,
  139. DataType = item.DataType,
  140. TypedValue = boolVal,
  141. IsCompleted = item.IsCompleted,
  142. AttachUrl = item.TypedFileNameValue,
  143. Remark = item.Remark
  144. };
  145. if (item.Step == 6) view.Step6 = info;
  146. datas.Add(info);
  147. }
  148. else if (item.DataType == "string[]")
  149. {
  150. var listVal = new List<string>();
  151. var contnet = new VisaProcessSteps7Content() { IsSelected = false };
  152. if (item.TypedValue != null)
  153. {
  154. listVal = item.TypedValue switch
  155. {
  156. List<string> stringList => stringList,
  157. IEnumerable<string> stringEnumerable => stringEnumerable.ToList(),
  158. string str => new List<string> { str },
  159. IEnumerable<object> objectEnumerable => objectEnumerable.Select(x => x?.ToString() ?? "").ToList(),
  160. _ => new List<string> { item.TypedValue.ToString() ?? "" }
  161. };
  162. if (listVal != null && listVal.Count > 0)
  163. {
  164. contnet.IsSelected = bool.TryParse(CommonFun.GetValueOrDefault(listVal,0), out _);
  165. contnet.ProjectedDate = CommonFun.GetValueOrDefault(listVal, 1);
  166. }
  167. }
  168. var info = new VisaProcessStepsInfoByListView
  169. {
  170. Id = item.Id,
  171. GroupId = item.GroupId,
  172. Step = item.Step,
  173. DataType = item.DataType,
  174. TypedValue = contnet,
  175. IsCompleted = item.IsCompleted,
  176. AttachUrl = item.TypedFileNameValue,
  177. Remark = item.Remark
  178. };
  179. if (item.Step == 7) view.Step7 = info;
  180. datas.Add(info);
  181. }
  182. }
  183. if (dto.PortType == 2 )
  184. {
  185. return new Result(200, msg, infos);
  186. }
  187. return new Result(200, msg, view);
  188. }
  189. /// <summary>
  190. /// 修改签证流程步骤
  191. /// </summary>
  192. /// <param name="groupId"></param>
  193. /// <param name="createUderId"></param>
  194. /// <returns></returns>
  195. public async Task<Result> Update(Grp_VisaProcessSteps info)
  196. {
  197. var update = await _sqlSugar.Updateable<Grp_VisaProcessSteps>()
  198. .SetColumns(s => new Grp_VisaProcessSteps
  199. {
  200. StoreVal = info.StoreVal,
  201. //AttachUrl = info.AttachUrl,
  202. //IsCompleted = info.IsCompleted,
  203. LastUpdateUserId = info.LastUpdateUserId,
  204. LastUpdateTime = DateTime.Now,
  205. Remark = info.Remark
  206. })
  207. .Where(s => s.Id == info.Id && s.IsDel == 0)
  208. .ExecuteCommandAsync();
  209. if (update < 1) return new Result(400, "更新失败!");
  210. return new Result(200, "Success");
  211. }
  212. /// <summary>
  213. /// 批量修改top4Steps
  214. /// </summary>
  215. /// <param name="infos"></param>
  216. /// <returns></returns>
  217. public async Task<Result> UpdateBatchTop4Step(int groupId,int currUserId)
  218. {
  219. var steps = new List<int>() {
  220. 1, //签证启动日
  221. 2, //分配工作
  222. 3, //送外办时间
  223. 4, //预计出签时间
  224. };
  225. var visaSteps = await _sqlSugar.Queryable<Grp_VisaProcessSteps>()
  226. .Where(s => s.GroupId == groupId && s.IsDel == 0 && steps.Contains(s.Step))
  227. .ToListAsync();
  228. if (visaSteps.Count < 1) return new Result(400, "签证流程信息不存在。");
  229. //倒推表信息
  230. var invertedInfo = await _sqlSugar.Queryable<Grp_InvertedList>()
  231. .Where(i => i.DiId == groupId && i.IsDel == 0)
  232. .FirstAsync();
  233. if (invertedInfo == null) return new Result(400, "倒推表信息不存在。");
  234. //设置操作人和时间
  235. foreach (var item in visaSteps)
  236. {
  237. //默认确认完成
  238. item.IsCompleted = true;
  239. item.LastUpdateUserId = currUserId;
  240. item.LastUpdateTime = DateTime.Now;
  241. }
  242. //step=1 设置启动日值
  243. visaSteps.FirstOrDefault(x => x.Step == 1).TypedValue = DateTime.Now.ToString("yyyy-MM-dd");
  244. //step=2 分配工作
  245. visaSteps.FirstOrDefault(x => x.Step == 2).TypedValue = invertedInfo.IssueApprovalDt;
  246. //step=3 送外办时间
  247. visaSteps.FirstOrDefault(x => x.Step == 3).TypedValue = invertedInfo.SendVisaDt;
  248. //step=4 预计出签时间
  249. visaSteps.FirstOrDefault(x => x.Step == 4).TypedValue = invertedInfo.IssueVisaDt;
  250. var update = await _sqlSugar.Updateable(visaSteps)
  251. .UpdateColumns(it => new { it.StoreVal, it.LastUpdateUserId,it.LastUpdateTime })
  252. .ExecuteCommandAsync();
  253. if (update < 1) return new Result(400, "更新失败!");
  254. return new Result(200, "Success");
  255. }
  256. /// <summary>
  257. /// 设置已完成的步骤
  258. /// </summary>
  259. /// <param name="id"></param>
  260. /// <param name="currUserId"></param>
  261. /// <param name="isCompleted"></param>
  262. /// <returns></returns>
  263. public async Task<Result> SetCompleted(int id, int currUserId, bool isCompleted = true)
  264. {
  265. //步骤信息验证
  266. var stepInfo = await _sqlSugar.Queryable<Grp_VisaProcessSteps>()
  267. .Where(s => s.Id == id && s.IsDel == 0 && s.IsCompleted == isCompleted)
  268. .FirstAsync();
  269. if (stepInfo != null) return new Result(400, "步骤信息已完成,无法重复设置。");
  270. var update = await _sqlSugar.Updateable<Grp_VisaProcessSteps>()
  271. .SetColumns(s => new Grp_VisaProcessSteps
  272. {
  273. IsCompleted = isCompleted,
  274. LastUpdateUserId = currUserId,
  275. LastUpdateTime = DateTime.Now
  276. })
  277. .Where(s => s.Id == id && s.IsDel == 0 && !s.IsCompleted)
  278. .ExecuteCommandAsync();
  279. if (update < 1) return new Result(400, "状态设置失败!");
  280. return new Result(200, "Success");
  281. }
  282. }
  283. }