天津投入产出系统后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

705 lines
28 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QMAPP.FJC.Entity.ProcessParameter;
using QMAPP.FJC.Entity.Operation;
using QMAPP.FJC.Entity.Basic;
using QMAPP.FJC.DAL.Basic;
using QMAPP.FJC.Entity;
using QMAPP.FJC.Entity.Injection;
using QMAPP.FJC.DAL.Injection;
using QMFrameWork.Data;
using QMAPP.FJC.DAL.Operation;
using QMAPP.FJC.DAL;
using QMAPP.FJC.BLL.Common;
using QMFrameWork.Common.Util;
using System.Configuration;
using QMAPP.FJC.BLL.Dict;
using QMFrameWork.Log;
using QMAPP.MD.Entity;
using QMAPP.MD.DAL;
namespace QMAPP.FJC.BLL.Process
{
/// <summary>
/// 搪塑加工处理类
/// 作者:闫永刚
/// 日期:2015-05-28
/// </summary>
public class SlushProcess
{
/// <summary>
/// 处理搪塑信息
/// </summary>
/// <param name="entity"></param>
public List<string> Process(MachineInfo machine, List<ParameterConfig> parConfigList)
{
List<string> barcodeList = new List<string>();
//搪塑投料记录更新列表
List<InjectionRecorder> updateInjectList = new List<InjectionRecorder>();
//零件投料关联表
List<ProductInjection> addInjectItemList = new List<ProductInjection>();
InjectionRecorderDAL injectDal = new InjectionRecorderDAL();
//条码
StringBuilder slushCode1 = new StringBuilder();
StringBuilder slushCode2 = new StringBuilder();
try
{
#region 产品条码属性
string year = "";
string month = "";
string day = "";
string hour = "";
string minute = "";
string second = "";
string mechineNo = "";
string producttype = "";
string hudorbasic = "";
string color = "";
string cavitytype = "";
string mouldcarrier1 = "";
string mouldcarrier2 = "";
string armNumber = "";
//
#endregion
#region 获取表皮条码号
//将十六进制装换成十进制
var a = parConfigList.First(o => o.COLUMNCODE.Contains("YEAR")).PARAVALUE;
year = BinaryConvert.DecToHex(parConfigList.First(o => o.COLUMNCODE.Contains("YEAR")).PARAVALUE.ToString());
month = BinaryConvert.DecToHex(parConfigList.First(o => o.COLUMNCODE.Contains("MONTH")).PARAVALUE.ToString());
day = BinaryConvert.DecToHex(parConfigList.First(o => o.COLUMNCODE.Contains("DAY")).PARAVALUE.ToString());
hour = BinaryConvert.DecToHex(parConfigList.First(o => o.COLUMNCODE.Contains("HOUR")).PARAVALUE.ToString());
minute = BinaryConvert.DecToHex(parConfigList.First(o => o.COLUMNCODE.Contains("MINUTE")).PARAVALUE.ToString());
second = BinaryConvert.DecToHex(parConfigList.First(o => o.COLUMNCODE.Contains("SECOND")).PARAVALUE.ToString());
//机器号
//mechineNo = parConfigList.First(o => o.COLUMNCODE.Contains("MACHINENO")).PARAVALUE.ToString();
mechineNo = machine.MACHINENUM.ToString();
//产品类别
//producttype = parConfigList.First(o => o.COLUMNCODE.Contains("PRODUCT")).PARAVALUE.ToString();
producttype = "A";
//高低配
hudorbasic = parConfigList.First(o => o.COLUMNCODE.Contains("HUDORBASIC")).PARAVALUE.ToString();
//颜色
List<ParameterConfig> cc = parConfigList.Where(o => o.COLUMNCODE.Contains("SLUSHCOLOR")).ToList<ParameterConfig>();
color = parConfigList.First(o => o.COLUMNCODE.Contains("SLUSHCOLOR")).PARAVALUE.ToString();
//腔信息
cavitytype = parConfigList.First(o => o.COLUMNCODE.Contains("CAVITYTYPE")).PARAVALUE.ToString();
//腔号
mouldcarrier1 = parConfigList.First(o => o.COLUMNCODE.Contains("MOULDCARRIER1")).PARAVALUE.ToString();
mouldcarrier2 = parConfigList.First(o => o.COLUMNCODE.Contains("MOULDCARRIER2")).PARAVALUE.ToString();
armNumber = parConfigList.First(o => o.COLUMNCODE.Contains("ARMNUMBER")).PARAVALUE.ToString();
DateTime nowDt = System.DateTime.Now;
year = nowDt.Year.ToString().Substring(2);
month = nowDt.Month.ToString().PadLeft(2, '0');
day = nowDt.Day.ToString().PadLeft(2, '0');
hour = nowDt.Hour.ToString().PadLeft(2, '0');
minute = nowDt.Minute.ToString().PadLeft(2, '0');
slushCode1.Append(year.PadLeft(2, '0'));
slushCode2.Append(year.PadLeft(2, '0'));
slushCode1.Append(month.PadLeft(2, '0'));
slushCode2.Append(month.PadLeft(2, '0'));
slushCode1.Append(day.PadLeft(2, '0'));
slushCode2.Append(day.PadLeft(2, '0'));
slushCode1.Append(hour.PadLeft(2, '0'));
slushCode2.Append(hour.PadLeft(2, '0'));
slushCode1.Append(minute.PadLeft(2, '0'));
slushCode2.Append(minute.PadLeft(2, '0'));
slushCode1.Append(mechineNo);
slushCode2.Append(mechineNo);
slushCode1.Append(producttype);
slushCode2.Append(producttype);
List<string> hbList = hudorbasic.Split('/').ToList<string>();
slushCode1.Append(hbList[0]);
slushCode2.Append(hbList[1]);
slushCode1.Append(color);
slushCode2.Append(color);
List<string> ctList = cavitytype.Split('/').ToList<string>();
slushCode1.Append(ctList[0]);
slushCode2.Append(ctList[1]);
//判断模具号的来源
//MoulderConfig值为true,表示来源于配置文件
//MoulderConfig值为false,表示来源于PLC读取
//2016-6-2通过数据库获取
List<MoldSet> setList = new MoldSetDAL().GetList();
string moulderConfig = ConfigurationManager.AppSettings["MoulderConfig"].ToString();
if (Convert.ToBoolean(moulderConfig))
{
MoldSet moldSet = setList.First(o => o.ARMNUMBER == Convert.ToInt32(armNumber));
//DictManageBLL dictStatusBll = new DictManageBLL(DictKind.ARMNUMBERWITHMOULDER);
slushCode1.Append(moldSet.MOLDNUMBERA.ToString().PadLeft(2, '0'));
slushCode2.Append(moldSet.MOLDNUMBERB.ToString().PadLeft(2, '0'));
}
else
{
slushCode1.Append(mouldcarrier1.PadLeft(2, '0'));
slushCode2.Append(mouldcarrier2.PadLeft(2, '0'));
}
barcodeList.Add(slushCode1.ToString());
barcodeList.Add(slushCode2.ToString());
#endregion
#region 零件条码信息
List<Product> productList = new List<Product>();
Product product = new Product();
product.PID = Guid.NewGuid().ToString();
product.PRODUCTCODE = slushCode1.ToString();
product.PRODUCTTYPE = EnumGeter.ProductType.biaopi.GetHashCode().ToString();
product.MACHINENAME = machine.MACHINENAME;
product.MACHINECODDE = machine.MACHINECODDE;
//自制件
product.PRODUCTSOURCE = EnumGeter.PRODUCTSOURCE.SELFMADE.GetHashCode().ToString();
//合格品
product.STATUS = EnumGeter.STATUS.QUALIFIED.GetHashCode().ToString();
product.CURRENTPROCESS = EnumGeter.ProcessType.lengdaoruohua.GetHashCode().ToString();
//product.CURRENTPROCESS
product.PRODUCELINE = "B9";
product.PRODUCESHIFTNAME = "";
product.PRODUCESHIFTTCODE = "";
//在库
product.OUTFLAG = EnumGeter.OUTFLAG.INWAREHOUSE.GetHashCode().ToString();
//未使用
product.USINGSTATE = EnumGeter.USINGSTATE.UNUSED.GetHashCode().ToString();
product.CAPACITY = 1;
product.USINGCOUNT = 0;
product.CREATEUSER = machine.PID;
product.CREATEDATE = System.DateTime.Now;
product.UPDATEUSER = machine.PID;
product.UPDATEDATE = System.DateTime.Now;
Product product2 = new Product();
product2 = BindHelper.CopyToModel<Product, Product>(product, false);
product2.PID = Guid.NewGuid().ToString();
product2.PRODUCTCODE = slushCode2.ToString();
productList.Add(product);
productList.Add(product2);
#endregion
#region 表皮属性
List<ProductAttribute> proAttrList = new List<ProductAttribute>();
ProductAttribute proAttr = new ProductAttribute();
proAttr.PID = Guid.NewGuid().ToString();
proAttr.MPPID = product.PID;
proAttr.VAL1 = machine.MACHINENUM;
proAttr.VAL2 = product.PRODUCTTYPE;
proAttr.VAL3 = hudorbasic.Substring(0, 1) ;
proAttr.VAL4 = color.ToString();
proAttr.VAL5 = cavitytype.Substring(0, 1);
proAttr.VAL6 = mouldcarrier1.PadLeft(2,'0');
proAttr.VAL7 = System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
proAttr.CREATEDATE = System.DateTime.Now;
proAttr.CREATEDATE = System.DateTime.Now;
proAttr.CREATEUSER = machine.PID;
proAttr.UPDATEUSER = machine.PID;
proAttrList.Add(proAttr);
ProductAttribute proAttr2 = new ProductAttribute();
proAttr2 = BindHelper.CopyToModel<ProductAttribute, ProductAttribute>(proAttr, false);
proAttr2.PID = Guid.NewGuid().ToString();
proAttr2.MPPID = product2.PID;
proAttr2.VAL3 = hudorbasic.Substring(2, 1);
proAttr2.VAL6 = mouldcarrier2.PadLeft(2, '0');
proAttrList.Add(proAttr2);
#endregion
#region 加工工序信息
List<MainOperation> moList = new List<MainOperation>();
MainOperation operation = new MainOperation();
operation.PID = Guid.NewGuid().ToString();
operation.PDID = product.PID;
operation.PRODUCTCODE = product.PRODUCTCODE;
//搪塑
operation.PROCESSTYPE = EnumGeter.ProcessType.tangsu.GetHashCode().ToString();
operation.PRODUCTTYPE = EnumGeter.ProductType.biaopi.GetHashCode().ToString();
operation.MACHINENAME = machine.MACHINENAME;
operation.MACHINECODDE = machine.MACHINECODDE;
operation.STATUS = EnumGeter.STATUS.QUALIFIED.GetHashCode().ToString();
operation.OPERATESTATE = EnumGeter.OPERATESTATE.COMPLETED.GetHashCode().ToString();
operation.OPERATEDDATE = System.DateTime.Now;
operation.CURRENTPROCESS = EnumGeter.ProcessType.tangsu.GetHashCode().ToString();
List<ParameterConfig> cccList = parConfigList.Where(o => o.COLUMNCODE.Contains("ARMNUMBER") && o.MOLDNUMBER != "0").ToList<ParameterConfig>();
operation.MOLDNUMBER = parConfigList.First(o => o.COLUMNCODE.Contains("ARMNUMBER") && o.MOLDNUMBER != "0").PARAVALUE.ToString();
operation.PRODUCESHIFTNAME = "";
operation.PRODUCESHIFTTCODE = "";
operation.PRODUCELINE = "B9";
operation.MODELSTATION = operation.MOLDNUMBER;
operation.CREATEUSER = machine.PID;
operation.CREATEDATE = System.DateTime.Now;
operation.UPDATEUSER = machine.PID;
operation.UPDATEDATE = System.DateTime.Now;
moList.Add(operation);
MainOperation operation2 = new MainOperation();
operation2 = BindHelper.CopyToModel<MainOperation, MainOperation>(operation, false);
operation2.PID = Guid.NewGuid().ToString();
operation2.PDID = product2.PID;
operation2.PRODUCTCODE = product2.PRODUCTCODE;
moList.Add(operation2);
#endregion
#region 加工记录
List<SlushParamter> slushParaList = new List<SlushParamter>();
SlushParamter slushParamter = new SlushParamter();
slushParamter.PID = Guid.NewGuid().ToString();
slushParamter.IOID = operation.PID;
slushParamter.EID = operation.PDID;
//slushParamter.PRODUCTCODE = operation.PRODUCTCODE;
slushParamter.MACHINECODDE = operation.MACHINECODDE;
slushParamter.MACHINENAME = operation.MACHINENAME;
slushParamter.CREATEDATE = System.DateTime.Now;
slushParamter.EPIDERMISCODE = product.PRODUCTCODE;
List<ParameterConfig> parameterList = parConfigList.Where(o => o.COLUMNTYPE == "5").ToList<ParameterConfig>();
Type t = typeof(SlushParamter);
foreach (ParameterConfig pc in parameterList)
{
try
{
if (pc.DATATYPE == "DECIMAL")
{
decimal val = Convert.ToDecimal(pc.PARAVALUE);
if (pc.DEALTYPE == "DIVIDE")
val = val / 10;
t.GetProperty(pc.COLUMNCODE).SetValue(slushParamter, val, null);
}
else if (pc.DATATYPE == "INT")
{
int val = Convert.ToInt32(pc.PARAVALUE);
if (pc.DEALTYPE == "DIVIDE")
val = val / 10;
t.GetProperty(pc.COLUMNCODE).SetValue(slushParamter, val, null);
}
else
{
t.GetProperty(pc.COLUMNCODE).SetValue(slushParamter, pc.PARAVALUE.ToString(), null);
}
}
catch (Exception ex)
{
}
}
slushParamter.HB = proAttr.VAL3;
slushParaList.Add(slushParamter);
SlushParamter slushParamter2 = new SlushParamter();
slushParamter2 = BindHelper.CopyToModel<SlushParamter, SlushParamter>(slushParamter, false);
slushParamter2.PID = Guid.NewGuid().ToString();
slushParamter2.IOID = operation2.PID;
slushParamter2.EID = operation2.PDID;
//slushParamter2.PRODUCTCODE = operation2.PRODUCTCODE;
slushParamter2.HB = proAttr2.VAL3;
slushParamter2.EPIDERMISCODE = product2.PRODUCTCODE;
slushParaList.Add(slushParamter2);
#endregion
#region 获取表皮投料配置规则
//获取该颜色、高低配的表皮投料配置信息
List<ProductMderule> ruleList = new ProductMderuleDAL().GetList(new ProductMderule()
{
HB = slushParamter.HB,
COLORCODE = slushParamter.COLORCODE,
PRODUCTTYPE = EnumGeter.ProductType.biaopi.GetHashCode().ToString()
});
List<ProductMderule> ruleList2 = new ProductMderuleDAL().GetList(new ProductMderule()
{
HB = slushParamter2.HB,
COLORCODE = slushParamter2.COLORCODE,
PRODUCTTYPE = EnumGeter.ProductType.biaopi.GetHashCode().ToString()
});
//遍历规则信息
foreach (ProductMderule pm in ruleList)
{
#region 获取相应的投料信息
List<InjectionRecorder> list = injectDal.GetLastRecorder(new InjectionRecorder()
{
//INJECTIONINDEX = pm.INJECTIONINDEX,
INJECTIONTERMINAL = pm.INJECTIONTERMINAL,
MACHINECODDE = machine.MACHINECODDE,
});
#endregion
if (list.Count > 0)
{
#region 修改投料记录
InjectionRecorder inRecorder = list[0];
inRecorder.USEDWEIGHTSUM += pm.USEDWEIGHT;
updateInjectList.Add(inRecorder);
#endregion
#region 零件投料关联记录
ProductInjection proInject = new ProductInjection();
proInject.PID = Guid.NewGuid().ToString();
proInject.IPID = inRecorder.PID;
proInject.MPPID = product.PID;
proInject.MATERIALNAME = inRecorder.MATERIALNAME;
proInject.MATERIALCODE = inRecorder.MATERIALCODE;
proInject.MATERIALTYPE = inRecorder.MATERIALTYPE;
proInject.MATERIALBATCH = inRecorder.MATERIALBATCH;
proInject.MATERIALCODE = inRecorder.MATERIALCODE;
proInject.INJECTIONINDEX = pm.INJECTIONINDEX;
proInject.INJECTIONTERMINAL = pm.INJECTIONTERMINAL;
proInject.USEDWEIGHT = pm.USEDWEIGHT;
proInject.CREATEDATE = System.DateTime.Now;
proInject.CREATEUSER = inRecorder.CREATEUSER;
proInject.UPDATEUSER = inRecorder.UPDATEUSER;
addInjectItemList.Add(proInject);
#endregion
}
}
//遍历规则信息
foreach (ProductMderule pm in ruleList2)
{
#region 获取相应的投料信息
List<InjectionRecorder> list = injectDal.GetLastRecorder(new InjectionRecorder()
{
//INJECTIONINDEX = pm.INJECTIONINDEX,
INJECTIONTERMINAL = pm.INJECTIONTERMINAL,
MACHINECODDE = machine.MACHINECODDE,
});
#endregion
if (list.Count > 0)
{
#region 修改投料记录
InjectionRecorder inRecorder = list[0];
//updateInjectList是否已经存在
if (updateInjectList.Count(o => o.PID == inRecorder.PID) > 0)
{
inRecorder = updateInjectList.First(o => o.PID == inRecorder.PID);
inRecorder.USEDWEIGHTSUM += pm.USEDWEIGHT;
}
else
{
inRecorder.USEDWEIGHTSUM += pm.USEDWEIGHT;
updateInjectList.Add(inRecorder);
}
#endregion
#region 零件投料关联记录
ProductInjection proInject = new ProductInjection();
proInject.PID = Guid.NewGuid().ToString();
proInject.IPID = inRecorder.PID;
proInject.MPPID = product2.PID;
proInject.MATERIALNAME = inRecorder.MATERIALNAME;
proInject.MATERIALCODE = inRecorder.MATERIALCODE;
proInject.MATERIALTYPE = inRecorder.MATERIALTYPE;
proInject.MATERIALBATCH = inRecorder.MATERIALBATCH;
proInject.MATERIALCODE = inRecorder.MATERIALCODE;
proInject.INJECTIONINDEX = pm.INJECTIONINDEX;
proInject.INJECTIONTERMINAL = pm.INJECTIONTERMINAL;
proInject.USEDWEIGHT = pm.USEDWEIGHT;
proInject.CREATEDATE = System.DateTime.Now;
proInject.CREATEUSER = inRecorder.CREATEUSER;
proInject.UPDATEUSER = inRecorder.UPDATEUSER;
addInjectItemList.Add(proInject);
#endregion
}
}
#endregion
#region 数据库操作
ProductDAL productDAL = new ProductDAL();
ProductInjectionDAL proInjectDal = new ProductInjectionDAL();
MainOperationDAL mainOperationDAL = new MainOperationDAL();
//SlushParamterDAL slushParamterDAL = new SlushParamterDAL();
ProductAttributeDAL paDal = new ProductAttributeDAL();
using (IDataSession session = AppDataFactory.CreateMainSession())
{
session.OpenTs();
#region session注入
productDAL.BaseSession = session;
injectDal.BaseSession = session;
proInjectDal.BaseSession = session;
mainOperationDAL.BaseSession = session;
//slushParamterDAL.BaseSession = session;
#endregion
try
{
#region 插入产品信息
foreach (var p in productList)
{
productDAL.Insert(p);
}
#endregion
#region 产品属性
foreach (var pro in proAttrList)
{
paDal.Insert(pro);
}
#endregion
#region 插入加工记录
foreach (var mo in moList)
{
mainOperationDAL.Insert(mo);
}
#endregion
#region 插入加工参数记录
foreach (var p in slushParaList)
{
////slushParamterDAL.Insert(p);
}
#endregion
#region 插入产品投料记录关联表
foreach (var proinject in addInjectItemList)
{
proInjectDal.Insert(proinject);
}
#endregion
#region 更新投料信息
foreach (var inject in updateInjectList)
{
injectDal.Update(inject);
}
#endregion
session.CommitTs();
}
catch (Exception ex)
{
session.RollbackTs();
throw ex;
}
}
#endregion
return barcodeList;
}
catch (Exception ex)
{
#region 日志输出
LogManager.LogHelper.Error(new LogInfo()
{
ErrorInfo = ex,
Tag = ex.StackTrace,
Info = "生成条码信息出错!"
});
LogManager.LogHelper.Error(new LogInfo()
{
Info = "条码信息" + slushCode1.ToString()
});
LogManager.LogHelper.Error(new LogInfo()
{
Info = "条码信息" + slushCode2.ToString()
});
#endregion
throw ex;
}
}
public List<ProductInjection> GetProductInjectionList(List<Product> products,MachineInfo machine,ref List<InjectionRecorder> updateInjectList)
{
InjectionRecorderDAL injectDal = new InjectionRecorderDAL();
updateInjectList = new List<InjectionRecorder>();
List<ProductInjection> addInjectItemList = new List<ProductInjection>();
foreach (var product in products)
{
//获取该颜色、高低配的表皮投料配置信息
//List<ProductMderule> ruleList = new ProductMderuleDAL().GetList(new ProductMderule()
//{
// HB = product.PRODUCTATTRIBUTE.VAL3,
// COLORCODE = product.PRODUCTATTRIBUTE.VAL4,
// PRODUCTTYPE = EnumGeter.ProductType.biaopi.GetHashCode().ToString()
//});
List<PbomItem> boms = new PbomDAL().GetSubItem(product.MATERIAL_CODE);
//遍历规则信息
foreach (PbomItem bom in boms)
{
#region 获取相应的投料信息
InjectionRecorder inRecorder = null;
List<InjectionRecorder> list = injectDal.GetLastRecorder(new InjectionRecorder()
{
//INJECTIONINDEX = pm.INJECTIONINDEX,
//INJECTIONTERMINAL = pm.INJECTIONTERMINAL,
MATERIALCODE=bom.MATERIAL_CODE,
MACHINECODDE = machine.MACHINECODDE,
});
#endregion
if (list.Count > 0)
{
#region 修改投料记录
inRecorder = updateInjectList.Find(m => m.PID.Equals(list[0].PID));
if (inRecorder != null)
{
inRecorder.USEDWEIGHTSUM += bom.UNIT_SUM;
}
else
{
inRecorder = list[0];
inRecorder.USEDWEIGHTSUM += bom.UNIT_SUM;
updateInjectList.Add(inRecorder);
}
#endregion
}
if (inRecorder != null)
{
#region 零件投料关联记录
ProductInjection proInject = new ProductInjection();
proInject.PID = Guid.NewGuid().ToString();
proInject.IPID = inRecorder.PID;
proInject.MPPID = product.PID;
proInject.MATERIALNAME = inRecorder.MATERIALNAME;
proInject.MATERIALCODE = inRecorder.MATERIALCODE;
proInject.MATERIALTYPE = inRecorder.MATERIALTYPE;
proInject.MATERIALBATCH = inRecorder.MATERIALBATCH;
proInject.MATERIALCODE = inRecorder.MATERIALCODE;
proInject.INJECTIONINDEX = inRecorder.INJECTIONINDEX;
proInject.INJECTIONTERMINAL = inRecorder.INJECTIONTERMINAL;
proInject.USEDWEIGHT = bom.UNIT_SUM;
proInject.CREATEDATE = System.DateTime.Now;
proInject.CREATEUSER = inRecorder.CREATEUSER;
proInject.UPDATEUSER = inRecorder.UPDATEUSER;
addInjectItemList.Add(proInject);
#endregion
}
}
}
return addInjectItemList;
}
}
}