Exemple #1
0
        /// <summary>
        /// 销售出库、退货
        /// </summary>
        /// <param name="easModel">Kis数据</param>
        /// <param name="isSave">是否保存为提交状态</param>
        /// <param name="isAgain">是否重新导入</param>
        /// <param name="enableEas">是否启用Kis</param>
        /// <param name="isData">是否只取xml数据</param>
        /// <returns>Result</returns>
        /// <remarks>2013-9-22 杨浩 创建</remarks>
        public static Result <string> SaleIssueBillFacade(Hyt.Model.LiJiaSyncLog 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;


            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;
            }


            if (firstModel.WarehouseNumber.Contains("-"))
            {
                firstModel.WarehouseNumber = firstModel.WarehouseNumber.Split('-')[0];
            }


            var saleInfo = model.FirstOrDefault();

            string billNo = "XSCK" + (saleInfo.ItemID ?? 0) + easModel.FlowIdentify;

            var request = new  StockOutAddRequset()
            {
                FBillNo      = billNo,
                FEntryID     = "0",
                Fdate        = DateTime.Now.ToString("yyyy-MM-dd"),
                FConsignee   = _userName,
                FDeptID      = "",
                FEmpID       = organizationCode,
                FExplanation = "",
                FFetchAdd    = "",
                FFManagerID  = "",
                FSaleStyle   = "线上电商平台",
                FSManagerID  = "",
                FCustID      = string.IsNullOrWhiteSpace(saleInfo.DeliveryCustomer) ? config.FCustID : saleInfo.DeliveryCustomer,// "01.001.003",
                FDCStockID   = firstModel.WarehouseNumber,
                FROB         = 出库状态.出库 == type?"1":"-1",
            };


            request.item = model.Select((q, i) => new JsonItem()
            {
                FItemID         = q.ErpCode,
                Fauxqty         = q.Quantity.ToString(),
                FItemName       = "",
                FDCStockID      = q.WarehouseNumber.Contains("-") ? q.WarehouseNumber.Split('-')[0] : q.WarehouseNumber,
                FUnitID         = config.FUnitID,// "ping",
                FConsignPrice   = decimal.Round(q.Amount / q.Quantity, 2).ToString("0.00"),
                FConsignAmount  = q.Amount.ToString("0.00"),
                FDiscountAmount = q.DiscountAmount.ToString("0.00"),
            }).ToList();

            string json = request.ToJson();

            var datajson = new SaleInfoWraper
            {
                Model       = model,
                Type        = type,
                Customer    = customer,
                Description = description
            }.ToJson();


            if (isData)
            {
                return(new Result <string>
                {
                    Data = json
                });
            }

            #endregion

            #region 调用利嘉接口
            步状态 status = 步状态.等待同步;
            if (enableEas && isAgain)
            {
                try
                {
                    using (var service = new Pisen.Framework.Service.Proxy.ServiceProxy <Grand.Platform.Api.Contract.IErpService>())
                    {
                        var response = service.Channel.LiJiaStockOutAdd(request);
                        status            = !response.IsError ?  步状态.成功 :  步状态.失败;
                        result.status     = !response.IsError;
                        result.message    = response.ErrMsg;
                        result.statusCode = response.ErrCode;
                        result.data       = response.FBillNo; //_result.Data != null && _result.Data.Count > 0 ? _result.Data.First().OutFBillNo : "";
                    }
                }
                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 + " 外部编号:" + request.FBillNo + " 请求时间:" + request.Fdate +
                          " 返回结果:" + (result.status?result.data:result.message) + " 返回状态:" + result.status + "," + result.statusCode + " ElapseTime:" + watch.ElapsedMilliseconds;
            WriteLog(easModel.SysNo, content, request.Fdate, isAgain);

            return(resultData);
        }
Exemple #2
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);
        }