SampleService.cs 11.4 KB
using Infrastructure;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using WebApp;
using WebMvc.Areas.WebService;
using WebRepository;

namespace WebMvc.Areas.WebService
{
    public class SampleService : ISampleService
    {
        private IUnitWork _unitWork;
        public IRepository<WebRepository.Task> _app;
        public IRepository<Container> _appc;
        public IRepository<Inventory> _appi;
        public IRepository<Location> _appl;
        public IRepository<ReceiptDetail> _apprd;
        public IRepository<ReceiptHeader> _apprh;
        public IRepository<ShipmentHeader> _apph;
        public IRepository<ShipmentDetail> _appsd;
        public IRepository<TaskDetail> _apptd;
        public IRepository<InventoryTransaction> _appit;
        private BaseDBContext _context;
        private IAuth _auth;

        public SampleService(IUnitWork unitWork, IAuth auth, IRepository<Inventory> inventory, IRepository<InventoryTransaction> inventoryTransaction, IRepository<Container> Icontainer, IRepository<ReceiptHeader> receiptHeader, IRepository<ReceiptDetail> receiptDetail, IRepository<WebRepository.Task> repository, IRepository<Location> repositoryl, IRepository<ShipmentHeader> repositoryh, IRepository<TaskDetail> repositorytd, IRepository<ShipmentDetail> repositorysd, BaseDBContext context)
        {
            _unitWork = unitWork;
            _app = repository;
            _appl = repositoryl;
            _apph = repositoryh;
            _appsd = repositorysd;
            _apptd = repositorytd;
            _apprd = receiptDetail;
            _apprh = receiptHeader;
            _appc = Icontainer;
            _appi = inventory;
            _appit = inventoryTransaction;
            _context = context;
            _auth = auth;
            LoginInfo loginInfo = new LoginInfo
            {
                Account = "NouYaWeb"
            };
            SetLoginInfo(loginInfo);
        }

        public void SetLoginInfo(LoginInfo loginInfo)
        {
            _app._loginInfo = loginInfo;
            _appl._loginInfo = loginInfo;
            _apph._loginInfo = loginInfo;
            _appsd._loginInfo = loginInfo;
            _apptd._loginInfo = loginInfo;
            _appc._loginInfo = loginInfo;
            _apprd._loginInfo = loginInfo;
            _apprh._loginInfo = loginInfo;
            _appi._loginInfo = loginInfo;
            _appit._loginInfo = loginInfo;
        }
        //入库
        public string LK_In(string Request)
        {
            XmlDocument doc = new XmlDocument();
            ConfigXmlDocument reDoc = new ConfigXmlDocument();
            //读取传入的xml
            var config = AppSettingsJson.GetAppSettings();
            reDoc.Load(config.GetSection("NouYaWebInService:Url").Value);
            InterfaceLog inter = new InterfaceLog();
            inter.Initiator = "ERP";
            inter.recipient = "WMS";
            inter.Request = Request;
            inter.Method = "LK_In";
            inter.CreateTime = DateTime.Now;
            inter.CreateBy = "WMS";
            _unitWork.Add(inter);
            //填入是否报错
            XmlElement element = (XmlElement)reDoc.SelectSingleNode("//Status");
            try
            {
                doc.LoadXml(Request);
                string name = "";
                string value = "";
                string SourceCode = "";
                string MaterialCode = "";
                decimal Num = 0;
                string WareCell = "";
                XmlNodeList RecordSets = doc.SelectNodes("//RecordSet");
                foreach (XmlNode RecordSet in RecordSets)
                {
                    XmlNodeList nodes = RecordSet.SelectNodes("//Field");

                    foreach (XmlElement node in nodes)
                    {
                        //抓取单个的xml节点
                        //获得字节里面的属性值
                        name = node.GetAttribute("name");
                        value = node.GetAttribute("value");
                        //上游系统单号
                        if (name == "tc_dcf003" && !string.IsNullOrEmpty(value))
                        {
                            SourceCode = value;
                        }
                        //提取物料号
                        else if (name == "tc_dcf016" && !string.IsNullOrEmpty(value))
                        {
                            MaterialCode = value;
                        }
                        //入库数量
                        else if (name == "tc_dcf021" && !string.IsNullOrEmpty(value))
                        {
                            Num = decimal.Parse(value);
                        }
                        //仓库
                        else if (name == "tc_dcf028" && !string.IsNullOrEmpty(value))
                        {
                            WareCell = value;
                        }

                    }
                }
                

                #region 保存入库单主表
                ReceiptHeader receiptHeader = _unitWork.FindSingle<ReceiptHeader>(u => u.SourceCode.Equals(SourceCode));
                if (receiptHeader != null)
                {
                    if (receiptHeader.FirstStatus != ReceiptHeaderStatus.新建)
                    {
                        throw new Exception("单据进入订单池后,不允许修改!");
                    }
                }
                else
                {
                    receiptHeader = new ReceiptHeader();
                }

                receiptHeader.Type = BusinessType.入库_采购到货单;
                receiptHeader.SourceCode = SourceCode;
                receiptHeader.Station = "";
                receiptHeader.WarehouseType = WareCell;
                receiptHeader.CreateTime = DateTime.Now;
                receiptHeader.CreateBy = "Erp";
                receiptHeader.UploadStatus = 0;

                receiptHeader.Code = _unitWork.GetTaskNo(TaskNo.入库手动分配);
                receiptHeader.FirstStatus = ReceiptHeaderStatus.新建;
                receiptHeader.LastStatus = ReceiptHeaderStatus.新建;
                receiptHeader.TotalLines = 0;
                receiptHeader.TotalQty = 0;

                if (receiptHeader.Id == null)
                {
                   _unitWork.Add(receiptHeader);
                }
                else
                {
                    _unitWork.Update(receiptHeader);
                }
                #endregion

                #region 保存入库单子表
                ReceiptDetail receiptDetail = _context.Set<ReceiptDetail>().AsQueryable().Where(u => u.SourceCode.Equals(SourceCode) && u.MaterialCode.Equals(MaterialCode)).SingleOrDefault();
                if (receiptDetail == null)
                {
                    receiptDetail = new ReceiptDetail();
                }

                receiptDetail.SourceCode = SourceCode;
                receiptDetail.Station = "";
                receiptDetail.MaterialCode = MaterialCode;
                //receiptDetail.Lot = item.Lot;
                //receiptDetail.InventoryStatus = item.InventoryStatus;
                receiptDetail.Qty = Num;
                receiptDetail.CreateTime = receiptHeader.CreateTime;
                receiptDetail.CreateBy = receiptHeader.CreateBy;
                //receiptDetail.UpdateTime = item.UpdateTime;
                //receiptDetail.UpdateBy = item.UpdateBy;

                receiptDetail.ReceiptId = receiptHeader.Id;
                receiptDetail.ReceiptCode = receiptHeader.Code;
                receiptDetail.QtyDivided = 0;
                receiptDetail.QtyCompleted = 0;
                receiptDetail.Price = 0;
                receiptDetail.Status = ReceiptHeaderStatus.新建;

                
                _unitWork.Add(receiptDetail);
                
                #endregion


                element.SetAttribute("code", "0");
            }
            catch(Exception ex)
            {
                element.SetAttribute("code", "1");
                element.SetAttribute("description", ex.Message);
            }
            return reDoc.InnerXml;
        }
        //出库
        public string LK_Out(string Request)
        {
            XmlDocument doc = new XmlDocument();
            ConfigXmlDocument reDoc = new ConfigXmlDocument();
            //读取传入的xml
            var config = AppSettingsJson.GetAppSettings();
            reDoc.Load(config.GetSection("NouYaWebInService:Url").Value);
            //填入是否报错
            XmlElement element = (XmlElement)reDoc.SelectSingleNode("//Status");
            try
            {
                doc.LoadXml(Request);
                XmlNodeList nodes = doc.SelectNodes("//Field");
                foreach (XmlElement node in nodes)
                {
                    //抓取单个的xml节点
                    //获得字节里面的属性值
                    string name = node.GetAttribute("name");
                    string value = node.GetAttribute("value");
                    //提取物料号
                    if (name == "tc_dcf016" && !string.IsNullOrEmpty(value))
                    {
                        Inventory inv = _unitWork.Find<Inventory>(n => n.MaterialCode == value).FirstOrDefault();
                    }
                }

                element.SetAttribute("code", "0");
            }
            catch (Exception ex)
            {
                element.SetAttribute("code", "1");
                element.SetAttribute("description", ex.Message);
            }
            return reDoc.InnerText;
        }
        //RGV移动
        public string LK_RgvMove(string Request)
        {
            ConfigXmlDocument doc = new ConfigXmlDocument();
            ConfigXmlDocument reDoc = new ConfigXmlDocument();
            //读取传入的xml
            var config = AppSettingsJson.GetAppSettings();
            reDoc.Load(config.GetSection("NouYaWebInService:Url").Value);
            //填入是否报错
            XmlElement element = (XmlElement)doc.SelectSingleNode("//Status");
            try
            {
                doc.LoadXml(Request);
                XmlNodeList nodes = doc.SelectNodes("//Field");
                foreach (XmlElement node in nodes)
                {
                    //抓取单个的xml节点
                    //获得字节里面的属性值
                    string name = node.GetAttribute("name");
                    string value = node.GetAttribute("value");
                }

                element.SetAttribute("code", "0");
            }
            catch (Exception ex)
            {
                element.SetAttribute("code", "1");
                element.SetAttribute("description", ex.Message);
            }
            return reDoc.InnerText;
        }

        public ReceiptResponse ReceiptService(MaterialsInformation[] materials)
        {
            ReceiptResponse receiptResponse = new ReceiptResponse();
            try
            {
                receiptResponse.Code = 200;
                receiptResponse.materials = materials;
                receiptResponse.Message = "success";
            }
            catch (Exception ex)
            {
                receiptResponse.Code = 300;
                receiptResponse.Message = ex.Message;
            }
            return receiptResponse;
        }
    }
}