InventoryService.cs 7.88 KB
using HHECS.Dal.Repository;
using HHECS.Infrastructure.Json;
using HHECS.Infrastructure.LogHelper;
using HHECS.Model.Entities;
using System;
using System.Linq;
using System.Linq.Expressions;

namespace HHECS.Application.Service
{
    public class InventoryService : BaseService
    {
        public string Load(Inventory entity, PageReq pageRequest)
        {
            return Execute(() =>
            {
               using var inventoryRepository = new InventoryRepository();
                var query = inventoryRepository.Where(GetExpression(entity));
                var result = query.OrderByDescending(a => a.Created).Page(pageRequest.page, pageRequest.limit).ToList();
                Response.Result = result;
                Response.Count = query.Count();
                return Response.ToJson();
            });
        }

        private Expression<Func<Inventory, bool>> GetExpression(Inventory entity)
        {
            Expression<Func<Inventory, bool>> filter = t => true;

            if (!string.IsNullOrWhiteSpace(entity.PartNumber))
            {
                filter = filter.And(x => x.PartNumber.Contains(entity.PartNumber));
            }
            if (!string.IsNullOrWhiteSpace(entity.Description))
            {
                filter = filter.And(x => x.Description.Contains(entity.Description));
            }
            if (!string.IsNullOrWhiteSpace(entity.Location))
            {
                filter = filter.And(x => x.Location.Contains(entity.Location));
            }

            return filter;
        }
        public string Ins(Inventory entity, User user)
        {
            return Execute(() =>
            {
                entity.CreatedBy = user.UserCode;
                entity.Created = DateTime.Now;
                new InventoryRepository().Insert(entity);
                return Response.ToJson();
            });
        }

        public string Upd(Inventory entity, User user)
        {
            return Execute(() =>
            {
                entity.UpdatedBy = user.UserCode;
                entity.Updated = DateTime.Now;
                new InventoryRepository().InsertOrUpdate(entity);
                return Response.ToJson();
            });
        }

        public string DelByIds(int[] ids)
        {
            return Execute(() =>
            {
                new InventoryRepository().Delete(t => ids.Contains(t.Id));
                return Response.ToJson();
            });
        }



        public void FilterAnalysisData()
        {
            try
            {
                var interfaceRepository = new ETES_INPUT_TABRepository();
                var inventoryRepository = new InventoryRepository();
                var resultList = interfaceRepository.Where(t => t.rowstate == "Posted").ToList();
                if (resultList.Count == 0)
                {
                    return;
                }

                foreach (var result in resultList)
                {
                    string[] dataList = result.input_data.Split('|');
                    if (dataList.Length == 9)
                    {
                        var partNumber = dataList[2].Substring(2);
                        var description = dataList[3].Substring(2);
                        var quantity = dataList[4].Substring(2);
                        var location = dataList[5].Substring(2);
                        var unitPrice = dataList[6].Substring(2);
                        var operate = dataList[7];

                        if (operate == "STDEL")
                        {
                            var inventoryItemDel = inventoryRepository.Where(t => t.PartNumber == partNumber).ToList();
                            if (location == "%")
                            {
                                //不处理
                            }
                            else if (location.IndexOf("%") >= 0)
                            {
                                inventoryItemDel = inventoryItemDel.Where(t => t.Location.IndexOf(location.Replace("%", "")) >= 0).ToList();
                            }
                            else
                            {
                                inventoryItemDel = inventoryItemDel.Where(t => t.Location == location).ToList();
                            }
                            if (inventoryItemDel.Count > 0)
                            {
                                inventoryItemDel.ForEach(x =>
                                {
                                    inventoryRepository.Delete(x.Id);
                                });
                                result.rowstate = "Ready";
                            }
                            else
                            {
                                result.rowstate = "Error";
                                result.error_info = "找不到要删除的记录";
                            }
                        }
                        else if (operate == "STNODEL")
                        {
                            int number = 0;
                            double price = 0;
                            bool success1 = int.TryParse(quantity, out number);
                            bool success2 = double.TryParse(unitPrice, out price);

                            if (!success1)
                            {
                                result.rowstate = "Error";
                                result.error_info = "数量数据不符合规则";
                            }
                            else if (!success2)
                            {
                                result.rowstate = "Error";
                                result.error_info = "金额数据不符合规则";
                            }
                            if (success1 && success2)
                            {
                                var inventoryItem = inventoryRepository.Where(t => t.PartNumber == partNumber && t.Location == location).First();
                                if (inventoryItem != null)
                                {
                                    inventoryItem.PartNumber = partNumber;
                                    inventoryItem.Description = description;
                                    inventoryItem.Quantity = number;
                                    inventoryItem.Location = location;
                                    inventoryItem.UnitPrice = price;
                                    inventoryItem.Updated = DateTime.Now;
                                    inventoryRepository.Update(inventoryItem);
                                }
                                else
                                {
                                    Inventory inventory = new Inventory();
                                    inventory.PartNumber = partNumber;
                                    inventory.Description = description;
                                    inventory.Quantity = number;
                                    inventory.Location = location;
                                    inventory.UnitPrice = price;
                                    inventory.Created = DateTime.Now;
                                    inventoryRepository.Insert(inventory);
                                }
                                result.rowstate = "Ready";
                            }
                        }
                    }
                    else
                    {
                        result.rowstate = "Error";
                        result.error_info = "【input_data】长度不正确";
                    }
                    result.started_date = DateTime.Now;
                    result.executed_date = DateTime.Now;
                    interfaceRepository.Update(result);
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.Instance.Error($"库存接口表信息处理失败、出现异常:{ex.Message}");
            }
        }
    }
}