yl
2024-09-05 c43a4dfbc7a80d6be6e9823cdd0e182898fc2562
VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
@@ -24,6 +24,7 @@
        public static string strProcName = ""; //定义全局sql变量
        public static List<SqlParameter> listStr = new List<SqlParameter>(); //定义全局参数集合
        public static SqlParameter[] parameters; //定义全局SqlParameter参数数组
        public static string sqlServerConnectString = AppSetting.GetAppSetting("DBServer");
        #region[ERP订单查询]
@@ -625,7 +626,8 @@
                // --------------查询指定数据--------------
                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.route_code,R.name as route_name,A.plan_qty,A.wkshp_code,C.torg_name as wkshp_name,
                            A.stck_code,D.name as stck_name,A.plan_startdate,A.plan_enddate,A.piroque,A.sourceid,A.m_po,A.saleOrderDeliveryDate,W.saleOrderCode,U.username as lm_user,A.lm_date,A.data_sources,A.isstep,A.clerkuser
                            A.stck_code,D.name as stck_name,A.plan_startdate,A.plan_enddate,A.piroque,A.sourceid,A.m_po,A.saleOrderDeliveryDate,W.saleOrderCode,U.username as lm_user,A.lm_date,
                            A.data_sources,A.isstep,A.clerkuser,A.bom_id,M.version
                            from TK_Wrk_Man A
                            left join TKimp_Ewo W on A.m_po=W.wo and A.materiel_code=W.materiel_code and A.sbid=W.sbid
                            left join TMateriel_Info B on A.materiel_code=B.partcode
@@ -634,6 +636,7 @@
                            left join TUser U on A.lm_user=U.usercode 
                            left join TOrganization L on  C.parent_id=L.id
                            left join TFlw_Rout R on A.route_code=R.code
                            left join TBom_Main M on A.bom_id=M.id
                            where A.is_delete<>'1' " + search;
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
@@ -808,7 +811,7 @@
                    }
                }
                //获取工序信息
                sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
                sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
                        S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty,(isnull(S.plan_qty,0)-(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0))) as delive_qty,S.isbott,S.isend 
                        from TK_Wrk_Step S
                        left join TStep  T on S.step_code=T.stepcode
@@ -821,7 +824,7 @@
                    if (parents[i].flwtype == "Z")
                    {
                        //通过工艺路线工序表ID查找对应设备信息
                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                from TK_Wrk_StepEqp S
@@ -834,7 +837,7 @@
                    else
                    {
                        //通过工艺路线工序表ID查找对应外协供应商信息
                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                from TK_Wrk_StepEqp S
@@ -866,215 +869,19 @@
        }
        #endregion
        #region[MES工单新增、编辑提交]
        public static ToMessage AddUpdateMesOrder(string operType, WorkList json, User us)
        #region[MES工单新增编辑时,根据产品获取Bom物料清单]
        public static ToMessage MesOrderAddUpdateBomVison(string partnumber)
        {
            string sql = "", route_code = "";
            string sql = "";
            var dynamicParams = new DynamicParameters();
            List<object> list = new List<object>();
            try
            {
                dynamic dynObj = JObject.Parse(us.mesSetting);
                bool route = dynObj.route;
                if (route) //工艺路线版
                {
                    route_code = json.routecode;
                }
                else //工序版
                {
                    route_code = null;
                }
                if (operType == "Add")
                {
                    //写入工单表
                    sql = @"insert into TK_Wrk_Man(wo_code,wotype,status,wkshp_code,plan_qty,lm_user,lm_date,materiel_code,route_code,sourceid,m_po,saleOrderDeliveryDate,plan_startdate,plan_enddate,piroque,isaps,data_sources,isstep)
                                values(@wo_code,@wotype,@status,@wkshp_code,@plan_qty,@lm_user,@lm_date,@materiel_code,@route_code,@sourceid,@m_po,@saleOrderDeliveryDate,@plan_startdate,@plan_enddate,@orderlev,@isaps,@data_sources,@isstep)";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wo_code = json.wocode,
                            wotype = json.wotype,
                            status = json.wostatus,
                            wkshp_code = json.wkshopcode,
                            plan_qty = json.woqty,
                            lm_user = us.usercode,
                            lm_date = DateTime.Now.ToString(),
                            materiel_code = json.partcode,
                            route_code = route_code,
                            sourceid = json.sourceid == "" ? null : json.sourceid, //无源单时赋值NULL
                            m_po = json.sourcewo,
                            saleOrderDeliveryDate = json.deliverydate,
                            plan_startdate = json.paystartdate,
                            plan_enddate = json.payenddate,
                            orderlev = "3",//优先级:特级(1) 紧急(2) 正常(3)
                            isaps = "N", //是否排产,默认N  Y=是   N=否
                            data_sources = json.data_sources,
                            isstep = json.isstep  //是否关联工序
                        }
                    });
                    //写入工序任务表
                    for (int i = 0; i < json.WorkListSub.Count; i++)
                    {
                        sql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
                                values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date)";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                wo_code = json.wocode,
                                seq = json.WorkListSub[i].stepseq,
                                step_code = json.WorkListSub[i].stepcode,
                                route_code = route_code,
                                stepprice = json.WorkListSub[i].stepprice,
                                plan_qty = json.woqty,
                                status = json.wostatus,
                                isbott = json.WorkListSub[i].isbott,
                                isend = json.WorkListSub[i].isend,
                                lm_user = us.usercode,
                                lm_date = DateTime.Now.ToString()
                            }
                        });
                    }
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了工单:" + json.wocode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "MES工单新建成功!";
                        mes.data = null;
                    }
                    else
                    {
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = "MES工单新建失败!";
                        mes.data = null;
                    }
                }
                if (operType == "Update")
                {
                    //修改工单表
                    sql = @"update TK_Wrk_Man set wotype=@wotype,wkshp_code=@wkshp_code,plan_qty=@plan_qty,lm_user=@lm_user,lm_date=@lm_date,
                            materiel_code=@materiel_code,route_code=@route_code,sourceid=@sourceid,m_po=@m_po,saleOrderDeliveryDate=@saleOrderDeliveryDate,plan_startdate=@plan_startdate,plan_enddate=@plan_enddate,isstep=@isstep
                            where wo_code=@wo_code";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wo_code = json.wocode,
                            wotype = json.wotype,
                            wkshp_code = json.wkshopcode,
                            plan_qty = json.woqty,
                            materiel_code = json.partcode,
                            route_code = route_code,
                            sourceid = json.sourceid == "" ? null : json.sourceid, //无源单时赋值NULL
                            m_po = json.sourcewo,
                            saleOrderDeliveryDate = json.deliverydate,
                            plan_startdate = json.paystartdate,
                            plan_enddate = json.payenddate,
                            lm_user = us.usercode,
                            lm_date = DateTime.Now.ToString(),
                            isstep = json.isstep  //是否关联工序
                        }
                    });
                    //删除工单工序表
                    sql = @"delete TK_Wrk_Step where wo_code=@wo_code";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wo_code = json.wocode
                        }
                    });
                    //写入工单工序表
                    for (int i = 0; i < json.WorkListSub.Count; i++)
                    {
                        sql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
                                values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date)";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                wo_code = json.wocode,
                                seq = json.WorkListSub[i].stepseq,
                                step_code = json.WorkListSub[i].stepcode,
                                route_code = route_code,
                                stepprice = json.WorkListSub[i].stepprice,
                                plan_qty = json.woqty,
                                status = json.wostatus,
                                isbott = json.WorkListSub[i].isbott,
                                isend = json.WorkListSub[i].isend,
                                lm_user = us.usercode,
                                lm_date = DateTime.Now.ToString()
                            }
                        });
                    }
                    //判断源头单据是否来源ERP
                    if (json.data_sources == "ERP")
                    {
                        //判断工单修改数量差值是否为0
                        if (json.difference != "0")
                        {
                            string staus = "";
                            //查询订单总数,已下达数量
                            sql = @"select qty,relse_qty  from TKimp_Ewo where id=@sourceid and wo=@sourcewo";
                            dynamicParams.Add("@sourceid", json.sourceid);
                            dynamicParams.Add("@sourcewo", json.sourcewo);
                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
                            //当前工单可修改数量=订单数量-非当前工单总下达工单数量
                            decimal qty = decimal.Parse(data0.Rows[0]["qty"].ToString());//订单总数
                            decimal relse_qty = decimal.Parse(data0.Rows[0]["relse_qty"].ToString());//订单已下达总数
                            relse_qty = relse_qty + decimal.Parse(json.difference);//新的下达数量=原始下达数量+差值(正负)
                            if (qty == relse_qty)
                            {
                                staus = "CREATED"; //全部下达
                            }
                            else
                            {
                                staus = "CREATING";//部分下达
                            }
                            //更新订单表状态、已下达数量
                            sql = @"update TKimp_Ewo set status=@status,relse_qty=@relse_qty where id=@sourceid and wo=@sourcewo";
                            list.Add(new
                            {
                                str = sql,
                                parm = new
                                {
                                    status = staus,
                                    relse_qty = relse_qty,
                                    sourceid = json.sourceid,
                                    sourcewo = json.sourcewo
                                }
                            });
                        }
                    }
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了工单:" + json.wocode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "修改操作成功!";
                        mes.data = null;
                    }
                    else
                    {
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = "修改操作失败!";
                        mes.data = null;
                    }
                }
                sql = @" select id,version  from TBom_Main where materiel_code=@partnumber and status='Y' order by version desc ";
                dynamicParams.Add("@partnumber", partnumber);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                mes.code = "200";
                mes.message = "查询成功!";
                mes.data = data;
            }
            catch (Exception e)
            {
@@ -1082,6 +889,291 @@
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[MES工单新增、编辑提交]
        public static ToMessage AddUpdateMesOrder(string operType, WorkList json, User us)
        {
            string sql = "", route_code = "";
            var dynamicParams = new DynamicParameters();
            List<object> list = new List<object>();
            using (var conn = new SqlConnection(sqlServerConnectString))
            {
                conn.Open();
                using (var transaction = conn.BeginTransaction())
                {
                    try
                    {
                        dynamic dynObj = JObject.Parse(us.mesSetting);
                        bool route = dynObj.route;
                        if (route) //工艺路线版
                        {
                            route_code = json.routecode;
                        }
                        else //工序版
                        {
                            route_code = null;
                        }
                        if (operType == "Add")
                        {
                            // 假设你已经有了插入主表和子表的SQL语句
                            //写入工单表
                            string workSql = @"insert into TK_Wrk_Man(wo_code,wotype,status,wkshp_code,plan_qty,lm_user,lm_date,materiel_code,route_code,sourceid,m_po,saleOrderDeliveryDate,plan_startdate,plan_enddate,piroque,isaps,data_sources,isstep,bom_id)
                                values(@wo_code,@wotype,@status,@wkshp_code,@plan_qty,@lm_user,@lm_date,@materiel_code,@route_code,@sourceid,@m_po,@saleOrderDeliveryDate,@plan_startdate,@plan_enddate,@orderlev,@isaps,@data_sources,@isstep,@bom_id)";
                            //写入工单工序表
                            string masterInsertSql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
                                values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
                            //写入工单工序设备表
                            string detailInsertSql = @"insert into TK_Wrk_StepEqp(m_id,eqp_code,eqpprice)
                            values(@m_id,@eqp_code,@eqpprice)";
                            //写入工单用料表
                            string workall = @"insert into TK_Wrk_Allo(wo_code,seq,materiel_code,qty,status,bom_id,stck_code,stopfeed,base_quantity,total_quantity,m_quantity,loss_quantity)
                            select @wocode,A.seq,A.materiel_code,(convert(decimal(18, 0), @woqty)*A.Base_Quantity*(1+A.LOSS_QUANTITY/100))/C.quantity,
                            'NEW',A.m_id,'','N',A.base_quantity,A.total_quantity,C.quantity,A.loss_quantity
                            from TBom_Deta A
                            left join  TBom_Main C on A.m_Id=C.id
                            left join TMateriel_Info B on A.materiel_code = B.partcode
                            where A.m_id=@bom_id";
                            // 插入工单表
                            var workParam = new DynamicParameters();
                            workParam.Add("@wo_code", json.wocode);
                            workParam.Add("@wotype", json.wotype);
                            workParam.Add("@status", json.wostatus);
                            workParam.Add("@wkshp_code", json.wkshopcode);
                            workParam.Add("@plan_qty", json.woqty);
                            workParam.Add("@lm_user", us.usercode);
                            workParam.Add("@lm_date", DateTime.Now.ToString());
                            workParam.Add("@materiel_code", json.partcode);
                            workParam.Add("@route_code", route_code);
                            workParam.Add("@sourceid", json.sourceid == "" ? null : json.sourceid);
                            workParam.Add("@m_po", json.sourcewo);
                            workParam.Add("@saleOrderDeliveryDate", json.deliverydate);
                            workParam.Add("@plan_startdate", json.paystartdate);
                            workParam.Add("@plan_enddate", json.payenddate);
                            workParam.Add("@orderlev", "3");//优先级:特级(1) 紧急(2) 正常(3)
                            workParam.Add("@isaps", "N");//是否排产,默认N  Y=是   N=否
                            workParam.Add("@data_sources", json.data_sources);
                            workParam.Add("@isstep", json.isstep);//是否关联工序
                            workParam.Add("@bom_id", string.IsNullOrEmpty(json.bomid) ? null : json.bomid);// 物料请单Bomid
                            conn.Execute(workSql, workParam, transaction);
                            //写入工单工序表
                            for (int i = 0; i < json.WorkListSub.Count; i++)
                            {
                                // 插入主表并获取新插入的ID
                                var masterParam = new DynamicParameters();
                                masterParam.Add("@wo_code", json.wocode);
                                masterParam.Add("@seq", json.WorkListSub[i].stepseq);
                                masterParam.Add("@step_code", json.WorkListSub[i].stepcode);
                                masterParam.Add("@route_code", route_code);
                                masterParam.Add("@stepprice", json.WorkListSub[i].unprice);
                                masterParam.Add("@plan_qty", json.woqty);
                                masterParam.Add("@status", json.wostatus);
                                masterParam.Add("@isbott", json.WorkListSub[i].isbott);
                                masterParam.Add("@isend", json.WorkListSub[i].isend);
                                masterParam.Add("@lm_user", us.usercode);
                                masterParam.Add("@lm_date", DateTime.Now.ToString());
                                int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
                                // 写入工序任务表
                                foreach (var detail in json.WorkListSub[i].WorkEqpListSub)
                                {
                                    var detailParam = new DynamicParameters();
                                    detailParam.Add("@m_id", masterId);
                                    detailParam.Add("@eqp_code", detail.eqpcode);
                                    detailParam.Add("@eqpprice", detail.unprice);
                                    conn.Execute(detailInsertSql, detailParam, transaction);
                                }
                            }
                            //写入工单用料表(子件)
                            if (json.bomid != "" && json != null)
                            {
                                var workallParam = new DynamicParameters();
                                workallParam.Add("@wocode", json.wocode);
                                workallParam.Add("@woqty", json.woqty);
                                workallParam.Add("@bom_id", json.bomid);
                                conn.Execute(workall, workallParam, transaction);
                            }
                            // 所有插入成功,提交事务
                            transaction.Commit();
                            mes.code = "200";
                            mes.count = 0;
                            mes.message = "MES工单新建成功!";
                            mes.data = null;
                            //写入操作记录表
                            LogHelper.DbOperateLog(us.usercode, "新增", "新增了工单:" + json.wocode, us.usertype);
                        }
                        if (operType == "Update")
                        {
                            //通过工单查找工序任务
                            sql = @"select *  from TK_Wrk_Step where wo_code=@wo_code";
                            dynamicParams.Add("@wo_code", json.wocode);
                            var data = DapperHelper.selectdata(sql, dynamicParams);
                            // 假设你已经有了插入主表和子表的SQL语句
                            //修改工单表
                            string workSql = @"update TK_Wrk_Man set wotype=@wotype,wkshp_code=@wkshp_code,plan_qty=@plan_qty,lm_user=@lm_user,lm_date=@lm_date,
                            materiel_code=@materiel_code,route_code=@route_code,sourceid=@sourceid,m_po=@m_po,saleOrderDeliveryDate=@saleOrderDeliveryDate,plan_startdate=@plan_startdate,plan_enddate=@plan_enddate,isstep=@isstep,bom_id=@bom_id
                            where wo_code=@wo_code";
                            //删除工单工序设备表
                            string deleteWrkStepEqp = @"delete TK_Wrk_StepEqp where m_id=@m_id";
                            //删除工单工序表
                            string deleteWrkStep = @"delete TK_Wrk_Step where wo_code=@wo_code";
                            //删除工单用料表
                            string deleteWrkALL = @"delete TK_Wrk_Allo where wo_code=@wo_code";
                            //写入工单工序表
                            string masterInsertSql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
                                values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
                            //写入工单工序设备表
                            string detailInsertSql = @"insert into TK_Wrk_StepEqp(m_id,eqp_code,eqpprice)
                            values(@m_id,@eqp_code,@eqpprice)";
                            //写入工单用料表
                            string InsertWorkALL = @"insert into TK_Wrk_Allo(wo_code,seq,materiel_code,qty,status,bom_id,stck_code,stopfeed,base_quantity,total_quantity,m_quantity,loss_quantity)
                            select @wocode,A.seq,A.materiel_code,(convert(decimal(18, 0), @woqty)*A.Base_Quantity*(1+A.LOSS_QUANTITY/100))/C.quantity,
                            'NEW',A.m_id,'','N',A.base_quantity,A.total_quantity,C.quantity,A.loss_quantity
                            from TBom_Deta A
                            left join  TBom_Main C on A.m_Id=C.id
                            left join TMateriel_Info B on A.materiel_code = B.partcode
                            where A.m_id=@bom_id";
                            //修改生产订单表状态、已下达数量
                            string EwoStatusSql = @"update TKimp_Ewo set status=@status,relse_qty=@relse_qty where id=@sourceid and wo=@sourcewo";
                            // 修改工单表
                            var workParam = new DynamicParameters();
                            workParam.Add("@wo_code", json.wocode);
                            workParam.Add("@wotype", json.wotype);
                            workParam.Add("@wkshp_code", json.wkshopcode);
                            workParam.Add("@plan_qty", json.woqty);
                            workParam.Add("@lm_user", us.usercode);
                            workParam.Add("@lm_date", DateTime.Now.ToString());
                            workParam.Add("@materiel_code", json.partcode);
                            workParam.Add("@route_code", route_code);
                            workParam.Add("@sourceid", json.sourceid == "" ? null : json.sourceid);
                            workParam.Add("@m_po", json.sourcewo);
                            workParam.Add("@saleOrderDeliveryDate", json.deliverydate);
                            workParam.Add("@plan_startdate", json.paystartdate);
                            workParam.Add("@plan_enddate", json.payenddate);
                            workParam.Add("@isstep", json.isstep);//是否关联工序
                            workParam.Add("@bom_id", string.IsNullOrEmpty(json.bomid) ? null : json.bomid);//物料清单BOMid
                            conn.Execute(workSql, workParam, transaction);
                            //删除工单工序设备表
                            for (int i = 0; i < data.Rows.Count; i++)
                            {
                                var wrkStepEqpParam = new DynamicParameters();
                                wrkStepEqpParam.Add("@m_id", data.Rows[i]["ID"].ToString());
                                conn.Execute(deleteWrkStepEqp, wrkStepEqpParam, transaction);
                            }
                            //删除工单工序表
                            var workStepParam = new DynamicParameters();
                            workStepParam.Add("@wo_code", json.wocode);
                            conn.Execute(deleteWrkStep, workStepParam, transaction);
                            //删除工单用料表
                            var deleteWrkALLParam = new DynamicParameters();
                            deleteWrkALLParam.Add("@wo_code", json.wocode);
                            conn.Execute(deleteWrkALL, deleteWrkALLParam, transaction);
                            //写入工单工序表
                            for (int i = 0; i < json.WorkListSub.Count; i++)
                            {
                                // 插入主表并获取新插入的ID
                                var masterParam = new DynamicParameters();
                                masterParam.Add("@wo_code", json.wocode);
                                masterParam.Add("@seq", json.WorkListSub[i].stepseq);
                                masterParam.Add("@step_code", json.WorkListSub[i].stepcode);
                                masterParam.Add("@route_code", route_code);
                                masterParam.Add("@stepprice", json.WorkListSub[i].unprice);
                                masterParam.Add("@plan_qty", json.woqty);
                                masterParam.Add("@status", json.wostatus);
                                masterParam.Add("@isbott", json.WorkListSub[i].isbott);
                                masterParam.Add("@isend", json.WorkListSub[i].isend);
                                masterParam.Add("@lm_user", us.usercode);
                                masterParam.Add("@lm_date", DateTime.Now.ToString());
                                int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
                                // 写入工序任务表
                                foreach (var detail in json.WorkListSub[i].WorkEqpListSub)
                                {
                                    var detailParam = new DynamicParameters();
                                    detailParam.Add("@m_id", masterId);
                                    detailParam.Add("@eqp_code", detail.eqpcode);
                                    detailParam.Add("@eqpprice", detail.unprice);
                                    conn.Execute(detailInsertSql, detailParam, transaction);
                                }
                            }
                            //写入工单用料表
                            if (json.bomid != "" && json.bomid != null)
                            {
                                var InsertWorkALLParam = new DynamicParameters();
                                InsertWorkALLParam.Add("@wocode", json.wocode);
                                InsertWorkALLParam.Add("@woqty", json.woqty);
                                InsertWorkALLParam.Add("@bom_id", json.bomid);
                                conn.Execute(InsertWorkALL, InsertWorkALLParam, transaction);
                            }
                            //判断源头单据是否来源ERP
                            if (json.data_sources == "ERP")
                            {
                                //判断工单修改数量差值是否为0
                                if (json.difference != "0")
                                {
                                    string staus = "";
                                    //查询订单总数,已下达数量
                                    sql = @"select qty,relse_qty  from TKimp_Ewo where id=@sourceid and wo=@sourcewo";
                                    dynamicParams.Add("@sourceid", json.sourceid);
                                    dynamicParams.Add("@sourcewo", json.sourcewo);
                                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                                    //当前工单可修改数量=订单数量-非当前工单总下达工单数量
                                    decimal qty = decimal.Parse(data0.Rows[0]["qty"].ToString());//订单总数
                                    decimal relse_qty = decimal.Parse(data0.Rows[0]["relse_qty"].ToString());//订单已下达总数
                                    relse_qty = relse_qty + decimal.Parse(json.difference);//新的下达数量=原始下达数量+差值(正负)
                                    if (qty == relse_qty)
                                    {
                                        staus = "CREATED"; //全部下达
                                    }
                                    else
                                    {
                                        staus = "CREATING";//部分下达
                                    }
                                    //更新订单表状态、已下达数量
                                    var EwoStatusParam = new DynamicParameters();
                                    EwoStatusParam.Add("@status", staus);
                                    EwoStatusParam.Add("@relse_qty", relse_qty);
                                    EwoStatusParam.Add("@sourceid", json.sourceid);
                                    EwoStatusParam.Add("@sourcewo", json.sourcewo);
                                    conn.Execute(EwoStatusSql, EwoStatusParam, transaction);
                                }
                            }
                            // 所有插入成功,提交事务
                            transaction.Commit();
                            mes.code = "200";
                            mes.count = 0;
                            mes.message = "修改操作成功!";
                            mes.data = null;
                            //写入操作记录表
                            LogHelper.DbOperateLog(us.usercode, "修改", "修改了工单:" + json.wocode, us.usertype);
                        }
                    }
                    catch (Exception e)
                    {
                        // 捕获异常,回滚事务
                        transaction.Rollback();
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = e.Message;
                        mes.data = null;
                    }
                }
            }
            return mes;
        }
@@ -1122,13 +1214,22 @@
                            list.Add(new { str = sql, parm = new { m_po = m_po, souceid = souceid, orderqty = decimal.Parse(orderqty) } });
                        }
                    }
                    //删除工单工序设备表
                    sql = @"select *  from TK_Wrk_Step where wo_code=@wo_code";
                    dynamicParams.Add("@wo_code", wocode);
                    var data1 = DapperHelper.selectdata(sql, dynamicParams);
                    for (int i = 0; i < data1.Rows.Count; i++)
                    {
                        sql = @"delete TK_Wrk_StepEqp  where m_id=@m_id";
                        list.Add(new { str = sql, parm = new { m_id = data1.Rows[i]["ID"].ToString() } });
                    }
                    //删除工单工序表
                    sql = @"delete TK_Wrk_Step  where wo_code=@wocode";
                    list.Add(new { str = sql, parm = new { wocode = wocode } });
                    //删除加工单用料表(子件)
                    //sql = @"delete TK_Wrk_Allo  where wo_code=@wocode";
                    //list.Add(new { str = sql, parm = new { wocode = wocode } });
                    sql = @"delete TK_Wrk_Allo  where wo_code=@wocode";
                    list.Add(new { str = sql, parm = new { wocode = wocode } });
                    //删除工单表
                    sql = @"delete TK_Wrk_Man   where wo_code=@wocode";
@@ -1176,6 +1277,7 @@
            var sql = "";
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            List<WorkRouteStepEqp> parents = new List<WorkRouteStepEqp>();
            try
            {
                dynamic dynObj = JObject.Parse(us.mesSetting);
@@ -1183,7 +1285,7 @@
                if (route) //工艺路线版
                {
                    //MES工单查找历史引用最新工序信息
                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,'0' as produceq_qty,
                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,'0' as produceq_qty,
                           '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty,'0' as delive_qty,isbott,isend
                           from TK_Wrk_Step S
                           inner join (
@@ -1197,14 +1299,14 @@
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                    dynamicParams.Add("@partcode", partcode);
                    dynamicParams.Add("@routecode", routecode);
                    var parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
                    parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
                    //获取工序对应设备信息
                    for (int i = 0; i < parents.Count; i++)
                    {
                        if (parents[i].flwtype == "Z")
                        {
                            //通过工艺路线工序表ID查找对应设备信息
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                from TK_Wrk_StepEqp S
@@ -1217,7 +1319,7 @@
                        else
                        {
                            //通过工艺路线工序表ID查找对应外协供应商信息
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                from TK_Wrk_StepEqp S
@@ -1232,7 +1334,7 @@
                else
                {
                    //MES工单查找历史引用最新工序信息
                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,'0' as produceq_qty,
                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,'0' as produceq_qty,
                            '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty,'0' as delive_qty,isbott,isend
                            from TK_Wrk_Step S
                            inner join (
@@ -1245,14 +1347,14 @@
                            order by S.seq";
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                    dynamicParams.Add("@partcode", partcode);
                    var parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
                    parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
                    //获取工序对应设备信息
                    for (int i = 0; i < parents.Count; i++)
                    {
                        if (parents[i].flwtype == "Z")
                        {
                            //通过工艺路线工序表ID查找对应设备信息
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                from TK_Wrk_StepEqp S
@@ -1265,7 +1367,7 @@
                        else
                        {
                            //通过工艺路线工序表ID查找对应外协供应商信息
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                from TK_Wrk_StepEqp S
@@ -1277,11 +1379,9 @@
                        }
                    }
                }
                var data = DapperHelper.selectdata(sql, dynamicParams);
                mes.code = "200";
                mes.count = data.Rows.Count;
                mes.data = data;
                mes.count = parents.Count;
                mes.data = parents;
                mes.message = "查询成功!";
            }
            catch (Exception e)
@@ -2037,6 +2137,51 @@
        }
        #endregion
        #region [生产开报工:报工/外协(发料/收料)时获取设备/外协供应商数据返回接口]
        public static ToMessage MesOrderStepDeviceCusstomer(string operType, string wocode, string stepcode, User us)
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                if (operType == "ZZ")
                {
                    sql = @"select E.eqp_code as code,D.name,E.eqpprice   from TK_Wrk_Step S
                            inner join TK_Wrk_StepEqp E on S.id=E.m_id
                            left  join TEqpInfo D on E.eqp_code=D.code
                            where S.wo_code=@wocode and S.step_code=@stepcode and D.enable='Y'";
                    dynamicParams.Add("@wocode", wocode);
                    dynamicParams.Add("@stepcode", stepcode);
                    var data = DapperHelper.selectdata(sql, dynamicParams);
                    mes.code = "200";
                    mes.message = "查询成功!";
                    mes.data = data;
                }
                if (operType == "WX")
                {
                    sql = @"select E.eqp_code as code,C.name,E.eqpprice   from TK_Wrk_Step S
                            inner join TK_Wrk_StepEqp E on S.id=E.m_id
                            inner  join TCustomer C on E.eqp_code=C.code
                            where S.wo_code=@wocode and S.step_code=@stepcode ";
                    dynamicParams.Add("@wocode", wocode);
                    dynamicParams.Add("@stepcode", stepcode);
                    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[生产开报工,报工提交]
        public static ToMessage SavaMesOrderStepReport(string mesordercode, string partcode, string stepseq, string stepcode, string stepprice, string eqpcode, string inbarcode, string reckway, string usergroupcode, string reportuser, string taskqty, string startqty, string reportqty, List<ReportDefectList> defectobjs, string remarks, User us)
        {
@@ -2212,8 +2357,6 @@
                        }
                    }
                }
                //回写工单工序表合格数量、不良数量
                sql = @"update TK_Wrk_Step set good_qty=good_qty+@reportqty,ng_qty=ng_qty+@ngqty  where wo_code=@mesordercode and step_code=@stepcode";
                list.Add(new { str = sql, parm = new { mesordercode = mesordercode, stepcode = stepcode, reportqty = reportqty, ngqty = ngqty } });
@@ -2335,7 +2478,7 @@
        #endregion
        #region[生产开报工,收料提交]
        public static ToMessage SavaMesOrderStepIn(string mesordercode, string partcode, string stepseq, string stepcode, string wxcode, string inbarcode, string inuser, string taskqty, string sqty, List<ReportDefectList> defectobjs, string remarks, User us)
        public static ToMessage SavaMesOrderStepIn(string mesordercode, string partcode, string stepseq, string stepcode,string stepprice, string wxcode, string inbarcode, string inuser, string taskqty, string sqty, List<ReportDefectList> defectobjs, string remarks, User us)
        {
            var sql = "";
            string[] arra1 = new string[] { };
@@ -2423,9 +2566,9 @@
                    sql = @"select ISNULL(IDENT_CURRENT('TK_Wrk_OutRecord')+1,1) as id";
                    var dt = DapperHelper.selecttable(sql);
                    //写入外协记录主表
                    sql = @"insert into  TK_Wrk_OutRecord(wo_code,step_seq,step_code,wx_code,materiel_code,style,sqty,ng_qty,lm_user,lm_date,inbarcode)
                                values(@mesordercode,@stepseq,@stepcode,@wx_code,@partcode,@style,@sqty,@ngqty,@lm_user,@lm_date,@inbarcode)";
                    list.Add(new { str = sql, parm = new { mesordercode = mesordercode, stepseq = stepseq, stepcode = stepcode, wx_code = wxcode, partcode = partcode, style = 'S', sqty = sqty, ngqty = ngqty, lm_user = us.usercode, lm_date = date, inbarcode = inbarcode } });
                    sql = @"insert into  TK_Wrk_OutRecord(wo_code,step_seq,step_code,step_price,wx_code,materiel_code,style,sqty,ng_qty,lm_user,lm_date,inbarcode)
                                values(@mesordercode,@stepseq,@stepcode,@step_price,@wx_code,@partcode,@style,@sqty,@ngqty,@lm_user,@lm_date,@inbarcode)";
                    list.Add(new { str = sql, parm = new { mesordercode = mesordercode, stepseq = stepseq, stepcode = stepcode,step_price=stepprice, wx_code = wxcode, partcode = partcode, style = 'S', sqty = sqty, ngqty = ngqty, lm_user = us.usercode, lm_date = date, inbarcode = inbarcode } });
                    //写入外协记录子表
                    sql = @"insert into  TK_Wrk_OutRecordSub(m_id,wx_code,in_person,in_time,sqty,ng_qty,style,lm_user,lm_date) 
@@ -2450,9 +2593,9 @@
                    sql = @"select ISNULL(IDENT_CURRENT('TK_Wrk_OutRecord')+1,1) as id";
                    var dt = DapperHelper.selecttable(sql);
                    //写入外协记录主表
                    sql = @"insert into  TK_Wrk_OutRecord(wo_code,step_seq,step_code,wx_code,materiel_code,style,sqty,ng_qty,lm_user,lm_date,inbarcode)
                                values(@mesordercode,@stepseq,@stepcode,@wx_code,@partcode,@style,@sqty,@ngqty,@lm_user,@lm_date,@inbarcode)";
                    list.Add(new { str = sql, parm = new { mesordercode = mesordercode, stepseq = stepseq, stepcode = stepcode, wx_code = wxcode, partcode = partcode, style = 'S', sqty = sqty, ngqty = ngqty, lm_user = us.usercode, lm_date = date, inbarcode = inbarcode } });
                    sql = @"insert into  TK_Wrk_OutRecord(wo_code,step_seq,step_code,step_price,wx_code,materiel_code,style,sqty,ng_qty,lm_user,lm_date,inbarcode)
                                values(@mesordercode,@stepseq,@stepcode,@step_price,@wx_code,@partcode,@style,@sqty,@ngqty,@lm_user,@lm_date,@inbarcode)";
                    list.Add(new { str = sql, parm = new { mesordercode = mesordercode, stepseq = stepseq, stepcode = stepcode, step_price=stepprice, wx_code = wxcode, partcode = partcode, style = 'S', sqty = sqty, ngqty = ngqty, lm_user = us.usercode, lm_date = date, inbarcode = inbarcode } });
                    //写入外协记录子表
                    sql = @"insert into  TK_Wrk_OutRecordSub(m_id,wx_code,in_person,in_time,sqty,ng_qty,style,lm_user,lm_date)