BinService.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  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.Base;
  11. using NXWMS.Model.AppModels.Condition.Base;
  12. using NXWMS.Model.AppModels.Result.Base;
  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.Base
  22. {
  23. /// <summary>
  24. /// 库位服务
  25. /// </summary>
  26. [AutoInject(typeof(IBinService), InjectType.Scope)]
  27. public class BinService : ServiceBase, IBinService
  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 BinService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
  42. {
  43. this._dataContext = dataRepositoryContext;
  44. this._configuration = configuration;
  45. this._iSQLNodeRepository = iSQLNodeRepository;
  46. }
  47. public OperateResultInfo Add(BinCondition info)
  48. {
  49. if (info == null)
  50. {
  51. return FailStatus();
  52. }
  53. if (string.IsNullOrWhiteSpace(info.RegionCode) || string.IsNullOrWhiteSpace(info.BinType) || string.IsNullOrWhiteSpace(info.AreaCode) ||
  54. string.IsNullOrWhiteSpace(info.WarehouseCode) || string.IsNullOrWhiteSpace(info.RegionCode) || string.IsNullOrWhiteSpace(info.ShelfCode) ||
  55. info.BinRow == null || info.BinColumn == null || info.BinLayer == null)
  56. {
  57. return FailMessageStatus("参数错误!");
  58. }
  59. var regionData = new DataRepository<BAS_REGION>(_dataContext).Query().Where(m => m.REGION_CODE == info.RegionCode
  60. && m.DEL_FLAG == 0 && m.USED_FLAG == 1).FirstOrDefault();
  61. if (regionData == null)
  62. {
  63. return FailMessageStatus("库区编码错误!");
  64. }
  65. var areaData = new DataRepository<BAS_AREA>(_dataContext).Query().Where(m => m.AREA_CODE == info.AreaCode
  66. && m.DEL_FLAG == 0 && m.USED_FLAG == 1).FirstOrDefault();
  67. if (areaData == null)
  68. {
  69. return FailMessageStatus("请选择正确可使用的库区编码!");
  70. }
  71. //TODO货架排录入界面没做,暂时注释
  72. //var shelfData = new DataRepository<BAS_SHELF>(_dataContext).Query().Where(m => m.SHELF_CODE == info.ShelfCode
  73. // && m.DEL_FLAG == 0 && m.USED_FLAG == 1).FirstOrDefault();
  74. //if (shelfData == null)
  75. //{
  76. // return FailMessageStatus("请选择正确可使用的货架排!");
  77. //}
  78. var WarehouseData = new DataRepository<BAS_WAREHOUSE>(_dataContext).Query().Where(m => m.WAREHOUSE_CODE == info.WarehouseCode
  79. && m.DEL_FLAG == 0 && m.USED_FLAG == 1).FirstOrDefault();
  80. if (WarehouseData == null)
  81. {
  82. return FailMessageStatus("请选择正确可使用的仓库编码!");
  83. }
  84. var now = DateTime.Now;
  85. var entity = new BAS_BIN
  86. {
  87. CREATE_BY = info.OperationUserId,
  88. CREATE_TIME = now,
  89. UPDATE_BY = info.OperationUserId,
  90. UPDATE_TIME = now,
  91. REGION_CODE = info.RegionCode,
  92. REGION_NAME = regionData.REGION_NAME,
  93. AREA_CODE = info.AreaCode,
  94. AREA_NAME = areaData.AREA_NAME,
  95. WAREHOUSE_CODE = info.WarehouseCode,
  96. WAREHOUSE_NAME = WarehouseData.WAREHOUSE_NAME,
  97. DESCRIBE = info.Describe,
  98. USED_FLAG = Convert.ToInt32(info.IsUsed),
  99. DEL_FLAG = 0,
  100. DOWN_SHELF_ORDER = info.DownShelfOrder,
  101. BIN_CODE = info.BinCode,
  102. BIN_COLUMN = info.BinColumn.Value,
  103. BIN_LAYER = info.BinLayer.Value,
  104. BIN_NAME = info.BinName,
  105. BLEND_BATCH_FLAG = Convert.ToInt32(info.IsBlendBatch),
  106. BIN_ROW = info.BinRow.Value,
  107. BLEND_PRODUCT_FLAG = Convert.ToInt32(info.IsBlendProduct),
  108. PUT_SHELF_ORDER = info.PutShelfOrder,
  109. SHELF_CODE = info.ShelfCode,
  110. BIN_TYPE = info.BinType,
  111. WIDTH = info.Wide,
  112. HEIGHT = info.Height,
  113. LENGTH = info.Length,
  114. NUMBER_LIMIT = info.NumberLimit,
  115. SHELF_NAME = "", //shelfData.SHELF_NAME, //TODO 货架排录入数据没做,暂时放空
  116. TRAR_LIMIT = info.TrarLimit,
  117. VOLUME_LIMIT = info.VolumnLimit,
  118. WEIGHT_LIMIT = info.WeightLimit,
  119. };
  120. var affectedRows = new DataRepository<BAS_BIN>(_dataContext).Add(entity, new string[1] { "BIN_ID" });
  121. return GetStatus(affectedRows);
  122. }
  123. public OperateResultInfo Deleted(BinCondition info)
  124. {
  125. var sqlAndBuilder = new StringBuilder();
  126. sqlAndBuilder = info.Id != null ?
  127. info.Id > 0 ?
  128. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_ID", info.Id, DBOperationString._Equal)) :
  129. sqlAndBuilder : sqlAndBuilder;
  130. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BinCode) ?
  131. sqlAndBuilder :
  132. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_CODE", info.BinCode, DBOperationString._Equal));
  133. sqlAndBuilder = string.IsNullOrWhiteSpace(info.Ids) ?
  134. sqlAndBuilder :
  135. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_ID", info.Ids, DBOperationString._In));
  136. if (sqlAndBuilder.Length == 0)
  137. {
  138. return FailMessageStatus("参数错误!");
  139. }
  140. var now = DateTime.Now;
  141. var sql = $@"UPDATE BAS_BIN SET DEL_FLAG=1,UPDATE_BY={info.OperationUserId},UPDATE_TIME='{now}'
  142. WHERE 1=1 {sqlAndBuilder}";
  143. var affectedRows = new DataRepository<BAS_BIN>(_dataContext).Execute(sql);
  144. return GetStatus(affectedRows, info.Ids.Split(',').Length);
  145. }
  146. public OperateResultInfo Edit(BinCondition info)
  147. {
  148. if (info == null)
  149. {
  150. return FailStatus();
  151. }
  152. if (string.IsNullOrWhiteSpace(info.RegionCode) || string.IsNullOrWhiteSpace(info.BinType) || string.IsNullOrWhiteSpace(info.AreaCode) ||
  153. string.IsNullOrWhiteSpace(info.WarehouseCode) || string.IsNullOrWhiteSpace(info.RegionCode) || string.IsNullOrWhiteSpace(info.ShelfCode) ||
  154. info.BinRow == null || info.BinColumn == null || info.BinLayer == null)
  155. {
  156. return FailMessageStatus("参数错误!");
  157. }
  158. var regionData = new DataRepository<BAS_REGION>(_dataContext).Query().Where(m => m.REGION_CODE == info.RegionCode
  159. && m.DEL_FLAG == 0 && m.USED_FLAG == 1).FirstOrDefault();
  160. if (regionData == null)
  161. {
  162. return FailMessageStatus("库位编码已经存在,请输入其它编码!");
  163. }
  164. var areaData = new DataRepository<BAS_AREA>(_dataContext).Query().Where(m => m.AREA_CODE == info.AreaCode
  165. && m.DEL_FLAG == 0 && m.USED_FLAG == 1).FirstOrDefault();
  166. if (areaData == null)
  167. {
  168. return FailMessageStatus("请选择正确可使用的库区编码!");
  169. }
  170. ////TODO货架排录入界面没做,暂时注释
  171. //var shelfData = new DataRepository<BAS_SHELF>(_dataContext).Query().Where(m => m.SHELF_CODE == info.ShelfCode
  172. // && m.DEL_FLAG == 0 && m.USED_FLAG == 1).FirstOrDefault();
  173. //if (shelfData == null)
  174. //{
  175. // return FailMessageStatus("请选择正确可使用的货架排!");
  176. //}
  177. var WarehouseData = new DataRepository<BAS_WAREHOUSE>(_dataContext).Query().Where(m => m.WAREHOUSE_CODE == info.WarehouseCode
  178. && m.DEL_FLAG == 0 && m.USED_FLAG == 1).FirstOrDefault();
  179. if (WarehouseData == null)
  180. {
  181. return FailMessageStatus("请选择正确可使用的仓库编码!");
  182. }
  183. var whereList = new List<FieldKeyInfo>()
  184. .AddFieldKeyInfo(nameof(BAS_BIN.BIN_CODE), info.BinCode, EnumCSharpPropertyType.STRING, DBOperationString._Equal,
  185. string.IsNullOrWhiteSpace(info.BinCode))
  186. .AddFieldKeyInfo(nameof(BAS_BIN.BIN_ID), info.Id, EnumCSharpPropertyType.INT, DBOperationString._Equal,
  187. info.Id != null);
  188. var result = new DataRepository<BAS_BIN>(_dataContext).Query(whereList).FirstOrDefault();
  189. if (result != null)
  190. {
  191. var now = DateTime.Now;
  192. result.DESCRIBE = info.Describe;
  193. result.BIN_ID = result.BIN_ID;
  194. result.REGION_CODE = info.RegionCode;
  195. result.REGION_NAME = regionData.REGION_NAME;
  196. result.AREA_CODE = info.AreaCode;
  197. result.AREA_NAME = areaData.AREA_NAME;
  198. result.WAREHOUSE_CODE = info.WarehouseCode;
  199. result.WAREHOUSE_NAME = WarehouseData.WAREHOUSE_NAME;
  200. result.DOWN_SHELF_ORDER = info.DownShelfOrder;
  201. result.BIN_CODE = info.BinCode;
  202. result.BIN_COLUMN = info.BinColumn.Value;
  203. result.BIN_LAYER = info.BinLayer.Value;
  204. result.BIN_NAME = info.BinName;
  205. result.BLEND_BATCH_FLAG = Convert.ToInt32(info.IsBlendBatch);
  206. result.BIN_ROW = info.BinRow.Value;
  207. result.BLEND_PRODUCT_FLAG = Convert.ToInt32(info.IsBlendProduct);
  208. result.PUT_SHELF_ORDER = info.PutShelfOrder;
  209. result.SHELF_CODE = info.ShelfCode;
  210. result.BIN_TYPE = info.BinType;
  211. result.WIDTH = info.Wide;
  212. result.HEIGHT = info.Height;
  213. result.LENGTH = info.Length;
  214. result.NUMBER_LIMIT = info.NumberLimit;
  215. result.SHELF_NAME = ""; //shelfData.SHELF_NAME; //shelfData.SHELF_NAME, //TODO 货架排录入数据没做,暂时放空
  216. result.TRAR_LIMIT = info.TrarLimit;
  217. result.VOLUME_LIMIT = info.VolumnLimit;
  218. result.WEIGHT_LIMIT = info.WeightLimit;
  219. result.UPDATE_BY = info.OperationUserId;
  220. result.UPDATE_TIME = now;
  221. result.USED_FLAG = info.IsUsed ? 1 : 0;
  222. var affectedRows = new DataRepository<BAS_BIN>(_dataContext).Update(result, "BIN_ID", "NEWID");
  223. return GetStatus(affectedRows);
  224. }
  225. return FailMessageStatus("未查找到数据!");
  226. }
  227. public OperateResultInfo<PageQueryResultInfo<BinResult>> GetList(BinSearchCondition info)
  228. {
  229. var sqlAndBuilder = new StringBuilder();
  230. var sqlOrBuilder = new StringBuilder();
  231. if (info.PageIndex == 0 || info.PageSize == 0)
  232. {
  233. return FailMessageStatus("请传递分页码和分页个数!",
  234. new PageQueryResultInfo<BinResult>());
  235. }
  236. var sql = $@"SELECT
  237. CreateName = (SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=CREATE_BY),
  238. UpdateName = (SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=UPDATE_BY),
  239. UsedFlagName = {_iSQLNodeRepository.GetEnumIntCaseString<UsedFlag>("USED_FLAG")},
  240. {info.ItemSQL} FROM BAS_BIN WHERE 1=1 AND DEL_FLAG = 0 ";
  241. sqlAndBuilder = info.Id != null ?
  242. info.Id > 0 ?
  243. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_ID", info.Id, DBOperationString._Equal)) :
  244. sqlAndBuilder : sqlAndBuilder;
  245. sqlAndBuilder = info.IsUsed == null ?
  246. sqlAndBuilder :
  247. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("USED_FLAG", info.IsUsed, DBOperationString._Equal));
  248. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BinCode) ?
  249. sqlAndBuilder :
  250. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_CODE", info.BinCode, DBOperationString._ContainIn));
  251. sqlAndBuilder = info.BinColumn > 0 ?
  252. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_COLUMN", info.BinColumn, DBOperationString._ContainIn)) :
  253. sqlAndBuilder;
  254. sqlAndBuilder = info.BinLayer > 0 ?
  255. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_LAYER", info.BinLayer, DBOperationString._ContainIn)) :
  256. sqlAndBuilder;
  257. sqlAndBuilder = info.BinRow > 0 ?
  258. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_ROW", info.BinRow, DBOperationString._ContainIn)) :
  259. sqlAndBuilder;
  260. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BinType) ?
  261. sqlAndBuilder :
  262. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BIN_TYPE", info.BinType, DBOperationString._ContainIn));
  263. sqlAndBuilder = string.IsNullOrWhiteSpace(info.RegionCode) ?
  264. sqlAndBuilder :
  265. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("REGION_CODE", info.RegionCode, DBOperationString._ContainIn));
  266. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  267. IEnumerable<BinResult> result;
  268. IEnumerable<BinResult> totalResult;
  269. totalResult = new DataRepository<BinResult>(_dataContext).Query(sql);
  270. if (info.PageIndex == 0 || info.PageSize == 0)
  271. {
  272. result = totalResult.ToList();
  273. }
  274. else
  275. {
  276. result = new DataRepository<BinResult>(_dataContext).QueryPage(sql,
  277. "CREATE_TIME", info.PageSize, info.PageIndex, true);
  278. }
  279. return SuccessStatus(new PageQueryResultInfo<BinResult>
  280. {
  281. RowData = result,
  282. PageConditionInfo = info,
  283. TotalCount = totalResult.Count(),
  284. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  285. });
  286. }
  287. public OperateResultInfo Remove(BinCondition info)
  288. {
  289. if (info == null)
  290. {
  291. return FailStatus();
  292. }
  293. if (string.IsNullOrWhiteSpace(info.RegionCode) || string.IsNullOrWhiteSpace(info.BinType) || string.IsNullOrWhiteSpace(info.AreaCode) ||
  294. string.IsNullOrWhiteSpace(info.WarehouseCode) || string.IsNullOrWhiteSpace(info.RegionCode) || string.IsNullOrWhiteSpace(info.ShelfCode) ||
  295. info.BinRow == null || info.BinColumn == null || info.BinLayer == null)
  296. {
  297. return FailMessageStatus("参数错误!");
  298. }
  299. var whereList = new List<FieldKeyInfo>()
  300. .AddFieldKeyInfo(nameof(BAS_BIN.BIN_CODE), info.BinCode, EnumCSharpPropertyType.STRING, DBOperationString._Equal,
  301. string.IsNullOrWhiteSpace(info.BinCode))
  302. .AddFieldKeyInfo(nameof(BAS_BIN.BIN_ID), info.Id, EnumCSharpPropertyType.INT, DBOperationString._Equal,
  303. info.Id != null);
  304. var result = new DataRepository<BAS_BIN>(_dataContext).Query(whereList).FirstOrDefault();
  305. if (result != null)
  306. {
  307. var affectedRows = new DataRepository<BAS_BIN>(_dataContext).Remove("BIN_ID", result.BIN_ID.ToString());
  308. return GetStatus(affectedRows);
  309. }
  310. return FailMessageStatus("未查找到数据!");
  311. }
  312. }
  313. }