using DS.Module.Core;
using DS.Module.Core.Extensions;
using DS.Module.UserModule;
using DS.WMS.Common.Enum;
using DS.WMS.Core.App.Dtos;
using DS.WMS.Core.App.Interface;
using DS.WMS.Core.BaseInfo.Entity;
using DS.WMS.Core.System.Entity;
using DS.WMS.Core.WmsModule.Entity;
using Mapster;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using OP_WMS_STOREHOUSE = DS.WMS.Core.App.Entity.OP_WMS_STOREHOUSE;
using OP_WMS_STOREHOUSE_AREA = DS.WMS.Core.App.Entity.OP_WMS_STOREHOUSE_AREA;
namespace DS.WMS.Core.App.Method;
public class AppStockOutService:IAppStockOutService
{
private readonly IServiceProvider _serviceProvider;
private readonly ISqlSugarClient db;
private readonly IUser user;
///
///
///
///
public AppStockOutService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
db = _serviceProvider.GetRequiredService();
user = _serviceProvider.GetRequiredService();
}
public DataResult GetStockOutPlanList(StockOutPlanQueryModel model)
{
var data = db.Queryable()
.Where(a => a.AuditStatus == AuditStatus.Approve.ToEnumInt() && a.ISEND == false)
.LeftJoin((a, b) => a.STOREHOUSE == b.AREACODE)
.LeftJoin(
db.SqlQueryable(
"select DISTINCT TRUCKNO, WMSPLANID from OP_WMS_OUT_PLAN_DETAIL WHERE TRUCKNO is not null"),
(a, b, c) => a.WMSPLANID == c.WMSPLANID)
.Select((a, b, c) => new StockOutPlanListViewModel()
{
MBLNO = a.MBLNO,
STOREHOUSENAME = b.AREANAME, //手动指定一列在自动映射
TRUCKNO = c.TRUCKNO
},
true)
.WhereIF(!model.MBLNO.IsNullOrEmpty(), a => a.MBLNO.Contains(model.MBLNO))
.WhereIF(!model.TRUCKNO.IsNullOrEmpty(), a => a.TRUCKNO.Contains(model.TRUCKNO))
.ToList();
if (data.Count() == 0)
{
return DataResult.Failed("未检索到数据!");
}
return DataResult.Successed("获取数据成功", data);
}
public DataResult GetStockOutSummaryInfo(StockOutPlanQueryModel model)
{
var data = new StockOutPlanViewModel();
var info = db.Queryable().First(x => x.WMSPLANID == model.WMSPLANID);
var store = db.Queryable().First(x => x.AREACODE == info.STOREHOUSE);
data.WMSPLANID = model.WMSPLANID;
data.TRUCKNO = model.TRUCKNO;
data.MBLNO = info.MBLNO;
data.STOREHOUSENAME = store.AREANAME;
// data.AreaList = db.Queryable()
// .LeftJoin((a, b) => a.Pid == b.Id)
// .Where((a, b) => b.AREACODE == info.STOREHOUSE)
// .Select(a => new AreaListViewModel
// {
// text = a.AREANAME,
// value = a.AREACODE
// })
// .ToList();
return DataResult.Successed("获取数据成功", data);
}
public DataResult GetStockOutGoodsInfo(StockGoodsQueryModel model)
{
var goods = db.Queryable().Where(a => a.WMSPLANID == model.WMSPLANID && a.ISEXECUTE ==false)
.LeftJoin((a, b) => a.GoodsId == b.GID && b.ISSTOP ==false)
.Where((a, b) => b.PinYinCode.Contains(model.Code))
.LeftJoin(
db.SqlQueryable(
"select WMSPLANDETAILID, sum(PKGS) AS PKGS,SUM(STORAGEUNITCOUNT) AS STORAGEUNITCOUNT from OP_WMS_OUT_DO_GOODS WHERE WMSPLANDETAILID is not null GROUP BY WMSPLANDETAILID"),
(a, b, StockDoGoods) => a.WMSOUTDETAILID == StockDoGoods.WMSPLANDETAILID)
.LeftJoin((a, b, StockDoGoods, d) => a.AREACODE == d.AREACODE)
.LeftJoin((a, b, StockDoGoods, d,f) => b.GoodsFeeTypeGID == f.GID)
.Select((a, b, StockDoGoods, d,f) => new StockOutPlanGoodsViewModel()
{
PKGS = a.PKGS,
STORAGEUNITCOUNT = a.STORAGEUNITCOUNT,
DOSTORAGEUNITCOUNT = StockDoGoods.STORAGEUNITCOUNT,
DOPKGS = StockDoGoods.PKGS, //手动指定一列在自动映射
AREANAME = d.AREANAME,
StorageUnitType = f.STORAGEUNIT_TYPE,
},
true)
.Take(5).ToList();
if (goods.Count == 0)
{
return DataResult.Failed("未检索到数据!");
}
return DataResult.Successed("获取数据成功", goods);
}
public DataResult StockOutBatch(StockOutPlanGoodsBatchInput model)
{
var userId = user.UserId;
if (model.Goods.Count == 0)
{
return DataResult.Failed("执行明细不能为空!");
}
var WMSPLANID = model.WMSPLANID;
//检测出库计划状态
var plan = db.Queryable().Where(s => s.WMSPLANID == WMSPLANID).First();
if (plan == null)
{
return DataResult.Failed("出库计划不存在!");
}
if (plan.ISEND == true)
{
return DataResult.Failed("出库计划已完成!");
}
try
{
//开启事务
db.Ado.BeginTran();
var doId = Guid.NewGuid();
//var stockDo = plan.MapTo();
var stockDo = plan.Adapt();
stockDo.WMSNO = NumUtil.GetBillNo(db, "WM04");
stockDo.BILLSTATUS = "1010";
stockDo.StockOutType = 0;//正常出库
stockDo.BSSTATUS = false;
stockDo.TRUCKNO = model.TRUCKNO;
stockDo.MBLNO = model.MBLNO;
stockDo.ISEND = false;
stockDo.FEESTATUS = false;
stockDo.BSSTATUS = false;
stockDo.WMSDOID = doId;
var now = DateTime.Now;
stockDo.DODATE = new DateTime(now.Year, now.Month, now.Day);
stockDo.CORPID = user.GetCompanyId();
stockDo.CUSTOMNO_IMPORT = plan.CUSTOMNO;
//写入OP_WMS_OUT_DO
db.Insertable(stockDo).ExecuteCommand();
// TODO 出库执行费率
var doGoodsList = new List();
foreach (var item in model.Goods)
{
var planGood = db.Queryable()
.Where(s => s.WMSOUTDETAILID == item.WMSOUTDETAILID).First();
var doGoods = planGood.Adapt();
doGoods.WMSDODETAILID = Guid.NewGuid();
doGoods.WMSDOID = doId;
doGoods.WMSPLANDETAILID = item.WMSOUTDETAILID;
doGoods.PKGS = item.PKGS;
doGoods.MINPKGS = item.MINPKGS;
doGoods.KGS = item.KGS;
doGoods.NETWEIGHT = item.NETWEIGHT;
doGoods.KINDPKGS = item.KINDPKGS;
doGoods.STORAGEUNITCOUNT = item.STORAGEUNITCOUNT;
doGoods.STOREHOUSE = stockDo.STOREHOUSE;
doGoods.GOODSMODEL2 = item.GOODSMODEL2;
doGoodsList.Add(doGoods);
}
//写入 OP_WMS_OUT_DO_GOODS
db.Insertable(doGoodsList).ExecuteCommand();
db.Ado.CommitTran();
return DataResult.Successed("出库确认成功!");
}
catch (Exception ex)
{
db.Ado.RollbackTran();
return DataResult.Failed("出库确认失败!" + ",请联系管理员!");
}
}
}