ImportTemplateService.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. using DapperORMCore.Context.DataContext;
  2. using DapperORMCore.Model.BaseModel;
  3. using DapperORMCore.Model.CoreModel;
  4. using DapperORMCore.Repository.IRepositorys;
  5. using DapperORMCore.String.Consts;
  6. using DapperORMCore.String.Enums;
  7. using Microsoft.Extensions.Configuration;
  8. using NXWMS.Code;
  9. using NXWMS.DataAccess.Entity;
  10. using NXWMS.IService.NXWMS.Rule;
  11. using NXWMS.Model.AppModels.Condition.Rule;
  12. using NXWMS.Model.AppModels.Result.Rule;
  13. using NXWMS.Model.Common;
  14. using NXWMS.String.Enums;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Linq;
  18. using System.Text;
  19. using System.Threading.Tasks;
  20. using WestDistance.DapperORM.Repository.Repositorys;
  21. namespace NXWMS.Service.NXWMS.Rule
  22. {
  23. /// <summary>
  24. /// 导入模版
  25. /// </summary>
  26. [AutoInject(typeof(IImportTemplateService), InjectType.Scope)]
  27. public class ImportTemplateService : ServiceBase, IImportTemplateService
  28. {
  29. /// <summary>
  30. /// 系统操作仓储中转
  31. /// </summary>
  32. private IDataRepositoryContext _dataContext;
  33. /// <summary>
  34. /// SQL节点仓储
  35. /// </summary>
  36. private ISQLNodeRepository _iSQLNodeRepository;
  37. /// <summary>
  38. /// 配置
  39. /// </summary>
  40. private IConfiguration _configuration;
  41. public ImportTemplateService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
  42. {
  43. this._dataContext = dataRepositoryContext;
  44. this._configuration = configuration;
  45. this._iSQLNodeRepository = iSQLNodeRepository;
  46. }
  47. public OperateResultInfo<List<ImportTemplateDetailResult>> GetDetailList(ImportTemplateDetailSearchCondition info)
  48. {
  49. if (string.IsNullOrWhiteSpace(info.TemplateCode))
  50. {
  51. return FailMessageStatus("参数错误!", new List<ImportTemplateDetailResult>());
  52. }
  53. var sqlAndBuilder = new StringBuilder();
  54. var sql = $@"SELECT
  55. CreateName = (SELECT USER_NAME FROM SYS_USER A WHERE A.USER_ID=CREATE_BY),
  56. UpdateName = (SELECT USER_NAME FROM SYS_USER B WHERE B.USER_ID=UPDATE_BY),
  57. UsedFlagName = {_iSQLNodeRepository.GetEnumIntCaseString<UsedFlag>("USED_FLAG", "BAS_IMPORT_TEMPLATE")},
  58. SourceTypeName = {_iSQLNodeRepository.GetEnumStrCaseString<SourceType>("SOURCE_TYPE")},
  59. SourceRequiredFlagName = {_iSQLNodeRepository.GetEnumIntCaseString<RequiredFlag>("SOURCE_REQUIRED_FLAG")},
  60. TargetTypeName = {_iSQLNodeRepository.GetEnumStrCaseString<TargetType>("TARGET_TYPE")},
  61. TargetRequiredFlagName = {_iSQLNodeRepository.GetEnumIntCaseString<RequiredFlag>("TARGET_REQUIRED_FLAG")},
  62. TargetRelationTypeName = {_iSQLNodeRepository.GetEnumStrCaseString<ImportTemplateRelationType>("TARGET_RELATION_TYPE")},
  63. BAS_IMPORT_TEMPLATE.IMPORT_TEMPLATE_CODE,BAS_IMPORT_TEMPLATE.IMPORT_TEMPLATE_NAME,
  64. BAS_IMPORT_TEMPLATE_DTL.*
  65. FROM BAS_IMPORT_TEMPLATE_DTL
  66. JOIN BAS_IMPORT_TEMPLATE ON BAS_IMPORT_TEMPLATE_DTL.IMPORT_TEMPLATE_ID=BAS_IMPORT_TEMPLATE_DTL.IMPORT_TEMPLATE_ID
  67. WHERE 1=1 AND BAS_IMPORT_TEMPLATE.DEL_FLAG = 0 AND BAS_IMPORT_TEMPLATE.USED_FLAG=1 AND BAS_IMPORT_TEMPLATE_DTL.USED_FLAG=1
  68. AND BAS_IMPORT_TEMPLATE.IMPORT_TEMPLATE_CODE='{info.TemplateCode}'";
  69. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  70. var result = new DataRepository<ImportTemplateDetailResult>(_dataContext).Query(sql);
  71. return SuccessStatus(result.ToList());
  72. }
  73. public OperateResultInfo<PageQueryResultInfo<ImportTemplateResult>> GetList(ImportTemplateSearchCondition info)
  74. {
  75. var sqlAndBuilder = new StringBuilder();
  76. var sqlOrBuilder = new StringBuilder();
  77. var sql = $@"SELECT
  78. CreateName = (SELECT USER_NAME FROM SYS_USER A WHERE A.USER_ID=CREATE_BY),
  79. UpdateName = (SELECT USER_NAME FROM SYS_USER B WHERE B.USER_ID=UPDATE_BY),
  80. UsedFlagName = {_iSQLNodeRepository.GetEnumIntCaseString<UsedFlag>("USED_FLAG")},
  81. ImportModeName = {_iSQLNodeRepository.GetEnumStrCaseString<ImportTemplateMode>("IMPORT_MODE")},
  82. SourceObjTypeName = {_iSQLNodeRepository.GetEnumStrCaseString<SourceObjectType>("SOURCE_OBJECT_TYPE")},
  83. {info.ItemSQL} FROM BAS_IMPORT_TEMPLATE WHERE 1=1 AND DEL_FLAG = 0";
  84. sqlAndBuilder = string.IsNullOrWhiteSpace(info.TemplateCode) ?
  85. sqlAndBuilder :
  86. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IMPORT_TEMPLATE_CODE", info.TemplateCode, DBOperationString._ContainIn));
  87. sqlAndBuilder = string.IsNullOrWhiteSpace(info.TemplateName) ?
  88. sqlAndBuilder :
  89. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IMPORT_TEMPLATE_NAME", info.TemplateName, DBOperationString._ContainIn));
  90. sqlAndBuilder = string.IsNullOrWhiteSpace(info.SourceObjName) ?
  91. sqlAndBuilder :
  92. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SOURCE_OBJECT_NAME", info.SourceObjName, DBOperationString._ContainIn));
  93. sqlAndBuilder = string.IsNullOrWhiteSpace(info.ImportMode) ?
  94. sqlAndBuilder :
  95. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IMPORT_MODE", info.ImportMode, DBOperationString._Equal));
  96. sqlAndBuilder = info.IsUsed == null ?
  97. sqlAndBuilder :
  98. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("USED_FLAG", info.IsUsed, DBOperationString._Equal));
  99. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  100. IEnumerable<ImportTemplateResult> result;
  101. IEnumerable<ImportTemplateResult> totalResult;
  102. totalResult = new DataRepository<ImportTemplateResult>(_dataContext).Query(sql);
  103. if (info.PageIndex == 0 || info.PageSize == 0)
  104. {
  105. result = totalResult.ToList();
  106. }
  107. else
  108. {
  109. result = new DataRepository<ImportTemplateResult>(_dataContext).QueryPage(sql,
  110. "CREATE_TIME", info.PageSize, info.PageIndex, true);
  111. }
  112. return SuccessStatus(new PageQueryResultInfo<ImportTemplateResult>
  113. {
  114. RowData = result,
  115. PageConditionInfo = info,
  116. TotalCount = totalResult.Count(),
  117. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  118. });
  119. }
  120. public OperateResultInfo Add(ImportTemplateCondition info)
  121. {
  122. if (new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Query().Where(m => m.IMPORT_TEMPLATE_CODE == info.TemplateCode
  123. && m.DEL_FLAG == 0 && m.USED_FLAG == 1).Any())
  124. {
  125. return FailMessageStatus("导入模版编码已经存在,请输入其它编码!");
  126. }
  127. var affectedRows = 0;
  128. try
  129. {
  130. _dataContext.BeginTran();
  131. var now = DateTime.Now;
  132. var templateId =
  133. new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Query().Count() == 0 ? 1 :
  134. new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Query().Select(s => s.IMPORT_TEMPLATE_ID).Max() + 1;
  135. var entity = new BAS_IMPORT_TEMPLATE
  136. {
  137. CREATE_BY = info.OperationUserId,
  138. CREATE_TIME = now,
  139. UPDATE_BY = info.OperationUserId,
  140. UPDATE_TIME = now,
  141. USED_FLAG = Convert.ToInt32(info.IsUsed),
  142. DESCRIBE = info.Describe,
  143. DEL_FLAG = 0,
  144. IMPORT_MODE = info.ImportMode,
  145. IMPORT_TEMPLATE_CODE = info.TemplateCode,
  146. TARGET_OBJECT_CODE = info.SourceObjCode,
  147. TARGET_OBJECT_NAME = info.SourceObjName,
  148. TARGET_OBJECT_TYPE = info.SourceObjType,
  149. IMPORT_TEMPLATE_NAME = info.TemplateName,
  150. IMPORT_TEMPLATE_ID = templateId,
  151. };
  152. new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Add(entity);
  153. foreach (var item in info.DetailList)
  154. {
  155. var permission = new BAS_IMPORT_TEMPLATE_DTL
  156. {
  157. CREATE_TIME = now,
  158. UPDATE_TIME = now,
  159. CREATE_BY = info.OperationUserId,
  160. UPDATE_BY = info.OperationUserId,
  161. DEL_FLAG = 0,
  162. DESCRIBE = item.Describe,
  163. IMPORT_TEMPLATE_CODE = info.TemplateCode,
  164. IMPORT_TEMPLATE_ID = templateId,
  165. SOURCE_CODE = item.SourceCode,
  166. SOURCE_REQUIRED_FLAG = item.SourceRequiredFlag,
  167. SOURCE_LENGTH = item.SourceLength,
  168. SOURCE_NAME = item.SourceName,
  169. SOURCE_TYPE = item.SourceType,
  170. TARGET_CODE = item.TargetCode,
  171. TARGET_LENGTH = item.TargetLength,
  172. TARGET_NAME = item.TargetName,
  173. TARGET_RELATION_CONTENT = item.TargetRelationContent,
  174. TARGET_RELATION_TYPE = item.TargetRelationType,
  175. TARGET_REQUIRED_FLAG = item.TargetRequiredFlag,
  176. TARGET_TYPE = item.TargetType,
  177. USED_FLAG = 1,
  178. };
  179. affectedRows = affectedRows + new DataRepository<BAS_IMPORT_TEMPLATE_DTL>(_dataContext).Add(permission,
  180. new string[1] { "IMPORT_TEMPLATE_DTL_ID" });
  181. }
  182. if (affectedRows != info.DetailList.Count)
  183. {
  184. _dataContext.Rollback();
  185. return GetStatus(affectedRows, info.DetailList.Count);
  186. }
  187. }
  188. catch (Exception ex)
  189. {
  190. _dataContext.Rollback();
  191. return FailStatus(ex.Message);
  192. }
  193. _dataContext.Commit();
  194. return GetStatus(affectedRows);
  195. }
  196. public OperateResultInfo Deleted(ImportTemplateCondition info)
  197. {
  198. var sqlAndBuilder = new StringBuilder();
  199. var sql = $@"SELECT {info.ItemSQL} FROM BAS_IMPORT_TEMPLATE WHERE 1=1 AND DEL_FLAG = 0 ";
  200. sqlAndBuilder = info.TemplateId == null ?
  201. sqlAndBuilder :
  202. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IMPORT_TEMPLATE_ID", info.TemplateId, DBOperationString._Equal));
  203. sqlAndBuilder = string.IsNullOrWhiteSpace(info.TemplateCode) ?
  204. sqlAndBuilder :
  205. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IMPORT_TEMPLATE_CODE", info.TemplateCode, DBOperationString._Equal));
  206. sqlAndBuilder = string.IsNullOrWhiteSpace(info.TemplateCode) ?
  207. sqlAndBuilder :
  208. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IMPORT_TEMPLATE_ID", info.TemplateIds, DBOperationString._In));
  209. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  210. var result = new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Query(sql);
  211. if (!result.Any())
  212. {
  213. return FailMessageStatus("参数错误");
  214. }
  215. var now = DateTime.Now;
  216. var affectedRows = 0;
  217. foreach(var item in result)
  218. {
  219. sql = $@"UPDATE BAS_IMPORT_TEMPLATE SET DEL_FLAG=1,UPDATE_BY={info.OperationUserId},UPDATE_TIME='{now}'
  220. WHERE IMPORT_TEMPLATE_ID={item.IMPORT_TEMPLATE_ID}";
  221. affectedRows = new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Execute(sql);
  222. sql = $@"UPDATE BAS_IMPORT_TEMPLATE_DTL SET DEL_FLAG=1,UPDATE_BY={info.OperationUserId},UPDATE_TIME='{now}'
  223. WHERE IMPORT_TEMPLATE_ID={item.IMPORT_TEMPLATE_ID}";
  224. affectedRows = new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Execute(sql);
  225. }
  226. return SuccessStatus();
  227. }
  228. public OperateResultInfo Edit(ImportTemplateCondition info)
  229. {
  230. if (!new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Query().Where(m => m.IMPORT_TEMPLATE_CODE == info.TemplateCode
  231. && m.DEL_FLAG == 0 && m.USED_FLAG == 1).Any())
  232. {
  233. return FailMessageStatus("导入模版编码不存在,请检查!");
  234. }
  235. var affectedRows = 0;
  236. try
  237. {
  238. _dataContext.BeginTran();
  239. var now = DateTime.Now;
  240. var whereList = new List<FieldKeyInfo>()
  241. .AddFieldKeyInfo(nameof(BAS_IMPORT_TEMPLATE.IMPORT_TEMPLATE_CODE),
  242. info.TemplateCode, EnumCSharpPropertyType.STRING, DBOperationString._Equal,
  243. !string.IsNullOrWhiteSpace(info.TemplateCode))
  244. .AddFieldKeyInfo(nameof(BAS_IMPORT_TEMPLATE.IMPORT_TEMPLATE_ID),
  245. info.TemplateId, EnumCSharpPropertyType.INT, DBOperationString._Equal,
  246. info.TemplateId != null);
  247. var result = new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Query(whereList).FirstOrDefault();
  248. if (result == null)
  249. {
  250. return FailMessageStatus("参数错误");
  251. }
  252. var entity = new BAS_IMPORT_TEMPLATE
  253. {
  254. IMPORT_TEMPLATE_ID = result.IMPORT_TEMPLATE_ID,
  255. DESCRIBE = info.Describe,
  256. USED_FLAG = info.IsUsed ? 1 : 0
  257. };
  258. new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Update(entity, "IMPORT_TEMPLATE_ID", "NEWID");
  259. foreach (var item in new DataRepository<BAS_IMPORT_TEMPLATE_DTL>(_dataContext).Query("IMPORT_TEMPLATE_ID",
  260. result.IMPORT_TEMPLATE_ID.ToString()).ToList())
  261. {
  262. var entitydtl = new BAS_IMPORT_TEMPLATE_DTL
  263. {
  264. IMPORT_TEMPLATE_ID = result.IMPORT_TEMPLATE_ID,
  265. UPDATE_TIME = now,
  266. DEL_FLAG = 1,
  267. UPDATE_BY = info.OperationUserId,
  268. IMPORT_TEMPLATE_DTL_ID = item.IMPORT_TEMPLATE_DTL_ID,
  269. };
  270. new DataRepository<BAS_IMPORT_TEMPLATE_DTL>(_dataContext).Update(entitydtl, "IMPORT_TEMPLATE_DTL_ID", "NEWID");
  271. }
  272. foreach (var item in info.DetailList)
  273. {
  274. //新增
  275. if (item.TemplateDetailId == null)
  276. {
  277. var dtlEntity = new BAS_IMPORT_TEMPLATE_DTL
  278. {
  279. CREATE_TIME = now,
  280. UPDATE_TIME = now,
  281. CREATE_BY = info.OperationUserId,
  282. UPDATE_BY = info.OperationUserId,
  283. DEL_FLAG = 0,
  284. DESCRIBE = item.Describe,
  285. IMPORT_TEMPLATE_CODE = result.IMPORT_TEMPLATE_CODE,
  286. IMPORT_TEMPLATE_ID = result.IMPORT_TEMPLATE_ID,
  287. SOURCE_CODE = item.SourceCode,
  288. SOURCE_LENGTH = item.SourceLength,
  289. SOURCE_NAME = item.SourceName,
  290. SOURCE_TYPE = item.SourceType,
  291. SOURCE_REQUIRED_FLAG = item.SourceRequiredFlag,
  292. TARGET_CODE = item.TargetCode,
  293. TARGET_LENGTH = item.TargetLength,
  294. TARGET_NAME = item.TargetName,
  295. TARGET_RELATION_CONTENT = item.TargetRelationContent,
  296. TARGET_RELATION_TYPE = item.TargetRelationType,
  297. TARGET_REQUIRED_FLAG = item.TargetRequiredFlag,
  298. TARGET_TYPE = item.TargetType,
  299. USED_FLAG = 1,
  300. };
  301. affectedRows = affectedRows + new DataRepository<BAS_IMPORT_TEMPLATE_DTL>
  302. (_dataContext).Add(dtlEntity, new string[1] { "IMPORT_TEMPLATE_DTL_ID" });
  303. }
  304. //修改
  305. else
  306. {
  307. var itemDetail = new DataRepository<BAS_IMPORT_TEMPLATE_DTL>(_dataContext).Query("IMPORT_TEMPLATE_DTL_ID",
  308. item.TemplateDetailId.ToString()).FirstOrDefault();
  309. itemDetail.SOURCE_CODE = item.SourceCode;
  310. itemDetail.SOURCE_LENGTH = item.SourceLength;
  311. itemDetail.SOURCE_NAME = item.SourceName;
  312. itemDetail.SOURCE_TYPE = item.SourceType;
  313. itemDetail.SOURCE_REQUIRED_FLAG = item.SourceRequiredFlag;
  314. itemDetail.TARGET_CODE = item.TargetCode;
  315. itemDetail.TARGET_LENGTH = item.TargetLength;
  316. itemDetail.TARGET_NAME = item.TargetName;
  317. itemDetail.TARGET_RELATION_CONTENT = item.TargetRelationContent;
  318. itemDetail.TARGET_RELATION_TYPE = item.TargetRelationType;
  319. itemDetail.TARGET_REQUIRED_FLAG = item.TargetRequiredFlag;
  320. itemDetail.TARGET_TYPE = item.TargetType;
  321. itemDetail.UPDATE_BY = info.OperationUserId;
  322. itemDetail.DEL_FLAG = 0;
  323. itemDetail.UPDATE_TIME = now;
  324. affectedRows = affectedRows + new DataRepository<BAS_RULE_DTL>(_dataContext).Update(itemDetail,
  325. "RULE_DTL_ID", "NEWID");
  326. }
  327. }
  328. if (affectedRows != info.DetailList.Count)
  329. {
  330. _dataContext.Rollback();
  331. return GetStatus(affectedRows, info.DetailList.Count);
  332. }
  333. _dataContext.Commit();
  334. return SuccessStatus();
  335. }
  336. catch (Exception ex)
  337. {
  338. _dataContext.Rollback();
  339. return FailStatus(ex.Message);
  340. }
  341. }
  342. public OperateResultInfo Remove(ImportTemplateCondition info)
  343. {
  344. if (string.IsNullOrWhiteSpace(info.TemplateCode) && info.TemplateId == null)
  345. {
  346. return FailMessageStatus("参数错误!");
  347. }
  348. var sqlAndBuilder = new StringBuilder();
  349. var sqlOrBuilder = new StringBuilder();
  350. var sql = $@"SELECT {info.ItemSQL} FROM BAS_IMPORT_TEMPLATE WHERE 1=1 AND DEL_FLAG = 0 ";
  351. sqlAndBuilder = string.IsNullOrWhiteSpace(info.TemplateCode) ?
  352. sqlAndBuilder :
  353. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IMPORT_TEMPLATE_CODE", info.TemplateCode, DBOperationString._Equal));
  354. sqlAndBuilder = info.TemplateId != null ?
  355. sqlAndBuilder :
  356. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IMPORT_TEMPLATE_ID", info.TemplateId, DBOperationString._Equal));
  357. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  358. var result = new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Query(sql);
  359. if (result.Count() != 1)
  360. {
  361. return FailMessageStatus("参数错误!");
  362. }
  363. new DataRepository<BAS_IMPORT_TEMPLATE>(_dataContext).Remove("IMPORT_TEMPLATE_ID", result.FirstOrDefault().IMPORT_TEMPLATE_ID.ToString());
  364. new DataRepository<BAS_IMPORT_TEMPLATE_DTL>(_dataContext).Remove("IMPORT_TEMPLATE_ID", result.FirstOrDefault().IMPORT_TEMPLATE_ID.ToString());
  365. return SuccessStatus();
  366. }
  367. }
  368. }