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.
313 lines
21 KiB
C#
313 lines
21 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 OutsourceDeductRepository : BaseRepository<BaseEntity>, IOutsourceDeductRepository
|
|
{
|
|
public OutsourceDeductRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext)
|
|
{
|
|
|
|
}
|
|
/// <summary>
|
|
/// 获取待扣减的数据
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public List<WmsSubcontractData> GetOutsourceDeductInfo()
|
|
{
|
|
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
|
|
{
|
|
//获取关联库存中在线边库的库存信息
|
|
StringBuilder SqlStringBuilder = new StringBuilder(1024);
|
|
SqlStringBuilder.Append("select top 500 * from wms_subcontract_data (nolock) ");
|
|
SqlStringBuilder.Append("where deal_status=10 ");
|
|
SqlStringBuilder.Append("order by create_time ");
|
|
|
|
return dbConn.Query<WmsSubcontractData>(SqlStringBuilder.ToString()).ToList();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 处理待扣减的数据
|
|
/// </summary>
|
|
/// <param name="sapSu"></param>
|
|
/// <returns></returns>
|
|
public bool InsertOutsourceDeductInfo(List<WmsSubcontractData> wmsSubcontracts)
|
|
{
|
|
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
|
|
{
|
|
WmsSubcontractData wmsSubcontract = new WmsSubcontractData();
|
|
List<string> sqlList = new List<string>();
|
|
List<DynamicParameters> parametersList = new List<DynamicParameters>();
|
|
|
|
StringBuilder SqlStringBuilder = new StringBuilder(1024);
|
|
DynamicParameters parameters = new DynamicParameters();
|
|
|
|
int firstCount = 0;//初始行
|
|
int rowCount = 10000;//前10000行
|
|
|
|
bool blLoop = true;
|
|
while (blLoop)
|
|
{
|
|
sqlList = new List<string>();
|
|
parametersList = new List<DynamicParameters>();
|
|
|
|
SqlStringBuilder = new StringBuilder(1024);
|
|
SqlStringBuilder.Append(" select * from wms_subcontract_data (nolock) where deal_status=10 order by create_time,1 OFFSET " + firstCount + " ROWS FETCH NEXT " + rowCount + " ROWS ONLY ");
|
|
List<WmsSubcontractData> wmsSubcontractDatas = dbConn.Query<WmsSubcontractData>(SqlStringBuilder.ToString()).ToList();
|
|
|
|
|
|
for (int i = 0; i < wmsSubcontractDatas.Count; i++)
|
|
{
|
|
WmsSubcontractData wmsSubcontractData = wmsSubcontractDatas[i];
|
|
string partNo = "";
|
|
if (wmsSubcontractData.TransCode== 30)
|
|
{
|
|
SqlStringBuilder = new StringBuilder(1024);
|
|
SqlStringBuilder.Append(" select * from wms_outsource_bom (nolock) where part_no='"+ wmsSubcontract.PartNo + "' ");
|
|
List<WmsOutsourceBom> wmsOutsourceBoms = dbConn.Query<WmsOutsourceBom>(SqlStringBuilder.ToString()).ToList();
|
|
if (wmsOutsourceBoms.Count>0)
|
|
{
|
|
partNo = wmsOutsourceBoms[0].ItemPartNo;
|
|
}
|
|
else
|
|
{
|
|
SqlStringBuilder = new StringBuilder(1024);//更新 已处理扣减数据
|
|
SqlStringBuilder.Append(" update wms_subcontract_data set deal_status=@dealStatus,err_msg='委外Bom零件号未维护,请检查!' where ruid=@ruid");
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@dealStatus", 30);
|
|
parameters.Add("@ruid", wmsSubcontractData.Ruid);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
this.ExecuteTransaction(sqlList, parametersList);//执行
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
partNo = wmsSubcontract.PartNo;
|
|
}
|
|
SqlStringBuilder = new StringBuilder(1024);
|
|
SqlStringBuilder.Append("select * from sys_locate (nolock) where locate_type='90' enabled='Y' and order by create_time ");
|
|
List<SysLocate> sysLocates = dbConn.Query<SysLocate>(SqlStringBuilder.ToString()).ToList();
|
|
for (int j = 0; j < sysLocates.Count; j++)
|
|
{
|
|
sqlList = new List<string>();
|
|
parametersList = new List<DynamicParameters>();
|
|
|
|
|
|
SqlStringBuilder = new StringBuilder(1024);
|
|
SqlStringBuilder.Append("select * from sys_stock (nolock) where part_no='" + partNo + "' and locate_name='" + sysLocates[j].LocateName + "' and qty!=0 and enabled='Y' and order by create_time ");
|
|
SysStock stocks = dbConn.Query<SysStock>(SqlStringBuilder.ToString()).FirstOrDefault();
|
|
if (stocks != null)
|
|
{
|
|
decimal remainQty = stocks.Qty - (wmsSubcontractData.Qty - wmsSubcontractData.DealQty == null ? 0 : wmsSubcontractData.DealQty);
|
|
decimal handledItemQty = 0;
|
|
if (remainQty >= 0)//库存数>=待扣减数
|
|
{
|
|
SqlStringBuilder = new StringBuilder(1024);//扣减库存数
|
|
SqlStringBuilder.Append(" update sys_stock set qty=@qty where ruid=@ruid");
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@qty", remainQty);
|
|
parameters.Add("@ruid", stocks.Ruid);
|
|
//dbConn.Execute(SqlStringBuilder.ToString(),parameters);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
SqlStringBuilder = new StringBuilder(1024);//已扣减的数据,写入记录扣减日志表
|
|
SqlStringBuilder.Append("INSERT INTO dbo.wms_subcontract_data_log ");
|
|
SqlStringBuilder.Append(" (trans_code,part_id,part_no,part_spec,carton_no,qty ");
|
|
SqlStringBuilder.Append(" ,unit,vendor_id,vendor_code,ref_order_no ");
|
|
SqlStringBuilder.Append(" ,factory_id,factory_code,enabled,create_userid,create_time,guid) ");
|
|
SqlStringBuilder.Append(" VALUES(@trans_code,@part_id,@part_no,@part_spec,@carton_no,@qty ");
|
|
SqlStringBuilder.Append(" ,@unit,@vendor_id,@vendor_code,@ref_order_no ");
|
|
SqlStringBuilder.Append(" ,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@guid) ");
|
|
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@trans_code", wmsSubcontractData.TransCode);
|
|
parameters.Add("@part_id", wmsSubcontractData.PartId);
|
|
parameters.Add("@part_no", wmsSubcontractData.PartNo);
|
|
parameters.Add("@part_spec", wmsSubcontractData.PartSpec);
|
|
parameters.Add("@carton_no", wmsSubcontractData.CartonNo);
|
|
parameters.Add("@qty", wmsSubcontractData.Qty);
|
|
parameters.Add("@unit", wmsSubcontractData.Unit);
|
|
parameters.Add("@vendor_id", wmsSubcontractData.VendorId);
|
|
parameters.Add("@vendor_code", wmsSubcontractData.VendorCode);
|
|
parameters.Add("@ref_order_no", wmsSubcontractData.RefOrderNo);
|
|
parameters.Add("@factory_id", wmsSubcontractData.FactoryId);
|
|
parameters.Add("@factory_code", wmsSubcontractData.FactoryCode);
|
|
parameters.Add("@enabled", wmsSubcontractData.Enabled);
|
|
parameters.Add("@createUserid", 0);
|
|
parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
parameters.Add("@guid", Guid.NewGuid().ToString());
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
SqlStringBuilder = new StringBuilder(1024);//删除已扣减的数据
|
|
SqlStringBuilder.Append(" delete from wms_subcontract_data where ruid=@ruid");
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@ruid", wmsSubcontractData.Ruid);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
this.ExecuteTransaction(sqlList, parametersList);//执行
|
|
break;
|
|
}
|
|
else//库存数<待扣减数
|
|
{
|
|
SqlStringBuilder = new StringBuilder(1024);//扣减库存数
|
|
SqlStringBuilder.Append(" update sys_stock set qty=0 , enabled='N' where ruid=" + stocks.Ruid);
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@ruid", wmsSubcontractData.Ruid);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
handledItemQty = Convert.ToDecimal(wmsSubcontractData.DealQty == null ? 0 : wmsSubcontractData.DealQty) + stocks.Qty;
|
|
SqlStringBuilder = new StringBuilder(1024);//更新 已处理扣减数据
|
|
SqlStringBuilder.Append(" update wms_subcontract_data set deal_qty=@dealQty where ruid=@ruid");
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@dealQty", handledItemQty);
|
|
parameters.Add("@ruid", wmsSubcontractData.Ruid);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
this.ExecuteTransaction(sqlList, parametersList);//执行
|
|
while (true)
|
|
{
|
|
sqlList = new List<string>();
|
|
parametersList = new List<DynamicParameters>();
|
|
|
|
SqlStringBuilder = new StringBuilder(1024);
|
|
SqlStringBuilder.Append("select * from wms_subcontract_data (nolock) where ruid=" + wmsSubcontractData.Ruid);
|
|
WmsSubcontractData wmsSubcontract1 = dbConn.Query<WmsSubcontractData>(SqlStringBuilder.ToString()).FirstOrDefault();
|
|
|
|
if (wmsSubcontract1.Qty > wmsSubcontract1.DealQty)
|
|
{
|
|
SqlStringBuilder = new StringBuilder(1024);
|
|
SqlStringBuilder.Append("select * from sys_stock (nolock) where part_no='" + partNo + "' and locate_name='" + sysLocates[j].LocateName + "' and qty!=0 and enabled='Y' and order by create_time ");
|
|
stocks = dbConn.Query<SysStock>(SqlStringBuilder.ToString()).FirstOrDefault();
|
|
if (stocks != null)
|
|
{
|
|
remainQty = stocks.Qty - (wmsSubcontractData.Qty - wmsSubcontractData.DealQty == null ? 0 : wmsSubcontractData.DealQty);
|
|
if (remainQty >= 0)
|
|
{
|
|
SqlStringBuilder = new StringBuilder(1024);//扣减库存数
|
|
SqlStringBuilder.Append(" update sys_stock set qty=@qty where ruid=@ruid");
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@qty", remainQty);
|
|
parameters.Add("@ruid", stocks.Ruid);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
SqlStringBuilder = new StringBuilder(1024);//已扣减的数据,写入记录扣减日志表
|
|
SqlStringBuilder.Append("INSERT INTO dbo.wms_subcontract_data_log ");
|
|
SqlStringBuilder.Append(" (trans_code,part_id,part_no,part_spec,carton_no,qty ");
|
|
SqlStringBuilder.Append(" ,unit,vendor_id,vendor_code,ref_order_no ");
|
|
SqlStringBuilder.Append(" ,factory_id,factory_code,enabled,create_userid,create_time,guid) ");
|
|
SqlStringBuilder.Append(" VALUES(@trans_code,@part_id,@part_no,@part_spec,@carton_no,@qty ");
|
|
SqlStringBuilder.Append(" ,@unit,@vendor_id,@vendor_code,@ref_order_no ");
|
|
SqlStringBuilder.Append(" ,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@guid) ");
|
|
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@trans_code", wmsSubcontractData.TransCode);
|
|
parameters.Add("@part_id", wmsSubcontractData.PartId);
|
|
parameters.Add("@part_no", wmsSubcontractData.PartNo);
|
|
parameters.Add("@part_spec", wmsSubcontractData.PartSpec);
|
|
parameters.Add("@carton_no", wmsSubcontractData.CartonNo);
|
|
parameters.Add("@qty", wmsSubcontractData.Qty);
|
|
parameters.Add("@unit", wmsSubcontractData.Unit);
|
|
parameters.Add("@vendor_id", wmsSubcontractData.VendorId);
|
|
parameters.Add("@vendor_code", wmsSubcontractData.VendorCode);
|
|
parameters.Add("@ref_order_no", wmsSubcontractData.RefOrderNo);
|
|
parameters.Add("@factory_id", wmsSubcontractData.FactoryId);
|
|
parameters.Add("@factory_code", wmsSubcontractData.FactoryCode);
|
|
parameters.Add("@enabled", wmsSubcontractData.Enabled);
|
|
parameters.Add("@createUserid", 0);
|
|
parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
|
parameters.Add("@guid", Guid.NewGuid().ToString());
|
|
//dbConn.Execute(SqlStringBuilder.ToString(),parameters);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
SqlStringBuilder = new StringBuilder(1024);//删除已扣减的数据
|
|
SqlStringBuilder.Append(" delete from wms_subcontract_data where ruid=@ruid");
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@ruid", wmsSubcontractData.Ruid);
|
|
//dbConn.Execute(SqlStringBuilder.ToString(),parameters);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
this.ExecuteTransaction(sqlList, parametersList);//执行
|
|
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
SqlStringBuilder = new StringBuilder(1024);//扣减库存数
|
|
SqlStringBuilder.Append(" update sys_stock set qty=0 , enabled='N' where ruid=@ruid");
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@ruid", wmsSubcontractData.Ruid);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
handledItemQty = Convert.ToDecimal(wmsSubcontractData.DealQty == null ? 0 : wmsSubcontractData.DealQty) + stocks.Qty;
|
|
SqlStringBuilder = new StringBuilder(1024);//更新 已处理扣减数据
|
|
SqlStringBuilder.Append(" update wms_subcontract_data set deal_qty=@dealQty where ruid=@ruid");
|
|
parameters = new DynamicParameters();
|
|
parameters.Add("@dealQty", handledItemQty);
|
|
parameters.Add("@ruid", wmsSubcontractData.Ruid);
|
|
sqlList.Add(SqlStringBuilder.ToString());
|
|
parametersList.Add(parameters);
|
|
|
|
this.ExecuteTransaction(sqlList, parametersList);//执行
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
SqlStringBuilder = new StringBuilder(1024);//获取待扣减行数
|
|
SqlStringBuilder.Append(" select count(1) as rowsCount from wms_subcontract_data (nolock) where deal_status=10 order by create_time ");
|
|
WmsSubcontractData wmsSubcontract2 = dbConn.Query<WmsSubcontractData>(SqlStringBuilder.ToString()).FirstOrDefault();
|
|
|
|
firstCount += 10000;
|
|
if (wmsSubcontract2.RowsCount <= firstCount)//当待扣减库存数据为0或循环行数>=待扣减行数,则跳出循环等待下一次作业
|
|
{
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|