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); } } }