using Dapper; using Estsh.Core.Base; using Estsh.Core.Dapper; using Estsh.Core.Wms.IRepositories; using Estsh.Core.Model.Result; using Estsh.Core.Repositories; using System.Collections; using System.Data; using System.Text; using System.Security.Cryptography; using System.Text.Json; using Estsh.Core.Models; using Newtonsoft.Json.Linq; using Estsh.Core.Model.EnumUtil; namespace Estsh.Core.Wms.Repositories { public class FinishDeliveryRepository : BaseRepository, IFinishDeliveryRepository { public FinishDeliveryRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext) { } public List GetCustomer(string cartonNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" select * from sys_customer "); SqlStringBuilder.Append(" where customer_code=@customer_code "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@customer_code", cartonNo); List moveOrderList = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return moveOrderList; } } public List ProductionCode(string cartonNo, string loginId, string customer, string isComplete) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); if (isComplete == "True") { SqlStringBuilder.Append(" select * from sys_stock where tray_no = ( "); SqlStringBuilder.Append(" select b.tray_no from mes_out_pdline as a left join sys_stock as b on a.serial_number=b.carton_no "); SqlStringBuilder.Append(" where a.product_type= 10 and a.report_status = 20 and a.serial_number=@serial_number ) "); } else { SqlStringBuilder.Append(" select b.* from mes_out_pdline as a left join sys_stock as b on a.serial_number=b.carton_no "); SqlStringBuilder.Append(" where a.product_type= 10 and a.report_status = 20 and a.serial_number=@serial_number "); } DynamicParameters parameters = new DynamicParameters(); parameters.Add("@serial_number", cartonNo); List ProductionStock = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return ProductionStock; } } public List GetOutStock(string deliveryNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" select * from wms_outstock where order_no=@order_no and enabled='Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@order_no", deliveryNo); List wmsOutstocks = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return wmsOutstocks; } } public List GetEnums(int enum_value) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" select * from sys_enum where enum_type ='sys_stock_status' and enum_value=@enum_value "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@enum_value", enum_value); List sysEnums = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return sysEnums; } } public SetObjectDetail ProductionDelivery(List updateStock, string loginId, string customer, string deliveryNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); SetObjectDetail det = new SetObjectDetail(); List sqlList = new List(); List parametersList = new List(); StringBuilder SqlStringBuilder = new StringBuilder(1024); #region 判断发运单 主表是否存在 SqlStringBuilder.Append(" select * from wms_outstock where order_no=@order_no and enabled='Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@order_no", deliveryNo); List ProductionStock = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); if (ProductionStock.Count > 0) { //存在 } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_outstock(order_no,order_type,order_status,vendor_id,vendor_code,customer_id,customer_code,ref_order_no,factory_id,factory_code,enabled,create_userid,create_time,guid)"); SqlStringBuilder.Append("VALUES(@orderNo, @orderType, 10,@vendorId,@vendorCode,@customerId,@customerCode,@refOrderNo, @factoryId, @factoryCode, @enabled, @createUserid, CONVERT(varchar(50), GETDATE(), 21), newid()) "); parameters = new DynamicParameters(); parameters.Add("@orderNo", deliveryNo); parameters.Add("@orderType", (int)WmsEnumUtil.OutStockType.JIS_SHIPPING); parameters.Add("@vendorId", 0); parameters.Add("@vendorCode", ""); parameters.Add("@customerId", 0); parameters.Add("@customerCode", customer); parameters.Add("@refOrderNo", ""); parameters.Add("@factoryId", ""); parameters.Add("@factoryCode", ""); parameters.Add("@enabled", "Y"); parameters.Add("@createUserid", loginId); sqlList.Add(SqlStringBuilder.ToString()); parametersList.Add(parameters); } #endregion List stockPartId = updateStock.Select(a => a.PartId).Distinct().ToList(); foreach (var partId in stockPartId) { List sysStocks = updateStock.Where(a => a.PartId == partId).ToList(); decimal QtySum = 0; //更改STOCK 条码状态 foreach (var item in sysStocks) { QtySum += item.Qty; SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update sys_stock set status=@status,update_userid=@updateUserid,update_time=@updateTime where ruid=@ruid "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@status", (int)WmsEnumUtil.StockStatus.SHIPPED); parameters.Add("@updateUserid", loginId);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间 parameters.Add("@ruid", item.Ruid); parametersList.Add(parameters); #region 事务表 //新增 sys_stock_trans 事务表 StringBuilder updateString4 = new StringBuilder(1024); updateString4.Append(@" INSERT INTO[dbo].[sys_stock_trans] ([trans_code] ,[carton_no] ,[part_id] ,[part_no] ,[part_spec] ,[src_locate_id] ,[src_locate_name] ,[dest_locate_id] ,[dest_locate_name] ,[old_qty] ,[new_qty] ,[trans_qty] ,[old_status] ,[new_status] ,[old_qms_status] ,[new_qms_status] ,[unit] ,[factory_id] ,[factory_code] ,[src_erp_warehouse] ,[dest_erp_warehouse] ,[src_warehouse_id] ,[src_warehouse_name] ,[dest_warehouse_id] ,[dest_warehouse_name] ,[src_zone_id] ,[src_zone_name] ,[dest_zone_id] ,[dest_zone_name] ,[enabled] ,[update_userid] ,[update_time] ,[create_userid] ,[create_time] ,[guid]) VALUES (@trans_code,@carton_no,@part_id,@part_no,@part_spec,@src_locate_id ,@src_locate_name ,@dest_locate_id ,@dest_locate_name ,@old_qty ,@new_qty ,@trans_qty ,@old_status ,@new_status ,@old_qms_status ,@new_qms_status ,@unit ,@factory_id ,@factory_code ,@src_erp_warehouse ,@dest_erp_warehouse ,@src_warehouse_id ,@src_warehouse_name ,@dest_warehouse_id ,@dest_warehouse_name ,@src_zone_id ,@src_zone_name ,@dest_zone_id ,@dest_zone_name ,@enabled ,@update_userid ,@update_time ,@create_userid ,@create_time ,@guid )"); DynamicParameters updateStringparameters4 = new DynamicParameters(); updateStringparameters4.Add("@trans_code", (int)WmsEnumUtil.TransType.JIS_OUTSTOCK); updateStringparameters4.Add("@carton_no", item.CartonNo); updateStringparameters4.Add("@part_id", item.PartId); updateStringparameters4.Add("@part_no", item.PartNo); updateStringparameters4.Add("@part_spec", item.PartSpec); updateStringparameters4.Add("@src_locate_id", item.LocateId); updateStringparameters4.Add("@src_locate_name", item.LocateName); updateStringparameters4.Add("@dest_locate_id", item.LocateId); updateStringparameters4.Add("@dest_locate_name", item.LocateName); updateStringparameters4.Add("@old_qty", item.Qty); updateStringparameters4.Add("@new_qty", item.Qty); updateStringparameters4.Add("@trans_qty", item.Qty); updateStringparameters4.Add("@old_status", item.Status); updateStringparameters4.Add("@new_status", (int)WmsEnumUtil.StockStatus.SHIPPED); updateStringparameters4.Add("@old_qms_status", item.QmsStatus); updateStringparameters4.Add("@new_qms_status", item.QmsStatus); updateStringparameters4.Add("@unit", item.Unit); updateStringparameters4.Add("@factory_id", item.FactoryId); updateStringparameters4.Add("@factory_code", item.FactoryCode); updateStringparameters4.Add("@src_erp_warehouse", item.ErpWarehouse); updateStringparameters4.Add("@dest_erp_warehouse", item.ErpWarehouse); updateStringparameters4.Add("@src_warehouse_id", item.WarehouseId); updateStringparameters4.Add("@src_warehouse_name", item.WarehouseName); updateStringparameters4.Add("@dest_warehouse_id", item.WarehouseId); updateStringparameters4.Add("@dest_warehouse_name", item.WarehouseName); updateStringparameters4.Add("@src_zone_id", item.ZoneId); updateStringparameters4.Add("@src_zone_name", item.ZoneName); updateStringparameters4.Add("@dest_zone_id", item.ZoneId); updateStringparameters4.Add("@dest_zone_name", item.ZoneName); updateStringparameters4.Add("@enabled", item.Enabled); updateStringparameters4.Add("@update_userid", loginId); updateStringparameters4.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); updateStringparameters4.Add("@create_userid", loginId); updateStringparameters4.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); updateStringparameters4.Add("@guid", Guid.NewGuid()); sqlList.Add(updateString4.ToString()); parametersList.Add(updateStringparameters4); #endregion #region 成品出库 SN表 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(@"INSERT INTO [dbo].[wms_outstock_sn] ([order_no] ,[item_no] ,[part_id] ,[part_no] ,[part_spec] ,[carton_no] ,[qty] ,[unit] ,[status] ,[factory_id] ,[factory_code] ,[enabled] ,[create_userid] ,[create_time] ,[update_userid] ,[update_time] ,[guid]) VALUES (@order_no,@item_no,@part_id,@part_no,@part_spec,@carton_no,@qty,@unit,@status,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@update_userid,@update_time,@guid)"); parameters = new DynamicParameters(); parameters.Add("@order_no", deliveryNo); parameters.Add("@item_no", 0); parameters.Add("@part_id", item.PartId); parameters.Add("@part_no", item.PartNo); parameters.Add("@part_spec", item.PartSpec); parameters.Add("@carton_no", item.CartonNo); parameters.Add("@qty", item.Qty); parameters.Add("@unit", item.Unit); parameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.BATCHED); parameters.Add("@factory_id", item.FactoryId); parameters.Add("@factory_code", item.FactoryCode); parameters.Add("@enabled", "Y"); parameters.Add("@update_userid", loginId); parameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); parameters.Add("@create_userid", loginId); parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); parameters.Add("@guid", Guid.NewGuid()); sqlList.Add(SqlStringBuilder.ToString()); parametersList.Add(parameters); #endregion } #region 明细表新增 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" select * from wms_outstock_detail where order_no=@order_no and part_id=@part_id and enabled='Y' "); parameters = new DynamicParameters(); parameters.Add("@order_no", deliveryNo); parameters.Add("@part_id", sysStocks[0].PartId); List WmsOutstockDetails = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); if (WmsOutstockDetails.Count > 0) { //存在 累加 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update wms_outstock_detail set qty+=@qty, item_status=@item_status,update_userid=@updateUserid,update_time=@updateTime where order_no=@order_no and part_id=@part_id "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.GENERATED); parameters.Add("@updateUserid", loginId);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间 parameters.Add("@qty", QtySum); parameters.Add("@order_no", deliveryNo); parameters.Add("@part_id", sysStocks[0].PartId); parametersList.Add(parameters); } else { //不存在 新增 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_outstock_detail(order_no,item_no,part_id,part_no,part_spec,qty,pick_qty,out_qty,unit,plan_date,plan_time,item_status"); SqlStringBuilder.Append(", src_warehouse_id, src_warehouse_name, src_zone_id, src_zone_name,src_locate_id,src_locate_name"); SqlStringBuilder.Append(", src_erp_warehouse, factory_id, factory_code, enabled, create_userid, create_time, guid)"); SqlStringBuilder.Append("VALUES(@orderNo, @itemNo, @partId, @partNo, @partSpec, @qty, @pickQty, @outQty, @unit, @planDate, @planTime, @itemStatus, @srcWarehouseId"); SqlStringBuilder.Append(", @srcWarehouseName, @srcZoneId, @srcZoneName,@srcLocateId,@srcLocateName, @srcErpWarehouse"); SqlStringBuilder.Append(", @factoryId, @factoryCode, @enabled, @createUserid, CONVERT(varchar(50), GETDATE(), 21), newid())"); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", deliveryNo); parameters.Add("@itemNo", 0); parameters.Add("@partId", sysStocks[0].PartId); parameters.Add("@partNo", sysStocks[0].PartNo); parameters.Add("@partSpec", sysStocks[0].PartSpec); parameters.Add("@qty", QtySum); parameters.Add("@pickQty", 0); parameters.Add("@outQty", 0); parameters.Add("@unit", sysStocks[0].Unit); parameters.Add("@planDate", ""); parameters.Add("@planTime", ""); parameters.Add("@itemStatus", "20"); parameters.Add("@srcWarehouseId", 0); parameters.Add("@srcWarehouseName", ""); parameters.Add("@srcZoneId", 0); parameters.Add("@srcZoneName", ""); parameters.Add("@srcLocateId", 0); parameters.Add("@srcLocateName", ""); parameters.Add("@srcErpWarehouse", sysStocks[0].ErpWarehouse); parameters.Add("@factoryId", sysStocks[0].FactoryId); parameters.Add("@factoryCode", sysStocks[0].FactoryCode); parameters.Add("@enabled", "Y"); parameters.Add("@createUserid", loginId); parametersList.Add(parameters); } #endregion } if (ExecuteTransaction(sqlList, parametersList)) { det.type = "PASS"; SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" select * from wms_outstock_detail where order_no=@order_no and enabled='Y' "); parameters = new DynamicParameters(); parameters.Add("@order_no", deliveryNo); List WmsOutstockDetails = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); det.wmsObjectDetail = WmsOutstockDetails.ConvertAll(s => (object)s); } else { det.type = "NO"; det.message = "处理失败,请重试!"; } return det; } } public List GetFinishDeliveryOrderList(string orderNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" select * from wms_outstock "); SqlStringBuilder.Append("WHERE order_type=@order_type and enabled='Y' and order_status=@order_status "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@order_type", (int)WmsEnumUtil.OutStockType.JIS_SHIPPING); parameters.Add("@order_status", (int)WmsEnumUtil.MoveOrderDetailStatus.CREATE); List wmsMoves = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return wmsMoves; } } public bool SetFinishDeliveryOrderNoSubmit(string orderNo, string loginId) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); List sqlList = new List(); List parametersList = new List(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); SqlStringBuilder.Append(" select * from wms_outstock as a left join wms_outstock_detail as b on a.order_no=b.order_no where a.order_no=@order_no and a.enabled='Y' "); parameters.Add("@order_no", orderNo); List WmsOutstockDetails = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); foreach (var Detail in WmsOutstockDetails) { SqlStringBuilder = new StringBuilder(1024); //WMS将每次发运的信息传递给SAP,SAP用于创建交货单。 JIS SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.WMS_JIS(ZZ_WMSNUM,WERKS,LGORT,LFDAT,KUNNR,MATNR "); SqlStringBuilder.Append(" ,LFIMG,MEINS,ZPOST,ZTIME,SID,RECTIM,SYNFLG,GUID) "); SqlStringBuilder.Append(" VALUES(@ZZ_WMSNUM,@WERKS,@LGORT,@LFDAT,@KUNNR,@MATNR,@LFIMG "); SqlStringBuilder.Append(" ,@MEINS,@ZPOST,@ZTIME,@SID,@RECTIM,@SYNFLG,@GUID) "); parameters = new DynamicParameters(); parameters.Add("@ZZ_WMSNUM", orderNo + "1");//WMS发运单据号 parameters.Add("@WERKS", Detail.FactoryCode);//发货工厂 parameters.Add("@LGORT", Detail.SrcErpWarehouse);//发货库存地 parameters.Add("@LFDAT", DateTime.Now.ToString("yyyyMMdd"));//交货日期 parameters.Add("@KUNNR", Detail.CustomerCode);//客户编码(送达方) parameters.Add("@MATNR", Detail.PartNo);//物料号 parameters.Add("@LFIMG", Detail.Qty);//交货数量 parameters.Add("@MEINS", Detail.Unit);//计量单位 parameters.Add("@ZPOST", DateTime.Now.ToString("yyyyMMdd"));//交易日期 parameters.Add("@ZTIME", DateTime.Now.ToString("HHmmss"));//交易时间 parameters.Add("@SID", Guid.NewGuid().ToString().Replace("-", "")); parameters.Add("@RECTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@SYNFLG", "N"); parameters.Add("@GUID", Guid.NewGuid().ToString()); sqlList.Add(SqlStringBuilder.ToString()); parametersList.Add(parameters); } #region 修改成品发运 主表、明细、SN //主表 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update wms_outstock set order_status=@order_status,create_userid=@updateUserid , create_time=@updateTime where order_no=@order_no and enabled='Y' "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@order_status", (int)WmsEnumUtil.MoveOrderStatus.COMPLETED); parameters.Add("@updateUserid", loginId);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间 parameters.Add("@order_no", orderNo); parametersList.Add(parameters); //明细表 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update wms_outstock_detail set item_status=@item_status,create_userid=@updateUserid , create_time=@updateTime where order_no=@order_no and enabled='Y' "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED); parameters.Add("@updateUserid", loginId);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间 parameters.Add("@order_no", orderNo); parametersList.Add(parameters); //SN表 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update wms_outstock_sn set status=@status,create_userid=@updateUserid , create_time=@updateTime where order_no=@order_no and enabled='Y' "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED); parameters.Add("@updateUserid", loginId);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间 parameters.Add("@order_no", orderNo); parametersList.Add(parameters); #endregion return ExecuteTransaction(sqlList, parametersList); } } public List GetFinishDeliveryOrderListByOrderNo(string orderNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" select a.customer_code,b.* from wms_outstock as a left join wms_outstock_detail as b on a.order_no = b.order_no "); SqlStringBuilder.Append("WHERE a.enabled='Y' and a.order_no=@order_no "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@order_no", orderNo); List wmsMoves = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return wmsMoves; } } } }