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.

1011 lines
50 KiB
C#

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<WmsMoveHeader>, IMoveOrderRepository
{
public MoveOrderRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext)
{
}
/// <summary>
/// 获取正在创建中的单据
/// </summary>
/// <returns></returns>
public List<WmsMoveHeader> 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<WmsMoveHeader> moveOrderList = dbConn.Query<WmsMoveHeader>(SqlStringBuilder.ToString(), parameters).ToList();
return moveOrderList;
}
}
/// <summary>
/// 根据单据类型获取此类型待处理的单据列表,如果单据类型为空,则获取全部类型
/// </summary>
/// <returns></returns>
public List<WmsMoveHeader> 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<WmsMoveHeader> moveOrderList = dbConn.Query<WmsMoveHeader>(SqlStringBuilder.ToString(), parameters).ToList();
return moveOrderList;
}
}
/// <summary>
/// 根据单据号获取单据明细列表
/// </summary>
/// <returns></returns>
public List<WmsMoveDetail> 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<WmsMoveDetail> moveDetailList = dbConn.Query<WmsMoveDetail>(SqlStringBuilder.ToString(), parameters).ToList();
return moveDetailList;
}
}
/// <summary>
/// 根据单据号和零件号获取单据明细
/// </summary>
/// <returns></returns>
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<WmsMoveDetail>(SqlStringBuilder.ToString(), parameters);
return moveDetail;
}
}
/// <summary>
/// 根据单据号获取单据条码列表
/// </summary>
/// <returns></returns>
public List<WmsMoveSn> 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<WmsMoveSn> moveSnList = dbConn.Query<WmsMoveSn>(SqlStringBuilder.ToString(), parameters).ToList();
return moveSnList;
}
}
/// <summary>
/// 根据单据号和箱条码获取单据条码
/// </summary>
/// <returns></returns>
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<WmsMoveSn>(SqlStringBuilder.ToString(), parameters);
return moveSn;
}
}
/// <summary>
/// 处理扫描的箱条码
/// </summary>
/// <param name="cartonInfo"></param>
/// <param name="moveDetail"></param>
/// <returns></returns>
public string DoCarton(SysStock cartonInfo, string orderNo, string remarks, int orderType,
string loginId, WmsMoveDetail moveDetail)
{
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
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 "";
}
}
/// <summary>
/// 提交单据
/// </summary>
/// <param name="orderNo"></param>
/// <param name="loginId"></param>
/// <returns></returns>
public bool OrderComplete(string orderNo, string loginId)
{
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
//更改单据主表-完成
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);
}
/// <summary>
/// 获取订单编号
/// </summary>
/// <returns></returns>
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<string>("@order_no");
return result;
}
}
/// <summary>
/// 获取订单编号
/// </summary>
/// <returns></returns>
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);
}
}
/// <summary>
/// 提交单据-单据创建
/// </summary>
/// <param name="orderNo"></param>
/// <param name="loginId"></param>
/// <returns></returns>
public bool OrderCreated(string orderNo, string loginId)
{
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
//更改单据主表-创建
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);
}
/// <summary>
/// 大件拣选创建单据
/// </summary>
/// <param name="loginId"></param>
/// <param name="moveDetails"></param>
public void CreatePullPickOrder(string loginId, List<WmsPullingOrderDetail> moveDetails, WmsPullingGroup pullingGroup)
{
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters;
//List<string> 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> SysLocatePart)
{
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
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<string> 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<SysStock> 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<SysStock> 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<SysStock>(GetLocateQtyString.ToString(), GetLocateQtyParameters).ToList();
}
}
public void ChangeSafety(List<WmsMoveHeader> header)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
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);
}
}
/// <summary>
/// 根据产线ID获取产线库区关系信息
/// </summary>
/// <param name="pdlineId"></param>
/// <returns></returns>
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<SysPdlineZone>(SqlStringBuilder.ToString(), parameters);
return result;
}
}
}
}