You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

261 lines
9.6 KiB
C#

using POSV.Entity;
using POSV.HttpResponse;
using POSV.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace POSV.HttpApi
{
public class SplitPayApi : BaseApi
{
protected static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
public Tuple<bool, string> UpdateSplitPay(SplitStorePayEntity splitPay)
{
try
{
var uploadObject = BuilderUploadObject(splitPay);
string jsonString = JsonUtils.Serialize(uploadObject);
var uploadResult = Uploading(jsonString);
if (uploadResult.Item1)
{
logger.Debug($"分账信息修改成功:{jsonString}。");
return new Tuple<bool, string>(true, "分账信息修改成功");
}
}
catch (Exception ex)
{
logger.Error(ex, "分账信息修改异常");
return new Tuple<bool, string>(false, "分账信息修改异常");
}
return new Tuple<bool, string>(false, "分账信息修改失败");
}
private Dictionary<string, object> BuilderUploadObject(SplitStorePayEntity splitPay)
{
try
{
var uploadObject = new Dictionary<string, object>();
////上传订单
//splitPay.isUpLoadTicket = true;
//uploadObject["Id"] = splitPay.Id;
//租户ID
uploadObject["tenantId"] = splitPay.TenantId;
//前台系统ID
uploadObject["clientId"] = splitPay.Id;
//设置ID
if (string.IsNullOrEmpty(splitPay.ProgramId))
{
uploadObject["programId"] = "-1";
}
else
{
uploadObject["programId"] = splitPay.ProgramId;
}
//门店ID
uploadObject["storeId"] = splitPay.StoreId;
//分店ID
uploadObject["splitStoreId"] = splitPay.SplitStoreId;
//门店编号
uploadObject["storeNo"] = splitPay.StoreNo;
//付款单号
uploadObject["payNo"] = splitPay.PayNo;
//销售单号
uploadObject["busNo"] = splitPay.BusNo;
//付款方式编号
uploadObject["payTypeNo"] = splitPay.PayTypeNo;
//付款方式
uploadObject["payType"] = splitPay.PayType;
//实收金额
uploadObject["paid"] = splitPay.Paid;
//找零金额
uploadObject["rchange"] = splitPay.Rchange;
//已收金额
uploadObject["money"] = splitPay.Money;
//溢出金额
uploadObject["overAmount"] = splitPay.OverAmount;
//凭证号
uploadObject["voucherNo"] = splitPay.VoucherNo;
//付款时间
uploadObject["payDate"] = splitPay.PayDate;
//付款卡号
uploadObject["cardNo"] = splitPay.CardNo;
//是否实收
uploadObject["incomeFlag"] = splitPay.IncomeFlag;
//第三方扣费类型
uploadObject["otherRateType"] = splitPay.OtherRateType;
//第三方扣费值
uploadObject["otherRateValue"] = splitPay.OtherRateValue;
//第三方扣费
uploadObject["otherRate"] = splitPay.OtherRate;
//支付客户端类型
uploadObject["payClientType"] = splitPay.PayClientType;
//支付渠道
uploadObject["payChannel"] = splitPay.PayChannel;
//扣率
uploadObject["deductionRate"] = splitPay.DeductionRate;
//扣款
uploadObject["chargeBack"] = splitPay.ChargeBack;
//备注
uploadObject["memo"] = splitPay.Memo;
uploadObject["isInvalid"] = splitPay.IsInvalid;
uploadObject["createUser"] = splitPay.CreateUser;
uploadObject["createDate"] = splitPay.CreateDate;
uploadObject["ticketId"] = splitPay.TicketId;
uploadObject["fromBizUserId"] = splitPay.FromBizUserld;
uploadObject["refundAmount"] = splitPay.RefundAmount;
uploadObject["orderType"] = splitPay.OrderType.ToString();
uploadObject["isRefund"] = splitPay.IsRefund;
uploadObject["tableNo"] = splitPay.TableNo;
uploadObject["people"] = splitPay.People;
uploadObject["workNo"] = splitPay.WorkerNo;
uploadObject["unitPrice"] = splitPay.UnitPrice;
uploadObject["goodid"] = splitPay.ProductId;
uploadObject["number"] = splitPay.Quantity;
uploadObject["rnumber"] = splitPay.RefundQuantity;
uploadObject["fee"] = splitPay.fee * 100;
return uploadObject;
}
catch (Exception ex)
{
logger.Error(ex, "组装营业分账更新数据异常:");
return null;
}
}
private Tuple<bool, EntityResponse<UploadResult>> Uploading(string jsonString)
{
Tuple<bool, EntityResponse<UploadResult>> result = null;
var isTest = false;
#region 模拟上传操作
if (isTest)
{
logger.Debug("开始构建上传成功模拟数据......");
//构建上传成功模拟数据
var resp2 = new EntityResponse<UploadResult>();
resp2.Status = 1;
resp2.Message = "模拟上传";
resp2.ErrCode = string.Empty;
resp2.ErrMessage = string.Empty;
resp2.Data = new UploadResult
{
TicketId = "11112211",
UploadDate = DateTime.Now
};
logger.Info("模拟上传返回结果:{0}", resp2);
result = new Tuple<bool, EntityResponse<UploadResult>>(false, resp2);
return result;
}
#endregion
try
{
logger.Debug("开始更新营业分账数据......");
OpenApi api = OpenApiUtils.Instance.NextApi(ApiType.Business);
SortedList<string, string> parameters = OpenApiUtils.Instance.NewParameters(api);
parameters.Add("method", "update.business.splitorder");
parameters.Add("storeId", Global.Instance.Authc.StoreId);
parameters.Add("jsonString", jsonString);
var ignore = new List<string>();
ignore.Add("jsonString");
parameters.Add("sign", OpenApiUtils.Instance.Sign(api, parameters, ignore));
string response = HttpClientUtils.PostAsync(api, api.Url, parameters);
logger.Info("上传返回结果:{0}", response);
if (Constant.IsSuccessful(response))
{
var status = JsonUtils.Deserialize<EntityResponse<UploadResult>>(response);
if (status.Status == 1)
{
logger.Info(status.Message);
result = new Tuple<bool, EntityResponse<UploadResult>>(true, status);
}
else if (status.Status == 2)
{
logger.Info(status.Message);
result = new Tuple<bool, EntityResponse<UploadResult>>(false, status);
}
else
{
string message = string.Format("<{0}>-{1}-{2}", status.ErrCode, status.ErrMessage, status.Message);
logger.Error(string.Format("调用接口<upload.business.splitorder>上传出错:{0}", message));
result = new Tuple<bool, EntityResponse<UploadResult>>(false, status);
}
}
else
{
string errorMessage = PaserErrors(response);
logger.Error(string.Format("报文<{0}>解析出错:{1}", response, errorMessage));
//构建错误信息
var resp = new EntityResponse<UploadResult>();
resp.Status = 0;
resp.Message = errorMessage;
resp.ErrCode = string.Empty;
resp.ErrMessage = string.Empty;
resp.Data = null;
result = new Tuple<bool, EntityResponse<UploadResult>>(false, resp);
}
}
catch (Exception ex)
{
string message = string.Format("更新分账数据发生异常");
logger.Error(ex, message);
//构建异常错误
var resp = new EntityResponse<UploadResult>();
resp.Status = 0;
resp.Message = message;
resp.ErrCode = string.Empty;
resp.ErrMessage = string.Empty;
resp.Data = null;
result = new Tuple<bool, EntityResponse<UploadResult>>(false, resp);
}
return result;
}
}
}