OrderSnapshotApplication.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. using Abp;
  2. using DataTransmission.Entity;
  3. using DataTransmission.Joint;
  4. using Mapster.Utils;
  5. using SnapshotWinFormsApp.Application.Dtos;
  6. using SnapshotWinFormsApp.Application.Interfaces;
  7. using SnapshotWinFormsApp.Entities.NewHotline;
  8. using SnapshotWinFormsApp.Entities.OldHotline;
  9. using SnapshotWinFormsApp.Repository;
  10. using SnapshotWinFormsApp.Repository.Enum;
  11. using SnapshotWinFormsApp.Repository.Interfaces;
  12. using SnapshotWinFormsApp.Tools;
  13. using SqlSugar;
  14. using SqlSugar.Extensions;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.ComponentModel;
  18. using System.Data;
  19. using System.Linq;
  20. using System.Text;
  21. using System.Threading.Tasks;
  22. namespace SnapshotWinFormsApp.Application;
  23. [Description("随手拍工单")]
  24. public class OrderSnapshotApplication : IImportApplication
  25. {
  26. private readonly ITargetRepository<OrderSnapshot> _orderSnapshotRepo;
  27. private readonly ISourceRepository<Flow03_SearchEntity, int> _oldOrderRepo;
  28. private readonly DbSqlServer _dbSqlServer;
  29. private Config config = new Config();
  30. private readonly ITargetRepository<Citizen> _snapshotUserInfoRepo;
  31. private readonly ITargetRepository<Industry> _industryRepo;
  32. private readonly List<Industry> industries;
  33. private readonly ITargetRepository<CommunityInfo> _communityInfoRepo;
  34. private readonly List<CommunityInfo> communityInfos;
  35. private readonly ITargetRepository<Entities.NewHotline.User> _userRepo;
  36. private readonly List<Entities.NewHotline.User> _users;
  37. private readonly ITargetRepository<SystemDicData> _systemDicDataRepo;
  38. private readonly List<SystemDicData> snapshotOrderLabels;
  39. public OrderSnapshotApplication(CreateInstanceInDto inDto)
  40. {
  41. _dbSqlServer = inDto.DbSqlServer;
  42. _orderSnapshotRepo = new TargetRepository<OrderSnapshot>(inDto);
  43. _oldOrderRepo = new SourceRepository<Flow03_SearchEntity, int>(inDto);
  44. _snapshotUserInfoRepo = new TargetRepository<Citizen>(inDto);
  45. _industryRepo = new TargetRepository<Industry>(inDto);
  46. industries = _industryRepo.Queryable().ToList();
  47. _communityInfoRepo = new TargetRepository<CommunityInfo>(inDto);
  48. communityInfos = _communityInfoRepo.Queryable().ToList();
  49. _userRepo = new TargetRepository<Entities.NewHotline.User>(inDto);
  50. _users = _userRepo.Queryable().ToList();
  51. _systemDicDataRepo = new TargetRepository<SystemDicData>(inDto);
  52. snapshotOrderLabels = _systemDicDataRepo.Queryable().Where(m => m.DicTypeCode == "SnapshotOrderLabel").ToList();
  53. config.Name = "自贡市";
  54. config.CenterId = "2";
  55. config.Paseword = "AQAAAAIAAYagAAAAEJZNauXWsvzHDvSCLEwNjA3qVJcQqEHAexlWDg6ONJJtK5hDNnL8gwwXxwZW5YszfA==";
  56. config.ModuleId = "2430d69a-59df-46a1-b155-85e69cfba010";
  57. }
  58. public async Task ImportAsync(Action<string> log, CancellationToken token)
  59. {
  60. var order = new DataTransmission.Joint.Order();
  61. DataTransmission.Joint.Workflow workflow = new DataTransmission.Joint.Workflow();
  62. Public _public = new Public();
  63. Visit visit = new Visit();
  64. Delay delay = new Delay();
  65. var sql = GetOrderSql();
  66. var items = _oldOrderRepo.GetDataTable(sql.sql, sql.parameters);
  67. var data = items.AsEnumerable().CopyToDataTable();
  68. DataTable org = GetPgOrganize();
  69. DataTable user = GetPgUser();
  70. foreach (DataRow row in data.Rows)
  71. {
  72. log(row["FSH_Title_ys"].ToString() + " " + row["受理内容"] + " " + row["FSH_LinkTel"]);
  73. var pgOrder = _orderSnapshotRepo.GetDataTable($@" SELECT * from ""order"" where ""No"" ='{row["FSH_Code"]}'; ");
  74. if (pgOrder != null && pgOrder.Rows.Count > 0)
  75. {
  76. continue;
  77. }
  78. var orderId = SequentialGuidGenerator.Instance.Create().ToString("D");
  79. var VisitId = SequentialGuidGenerator.Instance.Create().ToString("D");
  80. var module = _orderSnapshotRepo.GetDataTable($@" SELECT * from ""workflow_module"" ; ");
  81. var definition = _orderSnapshotRepo.GetDataTable($@"SELECT * FROM workflow_definition WHERE ""Status"" =1 ; ");
  82. //工单
  83. var pgOrderSql = order.GetOrderISql(row, orderId, org, user, config);
  84. await InsertOrderSnapshotAsync(row, orderId, token);
  85. //工单流程
  86. var orderModule = module.AsEnumerable().FirstOrDefault(x => x.Field<string>("Code").ToString() == "OrderHandle");
  87. var pgOrderWorkflow = GetWorkflow(row["FSH_FlowID"].ToString(), "CityHotline");
  88. var pgOrderWorkflowSql = workflow.GetWorkflowSql(pgOrderWorkflow, row, orderId, org, user, orderModule, null, config);
  89. //发布
  90. var publicTable = GetOldPublic(row["FSH_FlowID"].ToString());
  91. var publicSql = _public.GetOldPublicSql(publicTable, row, orderId, org, user, config);
  92. //回访
  93. var appraiseTable = GetVisit(row["FSH_FlowID"].ToString());
  94. var visitSql = visit.GetVisitSql(appraiseTable, row, VisitId, orderId, org, user, config);
  95. //延期
  96. var delayTable = GetDelay(row["FSH_FlowID"].ToString());
  97. var delayModule = module.AsEnumerable().FirstOrDefault(x => x.Field<string>("Code").ToString() == "OrderDelay");
  98. var delaySql = delay.GetDelaySql(delayTable, row, orderId, org, user, delayModule, config);
  99. var pgSql = pgOrderSql;
  100. pgSql = pgOrderWorkflowSql.Length > 0 ? pgSql + pgOrderWorkflowSql : pgSql;
  101. pgSql = publicSql.Length > 0 ? pgSql + publicSql : pgSql;
  102. pgSql = visitSql.Length > 0 ? pgSql + visitSql : pgSql;
  103. pgSql = delaySql.Length > 0 ? pgSql + delaySql : pgSql;
  104. await _orderSnapshotRepo.ExecuteSqlAsync(pgSql);
  105. }
  106. }
  107. public async Task InsertOrderSnapshotAsync(DataRow row,string orderId, CancellationToken token)
  108. {
  109. var userId = _snapshotUserInfoRepo.Queryable().Where(m => m.PhoneNumber == row["FSH_LinkTel"].ToString()).Select(m => m.Id).First();
  110. var industryId = industries.FirstOrDefault(m => m.Name == row["FSH_IndustryName"].ToString())?.Id;
  111. var community = communityInfos.FirstOrDefault(m => m.Id == row["FSH_SSPAreaID"].ToString());
  112. var snapshot = new OrderSnapshot();
  113. snapshot.Id = orderId;
  114. snapshot.IndustryId = industryId;
  115. snapshot.IndustryName = row["FSH_IndustryName"].ToString();
  116. snapshot.CommunityId = row["FSH_SSPAreaID"].ToString();
  117. snapshot.CommunityName = community?.Name;
  118. snapshot.CommunityFullName = community?.FullName;
  119. snapshot.JobType = row["WEA_OperationType"].ToString() == "电焊" ? 0 : 1;
  120. snapshot.JobTypeName = row["WEA_OperationType"].ToString();
  121. snapshot.BusinessUnitType = row["WEA_CompanyType"].ToString(); // 经营单位类别
  122. snapshot.Workplace = row["WEA_OperationPlace"].ToString(); // 作业场所
  123. snapshot.WorkplaceName = row["WEA_PlaceTypeName"].ToString(); // 场所名称(多个场所使用 - 连接)
  124. snapshot.WorkArea = row["WEA_AreaFullName"].ToString(); // 作业区域
  125. snapshot.WorkAreaId = row["WEA_AreaID"].ToString(); // 作业区域Id
  126. snapshot.StartWorkTime = row["WEA_OperationStartTime"].ObjToDate(); // 作业时间
  127. snapshot.EndWorkTime = row["WEA_OperationEndTime"].ObjToDate(); // 作业时间
  128. snapshot.IsEmphasis = false; // 是否重点
  129. snapshot.IsSafetyDepartment = row["STL_TagType"] == null ? null : row["STL_TagType"].ToString() == "1" ? true : false; // 部门标记是否安全生产
  130. snapshot.SignUserId = GetUserId(row["STL_AddUserID"]); // 标记人
  131. snapshot.SignUserName = row["STL_UserName"].ToString(); // 标记人
  132. snapshot.SignTime = row["STL_AddDate"].ObjToDate(); // 标记时间
  133. snapshot.SignRemark = row["STL_TagRemark"].ToString(); // 标记备注
  134. snapshot.IsDangerDepartment = row["FSH_ReplyIsBMTrue"].ToString() == "1" ? true : false; // 部门是否存在安全隐患
  135. snapshot.IsTruthDepartment = null; // 部门是否属实
  136. snapshot.IsRectifyDepartment = row["FSH_IsRectification"].ToString() == "1" ? true : false; // 部门是否整改
  137. snapshot.IndustryCase = row["FSH_IndustryIDType"].ToString(); // 线索分类
  138. snapshot.IsAppOpened = false; // 小程序公开
  139. snapshot.LabelName = row["SWLS_TypeName"].ToString(); // 工单标签(多个使用 | 分隔)
  140. snapshot.LabelUserName = GetUserName(row["SWLS_AddUserID"]); // 标签用户
  141. snapshot.LabelUserId = GetUserId(row["SWLS_AddUserID"]); // 标签用户Id
  142. snapshot.LabelTime = row["SWLS_AddDate"].ObjToDate(); // 标签时间
  143. snapshot.IsAward = null; // 是否申请追加奖励
  144. snapshot.AwardOpenBank = null; // 追加奖励人开户银行
  145. snapshot.AwardName = null; // 追加奖励人姓名
  146. snapshot.AwardBankCardNo = null; // 追加奖励人银行卡号
  147. snapshot.AwardAmount = null; // 追加奖励金额(元)
  148. snapshot.ReplenishTypeId = null; // 补充奖励类型
  149. snapshot.ReplenishTypeName = null; // 补充奖励类型
  150. snapshot.VerifyType = null; // 核实方式
  151. snapshot.IsCheckList = row["FSH_Checklist"].ObjToBool(); // 是否按清单检查
  152. snapshot.GuiderAccLog = null; // 网格员系统交互日志
  153. snapshot.DeadLine = null; // 网格员回复截止日期
  154. snapshot.NetworkENumber = row["FSH_SSPCode"].ToString(); // 网格E通编号
  155. snapshot.IsTruth = row["FPC_ISTrue"].ToString() == "1"; // 网格员是否属实
  156. snapshot.IsRepetition = row["isRepeat"].ToString() == "1"; // 是否重复
  157. snapshot.IsDanger = row["isHiddenDanger"].ToString() == "1"; // 是否隐患
  158. snapshot.NetworkRemark = row["FPC_Content"].ToString(); // 网格员回复内容
  159. snapshot.ReplyDate = row["FPC_AcceptDate"].ObjToDate(); // 网格员办理时间
  160. snapshot.MemberName = row["memberName"].ToString(); // 网格员姓名
  161. snapshot.MemberMobile = row["memberMobile"].ToString(); // 网格员电话
  162. snapshot.ReplyUserName = null; // 办理人账号
  163. snapshot.ReplyBMName = null; // 办理部门
  164. snapshot.ReplyResultType = row["FPC_ResultType"].ObjToInt(); // 网格员办理状态
  165. snapshot.CompanyName = null; // 购气单位/个人名称
  166. snapshot.SendGuidSystemTime = row["FPC_AcceptDate"].ObjToDate(); // 发送网格员系统时间
  167. snapshot.GuidSystemCallBackTime = row["FPC_InsertDate"].ObjToDate(); // 网格员系统回调时间
  168. snapshot.IsGuidSystemCallBack = row["FPC_ID"] != null; // 网格员系统是否回调
  169. snapshot.SpecialReasonId = null; // 重办原因Id
  170. snapshot.SpecialReasonName = null; // 重办原因
  171. var typeName = row["SWLS_TypeName"].ToString();
  172. if (typeName.NotNullOrEmpty())
  173. {
  174. var labelId = snapshotOrderLabels.Where(m => m.DicDataName == typeName).FirstOrDefault();
  175. var labels = new Kv { Key = labelId.DicDataValue, Value = labelId.DicDataName};
  176. snapshot.Labels = new List<Kv> { labels };
  177. }
  178. if (snapshot.NetworkENumber.NotNullOrEmpty())
  179. snapshot.IsDeal = true; // 网格员是否办理
  180. switch (row["FSH_SSPAreaID"].ToString())
  181. {
  182. case "1":
  183. snapshot.CompliantType = ECompliantType.First;
  184. break;
  185. case "2":
  186. snapshot.CompliantType = ECompliantType.Second;
  187. break;
  188. case "3":
  189. snapshot.CompliantType = ECompliantType.Third;
  190. break;
  191. case "0":
  192. snapshot.CompliantType = ECompliantType.Not;
  193. break;
  194. default:
  195. snapshot.CompliantType = null;
  196. break;
  197. }
  198. await _orderSnapshotRepo.InsertAsync(snapshot, token);
  199. }
  200. public string GetUserId(object oldId)
  201. {
  202. return _users.FirstOrDefault(m => m.OldUserId == oldId.ObjToInt())?.Id;
  203. }
  204. public string GetUserName(object oldId)
  205. {
  206. return _users.FirstOrDefault(m => m.OldUserId == oldId.ObjToInt())?.Name;
  207. }
  208. public DataTable GetDelay(string flowId)
  209. {
  210. var sql = $@" SELECT * FROM dbo.Flow11_Postpone WHERE FPE_FlowID = {flowId} AND FPE_AuditFlag IN (1) ";
  211. return _oldOrderRepo.GetDataTable(sql);
  212. }
  213. public DataTable GetVisit(string flowId)
  214. {
  215. var appraiseSql = $@"SELECT * FROM dbo.Flow18_AppraiseList FA
  216. LEFT JOIN dbo.Flow15_PubList FP ON FA.FALT_FlowID =FP.FPLT_FlowID
  217. LEFT JOIN dbo.Flow18_AppraiseExpand FAE ON FAE.FAED_FALTID = FA.FALT_ListID
  218. LEFT JOIN SYS15_DICT SD ON SD.SDICT_Key='Appraise_DissType' AND SD.SDICT_PID!=0 AND FAE.FAED_DissTypeID = SD.SDICT_ID
  219. LEFT JOIN dbo.SYS09_BMDIR SBM ON FA.FALT_AppBMID = SBM.SBM_ID
  220. WHERE FALT_FlowID = {flowId} AND FA.FALT_AppFlag = 1 ";
  221. return _oldOrderRepo.GetDataTable(appraiseSql);
  222. }
  223. public DataTable GetOldPublic(string oldOrderId)
  224. {
  225. var sql = $@" SELECT * FROM Flow16_PubIdea FP
  226. LEFT JOIN Flow03_Search FS ON FP.FPIA_FlowID = FS.FSH_FlowID
  227. LEFT JOIN Flow15_PubList FPL ON FP.FPIA_FlowID = FPL.FPLT_FlowID
  228. WHERE FP.FPIA_FlowID ='{oldOrderId}';";
  229. return _oldOrderRepo.GetDataTable(sql);
  230. }
  231. public DataTable GetWorkflow(string OldOrderId, string StoreCode)
  232. {
  233. var orderSql = $@"SELECT * FROM Flow_Transfer01_RunBackups FTR
  234. LEFT JOIN Flow_Set01_Store FSS ON FTR.FTRB_StoreID = FSS.FSL_StoreID
  235. LEFT JOIN Flow03_Search FS ON FTR.FTRB_FlowID = FS.FSH_FlowID
  236. WHERE FTRB_FlowID ='{OldOrderId}' AND FSS.FSL_Code ='{StoreCode}' ORDER BY FTRB_MoveDate ";
  237. return _oldOrderRepo.GetDataTable(orderSql);
  238. }
  239. public DataTable GetPgOrganize()
  240. {
  241. var sql = $@" SELECT * FROM system_organize ";
  242. return _orderSnapshotRepo.GetDataTable(sql);
  243. }
  244. public DataTable GetPgUser()
  245. {
  246. var sql = $@" SELECT * FROM ""user"" ";
  247. return _orderSnapshotRepo.GetDataTable(sql);
  248. }
  249. private (string sql, List<SugarParameter> parameters) GetOrderSql()
  250. {
  251. var parameters = new List<SugarParameter>
  252. {
  253. new SugarParameter("@st_time", DateTime.Now.AddDays(-5)),
  254. new SugarParameter("@end_time", DateTime.Now)
  255. };
  256. return ("SELECT ROW_NUMBER() OVER (ORDER BY FSH_FlowID) AS Serial, CHPRCI.RCI_FlowID,*,REPLACE(CAST(FCT.FCT_Content AS NVARCHAR(MAX)),CHAR(13)+CHAR(10), '') 受理内容, CASE WHEN ISNULL(FSH_DisposeDate, GETDATE()) > FSH_TTime THEN '超期' WHEN ISNULL(FSH_DisposeDate, GETDATE()) > FSH_EightyTTime THEN '即将超期' ELSE '正常' END AS FSH_OverTimeState, REPLACE(REPLACE(FSH_Title, '</font>', ''), '<font color=mediumorchid>', '') AS FSH_Title_ys, REPLACE(CAST(ISNULL(FTC2.FTC_RRemark,FTRB.FTRB_RRemark) AS NVARCHAR(MAX)),CHAR(13)+CHAR(10), '') 承办意见 FROM dbo.Flow03_Search FSH LEFT JOIN Flow02_From FRM ON FSH.FSH_FromID = FRM.FFM_FromID LEFT JOIN dbo.Flow05_LinkMan FLM ON FSH.FSH_FlowID = FLM.FLM_FlowID LEFT JOIN dbo.Flow01_Type FT ON FT.FTE_TypeFlag =2 AND FSH.FSH_ConTypeID = FT.FTE_TypeID LEFT JOIN dbo.SYS19_Area SA ON FSH.FSH_AreaID = SA.SA_AreaID LEFT JOIN dbo.Flow04_Expand FED ON FSH.FSH_FlowID = FED.FED_FlowID LEFT JOIN Flow06_Content FCT WITH(NOLOCK) ON FCT.FCT_FlowID = FSH.FSH_FlowID LEFT JOIN dbo.Flow18_AppraiseList FAL ON FSH.FSH_FlowID = FAL.FALT_FlowID LEFT JOIN Flow_Transfer04_Specialty FTS WITH(NOLOCK) ON FTS.FTS_FlowID = FSH.FSH_FlowID LEFT JOIN Flow_Transfer02_Content FTC2 WITH(NOLOCK) ON FTC2.FTC_RunID = FTS.FTS_RunID LEFT JOIN Flow_Transfer01_RunBackups FTRB WITH(NOLOCK) ON FTS.FTS_RunID =FTRB.FTRB_RunID LEFT JOIN CityHotline_Province.dbo.receive_case_info CHPRCI ON CHPRCI.RCI_FlowID = FSH.FSH_FlowID LEFT JOIN ZG_CityHotline_Web.dbo.Web09_FlowAccept Web09_FlowAccept ON Web09_FlowAccept.WFAT_SyncFlowID = FSH.FSH_FlowID LEFT JOIN ZG_CityHotline_Web.dbo.Web60_EGWAccept Web60_EGWAccept ON Web60_EGWAccept.WEA_AcceptID = Web09_FlowAccept.WFAT_AcceptID LEFT JOIN ZG_CityHotline_Ver3.dbo.SSP_TagLog SSP_TagLog ON SSP_TagLog.STL_FlowID = FTS.FTS_FlowID LEFT JOIN ZG_CityHotline_Ver3.dbo.SSP_WorkLabelSign LabelSign ON LabelSign.SWLS_FlowID = FSH.FSH_FlowID LEFT JOIN ZG_CityHotline_Ver3.dbo.Flow03_PushContent PushContent ON PushContent.FPC_Code = FSH_Code WHERE FSH_AddDate >= @st_time AND FSH_AddDate <= @end_time AND ISNULL(FAL.FALT_ListID,0) > 0 AND FAL.FALT_AppFlag ='1' AND (FSH_FromID = 25 OR FSH_FromID = 26);", parameters);
  257. }
  258. }