yl
2023-03-07 301936d643fe804b52b397dc594877d8d3cbe202
VueWebApi/DLL/DAL/ProductionManagementDAL.cs
@@ -66,7 +66,7 @@
                }
                if (creatuser != "" && creatuser != null)
                {
                    search += "and U.username like '%'+@creatuser+'%' ";
                    search += "and A.createuser like '%'+@creatuser+'%' ";
                    dynamicParams.Add("@creatuser", creatuser);
                }
@@ -77,12 +77,11 @@
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select A.id, A.status,A.wo,A.materiel_code as partcode,B.partname,B.partspec,A.qty,A.relse_qty,A.wkshp_code,C.org_name as wkshp_name,
                            A.stck_code,D.name as stck_name,A.planstartdate,A.planenddate,U.username as createuser,A.createdate
                            A.stck_code,D.name as stck_name,A.planstartdate,A.planenddate,A.createuser as createuser,A.createdate
                            from TKimp_Ewo A
                            left join TMateriel_Info B on A.materiel_code=B.partcode
                            left join TOrganization C on A.wkshp_code=C.org_code
                            left join T_Sec_Stck D on A.stck_code=D.code
                            left join TUser U on A.createuser=U.usercode
                            left join T_Sec_Stck D on A.stck_code=D.code
                            where A.is_delete<>'1' " + search;
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
@@ -385,6 +384,83 @@
        }
        #endregion
        #region[MES报废补单工单查询]
        public static ToMessage MesBadOrderSearch(string mesordercode, string sourceorder, string partcode, string partname, string partspec, int startNum, string creatuser, string createdate, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (mesordercode != "" && mesordercode != null)
                {
                    search += "and A.wo_code like '%'+@mesordercode+'%' ";
                    dynamicParams.Add("@mesordercode", mesordercode);
                }
                if (sourceorder != "" && sourceorder != null)
                {
                    search += "and A.m_po like '%'+@sourceorder+'%' ";
                    dynamicParams.Add("@sourceorder", sourceorder);
                }
                if (partcode != "" && partcode != null)
                {
                    search += "and A.materiel_code like '%'+@partcode+'%' ";
                    dynamicParams.Add("@partcode", partcode);
                }
                if (partname != "" && partname != null)
                {
                    search += "and B.partname like '%'+@partname+'%' ";
                    dynamicParams.Add("@partname", partname);
                }
                if (partspec != "" && partspec != null)
                {
                    search += "and B.partspec like '%'+@partspec+'%' ";
                    dynamicParams.Add("@partspec", partspec);
                }
                if (createdate != "" && createdate != null)
                {
                    search += "and CONVERT(varchar(100),A.lm_date,23)=@createdate ";
                    dynamicParams.Add("@createdate", createdate);
                }
                if (creatuser != "" && creatuser != null)
                {
                    search += "and U.username like '%'+@creatuser+'%' ";
                    dynamicParams.Add("@creatuser", creatuser);
                }
                if (search == "")
                {
                    search = "and 1=1 ";
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select A.id, A.status,A.wotype,A.wo_code,A.materiel_code as partcode,B.partname,B.partspec,A.plan_qty,A.wkshp_code,C.org_name as wkshp_name,
                            A.route_code,E.name as route_name,A.stck_code,F.name as stck_name,A.plan_startdate,A.plan_enddate,A.piroque,A.sourceid,A.m_po,U.username as lm_user,A.lm_date,S.bad_qty
                            from TK_Wrk_Man A
                            left join (select wo_code,sum(bad_qty) as bad_qty from  TK_Wrk_Step where bad_qty>0 group by wo_code) S on A.wo_code=S.wo_code
                            left join TMateriel_Info B on A.materiel_code=B.partcode
                            left join TOrganization C on A.wkshp_code=C.org_code
                            left join T_Sec_Stck D on A.stck_code=D.code
                            left join TFlw_Rout E on A.route_code=E.code
                            left join T_Sec_Stck F on A.stck_code=F.code
                            left join TUser U on A.lm_user=U.usercode
                            where A.is_delete<>'1'  and A.status='START' and A.wotype='PO' and S.bad_qty>0 " + search;
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
                mes.Message = "查询成功!";
                mes.count = total;
                mes.data = data.ToList();
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.Message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[产品编码查找工艺路线下拉接口]
        public static ToMessage PartSelectRoute(string partcode)
        {
@@ -476,8 +552,75 @@
        }
        #endregion
        #region[工单派发选择工艺路线或选择生产车间时判断绑定条件]
        public static ToMessage SelectRouteOrWkshop(string partcode, string routecode, string wkshopcode)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                mes.code = "200";
                mes.Message = "";
                mes.data = null;
                //判断工艺路线对应工序是否都有关联工作站
                sql = @"select B.step_code,C.eqp_code from TFlw_Rout A
                        inner join TFlw_Rtdt B on A.code=B.rout_code
                        left join TFlw_Rteqp C on B.step_code=C.step_code
                        where A.code=@routecode";
                dynamicParams.Add("@routecode", routecode);
                var dtck = DapperHelper.selectdata(sql, dynamicParams);
                for (int i = 0; i < dtck.Rows.Count; i++)
                {
                    if (dtck.Rows[i].IsNull("eqp_code"))
                    {
                        mes.code = "300";
                        mes.count = 0;
                        mes.Message = "当前工艺路线对应工序【" + dtck.Rows[i]["step_code"].ToString() + "】,未关联设备,请关联所有工序对应设备!";
                        mes.data = null;
                        return mes;
                    }
                }
                //判断工艺路线对应工序关联的工作站是否有设置节拍工价
                sql = @"select AA.step_code,AA.eqp_code,AA.flwtype,S.unprice  from (
                        select A.code,B.step_code,C.eqp_code,S.flwtype from TFlw_Rout A
                        inner join TFlw_Rtdt B on A.code=B.rout_code
                        left join TFlw_Rteqp C on B.step_code=C.step_code
                        left join TStep S on B.step_code=S.stepcode
                        where A.code=@route_code
                        ) as AA
                        left join (select * from TPrteEqp_Stad   where materiel_code=@partcode and route_code=@route_code) as S on
                        AA.code=S.route_code and AA.step_code=S.step_code and AA.eqp_code=S.eqp_code";
                dynamicParams.Add("@partcode", partcode);
                dynamicParams.Add("@route_code", routecode);
                var dtc = DapperHelper.selectdata(sql, dynamicParams);
                for (int i = 0; i < dtc.Rows.Count; i++)
                {
                    if (dtc.Rows[i]["flwtype"].ToString() == "Z") //判断工序是否为自制
                    {
                        if (dtc.Rows[i].IsNull("unprice") || decimal.Parse(dtc.Rows[i]["unprice"].ToString()) == 0)
                        {
                            mes.code = "300";
                            mes.count = 0;
                            mes.Message = "节拍工价中:当前产品【" + partcode + "】,对应工艺路线【" + routecode + "】未设置(或未设置全)或工价小于等于0!";
                            mes.data = null;
                            return mes;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.Message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[MES工单新增、编辑提交]
        public static ToMessage AddUpdateMesOrder(string mesorderstus, string sourceorder, string ordertype, string mesordercode, string partcode, string mesqty, string routecode, string wkshopcode, string planstartdate, string planenddate, string orderlev, string username, string opertype,string is_aps)
        public static ToMessage AddUpdateMesOrder(string mesorderstus, string sourceorder, string ordertype, string mesordercode, string partcode, string mesqty, string routecode, string wkshopcode, string planstartdate, string planenddate, string orderlev, string username, string opertype)
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
@@ -534,6 +677,25 @@
                            CreateDate = DateTime.Now.ToString()
                        }
                    });
                    //写入工单工艺路线工序工价复制表
                    sql = @"insert into TWoPrteEqp_Stad(wo,materiel_code,eqp_code,stand_value,opc_conver,route_code,unprice,eqp_value,cavity_qty,wkspcode,lm_user,lm_date,torg_code,is_delete,step_code)
                           select distinct @mesordercode as wo,S.materiel_code,S.eqp_code,S.stand_value,S.opc_conver,S.route_code,S.unprice,
                           S.eqp_value,S.cavity_qty,S.wkspcode,S.lm_user,S.lm_date,S.torg_code,S.is_delete,S.step_code
                           from TFlw_Rtdt A
                           inner join TFlw_Rteqp C on A.step_code=C.step_code
                           inner join (select *   from TPrteEqp_Stad  where materiel_code=@materiel_code and route_code=@routecode) as S on C.step_code=S.step_code and C.eqp_code=S.eqp_code";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            mesordercode = mesordercode,
                            materiel_code = partcode,
                            routecode = routecode
                        }
                    });
                    //if (is_aps == "Y")  //是否排程
                    //{
                    //    string sql1 = "select id from TBom_Main  where materiel_code='" + PartNumber + "' and status='Y' and version='" + VsionId + "'";
@@ -601,6 +763,35 @@
                            CreateDate = DateTime.Now.ToString()
                        }
                    });
                    //删除工单工艺路线工序工价复制表
                    sql = @"delete TWoPrteEqp_Stad where wo=@mesordercode";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            mesordercode = mesordercode
                        }
                    });
                    //写入工单工艺路线工序工价复制表
                    sql = @"insert into TWoPrteEqp_Stad(wo,materiel_code,eqp_code,stand_value,opc_conver,route_code,unprice,eqp_value,cavity_qty,wkspcode,lm_user,lm_date,torg_code,is_delete,step_code)
                           select distinct @mesordercode as wo,S.materiel_code,S.eqp_code,S.stand_value,S.opc_conver,S.route_code,S.unprice,
                           S.eqp_value,S.cavity_qty,S.wkspcode,S.lm_user,S.lm_date,S.torg_code,S.is_delete,S.step_code
                           from TFlw_Rtdt A
                           inner join TFlw_Rteqp C on A.step_code=C.step_code
                           inner join (select *   from TPrteEqp_Stad  where materiel_code=@materiel_code and route_code=@routecode) as S on C.step_code=S.step_code and C.eqp_code=S.eqp_code";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            mesordercode = mesordercode,
                            materiel_code = partcode,
                            routecode = routecode
                        }
                    });
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
@@ -638,7 +829,7 @@
            try
            {
                //判断工单是否为未开始状态或者已派发状态(满足其中一种都可删除,否则不允许删除)
                sql = @"select *  from TK_Wrk_Man where wo_code=@wocode and status='NEW' or status='ALLO'";
                sql = @"select *  from TK_Wrk_Man where wo_code=@wocode and status in('NEW','ALLO')";
                dynamicParams.Add("@wocode", wocode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                if (data.Rows.Count > 0)
@@ -759,8 +950,42 @@
                         left join TStep B on A.step_code=B.stepcode
                         left join TK_Wrk_Man M on A.wo_code=M.wo_code
                         left join TMateriel_Info P on M.materiel_code=P.partcode
                        where A.wo_code=@wo_code";
                        where A.wo_code=@wo_code order by A.seq";
                dynamicParams.Add("@wo_code", wo_code);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                mes.code = "200";
                mes.Message = "查询成功!";
                mes.data = data;
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.Message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[MES工单工序任务查看SOP,获取SOP文件下拉列表]
        public static ToMessage SearchWorkStepSopList(string partcode, string routecode,string stepcode)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                //获取SOP文件信息
                sql = @"select id,define_name,file_path   from TK_Sop_Matfile where materiel_code=@partcode and eqptype_code in(
                        select distinct T.code  from TMateriel_Route A
                        inner join TFlw_Rtdt B on A.route_code=B.rout_code
                        inner join TFlw_Rteqp E on B.step_code=E.step_code
                        inner join TEqpInfo  Q on E.eqp_code=Q.code
                        inner join TEqpType T on Q.eqptype_code=T.code
                        where A.materiel_code=@partcode and A.route_code=@routecode and B.step_code=@stepcode) order by file_version desc";
                dynamicParams.Add("@partcode", partcode);
                dynamicParams.Add("@routecode", routecode);
                dynamicParams.Add("@stepcode", stepcode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                mes.code = "200";
                mes.Message = "查询成功!";
@@ -2350,6 +2575,732 @@
        #endregion
        #region[生产管理,修改报工数据查询接口]
        public static ToMessage MesOrderStepVerifySearch(string verify, string wo_code, string partnumber, string partname, string partspec, string reportuser, string reportdateopendate, string reportdateclosedate, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (verify != "" && verify != null)
                {
                    search += "and AA.verify=@verify ";
                    dynamicParams.Add("@verify", verify);
                }
                if (wo_code != "" && wo_code != null)
                {
                    search += "and AA.wo_code like '%'+@wo_code+'%' ";
                    dynamicParams.Add("@wo_code", wo_code);
                }
                if (partnumber != "" && partnumber != null)
                {
                    search += "and AA.partnumber like '%'+@partnumber+'%' ";
                    dynamicParams.Add("@partnumber", partnumber);
                }
                if (partname != "" && partname != null)
                {
                    search += "and AA.partname like '%'+@partname+'%' ";
                    dynamicParams.Add("@partname", partname);
                }
                if (partspec != "" && partspec != null)
                {
                    search += "and AA.partspec like '%'+@partspec+'%' ";
                    dynamicParams.Add("@partspec", partspec);
                }
                if (reportuser != "" && reportuser != null)
                {
                    search += "and AA.usercode like '%'+@reportuser+'%' ";
                    dynamicParams.Add("@reportuser", reportuser);
                }
                if (reportdateopendate != "" && reportdateopendate != null)
                {
                    search += "and AA.report_date between @reportdateopendate and @reportdateclosedate ";
                    dynamicParams.Add("@reportdateopendate", reportdateopendate + " 00:00:00");
                    dynamicParams.Add("@reportdateclosedate", reportdateclosedate + " 23:59:59");
                }
                if (search == "")
                {
                    search = "and 1=1 ";
                }
                search = search.Substring(3);//截取索引2后面的字符
                // --------------查询指定自制报工外协收料数据--------------
                var total = 0; //总条数
                var sql = @"select *  from(
                            select A.id,B.id as sbid,A.wo_code,A.materiel_code as partnumber,P.partname,P.partspec,A.task_qty,M.wkshp_code,G.org_name as wkshp_name,A.eqp_code,E.name as eqp_name,
                            M.route_code,R.name as route_name,A.step_seq,A.step_code,S.stepname,S.flwtype,D.first_choke,D.last_choke,T.unprice,B.report_person as usercode,U.username,
                            B.report_date,B.report_qty,B.ng_qty,B.bad_qty,B.verify,B.bad_money
                            from TK_Wrk_Record A
                            inner join TK_Wrk_RecordSub B on A.id=B.m_id
                            left join TK_Wrk_Man M on A.wo_code=M.wo_code
                            left join TStep S on A.step_code=S.stepcode
                            left  join TWoPrteEqp_Stad T on A.wo_code=T.wo and A.materiel_code=T.materiel_code and A.eqp_code=T.eqp_code and A.step_code=T.step_code and M.route_code=T.route_code
                            left join TMateriel_Info P on A.materiel_code=P.partcode
                            left join TOrganization G on M.wkshp_code=G.org_code
                            left join TEqpInfo E on A.eqp_code=E.code
                            left join TFlw_Rout R on M.route_code=R.code
                            left join TFlw_Rtdt D on M.route_code=D.rout_code and A.step_code=D.step_code
                            left join TUser U on B.report_person=U.usercode
                            where A.style='B' and B.style='B' and M.status<>'CLOSED'
                            ) as AA where" + search;
                //union all
                //select A.id,A.wo_code,A.materiel_code as partnumber,P.partname,P.partspec,M.plan_qty as task_qty,M.wkshp_code,G.org_name as wkshp_name,A.wx_code as eqp_code,E.name as eqp_name,
                //M.route_code,R.name as route_name,A.step_code,S.stepname,S.flwtype,D.first_choke,D.last_choke,T.unprice,'' as usergroup_code,'' as usergroup_name,B.in_person as usercode,U.username,
                //B.in_time as report_date,B.sqty as report_qty,B.ng_qty,B.bad_qty
                //from TK_Wrk_OutRecord A
                //inner join TK_Wrk_OutRecordSub B on A.id = B.m_id
                //left join TK_Wrk_Man M on A.wo_code = M.wo_code
                //left join TStep S on A.step_code = S.stepcode
                //left join TPrteEqp_Stad T on A.materiel_code = T.materiel_code and M.route_code = T.route_code and A.step_code = T.step_code and A.wx_code = T.eqp_code
                //left join TMateriel_Info P on A.materiel_code = P.partcode
                //left join TOrganization G on M.wkshp_code = G.org_code
                //left join TCustomer E on A.wx_code = E.code and E.btype = 'WX'
                //left join TFlw_Rout R on M.route_code = R.code
                //left join TFlw_Rtdt D on M.route_code = D.rout_code and A.step_code = D.step_code
                //left join TUser U on B.in_person = U.usercode
                //where A.style = 'S' and B.style = 'S' and M.status<>'CLOSED'
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
                mes.Message = "查询成功!";
                mes.count = total;
                mes.data = data.ToList();
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.Message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[生产管理,修改报工数据提交]
        public static ToMessage MesOrderStepUpdateSeave(string username, List<UpdateProductReport> json)
        {
            var sql = "";
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            try
            {
                string date = DateTime.Now.ToString(); //获取系统时间
                list.Clear();
                //循环json数据
                for (int i = 0; i < json.Count; i++)
                {
                    //自制工序
                    if (json[i].flw_type.ToString() == "Z")
                    {
                        //是否首道
                        if (json[i].first_choke == "Y")
                        {
                            decimal this_reportqty = decimal.Parse(json[i].report_qty.ToString()); //报工数量(合格)
                            decimal this_ngqty = decimal.Parse(json[i].ng_qty.ToString()); //不良数量
                            decimal this_badqty = decimal.Parse(json[i].bad_qty.ToString()); //报废数量
                            //查询当前工序非此次报工:总报工数量、总不良数量、总报废数量
                            sql = @"select isnull(sum(good_qty),0) as good_qty,isnull(sum(ng_qty),0) as ng_qty,isnull(sum(bad_qty),0) as bad_qty
                                    from TK_Wrk_Record where wo_code=@wo_code and style='B' and id<>@id and step_code=@step_code";
                            dynamicParams.Add("@wo_code", json[i].wo_code);
                            dynamicParams.Add("@id", json[i].id);
                            dynamicParams.Add("@step_code", json[i].step_code);
                            var dt = DapperHelper.selectdata(sql, dynamicParams);
                            decimal notthis_reportqty = decimal.Parse(dt.Rows[0]["good_qty"].ToString());  //当前工序非本次报工总数
                            decimal notthis_ngqty = decimal.Parse(dt.Rows[0]["ng_qty"].ToString());  //当前工序非本次报工总数
                            decimal notthis_badqty = decimal.Parse(dt.Rows[0]["bad_qty"].ToString());  //当前工序非本次报工总数
                            //判断:当前工序报工记录:本次报工数量+本次不良数量+本次报废数量+当前工序非本次报工总数+当前工序非本次不良总数+当前工序非本次报废总数>工单任务数量
                            decimal updatereportsumqty = this_reportqty + this_ngqty + this_badqty + notthis_reportqty + notthis_ngqty + notthis_badqty;
                            if (updatereportsumqty > decimal.Parse(json[i].task_qty.ToString()))
                            {
                                mes.code = "300";
                                mes.count = 0;
                                mes.Message = "自制首道工序修改报工总数量:【" + updatereportsumqty + "】不能大于工单任务数量:【" + json[i].task_qty.ToString() + "】!";
                                mes.data = null;
                                return mes;
                            }
                            //查询当前工序下道工序:总报工数量、总不良数量、总报废数量
                            sql = @"select isnull(sum(good_qty),0) as good_qty,isnull(sum(ng_qty),0) as ng_qty,isnull(sum(bad_qty),0) as bad_qty
                                    from TK_Wrk_Record where wo_code=@wo_code and style='B'  and step_seq=@step_seq+1";
                            dynamicParams.Add("@wo_code", json[i].wo_code);
                            dynamicParams.Add("@step_seq", json[i].step_seq);
                            var dt0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (dt0.Rows.Count > 0)
                            {
                                //判断当前工序:报工总数数量+不良总数数量+报废总数数量<下道工序报工总数量+下道工序不良总数量+下道工序报废总数量
                                decimal last_reportqty = decimal.Parse(dt0.Rows[0]["good_qty"].ToString());  //下道工序报工总数量
                                decimal last_ngqty = decimal.Parse(dt0.Rows[0]["ng_qty"].ToString());  //下道工序不良总数量
                                decimal last_badqty = decimal.Parse(dt0.Rows[0]["bad_qty"].ToString());  //下道工序报废总数量
                                decimal last_updatereportsumqty = last_reportqty + last_ngqty + last_badqty;
                                if (updatereportsumqty < last_updatereportsumqty)
                                {
                                    mes.code = "300";
                                    mes.count = 0;
                                    mes.Message = "自制首道工序修改报工总数量:【" + updatereportsumqty + "】不能小于下道工序报工总数量:【" + last_updatereportsumqty + "】,请输入合法数值或先修改下道工序报工数量!";
                                    mes.data = null;
                                    return mes;
                                }
                            }
                        }
                        //是否末道
                       else if (json[i].last_choke == "Y")
                        {
                            decimal this_reportqty = decimal.Parse(json[i].report_qty.ToString()); //报工数量(合格)
                            decimal this_ngqty = decimal.Parse(json[i].ng_qty.ToString()); //不良数量
                            decimal this_badqty = decimal.Parse(json[i].bad_qty.ToString()); //报废数量
                            //查询当前末道工序非此次报工:总报工数量、总不良数量、总报废数量
                            sql = @"select isnull(sum(good_qty),0) as good_qty,isnull(sum(ng_qty),0) as ng_qty,isnull(sum(bad_qty),0) as bad_qty
                                    from TK_Wrk_Record where wo_code=@wo_code and style='B' and id<>@id and step_code=@step_code";
                            dynamicParams.Add("@wo_code", json[i].wo_code);
                            dynamicParams.Add("@id", json[i].id);
                            dynamicParams.Add("@step_code", json[i].step_code);
                            var dt = DapperHelper.selectdata(sql, dynamicParams);
                            decimal notthis_reportqty = decimal.Parse(dt.Rows[0]["good_qty"].ToString());  //当前末道工序非本次报工总数
                            decimal notthis_ngqty = decimal.Parse(dt.Rows[0]["ng_qty"].ToString());  //当前末道工序非本次报工总数
                            decimal notthis_badqty = decimal.Parse(dt.Rows[0]["bad_qty"].ToString());  //当前末道工序非本次报工总数
                            //获取当前末道工序报工总数量:本次修改报工数量+本次修改不良数量+本次修改报废数量+当前末道工序非本次报工总数+当前末道工序非本次不良总数+当前末道工序非本次报废总数
                            decimal updatereportsumqty = this_reportqty + this_ngqty + this_badqty + notthis_reportqty + notthis_ngqty + notthis_badqty;
                            //查询当前末道工序上道工序:总报工数量、总不良数量、总报废数量
                            sql = @"select isnull(sum(good_qty),0) as good_qty,isnull(sum(ng_qty),0) as ng_qty,isnull(sum(bad_qty),0) as bad_qty
                                    from TK_Wrk_Record where wo_code=@wo_code and style='B'  and step_seq=@step_seq-1";
                            dynamicParams.Add("@wo_code", json[i].wo_code);
                            dynamicParams.Add("@step_seq", json[i].step_seq);
                            var dt0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (dt0.Rows.Count > 0)
                            {
                                //判断:当前末道工序报工记录:当前末道工序报工总数(合格+不良+报废)>上道工序报工总数(合格+不良+报废)
                                decimal last_reportqty = decimal.Parse(dt0.Rows[0]["good_qty"].ToString());  //下道工序报工总数量
                                decimal last_ngqty = decimal.Parse(dt0.Rows[0]["ng_qty"].ToString());  //下道工序不良总数量
                                decimal last_badqty = decimal.Parse(dt0.Rows[0]["bad_qty"].ToString());  //下道工序报废总数量
                                decimal last_updatereportsumqty = last_reportqty + last_ngqty + last_badqty;
                                if (updatereportsumqty > last_updatereportsumqty)
                                {
                                    mes.code = "300";
                                    mes.count = 0;
                                    mes.Message = "自制末道工序修改报工总数量:【" + updatereportsumqty + "】不能大于上道工序报工总数量:【" + last_updatereportsumqty + "】,请输入合法数值或先修改上道工序报工数量!";
                                    mes.data = null;
                                    return mes;
                                }
                            }
                        }
                        else  //非首道非末道
                        {
                            decimal this_reportqty = decimal.Parse(json[i].report_qty.ToString()); //报工数量(合格)
                            decimal this_ngqty = decimal.Parse(json[i].ng_qty.ToString()); //不良数量
                            decimal this_badqty = decimal.Parse(json[i].bad_qty.ToString()); //报废数量
                            //查询当前工序非此次报工:总报工数量、总不良数量、总报废数量
                            sql = @"select isnull(sum(good_qty),0) as good_qty,isnull(sum(ng_qty),0) as ng_qty,isnull(sum(bad_qty),0) as bad_qty
                                    from TK_Wrk_Record where wo_code=@wo_code and style='B' and id<>@id and step_code=@step_code";
                            dynamicParams.Add("@wo_code", json[i].wo_code);
                            dynamicParams.Add("@id", json[i].id);
                            dynamicParams.Add("@step_code", json[i].step_code);
                            var dt = DapperHelper.selectdata(sql, dynamicParams);
                            decimal notthis_reportqty = decimal.Parse(dt.Rows[0]["good_qty"].ToString());  //当前工序非本次报工总数
                            decimal notthis_ngqty = decimal.Parse(dt.Rows[0]["ng_qty"].ToString());  //当前工序非本次报工总数
                            decimal notthis_badqty = decimal.Parse(dt.Rows[0]["bad_qty"].ToString());  //当前工序非本次报工总数
                            //获取当前末道工序报工总数量:本次修改报工数量+本次修改不良数量+本次修改报废数量+当前工序非本次报工总数+当前工序非本次不良总数+当前工序非本次报废总数
                            decimal updatereportsumqty = this_reportqty + this_ngqty + this_badqty + notthis_reportqty + notthis_ngqty + notthis_badqty;
                            //查询当前工序上道工序:总报工数量、总不良数量、总报废数量
                            sql = @"select isnull(sum(good_qty),0) as good_qty,isnull(sum(ng_qty),0) as ng_qty,isnull(sum(bad_qty),0) as bad_qty
                                    from TK_Wrk_Record where wo_code=@wo_code and style='B'  and step_seq=@step_seq-1";
                            dynamicParams.Add("@wo_code", json[i].wo_code);
                            dynamicParams.Add("@step_seq", json[i].step_seq);
                            var dt0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (dt0.Rows.Count > 0)
                            {
                                //判断:当前工序报工记录:当前工序报工总数(合格+不良+报废)>上道工序报工总数(合格+不良+报废)
                                decimal last_reportqty = decimal.Parse(dt0.Rows[0]["good_qty"].ToString());  //下道工序报工总数量
                                decimal last_ngqty = decimal.Parse(dt0.Rows[0]["ng_qty"].ToString());  //下道工序不良总数量
                                decimal last_badqty = decimal.Parse(dt0.Rows[0]["bad_qty"].ToString());  //下道工序报废总数量
                                decimal last_updatereportsumqty = last_reportqty + last_ngqty + last_badqty;
                                if (updatereportsumqty > last_updatereportsumqty)
                                {
                                    mes.code = "300";
                                    mes.count = 0;
                                    mes.Message = "自制工序修改报工总数量:【" + updatereportsumqty + "】不能大于上道工序报工总数量:【" + last_updatereportsumqty + "】,请输入合法数值或先修改上道工序报工数量!";
                                    mes.data = null;
                                    return mes;
                                }
                            }
                            //查询当前工序下道工序:总报工数量、总不良数量、总报废数量
                            sql = @"select isnull(sum(good_qty),0) as good_qty,isnull(sum(ng_qty),0) as ng_qty,isnull(sum(bad_qty),0) as bad_qty
                                    from TK_Wrk_Record where wo_code=@wo_code and style='B'  and step_seq=@step_seq+1";
                            dynamicParams.Add("@wo_code", json[i].wo_code);
                            dynamicParams.Add("@step_seq", json[i].step_seq);
                            var dt1 = DapperHelper.selectdata(sql, dynamicParams);
                            if (dt1.Rows.Count > 0)
                            {
                                //判断当前工序:报工总数数量+不良总数数量+报废总数数量<下道工序报工总数量+下道工序不良总数量+下道工序报废总数量
                                decimal last_reportqty = decimal.Parse(dt1.Rows[0]["good_qty"].ToString());  //下道工序报工总数量
                                decimal last_ngqty = decimal.Parse(dt1.Rows[0]["ng_qty"].ToString());  //下道工序不良总数量
                                decimal last_badqty = decimal.Parse(dt1.Rows[0]["bad_qty"].ToString());  //下道工序报废总数量
                                decimal last_updatereportsumqty = last_reportqty + last_ngqty + last_badqty;
                                if (updatereportsumqty < last_updatereportsumqty)
                                {
                                    mes.code = "300";
                                    mes.count = 0;
                                    mes.Message = "自制工序修改报工总数量:【" + updatereportsumqty + "】不能小于下道工序报工总数量:【" + last_updatereportsumqty + "】,请输入合法数值或先修改下道工序报工数量!";
                                    mes.data = null;
                                    return mes;
                                }
                            }
                        }
                        ///////////////////////////////修改报工//////////////////////////////
                        //回写对应的报工记录子表合格数量、不良数量、报废数量
                        sql = @"update TK_Wrk_RecordSub set report_qty=report_qty+@repair_qty,ng_qty=ng_qty+@ng_qty,bad_qty=bad_qty+@bad_qty,bad_money=bad_money+@bad_money,
                                updatereportuser=@updatereportuser,updatereportdate=@updatereportdate
                                where  m_id=@m_id and id=@id and style='B'";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                m_id = int.Parse(json[i].id),
                                id = int.Parse(json[i].sbid),
                                repair_qty = decimal.Parse(json[i].report_dvalue),
                                ng_qty = decimal.Parse(json[i].ng_dvalue),
                                bad_qty = decimal.Parse(json[i].bad_dvalue),
                                bad_money = decimal.Parse(json[i].badmoney_dvalue),
                                updatereportuser = username,
                                updatereportdate = date
                            }
                        });
                        //回写对应的报工记录主表合格数量、不良数量、报废数量
                        sql = @"update TK_Wrk_Record set good_qty=good_qty+@good_qty,ng_qty=ng_qty+@ng_qty,bad_qty=bad_qty+@bad_qty
                                    where wo_code=@wo_code and step_code=@step_code and id=@id and style='B'";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                good_qty = decimal.Parse(json[i].report_dvalue),
                                ng_qty = decimal.Parse(json[i].ng_dvalue),
                                bad_qty = decimal.Parse(json[i].bad_dvalue),
                                wo_code = json[i].wo_code,
                                step_code = json[i].step_code,
                                id = int.Parse(json[i].id)
                            }
                        });
                        //回写不良
                        sql = @"update CSR_WorkRecord_Defect set defect_qty=defect_qty+@ng_qty,updatereportuser=@updatereportuser,updatereportdate=@updatereportdate
                                    where wo_code=@wo_code and step_code=@step_code and record_id=@id and style='B'";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                ng_qty = decimal.Parse(json[i].ng_dvalue),
                                wo_code = json[i].wo_code,
                                step_code = json[i].step_code,
                                id = int.Parse(json[i].id),
                                updatereportuser = username,
                                updatereportdate = date
                            }
                        });
                    }
                    //外协工序
                    if (json[i].flw_type.ToString() == "S")
                    {
                    }
                }
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
                    mes.code = "200";
                    mes.count = 0;
                    mes.Message = "修改报工成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.Message = "修改报工失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.Message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[生产管理,修改报工审核提交]
        public static ToMessage MesOrderStepVerifySeave(string username, List<UpdateProductReport> json)
        {
            var sql = "";
            List<object> list = new List<object>();
            try
            {
                string date = DateTime.Now.ToString(); //获取系统时间
                list.Clear();
                //循环json数据
                for (int i = 0; i < json.Count; i++)
                {
                    ///////////////////////////////修改报工//////////////////////////////
                    //回写对应的报工记录子表审核状态、审核人、审核时间
                    sql = @"update TK_Wrk_RecordSub set verify=@verify,verifyuser=@verifyuser,verifydate=@verifydate
                                where  m_id=@m_id and id=@id and style='B'";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            m_id = int.Parse(json[i].id),
                            id = int.Parse(json[i].sbid),
                            verify="Y",
                            verifyuser = username,
                            verifydate = date
                        }
                    });
                    //回写不良
                    sql = @"update CSR_WorkRecord_Defect set verify=verify,verifyuser=@verifyuser,verifydate=@verifydate
                                    where wo_code=@wo_code and step_code=@step_code and record_id=@id and style='B'";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wo_code = json[i].wo_code,
                            step_code = json[i].step_code,
                            id = int.Parse(json[i].id),
                            verify="Y",
                            verifyuser = username,
                            verifydate = date
                        }
                    });
                    //写入报工记录审核表
                    sql = @"insert into  TK_WorkRecord_Verify(report_id,report_sbid,wo_code,partnumber,task_qty,wkshp_code,eqp_code,route_code,
                            step_seq,step_code,flw_type,first_choke,last_choke,unprice,usergroup_code,usercode,report_date,report_qty,report_dvalue,ng_qty,ng_dvalue,bad_qty,bad_dvalue,bad_money,badmoney_dvalue)
                            values(@report_id,@report_sbid,@wo_code,@partnumber,@task_qty,@wkshp_code,@eqp_code,@route_code,
                            @step_seq,@step_code,@flw_type,@first_choke,@last_choke,@unprice,@usergroup_code,@usercode,@report_date,@report_qty,@report_dvalue,@ng_qty,@ng_dvalue,@bad_qty,@bad_dvalue,@bad_money,@badmoney_dvalue)";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            report_id=json[i].id.ToString(),
                            report_sbid=json[i].sbid.ToString(),
                            wo_code=json[i].wo_code.ToString(),
                            partnumber=json[i].partnumber.ToString(),
                            task_qty=json[i].task_qty.ToString(),
                            wkshp_code=json[i].wkshp_code.ToString(),
                            eqp_code=json[i].eqp_code.ToString(),
                            route_code=json[i].route_code.ToString(),
                            step_seq=json[i].step_seq.ToString(),
                            step_code=json[i].step_code.ToString(),
                            flw_type=json[i].flw_type.ToString(),
                            first_choke=json[i].first_choke.ToString(),
                            last_choke=json[i].last_choke.ToString(),
                            unprice=json[i].unprice.ToString(),
                            usergroup_code="",
                            usercode=json[i].usercode.ToString(),
                            report_date=json[i].report_date.ToString(),
                            report_qty=json[i].report_qty.ToString(),
                            report_dvalue=json[i].report_dvalue.ToString(),
                            ng_qty=json[i].ng_qty.ToString(),
                            ng_dvalue=json[i].ng_dvalue.ToString(),
                            bad_qty=json[i].bad_qty.ToString(),
                            bad_dvalue=json[i].bad_dvalue.ToString(),
                            bad_money=json[i].bad_money.ToString(),
                            badmoney_dvalue= json[i].badmoney_dvalue.ToString()
                        }
                    });
                }
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
                    mes.code = "200";
                    mes.count = 0;
                    mes.Message = "审核报工成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.Message = "审核报工失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.Message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[生产管理,修改报工反审核提交]
        public static ToMessage MesOrderStepNoVerifySeave(string username, List<UpdateProductReport> json)
        {
            var sql = "";
            List<object> list = new List<object>();
            try
            {
                string date = DateTime.Now.ToString(); //获取系统时间
                list.Clear();
                //循环json数据
                for (int i = 0; i < json.Count; i++)
                {
                    ///////////////////////////////修改报工//////////////////////////////
                    //回写对应的报工记录子表审核状态、审核人、审核时间
                    sql = @"update TK_Wrk_RecordSub set verify=@verify,verifyuser=@verifyuser,verifydate=@verifydate
                                where  m_id=@m_id and id=@id and style='B'";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            m_id = int.Parse(json[i].id),
                            id = int.Parse(json[i].sbid),
                            verify = "N",
                            verifyuser = "",
                            verifydate = ""
                        }
                    });
                    //回写不良
                    sql = @"update CSR_WorkRecord_Defect set verify=verify,verifyuser=@verifyuser,verifydate=@verifydate
                                    where wo_code=@wo_code and step_code=@step_code and record_id=@id and style='B'";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wo_code = json[i].wo_code,
                            step_code = json[i].step_code,
                            id = int.Parse(json[i].id),
                            verify = "N",
                            verifyuser = "",
                            verifydate = ""
                        }
                    });
                    //删除报工记录审核表
                    sql = @"delete from TK_WorkRecord_Verify where wo_code=@wo_code and report_id=@report_id and report_sbid=@report_sbid and step_seq=@step_seq and step_code=@step_code";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            report_id = json[i].id.ToString(),
                            report_sbid = json[i].sbid.ToString(),
                            wo_code = json[i].wo_code.ToString(),
                            step_seq = json[i].step_seq.ToString(),
                            step_code = json[i].step_code.ToString()
                        }
                    });
                }
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
                    mes.code = "200";
                    mes.count = 0;
                    mes.Message = "反审核报工成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.Message = "反审核报工失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.Message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[生产管理,删除报工记录]
        public static ToMessage MesOrderStepDeleteSeave(string username, List<UpdateProductReport> json)
        {
            var sql = "";
            string[] arra1 = new string[] { };
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            try
            {
                string date = DateTime.Now.ToString(); //获取系统时间
                list.Clear();
                //循环json数据
                for (int i = 0; i < json.Count; i++)
                {
                    //自制工序
                    if (json[i].flw_type.ToString() == "Z")
                    {
                        //判断当前工序是否存在下道工序开工记录
                        sql = @"select * from TK_Wrk_Record where wo_code=@wo_code and style='S'  and step_seq=@step_seq+1";
                        dynamicParams.Add("@wo_code", json[i].wo_code);
                        dynamicParams.Add("@step_seq", json[i].step_seq);
                        var dt0 = DapperHelper.selectdata(sql, dynamicParams);
                        if (dt0.Rows.Count > 0)
                        {
                            //判断当前工序是否存在下道工序报工记录
                            sql = @"select * from TK_Wrk_Record where wo_code=@wo_code and style='B'  and step_seq=@step_seq+1";
                            dynamicParams.Add("@wo_code", json[i].wo_code);
                            dynamicParams.Add("@step_seq", json[i].step_seq);
                            var dt = DapperHelper.selectdata(sql, dynamicParams);
                            if (dt.Rows.Count > 0)
                            {
                                mes.code = "300";
                                mes.count = 0;
                                mes.Message = "当前工序下道工序已报工不允许删除!";
                                mes.data = null;
                                return mes;
                            }
                        }
                        ///////////////////////////////删除报工//////////////////////////////
                        //删除下道工序开工记录(主要处理下道工序已开工未报工)
                        sql = @"delete from TK_Wrk_Record where  wo_code=@wo_code and step_seq=@step_seq+1 and style=@style";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                wo_code=json[i].wo_code.ToString(),
                                step_seq=json[i].step_seq.ToString(),
                                style = "S"
                            }
                        });
                        //删除报工缺陷记录表
                        sql = @"delete from CSR_WorkRecord_Defect where  wo_code=@wo_code and partnumber=@partnumber and step_seq=@step_seq and step_code=@step_code and record_id=@record_id and style=@style ";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                wo_code=json[i].wo_code.ToString(),
                                partnumber = json[i].partnumber.ToString(),
                                step_seq = json[i].step_seq.ToString(),
                                step_code = json[i].step_code.ToString(),
                                record_id = int.Parse(json[i].id),
                                style = "B"
                            }
                        });
                        //删除报工缺陷处理记录表
                        sql = @"delete from CSR_WorkRecord_DefectHandle where  wo_code=@wo_code and partnumber=@partnumber and step_seq=@step_seq and step_code=@step_code and record_subid=@record_subid and style=@style";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                wo_code = json[i].wo_code.ToString(),
                                partnumber = json[i].partnumber.ToString(),
                                step_seq = json[i].step_seq.ToString(),
                                step_code = json[i].step_code.ToString(),
                                record_subid = int.Parse(json[i].id),
                                style = "B"
                            }
                        });
                        //删除报工记录子表
                        sql = @"delete from TK_Wrk_RecordSub where  id=@id and m_id=@m_id and style=@style";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                id = int.Parse(json[i].id),
                                m_id = int.Parse(json[i].sbid),
                                style = "B"
                            }
                        });
                        //删除报工记录主表
                        sql = @"delete from TK_Wrk_Record where  id=@id and style=@style";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                id = int.Parse(json[i].id),
                                m_id = int.Parse(json[i].sbid),
                                style = "B"
                            }
                        });
                        //回写工单工序表(合格数量、不良数量、报废数量)
                        sql = @"update  TK_Wrk_Step set good_qty=good_qty-@report_qty,ng_qty=ng_qty-@ng_qty,bad_qty=bad_qty-@bad_qty where  wo_code=@wo_code and seq=@step_seq and step_code=@step_code";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                wo_code=json[i].wo_code.ToString(),
                                step_seq=json[i].step_seq.ToString(),
                                step_code=json[i].step_code.ToString(),
                                report_qty = decimal.Parse(json[i].report_qty),
                                ng_qty = decimal.Parse(json[i].ng_qty),
                                bad_qty = decimal.Parse(json[i].bad_qty),
                            }
                        });
                    }
                    //外协工序
                    if (json[i].flw_type.ToString() == "S")
                    {
                    }
                }
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
                    mes.code = "200";
                    mes.count = 0;
                    mes.Message = "删除报工成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.Message = "删除报工失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.Message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[MES工单批量关闭查询]
        public static ToMessage MesOrderBitchClosedSearch(string mesorderstus, string mesordercode, string sourceorder, string ordertype, string partcode, string partname, string partspec, int startNum, string creatuser, string createdate, int endNum, string prop, string order)
        {
@@ -2623,14 +3574,14 @@
            {
                if (type == "Add")
                {
                    var sql = @"insert into TWkm_capac_plan(wkshop, eqp_typecode, wkshift_code, enable, lm_user, lm_time,classtype)
                            values(@wkshop,@eqp_typecode,@wkshift_code,@enable,@lm_user,@lm_time,@classtype)";
                    var sql = @"insert into TWkm_capac_plan(wkshop, eqp_typecode, wkshift_code, enable, lm_user, lm_date,classtype)
                            values(@wkshop,@eqp_typecode,@wkshift_code,@enable,@lm_user,@lm_date,@classtype)";
                    dynamicParams.Add("@wkshop", wkshopcode);
                    dynamicParams.Add("@eqp_typecode", capunitcode);
                    dynamicParams.Add("@wkshift_code", capsetupcode);
                    dynamicParams.Add("@enable", "Y");
                    dynamicParams.Add("@lm_user", username);
                    dynamicParams.Add("@lm_time", DateTime.Now.ToString());
                    dynamicParams.Add("@lm_date", DateTime.Now.ToString());
                    dynamicParams.Add("@classtype", captplantype);
                    int cont = DapperHelper.SQL(sql, dynamicParams);
                    if (cont > 0)
@@ -2694,10 +3645,10 @@
                sql = @"select CONVERT(varchar(100), wkdate, 23) DataTime,wkshift_code   from TWkm_capac_plan_sub where m_id=@captplanid";
                dynamicParams.Add("@captplanid", captplanid);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                for (int i = 0; i < dt.Rows.Count; i++)
                for (int i = 0; i < data.Rows.Count; i++)
                {
                    string DataTime = dt.Rows[i]["DataTime"].ToString();//日期
                    string key = dt.Rows[i]["wkshift_code"].ToString(); //方案编码
                    string DataTime = data.Rows[i]["DataTime"].ToString();//日期
                    string key = data.Rows[i]["wkshift_code"].ToString(); //方案编码
                    CapaPlan cmp = new CapaPlan();
                    cmp.name = DataTime;
                    cmp.key = key;
@@ -2735,11 +3686,11 @@
                dynamicParams.Add("@captplanid", captplanid);
                dynamicParams.Add("@datetime", datetime);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                for (int i = 0; i < dt.Rows.Count; i++)
                for (int i = 0; i < data.Rows.Count; i++)
                {
                    string code = dt.Rows[i]["code"].ToString();//方案编码
                    string name = dt.Rows[i]["name"].ToString();//方案名称
                    string flag = dt.Rows[i]["flag"].ToString();   //选中方案标识
                    string code = data.Rows[i]["code"].ToString();//方案编码
                    string name = data.Rows[i]["name"].ToString();//方案名称
                    string flag = data.Rows[i]["flag"].ToString();   //选中方案标识
                    CapacityPlanSect cmp = new CapacityPlanSect();
                    cmp.CapCode = code;
                    cmp.CapName = name;
@@ -2748,7 +3699,7 @@
                    string sql1 = @"select wktme1_start,wktme2_start,wktme3_start,wktme4_start,wktme5_start  from TBas_wkshift_info where code=@code";
                    dynamicParams.Add("@code", code);
                    var db = DapperHelper.selectdata(sql, dynamicParams);
                    var db = DapperHelper.selectdata(sql1, dynamicParams);
                    for (int j = 0; j < db.Columns.Count; j++) //时间段
                    {
@@ -2862,11 +3813,10 @@
                    List<CapaPlan> list4 = ids1.Except(ids).ToList(); //表示ids1中哪些值是ids中所不存在的;
                    list4 = list3.Union(list4).ToList();
                    //查找关键工序设备、工位群组的所有设备
                    string sql3 = @"select *  from(
                                  select distinct A.code,A.name  from TEqpInfo A
                    string sql3 = @"select distinct A.code,A.name  from TEqpInfo A
                                  left join TFlw_Rteqp B on A.code=B.eqp_code
                                  left join TFlw_Rtdt D on B.step_code=D.step_code                 
                                  where A.wksp_code=@wkshopcode  and D.first_choke='Y'  order by A.code)";
                                  where A.wksp_code=@wkshopcode  and D.first_choke='Y'  order by A.code";
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                    var dt3 = DapperHelper.selectdata(sql3, dynamicParams);
                    if (list4.Count > 0)  //如果日期有变动
@@ -2902,7 +3852,7 @@
                        }
                    }
                    //更新排产生产资源主表
                    sql = @"update gn_wkm_capac_plan set wkshift_code=@wkshift_code,classtype=@classtype,lm_user=@lm_user,lm_time=@lm_time  where id=@id";
                    sql = @"update TWkm_capac_plan set wkshift_code=@wkshift_code,classtype=@classtype,lm_user=@lm_user,lm_date=@lm_time  where id=@id";
                    list.Add(new
                    {
                        str = sql,
@@ -2928,7 +3878,7 @@
                    //循环写入排产生产资源子表
                    for (int i = 0; i < objs.Count; i++)
                    {
                        sql = @"insert into TWkm_capac_plan_sub(m_id,wkdate,wkshift_code) values()";
                        sql = @"insert into TWkm_capac_plan_sub(m_id,wkdate,wkshift_code) values(@m_id,@wkdate,@wkshift_code)";
                        list.Add(new
                        {
                            str = sql,