|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using djy.Paas.IService;
|
|
|
using djy.Paas.Model;
|
|
|
using djy.Model;
|
|
|
using Ys.Core.Common;
|
|
|
|
|
|
namespace djy.Paas.Service
|
|
|
{
|
|
|
public class FinanceService : ServBase, IFinanceService
|
|
|
{
|
|
|
/// <summary>
|
|
|
///
|
|
|
/// </summary>
|
|
|
/// <param name="Dto"></param>
|
|
|
/// <param name="exptype">1验证是否可以扣款 2扣除操作 </param>
|
|
|
/// <returns></returns>
|
|
|
public ReturnResult<object> Expend(CustFee Dto,int exptype)
|
|
|
{
|
|
|
_LogsAdd("Expend消费检查和扣款","open",Dto);
|
|
|
|
|
|
var rs = new ReturnResult<object>();
|
|
|
try {
|
|
|
if (Dto == null) {
|
|
|
rs.Not("错误的null请求");
|
|
|
return rs;
|
|
|
}
|
|
|
//if (Dto.SENDUSERID.IsNull()) {
|
|
|
// rs.Not("发送人ID丢失!");
|
|
|
// return rs;
|
|
|
//}
|
|
|
|
|
|
if (Dto.BSNO.IsNull()) {
|
|
|
rs.Not("业务编号不能BSNO为空!");
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
if (Dto.MBLNO.IsNull()) {
|
|
|
rs.Not("主提单号不能为空!");
|
|
|
return rs;
|
|
|
}
|
|
|
if (Dto.BSTYPE == null || Dto.SENDTYPE == null) {
|
|
|
rs.Not("请求的业务类型和发送类型不能为空!");
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (Dto.SENDUSERID.IsNotNull())
|
|
|
{
|
|
|
var userinfo = DbBus.Get(DbList.djyolddb).Select<User>().Where(w => w.GID == Dto.SENDUSERID).ToOne();
|
|
|
|
|
|
if (userinfo != null) {
|
|
|
|
|
|
Dto.SENDUSER = Dto.SENDUSER.IsNull()?userinfo.SHOWNAME : Dto.SENDUSER;
|
|
|
Dto.SENDUSERID = userinfo.GID;
|
|
|
Dto.SENDCOM = Dto.SENDCOM .IsNull() ?userinfo.COMNAME: Dto.SENDCOM;
|
|
|
}
|
|
|
}
|
|
|
if (Dto.LURURENID.IsNotNull()) {
|
|
|
var luser = DbBus.Get(DbList.djyolddb).Select<User>().Where(w => w.GID == Dto.LURURENID).ToOne();
|
|
|
if (luser != null) {
|
|
|
Dto.LURUREN = luser.SHOWNAME;
|
|
|
Dto.LURURENID = luser.GID;
|
|
|
Dto.COMNAME = luser.COMNAME;
|
|
|
Dto.COMID = luser.CompId;
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
Dto.GID = Guid.NewGuid().ToString();
|
|
|
Dto.SENDTIME = DateTime.Now;
|
|
|
Dto.CREATETIME = DateTime.Now;
|
|
|
if (Dto.CtnrCount == 0)
|
|
|
{//如果没有指定数量则根据 箱型箱量计算数量
|
|
|
Dto.CtnrCount = Dto.GetCtnrcount();
|
|
|
}
|
|
|
|
|
|
if (Dto.CtnrCount <= 0) {
|
|
|
rs.Not("数量不能小于1!");
|
|
|
return rs;
|
|
|
}
|
|
|
var sql = DbBus.Get(DbList.djyolddb).Select<CustPrice>().Where(w => w.BSTYPE == Dto.BSTYPE && w.SENDTYPE == Dto.SENDTYPE && w.COMID == Dto.COMID);
|
|
|
var price = sql.ToOne();
|
|
|
|
|
|
|
|
|
if (price == null) {
|
|
|
rs.Not("没有找到此业务的计费规则!");
|
|
|
return rs;
|
|
|
}
|
|
|
decimal _price = 0;
|
|
|
|
|
|
_price = (decimal)price.PRICE;
|
|
|
//合计支付
|
|
|
Dto.PRICE = _price* Dto.CtnrCount;
|
|
|
var PayInfo = new { Total = Dto.PRICE, Price = _price, Count = Dto.CtnrCount };
|
|
|
if (exptype == 1)
|
|
|
{
|
|
|
DbBus.Get(DbList.djyolddb).Transaction(() =>
|
|
|
{ //执行事务提交
|
|
|
//执行扣款
|
|
|
var payiscredit = false;
|
|
|
var userbal = DbBus.Get(DbList.djyolddb).Select<CustBalance>().Where(w => w.COMNAME == Dto.COMNAME).ToOne();
|
|
|
if (userbal == null)
|
|
|
{
|
|
|
throw new Exception("没有账户钱包!");
|
|
|
}
|
|
|
|
|
|
if (userbal.Balance < Dto.PRICE)
|
|
|
{
|
|
|
if (Dto.IsCredit == 1)
|
|
|
{
|
|
|
_LogsAdd("账户授信支付" + Dto.PRICE.ToString() + "_财务消费expend", Dto.BSNO, Dto);
|
|
|
payiscredit=true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
_LogsAdd("账户余额不足" + Dto.PRICE.ToString() + "_财务消费expend", Dto.BSNO, Dto);
|
|
|
throw new Exception("账户余额不足!" + Dto.PRICE + " " + Dto.COMNAME);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var upcount = DbBus.Get(DbList.djyolddb).Update<CustBalance>().Set(a => a.Balance - Dto.PRICE)
|
|
|
.Where(a => a.COMNAME == Dto.COMNAME).ExecuteAffrows();
|
|
|
|
|
|
//增加流水
|
|
|
var addcount = DbBus.Get(DbList.djyolddb).Insert(Dto).ExecuteAffrows();
|
|
|
|
|
|
if (addcount < 1)
|
|
|
{
|
|
|
_LogsAdd("消费记录写入失败_财务消费expend", Dto.BSNO, Dto);
|
|
|
throw new Exception("消费记录写入失败!");
|
|
|
}
|
|
|
rs.Data = new{RunCount=addcount ,PayInfo};
|
|
|
rs.OK("扣费成功!");
|
|
|
if (payiscredit)
|
|
|
{
|
|
|
rs.Code = 450;
|
|
|
rs.Message = "钱包金额不足,授信支付成功!钱包余额"+(userbal.Balance-Dto.PRICE);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
if (DbBus.Get(DbList.djyolddb).Select<CustBalance>().Where(a => a.Balance >= Dto.PRICE && a.COMNAME == Dto.COMNAME).Count() > 0)
|
|
|
{
|
|
|
rs.Data = new {PayInfo };
|
|
|
rs.OK("钱包金额充足");
|
|
|
}
|
|
|
else {
|
|
|
rs.Data = new { PayInfo };
|
|
|
rs.Not("钱包金额不足");
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch(Exception ex)
|
|
|
{
|
|
|
rs.Not(ex.Message);
|
|
|
}
|
|
|
//rs.MemoData = Dto;
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public ReturnPagedResult<CustFee> ExpendList(CustFee Dto, ApiFromDto ApiDto)
|
|
|
{
|
|
|
var rs = new ReturnPagedResult<CustFee>();
|
|
|
{
|
|
|
var bsnolist =new List<string>();
|
|
|
if (Dto.BSNO.IsNotNull()) {
|
|
|
bsnolist= Dto.BSNO.Split(',').ToList();
|
|
|
}
|
|
|
|
|
|
var sendtype = -1;
|
|
|
if (ApiDto.CarrierCode.IsNotNull()) {
|
|
|
try {
|
|
|
var car= DjyTools.GetCarrierList().Where(w => w.Code.ToLower() == ApiDto.CarrierCode.ToLower()).First();
|
|
|
if (car != null) {
|
|
|
sendtype = car.IntId;
|
|
|
}
|
|
|
}
|
|
|
catch { }
|
|
|
}
|
|
|
|
|
|
var sql = DbBus.Get(DbList.djyolddb).Select<CustFee>().WhereIf(Dto.BSNO.IsNotNull(), w => w.BSNO == Dto.BSNO)
|
|
|
.WhereIf(Dto.BSTYPE!=null,w=>w.BSTYPE==Dto.BSTYPE)
|
|
|
.WhereIf(sendtype>0,w=>w.SENDTYPE==sendtype)
|
|
|
.WhereIf(Dto.BSNO.IsNotNull()&&bsnolist.Count==1,w=>w.BSNO==Dto.BSNO)
|
|
|
.WhereIf(bsnolist.Count>1,w=>bsnolist.Contains(w.BSNO))
|
|
|
.WhereIf(ApiDto.StartTime>0,w=>w.CREATETIME>=ApiDto.StartTime.ToDataTime())
|
|
|
.WhereIf(ApiDto.EndTime > 0, w => w.CREATETIME <= ApiDto.EndTime.ToDataTime())
|
|
|
.WhereIf(Dto.MBLNO.IsNotNull(), w => w.MBLNO == Dto.MBLNO.Trim()).OrderByDescending(w=>w.CREATETIME);
|
|
|
|
|
|
rs.Data = sql.Count(out var getcount).Page(ApiDto.Page, ApiDto.Limit).ToList();
|
|
|
rs.Pageset(ApiDto.Limit,ApiDto.Page,getcount);
|
|
|
rs.OK("ok");
|
|
|
|
|
|
}
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
}
|
|
|
}
|