using HH.Redis.ReisModel;
using HH.WMS.BLL;
using HH.WMS.BLL.Algorithm;
using HH.WMS.BLL.Basic;
using HH.WMS.BLL.Common;
using HH.WMS.BLL.OutStock;
using HH.WMS.BLL.SysMgr;
using HH.WMS.Common;
using HH.WMS.Common.Algorithm;
using HH.WMS.Common.Algorithm.Out;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.Entitys.PrintDataSource;
using HH.WMS.WebApi.Areas.Common.Controllers;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace HH.WMS.WebApi.Areas.OutStock.Controllers
{
public class WaveController : BaseController
{
#region 打单
///
/// 打单
///
///
///
public OperateResult CreateBill(PostEntity postEntity)
{
return ValidateToken(postEntity.TokenId, t =>
{
//出库订单,可能多个
string opNos = Util.ToString(postEntity.PostData.opNos);
//打印机
string printer = Util.ToString(postEntity.PostData.printer);
//打印模板
string printTemplet = Util.ToString(postEntity.PostData.printTemplet);
if (string.IsNullOrEmpty(opNos))
return OperateResult.Error("出库订单号不可为空");
//登陆信息&生成单号
UserRuleEntity user = new UserRuleEntity()
{
LoginCode = Util.ToString(t.CN_S_LOGIN).Trim(),
LoginName = Util.ToString(t.CN_S_NAME).Trim(),
OrgCode = Util.ToString(t.CN_S_ORGCODE).Trim(),
OrgFlag = Util.ToString(t.CN_S_ORGFLAG).Trim(),
RuleCode = Constants.Rule_WaveNo
};
//生成波次号
string waveNo = user.GenerateNo();
if (string.IsNullOrEmpty(waveNo))
return OperateResult.Error("生成波次号失败");
return ChangeOutOperate(opNos, (outMstList, batchesList, stockList, lstStrate) =>
{
//if (outMstList.GroupBy(x => x.CN_S_CUSTOMER).Count() != 1)
// return OperateResult.Error("请选择同一客户的出库单");
//反批分分配量,并且生成出库单
var bResult = stockList.BatchesStockQty(batchesList, BatchesType.ReverseBatch, StockBatchesField.AllocationQty, lstStrate, true);
if (!bResult.Success)
return bResult;
//批分结果数据
var batchesResult = bResult.GetData();
if (batchesResult == null)
return OperateResult.Error("生成打单数据异常");
//出库单子表数据
List reduceInventoryDtlList = new List();
batchesResult.ReduceInventoryMstList.ForEach(p =>
{
reduceInventoryDtlList.AddRange(p.DTLEntity);
});
batchesResult.ReduceInventoryDtlList = reduceInventoryDtlList;
//出库订单子表数据
List outDtlAllList = new List();
outMstList.ForEach(p =>
{
//子表货主赋值
p.OutDtlList.ForEach(q => q.CN_S_OWNER = p.CN_S_OWNER);
outDtlAllList.AddRange(p.OutDtlList);
});
//初始化调用算法数据
List itemQuerys =
outDtlAllList.GroupBy(p => new
{
p.CN_S_ITEM_CODE,
p.CN_S_ITEM_STATE,
p.CN_S_OWNER,
p.CN_S_LOT_CODE,
p.CN_S_PRODUCTION_BATCH
})
.Select(x => new itemQueryClass()
{
itemCode = x.Key.CN_S_ITEM_CODE,
batchCode = x.Key.CN_S_LOT_CODE,
prodBatchCode = x.Key.CN_S_PRODUCTION_BATCH,
itemState = x.Key.CN_S_ITEM_STATE,
ownerName = x.Key.CN_S_OWNER,
stockCode = batchesResult.OutMstList[0].CN_S_STOCK_CODE,
itemQty = x.Sum(y => y.CN_F_QUANTITY)
}).ToList();
var allArea = BLLCreator.Create().GetArea(4, batchesResult.OutMstList[0].CN_S_STOCK_CODE);
List lstAreaPrior = allArea.Select(p => new areaPriorClass()
{
areaCode = p.CN_S_AREA_CODE,
Prior = p.CN_N_PRIORITY
}).ToList();
Log.Info("调用OutArea参数 itemQuerys", JsonConvert.SerializeObject(itemQuerys));
Log.Info("调用OutArea参数 lstAreaPrior", JsonConvert.SerializeObject(lstAreaPrior));
//调用出库算法
var algorResultEntity = BLLCreator.Create().OutArea(itemQuerys, lstAreaPrior);
if (!algorResultEntity.Success)
return OperateResult.Error("算法异常:" + algorResultEntity.Msg);
Log.Info("调用OutArea返回值 algorResultEntity", JsonConvert.SerializeObject(algorResultEntity));
//算法结果
var algorResult = algorResultEntity.itemOutAreaResult;
Log.Info("调用OutArea返回值 algorResult", JsonConvert.SerializeObject(algorResult));
if (algorResult == null)
return OperateResult.Error("库存不足,请先完成来料区的上架");
//获取分拣单数据
var sortingDataResult = BLLCreator.Create().GetSortingData(algorResult, user, waveNo);
if (!sortingDataResult.Success)
return sortingDataResult;
//生成的分拣单数据
var sortingList = sortingDataResult.GetData>();
List itemCodes = new List();
sortingList.ForEach(x =>
{
if (x.SortingDtlList != null)
x.SortingDtlList.ForEach(y =>
{
itemCodes.Add(y.CN_S_ITEM_CODE);
});
});
//分拣单的所有库区量表数据
var stockAreaList = BLLCreator.Create>().GetList(new
{
CN_S_STOCK_AREA = sortingList.Select(x => x.CN_S_STOCK_AREA).ToList(),
CN_S_ITEM_CODE = itemCodes
});
//批分库区量表结果
//List outLockList = new List();
Log.Info("批分库区参数 sortingList:", JsonConvert.SerializeObject(sortingList));
Log.Info("批分库区参数 lstStrate:", JsonConvert.SerializeObject(lstStrate));
var batchesAreaResult = stockAreaList.BatchesAreaQty(sortingList, lstStrate);
if (!batchesAreaResult.Success)
return batchesAreaResult;
Log.Info("批分库区结果 batchesAreaResult:", JsonConvert.SerializeObject(batchesAreaResult));
//批分托盘物料分配量,改到执行分拣单的时候分配
var sortingLocations = new List();
sortingList.ForEach(x => { sortingLocations.AddRange(x.SortingLocationList); });
//组织批分实体
var batchesTrayItem = sortingLocations.Select(x => new BatchesEntity()
{
TrayCode = x.CN_S_TRAY_CODE,
ItemCode = x.CN_S_ITEM_CODE,
Qty = x.CN_F_QUANTITY
}).ToList();
var trayItem = BLLCreator.Create>().GetList(new
{
CN_S_ITEM_CODE = batchesTrayItem.Select(x => x.ItemCode).ToList()
});
trayItem.BatchesTrayItemQty(batchesTrayItem, BatchesType.ForwardBatch);
//托盘物料
batchesResult.TrayItemList = trayItem;
//波次实体
batchesResult.WaveMst = GetWaveEntity(batchesResult, waveNo, t);
//分拣单实体
batchesResult.SortingList = sortingList;
//库区量表实体
batchesResult.StockAreaList = stockAreaList;
//打单
return BLLCreator.Create().CreateBill(batchesResult);
});
});
}
#endregion
#region 打单
///
/// 打单
///
///
///
public OperateResult SimCreateBill(PostEntity postEntity)
{
return ValidateToken(postEntity.TokenId, t =>
{
//出库订单,可能多个
string opNos = Util.ToString(postEntity.PostData.opNos);
//打印机
string printer = Util.ToString(postEntity.PostData.printer);
//打印模板
string printTemplet = Util.ToString(postEntity.PostData.printTemplet);
if (string.IsNullOrEmpty(opNos))
return OperateResult.Error("出库订单号不可为空");
//登陆信息&生成单号
UserRuleEntity user = new UserRuleEntity()
{
LoginCode = Util.ToString(t.CN_S_LOGIN).Trim(),
LoginName = Util.ToString(t.CN_S_NAME).Trim(),
OrgCode = Util.ToString(t.CN_S_ORGCODE).Trim(),
OrgFlag = Util.ToString(t.CN_S_ORGFLAG).Trim(),
RuleCode = Constants.Rule_WaveNo
};
//生成波次号
string waveNo = user.GenerateNo();
if (string.IsNullOrEmpty(waveNo))
return OperateResult.Error("生成波次号失败");
return ChangeOutOperate(opNos, (outMstList, batchesList, stockList, lstStrate) =>
{
//if (outMstList.GroupBy(x => x.CN_S_CUSTOMER).Count() != 1)
// return OperateResult.Error("请选择同一客户的出库单");
//反批分分配量,并且生成出库单
var bResult = stockList.BatchesStockQty(batchesList, BatchesType.ReverseBatch, StockBatchesField.AllocationQty, lstStrate, true);
if (!bResult.Success)
return bResult;
//批分结果数据
var batchesResult = bResult.GetData();
if (batchesResult == null)
return OperateResult.Error("生成打单数据异常");
//出库单子表数据
List reduceInventoryDtlList = new List();
batchesResult.ReduceInventoryMstList.ForEach(p =>
{
reduceInventoryDtlList.AddRange(p.DTLEntity);
});
batchesResult.ReduceInventoryDtlList = reduceInventoryDtlList;
//出库订单子表数据
List outDtlAllList = new List();
outMstList.ForEach(p =>
{
//子表货主赋值
p.OutDtlList.ForEach(q => q.CN_S_OWNER = p.CN_S_OWNER);
outDtlAllList.AddRange(p.OutDtlList);
});
//初始化调用算法数据
List itemQuerys =
outDtlAllList.GroupBy(p => new
{
p.CN_S_ITEM_CODE,
p.CN_S_ITEM_STATE,
p.CN_S_OWNER,
p.CN_S_LOT_CODE,
p.CN_S_PRODUCTION_BATCH
})
.Select(x => new itemQueryClass()
{
itemCode = x.Key.CN_S_ITEM_CODE,
batchCode = x.Key.CN_S_LOT_CODE,
prodBatchCode = x.Key.CN_S_PRODUCTION_BATCH,
itemState = x.Key.CN_S_ITEM_STATE,
ownerName = x.Key.CN_S_OWNER,
stockCode = batchesResult.OutMstList[0].CN_S_STOCK_CODE,
itemQty = x.Sum(y => y.CN_F_QUANTITY)
}).ToList();
var allArea = BLLCreator.Create().GetArea(4, batchesResult.OutMstList[0].CN_S_STOCK_CODE);
List lstAreaPrior = allArea.Select(p => new areaPriorClass()
{
areaCode = p.CN_S_AREA_CODE,
Prior = p.CN_N_PRIORITY
}).ToList();
Log.Info("调用OutArea参数 itemQuerys", JsonConvert.SerializeObject(itemQuerys));
Log.Info("调用OutArea参数 lstAreaPrior", JsonConvert.SerializeObject(lstAreaPrior));
//调用出库算法
var algorResultEntity = BLLCreator.Create().OutArea(itemQuerys, lstAreaPrior);
if (!algorResultEntity.Success)
return OperateResult.Error("算法异常:" + algorResultEntity.Msg);
Log.Info("调用OutArea返回值 algorResultEntity", JsonConvert.SerializeObject(algorResultEntity));
//算法结果
var algorResult = algorResultEntity.itemOutAreaResult;
Log.Info("调用OutArea返回值 algorResult", JsonConvert.SerializeObject(algorResult));
if (algorResult == null)
return OperateResult.Error("库存不足,请先完成来料区的上架");
//获取分拣单数据
var sortingDataResult = BLLCreator.Create().GetSortingData(algorResult, user, waveNo);
if (!sortingDataResult.Success)
return sortingDataResult;
//生成的分拣单数据
var sortingList = sortingDataResult.GetData>();
List itemCodes = new List();
sortingList.ForEach(x =>
{
if (x.SortingDtlList != null)
x.SortingDtlList.ForEach(y =>
{
itemCodes.Add(y.CN_S_ITEM_CODE);
});
});
//分拣单的所有库区量表数据
var stockAreaList = BLLCreator.Create>().GetList(new
{
CN_S_STOCK_AREA = sortingList.Select(x => x.CN_S_STOCK_AREA).ToList(),
CN_S_ITEM_CODE = itemCodes
});
//批分库区量表结果
//List outLockList = new List();
Log.Info("批分库区参数 sortingList:", JsonConvert.SerializeObject(sortingList));
Log.Info("批分库区参数 lstStrate:", JsonConvert.SerializeObject(lstStrate));
var batchesAreaResult = stockAreaList.BatchesAreaQty(sortingList, lstStrate);
if (!batchesAreaResult.Success)
return batchesAreaResult;
Log.Info("批分库区结果 batchesAreaResult:", JsonConvert.SerializeObject(batchesAreaResult));
//批分托盘物料分配量,改到执行分拣单的时候分配
var sortingLocations = new List();
sortingList.ForEach(x => { sortingLocations.AddRange(x.SortingLocationList); });
//组织批分实体
var batchesTrayItem = sortingLocations.Select(x => new BatchesEntity()
{
TrayCode = x.CN_S_TRAY_CODE,
ItemCode = x.CN_S_ITEM_CODE,
Qty = x.CN_F_QUANTITY
}).ToList();
var trayItem = BLLCreator.Create>().GetList(new
{
CN_S_ITEM_CODE = batchesTrayItem.Select(x => x.ItemCode).ToList()
});
trayItem.BatchesTrayItemQty(batchesTrayItem, BatchesType.ForwardBatch);
//托盘物料
batchesResult.TrayItemList = trayItem;
//波次实体
batchesResult.WaveMst = GetWaveEntity(batchesResult, waveNo, t);
//分拣单实体
batchesResult.SortingList = sortingList;
//库区量表实体
batchesResult.StockAreaList = stockAreaList;
//打单
return BLLCreator.Create().CreateBill(batchesResult);
});
});
}
#endregion
#region 获取波次实体
///
/// 获取波次实体
///
///
///
private TN_WM_WAVE_MSTEntity GetWaveEntity(BatchesResult bResult, string waveNo, RedisUserEntity user)
{
TN_WM_WAVE_MSTEntity waveMstEntity = new TN_WM_WAVE_MSTEntity()
{
CN_S_CREATE_TYPE = Constants.CreateType_Manual,
CN_S_WAVE_NO = waveNo,
CN_S_FROM = "WMS",
CN_GUID = Guid.NewGuid().ToString(),
CN_S_STATE = Constants.Sorting_Stay,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_T_OPERATE = DateTime.Now,
CN_S_CREATOR = user.CN_S_NAME,
CN_S_CREATOR_BY = user.CN_S_LOGIN,
CN_S_MODIFY = user.CN_S_NAME,
CN_S_MODIFY_BY = user.CN_S_LOGIN,
CN_C_NEED_SEEDING = Constants.Y,
CN_S_STATUS = Constants.State_New,
CN_S_SEEDING_MODE = "",
CN_S_STOCK_CODE = bResult.OutMstList[0].CN_S_STOCK_CODE
};
waveMstEntity.WaveDtlList = new List();
int index = 1;
foreach (var outDtl in bResult.OutMstList)
{
TN_WM_WAVE_DTLEntity waveDtlEntity = new TN_WM_WAVE_DTLEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_WAVE_NO = waveNo,
CN_S_ORDER_NO = outDtl.CN_S_OP_NO,
CN_S_STATE = Constants.State_New,
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_S_CREATOR = user.CN_S_NAME,
CN_S_CREATOR_BY = user.CN_S_LOGIN,
CN_S_MODIFY = user.CN_S_NAME,
CN_S_MODIFY_BY = user.CN_S_LOGIN,
CN_S_MSTGUID = waveMstEntity.CN_GUID,
CN_N_ORDER = index++
};
waveMstEntity.WaveDtlList.Add(waveDtlEntity);
}
return waveMstEntity;
}
#endregion
#region 带出出库订单,批分,仓库实体
///
/// 带出出库订单实体
///
///
///
///
public OperateResult ChangeOutOperate(string opNos, Func, List, List, List, OperateResult> funcOut)
{
try
{
if (string.IsNullOrEmpty(opNos))
return OperateResult.Error("出库订单号不可为空");
var outMst = BLLCreator.Create>().GetList(new
{
CN_S_OP_NO = opNos.Split(',').ToList()
});
if (!outMst.Any())
return OperateResult.Error("未找到出库订单号:" + opNos);
List batchesList = new List();
foreach (var _out in outMst)
{
_out.OutDtlList = BLLCreator.Create>().GetList(new
{
CN_S_OP_NO = _out.CN_S_OP_NO,
CN_C_AUTO_INOUT = false
});
batchesList.AddRange(_out.OutDtlList.Select(p =>
{
return new BatchesEntity()
{
ItemCode = p.CN_S_ITEM_CODE,
ItemState = p.CN_S_ITEM_STATE,
ItemArrivalLot = p.CN_S_LOT_CODE,
ItemProductionLot = p.CN_S_PRODUCTION_BATCH,
Owner = _out.CN_S_OWNER,
Qty = p.CN_F_QUANTITY,
OpNo = _out.CN_S_OP_NO,
OutMst = _out,
IsFilter = p.CN_C_AUTO_INOUT
};
}).ToList());
}
//当前子表物料库存
var stockList = BLLCreator.Create>().GetList(new
{
CN_S_ITEM_CODE = batchesList.Select(p => p.ItemCode).ToList()
});
//算法策略
List lstStrate = BLLCreator.Create().GetStrateListByAreaOrStock("", "", Constants.Out)
.OrderByDescending(a => a.CN_N_PRIORITY).Select(o => o.CN_S_CODE).ToList();
return funcOut(outMst, batchesList, stockList, lstStrate);
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message);
}
}
#endregion
#region 获取出库订单子表
///
/// 获取出库订单子表
///
///
///
public OperateResult GetOutDtl(string opNo)
{
try
{
var list = BLLCreator.Create>().GetList(new
{
CN_S_OP_NO = opNo
});
return OperateResult.Succeed(null, list);
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message);
}
}
#endregion
#region 保存物流
///
/// 保存物流
///
///
[HttpPost]
public OperateResult SaveWayBill(PostEntity postEntity)
{
return ValidateToken(postEntity.TokenId, t =>
{
var outMstList = postEntity.GetPostData>();
if (outMstList == null || !outMstList.Any())
return OperateResult.Error("数据不正确");
var logisticsEntity = BLLCreator.Create>().GetSingleEntity(
new
{
CN_S_LOGISTICS_FLAG = outMstList[0].CN_S_LOGISTICS_FLAG
});
if (logisticsEntity == null)
return OperateResult.Error("未找到物流公司标识:" + outMstList[0].CN_S_LOGISTICS_FLAG);
//是否使用过该物流单号
var existsWayBill = BLLCreator.Create().GetList(outMstList.Select(x => x.CN_S_WAYBILL_NO).ToList());
if (existsWayBill.Any())
return OperateResult.Error("物流单号:" + string.Join(",", existsWayBill.Select(x => x.Key)) + "已使用");
outMstList.ForEach(p =>
{
p.CN_S_LOGISTICS_NAME = logisticsEntity.CN_S_LOGISTICS_NAME;
p.CN_S_FORWARDING_WAY = Constants.Forwarding_Logistics;
});
List wayBillKeyType = outMstList
.Select(x => new MONGO_KEYTYPE_MAP()
{
Key = x.CN_S_WAYBILL_NO,
Type = "5"
}).ToList();
//物流单号新增到mongo
BLLCreator.Create().Insert(wayBillKeyType);
return BLLCreator.Create().SaveWayBill(outMstList);
});
}
#endregion
#region 波次列表
///
/// 波次列表
///
///
[HttpPost]
public string WaveList(SearchModel searchModel)
{
return ValidateToken(searchModel.TokenId, t =>
{
var result = BLLCreator.Create().WaveList(searchModel);
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
return JsonConvert.SerializeObject(result, timeFormat);
});
}
#endregion
#region 保存打印
///
/// 保存打印
///
///
///
[HttpPost]
public OperateResult SavePrinter(PostEntity postEntity)
{
return ValidateToken(postEntity.TokenId, t =>
{
//仓库编码
string stockCode = Util.ToString(postEntity.PostData.stockCode);
//打印机
string printer = Util.ToString(postEntity.PostData.printer);
//打印模板
string printTemplet = Util.ToString(postEntity.PostData.printTemplet);
//发货单号,多条
string opNos = Util.ToString(postEntity.PostData.opNos);
//打印类型
PrintType printType = (PrintType)Convert.ToInt32(Util.ToString(postEntity.PostData.printType));
var currentPrint = BLLCreator.Create>().GetSingleEntity(new
{
CN_S_STOCK_CODE = stockCode,
CN_S_PRINTER = printer,
CN_S_TEMPLET_NAME = printTemplet
});
if (currentPrint == null)
return OperateResult.Error("未找到该打印机");
var outMstList = BLLCreator.Create>().GetList(new
{
CN_S_OP_NO = opNos.Split(',').ToList()
});
if (!outMstList.Any())
return OperateResult.Error("未找到发货单信息");
//装箱
List outPackList = new List();
string content = string.Empty;
switch (printType)
{
case PrintType.Logistics://物流单
List logisticsList = new List();
foreach (var outMst in outMstList)
{
LogisticsEntity logistics = new LogisticsEntity()
{
ReceiverName = outMst.CN_S_RECEIVER_NAME,
ReceiverPhone = outMst.CN_S_PHONE,
ReceiverTel = outMst.CN_S_TEL,
PrintLot = outMst.CN_S_WAVE_CODE,
LogisticsNum = outMst.CN_S_WAYBILL_NO,
GoodsNum = 0, //托寄物数
ActualWeight = 0,//实际重量
ChargeWeight = 0,//计费重量
ReceiverAddress = outMst.CN_S_DETAIL_ADDRESS,
Remark = outMst.CN_S_NOTE,
City = outMst.CN_S_CITY,
Province = outMst.CN_S_PROVINCE
};
logisticsList.Add(logistics);
}
content = JsonConvert.SerializeObject(logisticsList).Replace('[', '<').Replace('{', '(').Replace('\"', '\'').Replace('}', ')').Replace(']', '>');
break;
case PrintType.Pack://包装码
int packNum = Convert.ToInt32(Util.ToString(postEntity.PostData.packNum));
List optList = new List();
var user = new UserRuleEntity()
{
LoginCode = Util.ToString(t.CN_S_LOGIN).Trim(),
LoginName = Util.ToString(t.CN_S_NAME).Trim(),
OrgCode = Util.ToString(t.CN_S_ORGCODE).Trim(),
OrgFlag = Util.ToString(t.CN_S_ORGFLAG).Trim(),
RuleCode = Constants.PackCode
};
for (int i = 1; i <= packNum; i++)
{
OutPackTagEntity optEntity = new OutPackTagEntity()
{
PackNo = user.GenerateNo(),
TotalNum = packNum,
CurrentNum = i,
ReceiverName = outMstList[0].CN_S_RECEIVER_NAME,
ReceiverPhone = outMstList[0].CN_S_PHONE,
Province = Util.ToString(outMstList[0].CN_S_PROVINCE),
City = Util.ToString(outMstList[0].CN_S_CITY),
Area = Util.ToString(outMstList[0].CN_S_AREA),
Town = Util.ToString(outMstList[0].CN_S_TOWN),
ReceiverAddress = outMstList[0].CN_S_DETAIL_ADDRESS,
Logistics = outMstList[0].CN_S_LOGISTICS_NAME,
};
TN_WM_B_OUT_PACKEntity outPackEntity = new TN_WM_B_OUT_PACKEntity()
{
CN_GUID = Guid.NewGuid().ToString(),
CN_S_OP_NO = outMstList[0].CN_S_OP_NO,
CN_S_OPERATOR = t.CN_S_NAME,
CN_S_PACKING_CODE = optEntity.PackNo,
CN_T_DATE = DateTime.Now,
CN_S_BOX_STYLE = Constants.PackCode
};
outPackList.Add(outPackEntity);
optList.Add(optEntity);
}
content = JsonConvert.SerializeObject(optList).Replace('[', '<').Replace('{', '(').Replace('\"', '\'').Replace('}', ')').Replace(']', '>');
break;
case PrintType.Invoice://出库单
break;
}
var printTask = new TN_WM_PRINT_TASKEntity()
{
CN_S_TEMPLET_TYPE = currentPrint.CN_S_TEMPLET_TYPE,
CN_S_TEMPLET_NAME = currentPrint.CN_S_TEMPLET_NAME,
CN_S_PRINTER = currentPrint.CN_S_PRINTER,
CN_S_IP = currentPrint.CN_S_IP,
CN_S_CONTENT = content,
CN_GUID = Guid.NewGuid().ToString(),
CN_C_IS_PRINTED = "N",
CN_S_MAC = currentPrint.CN_S_MAC,
CN_T_CREATE = DateTime.Now
};
return BLLCreator.Create().SavePrinter(outMstList, printTask, printType, outPackList);
});
}
#endregion
#region 验证打单数据
///
/// 验证打单数据
///
///
///
[HttpGet]
public OperateResult ValidatePrint(string opNos)
{
return ValidateToken(t =>
{
var list = BLLCreator.Create>().GetList(new
{
CN_S_OP_NO = opNos.Split(',').ToList()
});
if (!list.Any())
return OperateResult.Error("所选单据不存在");
if (list.GroupBy(x => new
{
x.CN_S_STOCK_CODE,
x.CN_S_STATE,
x.CN_S_LOGISTICS_FLAG
}).Count() != 1)
{
return OperateResult.Error("所选单据不允许打单,单据状态、所属仓库、物流公司必须一致!");
}
return OperateResult.Succeed(null, list);
});
}
#endregion
#region 获取订单日志
///
/// 获取订单日志
///
///
///
[HttpGet]
public string GetBillExec(string opNo)
{
return ValidateToken(t =>
{
var billExecList = BLLCreator.Create>().GetList(new
{
CN_S_OP_NO = opNo
}, " ORDER BY CN_T_EXECUTE ");
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
return JsonConvert.SerializeObject(OperateResult.Succeed(null, billExecList), timeFormat);
});
}
#endregion
#region 生成顺丰物流单号
///
/// 生成顺丰物流单号
///
///
///
[HttpGet]
public OperateResult CreateLogistics(string outNos)
{
return ValidateToken(t =>
{
var outMstList = BLLCreator.Create().GetOutList(outNos.Split(',').ToList());
List kdEBusinessList = new List();
outMstList.ForEach(x => kdEBusinessList.Add(KdApiEOrderHelper.GenerateLogistics(x)));
return OperateResult.Succeed(null, kdEBusinessList);
});
}
#endregion
#region 缺货查询列表
///
/// 缺货查询列表
///
///
///
public OperateResult OutOfStockList(PostEntity postEntity)
{
return ValidateToken(postEntity.TokenId, t =>
{
return OperateResult.Succeed();
});
}
#endregion
}
}