using Dapper;
using Estsh.Core.Dapper;
using Estsh.Core.Model.EnumUtil;
using Estsh.Core.Model.ExcelModel;
using Estsh.Core.Model.Result;
using Estsh.Core.Models;
using Estsh.Core.Repository.IRepositories;
using System.Collections;
using System.Data;
using System.Text;
/***************************************************************************************************
*
* 更新人:sitong.dong
* 描述:拉动组管理
* 修改时间:2022.06.22
* 修改日志:系统迭代升级
*
**************************************************************************************************/
namespace Estsh.Core.Repositories
{
///
/// 数据访问类
///
public class PullGroupRepository : BaseRepository, IPullGroupRepository
{
public PullGroupRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext)
{
}
#region 成员方法
///
/// 获得菜单列表数据
///
public List getList(string ruid)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from wms_pulling_group (nolock) ");
if (!ruid.Trim().Equals(""))
{
strSql.Append(" where ruid=" + ruid);
}
List result = dbConn.Query(strSql.ToString()).ToList();
return result;
}
}
///
/// 获取分页数据列表
///
public Hashtable getPullGroupListByPage(int PageSize, int PageIndex, string strWhere, string OrderBy)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
Hashtable result = new Hashtable();
DynamicParameters Params = new DynamicParameters();
Params.Add("@TotalCount", 0, DbType.Int32, ParameterDirection.Output);
Params.Add("@TotalPage", 0, DbType.Int32, ParameterDirection.Output);
Params.Add("@GroupColumn", "");
Params.Add("@Table", "wms_pulling_group a (nolock) ");
Params.Add("@Column", "*");
Params.Add("@PageSize", PageSize);
Params.Add("@CurrentPage", PageIndex);
Params.Add("@Condition", strWhere);
Params.Add("@OrderColumn", OrderBy);
Params.Add("@Group", 0);
List dataList = dbConn.Query("Com_Pagination", Params, commandType: CommandType.StoredProcedure).ToList();
result.Add("dataList", dataList);
result.Add("totalCount", Params.Get("@TotalCount"));
return result;
}
}
///
/// 获取分页数据列表
///
public Hashtable getPullGroupDetailListByPage(string strWhere)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
Hashtable result = new Hashtable();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("select a.* from wms_pulling_group_part a (nolock) ");
SqlStringBuilder.Append("where " + strWhere);
List dataList = dbConn.Query(SqlStringBuilder.ToString()).ToList();
result.Add("dataList", dataList);
result.Add("totalCount", dataList.Count());
return result;
}
}
public List getPullGroupDetailList(string strWhere)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
Hashtable result = new Hashtable();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("select a.* from wms_pulling_group_part a (nolock) ");
SqlStringBuilder.Append("where " + strWhere);
List dataList = dbConn.Query(SqlStringBuilder.ToString()).ToList();
return dataList;
}
}
public List GetPartInfo(string part_no)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
string sql = "SELECT part_id,part_no,part_spec,default_box_qty FROM sys_part (NOLOCK) WHERE enabled='Y' AND part_no LIKE '" + part_no + "%' ORDER BY part_no";
List result = dbConn.Query(sql).ToList();
return result;
}
}
public List GetErpwarehouse()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
String strSql = "select distinct erp_warehouse as [key] , erp_warehouse as value from sys_zone where enabled='Y' ";
List result = dbConn.Query(strSql).ToList();
return result;
}
}
///
/// 获取下拉框菜单数据 这里显示的是待添加的厂区信息,厂区名称
///
///
public List getSelectFactory()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("select factory_id as [value],factory_name as [key] from sys_factory where Enabled = 'Y'");
List result = dbConn.Query(strSql.ToString()).ToList();
return result;
}
}
public List getSelectWarehouse()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("select warehouse_id as [value],warehouse_desc as [key] from sys_warehouse where Enabled = 'Y'");
List result = dbConn.Query(strSql.ToString()).ToList();
return result;
}
}
public List getSelectWarehouse(string warehouseid)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from sys_warehouse where Enabled = 'Y' and warehouse_id='" + warehouseid + "'");
List result = dbConn.Query(strSql.ToString()).ToList();
return result;
}
}
public List getSelectZone(string zoneid)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from sys_zone where Enabled = 'Y' and zone_id='" + zoneid + "'");
List result = dbConn.Query(strSql.ToString()).ToList();
return result;
}
}
public List getSelectZone()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("select zone_id as [value],zone_name as [key] from sys_zone where Enabled = 'Y'");
List result = dbConn.Query(strSql.ToString()).ToList();
return result;
}
}
public List getSelectVendor()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("select vendor_id as [value],vendor_name as [key] from sys_Vendor where Enabled = 'Y'");
List result = dbConn.Query(strSql.ToString()).ToList();
return result;
}
}
public List getSelectVendor(string vendorId)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from sys_Vendor where Enabled = 'Y' and vendor_id='" + vendorId + "'");
List result = dbConn.Query(strSql.ToString()).ToList();
return result;
}
}
public List GetPart(int type)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
string sql = "SELECT part_id as [value],part_no as [key] FROM sys_part (NOLOCK) WHERE enabled='Y' ORDER BY part_no";
DynamicParameters param = new DynamicParameters();
param.Add("@part_type", type);
List result = dbConn.Query(sql, param).ToList();
return result;
}
}
public List GetOrderType()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
string sql = "SELECT [enum_value] as [value],[enum_desc] as [key] FROM sys_enum where enum_type='wms_PullGroup_order_type' and enabled='Y'";
List result = dbConn.Query(sql).ToList();
return result;
}
}
public List GetPart(int type, string PartNo)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
string sql = "SELECT * FROM sys_part (NOLOCK) WHERE enabled='Y' and part_no='" + PartNo + "' ORDER BY part_no";
DynamicParameters param = new DynamicParameters();
param.Add("@part_type", type);
List result = dbConn.Query(sql, param).ToList();
return result;
}
}
public List GetPdlineByPdlineId(int pdlineId)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
string sql = "SELECT * FROM sys_pdline (NOLOCK) WHERE enabled='Y' and pdline_id='" + pdlineId + "'";
List result = dbConn.Query(sql).ToList();
return result;
}
}
public SysPdline GetPdlineByPdlineCode(string pdlineCode)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
string sql = "SELECT * FROM sys_pdline (NOLOCK) WHERE pdline_code='" + pdlineCode + "'";
SysPdline result = dbConn.Query(sql).FirstOrDefault();
return result;
}
}
public List GetPdlineByKey()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
string sql = "SELECT distinct pdline_code as [value],pdline_code as [key] FROM sys_pdline (NOLOCK) WHERE enabled='Y' ORDER BY pdline_code";
DynamicParameters param = new DynamicParameters();
List result = dbConn.Query(sql, param).ToList();
return result;
}
}
///
/// 获取订单编号
///
///
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 bool saveHandPullGroup(string groupCode, string handPullQty)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
List sqlList = new List();
List parametersList = new List();
DynamicParameters parameters = new DynamicParameters();
#region
string checkPullingGroupSql = @"select * from [dbo].[wms_pulling_group] where group_code = '" + groupCode + "'";
List wmsPulling = dbConn.Query(checkPullingGroupSql).ToList();
for (int j = 0; j < wmsPulling.Count; j++)
{
string getPullingGroupCumulativeValueSql = @"select * from [dbo].[wms_pulling_group] (nolock) where group_code='" + wmsPulling[j].GroupCode + "' and pdline_code = '" + wmsPulling[j].PdlineCode + "'";
List wmsPullingGroup = dbConn.Query(getPullingGroupCumulativeValueSql).ToList();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" select * from mes_work_order_part k (nolock) where k.order_no in (select distinct top " + handPullQty + " a.order_no from mes_work_order_part a (nolock) left join mes_work_order b (nolock) on a.order_no = b.order_no and a.parent_part_no = b.part_no ");
SqlStringBuilder.Append(" where a.part_no in (select part_no from[dbo].[wms_pulling_group_part] a (nolock) left join[dbo].[wms_pulling_group] b (nolock) on a.group_code = b.group_code ");
SqlStringBuilder.Append(" where b.group_code = '" + wmsPulling[j].GroupCode + "' and pdline_code = '" + wmsPulling[j].PdlineCode + "' and a.enabled='Y' and b.enabled='Y') and a.pull_status = 10 and pdline_code = '" + wmsPulling[j].PdlineCode + "' order by a.order_no ) ");
SqlStringBuilder.Append(" and k.part_no in (select part_no from[dbo].[wms_pulling_group_part] a (nolock) left join[dbo].[wms_pulling_group] b (nolock) on a.group_code = b.group_code ");
SqlStringBuilder.Append(" where b.group_code = '" + wmsPulling[j].GroupCode + "' and pdline_code = '" + wmsPulling[j].PdlineCode + "' and a.enabled='Y' and b.enabled='Y') ");
List mesWorkOrderParts = dbConn.Query(SqlStringBuilder.ToString()).ToList();
if (mesWorkOrderParts.Count > 0)
{
List storeInfoList = mesWorkOrderParts.GroupBy(x => new { x.PartNo, x.FactoryId, x.FactoryCode })
.Select(g => new MesWorkOrderPart { PartNo = g.Key.PartNo, FactoryId = g.Key.FactoryId, FactoryCode = g.Key.FactoryCode, Qty = g.Sum(b => b.Qty) }).ToList();
var orderNo = GetOrderNo("ShiftProduction", "P");//生产领料
for (int i = 0; i < storeInfoList.Count; i++)
{
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("INSERT INTO dbo.wms_move_detail ");
SqlStringBuilder.Append(" (order_no,item_no,part_id,part_no,part_spec,qty,pick_qty,out_qty,rec_qty ");
SqlStringBuilder.Append(" ,unit,plan_date,plan_time,item_status,src_warehouse_id,src_warehouse_name,dest_warehouse_id ");
SqlStringBuilder.Append(" ,dest_warehouse_name,src_zone_id,src_zone_name,dest_zone_id,dest_zone_name,src_erp_warehouse,dest_erp_warehouse,factory_id ");
SqlStringBuilder.Append(" ,factory_code,enabled,create_userid,create_time,guid) ");
SqlStringBuilder.Append(" VALUES(@orderNo,@itemNo,@partId,@partNo,@partSpec,@qty,@pickQty,@outQty,@recQty,@unit,@planDate ");
SqlStringBuilder.Append(" ,@planTime,@itemStatus,@srcWarehouseId,@srcWarehouseName,@destWarehouseId,@destWarehouseName ");
SqlStringBuilder.Append(" ,@srcZoneId,@srcZoneName,@destZoneId,@destZoneName,@srcErpWarehouse,@destErpWarehouse ");
SqlStringBuilder.Append(" ,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,@guid) ");
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@orderNo", orderNo);//生产领料单
parameters.Add("@itemNo", (i + 1) * 10);//序号
StringBuilder partNoStringBuilder = new StringBuilder(1024);
partNoStringBuilder.Append("select * from sys_part (nolock) where part_no='" + storeInfoList[i].PartNo + "'");//零件号ID
List sysParts = dbConn.Query(partNoStringBuilder.ToString()).ToList();
if (sysParts.Count > 0)
{
parameters.Add("@partId", sysParts[0].PartId);//
parameters.Add("@partNo", sysParts[0].PartNo);//零件号
parameters.Add("@partSpec", sysParts[0].PartSpec);//简码
parameters.Add("@unit", sysParts[0].Unit);//单位
}
else
{
parameters.Add("@partId", 0);//零件号ID
parameters.Add("@partNo", storeInfoList[i].PartNo);//零件号
parameters.Add("@partSpec", "");//简码
parameters.Add("@unit", "");//单位
}
parameters.Add("@qty", storeInfoList[i].Qty);//数量
parameters.Add("@pickQty", 0);//
parameters.Add("@outQty", 0);//
parameters.Add("@recQty", 0);//
parameters.Add("@planDate", "");//计划日期
parameters.Add("@planTime", "");//计划时间
parameters.Add("@itemStatus", "10");//状态
parameters.Add("@srcWarehouseId", 0);//源仓库ID
parameters.Add("@srcWarehouseName", "");//源仓库
parameters.Add("@srcZoneId", 0);//源库区ID
parameters.Add("@srcZoneName", "");//源库区
parameters.Add("@srcErpWarehouse", "");//源ERP库存地
string sqlPull = "SELECT * FROM dbo.wms_pulling_group (nolock) where group_code = '" + wmsPulling[j].GroupCode + "'";
WmsPullingGroup pullingGroup = dbConn.QueryFirstOrDefault(sqlPull);
if (pullingGroup != null)
{
parameters.Add("@destWarehouseId", 0);//目标仓库ID
parameters.Add("@destWarehouseName", "");//目标仓库
parameters.Add("@destZoneId", 0);//目标库区ID
parameters.Add("@destZoneName", pullingGroup.GroupName);//目标库区
parameters.Add("@destErpWarehouse", "");//目标ERP库存地
}
else
{
parameters.Add("@destWarehouseId", 0);//目标仓库ID
parameters.Add("@destWarehouseName", "");//目标仓库
parameters.Add("@destZoneId", 0);//目标库区ID
parameters.Add("@destZoneName", "");//目标库区
parameters.Add("@destErpWarehouse", "");//目标ERP库存地
}
parameters.Add("@factoryId", storeInfoList[0].FactoryId);//工厂ID
parameters.Add("@factoryCode", storeInfoList[0].FactoryCode);//工厂代码
parameters.Add("@enabled", "Y");
parameters.Add("@createUserid", 0);
parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期
parameters.Add("@guid", Guid.NewGuid().ToString());//
parametersList.Add(parameters);
}
StringBuilder stringBuilderSQL = new StringBuilder(1024);
stringBuilderSQL.Append("INSERT INTO dbo.wms_move_header ");
stringBuilderSQL.Append(" (order_no,order_type,order_status,ref_order_no,factory_id,factory_code ");
stringBuilderSQL.Append(" ,enabled,create_userid,create_time,guid) ");
stringBuilderSQL.Append(" VALUES(@orderNo,@orderType,@orderStatus,@refOrderNo ");
stringBuilderSQL.Append(" ,@factoryId,@factoryCode,@enabled,@createUserid ");
stringBuilderSQL.Append(" ,@createTime,@guid) ");
sqlList.Add(stringBuilderSQL.ToString());
parameters = new DynamicParameters();
parameters.Add("@orderNo", orderNo);//生产领料单
parameters.Add("@orderType", (int)WmsEnumUtil.MoveOrderType.PICK);//生产领料单
parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CREATE);//已创建
parameters.Add("@refOrderNo", "成品下线大件拉动");//
parameters.Add("@factoryId", mesWorkOrderParts[0].FactoryId);//
parameters.Add("@factoryCode", mesWorkOrderParts[0].FactoryCode);//
parameters.Add("@enabled", "Y");//
parameters.Add("@createUserid", 0);//
parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期
parameters.Add("@guid", Guid.NewGuid().ToString());//
parametersList.Add(parameters);
for (int i = 0; i < mesWorkOrderParts.Count; i++)
{
for (int k = 0; k < storeInfoList.Count; k++)
{
stringBuilderSQL = new StringBuilder(1024);
stringBuilderSQL.Append("update mes_work_order_part set pull_status =@pullStatus where order_no=@order_no and part_no=@part_no");
sqlList.Add(stringBuilderSQL.ToString());
parameters = new DynamicParameters();
parameters.Add("@order_no", mesWorkOrderParts[i].OrderNo);//id
parameters.Add("@part_no", storeInfoList[k].PartNo);//id
parameters.Add("@pullStatus", "20");//
parametersList.Add(parameters);
}
}
}
}
return InsertData(sqlList, parametersList);
#endregion
}
}
///
/// 插入菜单数据
///
///
///
public int savePullGroup(WmsPullingGroup htParams, IList htDetailParams)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
for (int i = 0; i < htDetailParams.Count; i++)
{
htDetailParams[i].GroupCode = htParams.GroupCode;
htDetailParams[i].GroupName = htParams.GroupName;
}
dbConn.Open();
List SqlStrings = new List();
List