天津投入产出系统后端
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.

583 lines
22 KiB

3 years ago
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using QMAPP.BLL;
using QMFrameWork.Data;
using QMAPP.FJC.BLL.Dict;
using QMAPP.FJC.Entity.Operation;
using QMAPP.FJC.DAL.Operation;
using QMAPP.Entity;
using QMAPP.FJC.DAL.ProductIn;
using QMAPP.FJC.Entity;
using QMFrameWork.Log;
using QMAPP.FJC.DAL.ProductionPlan;
using QMAPP.FJC.Entity.ProductionPlan;
using System.Text.RegularExpressions;
using QMAPP.MD.Entity;
using QMAPP.MD.DAL;
namespace QMAPP.FJC.BLL.Operation
{
public class MainCodeChangeBLL : BaseBLL
{
#region 获取列表
/// <summary>
/// 获取列表
/// </summary>
/// <param name="condition">条件</param>
/// <param name="page">数据页</param>
/// <returns>数据页</returns>
public DataPage GetList(MainCodeChange condition, DataPage page)
{
try
{
page = new MainCodeChangeDAL().GetList(condition, page);
List<MainCodeChange> list = page.Result as List<MainCodeChange>;
page.Result = list;
return page;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 获取列表web
/// </summary>
/// <param name="condition">条件</param>
/// <param name="page">数据页</param>
/// <returns>数据页</returns>
public DataResult<DataPage> GetListWeb(MainCodeChange condition, DataPage page)
{
DataResult<DataPage> result = new DataResult<DataPage>();
try
{
//获取信息列表
page = new MainCodeChangeDAL().GetList(condition, page);
#region 转换状态显示类型
//List<Epidermis> fisOrderList = page.Result as List<Epidermis>;
////处理字典信息
//DictManageBLL dictSCANSTATE = new DictManageBLL(DictKind.SCANSTATE);
//foreach (var info in fisOrderList)
//{
// info.SCANSTATE = dictSCANSTATE.GetDictValue(info.SCANSTATE);
//}
#endregion
result.Result = page;
}
catch (Exception ex)
{
LogManager.LogHelper.Error(new LogInfo()
{
ErrorInfo = ex,
Tag = ex.StackTrace,
Info = "成品信息逻辑层-获取列表!"
});
result.IsSuccess = false;
result.Msg = Resource.SystemException;
throw ex;
}
result.IsSuccess = true;
return result;
}
#endregion
#region 插入信息
/// <summary>
/// 插入信息(单表)
/// </summary>
/// <param name="">信息</param>
/// <returns>插入行数</returns>
public int Insert(MainCodeChange model)
{
try
{
//基本信息
model.PID = Guid.NewGuid().ToString();
model.CREATEUSER = this.LoginUser.UserID;
model.CREATEDATE = DateTime.Now;
MainDAL cmdDAL = new MainDAL();
if (ExistsMain(model) == true)
return -1;
return new MainCodeChangeDAL().Insert(model);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region 信息是否重复
/// <summary>
/// 判断名称是否存在
/// </summary>
/// <param name="info"></param>
/// <returns>true:已存在;fasel:不存在。</returns>
public bool ExistsMain(MainCodeChange model)
{
try
{
return new MainCodeChangeDAL().ExistsMain(model);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region 获取生成新的Maincode
/// <summary>
/// 获取生成新的Maincode
/// </summary>
/// <returns></returns>
public DataResult<string> Generate(string materialCode)
{
using (IDataSession session = AppDataFactory.CreateMainSession())
{
try
{
DataResult<string> result = new DataResult<string>();
DAL.Operation.MainDAL maindal = new DAL.Operation.MainDAL();
maindal.BaseSession = session;
PrintCode condition = maindal.GetMaxMainCode(materialCode);
string newcode = "1";
if (!string.IsNullOrEmpty(condition.MAINCODE))
{
string mainCode = (Convert.ToInt32(condition.MAINCODE.Substring(1, 6))).ToString();
newcode = (Convert.ToInt32(mainCode) + 1) + "";
}
newcode = "052 4XR" + condition.MAINCODE.Substring(0, 1) + newcode.PadLeft(6, '0');
result.Result = newcode + CalculateChecksum(newcode);
PrintCode pc = new PrintCode();
pc.PID = condition.PID;
pc.MAINCODE = result.Result;
pc.PRODUCTCODE = condition.PRODUCTCODE;
pc.ISCOMPLETE = 0;
pc.CREATETIME = System.DateTime.Now;
DAL.Operation.PrintCodeDAL dal = new DAL.Operation.PrintCodeDAL();
dal.BaseSession = session;
dal.UpdateForChangeCode(pc);
session.CommitTs();
return result;
}
catch (Exception ex)
{
session.RollbackTs();
return new DataResult<string> { IsSuccess = false, Ex = ex, Msg = ex.Message };
}
}
}
/// <summary>
/// 计算验证码
/// </summary>
/// <returns></returns>
public static string CalculateChecksum(string barcode)
{
string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
int sum = 0;
foreach (var c in barcode)
{
sum += chars.IndexOf(c);
}
int rem = sum % chars.Length;
return chars[rem].ToString();
}
#endregion
#region 导出数据
/// <summary>
/// 获取导出的数据
/// </summary>
/// <param name="user">查询条件</param>
/// <returns>数据</returns>
public DataResult<DataTable> GetExportData(MainCodeChange model)
{
DataResult<DataTable> result = new DataResult<DataTable>();
try
{
result.IsSuccess = true;
result.Result = new MainCodeChangeDAL().GetExportData(model);
}
catch (Exception ex)
{
LogManager.LogHelper.Error(new LogInfo()
{
ErrorInfo = ex,
Tag = ex.StackTrace,
Info = "导出错误!"
});
result.IsSuccess = false;
result.Msg = "导出错误!";
}
return result;
}
#endregion
#region 门板条码重新生成
public Product DPRegenerate(Product product)
{
using (IDataSession session = AppDataFactory.CreateMainSession())
{
try
{
string oldcode=product.PRODUCTCODE;
product.OUTFLAG = "2";
string regexp="(?<=\\d)R\\d";
var flag=System.Text.RegularExpressions.Regex.Match(oldcode,regexp);
if(flag.Success)
{
var nflag = "R" + (int.Parse(flag.Value[1] + "") + 1);
product.PRODUCTCODE = System.Text.RegularExpressions.Regex.Replace(oldcode, regexp, nflag);
}
else
{
product.PRODUCTCODE = oldcode.Insert(oldcode.Length - 6, "R0");
}
//GenerateCode(product.MATERIAL_CODE, product.CREATEDATE);
var changelog = new MainCodeChange
{
CREATEDATE = DateTime.Now,
CREATEUSER = LoginUser.UserID,
MATERIAL_NAME = product.MATERIAL_NAME,
MATERIALCODE = product.MATERIAL_CODE,
NEWMAINCODE = product.PRODUCTCODE,
ORIGMAINCODE = oldcode,
PRODUCELINE = product.PRODUCELINE,
PRODUCTCODE = product.PRODUCTCODE,
PID = Guid.NewGuid().ToString()
};
DAL.Operation.ProductDAL dal = new ProductDAL();
dal.BaseSession = session;
DAL.QT.ProductStructureDAL psdal = new DAL.QT.ProductStructureDAL();
psdal.BaseSession = session;
DAL.Operation.MainCodeChangeDAL cdal = new MainCodeChangeDAL();
cdal.BaseSession = session;
DAL.Operation.MainOperationDAL modal = new MainOperationDAL();
modal.BaseSession = session;
session.OpenTs();
dal.ReplaceBarcode(oldcode, product.PRODUCTCODE);
psdal.ReplaceProcesscode(oldcode, product.PRODUCTCODE);
modal.ReplaceBarcode(oldcode, product.PRODUCTCODE);
modal.DPParamReplace(oldcode, product.PRODUCTCODE);
cdal.Insert(changelog);
session.CommitTs();
return product;
}
catch (Exception ex)
{
session.RollbackTs();
throw ex;
}
}
}
private string GenerateCode(string materialcode, DateTime time)
{
QMAPP.FJC.DAL.MD.MaterialDAL mdal = new QMAPP.FJC.DAL.MD.MaterialDAL();
var material = mdal.Get(new QMAPP.FJC.Entity.MD.Material { MATERIAL_CODE = materialcode });
if (material == null)
{
throw new Exception("查找物料信息失败!");
}
DAL.Basic.MaterialCodeInitDAL mcdal = new DAL.Basic.MaterialCodeInitDAL();
var materialinit = mcdal.GetByCondition(new Entity.Basic.MaterialCodeInit { MATERIAL_TYPE = material.MATERIAL_TYPE_CODE });
string prefix = "";
if (materialinit != null)
{
prefix = materialinit.PRODUCT_TYPES;
}
var productdal = new DAL.Produce.ProductDAL();
string maxcode = productdal.GetMaxCode(material.MATERIAL_TYPE_CODE, time);
string newcode = "1";
if (!string.IsNullOrEmpty(maxcode))
{
newcode = (Convert.ToInt32(maxcode) + 1) + "";
}
newcode = prefix + time.ToString("yyyyMMdd") + newcode.PadLeft(6, '0');
return newcode;
}
#endregion
public DataResult ReplacePlanNo(Product product,string newplanno)
{
using (IDataSession session = AppDataFactory.CreateMainSession())
{
try
{
var changelog = new MainCodeChange
{
CREATEDATE = DateTime.Now,
CREATEUSER = LoginUser.UserID,
MATERIAL_NAME = product.MATERIAL_NAME,
MATERIALCODE = product.MATERIAL_CODE,
NEWMAINCODE = newplanno,
ORIGMAINCODE = product.PLAN_NO,
PRODUCELINE = product.PRODUCELINE,
PRODUCTCODE = product.PRODUCTCODE,
PID = Guid.NewGuid().ToString()
};
DAL.Operation.ProductDAL dal = new ProductDAL();
dal.BaseSession = session;
DAL.Operation.MainCodeChangeDAL cdal = new MainCodeChangeDAL();
cdal.BaseSession = session;
if (product.ENDOFLINE != "1")
{
var order = SetOrder(session, newplanno, product);
dal.ReplacePlanNo(product.PRODUCTCODE, newplanno, order.ORDERPLANID);
}
else
{
dal.ReplacePlanNo(product.PRODUCTCODE, newplanno, "");
}
cdal.Insert(changelog);
session.CommitTs();
return new DataResult { IsSuccess = true };
}
catch (Exception ex)
{
session.RollbackTs();
return new DataResult { IsSuccess = false, Ex = ex, Msg = ex.Message };
}
}
}
public DataResult ExchangePlanNo(Product oproduct, Product nproduct)
{
using (IDataSession session = AppDataFactory.CreateMainSession())
{
try
{
var changelog = new MainCodeChange
{
CREATEDATE = DateTime.Now,
CREATEUSER = LoginUser.UserID,
MATERIAL_NAME = oproduct.MATERIAL_NAME,
MATERIALCODE = oproduct.MATERIAL_CODE,
NEWMAINCODE = nproduct.PLAN_NO,
ORIGMAINCODE = oproduct.PLAN_NO,
PRODUCELINE = oproduct.PRODUCELINE,
PRODUCTCODE = oproduct.PRODUCTCODE,
PID = Guid.NewGuid().ToString()
};
var changelog1 = new MainCodeChange
{
CREATEDATE = DateTime.Now,
CREATEUSER = LoginUser.UserID,
MATERIAL_NAME = nproduct.MATERIAL_NAME,
MATERIALCODE = nproduct.MATERIAL_CODE,
NEWMAINCODE = oproduct.PLAN_NO,
ORIGMAINCODE = nproduct.PLAN_NO,
PRODUCELINE = nproduct.PRODUCELINE,
PRODUCTCODE = nproduct.PRODUCTCODE,
PID = Guid.NewGuid().ToString()
};
DAL.Operation.ProductDAL dal = new ProductDAL();
dal.BaseSession = session;
DAL.Operation.MainCodeChangeDAL cdal = new MainCodeChangeDAL();
cdal.BaseSession = session;
if (nproduct.ENDOFLINE != "1")
{
var norder= SetOrder(session, oproduct.PLAN_NO, nproduct);
dal.ReplacePlanNo(nproduct.PRODUCTCODE, oproduct.PLAN_NO,norder.ORDERPLANID);
}
else
{
dal.ReplacePlanNo(nproduct.PRODUCTCODE, oproduct.PLAN_NO,"");
}
if (oproduct.ENDOFLINE != "1")
{
var oorder = SetOrder(session, nproduct.PLAN_NO, oproduct);
dal.ReplacePlanNo(oproduct.PRODUCTCODE, nproduct.PLAN_NO,oorder.ORDERPLANID);
}
else
{
dal.ReplacePlanNo(oproduct.PRODUCTCODE, nproduct.PLAN_NO,"");
}
cdal.Insert(changelog);
session.CommitTs();
return new DataResult { IsSuccess = true };
}
catch (Exception ex)
{
session.RollbackTs();
return new DataResult { IsSuccess = false, Ex = ex, Msg = ex.Message };
}
}
}
private Entity.ProductionPlan.WorkOrder SetOrder(IDataSession session , string orderno,Product product)
{
string regexp_full = "^D\\d{2}\\w+[RF][LR]\\d{2}(10|11|12|0[1-9])(30|31|2\\d|1\\d|0[1-9])\\w\\d{5}$";
string regexp_prefix = "^D\\d{2}\\w+(?=[RF][LR]\\d{6})";
string regexp_position = "[RF][LR](?=\\d{6})";
string regexp_date = "(?<=[RF][LR])\\d{2}(10|11|12|0[1-9])(30|31|2\\d|1\\d|0[1-9])";
string regexp_seq = "\\d{5}$";
string regexp_sdSeq = "(?<=SD)\\d{4}$";
var plandal = new DAL.FIS.OrderPlanDAL();
var workorderdal = new DAL.ProductionPlan.WorkOrderDAL();
//Entity.FIS.OrderPlan plan = null;
Entity.ProductionPlan.WorkOrder order = null;
order = workorderdal.GetOneByOrderNO(orderno);
if (order == null)
{
var plan=plandal.GetInfo(new Entity.FIS.OrderPlan { PLAN_NO = Regex.Replace(orderno,regexp_sdSeq, "") });
if (plan == null)
{
string codeprefix = Regex.Match(orderno, regexp_prefix).Value;
string positioncode = Regex.Match(orderno, regexp_position).Value;
string date = Regex.Match(orderno, regexp_date).Value;
string seq = "";
if (Regex.IsMatch(orderno, regexp_full))
{
seq = Regex.Match(orderno, regexp_seq).Value;
}
else
{
seq = Regex.Match(orderno, regexp_sdSeq).Value;
}
string materialcode = new DAL.FIS.FISPhraseDAL().GetMESModulCode(codeprefix, positioncode);
if (string.IsNullOrWhiteSpace(materialcode))
{
throw new Exception("FIS短语字典配置不准确或未更新!");
}
DateTime plandate
= new DateTime(2000 + int.Parse(date.Substring(0, 2))
, int.Parse(date.Substring(2, 2))
, int.Parse(date.Substring(4, 2)));
plandal.BaseSession = session;
plan = new Entity.FIS.OrderPlan
{
CREATEDATE = DateTime.Now,
COMPLETE_QTY = 0,
CREATEUSER = "",
MATERIAL_CODE = materialcode,//////////////////
PID = Guid.NewGuid().ToString(),
PLAN_DATE = plandate,////////////
PLAN_NO = orderno,
PLAN_SEQ = seq,//////////////////
PLAN_STATE = "1",
PLANSOURCE = Regex.IsMatch(orderno, regexp_full)?"0":"1",
QTY = 1,
UPDATEUSER = "",
UPDATEDATE = DateTime.Now,
};
Pbom pbomcode = new PbomDAL().Get(new Pbom { MATERIAL_CODE = plan.MATERIAL_CODE });
if (pbomcode != null)
{
plan.PBOM_CODE = pbomcode.PBOM_CODE;
}
QMAPP.MD.Entity.ProcessRoute routecode = new QMAPP.MD.DAL.ProcessRouteDAL().RouteWithMaterial(plan.MATERIAL_CODE);
if (routecode != null)
{
plan.ROUTE_CODE = routecode.ROUTE_CODE;
}
string workcentercode = new WorkCellDAL().GetWorkcenterWithMaterial(plan.MATERIAL_CODE);
if (workcentercode != null)
{
plan.WORKCENTER_CODE = workcentercode;
}
//赋值新session后插入 zxd20171101
plandal.Insert(plan);
}
var wodDal = new WorkOrderDAL();
//List<QMAPP.MD.Entity.ProcessRouteWorkCellSeq> list = new WorkCellDAL().GetFirstWorkCell(plan.PBOM_CODE);
wodDal.BaseSession = session;
//DataRow workOrder = workOrderDt.NewRow();
order = new WorkOrder();
order.PID = Guid.NewGuid().ToString();
order.ORDERPLANID = plan.PID;
order.ORDERPLAN_NO = plan.PLAN_NO;
if (Regex.IsMatch(orderno, regexp_full))
order.ORDER_TYPE = EnumGeter.WORKORDERTYPE.FIS.GetHashCode().ToString();
else
order.ORDER_TYPE = EnumGeter.WORKORDERTYPE.STOCK.GetHashCode().ToString();
order.SEQ = plan.PLAN_SEQ;
order.MATERIAL_CODE = plan.MATERIAL_CODE;
order.PBOM_CODE = plan.PBOM_CODE;
order.QTY = 1;
order.COMPLETE_QTY = 0;
order.PLAN_DATE = plan.PLAN_DATE;
order.SHIFT_CODE = plan.SHIFT_CODE;
order.WORKCENTER_CODE = plan.WORKCENTER_CODE;
//WorkCell workcellcode = new WorkCellDAL().Get(new WorkCell { WORKCENTER_CODE = info.WORKCENTER_CODE });
order.WORKCELL_CODE = product.WORKCELL_CODE;
order.WORKLOC_CODE = "";
order.REMARK = product.PRODUCTCODE;
order.EQPT_NAME = "";
order.EQPT_CODE = "";
order.STATE = EnumGeter.WORKPLANSTATE.READY.GetHashCode();
order.PRI = 1;
//order.UPDATEDATE = DateTime.Now;
order.PRINTED = "1";
wodDal.Insert(order);
}
else
{
order.WORKCELL_CODE = product.WORKCELL_CODE;
order.REMARK = product.PRODUCTCODE;
var wodDal = new WorkOrderDAL();
wodDal.BaseSession = session;
wodDal.Update(order);
}
return order;
}
}
}