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 MoveOrderRepository : BaseRepository, IMoveOrderRepository { public MoveOrderRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext) { } /// /// 获取正在创建中的单据 /// /// public List GetCreateingList() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM dbo.wms_move_header a (nolock) "); SqlStringBuilder.Append(" WHERE a.order_status = @orderStatus AND enabled = 'Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CREATEING); List moveOrderList = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return moveOrderList; } } /// /// 根据单据类型获取此类型待处理的单据列表,如果单据类型为空,则获取全部类型 /// /// public List GetMoveOrderList(int? orderType) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM dbo.wms_move_header a (nolock) "); SqlStringBuilder.Append(" WHERE a.order_status < @orderStatus AND enabled = 'Y' "); if (orderType != null && orderType > 0) { SqlStringBuilder.Append(" AND a.order_type = @orderType "); } DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.COMPLETED); SqlStringBuilder.Append(" order by case when order_status='30' then 0 else 1 end, create_time "); if (orderType != null && orderType > 0) { parameters.Add("@orderType", orderType); } List moveOrderList = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return moveOrderList; } } /// /// 根据单据号获取单据明细列表 /// /// public List GetMoveDetailList(string orderNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM dbo.wms_move_detail (nolock) WHERE order_no = @orderNo AND enabled = 'Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); List moveDetailList = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return moveDetailList; } } /// /// 根据单据号和零件号获取单据明细 /// /// public WmsMoveDetail GetMoveDetail(string orderNo, string partNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * "); SqlStringBuilder.Append("FROM dbo.wms_move_detail (nolock) "); SqlStringBuilder.Append("WHERE order_no = @orderNo "); SqlStringBuilder.Append(" AND part_no = @partNo "); SqlStringBuilder.Append(" AND enabled = 'Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); parameters.Add("@partNo", partNo); WmsMoveDetail moveDetail = dbConn.QueryFirstOrDefault(SqlStringBuilder.ToString(), parameters); return moveDetail; } } /// /// 根据单据号获取单据条码列表 /// /// public List GetMoveSnList(string orderNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM dbo.wms_move_sn (nolock) WHERE order_no = @orderNo AND enabled = 'Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); List moveSnList = dbConn.Query(SqlStringBuilder.ToString(), parameters).ToList(); return moveSnList; } } /// /// 根据单据号和箱条码获取单据条码 /// /// public WmsMoveSn GetMoveSn(string orderNo, string cartonNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * "); SqlStringBuilder.Append("FROM dbo.wms_move_sn (nolock) "); SqlStringBuilder.Append("WHERE order_no = @orderNo "); SqlStringBuilder.Append(" AND carton_no = @cartonNo "); SqlStringBuilder.Append(" AND enabled = 'Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); parameters.Add("@cartonNo", cartonNo); WmsMoveSn moveSn = dbConn.QueryFirstOrDefault(SqlStringBuilder.ToString(), parameters); return moveSn; } } /// /// 处理扫描的箱条码 /// /// /// /// public string DoCarton(SysStock cartonInfo, string orderNo, string remarks, int orderType, string loginId, WmsMoveDetail moveDetail) { List sqlStrings = new List(); List parameterList = new List(); StringBuilder sql = new StringBuilder(1024); DynamicParameters parameters; // 单号为空则新增单据主表 if (string.IsNullOrEmpty(orderNo)) { if (orderType == (int)WmsEnumUtil.MoveOrderType.NC_IN_STOCK) { orderNo = GetOrderNo("ShiftWarehouse", "M");//NC入库 } else if (orderType == (int)WmsEnumUtil.MoveOrderType.NC_CONCESSION) { orderNo = GetOrderNo("ShiftNCOutbound", "R");//NC让步接收单 } else if (orderType == (int)WmsEnumUtil.MoveOrderType.NC_SCRAP) { orderNo = GetOrderNo("ShiftNCScrap", "S");//NC报废单 } else if (orderType == (int)WmsEnumUtil.MoveOrderType.NC_MOVE) { orderNo = GetOrderNo("ShiftWarehouse", "M");//NC移库单 } else if (orderType == (int)WmsEnumUtil.MoveOrderType.SUPPLIER_RETURN) { orderNo = GetOrderNo("ShiftWarehouse", "M");//供应商退货单 } else { return ""; } //插入单据主表-处理中 sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_move_header "); sql.Append("( "); sql.Append(" order_no,order_type,order_status,ref_order_no,remarks,factory_id,factory_code, "); sql.Append(" enabled,create_userid,create_time,guid "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( @orderNo,@orderType,@orderStatus,@refOrderNo,@remarks,@factoryId,@factoryCode, "); sql.Append(" @enabled,@createUserid,@createTime,@guid "); sql.Append(") "); parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); parameters.Add("@orderType", orderType); parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.CREATEING); parameters.Add("@refOrderNo", string.Empty); parameters.Add("@remarks", remarks); parameters.Add("@factoryId", cartonInfo.FactoryId); parameters.Add("@factoryCode", cartonInfo.FactoryCode); parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString()); parameters.Add("@createUserid", loginId); parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); } int itemNo = 0; if (moveDetail == null) { //插入单据明细表--需求数量 object obj = this.GetOrderDetailCount(orderNo); if (obj == null) { itemNo++; } else { itemNo = int.Parse(obj.ToString()); itemNo++; } sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_move_detail "); sql.Append("( order_no,item_no,part_id,part_no,part_spec,qty,pick_qty,out_qty,rec_qty,unit, "); sql.Append(" plan_date,plan_time,item_status,src_warehouse_id,src_warehouse_name,dest_warehouse_id, "); sql.Append(" dest_warehouse_name,src_zone_id,src_zone_name,dest_zone_id,dest_zone_name,src_erp_warehouse, "); sql.Append(" dest_erp_warehouse,factory_id,factory_code,enabled,create_userid,create_time,guid "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( @order_no,@item_no, "); sql.Append(" @part_id,@part_no,@part_spec,@qty,@pick_qty,@out_qty,@rec_qty,@unit, "); sql.Append(" @plan_date,@plan_time,@item_status,@src_warehouse_id,@src_warehouse_name,@dest_warehouse_id, "); sql.Append(" @dest_warehouse_name,@src_zone_id,@src_zone_name,@dest_zone_id,@dest_zone_name,@src_erp_warehouse, "); sql.Append(" @dest_erp_warehouse,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@guid "); sql.Append(" ) "); parameters = new DynamicParameters(); parameters.Add("@order_no", orderNo); parameters.Add("@item_no", itemNo); parameters.Add("@part_id", cartonInfo.PartId); parameters.Add("@part_no", cartonInfo.PartNo); parameters.Add("@part_spec", cartonInfo.PartSpec); parameters.Add("@qty", cartonInfo.Qty); parameters.Add("@pick_qty", 0); parameters.Add("@out_qty", 0); parameters.Add("@rec_qty", 0); parameters.Add("@unit", cartonInfo.Unit); parameters.Add("@plan_date", DateTime.Now.ToString("yyyy-MM-dd")); parameters.Add("@plan_time", string.Empty); parameters.Add("@item_status", WmsEnumUtil.MoveOrderDetailStatus.CREATE); parameters.Add("@src_warehouse_id", cartonInfo.WarehouseId); parameters.Add("@src_warehouse_name", cartonInfo.WarehouseName); parameters.Add("@dest_warehouse_id", 0); parameters.Add("@dest_warehouse_name", string.Empty); parameters.Add("@src_zone_id", cartonInfo.ZoneId); parameters.Add("@src_zone_name", cartonInfo.ZoneName); parameters.Add("@dest_zone_id", 0); parameters.Add("@dest_zone_name", string.Empty); parameters.Add("@src_erp_warehouse", cartonInfo.ErpWarehouse); parameters.Add("@dest_erp_warehouse", string.Empty); parameters.Add("@factory_id", cartonInfo.FactoryId); parameters.Add("@factory_code", cartonInfo.FactoryCode); parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString()); parameters.Add("@create_userid", loginId); parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); } else { //更新单据明细表--需求数量 itemNo = int.Parse(moveDetail.ItemNo); sql.Remove(0, sql.Length); sql.Append("UPDATE dbo.wms_move_detail "); sql.Append("SET qty = qty + @qty, "); sql.Append(" update_userid = @updateUserid, "); sql.Append(" update_time = @updateTime "); sql.Append("WHERE order_no = @orderNo "); sql.Append(" AND part_id = @partId "); parameters = new DynamicParameters(); parameters.Add("@orderNo", moveDetail.OrderNo); parameters.Add("@partId", cartonInfo.PartId); parameters.Add("@qty", cartonInfo.Qty); parameters.Add("@updateUserid", loginId); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); } //插入单据条码表 sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_move_sn "); sql.Append("( "); sql.Append(" order_no,item_no,part_id,part_no,part_spec, "); sql.Append(" carton_no,qty,unit,status,factory_id,factory_code,enabled, "); sql.Append(" create_userid,create_time,update_userid,update_time,guid "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( @orderNo,@itemNo,@partId,@partNo,@partSpec, "); sql.Append(" @cartonNo,@qty,@unit,@status,@factoryId,@factoryCode,@enabled, "); sql.Append(" @createUserid,@createTime,@updateUserid,@updateTime,@guid "); sql.Append(" ) "); parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); parameters.Add("@itemNo", itemNo); parameters.Add("@partId", cartonInfo.PartId); parameters.Add("@partNo", cartonInfo.PartNo); parameters.Add("@partSpec", cartonInfo.PartSpec); parameters.Add("@cartonNo", cartonInfo.CartonNo); parameters.Add("@qty", cartonInfo.Qty); parameters.Add("@unit", cartonInfo.Unit); parameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.CREATE); parameters.Add("@factoryId", cartonInfo.FactoryId); parameters.Add("@factoryCode", cartonInfo.FactoryCode); parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString()); parameters.Add("@createUserid", loginId); parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@updateUserid", loginId); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); if (orderType == (int)WmsEnumUtil.MoveOrderType.NC_IN_STOCK) { //更改条码表状态 sql.Remove(0, sql.Length); sql.Append("UPDATE sys_stock "); sql.Append("SET status = @status, "); sql.Append(" update_userid = @updateUserid, "); sql.Append(" update_time = @updateTime "); sql.Append("WHERE carton_no = @cartonNo "); parameters = new DynamicParameters(); parameters.Add("@cartonNo", cartonInfo.CartonNo); parameters.Add("@status", WmsEnumUtil.StockStatus.NC_QUARANTINE); parameters.Add("@updateUserid", loginId); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); //新增 sys_stock_trans 事务表 sql.Remove(0, sql.Length); sql.Append("INSERT INTO [dbo].[sys_stock_trans] "); sql.Append("( "); sql.Append(" [trans_code],[carton_no],[part_id],[part_no],[part_spec],[src_locate_id],[src_locate_name],[dest_locate_id], "); sql.Append(" [dest_locate_name],[old_qty],[new_qty],[trans_qty],[old_status],[new_status],[old_qms_status],[new_qms_status],[unit], "); sql.Append(" [factory_id],[factory_code],[src_erp_warehouse],[dest_erp_warehouse],[src_warehouse_id],[src_warehouse_name], "); sql.Append(" [dest_warehouse_id],[dest_warehouse_name],[src_zone_id],[src_zone_name],[dest_zone_id],[dest_zone_name],[enabled], "); sql.Append(" [update_userid],[update_time], [create_userid],[create_time],[guid],ref_order_no "); sql.Append(") "); sql.Append("VALUES "); sql.Append("(@trans_code, @carton_no, @part_id, @part_no, @part_spec, @src_locate_id, @src_locate_name, @dest_locate_id, "); sql.Append(" @dest_locate_name, @old_qty, @new_qty, @trans_qty, @old_status, @new_status, @old_qms_status, @new_qms_status, @unit, "); sql.Append(" @factory_id, @factory_code, @src_erp_warehouse, @dest_erp_warehouse, @src_warehouse_id, @src_warehouse_name, "); sql.Append(" @dest_warehouse_id, @dest_warehouse_name, @src_zone_id, @src_zone_name, @dest_zone_id, @dest_zone_name, @enabled, "); sql.Append(" @update_userid, @update_time, @create_userid, @create_time, @guid,@ref_order_no) "); parameters = new DynamicParameters(); parameters.Add("@trans_code", (int)WmsEnumUtil.TransType.QUARANTINE); parameters.Add("@carton_no", cartonInfo.CartonNo); parameters.Add("@part_id", cartonInfo.PartId); parameters.Add("@part_no", cartonInfo.PartNo); parameters.Add("@part_spec", cartonInfo.PartSpec); parameters.Add("@src_locate_id", cartonInfo.LocateId); parameters.Add("@src_locate_name", cartonInfo.LocateName); parameters.Add("@dest_locate_id", cartonInfo.LocateId); parameters.Add("@dest_locate_name", cartonInfo.LocateName); parameters.Add("@old_qty", cartonInfo.Qty); parameters.Add("@new_qty", cartonInfo.Qty); parameters.Add("@trans_qty", cartonInfo.Qty); parameters.Add("@old_status", cartonInfo.Status); parameters.Add("@new_status", (int)WmsEnumUtil.StockStatus.NC_QUARANTINE); parameters.Add("@old_qms_status", cartonInfo.QmsStatus); parameters.Add("@new_qms_status", cartonInfo.QmsStatus); parameters.Add("@unit", cartonInfo.Unit); parameters.Add("@factory_id", cartonInfo.FactoryId); parameters.Add("@factory_code", cartonInfo.FactoryCode); parameters.Add("@src_erp_warehouse", cartonInfo.ErpWarehouse); parameters.Add("@dest_erp_warehouse", cartonInfo.ErpWarehouse); parameters.Add("@src_warehouse_id", cartonInfo.WarehouseId); parameters.Add("@src_warehouse_name", cartonInfo.WarehouseName); parameters.Add("@dest_warehouse_id", cartonInfo.WarehouseId); parameters.Add("@dest_warehouse_name", cartonInfo.WarehouseName); parameters.Add("@src_zone_id", cartonInfo.ZoneId); parameters.Add("@src_zone_name", cartonInfo.ZoneName); parameters.Add("@dest_zone_id", cartonInfo.ZoneId); parameters.Add("@dest_zone_name", cartonInfo.ZoneName); parameters.Add("@enabled", cartonInfo.Enabled); parameters.Add("@update_userid", loginId); parameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@create_userid", loginId); parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); parameters.Add("@ref_order_no", orderNo); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); } if (this.ExecuteTransaction(sqlStrings, parameterList)) { return orderNo; } else { return ""; } } /// /// 提交单据 /// /// /// /// public bool OrderComplete(string orderNo, string loginId) { List sqlStrings = new List(); List parameterList = new List(); //更改单据主表-完成 StringBuilder sql = new StringBuilder(1024); sql.Append("UPDATE dbo.wms_move_header "); sql.Append("SET order_status = @orderStatus, "); sql.Append(" update_userid = @updateUserid, "); sql.Append(" update_time = @updateTime "); sql.Append("WHERE order_no = @order_no "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.COMPLETED); parameters.Add("@updateUserid", loginId); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@order_no", orderNo); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); //更新单据明细表-完成 sql.Remove(0, sql.Length); sql.Append("UPDATE dbo.wms_move_detail "); sql.Append("SET item_status = @itemStatus, "); sql.Append(" update_userid = @updateUserid, "); sql.Append(" update_time = @updateTime "); sql.Append("WHERE order_no = @orderNo "); sql.Append(" AND item_status < @itemStatus2 "); parameters = new DynamicParameters(); parameters.Add("@itemStatus", WmsEnumUtil.MoveOrderDetailStatus.COMPLETED); parameters.Add("@updateUserid", loginId); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@orderNo", orderNo); parameters.Add("@itemStatus2", WmsEnumUtil.MoveOrderDetailStatus.COMPLETED); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); return this.ExecuteTransaction(sqlStrings, parameterList); } /// /// 获取订单编号 /// /// public string GetOrderNo(string stockOrder, string p) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); DynamicParameters list = new DynamicParameters(); list.Add("@order_type", stockOrder); list.Add("@order_prefix", p); list.Add("@order_no", null, DbType.String, ParameterDirection.Output, 50); var hashtable = dbConn.Execute("sys_create_orderno", list, commandType: CommandType.StoredProcedure); string result = list.Get("@order_no"); return result; } } /// /// 获取订单编号 /// /// public object GetOrderDetailCount(string orderNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT count(1) "); SqlStringBuilder.Append("FROM dbo.wms_move_detail (nolock) "); SqlStringBuilder.Append("WHERE order_no = @orderNo "); SqlStringBuilder.Append(" AND enabled = 'Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); return dbConn.ExecuteScalar(SqlStringBuilder.ToString(), parameters); } } /// /// 提交单据-单据创建 /// /// /// /// public bool OrderCreated(string orderNo, string loginId) { List sqlStrings = new List(); List parameterList = new List(); //更改单据主表-创建 StringBuilder sql = new StringBuilder(1024); sql.Append("UPDATE dbo.wms_move_header "); sql.Append("SET order_status = @orderStatus, "); sql.Append(" update_userid = @updateUserid, "); sql.Append(" update_time = @updateTime "); sql.Append("WHERE order_no = @order_no "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.CREATE); parameters.Add("@updateUserid", loginId); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@order_no", orderNo); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); return this.ExecuteTransaction(sqlStrings, parameterList); } /// /// 大件拣选创建单据 /// /// /// public void CreatePullPickOrder(string loginId, List moveDetails, WmsPullingGroup pullingGroup) { List sqlStrings = new List(); List parameterList = new List(); StringBuilder sql = new StringBuilder(1024); DynamicParameters parameters; //List orders = moveDetails.Select(a => a.OrderNo).Distinct().ToList(); if (moveDetails.Count > pullingGroup.KittingQty) { var orderNo = GetOrderNo("PullPickNo", "JX");//大件拣选 //插入PULL单据主表-处理中 sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_pulling_order "); sql.Append("( "); sql.Append(" order_no,pulling_type,order_status,pulling_seq,group_code,group_name,work_order_no,cust_order_no, "); sql.Append(" pdline_id,pdline_code,factory_id,factory_code,enabled,create_userid,create_time, "); sql.Append(" update_userid,update_time,guid "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( "); sql.Append(" @order_no,@pulling_type,@order_status,@pulling_seq,@group_code,@group_name,@work_order_no,@cust_order_no, "); sql.Append(" @pdline_id,@pdline_code,@factory_id,@factory_code,@enabled,@create_userid,@create_time, "); sql.Append(" @update_userid,@update_time,@guid "); sql.Append(") "); parameters = new DynamicParameters(); parameters.Add("@order_no", orderNo); parameters.Add("@pulling_type", (int)WmsEnumUtil.PullGroupType.PRODUCT_JIT); parameters.Add("@order_status", (int)WmsEnumUtil.MoveOrderSnStatus.GENERATED); parameters.Add("@pulling_seq", 0); parameters.Add("@group_code", pullingGroup.GroupCode); parameters.Add("@group_name", pullingGroup.GroupName); parameters.Add("@work_order_no", moveDetails[0].OrderNo); parameters.Add("@cust_order_no", ""); //parameters.Add("@printed", orderNo); //parameters.Add("@print_date", orderNo); //parameters.Add("@reprint_count", orderNo); parameters.Add("@pdline_id", moveDetails[0].PdlineId); parameters.Add("@pdline_code", moveDetails[0].PdlineCode); parameters.Add("@factory_id", moveDetails[0].FactoryId); parameters.Add("@factory_code", moveDetails[0].FactoryCode); parameters.Add("@enabled", "Y"); parameters.Add("@create_userid", loginId); parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); parameters.Add("@update_userid", loginId); parameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); var pdlineZone = GetPdlineZone(Convert.ToInt32(moveDetails[0].PdlineId)); if (pdlineZone == null) { pdlineZone = new SysPdlineZone(); } for (int i = 0; i < pullingGroup.KittingQty; i++) { sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_pulling_order_detail "); sql.Append("( order_no,part_id,part_no,part_spec,qty,work_order_no,work_order_seq,cust_order_no,item_status,parent_part_id, "); sql.Append(" parent_part_no,parent_part_spec,factory_id,factory_code,enabled,create_userid,create_time,update_userid, "); sql.Append(" update_time,guid "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( @order_no,@part_id,@part_no,@part_spec,@qty,@work_order_no,@work_order_seq,@cust_order_no,@item_status,@parent_part_id,"); sql.Append(" @parent_part_no,@parent_part_spec,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@update_userid,"); sql.Append(" @update_time,@guid "); sql.Append(") "); parameters = new DynamicParameters(); parameters.Add("@order_no", orderNo); parameters.Add("@part_id", moveDetails[i].PartId); parameters.Add("@part_no", moveDetails[i].PartNo); parameters.Add("@part_spec", moveDetails[i].PartSpec); parameters.Add("@qty", moveDetails[i].Qty); parameters.Add("@work_order_no", moveDetails[i].OrderNo); parameters.Add("@work_order_seq", moveDetails[i].WorkOrderSeq); parameters.Add("@cust_order_no", ""); parameters.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.CREATE); parameters.Add("@parent_part_id", moveDetails[i].ParentPartId); parameters.Add("@parent_part_no", moveDetails[i].ParentPartNo); parameters.Add("@parent_part_spec", moveDetails[i].ParentPartSpec); parameters.Add("@factory_id", moveDetails[i].FactoryId); parameters.Add("@factory_code", moveDetails[i].FactoryCode); parameters.Add("@enabled", "Y"); parameters.Add("@create_userid", loginId); parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); parameters.Add("@update_userid", loginId); parameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); sql.Remove(0, sql.Length); sql.Append("UPDATE mes_work_order_part "); sql.Append("SET pull_status = 20, "); sql.Append(" update_userid = @updateUserid, "); sql.Append(" update_time = @updateTime "); sql.Append("WHERE ruid = @ruid "); parameters = new DynamicParameters(); parameters.Add("@ruid", moveDetails[i].Ruid); parameters.Add("@updateUserid", loginId); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); } } this.ExecuteTransaction(sqlStrings, parameterList); } public void CreateSafetyPullOrder(string loginId, List SysLocatePart) { List sqlStrings = new List(); List parameterList = new List(); StringBuilder sql = new StringBuilder(1024); DynamicParameters parameters; //处理无库存KT库位 var details0 = SysLocatePart.Where(a => a.Total2 == 0).ToList(); foreach (var item0 in details0) { var orderNo = GetOrderNo("ShiftProduction", "P");//生产领料 //插入单据主表-处理中 sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_move_header "); sql.Append("( "); sql.Append(" order_no,order_type,order_status,ref_order_no,factory_id,factory_code, "); sql.Append(" enabled,create_userid,create_time,guid,wrong_sign "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( @orderNo,@orderType,@orderStatus,@refOrderNo,@factoryId,@factoryCode, "); sql.Append(" @enabled,@createUserid,@createTime,@guid,@wrong_sign "); sql.Append(") "); parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); parameters.Add("@orderType", WmsEnumUtil.MoveOrderType.PICK); parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.CREATE); parameters.Add("@refOrderNo", "安全库存拉动"); parameters.Add("@factoryId", item0.FactoryId); parameters.Add("@factoryCode", item0.FactoryCode); parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString()); parameters.Add("@createUserid", loginId); parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); parameters.Add("@wrong_sign", 1); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_move_detail "); sql.Append("( order_no,item_no,part_id,part_no,part_spec,qty,pick_qty,out_qty,rec_qty,unit, "); sql.Append(" plan_date,plan_time,item_status,src_warehouse_id,src_warehouse_name,dest_warehouse_id, "); sql.Append(" dest_warehouse_name,src_zone_id,src_zone_name,dest_zone_id,dest_zone_name,src_erp_warehouse, "); sql.Append(" dest_erp_warehouse,factory_id,factory_code,enabled,create_userid,create_time,guid "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( @order_no,@item_no, "); sql.Append(" @part_id,@part_no,@part_spec,@qty,@pick_qty,@out_qty,@rec_qty,@unit, "); sql.Append(" @plan_date,@plan_time,@item_status,@src_warehouse_id,@src_warehouse_name,@dest_warehouse_id, "); sql.Append(" @dest_warehouse_name,@src_zone_id,@src_zone_name,@dest_zone_id,@dest_zone_name,@src_erp_warehouse, "); sql.Append(" @dest_erp_warehouse,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@guid "); sql.Append(" ) "); parameters = new DynamicParameters(); parameters.Add("@order_no", orderNo); parameters.Add("@item_no", 1); parameters.Add("@part_id", item0.PartId); parameters.Add("@part_no", item0.PartNo); parameters.Add("@part_spec", item0.PartSpec); parameters.Add("@qty", item0.MaxQty); parameters.Add("@pick_qty", 0); parameters.Add("@out_qty", 0); parameters.Add("@rec_qty", 0); parameters.Add("@unit", "件"); parameters.Add("@plan_date", DateTime.Now.ToString("yyyy-MM-dd")); parameters.Add("@plan_time", string.Empty); parameters.Add("@item_status", WmsEnumUtil.MoveOrderDetailStatus.CREATE); parameters.Add("@src_warehouse_id", 0); parameters.Add("@src_warehouse_name", string.Empty); parameters.Add("@dest_warehouse_id", item0.WarehouseId); parameters.Add("@dest_warehouse_name", item0.WarehouseName); parameters.Add("@src_zone_id", 0); parameters.Add("@src_zone_name", string.Empty); parameters.Add("@dest_zone_id", item0.ZoneId); parameters.Add("@dest_zone_name", item0.ZoneName); parameters.Add("@src_erp_warehouse", string.Empty); parameters.Add("@dest_erp_warehouse", item0.ErpWarehouse); parameters.Add("@factory_id", item0.FactoryId); parameters.Add("@factory_code", item0.FactoryCode); parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString()); parameters.Add("@create_userid", loginId); parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); sql.Remove(0, sql.Length); sql.Append("update sys_locate_part set is_safety_pull=@is_safety_pull,safety_pull_order=@safety_pull_order where guid=@guid"); parameters = new DynamicParameters(); parameters.Add("@guid", item0.Guid); parameters.Add("@is_safety_pull", "1"); parameters.Add("@safety_pull_order", orderNo); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); } //处理有库存KT库位 SysLocatePart = SysLocatePart.Where(a => a.Total2 != 0).ToList(); List orders = SysLocatePart.Select(a => a.ZoneName).Distinct().ToList(); foreach (var order in orders) { var details = SysLocatePart.Where(a => a.ZoneName.Equals(order)).ToList(); var orderNo = GetOrderNo("ShiftProduction", "P");//生产领料 //插入单据主表-处理中 sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_move_header "); sql.Append("( "); sql.Append(" order_no,order_type,order_status,ref_order_no,factory_id,factory_code, "); sql.Append(" enabled,create_userid,create_time,guid,wrong_sign "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( @orderNo,@orderType,@orderStatus,@refOrderNo,@factoryId,@factoryCode, "); sql.Append(" @enabled,@createUserid,@createTime,@guid,@wrong_sign "); sql.Append(") "); parameters = new DynamicParameters(); parameters.Add("@orderNo", orderNo); parameters.Add("@orderType", WmsEnumUtil.MoveOrderType.PICK); parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.CREATE); parameters.Add("@refOrderNo", "安全库存拉动"); parameters.Add("@factoryId", details[0].FactoryId); parameters.Add("@factoryCode", details[0].FactoryCode); parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString()); parameters.Add("@createUserid", loginId); parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); parameters.Add("@wrong_sign", 0); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); //var pdlineZone = GetPdlineZone(details[0].PdlineId); //if (pdlineZone == null) //{ // pdlineZone = new SysPdlineZone(); //} int itemNo = 0; foreach (var detail in details) { itemNo++; sql.Remove(0, sql.Length); sql.Append("INSERT INTO dbo.wms_move_detail "); sql.Append("( order_no,item_no,part_id,part_no,part_spec,qty,pick_qty,out_qty,rec_qty,unit, "); sql.Append(" plan_date,plan_time,item_status,src_warehouse_id,src_warehouse_name,dest_warehouse_id, "); sql.Append(" dest_warehouse_name,src_zone_id,src_zone_name,dest_zone_id,dest_zone_name,src_erp_warehouse, "); sql.Append(" dest_erp_warehouse,factory_id,factory_code,enabled,create_userid,create_time,guid "); sql.Append(") "); sql.Append("VALUES "); sql.Append("( @order_no,@item_no, "); sql.Append(" @part_id,@part_no,@part_spec,@qty,@pick_qty,@out_qty,@rec_qty,@unit, "); sql.Append(" @plan_date,@plan_time,@item_status,@src_warehouse_id,@src_warehouse_name,@dest_warehouse_id, "); sql.Append(" @dest_warehouse_name,@src_zone_id,@src_zone_name,@dest_zone_id,@dest_zone_name,@src_erp_warehouse, "); sql.Append(" @dest_erp_warehouse,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@guid "); sql.Append(" ) "); #region 获得当前库存 List getLocateQty = GetLocateQty(detail); decimal safetyQty = 0; if (getLocateQty.Count > 0) { safetyQty = getLocateQty[0].Qty; } #endregion parameters = new DynamicParameters(); parameters.Add("@order_no", orderNo); parameters.Add("@item_no", itemNo); parameters.Add("@part_id", detail.PartId); parameters.Add("@part_no", detail.PartNo); parameters.Add("@part_spec", detail.PartSpec); parameters.Add("@qty", detail.MaxQty - safetyQty); parameters.Add("@pick_qty", 0); parameters.Add("@out_qty", 0); parameters.Add("@rec_qty", 0); parameters.Add("@unit", "件"); parameters.Add("@plan_date", DateTime.Now.ToString("yyyy-MM-dd")); parameters.Add("@plan_time", string.Empty); parameters.Add("@item_status", WmsEnumUtil.MoveOrderDetailStatus.CREATE); parameters.Add("@src_warehouse_id", 0); parameters.Add("@src_warehouse_name", string.Empty); parameters.Add("@dest_warehouse_id", detail.WarehouseId); parameters.Add("@dest_warehouse_name", detail.WarehouseName); parameters.Add("@src_zone_id", 0); parameters.Add("@src_zone_name", string.Empty); parameters.Add("@dest_zone_id", detail.ZoneId); parameters.Add("@dest_zone_name", detail.ZoneName); parameters.Add("@src_erp_warehouse", string.Empty); parameters.Add("@dest_erp_warehouse", detail.ErpWarehouse); parameters.Add("@factory_id", detail.FactoryId); parameters.Add("@factory_code", detail.FactoryCode); parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString()); parameters.Add("@create_userid", loginId); parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@guid", Guid.NewGuid()); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); sql.Remove(0, sql.Length); sql.Append("update sys_locate_part set is_safety_pull=@is_safety_pull,safety_pull_order=@safety_pull_order where guid=@guid"); parameters = new DynamicParameters(); parameters.Add("@guid", detail.Guid); parameters.Add("@is_safety_pull", "1"); parameters.Add("@safety_pull_order", orderNo); parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); } } // 创建生产领料单 this.ExecuteTransaction(sqlStrings, parameterList); } private List GetLocateQty(SysLocatePart detail) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder GetLocateQtyString = new StringBuilder(1024); GetLocateQtyString.Append(" select sum(qty) qty from sys_stock(nolock) where locate_id=@locate_id and zone_id =@zone_id and warehouse_id=@warehouse_id and factory_id =@factory_id and status ='70' and enabled='Y' and part_id=@part_id "); DynamicParameters GetLocateQtyParameters = new DynamicParameters(); GetLocateQtyParameters.Add("@locate_id", detail.LocateId); GetLocateQtyParameters.Add("@zone_id", detail.ZoneId); GetLocateQtyParameters.Add("@warehouse_id", detail.WarehouseId); GetLocateQtyParameters.Add("@factory_id", detail.FactoryId); GetLocateQtyParameters.Add("@part_id", detail.PartId); return dbConn.Query(GetLocateQtyString.ToString(), GetLocateQtyParameters).ToList(); } } public void ChangeSafety(List header) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); List sqlStrings = new List(); List parameterList = new List(); StringBuilder sql = new StringBuilder(1024); DynamicParameters parameters; var details0 = header.Where(a => !a.Qty.Equals("0.000000")).ToList(); foreach (var item in details0) { sql.Remove(0, sql.Length); sql.Append("update wms_move_header set wrong_sign=0 where guid=@ruid"); parameters = new DynamicParameters(); parameters.Add("@ruid", item.Guid); sqlStrings.Add(sql.ToString()); parameterList.Add(parameters); } this.ExecuteTransaction(sqlStrings, parameterList); } } /// /// 根据产线ID获取产线库区关系信息 /// /// /// private SysPdlineZone GetPdlineZone(int pdlineId) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT top 1 *,z.erp_warehouse FROM [dbo].[sys_pdline_zone] pz (nolock) "); SqlStringBuilder.Append("JOIN dbo.sys_zone z (nolock) ON pz.zone_id = z.zone_id "); SqlStringBuilder.Append("WHERE pz.pdline_id = @pdlineId "); SqlStringBuilder.Append(" AND pz.busi_type = @busiType "); SqlStringBuilder.Append(" AND pz.enabled = 'Y' "); DynamicParameters parameters = new DynamicParameters(); parameters.Add("@pdlineId", pdlineId); parameters.Add("@busiType", WmsEnumUtil.PdlineZoneBusiType.BIG_PART_PULL); var result = dbConn.QueryFirstOrDefault(SqlStringBuilder.ToString(), parameters); return result; } } } }