using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using QMAPP.BLL ;
using QMAPP.Entity ;
using QMAPP.FJC.Entity.FIS ;
using QMFrameWork.Log ;
using QMAPP.FJC.Entity ;
using QMFrameWork.Data ;
using QMAPP.FJC.DAL.FIS ;
using System.Data ;
using QMAPP.FJC.BLL.Dict ;
using QMAPP.FJC.Entity.Basic ;
using QMAPP.FJC.BLL.Dict ;
using QMAPP.MD.Entity ;
using QMAPP.MD.DAL ;
using QMAPP.FJC.Entity.ProductionPlan ;
using QMAPP.FJC.DAL.ProductionPlan ;
using QMFrameWork.Common.Util ;
using QMAPP.FJC.Entity.FileCopy.FIS ;
namespace QMAPP.FJC.BLL.FIS
{
/// <summary>
/// 模块名称:仪表板计划
/// 作 者:郭兆福
/// 创建时间:2017年09月15日
/// </summary>
public class DashBoardPlanBLL : BaseBLL
{
#region 获取信息
/// <summary>
/// 获取信息
/// </summary>
/// <param name="">条件</param>
/// <returns>信息</returns>
public DataResult < OrderPlan > Get ( OrderPlan model )
{
DataResult < OrderPlan > result = new DataResult < OrderPlan > ( ) ;
try
{
result . Result = new DashBoardPlanDAL ( ) . Get ( model ) ;
}
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="condition">条件</param>
/// <param name="page">数据页</param>
/// <returns>数据页</returns>
public DataResult < DataPage > GetList ( OrderPlan condition , DataPage page )
{
DataResult < DataPage > result = new DataResult < DataPage > ( ) ;
try
{
//获取订单计划信息列表
DataPage dataPage = new DashBoardPlanDAL ( ) . GetList ( condition , page ) ;
List < OrderPlan > list = page . Result as List < OrderPlan > ;
#region 显示类型
//处理字典信息
DictManageBLL dictPRODUCEREQUIRE = new DictManageBLL ( DictKind . PRODUCEREQUIRE ) ;
DictManageBLL dictPLANSOURCE = new DictManageBLL ( DictKind . PLANSOURCE ) ;
DictManageBLL dictPLANSTATE = new DictManageBLL ( DictKind . PLAN_STATE ) ;
foreach ( var info in list )
{
info . PRODUCEREQUIRE = dictPRODUCEREQUIRE . GetDictValue ( info . PRODUCEREQUIRE ) ;
info . PLANSOURCE = dictPLANSOURCE . GetDictValue ( info . PLANSOURCE ) ;
info . PLAN_STATE = dictPLANSTATE . GetDictValue ( info . PLAN_STATE ) ;
}
#endregion
result . Result = dataPage ;
}
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="info"></param>
/// <returns>true:已存在;fasel:不存在。</returns>
public int ExistsOrderPlan ( OrderPlan model )
{
try
{
return new DashBoardPlanDAL ( ) . ExistsOrderPlan ( model ) ;
}
catch ( Exception ex )
{
throw ex ;
}
}
#endregion
#region 插入信息
/// <summary>
/// 插入信息(单表)
/// </summary>
/// <param name="">信息</param>
/// <returns>插入行数</returns>
public DataResult < int > Insert ( OrderPlan model )
{
DataResult < int > result = new DataResult < int > ( ) ;
//基本信息
model . PID = Guid . NewGuid ( ) . ToString ( ) ;
model . PLAN_STATE = "0" ;
model . PLANSOURCE = model . PLANSOURCE ;
//int no = new DoorPlankPlanDAL().GetNum(model);
//model.PLAN_SEQ = //model.PLAN_DATE.ToString("yyyyMMdd") + no;
Pbom pbomcode = new PbomDAL ( ) . Get ( new Pbom { MATERIAL_CODE = model . MATERIAL_CODE } ) ;
model . PBOM_CODE = pbomcode . PBOM_CODE ;
string workcentercode = new WorkCellDAL ( ) . GetWorkcenter ( model . ORDER_TYPE ) ;
model . WORKCENTER_CODE = workcentercode ;
if ( model . WORKCENTER_CODE ! = "" )
{
string factory = new FactoryDAL ( ) . GetFactoryWithWorkcenter ( model . WORKCENTER_CODE ) ;
model . FACTORY_CODE = factory ;
}
//QMAPP.MD.Entity.ProcessRoute routecode = new QMAPP.MD.DAL.ProcessRouteDAL().RouteWithMaterial(model.MATERIAL_CODE);
//model.ROUTE_CODE = routecode.ROUTE_CODE;
model . CREATEUSER = this . LoginUser . UserID ;
model . CREATEDATE = DateTime . Now ;
model . UPDATEUSER = model . CREATEUSER ;
model . UPDATEDATE = model . CREATEDATE ;
DashBoardPlanDAL cmdDAL = new DashBoardPlanDAL ( ) ;
try
{
//if (ExistsOrderPlan(model) > 0)
//{
// result.IsSuccess = false;
// result.Msg = Resource.MaterielCodeIsHave;
// return result;
//}
FISPlan condition = new FISPlan ( ) ;
condition . PREFIX = "IP" ;
condition . DATASTR = model . PLAN_DATE . ToString ( "yyyyMMdd" ) ;
//获取流水号
FISPlan info = this . GetOrderPlanSeq ( condition ) ;
//计划单号
model . PLAN_NO = condition . PREFIX + condition . DATASTR + info . SEQSTR ;
result . Result = new DashBoardPlanDAL ( ) . Insert ( model ) ;
}
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="condition"></param>
/// <returns></returns>
public FISPlan GetOrderPlanSeq ( FISPlan condition )
{
FISPlan fisplan = new FISPlan ( ) ;
OrderPlanDAL orderPlanDal = new OrderPlanDAL ( ) ;
//根据表皮条码获取本体信息
try
{
fisplan = new OrderPlanDAL ( ) . GetOrderPlanSeq ( condition ) ;
//若存在记录,流水号加1,且更新
if ( fisplan ! = null )
{
string seqstr = ( Convert . ToInt32 ( fisplan . SEQSTR ) + 1 ) . ToString ( ) . PadLeft ( 3 , '0' ) ;
fisplan . SEQSTR = seqstr ;
//更新表T_AW_FISPLAN数据
using ( IDataSession session = AppDataFactory . CreateMainSession ( ) )
{
session . OpenTs ( ) ;
orderPlanDal . BaseSession = session ;
orderPlanDal . UpdateFisPlan ( fisplan ) ;
session . CommitTs ( ) ;
}
}
//不存在则插入此日期信息
else
{
FISPlan planinfo = new FISPlan ( ) ;
planinfo . PID = Guid . NewGuid ( ) . ToString ( ) ;
planinfo . PREFIX = condition . PREFIX ;
planinfo . DATASTR = condition . DATASTR ;
planinfo . SEQSTR = "001" ;
using ( IDataSession session = AppDataFactory . CreateMainSession ( ) )
{
session . OpenTs ( ) ;
orderPlanDal . BaseSession = session ;
orderPlanDal . InsertFisPlan ( planinfo ) ;
session . CommitTs ( ) ;
}
return planinfo ;
}
}
catch ( Exception ex )
{
LogManager . LogHelper . Error ( new LogInfo ( )
{
ErrorInfo = ex ,
Tag = ex . StackTrace ,
Info = "仪表板逻辑层-获取流水号本体信息!"
} ) ;
throw ex ;
}
return fisplan ;
}
#endregion
#region 更新信息
/// <summary>
/// 更新信息
/// </summary>
/// <param name=""></param>
/// <returns>更新行数</returns>
public DataResult < int > Update ( OrderPlan model )
{
DataResult < int > result = new DataResult < int > ( ) ;
WorkOrderDAL workOrderDal = new WorkOrderDAL ( ) ;
model . UPDATEUSER = this . LoginUser . UserID ;
//工单表结构
DataTable totalDt = GetWorkOrderTable ( ) ;
try
{
if ( ExistsOrderPlan ( model ) > 0 )
{
result . IsSuccess = false ;
result . Msg = "该订单号已经存在!" ;
return result ;
}
if ( model . COMPLETE_QTY > model . QTY )
{
result . IsSuccess = false ;
result . Msg = "修改后的计划数量不能小于已完成数量!" ;
return result ;
}
if ( model . PLAN_STATE = = EnumGeter . PLANSTATE . COMPLATED . GetHashCode ( ) . ToString ( ) )
{
result . IsSuccess = false ;
result . Msg = "订单已经完成不能进行修改!" ;
return result ;
}
#region 如果修改后的计划数量等于完成数量,将计划状态更新为完成
if ( model . QTY . Equals ( model . COMPLETE_QTY ) )
{
model . PLAN_STATE = EnumGeter . PLANSTATE . COMPLATED . GetHashCode ( ) . ToString ( ) ;
}
#endregion
List < WorkOrder > list = workOrderDal . GetList ( new WorkOrder ( ) { ORDERPLANID = model . PID } ) ;
#region 判断数量
OrderPlanDAL orderPlanDal = new OrderPlanDAL ( ) ;
OrderPlan initialOrderPlan = orderPlanDal . Get ( new OrderPlan { PID = model . PID } ) ;
string deleteWorkOrderSql = "" ;
List < WorkOrder > workOrderList = new List < WorkOrder > ( ) ;
//将计划数量调整变小,删除为生产的派工单
if ( ( initialOrderPlan . QTY - model . QTY ) > 0 )
{
int unProduceCount = list . Count ( o = > o . STATE = = 0 ) ;
if ( list . Count > 0 & & unProduceCount < ( initialOrderPlan . QTY - model . QTY ) )
{
result . IsSuccess = false ;
result . Msg = string . Format ( "该订单下已经加工的产品数量大于{0},请重新调整数量!" , model . QTY ) ;
return result ;
}
deleteWorkOrderSql = string . Format ( "delete from T_PP_WORKORDER where pid in (select top {0} pid from T_PP_WORKORDER where ORDERPLANID='{1}' and [STATE]=0 order by SEQ desc)" , ( initialOrderPlan . QTY - model . QTY ) , initialOrderPlan . PID ) ;
}
else
{
if ( list . Count > 0 & & ( model . QTY - initialOrderPlan . QTY ) > 0 )
{
workOrderList = this . PutOutOrderPlan ( model , ( model . QTY - initialOrderPlan . QTY ) , list . Count ) ;
}
}
#endregion
using ( IDataSession session = AppDataFactory . CreateMainSession ( ) )
{
session . OpenTs ( ) ;
orderPlanDal . BaseSession = session ;
workOrderDal . BaseSession = session ;
Pbom pbomcode = new PbomDAL ( ) . Get ( new Pbom { MATERIAL_CODE = model . MATERIAL_CODE } ) ;
model . PBOM_CODE = pbomcode . PBOM_CODE ;
orderPlanDal . Update ( model ) ;
if ( string . IsNullOrEmpty ( deleteWorkOrderSql ) = = false )
{
session . ExecuteSql ( deleteWorkOrderSql , new List < DataParameter > ( ) . ToArray ( ) ) ;
}
if ( workOrderList . Count > 0 )
{
foreach ( var wo in workOrderList )
{
workOrderDal . Insert ( wo ) ;
}
}
session . CommitTs ( ) ;
}
result . IsSuccess = true ;
result . Msg = "修改成功!" ;
return result ;
}
catch ( Exception ex )
{
LogManager . LogHelper . Error ( new LogInfo ( )
{
ErrorInfo = ex ,
Tag = ex . StackTrace ,
Info = "信息逻辑层-更新信息!"
} ) ;
result . IsSuccess = false ;
result . Msg = Resource . SystemException ;
throw ex ;
}
}
#endregion
#region 删除
/// <summary>
/// 删除信息
/// </summary>
/// <param name=""></param>
/// <returns>删除个数</returns>
public DataResult < int > Delete ( string strs )
{
int count = 0 ;
string [ ] list = strs . Split ( ":" . ToCharArray ( ) ) ;
DataResult < int > result = new DataResult < int > ( ) ;
try
{
WorkOrderDAL workOrderDal = new WorkOrderDAL ( ) ;
OrderPlanDAL orderPlanDal = new OrderPlanDAL ( ) ;
//校验未通过的订单
List < OrderPlan > validOrderList = new List < OrderPlan > ( ) ;
//可以删除的订单
List < OrderPlan > deleteOrderList = new List < OrderPlan > ( ) ;
foreach ( string str in list )
{
OrderPlan op = orderPlanDal . Get ( new OrderPlan ( ) { PID = str } ) ;
//去T_PP_WORkORDER表查询此计划下的派工单是否有不为0(初始)状态的派工信息,若有则不让删除
int Num = workOrderDal . GetAllWorkOrder ( str ) ;
//如果订单初始化或是确认生产(发布)并且生产数量为0
if ( op . PLAN_STATE = = EnumGeter . PLANSTATE . INIT . GetHashCode ( ) . ToString ( )
| | ( op . PLAN_STATE = = EnumGeter . PLANSTATE . COMMIT . GetHashCode ( ) . ToString ( ) & & op . COMPLETE_QTY = = 0 & & Num = = 0 ) )
{
deleteOrderList . Add ( op ) ;
}
else
{
validOrderList . Add ( op ) ;
}
}
if ( validOrderList . Count > 0 )
{
result . IsSuccess = false ;
result . Msg = "只有初始化或是确认生产并且生产数量为0订单可以删除!" ;
return result ;
}
using ( IDataSession session = AppDataFactory . CreateMainSession ( ) )
{
session . OpenTs ( ) ;
orderPlanDal . BaseSession = session ;
workOrderDal . BaseSession = session ;
foreach ( var op in deleteOrderList )
{
//删除订单
orderPlanDal . DeleteOrderPlan ( op ) ;
//删除订单下的派工单
workOrderDal . BatchDeleteByOrderPlan ( new WorkOrder ( ) { ORDERPLANID = op . PID } ) ;
}
session . CommitTs ( ) ;
}
result . Result = count ;
result . Msg = "订单删除成功!" ;
result . IsSuccess = true ;
return result ;
}
catch ( Exception ex )
{
throw ex ;
}
}
/// <summary>
/// 删除信息
/// </summary>
/// <param name="">信息</param>
/// <returns>删除个数</returns>
public int DeleteDashBoardPlan ( OrderPlan model )
{
int count = 0 ;
int number = new DashBoardPlanDAL ( ) . DelCheck ( model ) ;
if ( number > 0 )
{
return count ;
}
count = new DashBoardPlanDAL ( ) . Delete ( model ) ;
return count ;
}
#endregion
#region 发布
/// <summary>
/// 发布信息
/// </summary>
/// <param name=""></param>
/// <returns>发布个数</returns>
public DataResult < int > PutOut ( string strs )
{
string [ ] list = strs . Split ( ":" . ToCharArray ( ) ) ;
DataResult < int > result = new DataResult < int > ( ) ;
try
{
OrderPlanDAL orderPlandal = new OrderPlanDAL ( ) ;
List < OrderPlan > validorderPlanList = new List < OrderPlan > ( ) ;
List < OrderPlan > putOutPlanList = new List < OrderPlan > ( ) ;
foreach ( string str in list )
{
OrderPlan op = orderPlandal . Get ( new OrderPlan { PID = str } ) ;
if ( op . PLAN_STATE ! = EnumGeter . PLANSTATE . INIT . GetHashCode ( ) . ToString ( ) )
{
validorderPlanList . Add ( op ) ;
}
putOutPlanList . Add ( op ) ;
}
if ( validorderPlanList . Count > 0 )
{
result . IsSuccess = false ;
result . Msg = "只有初始状态下的订单能够进行发布!" ;
return result ;
}
DataTable totalDt = GetWorkOrderTable ( ) ;
foreach ( var op in putOutPlanList )
{
op . PLAN_STATE = EnumGeter . PLANSTATE . COMMIT . GetHashCode ( ) . ToString ( ) ;
op . UPDATEUSER = this . LoginUser . UserID ;
totalDt = this . PutOutOrderPlan ( op , totalDt ) ;
}
using ( IDataSession session = AppDataFactory . CreateMainSession ( ) )
{
IDbConnection dbConn = DbManager . MainConnectionInfo . Connection ;
IDbTransaction ids = dbConn . BeginTransaction ( ) ;
orderPlandal . BaseSession = session ;
foreach ( var op in putOutPlanList )
{
orderPlandal . Update ( op ) ;
}
session . DbHelper . BulkCopyData ( totalDt , "T_PP_WORKORDER" , dbConn , ids ) ;
ids . Commit ( ) ;
}
result . IsSuccess = true ;
return result ;
}
catch ( Exception ex )
{
throw ex ;
}
}
/// <summary>
/// 发布信息
/// </summary>
/// <param name="">信息</param>
/// <returns>发布个数</returns>
public DataTable PutOutOrderPlan ( OrderPlan info , DataTable workOrderDt )
{
WorkCellDAL workCelldal = new WorkCellDAL ( ) ;
string pbomcode = info . PBOM_CODE ;
List < QMAPP . MD . Entity . ProcessRouteWorkCellSeq > list = workCelldal . GetFirstWorkCell ( pbomcode ) ;
var dicPRI = new DictManageBLL ( Dict . DictKind . ORDERPRI ) ;
//注入派工单信息
for ( int i = 0 ; i < info . QTY ; i + + )
{
foreach ( var seq in list )
{
DataRow workOrder = workOrderDt . NewRow ( ) ;
workOrder [ "PID" ] = Guid . NewGuid ( ) . ToString ( ) ;
workOrder [ "ORDERPLANID" ] = info . PID ;
workOrder [ "ORDERPLAN_NO" ] = ( info . PLAN_NO . ToString ( ) + ( i + 1 ) . ToString ( ) . PadLeft ( 4 , '0' ) ) ;
workOrder [ "ORDER_TYPE" ] = info . PLANSOURCE ;
workOrder [ "SEQ" ] = ( i + 1 ) . ToString ( ) . PadLeft ( 6 , '0' ) ;
workOrder [ "MATERIAL_CODE" ] = info . MATERIAL_CODE ;
workOrder [ "PBOM_CODE" ] = info . PBOM_CODE ;
workOrder [ "QTY" ] = 1 ;
workOrder [ "COMPLETE_QTY" ] = 0 ;
workOrder [ "PLAN_DATE" ] = info . PLAN_DATE ;
workOrder [ "SHIFT_CODE" ] = info . SHIFT_CODE ;
workOrder [ "WORKCENTER_CODE" ] = info . WORKCENTER_CODE ;
workOrder [ "WORKCELL_CODE" ] = seq . WORKCELL_CODE ;
workOrder [ "WORKLOC_CODE" ] = "" ;
workOrder [ "REMARK" ] = "" ;
workOrder [ "EQPT_NAME" ] = "" ;
workOrder [ "EQPT_CODE" ] = "" ;
workOrder [ "STATE" ] = EnumGeter . WORKPLANSTATE . INIT . GetHashCode ( ) . ToString ( ) ;
workOrder [ "PRI" ] = dicPRI . GetDictValue ( info . PLANSOURCE ) ;
workOrderDt . Rows . Add ( workOrder ) ;
}
}
return workOrderDt ;
}
/// <summary>
/// 发布信息--直接发布到最后一个工位
/// </summary>
/// <param name=""></param>
/// <returns>发布个数</returns>
public DataResult < int > PutOutEndWorkCell ( string strs )
{
string [ ] list = strs . Split ( ":" . ToCharArray ( ) ) ;
DataResult < int > result = new DataResult < int > ( ) ;
try
{
OrderPlanDAL orderPlandal = new OrderPlanDAL ( ) ;
List < OrderPlan > validorderPlanList = new List < OrderPlan > ( ) ;
List < OrderPlan > putOutPlanList = new List < OrderPlan > ( ) ;
foreach ( string str in list )
{
OrderPlan op = orderPlandal . Get ( new OrderPlan { PID = str } ) ;
if ( op . PLAN_STATE ! = EnumGeter . PLANSTATE . INIT . GetHashCode ( ) . ToString ( ) )
{
validorderPlanList . Add ( op ) ;
}
putOutPlanList . Add ( op ) ;
}
if ( validorderPlanList . Count > 0 )
{
result . IsSuccess = false ;
result . Msg = "只有初始状态下的订单能够进行发布!" ;
return result ;
}
DataTable totalDt = GetWorkOrderTable ( ) ;
foreach ( var op in putOutPlanList )
{
op . PLAN_STATE = EnumGeter . PLANSTATE . COMMIT . GetHashCode ( ) . ToString ( ) ;
op . UPDATEUSER = this . LoginUser . UserID ;
totalDt = this . PutOutOrderPlanEndWorkCell ( op , totalDt ) ;
}
using ( IDataSession session = AppDataFactory . CreateMainSession ( ) )
{
IDbConnection dbConn = DbManager . MainConnectionInfo . Connection ;
IDbTransaction ids = dbConn . BeginTransaction ( ) ;
orderPlandal . BaseSession = session ;
foreach ( var op in putOutPlanList )
{
orderPlandal . Update ( op ) ;
}
session . DbHelper . BulkCopyData ( totalDt , "T_PP_WORKORDER" , dbConn , ids ) ;
ids . Commit ( ) ;
}
result . IsSuccess = true ;
return result ;
}
catch ( Exception ex )
{
throw ex ;
}
}
/// <summary>
/// 发布信息--直接发布到最后一个工位
/// </summary>
/// <param name="">信息</param>
/// <returns>发布个数</returns>
public DataTable PutOutOrderPlanEndWorkCell ( OrderPlan info , DataTable workOrderDt )
{
WorkCellDAL workCelldal = new WorkCellDAL ( ) ;
string pbomcode = info . PBOM_CODE ;
List < QMAPP . MD . Entity . ProcessRouteWorkCellSeq > list = workCelldal . GetEndWorkCell ( pbomcode ) ;
var dicPRI = new DictManageBLL ( Dict . DictKind . ORDERPRI ) ;
//注入派工单信息
for ( int i = 0 ; i < info . QTY ; i + + )
{
foreach ( var seq in list )
{
DataRow workOrder = workOrderDt . NewRow ( ) ;
workOrder [ "PID" ] = Guid . NewGuid ( ) . ToString ( ) ;
workOrder [ "ORDERPLANID" ] = info . PID ;
workOrder [ "ORDERPLAN_NO" ] = ( info . PLAN_NO . ToString ( ) + ( i + 1 ) . ToString ( ) . PadLeft ( 4 , '0' ) ) ;
workOrder [ "ORDER_TYPE" ] = info . PLANSOURCE ;
workOrder [ "SEQ" ] = ( i + 1 ) . ToString ( ) . PadLeft ( 6 , '0' ) ;
workOrder [ "MATERIAL_CODE" ] = info . MATERIAL_CODE ;
workOrder [ "PBOM_CODE" ] = info . PBOM_CODE ;
workOrder [ "QTY" ] = 1 ;
workOrder [ "COMPLETE_QTY" ] = 0 ;
workOrder [ "PLAN_DATE" ] = info . PLAN_DATE ;
workOrder [ "SHIFT_CODE" ] = info . SHIFT_CODE ;
workOrder [ "WORKCENTER_CODE" ] = info . WORKCENTER_CODE ;
workOrder [ "WORKCELL_CODE" ] = seq . WORKCELL_CODE ;
workOrder [ "WORKLOC_CODE" ] = "" ;
workOrder [ "REMARK" ] = "" ;
workOrder [ "EQPT_NAME" ] = "" ;
workOrder [ "EQPT_CODE" ] = "" ;
workOrder [ "STATE" ] = EnumGeter . WORKPLANSTATE . INIT . GetHashCode ( ) . ToString ( ) ;
workOrder [ "PRI" ] = dicPRI . GetDictValue ( info . PLANSOURCE ) ;
workOrderDt . Rows . Add ( workOrder ) ;
}
}
return workOrderDt ;
}
public List < WorkOrder > PutOutOrderPlan ( OrderPlan info , int number , int lastIndex )
{
List < WorkOrder > wolist = new List < WorkOrder > ( ) ;
WorkCellDAL workCelldal = new WorkCellDAL ( ) ;
string pbomcode = info . PBOM_CODE ;
List < QMAPP . MD . Entity . ProcessRouteWorkCellSeq > list = workCelldal . GetFirstWorkCell ( pbomcode ) ;
var dicPRI = new DictManageBLL ( Dict . DictKind . ORDERPRI ) ;
//注入派工单信息
for ( int i = 0 ; i < number ; i + + )
{
foreach ( var seq in list )
{
WorkOrder wo = new WorkOrder ( ) ;
wo . PID = Guid . NewGuid ( ) . ToString ( ) ;
wo . ORDERPLANID = info . PID ;
wo . ORDERPLAN_NO = ( info . PLAN_NO . ToString ( ) + ( i + 1 + lastIndex ) . ToString ( ) . PadLeft ( 4 , '0' ) ) ;
wo . ORDER_TYPE = info . PLANSOURCE ;
wo . SEQ = ( i + 1 + lastIndex ) . ToString ( ) . PadLeft ( 6 , '0' ) ;
wo . MATERIAL_CODE = info . MATERIAL_CODE ;
wo . PBOM_CODE = info . PBOM_CODE ;
wo . QTY = 1 ;
wo . COMPLETE_QTY = 0 ;
wo . PLAN_DATE = info . PLAN_DATE ;
wo . SHIFT_CODE = info . SHIFT_CODE ;
wo . WORKCENTER_CODE = info . WORKCENTER_CODE ;
wo . WORKCELL_CODE = seq . WORKCELL_CODE ;
wo . WORKLOC_CODE = "" ;
wo . REMARK = "" ;
wo . EQPT_NAME = "" ;
wo . EQPT_CODE = "" ;
wo . STATE = Convert . ToInt32 ( EnumGeter . WORKPLANSTATE . INIT . GetHashCode ( ) . ToString ( ) ) ;
wo . PRI = Convert . ToInt32 ( dicPRI . GetDictValue ( info . PLANSOURCE ) ) ;
wo . PRINTED = "0" ;
wolist . Add ( wo ) ;
}
}
return wolist ;
}
#endregion
#region 导出数据
/// <summary>
/// 获取导出的数据
/// </summary>
/// <param name="user">查询条件</param>
/// <returns>数据</returns>
public DataTable GetExportData ( OrderPlan model )
{
try
{
DataTable dt = new DashBoardPlanDAL ( ) . GetExportData ( model ) ;
//处理字典信息
DictManageBLL dictPRODUCEREQUIRE = new DictManageBLL ( DictKind . PRODUCEREQUIRE ) ;
DictManageBLL dictPLANSTATE = new DictManageBLL ( DictKind . PLAN_STATE ) ;
DictManageBLL dictPLANSOURCE = new DictManageBLL ( DictKind . PLANSOURCE ) ;
foreach ( DataRow dr in dt . Rows )
{
//替换状态类别显示值
dr [ "PRODUCEREQUIRE" ] = dictPRODUCEREQUIRE . GetDictValue ( dr [ "PRODUCEREQUIRE" ] . ToString ( ) ) ;
dr [ "PLAN_STATE" ] = dictPLANSTATE . GetDictValue ( dr [ "PLAN_STATE" ] . ToString ( ) ) ;
dr [ "PLANSOURCE" ] = dictPLANSOURCE . GetDictValue ( dr [ "PLANSOURCE" ] . ToString ( ) ) ;
}
//根据所选信息进行导出
if ( string . IsNullOrEmpty ( model . PIDList ) = = false )
{
model . PIDList = "'" + model . PIDList . Replace ( ":" , "','" ) + "'" ;
DataView dv = new DataView ( dt ) ;
dv . RowFilter = "PID in (" + model . PIDList + ")" ;
dt = dv . ToTable ( ) ;
}
return dt ;
}
catch ( Exception ex )
{
throw ex ;
}
}
#endregion
#region 导入数据
/// <summary>
/// 导入Excel表数据
/// </summary>
/// <param name="list">Excel列表</param>
/// <param name="aramodel">区域信息</param>
/// <param name="plantmodel">工厂信息</param>
/// <param name="productbasicmodel">零件类别信息</param>
/// <returns>结果</returns>
public DataResult < ImportMessage > GetImportData ( List < OrderPlan > list , Material materialmodel , MachineInfo machine , ProduceShift produceshiftmodel , QMAPP . MD . Entity . WorkCell workcellmodel )
{
DataResult < ImportMessage > result = new DataResult < ImportMessage > ( ) ;
DashBoardPlanDAL cmDal = new DashBoardPlanDAL ( ) ;
List < OrderPlan > List = new List < OrderPlan > ( ) ;
List < WorkOrder > workOrderList = new List < WorkOrder > ( ) ;
DataTable orderDt = GetOrderPlanTable ( ) ;
DataTable workOrderDt = GetWorkOrderTable ( ) ;
int index = 0 ;
int num = 0 ;
try
{
result . Result = new ImportMessage ( ) ;
result . Result . Errors = new List < RowError > ( ) ;
List < Material > materialinfo = null ;
List < ProduceShift > produceshiftinfo = null ;
List < MachineInfo > machineList = null ;
using ( IDataSession session = AppDataFactory . CreateMainSession ( ) )
{
//工作中心
string workcentercode = new WorkCellDAL ( ) . GetWorkcenter ( workcellmodel . WORKCELL_CODE ) ;
//工厂
string factory = new QMAPP . MD . DAL . FactoryDAL ( ) . GetFactoryWithWorkcenter ( workcentercode ) ;
//获取物料信息
//materialinfo = new QMAPP.MD.BLL.MaterialBLL().GetNewMaterialList(materialmodel, workcellmodel);
materialinfo = new QMAPP . MD . BLL . MaterialBLL ( ) . GetMaterialForOrder ( workcellmodel . WORKCELL_CODE ) ;
//获取班次信息
produceshiftmodel . PRODUCELINE = workcentercode ;
produceshiftinfo = new FJC . BLL . Basic . ProduceShiftBLL ( ) . GetWorkcenterShifts ( workcentercode ) ;
//获取设备信息
machineList = new QMAPP . FJC . BLL . Basic . MachineInfoBLL ( ) . GetMachineForOrderList ( machine , workcellmodel ) ;
var bomdal = new QMAPP . MD . DAL . PbomDAL ( ) ;
var processroutedal = new QMAPP . MD . DAL . ProcessRouteDAL ( ) ;
var planNum = new DoorPlankPlanDAL ( ) . GetNum ( null ) ;
//状态判断
foreach ( OrderPlan ma in list )
{
index + + ;
num + + ;
//物料
Material areaMes = materialinfo . Find ( a = > a . MATERIAL_CODE . ToUpper ( ) = = ma . MATERIAL_CODE . ToUpper ( ) ) ;
if ( areaMes ! = null )
{
ma . MATERIAL_CODE = areaMes . MATERIAL_CODE ;
}
else
{
ma . MATERIAL_CODE = null ;
result . Result . failureNum + = 1 ;
result . Result . Errors . Add ( new RowError ( index , "物料信息不存在" ) ) ;
continue ;
}
//班次
ProduceShift plantMes = produceshiftinfo . Find ( p = > p . PRODUCESHIFTTCODE . ToUpper ( ) = = ma . SHIFT_CODE . ToUpper ( ) ) ;
if ( plantMes ! = null )
{
ma . SHIFT_CODE = plantMes . PRODUCESHIFTTCODE ;
}
else
{
ma . SHIFT_CODE = null ;
result . Result . failureNum + = 1 ;
result . Result . Errors . Add ( new RowError ( index , "班次信息不存在" ) ) ;
continue ;
}
//转变生产要求PRODUCEREQUIRE
if ( ma . PRODUCEREQUIRE ! = null )
{
if ( ma . PRODUCEREQUIRE . Equals ( "以数量为准" ) )
{
ma . PRODUCEREQUIRE = "0" ;
}
else if ( ma . PRODUCEREQUIRE . Equals ( "以时间为准" ) )
{
ma . PRODUCEREQUIRE = "1" ;
}
else
{
ma . PRODUCEREQUIRE = null ;
result . Result . Errors . Add ( new RowError ( index , "生产要求信息错误" ) ) ;
result . Result . failureNum + = 1 ;
continue ;
}
}
//Pbom
Pbom pbomcode = bomdal . Get ( new Pbom { MATERIAL_CODE = ma . MATERIAL_CODE } ) ;
if ( pbomcode = = null )
{
result . Result . Errors . Add ( new RowError ( index , "物料信息有误,无法确定PBOM信息,请检查PBOM配置" ) ) ;
result . Result . failureNum + = 1 ;
continue ;
}
//工艺路线
QMAPP . MD . Entity . ProcessRoute routecode = processroutedal . RouteWithMaterial ( ma . MATERIAL_CODE ) ;
if ( routecode = = null )
{
result . Result . Errors . Add ( new RowError ( index , "物料信息有误,无法确定工艺路线,请检查PBOM和工艺路线配置" ) ) ;
result . Result . failureNum + = 1 ;
continue ;
}
if ( string . IsNullOrEmpty ( ma . InfoError ) = = false )
{
ma . PID = null ;
result . Result . failureNum + = 1 ;
continue ;
}
//修改改时根据主键等信息获取详细内容信息
OrderPlan oldInfo = cmDal . Get ( ma ) ;
if ( oldInfo ! = null )
{
//更新
ma . PID = oldInfo . PID ;
ma . PLAN_SEQ = oldInfo . PLAN_SEQ ;
ma . FACTORY_CODE = oldInfo . FACTORY_CODE ;
ma . WORKCENTER_CODE = oldInfo . WORKCENTER_CODE ;
ma . PBOM_CODE = oldInfo . PBOM_CODE ;
ma . ROUTE_CODE = oldInfo . ROUTE_CODE ;
ma . PLAN_STATE = oldInfo . PLAN_STATE ;
ma . PLANSOURCE = oldInfo . PLANSOURCE ;
ma . CREATEUSER = oldInfo . CREATEUSER ;
ma . CREATEDATE = oldInfo . CREATEDATE ;
ma . UPDATEUSER = this . LoginUser . UserID ;
ma . UPDATEDATE = oldInfo . UPDATEDATE ;
ma . IsNewInfo = false ;
result . Result . updateNum + = 1 ;
}
else
{
//新增
oldInfo = new OrderPlan ( ) ;
ma . PID = Guid . NewGuid ( ) . ToString ( ) ;
ma . PLAN_NO = ma . PLAN_NO ;
//int no = planNum + (num - 1);
//ma.PLAN_SEQ = ma.PLAN_DATE.ToString("yyyyMMdd") + no;
ma . PLAN_STATE = EnumGeter . PLANSTATE . INIT . GetHashCode ( ) . ToString ( ) ;
ma . MATERIAL_CODE = ma . MATERIAL_CODE ;
ma . MACHINECODDE = ma . MACHINECODDE ;
ma . QTY = ma . QTY ;
ma . PBOM_CODE = pbomcode . PBOM_CODE ;
ma . ROUTE_CODE = routecode . ROUTE_CODE ;
ma . PLAN_DATE = ma . PLAN_DATE ;
ma . SHIFT_CODE = ma . SHIFT_CODE ;
ma . PLANSOURCE = "1" ;
ma . PRODUCEREQUIRE = ma . PRODUCEREQUIRE ;
ma . CREATEUSER = this . LoginUser . UserID ;
ma . CREATEDATE = DateTime . Now ;
ma . UPDATEUSER = ma . CREATEUSER ;
ma . UPDATEDATE = ma . CREATEDATE ;
ma . WORKCENTER_CODE = workcentercode ;
ma . FACTORY_CODE = factory ;
ma . IsNewInfo = true ;
result . Result . insertNum + = 1 ;
}
List . Add ( ma ) ;
}
}
//导入
cmDal . GetImportData ( List ) ;
result . Msg = "导入成功" ;
result . IsSuccess = true ;
return result ;
}
catch ( Exception ex )
{
result . IsSuccess = false ;
result . Ex = ex ;
return result ;
}
}
#endregion
#region 获取产品表
/// <summary>
/// 获取产品表
/// </summary>
/// <returns></returns>
private DataTable GetOrderPlanTable ( )
{
DataTable dt = new DataTable ( ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PID" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "FACTORY_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PLAN_NO" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PLAN_SEQ" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PLAN_STATE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "MATERIAL_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PBOM_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "ROUTE_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "REMARK" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "QTY" , DataType = typeof ( int ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "COMPLETE_QTY" , DataType = typeof ( int ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PLAN_DATE" , DataType = typeof ( DateTime ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "SHIFT_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PLANSOURCE" , DataType = typeof ( int ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PRODUCEREQUIRE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "CREATEDATE" , DataType = typeof ( DateTime ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "CREATEUSER" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "UPDATEDATE" , DataType = typeof ( DateTime ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "UPDATEUSER" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "WORKCENTER_CODE" , DataType = typeof ( string ) } ) ;
return dt ;
}
private DataTable GetWorkOrderTable ( )
{
DataTable dt = new DataTable ( ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PID" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "ORDERPLANID" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "ORDERPLAN_NO" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "ORDER_TYPE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "SEQ" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "MATERIAL_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PBOM_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "QTY" , DataType = typeof ( int ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "COMPLETE_QTY" , DataType = typeof ( int ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PLAN_DATE" , DataType = typeof ( DateTime ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "SHIFT_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "WORKCENTER_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "WORKCENTER_NAME" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "WORKCELL_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "WORKCELL_NAME" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "WORKLOC_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "REMARK" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "EQPT_NAME" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "EQPT_CODE" , DataType = typeof ( string ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "STATE" , DataType = typeof ( int ) } ) ;
dt . Columns . Add ( new DataColumn ( ) { ColumnName = "PRI" , DataType = typeof ( int ) } ) ;
return dt ;
}
#endregion
#region 获取列表(为了修改顺序号使用)
/// <summary>
/// 获取列表
/// </summary>
/// <param name="condition">条件</param>
/// <param name="page">数据页</param>
/// <returns>数据页</returns>
public DataResult < DataPage > GetDashBoardPlanList ( OrderPlan condition , DataPage page )
{
condition . PIDList = "'" + condition . PIDList . Replace ( ":" , "','" ) + "'" ;
DataResult < DataPage > result = new DataResult < DataPage > ( ) ;
try
{
//获取信息列表
DataPage dataPage = new DashBoardPlanDAL ( ) . GetDashBoardPlanList ( condition , page ) ;
result . Result = dataPage ;
}
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
}
}