Example #1
0
        /// <summary>
        /// 销售退货
        /// </summary>
        /// <param name="model">退货明细</param>
        /// <param name="customer">分销商erp编号</param>
        /// <param name="description">单据摘要(商城订单号/升舱订单号)</param>
        /// <param name="flowIdentify"></param>
        /// <returns></returns>
        /// <remarks>2013-9-27 杨浩 添加</remarks>
        public Result SaleInStock(List <SaleInfo> model, string customer, string description, string flowIdentify)
        {
            var datajson = new SaleInfoWraper
            {
                Model       = model,
                Type        = 出库状态.退货,
                Customer    = customer,
                Description = description
            }.ToJson();

            var easModel = new Hyt.Model.EasSyncLog
            {
                Data         = datajson,
                FlowIdentify = flowIdentify
            };
            var status = KisCore.SaleIssueBillFacade(easModel);

            //同步兴业嘉仓数据
            if (model.First().WarehouseSysNo == 59 || model.First().WarehouseSysNo == 61 || model.First().WarehouseSysNo == 4 || model.First().WarehouseSysNo == 30 || model.First().WarehouseSysNo == 41)
            {
                XingYe.XingYeProviderFactory.CreateProvider().SaleInStock(model, customer, description, flowIdentify);
            }
            //同步利嘉
            LiJia.LiJiaProviderFactory.CreateProvider().SaleInStock(model, customer, description, flowIdentify);
            return(status);
        }
Example #2
0
        /// <summary>
        /// 获取Eas同步数据
        /// </summary>
        /// <param name="model">Eas</param>
        /// <returns></returns>
        /// <remarks>2013-9-27 杨浩 添加</remarks>
        public Result <string> GetData(CBEasSyncLog model)
        {
            var easModel = new Hyt.Model.EasSyncLog
            {
                SysNo   = model.SysNo,
                Data    = model.Data,
                DataMd5 = model.DataMd5
            };
            var iType  = (接口类型)(model.InterfaceType);
            var result = new Result <string> {
            };

            switch (iType)
            {
            case 接口类型.配送员借货还货:
                var borrow = model.Data.ToObject <BorrowInfoWraper>();
                result = EasCore.OtherIssueBillFacade(borrow.Model, borrow.Type, borrow.Description, "", model.DataMd5, true, true, true);
                break;

            case 接口类型.销售出库退货:
                //var sale = model.Data.ToObject<SaleInfoWraper>();
                result = EasCore.SaleIssueBillFacade(easModel, false, true, true, true);
                break;

            case 接口类型.收款单据导入:
                var receiving = model.Data.ToObject <ReceivingInfoWraper>();
                result = EasCore.ReceivingBillFacade(0, receiving.Model, receiving.ReceivingType, receiving.Customer, receiving.Description, "", model.DataMd5, true, true, true);
                break;
            }
            return(result);
        }
Example #3
0
        /// <summary>
        /// 采购退货
        /// </summary>
        /// <param name="model">出库明细</param>
        /// <param name="description">Kis单据摘要(出库单号)</param>
        /// <param name="flowIdentify">采购订单系统编号</param>
        /// <param name="purchaseOrderSysNo">采购订单系统编号</param>
        /// <returns>bool</returns>
        /// <remarks>2013-9-27 杨浩 添加</remarks>
        public Result PurchaseOutStock(List <PurchaseInfo> model, string description, string flowIdentify, string purchaseOrderSysNo)
        {
            var datajson = new PurchaseInfoWraper
            {
                Model              = model,
                Type               = 采购状态.退货,
                Description        = description,
                PurchaseOrderSysNo = purchaseOrderSysNo
            }.ToJson();

            var easModel = new Hyt.Model.EasSyncLog
            {
                Data         = datajson,
                FlowIdentify = flowIdentify
            };
            var status = KisCore.PurchaseIssueBillFacade(easModel);


            //同步兴业嘉仓数据
            if (model.First().WarehouseSysNo == 59 || model.First().WarehouseSysNo == 61 || model.First().WarehouseSysNo == 4 || model.First().WarehouseSysNo == 30 || model.First().WarehouseSysNo == 41)
            {
                XingYe.XingYeProviderFactory.CreateProvider().PurchaseOutStock(model, description, flowIdentify, purchaseOrderSysNo);
            }
            //foreach (var item in model)
            //{
            //    if (item.WarehouseSysNo == 59)
            //    {

            //    }
            //}
            //同步利嘉
            //LiJia.LiJiaProviderFactory.CreateProvider().PurchaseOutStock(model,description,flowIdentify,purchaseOrderSysNo);
            return(status);
        }
Example #4
0
        /// <summary>
        /// 调拨单导入
        /// </summary>
        /// <param name="model">调拨明细</param>
        /// <param name="description">Kis单据摘要(调拨出库单号_调拨入库单号)</param>
        /// <param name="flowIdentify">调拨单系统编号</param>
        /// <returns></returns>
        /// <remarks>2017-1-04 杨浩 创建</remarks>
        public Result TransferStock(List <TransferStockInfo> model, string description, string flowIdentify)
        {
            var datajson = new TransferStockInfoWraper
            {
                Model       = model,
                Type        = 调拨状态.入库,
                Description = description
            }.ToJson();

            var easModel = new Hyt.Model.EasSyncLog
            {
                Data         = datajson,
                FlowIdentify = flowIdentify
            };
            var status = KisCore.TransferStockIssueBillFacade(easModel);

            //同步兴业嘉仓的数据
            foreach (var item in model)
            {
                if (model.First().WarehouseSysNo == 59 || model.First().WarehouseSysNo == 61 || model.First().WarehouseSysNo == 4 || model.First().WarehouseSysNo == 30 || model.First().WarehouseSysNo == 41)
                {
                    XingYe.XingYeProviderFactory.CreateProvider().TransferStock(model, description, flowIdentify);
                }
            }

            //同步利嘉
            //LiJia.LiJiaProviderFactory.CreateProvider().TransferStock(model, description, flowIdentify);
            return(status);
        }
Example #5
0
        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="datajson">同步数据</param>
        /// <param name="result">返回结果</param>
        /// <param name="watch">同步耗时</param>
        /// <param name="name">接口名称</param>
        /// <param name="interfaceType">接口类型</param>
        /// <param name="warehouseSysNo">仓库编号</param>
        /// <param name="remarks">记录商城原单据</param>
        /// <param name="flowIdentify">流程编号</param>
        /// <param name="voucherAmount">单据金额</param>
        /// <param name="status">同步状态</param>
        /// <param name="isAgain">是否开始同步</param>
        /// <remarks>2013-10-24 杨浩 创建</remarks>
        private static int WriteLog(string datajson, Result <string> result, Stopwatch watch, string name,
                                    接口类型 interfaceType, int warehouseSysNo, string remarks, string flowIdentify, decimal voucherAmount, 步状态 status, bool isAgain)
        {
            //是否为自动同步
            if (isAgain)
            {
                return(0);
            }
            //是否为自营
            if (!IsSelfSupport(warehouseSysNo))
            {
                return(0);
            }
            int    elapsedMilliseconds = 0;
            string message             = string.Empty;
            var    dataMd5             = Helper.MD5Encrypt(datajson);
            var    isImport            = Hyt.DataAccess.Sys.IEasDao.Instance.IsImport(dataMd5);

            if (isImport)
            {
                return(0);
            }

            elapsedMilliseconds = (int)watch.ElapsedMilliseconds;
            message             = result.Message != null
                ? (result.Message.Length > 500 ? result.Message.Substring(0, 500) : result.Message)
                : string.Empty;

            var log = new Hyt.Model.EasSyncLog()
            {
                VoucherNo      = result.Data,
                CreatedDate    = DateTime.Now,
                Data           = datajson,
                DataMd5        = dataMd5,
                ElapsedTime    = elapsedMilliseconds,
                InterfaceType  = (int)interfaceType,
                Message        = message,
                Name           = name,
                Status         = (int)status,
                StatusCode     = result.StatusCode,
                CreatedBy      = Hyt.Model.SystemPredefined.User.SystemUser,
                Remarks        = remarks,
                FlowIdentify   = flowIdentify,
                FlowType       = (接口类型.配送员借货还货 == interfaceType ? 20 : 10),
                LastupdateDate = DateTime.Now,
                WarehouseSysNo = warehouseSysNo,
                VoucherAmount  = voucherAmount,
                LastsyncTime   = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue,
            };

            return(Hyt.DataAccess.Sys.IEasDao.Instance.EasSyncLogCreate(log));
        }
Example #6
0
        /// <summary>
        /// 销售退货
        /// </summary>
        /// <param name="model">退货明细</param>
        /// <param name="customer">分销商erp编号</param>
        /// <param name="description">单据摘要(商城订单号/升舱订单号)</param>
        /// <param name="flowIdentify"></param>
        /// <returns></returns>
        /// <remarks>2013-9-27 杨浩 添加</remarks>
        public Result SaleInStock(List <SaleInfo> model, string customer, string description, string flowIdentify)
        {
            var datajson = new SaleInfoWraper
            {
                Model       = model,
                Type        = 出库状态.退货,
                Customer    = customer,
                Description = description
            }.ToJson();

            var easModel = new Hyt.Model.EasSyncLog
            {
                Data         = datajson,
                FlowIdentify = flowIdentify
            };
            var status = EasCore.SaleIssueBillFacade(easModel);

            return(status);
        }
Example #7
0
        /// <summary>
        /// 销售出库、退货
        /// </summary>
        /// <param name="easModel">Eas数据</param>
        /// <param name="isSave">是否保存为提交状态</param>
        /// <param name="isAgain">是否重新导入</param>
        /// <param name="enableEas">是否启用Eas</param>
        /// <param name="isData">是否只取xml数据</param>
        /// <returns>Result</returns>
        /// <remarks>2013-9-22 杨浩 创建</remarks>
        public static Result <string> SaleIssueBillFacade(Hyt.Model.EasSyncLog easModel, bool isSave = false, bool isAgain = false, bool enableEas = true, bool isData = false)
        {
            var sale = easModel.Data.ToObject <SaleInfoWraper>();

            List <SaleInfo> model        = sale.Model;
            出库状态            type         = sale.Type;
            string          customer     = sale.Customer;
            string          description  = sale.Description;
            string          flowIdentify = easModel.FlowIdentify;
            string          dataMd5      = easModel.DataMd5;

            string sessionId = "";
            var    name      = 出库状态.出库 == type ? "销售出库" : "销售退货";
            var    watch     = new Stopwatch();

            watch.Start();
            var result = new Eas.SaleIssueBillFacade.Result();

            #region 数据初始
            var     firstModel       = model.FirstOrDefault();
            int     warehouseSysNo   = firstModel != null ? firstModel.WarehouseSysNo : 0;              //仓库编号
            decimal voucherAmount    = model.Sum(q => q.Amount);
            var     organizationCode = firstModel != null ? firstModel.OrganizationCode : string.Empty; //组织架构
            if (出库状态.退货 == type)
            {
                voucherAmount = -voucherAmount;
            }
            var datajson = new SaleInfoWraper
            {
                Model       = model,
                Type        = type,
                Customer    = customer,
                Description = description
            }.ToJson();
            var billHead = new Model.Sale.BillHead
            {
                number            = "XSCK" + Number, //单据抬头编号
                hasEffected       = 0,
                fiVouchered       = 0,
                isReversed        = 0,
                isInitBill        = 0,
                baseStatus        = 4,
                year              = DateTime.Now.Year,
                period            = DateTime.Now.ToString("yyyyMM"),
                totalQty          = model.Sum(q => q.Quantity),
                totalAmount       = model.Sum(q => q.Amount),
                totalStandardCost = 0,
                totalActualCost   = 0,
                creator           = _userName,
                lastUpdateUser    = _userName,
                bizType           = (type == 出库状态.出库) ? 210 : 211,     //210:普通销售,211:普通销售退货
                billType          = 102,                               //102:销售出库单
                storageOrgUnit    = organizationCode,                  //组织架构
                transactionType   = (type == 出库状态.出库) ? "010" : "011", // 010:普通销售出库,011:普通销售退货
                createTime        = DateTime.Now.ToString(dateFormater),
                lastUpdateTime    = DateTime.Now.ToString(dateFormater),
                bizDate           = DateTime.Now.ToString(dateFormater),
                isSysBill         = 0,
                currency          = "RMB",
                exchangeRate      = 1,
                paymentType       = "002",    //赊销
                customer          = customer, //商城客户(如果为升舱订单 客服编号就要对应)
                handler           = _userName,
                description       = description,
                dingdanleixing    = "001" //001 常单
            };

            var billEntries = model.Select((q, i) => new Model.Sale.entry
            {
                isPresent      = q.IsPresent,
                baseStatus     = 4,
                seq            = 1 + i,
                qty            = (type == 出库状态.出库)?q.Quantity:-q.Quantity,
                baseQty        = (type == 出库状态.出库) ? q.Quantity : -q.Quantity,
                material       = q.ErpCode,
                storageOrgUnit = string.Empty,                             //由eas查询,hyt不导入
                warehouse      = q.WarehouseNumber,
                stocker        = string.Empty,                             //仓管员由eas查询
                amount         = (type == 出库状态.出库)? q.Amount:-q.Amount,    //价税合计
                localAmount    = (type == 出库状态.出库) ? q.Amount : -q.Amount, //价税合计
                remark         = q.Remark,
                unit           = string.Empty,
                baseUnit       = string.Empty,
                discountType   = -1,               //折扣方式
                discountAmount = q.DiscountAmount, //折扣额

                price             = decimal.Round(q.Amount / q.Quantity, 2),
                salePrice         = decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2),//不含税单价
                writtenOffQty     = q.Quantity,
                orderNumber       = string.Empty,
                saleOrderNumber   = string.Empty,
                saleOrderEntrySeq = string.Empty,
                taxRate           = 17,
                tax      = q.Amount - (decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2) * q.Quantity), //不含税单价*税率*数量 * q.Quantity
                localTax = q.Amount - (decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2) * q.Quantity), //不含税单价*税率*数量* q.Quantity
                //localPrice =((q.Amount / (decimal)1.17)), //不含税单价 EAS中不存在
                nonTaxAmount      = decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2) * q.Quantity,
                localNonTaxAmount = decimal.Round((q.Amount / q.Quantity) / (decimal)1.17, 2) * q.Quantity,
                saleOrder         = string.Empty,
                saleOrderEntry    = string.Empty,
                coreBillType      = "310", //销售订单
                unReturnedBaseQty = q.Quantity,
                isLocked          = 0,
                inventoryID       = string.Empty,
                taxPrice          = decimal.Round(q.Amount / q.Quantity, 2),
                actualPrice       = decimal.Round(q.Amount / q.Quantity, 2),
                saleOrgUnit       = GetOrganizeCode(organizationCode), // "301234", //默认电商中心,//eas查询
                saleGroup         = GetOrganizeCode(organizationCode), //
                salePerson        = q.WarehouseNumber                  //销售员就是仓库编码
            }).ToList();

            var data = new SaleIssueBill
            {
                billHead       = billHead,
                billEntries    = billEntries,
                checkDuplicate = "true",
                thirdSysBillID = dataMd5 ?? Helper.MD5Encrypt(datajson),
                isSubmit       = isSave ? "false" : "true",
            };

            //按照Eas格式,去掉xmlns和空格
            string xml = Helper.XmlSerialize(data)
                         .Replace(xsi, "")
                         .Replace(xsd, "")
                         .Replace("utf-16", "UTF-8")
                         .Trim();
            if (isData)
            {
                return(new Result <string>
                {
                    Data = xml
                });
            }

            #endregion

            #region 调用外部Eas接口
            步状态 status;
            if (enableEas && isAgain)
            {
                try
                {
                    var context = ErpLogin();
                    sessionId = context.sessionId;
                    var client = new Eas.SaleIssueBillFacade.WSSaleIssueBillFacadeSrvProxyService
                    {
                        Timeout   = Settings.Default.Timeout,
                        SessionId = new SoapUnknownHeader {
                            Element = GetSessionHeader(sessionId)
                        }
                    };
                    if (sessionId != null)
                    {
                        result = client.importData(xml);
                    }
                    status = result.status ?  步状态.成功 :  步状态.失败;
                }
                catch (Exception e)
                {
                    result.message = e.Message;
                    result.status  = false;
                    status         = 步状态.失败;
                }
            }
            else
            {
                result.message = enableEas ? Model.EasConstant.EAS_WAIT : Model.EasConstant.EAS_MESSAGE_CLOSE;
                result.status  = false;
                status         = 步状态.等待同步;
            }

            #endregion

            watch.Stop();

            var resultData = new Result <string>
            {
                Data       = (result.data != null ? result.data.ToString() : ""),
                Status     = result.status,
                StatusCode = result.statusCode,
                Message    = result.message
            };
            //记录日志
            int sysno = WriteLog(datajson, resultData, watch, name, 接口类型.销售出库退货, warehouseSysNo, description, flowIdentify, voucherAmount, status, isAgain);
            easModel.SysNo = sysno == 0 ? easModel.SysNo : sysno;
            //临时记录 检查是否重复
            var content = " 订单编号:" + description + " 会话ID:" + sessionId + " 外部编号:" + data.thirdSysBillID + " 请求时间:" + billHead.createTime +
                          " 返回结果:" + (result.status?result.data:result.message) + " 返回状态:" + result.status + "," + result.statusCode + " ElapseTime:" + watch.ElapsedMilliseconds;
            WriteLog(easModel.SysNo, content, billHead.createTime, isAgain);

            return(resultData);
        }