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.

536 lines
28 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// WMS采购订单管理业务处理类
/// </summary>
public class OrderManageService : BaseService<SapDspo>, IOrderManageService
{
private readonly IOrderManageRepository repository;
public OrderManageService(IOrderManageRepository _repository) : base(_repository)
{
repository = _repository;
}
private int PRE_PAGE_ITEMS = 6;
/// <summary>
/// 根据分页条件获取分页周采购订单数据
/// </summary>
/// <param name="weekNo"></param>
/// <param name="pager"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 获取周采购订单明细数据
/// </summary>
/// <param name="weekNo"></param>
/// <returns></returns>
public Hashtable getQueryDetailList(String weekNo)
{
Hashtable result = new Hashtable();
List<SapDspo> dt = repository.getQueryDetailList(weekNo);
result.Add("dataList", dt);
return result;
}
/// <summary>
/// 订单发布
/// </summary>
/// <param name="weekNo"></param>
/// <returns></returns>
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<DynamicParameters> parameters = new List<DynamicParameters>();
List<string> sqlStrings = new List<string>();
List<SapDspo> 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<SapDspo> sapList = repository.getDataList(weekNo);
List<string> sqlInsert = new List<string>();
List<DynamicParameters> parameInsert = new List<DynamicParameters>();
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<SysVendor> 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<SysPart> 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;
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 启用
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public int EnableData(String ids)
{
ids = ids.Substring(0, ids.Length - 1);
return this.repository.EnableData(ids);
}
/// <summary>
/// 禁用
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public int DisableData(String ids)
{
ids = ids.Substring(0, ids.Length - 1);
return this.repository.DisableData(ids);
}
}
}