2025-01-02 14:04:44 +08:00
|
|
|
|
using DocumentFormat.OpenXml.Office2010.Excel;
|
|
|
|
|
using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using S7.Net.Types;
|
2024-11-08 09:10:43 +08:00
|
|
|
|
using SqlSugar;
|
2024-03-07 14:03:22 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
2024-10-25 13:49:37 +08:00
|
|
|
|
using System.Windows.Forms;
|
2024-03-07 14:03:22 +08:00
|
|
|
|
|
|
|
|
|
namespace LeatherApp.Utils
|
|
|
|
|
{
|
|
|
|
|
public class DBUtils
|
|
|
|
|
{
|
|
|
|
|
private static SqlSugarClient db;
|
|
|
|
|
//public static dbBackup()
|
|
|
|
|
//{
|
|
|
|
|
// //mysqldump -uroot-p123456 mydb > /data/mysqlDump/mydb.sql
|
|
|
|
|
// //mysqldump - uroot - p123456 mydb > / data / mysqlDump / mydb.sql
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
public static SqlSugarClient getErpDBCon(SqlSugar.DbType dbType = SqlSugar.DbType.SqlServer)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(Config.ErpDBConStr))
|
|
|
|
|
return null;
|
|
|
|
|
if (db != null) return db;
|
|
|
|
|
|
|
|
|
|
db = new SqlSugarClient(new ConnectionConfig()
|
|
|
|
|
{
|
|
|
|
|
ConnectionString = Config.ErpDBConStr,
|
|
|
|
|
DbType = dbType,
|
|
|
|
|
IsAutoCloseConnection = true
|
|
|
|
|
},
|
|
|
|
|
db =>
|
|
|
|
|
{
|
|
|
|
|
db.Aop.OnLogExecuting = (sql, pars) =>
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
|
|
|
|
|
|
|
|
|
|
//获取原生SQL推荐 5.1.4.63 性能OK
|
|
|
|
|
//UtilMethods.GetNativeSql(sql,pars)
|
|
|
|
|
|
|
|
|
|
//获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
|
|
|
|
|
//UtilMethods.GetSqlString(DbType.SqlServer,sql,pars)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
return db;
|
|
|
|
|
}
|
|
|
|
|
public static DataTable execSql(string sql, List<SugarParameter> parameters, SqlSugar.DbType dbType = SqlSugar.DbType.SqlServer)
|
|
|
|
|
{
|
2024-11-08 09:10:43 +08:00
|
|
|
|
if (string.IsNullOrEmpty(Config.ErpDBType) || Config.ErpDBType == "SqlServer")
|
2024-10-25 13:49:37 +08:00
|
|
|
|
{
|
|
|
|
|
//查询表的所有
|
|
|
|
|
var mydb = getErpDBCon(dbType);
|
|
|
|
|
if (mydb == null)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show($"数据库连接失败:{sql}");
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!mydb.Ado.IsValidConnection())
|
|
|
|
|
mydb.Ado.Open();
|
|
|
|
|
return mydb.Ado.GetDataTable(sql, parameters);
|
|
|
|
|
}
|
2024-11-08 09:10:43 +08:00
|
|
|
|
else if (Config.ErpDBType == "Oracle")
|
2024-10-25 13:49:37 +08:00
|
|
|
|
{
|
|
|
|
|
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
|
|
|
|
|
{
|
|
|
|
|
DbType = SqlSugar.DbType.Oracle,
|
|
|
|
|
ConnectionString = Config.ErpDBConStr,
|
|
|
|
|
InitKeyType = InitKeyType.Attribute,
|
|
|
|
|
IsAutoCloseConnection = true,
|
|
|
|
|
AopEvents = new AopEvents
|
|
|
|
|
{
|
|
|
|
|
OnLogExecuting = (tsql, p) =>
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(tsql);
|
|
|
|
|
Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//var dt = db.Ado.GetDataTable(sql);
|
|
|
|
|
//if (dt != null)
|
|
|
|
|
//{
|
|
|
|
|
// for (int i = 0; i < dt.Rows.Count; i++)
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine($"PJXTBH:{dt.Rows[i]["PJXTBH"]},WPH:{dt.Rows[i]["WPH"]},WPMC:{dt.Rows[i]["WPMC"]},SL:{dt.Rows[i]["SL"]},PH:{dt.Rows[i]["PH"]},JH:{dt.Rows[i]["JH"]}");
|
|
|
|
|
// }
|
|
|
|
|
//}
|
2024-11-08 09:10:43 +08:00
|
|
|
|
string sqlstr = $"{sql}'{parameters[0].Value}'";
|
|
|
|
|
//string sqlstr = $"select * from tb_qc_prodinfo where PJXTBH='{parameters[0].Value}'";
|
2024-10-25 13:49:37 +08:00
|
|
|
|
var dt2 = db.Ado.GetDataTable(sqlstr);
|
2025-01-02 14:04:44 +08:00
|
|
|
|
//dt2.Columns.RemoveAt(0);
|
|
|
|
|
//dt2.Columns.RemoveAt(0);
|
2024-10-25 13:49:37 +08:00
|
|
|
|
return dt2;
|
|
|
|
|
//var dt2 = db.Ado.GetDataTable(sqlstr);
|
|
|
|
|
}
|
2024-11-08 09:10:43 +08:00
|
|
|
|
else if (Config.ErpDBType == "PostgreSQL")
|
|
|
|
|
{
|
|
|
|
|
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
|
|
|
|
|
{
|
|
|
|
|
DbType = SqlSugar.DbType.PostgreSQL,
|
|
|
|
|
ConnectionString = Config.ErpDBConStr,
|
|
|
|
|
IsAutoCloseConnection = true,
|
|
|
|
|
AopEvents = new AopEvents
|
|
|
|
|
{
|
|
|
|
|
OnLogExecuting = (tsql, p) =>
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(tsql);
|
|
|
|
|
Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//string sqlstr = $"select * from mingxin_prod where PJXTBH='{parameters[0].Value}'";
|
|
|
|
|
//var dt2 = db.Ado.GetDataTable(sqlstr);
|
|
|
|
|
//dt2.Columns.RemoveAt(0);
|
|
|
|
|
//dt2.Columns.RemoveAt(0);
|
|
|
|
|
|
2024-12-09 16:08:24 +08:00
|
|
|
|
//条码查询 mfg_material_goods
|
2024-12-02 15:02:39 +08:00
|
|
|
|
string sqlstr = $"select id,current_qty,batch_no,goods_code,material_id,mo_id from mfg_material_goods where id={parameters[0].Value}";
|
2024-11-08 09:10:43 +08:00
|
|
|
|
var dt2 = db.Ado.GetDataTable(sqlstr);
|
2024-12-09 16:08:24 +08:00
|
|
|
|
//根据mo_id 从 order_main_order 查询 material_id
|
2024-12-02 15:02:39 +08:00
|
|
|
|
sqlstr = $"select id,material_id from order_main_order where id={dt2.Rows[0]["mo_id"]}";
|
|
|
|
|
var dt4 = db.Ado.GetDataTable(sqlstr);
|
2024-12-09 16:08:24 +08:00
|
|
|
|
//根据material_id 从 base_material 查询 material_code material_name
|
2024-12-02 15:02:39 +08:00
|
|
|
|
sqlstr = $"select id,material_code,material_name from base_material where id={dt4.Rows[0]["material_id"]}";
|
2024-11-08 09:10:43 +08:00
|
|
|
|
var dt3 = db.Ado.GetDataTable(sqlstr);
|
|
|
|
|
|
|
|
|
|
DataTable dt = new DataTable(); //建立个数据表WPMC,SL,PH,JH
|
|
|
|
|
dt.Columns.Add(new DataColumn("WPMC", typeof(string)));//在表中添加string类型的列
|
|
|
|
|
dt.Columns.Add(new DataColumn("SL", typeof(string)));//在表中添加string类型的列
|
|
|
|
|
dt.Columns.Add(new DataColumn("PH", typeof(string)));//在表中添加string类型的列
|
|
|
|
|
dt.Columns.Add(new DataColumn("JH", typeof(string)));//在表中添加string类型的列
|
|
|
|
|
dt.Columns.Add(new DataColumn("ERPID", typeof(string)));//在表中添加string类型的列
|
|
|
|
|
|
|
|
|
|
DataRow dr;//行
|
|
|
|
|
dr = dt.NewRow();
|
|
|
|
|
dr["WPMC"] = dt3.Rows[0]["material_name"];
|
|
|
|
|
dr["SL"] = dt2.Rows[0]["current_qty"];
|
|
|
|
|
dr["PH"] = dt2.Rows[0]["batch_no"];
|
|
|
|
|
dr["JH"] = dt2.Rows[0]["goods_code"];
|
|
|
|
|
dr["ERPID"] = dt3.Rows[0]["material_code"];
|
|
|
|
|
|
|
|
|
|
dt.Rows.Add(dr);//在表的对象的行里添加此行
|
|
|
|
|
return dt;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return null;
|
2024-03-07 14:03:22 +08:00
|
|
|
|
}
|
2025-01-02 14:04:44 +08:00
|
|
|
|
|
|
|
|
|
#region ERP数据上传
|
|
|
|
|
class XCLErpUploadData
|
|
|
|
|
{
|
|
|
|
|
public string PJXTBH { get; set; }
|
|
|
|
|
public string PH { get; set; }
|
|
|
|
|
public string JH { get; set; }
|
2025-02-05 08:40:57 +08:00
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public string FJH { get; set; }
|
2025-01-02 14:04:44 +08:00
|
|
|
|
public string Grade { get; set; }
|
|
|
|
|
public double Len { get; set; }
|
|
|
|
|
public double NetLen { get; set; }
|
|
|
|
|
public int SegmentCnt { get; set; }
|
|
|
|
|
public string SegmentLen { get; set; }
|
2025-02-05 08:40:57 +08:00
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public string DefectType { get; set; }
|
2025-01-02 14:04:44 +08:00
|
|
|
|
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public double MF1 { get; set; }
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public double MF2 { get; set; }
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public double MF3 { get; set; }
|
|
|
|
|
public double AvgMF { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public double HD1 { get; set; }
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public double HD2 { get; set; }
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public double HD3 { get; set; }
|
|
|
|
|
public double AvgHD { get; set; }
|
|
|
|
|
|
|
|
|
|
public double Weight { get; set; }
|
|
|
|
|
public string Class { get; set; }
|
|
|
|
|
public string DownGradeInfo { get; set; }
|
|
|
|
|
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public System.DateTime CreateTime { get; set; }
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public int Status { get; set; }
|
2025-02-05 08:40:57 +08:00
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public string UserName { get; set; }
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public string DUETIME { get; set; }
|
|
|
|
|
[SugarColumn(IsNullable = true)]
|
|
|
|
|
public string REMARK { get; set; }
|
2025-01-02 14:04:44 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// erp数据上传
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static bool DataUploadErp(Models.Records records)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(Config.ErpDBType) || Config.ErpDBType == "Oracle")
|
|
|
|
|
{
|
|
|
|
|
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
|
|
|
|
|
{
|
|
|
|
|
DbType = SqlSugar.DbType.Oracle,
|
|
|
|
|
ConnectionString = Config.ErpDBConStr,
|
|
|
|
|
InitKeyType = InitKeyType.Attribute,
|
|
|
|
|
IsAutoCloseConnection = true,
|
|
|
|
|
AopEvents = new AopEvents
|
|
|
|
|
{
|
|
|
|
|
OnLogExecuting = (tsql, p) =>
|
|
|
|
|
{
|
|
|
|
|
//Console.WriteLine(tsql);
|
|
|
|
|
//Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
//建表更新
|
|
|
|
|
//db.CodeFirst.InitTables<XCLErpUploadData>();
|
|
|
|
|
//查询是否已有数据
|
2025-02-05 08:40:57 +08:00
|
|
|
|
var haveData = db.Queryable<XCLErpUploadData>().First(m => m.PH == records.BatchId && m.JH == records.ReelId && m.FJH == records.PartReelId);
|
2025-01-02 14:04:44 +08:00
|
|
|
|
if (haveData != null) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//数据插入
|
|
|
|
|
string grade = "一等品";
|
|
|
|
|
string gradeinfo = "无";
|
|
|
|
|
if(records.DowngradeInformation != null && records.DowngradeInformation.Count >0)
|
|
|
|
|
{
|
|
|
|
|
gradeinfo = "";
|
|
|
|
|
grade = records.DowngradeInformation[records.DowngradeInformation.Count - 1][2];
|
|
|
|
|
foreach (var item in records.DowngradeInformation)
|
|
|
|
|
{
|
|
|
|
|
gradeinfo += $"{item[0]},{item[1]};";// item[1] + ";";
|
|
|
|
|
}
|
|
|
|
|
if (gradeinfo.Length > 0)
|
|
|
|
|
gradeinfo = gradeinfo.Remove(gradeinfo.Length - 1);
|
|
|
|
|
}
|
|
|
|
|
//长度,净长,重量
|
|
|
|
|
double slen = records.Len;
|
|
|
|
|
double jlen = slen;
|
|
|
|
|
double zl = 0;
|
|
|
|
|
if (records.LengthWeightInfor != null && records.LengthWeightInfor.Count() > 3)
|
|
|
|
|
{
|
|
|
|
|
slen = records.LengthWeightInfor[0];
|
|
|
|
|
jlen = records.LengthWeightInfor[2];
|
|
|
|
|
zl = records.LengthWeightInfor[3];
|
|
|
|
|
}
|
|
|
|
|
if(slen == 0 && records.Len > 0)
|
|
|
|
|
slen = records.Len;
|
|
|
|
|
if (jlen == 0 && records.Len > 0)
|
|
|
|
|
jlen = records.Len;
|
|
|
|
|
//分段
|
|
|
|
|
int fd = 0;
|
|
|
|
|
string fdinfo = "无";
|
|
|
|
|
if(records.FDInfor != null && records.FDInfor.Count>0)
|
|
|
|
|
{
|
|
|
|
|
fdinfo = "";
|
|
|
|
|
fd = records.FDInfor.Count;
|
|
|
|
|
foreach(var item in records.FDInfor)
|
|
|
|
|
{
|
|
|
|
|
fdinfo += item[0].ToString() + ",";
|
|
|
|
|
}
|
|
|
|
|
if(fdinfo.Length > 0)
|
|
|
|
|
fdinfo = fdinfo.Remove(fdinfo.Length - 1);
|
|
|
|
|
}
|
|
|
|
|
//厚度均值
|
|
|
|
|
double agvhd = 0;
|
|
|
|
|
double hd1 = 0, hd2 = 0, hd3 = 0;
|
|
|
|
|
if (records.ThicknessList != null && records.ThicknessList.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
List<double> data = new List<double>();
|
|
|
|
|
List<double> data1 = new List<double>();
|
|
|
|
|
List<double> data2 = new List<double>();
|
|
|
|
|
List<double> data3 = new List<double>();
|
|
|
|
|
foreach (var item in records.ThicknessList)
|
|
|
|
|
{
|
|
|
|
|
data.Add(item.Value1);
|
|
|
|
|
data.Add(item.Value2);
|
|
|
|
|
data.Add(item.Value3);
|
|
|
|
|
data1.Add(item.Value1);
|
|
|
|
|
data2.Add(item.Value2);
|
|
|
|
|
data3.Add(item.Value3);
|
|
|
|
|
}
|
|
|
|
|
agvhd = data.Average();
|
|
|
|
|
hd1 = data1.Average();
|
|
|
|
|
hd2 = data2.Average();
|
|
|
|
|
hd3 = data3.Average();
|
|
|
|
|
}
|
|
|
|
|
//幅宽
|
|
|
|
|
double agvmf = 0;
|
|
|
|
|
double mf1 = 0, mf2 = 0, mf3 = 0;
|
|
|
|
|
if (records.FacePointList.Count > 10)
|
|
|
|
|
mf1 = records.FacePointList[10][1];
|
|
|
|
|
else
|
|
|
|
|
mf1 = records.FacePointList[0][1];
|
|
|
|
|
if (records.FacePointList.Count > 10)
|
|
|
|
|
mf3 = records.FacePointList[records.FacePointList.Count - 10][1];
|
|
|
|
|
else
|
|
|
|
|
mf3 = records.FacePointList[records.FacePointList.Count - 1][1];
|
|
|
|
|
if (records.FacePointList.Count > 0)
|
|
|
|
|
mf2 = records.FacePointList[records.FacePointList.Count/2][1];
|
|
|
|
|
|
|
|
|
|
agvmf = (mf1 + mf2 + mf3)/3;
|
|
|
|
|
//新数据插入
|
|
|
|
|
db.Insertable(new XCLErpUploadData()
|
|
|
|
|
{
|
|
|
|
|
PJXTBH = records.PJXTBH,
|
|
|
|
|
PH = records.BatchId,
|
|
|
|
|
JH = records.ReelId,
|
2025-02-05 08:40:57 +08:00
|
|
|
|
FJH = string.IsNullOrEmpty(records.PartReelId) ? "0" : records.PartReelId,
|
2025-01-02 14:04:44 +08:00
|
|
|
|
Grade = string.IsNullOrEmpty(grade) ? "一等品" : grade,
|
|
|
|
|
Len = slen,
|
|
|
|
|
NetLen = jlen,
|
|
|
|
|
SegmentCnt = fd,
|
|
|
|
|
SegmentLen = string.IsNullOrEmpty(fdinfo) ? "无" : fdinfo,
|
2025-02-05 08:40:57 +08:00
|
|
|
|
DefectType = string.IsNullOrEmpty(records.DefectType) ? "错误" : records.DefectType,
|
2025-01-02 14:04:44 +08:00
|
|
|
|
|
|
|
|
|
MF1 = mf1,
|
|
|
|
|
MF2 = mf2,
|
|
|
|
|
MF3 = mf3,
|
|
|
|
|
AvgMF = records.FacePointList.Select(x => x[1]).ToList().Average(),
|
|
|
|
|
|
|
|
|
|
HD1= hd1,
|
|
|
|
|
HD2= hd2,
|
|
|
|
|
HD3= hd3,
|
|
|
|
|
AvgHD = agvhd,
|
|
|
|
|
|
|
|
|
|
Weight = zl,
|
|
|
|
|
Class = string.IsNullOrEmpty(records.WorkTeam)?"无": records.WorkTeam,
|
|
|
|
|
DownGradeInfo = string.IsNullOrEmpty(gradeinfo)? "无" : gradeinfo,
|
|
|
|
|
CreateTime = System.DateTime.Now,
|
2025-02-05 08:40:57 +08:00
|
|
|
|
Status = 0,
|
|
|
|
|
UserName = string.IsNullOrEmpty(records.UserName) ? "admin" : records.UserName,
|
2025-01-02 14:04:44 +08:00
|
|
|
|
}).ExecuteCommand();
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
2024-03-07 14:03:22 +08:00
|
|
|
|
}
|
|
|
|
|
}
|