using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QMFrameWork.Data;
using QMAPP.FJC.DAL.QT;
using QMAPP.FJC.Entity.QT;
using QMAPP.FJC.TRACING.DAInterface;
using QMAPP.FJC.DAL.Produce;
using QMAPP.FJC.DAL.Basic;
using QMAPP.FJC.Entity.Operation;
using QMAPP.FJC.DAL.Operation;
using QMAPP.FJC.Entity.Basic;
using QMAPP.MD.Entity;
using QMAPP.MD.DAL;
using QMAPP.MD.Entity.View;
using QMAPP.FJC.Entity.ProductionPlan;
using QMAPP.FJC.Entity;

namespace QMAPP.FJC.TRACING.StateActions
{
    /// <summary>
    /// 线边包装数量
    /// </summary>
    public class PackageConsume : IStateAction
    {
        /// <summary>
        /// 执行
        /// </summary>
        /// <param name="data"></param>
        public void Execute(DAObject data)
        {
            
            WorkCellRunStateDAL wcrsdal = new WorkCellRunStateDAL();
            var state = wcrsdal.GetNextState(data.WorkLocState.WORKCELL_CODE, data.WorkLocState.CurrentState.STATE_SEQ);
            bool workcellend = state == null; //如果当前为工序最终状态
            //List<DAICache> unsavedDai = new List<DAICache>();
            foreach (var dai in data.WorkLocState.DataCache)
            {
                if (workcellend && !string.IsNullOrWhiteSpace(dai.MATERIAL_CODE) && !dai.MATERIAL_CODE.Equals(data.WorkLocState.CurrentState.MATERIAL_CODE)) //如果采集的物料号于产品物料号一直则不保存产品组成
                {
                    StringBuilder sql = new StringBuilder();
                    sql.AppendLine("UPDATE T_AW_PACKAGE ");
                    sql.AppendLine("SET USINGCOUNT=USINGCOUNT+1 ");
                    sql.AppendLine(",USINGSTATE=CASE WHEN CAPACITY>USINGCOUNT+1 THEN 1 ELSE 2 END ");
                    sql.AppendLine("WHERE PID IN (SELECT TOP 1 PID ");
                    sql.AppendLine("                FROM T_AW_PACKAGE ");
                    sql.AppendLine("			   WHERE MATERIAL_CODE=@materialcode ");
                    sql.AppendLine("			     AND USINGSTATE<2 ");
                    sql.AppendLine("				 AND USINGCOUNT<CAPACITY ");
                    sql.AppendLine("			   ORDER BY CREATEDATE)");
                    data.SQLCommands.Add(new SQLCommand(sql.ToString(), new DataParameter("materialcode", dai.MATERIAL_CODE)));
                }
            }
            //DAICacheDAL dcdal = new DAICacheDAL();
            //dcdal.Update(unsavedDai, data.DataSession);
        }
    }
}