using Dapper;
using Estsh.Core.Models;
using Estsh.Core.Repository.IRepositories;
using Estsh.Core.Services.IServices;
using Estsh.Core.Util;
using System.Collections;
using System.Data;
using System.Text;
/***************************************************************************************************
*
* 更新人:sitong.dong
* 描述:WMS采购订单管理模块业务类
* 修改时间:2022.06.22
* 修改日志:系统迭代升级
*
**************************************************************************************************/
namespace Estsh.Core.Services
{
///
/// WMS采购订单管理业务处理类
///
public class OrderManageService : BaseService, IOrderManageService
{
private readonly IOrderManageRepository repository;
public OrderManageService(IOrderManageRepository _repository) : base(_repository)
{
repository = _repository;
}
private int PRE_PAGE_ITEMS = 6;
///
/// 根据分页条件获取分页周采购订单数据
///
///
///
///
public Hashtable getQueryMainList(String weekNo, String txtStartDate, String txtEndDate, Pager pager, int empId, string status, String enabled)
{
Hashtable result = new Hashtable();
StringBuilder strWhere = new StringBuilder();
if (weekNo != null && !weekNo.Trim().Equals(""))
{
strWhere.Append(" and a.weekno like '" + weekNo.Trim() + "%'");
}
if (txtStartDate != null && !txtStartDate.Trim().Equals(""))
{
strWhere.Append(" and a.recymd >='" + txtStartDate.Trim() + "'");
}
if (txtEndDate != null && !txtEndDate.Trim().Equals(""))
{
strWhere.Append(" and a.recymd <='" + txtEndDate.Trim() + "'");
}
if (enabled != null && !enabled.Trim().Equals(""))
{
strWhere.Append(" and a.enabled ='" + enabled + "'");
}
strWhere.Append(" and a.staflg ='" + status + "'");
String orderBy = " a.weekno desc ";
result = repository.getQueryMainListByPage(pager.pageSize, pager.pageNo, strWhere.ToString(), orderBy, empId);
return result;
}
///
/// 获取周采购订单明细数据
///
///
///
public Hashtable getQueryDetailList(String weekNo)
{
Hashtable result = new Hashtable();
List dt = repository.getQueryDetailList(weekNo);
result.Add("dataList", dt);
return result;
}
///
/// 订单发布
///
///
///
public Hashtable orderRelease(String weekNo)
{
Hashtable result = new Hashtable();
if (repository.IsBuildCode(weekNo))
{
result.Add("message", weekNo + ":该订单的条码已生成,请导出条码数据!");
result.Add("flag", "error");
}
else
{
string orderNo = "";
int evrtp = 0;
string partNo = "";
double qty = 0.0;
double defaultBoxQty = 0.0;
string cartonNo = "";
int seq = 1;
DynamicParameters ht = new DynamicParameters();
List parameters = new List();
List sqlStrings = new List();
List dt = repository.getQueryDetailList(weekNo);
foreach (SapDspo dr in dt)
{
seq = 1;
orderNo = ""; //dr.OrderNo.ToString();
evrtp = int.Parse(dr.Evrtp.ToString());
partNo = ""; //dr.PartNo.ToString();
qty = double.Parse(dr.Zdev_Num.ToString());
defaultBoxQty = double.Parse(dr.Bstrf.ToString());
if (defaultBoxQty <= 0)
{
result.Add("message", partNo + ":零件号对应最小包装未维护。");
result.Add("flag", "error");
return result;
}
while (qty > defaultBoxQty)
{
ht = new DynamicParameters();
ht.Add("@EBELN", orderNo);
ht.Add("@EVRTP", evrtp);
ht.Add("@MATNR", partNo);
ht.Add("@BSTRF", defaultBoxQty);
ht.Add("@PRNSTA", "1");
cartonNo = orderNo + evrtp.ToString().PadLeft(3, '0') + seq.ToString().PadLeft(4, '0');
seq++;
qty -= defaultBoxQty;
ht.Add("@ZDEV_NUM", defaultBoxQty);
ht.Add("@ZTXM", cartonNo);
parameters.Add(ht);
sqlStrings.Add(repository.getInsertBuildCodeSql());
}
//最后的尾箱
if (qty > 0)
{
ht = new DynamicParameters();
ht.Add("@EBELN", orderNo);
ht.Add("@EVRTP", evrtp);
ht.Add("@MATNR", partNo);
ht.Add("@BSTRF", defaultBoxQty);
ht.Add("@PRNSTA", "1");
cartonNo = orderNo + evrtp.ToString().PadLeft(3, '0') + seq.ToString().PadLeft(4, '0');
ht.Add("@ZDEV_NUM", qty);
ht.Add("@ZTXM", cartonNo);
parameters.Add(ht);
sqlStrings.Add(repository.getInsertBuildCodeSql());
}
}
//更新sap_dspo表的STAFLG的值为1(已发布)。
ht = new DynamicParameters();
ht.Add("@weekno", weekNo);
parameters.Add(ht);
sqlStrings.Add(repository.getUpdateSapDspo());
List sapList = repository.getDataList(weekNo);
List sqlInsert = new List();
List parameInsert = new List();
for (int i = 0; i < sapList.Count; i++)
{
int qtyNum = Convert.ToInt32(sapList[i].Zdev_Num) / Convert.ToInt32(sapList[i].Bstrf);//数量
int remaNum = (Convert.ToInt32(sapList[i].Zdev_Num) % Convert.ToInt32(sapList[i].Bstrf));//求余
string vendorCode = sapList[i].Lifnr;//供应商代码
List vendors = repository.getVendorByNo(vendorCode);
string VendorId = ""; string VendorCode = ""; string VendorName = "";
if (vendors.Count>0)
{
VendorId= vendors[0].VendorId.ToString();
VendorCode = vendors[0].VendorCode;
VendorName= vendors[0].VendorName;
}
string sedate = sapList[i].Zdate;//交货日期
string setime = sapList[i].Zcjsj;//交货时间
List partInfo = repository.getPartByNo(sapList[i].Matnr);
int partId_I = 0;
string partNo_I = "";
string partSpec_I = "";
if (partInfo.Count > 0)
{
partId_I = partInfo[0].PartId;
partNo_I = partInfo[0].PartNo;
partSpec_I = partInfo[0].PartSpec;
}
string unit = sapList[i].Unit;//单位
string orderNo_New = repository.GetOrderNo();
StringBuilder SqlStringBuilder = new StringBuilder();
SqlStringBuilder.Append("INSERT INTO dbo.wms_purchase ");
SqlStringBuilder.Append(" (order_no,order_type,order_status,vendor_id,vendor_name,se_date,se_time,dock,ref_order_no,factory_id,factory_code,enabled,create_userid ");
SqlStringBuilder.Append(" ,create_time) ");
SqlStringBuilder.Append(" VALUES(@order_no,@order_type,@order_status,@vendor_id,@vendor_name,@se_date,@se_time,@dock ");
SqlStringBuilder.Append(" ,@ref_order_no,@factory_id,@factory_code,@enabled,@create_userid,CONVERT(varchar(50), GETDATE(), 21)) ");
DynamicParameters param1 = new DynamicParameters();
param1.Add("@order_no", orderNo_New);
param1.Add("@order_type", "10");
param1.Add("@order_status", "10");
param1.Add("@vendor_id", VendorId);
param1.Add("@vendor_name", VendorName);
param1.Add("@se_date", sedate);
param1.Add("@se_time", setime);
param1.Add("@dock", "");
param1.Add("@ref_order_no", "");
param1.Add("@factory_id", "1006");
param1.Add("@factory_code", "1010");
param1.Add("@enabled", 'Y');
param1.Add("@create_userid", 10001);
sqlInsert.Add(SqlStringBuilder.ToString());
parameInsert.Add(param1);
SqlStringBuilder.Remove(0, SqlStringBuilder.Length);
SqlStringBuilder.Append("INSERT INTO dbo.wms_purchase_detail ");
SqlStringBuilder.Append(" (order_no ,item_no ,part_id ,part_no ");
SqlStringBuilder.Append(" ,part_spec ,qty ,rec_qty ,box_qty ,rec_box_qty ");
SqlStringBuilder.Append(" ,snp_qty,unit ,erp_warehouse ,item_status ,factory_id ");
SqlStringBuilder.Append(" ,factory_code ,enabled ,create_userid ,create_time ) ");
SqlStringBuilder.Append(" VALUES ");
SqlStringBuilder.Append(" (@order_no ,@item_no ,@part_id ,@part_no ,@part_spec ,@qty ");
SqlStringBuilder.Append(" ,@rec_qty ,@box_qty ,@rec_box_qty ,@snp_qty ,@unit ,@erp_warehouse ");
SqlStringBuilder.Append(" ,@item_status ,@factory_id ,@factory_code ,@enabled ");
SqlStringBuilder.Append(" ,@create_userid ,CONVERT(varchar(50), GETDATE(), 21) ");
SqlStringBuilder.Append(" ) ");
DynamicParameters param2 = new DynamicParameters();
param2.Add("@order_no", orderNo_New);
param2.Add("@item_no", i + 1);
param2.Add("@part_id", partId_I);
param2.Add("@part_no", partNo_I);
param2.Add("@part_spec", partSpec_I);
param2.Add("@qty", sapList[i].Zdev_Num);
param2.Add("@rec_qty", 0);
param2.Add("@box_qty", sapList[i].Zdev_Num);
param2.Add("@rec_box_qty", 0);
param2.Add("@snp_qty", 0);
param2.Add("@unit", unit);
param2.Add("@erp_warehouse", sapList[i].Lgort);
param2.Add("@item_status", "10");
param2.Add("@factory_id", 1006);
param2.Add("@factory_code", "1010");
param2.Add("@enabled", "Y");
param2.Add("@create_userid", 10001);
sqlInsert.Add(SqlStringBuilder.ToString());
parameInsert.Add(param2);
for (int j = 0; j < qtyNum; j++)
{
string carNo_New =repository.GetOrderNo("StockOrder", "M");
SqlStringBuilder.Remove(0, SqlStringBuilder.Length);
SqlStringBuilder.Append("INSERT INTO dbo.sys_stock ");
SqlStringBuilder.Append(" (vendor_id ");
SqlStringBuilder.Append(" ,vendor_code ");
SqlStringBuilder.Append(" ,carton_no ");
SqlStringBuilder.Append(" ,part_id ");
SqlStringBuilder.Append(" ,part_no ");
SqlStringBuilder.Append(" ,part_spec ");
SqlStringBuilder.Append(" ,lot_no ");
SqlStringBuilder.Append(" ,fix_lot_no ");
SqlStringBuilder.Append(" ,status ");
SqlStringBuilder.Append(" ,qty ");
SqlStringBuilder.Append(" ,snp_qty ");
SqlStringBuilder.Append(" ,locate_id ");
SqlStringBuilder.Append(" ,locate_name ");
SqlStringBuilder.Append(" ,group_no ");
SqlStringBuilder.Append(" ,erp_warehouse ");
SqlStringBuilder.Append(" ,date_code ");
SqlStringBuilder.Append(" ,qms_status ");
SqlStringBuilder.Append(" ,ref_order_no ");
SqlStringBuilder.Append(" ,unit ");
SqlStringBuilder.Append(" ,dock ");
SqlStringBuilder.Append(" ,warehouse_id ");
SqlStringBuilder.Append(" ,warehouse_name ");
SqlStringBuilder.Append(" ,zone_id ");
SqlStringBuilder.Append(" ,zone_name ");
SqlStringBuilder.Append(" ,printed ");
SqlStringBuilder.Append(" ,print_time ");
SqlStringBuilder.Append(" ,factory_id ");
SqlStringBuilder.Append(" ,factory_code ");
SqlStringBuilder.Append(" ,enabled ");
SqlStringBuilder.Append(" ,create_userid ");
SqlStringBuilder.Append(" ,create_time ");
SqlStringBuilder.Append(" ) ");
SqlStringBuilder.Append(" VALUES ");
SqlStringBuilder.Append(" (@vendor_id ");
SqlStringBuilder.Append(" ,@vendor_code ");
SqlStringBuilder.Append(" ,@carton_no ");
SqlStringBuilder.Append(" ,@part_id ");
SqlStringBuilder.Append(" ,@part_no ");
SqlStringBuilder.Append(" ,@part_spec ");
SqlStringBuilder.Append(" ,@lot_no ");
SqlStringBuilder.Append(" ,@fix_lot_no ");
SqlStringBuilder.Append(" ,@status ");
SqlStringBuilder.Append(" ,@qty ");
SqlStringBuilder.Append(" ,@snp_qty ");
SqlStringBuilder.Append(" ,@locate_id ");
SqlStringBuilder.Append(" ,@locate_name ");
SqlStringBuilder.Append(" ,@group_no ");
SqlStringBuilder.Append(" ,@erp_warehouse ");
SqlStringBuilder.Append(" ,@date_code ");
SqlStringBuilder.Append(" ,@qms_status ");
SqlStringBuilder.Append(" ,@ref_order_no ");
SqlStringBuilder.Append(" ,@unit ");
SqlStringBuilder.Append(" ,@dock ");
SqlStringBuilder.Append(" ,@warehouse_id ");
SqlStringBuilder.Append(" ,@warehouse_name ");
SqlStringBuilder.Append(" ,@zone_id ");
SqlStringBuilder.Append(" ,@zone_name ");
SqlStringBuilder.Append(" ,@printed ");
SqlStringBuilder.Append(" ,@print_time ");
SqlStringBuilder.Append(" ,@factory_id ");
SqlStringBuilder.Append(" ,@factory_code ");
SqlStringBuilder.Append(" ,@enabled ");
SqlStringBuilder.Append(" ,@create_userid ");
SqlStringBuilder.Append(" ,CONVERT(varchar(50), GETDATE(), 21) ");
SqlStringBuilder.Append(" ) ");
DynamicParameters param3 = new DynamicParameters();
param3.Add("@vendor_id", VendorId);
param3.Add("@vendor_code", VendorCode);
param3.Add("@carton_no", carNo_New);
param3.Add("@part_id", partId_I);
param3.Add("@part_no", partNo_I);
param3.Add("@part_spec", partSpec_I);
param3.Add("@lot_no", DateTime.Now.ToString("yyyyMMdd"));
param3.Add("@fix_lot_no", "");
param3.Add("@status", "10");
param3.Add("@qty", sapList[i].Bstrf);
param3.Add("@snp_qty", 0);
param3.Add("@locate_id", 0);
param3.Add("@locate_name", "");
param3.Add("@group_no", "");
param3.Add("@erp_warehouse", sapList[i].Lgort);
param3.Add("@date_code", "");
param3.Add("@qms_status", "");
param3.Add("@ref_order_no", orderNo_New);
param3.Add("@unit", unit);
param3.Add("@dock", "");
param3.Add("@warehouse_id", 0);
param3.Add("@warehouse_name", "");
param3.Add("@zone_id", 0);
param3.Add("@zone_name", "");
param3.Add("@printed", 0);
param3.Add("@print_time", "");
param3.Add("@factory_id", 1006);
param3.Add("@factory_code", "1010");
param3.Add("@enabled", "Y");
param3.Add("@create_userid", 10001);
sqlInsert.Add(SqlStringBuilder.ToString());
parameInsert.Add(param3);
}
if (remaNum > 0)
{
string carNo_New = repository.GetOrderNo("StockOrder", "M");
SqlStringBuilder.Remove(0, SqlStringBuilder.Length);
SqlStringBuilder.Append("INSERT INTO dbo.sys_stock ");
SqlStringBuilder.Append(" (vendor_id ");
SqlStringBuilder.Append(" ,vendor_code ");
SqlStringBuilder.Append(" ,carton_no ");
SqlStringBuilder.Append(" ,part_id ");
SqlStringBuilder.Append(" ,part_no ");
SqlStringBuilder.Append(" ,part_spec ");
SqlStringBuilder.Append(" ,lot_no ");
SqlStringBuilder.Append(" ,fix_lot_no ");
SqlStringBuilder.Append(" ,status ");
SqlStringBuilder.Append(" ,qty ");
SqlStringBuilder.Append(" ,snp_qty ");
SqlStringBuilder.Append(" ,locate_id ");
SqlStringBuilder.Append(" ,locate_name ");
SqlStringBuilder.Append(" ,group_no ");
SqlStringBuilder.Append(" ,erp_warehouse ");
SqlStringBuilder.Append(" ,date_code ");
SqlStringBuilder.Append(" ,qms_status ");
SqlStringBuilder.Append(" ,ref_order_no ");
SqlStringBuilder.Append(" ,unit ");
SqlStringBuilder.Append(" ,dock ");
SqlStringBuilder.Append(" ,warehouse_id ");
SqlStringBuilder.Append(" ,warehouse_name ");
SqlStringBuilder.Append(" ,zone_id ");
SqlStringBuilder.Append(" ,zone_name ");
SqlStringBuilder.Append(" ,printed ");
SqlStringBuilder.Append(" ,print_time ");
SqlStringBuilder.Append(" ,factory_id ");
SqlStringBuilder.Append(" ,factory_code ");
SqlStringBuilder.Append(" ,enabled ");
SqlStringBuilder.Append(" ,create_userid ");
SqlStringBuilder.Append(" ,create_time ");
SqlStringBuilder.Append(" ) ");
SqlStringBuilder.Append(" VALUES ");
SqlStringBuilder.Append(" (@vendor_id ");
SqlStringBuilder.Append(" ,@vendor_code ");
SqlStringBuilder.Append(" ,@carton_no ");
SqlStringBuilder.Append(" ,@part_id ");
SqlStringBuilder.Append(" ,@part_no ");
SqlStringBuilder.Append(" ,@part_spec ");
SqlStringBuilder.Append(" ,@lot_no ");
SqlStringBuilder.Append(" ,@fix_lot_no ");
SqlStringBuilder.Append(" ,@status ");
SqlStringBuilder.Append(" ,@qty ");
SqlStringBuilder.Append(" ,@snp_qty ");
SqlStringBuilder.Append(" ,@locate_id ");
SqlStringBuilder.Append(" ,@locate_name ");
SqlStringBuilder.Append(" ,@group_no ");
SqlStringBuilder.Append(" ,@erp_warehouse ");
SqlStringBuilder.Append(" ,@date_code ");
SqlStringBuilder.Append(" ,@qms_status ");
SqlStringBuilder.Append(" ,@ref_order_no ");
SqlStringBuilder.Append(" ,@unit ");
SqlStringBuilder.Append(" ,@dock ");
SqlStringBuilder.Append(" ,@warehouse_id ");
SqlStringBuilder.Append(" ,@warehouse_name ");
SqlStringBuilder.Append(" ,@zone_id ");
SqlStringBuilder.Append(" ,@zone_name ");
SqlStringBuilder.Append(" ,@printed ");
SqlStringBuilder.Append(" ,@print_time ");
SqlStringBuilder.Append(" ,@factory_id ");
SqlStringBuilder.Append(" ,@factory_code ");
SqlStringBuilder.Append(" ,@enabled ");
SqlStringBuilder.Append(" ,@create_userid ");
SqlStringBuilder.Append(" ,@create_time ");
SqlStringBuilder.Append(" ) ");
DynamicParameters param3 = new DynamicParameters();
param3.Add("@vendor_id", VendorId);
param3.Add("@vendor_code", VendorCode);
param3.Add("@carton_no", carNo_New);
param3.Add("@part_id", partId_I);
param3.Add("@part_no", partNo_I);
param3.Add("@part_spec", partSpec_I);
param3.Add("@lot_no", DateTime.Now.ToString("yyyyMMdd"));
param3.Add("@fix_lot_no", "");
param3.Add("@status", "10");
param3.Add("@qty", remaNum);
param3.Add("@snp_qty", 0);
param3.Add("@locate_id", 0);
param3.Add("@locate_name", "");
param3.Add("@group_no", "");
param3.Add("@erp_warehouse", sapList[i].Lgort);
param3.Add("@date_code", "");
param3.Add("@qms_status", "");
param3.Add("@ref_order_no", orderNo_New);
param3.Add("@unit", unit);
param3.Add("@dock", "");
param3.Add("@warehouse_id", 0);
param3.Add("@warehouse_name", "");
param3.Add("@zone_id", 0);
param3.Add("@zone_name", "");
param3.Add("@printed", 0);
param3.Add("@print_time", "");
param3.Add("@factory_id", 1006);
param3.Add("@factory_code", "1010");
param3.Add("@enabled", "Y");
param3.Add("@create_userid", 10001);
sqlInsert.Add(SqlStringBuilder.ToString());
parameInsert.Add(param3);
}
}
if (!repository.ExecuteSqlTransaction(sqlInsert, parameInsert))
{
result.Add("message", "生成条码失败,请重查看!");
result.Add("flag", "error");
}
if (repository.ExecuteSqlTransaction(sqlStrings, parameters))
{
//result.Add("message", "生成条码成功,请导出条码数据!");
result.Add("message", "生成条码成功。");
result.Add("flag", "OK");
}
else
{
result.Add("message", "生成采购条码失败,请重新生成!");
result.Add("flag", "error");
}
}
return result;
}
///
/// 删除用户
///
///
///
public int deleteOrder(String ids)
{
String[] idArray = ids.Split(',');
int count = 0;
foreach (String id in idArray)
{
if (!"".Equals(id))
{
count += this.repository.deleteOrder(id);
}
}
return count;
}
///
/// 启用
///
///
///
public int EnableData(String ids)
{
ids = ids.Substring(0, ids.Length - 1);
return this.repository.EnableData(ids);
}
///
/// 禁用
///
///
///
public int DisableData(String ids)
{
ids = ids.Substring(0, ids.Length - 1);
return this.repository.DisableData(ids);
}
}
}