1.新增工序找设备(工位)接口
2.新增物料清单查询、新增、修改接口
已添加1个文件
已修改14个文件
1701 ■■■■ 文件已修改
VueWebCoreApi/Controllers/GeneralBasicDataController.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/ProductModelController.cs 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/WorkOrderController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/BLL/ProductModelBLL.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/ProductModelDAL.cs 699 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs 462 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/Bom/BomDate.cs 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/MaterialCraftsSave.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/WorkData/WorkList.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Tools/DapperHelper.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/GeneralBasicDataController.cs
@@ -298,6 +298,20 @@
        }
        #endregion
        #region[工序设备基础资料]
        /// <summary>
        /// å·¥åºè®¾å¤‡åŸºç¡€èµ„æ–™
        /// </summary>
        /// <returns></returns>
        [Route(template: "StepEqpData")]
        [HttpGet]
        public JsonResult StepEqpData()
        {
            mes = GeneralBasicDataBLL.StepEqpData();
            return Json(mes);
        }
        #endregion
        #region[缺陷基础资料]
        [Route(template: "DefectPermissions")]
        [HttpGet]
VueWebCoreApi/Controllers/ProductModelController.cs
@@ -6,6 +6,7 @@
using System.Threading.Tasks;
using VueWebCoreApi.DLL.BLL;
using VueWebCoreApi.Models;
using VueWebCoreApi.Models.Bom;
using VueWebCoreApi.Models.UnitMaterial;
using VueWebCoreApi.Tools;
@@ -295,6 +296,157 @@
        #endregion
        #region[物料清单信息列表]
        /// <summary>
        /// ç‰©æ–™æ¸…单信息列表
        /// </summary>
        /// <param name="parentpartcode">母件编码</param>
        /// <param name="parentpartname">母件名称</param>
        /// <param name="parentpartspec">母件规格</param>
        /// <param name="status">启用状态</param>
        /// <param name="version">版本号</param>
        /// <param name="createuser">创建人员</param>
        /// <param name="createdate">创建日期</param>
        /// <param name="page">页码</param>
        /// <param name="rows">分页条数</param>
        /// <param name="prop">排序字段</param>
        /// <param name="order">排序规格</param>
        /// <returns></returns>
        [Route(template: "BomMainData")]
        [HttpGet]
        public JsonResult BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string status,string version,string createuser,string createdate, int page = 0, int rows = 0, string prop = null, string order = null)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            string operopendate = "";  //开始时间
            string operclosedate = "";    //结束时间
            if (createdate != "" && createdate != null)
            {
                operopendate = createdate.Split('~')[0].ToString();
                operclosedate = createdate.Split('~')[1].ToString();
            }
            int startNum = rows * (page - 1) + 1;  //起始记录rowNum
            int endNum = rows * page;   //结束记录 rowNum
            mes = ProductModelBLL.BomMainData(parentpartcode, parentpartname, parentpartspec, status, version, createuser, operopendate, operclosedate, startNum, endNum, prop, order);
            return Json(mes);
        }
        #endregion
        #region[物料清单新增修改获取父件信息-T+畅捷通模式]
        /// <summary>
        /// ç‰©æ–™æ¸…单新增修改获取父件信息-T+畅捷通模式
        /// </summary>
        [Route(template: "AddUpdateTBomParentData")]
        [HttpGet]
        public JsonResult AddUpdateTBomParentData()
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = ProductModelBLL.AddUpdateTBomParentData(us);
            return Json(mes);
        }
        #endregion
        #region[物料清单新增修改根据父件信息的计量单位组编码查找计量单位组信息-T+畅捷通模式]
        /// <summary>
        /// ç‰©æ–™æ¸…单新增修改根据父件信息的计量单位组编码查找计量单位组信息-T+畅捷通模式
        /// </summary>
        /// <param name="idunitgroup">计量单位组编码(当选取的父件物料中为计量单位组时调用,idunitgroup不为空)</param>
        /// <returns></returns>
        [Route(template: "AddUpdateTBomUnitGroup")]
        [HttpGet]
        public JsonResult AddUpdateTBomUnitGroup(string idunitgroup)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = ProductModelBLL.AddUpdateTBomUnitGroup(idunitgroup);
            return Json(mes);
        }
        #endregion
        #region[物料清单新增时获取最大版本号]
        /// <summary>
        /// ç‰©æ–™æ¸…单新增时获取最大版本号
        /// </summary>
        /// <param name="parentpartcode">父件编码</param>
        /// <returns></returns>
        [Route(template: "AddUpdateTBomMaxVsion")]
        [HttpGet]
        public JsonResult AddUpdateTBomMaxVsion(string parentpartcode)
        {
            mes = ProductModelBLL.AddUpdateTBomMaxVsion(parentpartcode);
            return Json(mes);
        }
        #endregion
        #region[物料清单新增修改获取子件信息-T+畅捷通模式]
        /// <summary>
        /// ç‰©æ–™æ¸…单新增修改获取子件信息-T+畅捷通模式
        /// </summary>
        [Route(template: "AddUpdateTBomDetailsData")]
        [HttpGet]
        public JsonResult AddUpdateTBomDetailsData()
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = ProductModelBLL.AddUpdateTBomDetailsData(us);
            return Json(mes);
        }
        #endregion
        #region[物料清单新增修改获取子件Bom-T+畅捷通模式]
        /// <summary>
        /// ç‰©æ–™æ¸…单新增修改获取子件Bom-T+畅捷通模式
        /// </summary>
        /// <param name="materiel_code">子件编码</param>
        /// <returns></returns>
        [Route(template: "AddUpdateTBomDetailsBomData")]
        [HttpGet]
        public JsonResult AddUpdateTBomDetailsBomData(string materiel_code)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = ProductModelBLL.AddUpdateTBomDetailsBomData(materiel_code,us);
            return Json(mes);
        }
        #endregion
        #region[物料清单新增修改提交-T+畅捷通模式]
        /// <summary>
        /// ç‰©æ–™æ¸…单新增修改提交-T+畅捷通模式
        /// </summary>
        /// <param name="OperType">操作类型:Add/Update</param>
        /// <param name="bom">提交数据</param>
        /// <returns></returns>
        [Route(template: "TBomAddUpdate")]
        [HttpPost]
        public JsonResult TBomAddUpdate(string OperType, [FromBody] BomDate bom)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            //var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyY29kZSI6Ijk5OTkiLCJ1c2VybmFtZSI6Iuezu-e7n-euoeeQhuWRmCIsInN0b3JnX2NvZGUiOiIiLCJzdG9yZ19uYW1lIjoiIiwiaXNfc3lzdGVtX2FkbWluIjoiWSIsInJvbGVfY29kZSI6IiIsInJvbGVfZGF0YXBlcm1pc3Npb25zIjoiIiwidXNlcnR5cGUiOiJQQyIsInJlZGlza2V5IjoiTmV3TUVTTG9naW5Vc2VySURQQzk5OTkiLCJtZXNTZXR0aW5nIjoie1wicm91dGVcIjp0cnVlLFwiaXNPcmRlclwiOnRydWUsXCJkZXZpY2VcIjp0cnVlLFwidGVjaFwiOnRydWUsXCJ3b3JrT3JkZXJcIjp0cnVlLFwiZXZlcnlcIjpmYWxzZSxcImxhc3RcIjpmYWxzZX0iLCJ0aW1lb3V0IjoiMjAyNC0wOC0xNFQxMDo0NjozNi42MTQyNjQ0KzA4OjAwIn0.9IdnyNRCWbMEXvxjuiFS6NhRqOtvp_lx5zKrZ8OPj0Y";
            User us = JwtTools.Denocode(token.ToString());
            mes = ProductModelBLL.TBomAddUpdate(OperType, bom, us);
            return Json(mes);
        }
        #endregion
        #region[物料清单删除提交-T+畅捷通模式]
        /// <summary>
        /// ç‰©æ–™æ¸…单删除提交-T+畅捷通模式
        /// </summary>
        /// <param name="bom">提交数据</param>
        /// <returns></returns>
        [Route(template: "TBomDelete")]
        [HttpPost]
        public JsonResult TBomDelete([FromBody] BomDate bom)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = ProductModelBLL.TBomDelete(bom, us);
            return Json(mes);
        }
        #endregion
        #region[工单产品信息下拉框查询]
        /// <summary>
VueWebCoreApi/Controllers/WorkOrderController.cs
@@ -19,7 +19,7 @@
    [ApiExplorerSettings(GroupName = "工单管理")]
    [ApiController]
    [Route("api/[controller]")]
    //[ChannelActionFilter]
    [ChannelActionFilter]
    public class WorkOrderController : Controller
    {
        //定义全局信息返回变量
VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
@@ -150,6 +150,13 @@
        }
        #endregion
        #region[工序设备基础资料]
        public static ToMessage StepEqpData()
        {
            return GeneralBasicDataDAL.StepEqpData();
        }
        #endregion
        #region[缺陷基础资料]
        public static ToMessage DefectPermissions()
        {
VueWebCoreApi/DLL/BLL/ProductModelBLL.cs
@@ -4,6 +4,7 @@
using System.Threading.Tasks;
using VueWebCoreApi.DLL.DAL;
using VueWebCoreApi.Models;
using VueWebCoreApi.Models.Bom;
using VueWebCoreApi.Models.UnitMaterial;
using VueWebCoreApi.Tools;
@@ -107,6 +108,62 @@
        #endregion
        #region[物料清单信息列表]
        public static ToMessage BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string status, string version, string createuser, string operopendate,string operclosedate, int startNum, int endNum, string prop, string order)
        {
            return ProductModelDAL.BomMainData(parentpartcode, parentpartname, parentpartspec, version, createuser, operopendate, operclosedate, status, startNum, endNum, prop, order);
        }
        #endregion
        #region[物料清单新增修改获取父件信息-T+畅捷通模式]
        public static ToMessage AddUpdateTBomParentData(User us)
        {
            return ProductModelDAL.AddUpdateTBomParentData(us);
        }
        #endregion
        #region[物料清单新增修改根据父件信息的计量单位组编码查找计量单位组信息-T+畅捷通模式]
        public static ToMessage AddUpdateTBomUnitGroup(string idunitgroup)
        {
            return ProductModelDAL.AddUpdateTBomUnitGroup(idunitgroup);
        }
        #endregion
        #region[物料清单新增时获取最大版本号]
        public static ToMessage AddUpdateTBomMaxVsion(string parentpartcode)
        {
            return ProductModelDAL.AddUpdateTBomMaxVsion(parentpartcode);
        }
        #endregion
        #region[物料清单新增修改获取子件信息-T+畅捷通模式]
        public static ToMessage AddUpdateTBomDetailsData(User us)
        {
            return ProductModelDAL.AddUpdateTBomDetailsData(us);
        }
        #endregion
        #region[物料清单新增修改获取子件Bom-T+畅捷通模式]
        public static ToMessage AddUpdateTBomDetailsBomData(string materiel_code, User us)
        {
            return ProductModelDAL.AddUpdateTBomDetailsBomData(materiel_code,us);
        }
        #endregion
        #region[物料清单新增修改提交-T+畅捷通模式]
        public static ToMessage TBomAddUpdate(string operType, BomDate bom, User us)
        {
            return ProductModelDAL.TBomAddUpdate(operType,bom,us);
        }
        #endregion
        #region[物料清单删除提交-T+畅捷通模式]
        public static ToMessage TBomDelete(BomDate bom, User us)
        {
            return ProductModelDAL.TBomDelete(bom, us);
        }
        #endregion
        #region[工单产品信息下拉框查询]
        public static ToMessage PartSelect()
VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
@@ -3837,12 +3837,12 @@
                    if (parents[i].flwtype == "Z")
                    {
                        //通过产品编码+工艺路线+工序编码查找对应设备信息
                        sql = @"select A.eqp_code,E.name as eqp_name,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice
                        sql = @"select A.eqp_code,E.name as eqp_name,A.enable,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice
                                from (
                                select S.eqp_code,S.eqp_value,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
                                select S.eqp_code,S.eqp_value,S.enable,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
                                where S.materiel_code=@partcode and S.route_code=@routecode and S.step_code=@stepcode
                                union all
                                select  R.eqp_code,'0' as eqp_value,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
                                select  R.eqp_code,'0' as eqp_value,'N' as enable,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
                                inner join TFlw_Rtdt T on S.route_code=T.rout_code
                                inner join TFlw_Rteqp R on T.step_code=R.step_code
                                where S.materiel_code=@partcode and S.route_code=@routecode and T.step_code=@stepcode and S.materiel_code+S.route_code+T.step_code+R.eqp_code
@@ -3859,12 +3859,12 @@
                    else
                    {
                        //通过产品编码+工艺路线+工序编码查找对应外协供应商信息
                        sql = @"select A.eqp_code,C.name as eqp_name,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice
                        sql = @"select A.eqp_code,C.name as eqp_name,A.enable,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice
                                from (
                                select S.eqp_code,S.eqp_value,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
                                select S.eqp_code,S.eqp_value,S.enable,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
                                where S.materiel_code=@partcode and S.route_code=@routecode and S.step_code=@stepcode
                                union all
                                select  R.eqp_code,'0' as eqp_value,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
                                select  R.eqp_code,'0' as eqp_value,'N' as enable,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
                                inner join TFlw_Rtdt T on S.route_code=T.rout_code
                                inner join TFlw_Rteqp R on T.step_code=R.step_code
                                where S.materiel_code=@partcode and S.route_code=@routecode and T.step_code=@stepcode and S.materiel_code+S.route_code+T.step_code+R.eqp_code
@@ -4037,7 +4037,7 @@
                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data0.Rows.Count > 0)
                            {
                                sql = @"update TPrteEqp_Stad set eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
                                sql = @"update TPrteEqp_Stad set enable=@enable, eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
                                    where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                                list.Add(new
                                {
@@ -4048,6 +4048,7 @@
                                        routecode = json[0].defaultroute_code,
                                        stepcode = json[0].children[i].code,
                                        eqpcode = json[0].children[i].children[j].eqp_code,
                                        enable= json[0].children[i].children[j].enable,
                                        eqp_value = json[0].children[i].children[j].eqp_value,
                                        stand_value = json[0].children[i].children[j].stand_value,
                                        cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4059,8 +4060,8 @@
                            }
                            else
                            {
                                sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date)
                                    values(@materiel_code,@route_code,@step_code,@eqp_code,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
                                sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,enable,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date)
                                    values(@materiel_code,@route_code,@step_code,@eqp_code,@enable,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
                                list.Add(new
                                {
                                    str = sql,
@@ -4070,6 +4071,7 @@
                                        route_code = json[0].defaultroute_code,
                                        step_code = json[0].children[i].code,
                                        eqp_code = json[0].children[i].children[j].eqp_code,
                                        enable = json[0].children[i].children[j].enable,
                                        stand_value = json[0].children[i].children[j].eqp_value,
                                        eqp_value = json[0].children[i].children[j].stand_value,
                                        cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4137,7 +4139,7 @@
                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data0.Rows.Count > 0)
                            {
                                sql = @"update TPrteEqp_Stad set eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
                                sql = @"update TPrteEqp_Stad set enable=@enable,eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
                                    where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                                list.Add(new
                                {
@@ -4148,6 +4150,7 @@
                                        routecode = json[0].defaultroute_code,
                                        stepcode = json[0].children[i].code,
                                        eqpcode = json[0].children[i].children[j].eqp_code,
                                        enable= json[0].children[i].children[j].enable,
                                        eqp_value = json[0].children[i].children[j].eqp_value,
                                        stand_value = json[0].children[i].children[j].stand_value,
                                        cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4159,8 +4162,8 @@
                            }
                            else
                            {
                                sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date)
                                    values(@materiel_code,@route_code,@step_code,@eqp_code,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
                                sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,enable,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date)
                                    values(@materiel_code,@route_code,@step_code,@eqp_code,@enable,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
                                list.Add(new
                                {
                                    str = sql,
@@ -4170,6 +4173,7 @@
                                        route_code = json[0].defaultroute_code,
                                        step_code = json[0].children[i].code,
                                        eqp_code = json[0].children[i].children[j].eqp_code,
                                        enable= json[0].children[i].children[j].enable,
                                        stand_value = json[0].children[i].children[j].eqp_value,
                                        eqp_value = json[0].children[i].children[j].stand_value,
                                        cavity_qty = json[0].children[i].children[j].cavity_qty,
VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
@@ -7,6 +7,7 @@
using System.Threading.Tasks;
using VueWebCoreApi.Models;
using VueWebCoreApi.Models.UnitMaterial;
using VueWebCoreApi.Models.WorkData;
using VueWebCoreApi.Tools;
namespace VueWebCoreApi.DLL.DAL
@@ -21,7 +22,7 @@
        public static SqlParameter[] parameters; //定义全局SqlParameter参数数组
        public static dynamic CompanyCode = AppSetting.GetAppSetting("CompanyCode");
        public static dynamic CompanyName = AppSetting.GetAppSetting("CompanyName");
        #region[组织架构类型资料]
        public static ToMessage TOrganTypeDate()
@@ -511,7 +512,7 @@
                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                    for (int j = 0; j < data0.Rows.Count; j++)
                    {
                        LocationData  locat = new LocationData();
                        LocationData locat = new LocationData();
                        locat.value = data0.Rows[j]["code"].ToString();
                        locat.text = data0.Rows[j]["name"].ToString();
                        warhouse.children.Add(locat);
@@ -571,6 +572,68 @@
                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 StepEqpData()
        {
            var sql = "";
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            try
            {
                //查找工序信息
                sql = @"select  '' as id,'' as wo_code,'' as seq,S.stepcode as step_code,T.stepname,T.flwtype,'0' 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,'' as isbott,'' as isend
                        from TStep S
                        left join TStep  T on S.stepcode=T.stepcode";
                var parents = DapperHelper.selectdatalist<WorkRouteStepEqp>(sql);
                //获取工序对应设备信息
                for (int i = 0; i < parents.Count; i++)
                {
                    if (parents[i].flwtype == "Z")
                    {
                        //通过工艺路线工序表ID查找对应设备信息
                        sql = @"select  R.eqp_code,E.name as eqp_name,'N' as enable,'0' as unprice,
                              '0' as produceq_qty, '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty
                              from TFlw_Rteqp R
                              left join  TEqpInfo E on R.eqp_code=E.code
                              where R.step_code=@step_code and R.style=@style";
                        dynamicParams.Add("@step_code", parents[i].step_code);
                        dynamicParams.Add("@style", "E"); //设备
                        var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
                        parents[i].children = children.ToList();
                    }
                    else
                    {
                        //通过工艺路线工序表ID查找对应外协供应商信息
                        sql = @"select  R.eqp_code,E.name as eqp_name,'N' as enable,'0' as unprice,
                              '0' as produceq_qty, '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty
                              from TFlw_Rteqp R
                              inner join TCustomer E on R.eqp_code=E.code
                              where R.step_code=@step_code and R.style=@style";
                        dynamicParams.Add("@step_code", parents[i].step_code);
                        dynamicParams.Add("@style", parents[i].flwtype);
                        var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
                        parents[i].children = children.ToList();
                    }
                }
                var data = DapperHelper.selectdata(sql, dynamicParams);
                mes.code = "200";
                mes.count = parents.Count;
                mes.data = parents;
                mes.message = "查询成功!";
            }
            catch (Exception e)
            {
@@ -689,7 +752,7 @@
            var dynamicParams = new DynamicParameters();
            try
            {
              sql = @"WITH RecursiveCTE AS (
                sql = @"WITH RecursiveCTE AS (
                     SELECT code, name, idparent
                     FROM TMateriel_Class
                     WHERE code in(select distinct idinventoryclass from TMateriel_Info where status='0')
VueWebCoreApi/DLL/DAL/ProductModelDAL.cs
@@ -8,6 +8,7 @@
using System.Linq;
using System.Threading.Tasks;
using VueWebCoreApi.Models;
using VueWebCoreApi.Models.Bom;
using VueWebCoreApi.Models.UnitMaterial;
using VueWebCoreApi.Tools;
@@ -21,6 +22,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[计量单位组信息]
@@ -228,7 +230,7 @@
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了计量单位:"+ tunittype == "S" ? ((List<string>)mes.data)[0].ToString() : string.Join(",", listjson[0].children.Select(m => m.unitcode)), us.usertype);
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了计量单位:" + tunittype == "S" ? ((List<string>)mes.data)[0].ToString() : string.Join(",", listjson[0].children.Select(m => m.unitcode)), us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "新增操作成功!";
@@ -475,7 +477,7 @@
                if (aa)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "新增", "新增了计量单位:" + tunittype == "S" ? tunitcode : tunittype == "M"&& (tunitgroupcode != "" || tunitgroupcode != null) && (tunitcode == "" || tunitcode == null)? tunitgroupcode: tunitgroupcode+"-->"+tunitcode, us.usertype);
                    LogHelper.DbOperateLog(us.usercode, "新增", "新增了计量单位:" + tunittype == "S" ? tunitcode : tunittype == "M" && (tunitgroupcode != "" || tunitgroupcode != null) && (tunitcode == "" || tunitcode == null) ? tunitgroupcode : tunitgroupcode + "-->" + tunitcode, us.usertype);
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "删除操作成功!";
@@ -594,7 +596,7 @@
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了存货分类:"+ inventoryclasscode, us.usertype);
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了存货分类:" + inventoryclasscode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "新增操作成功!";
@@ -642,7 +644,7 @@
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了存货分类:"+ inventoryclasscode, us.usertype);
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了存货分类:" + inventoryclasscode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "修改操作成功!";
@@ -703,7 +705,7 @@
                if (aa)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "删除", "删除了存货分类"+classcode, us.usertype);
                    LogHelper.DbOperateLog(us.usercode, "删除", "删除了存货分类" + classcode, us.usertype);
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "删除操作成功!";
@@ -740,42 +742,58 @@
                if (inventoryclasscode != "" && inventoryclasscode != null)
                {
                    string[] classcode = Array.ConvertAll<string, string>(inventoryclasscode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[]
                    search += "and M.idinventoryclass in @classcode ";
                    search += "and AA.idinventoryclass in @classcode ";
                    dynamicParams.Add("@classcode", classcode);
                }
                if (partcode != "" && partcode != null)
                {
                    search += "and M.partcode like '%'+@partcode+'%' ";
                    search += "and AA.partcode like '%'+@partcode+'%' ";
                    dynamicParams.Add("@partcode", partcode);
                }
                if (partname != "" && partname != null)
                {
                    search += "and M.partname like '%'+@partname+'%' ";
                    search += "and AA.partname like '%'+@partname+'%' ";
                    dynamicParams.Add("@partname", partname);
                }
                if (partspec != "" && partspec != null)
                {
                    search += "and M.partspec like '%'+@partspec+'%' ";
                    search += "and AA.partspec like '%'+@partspec+'%' ";
                    dynamicParams.Add("@partspec", partspec);
                }
                sql = @"select M.partcode,M.partname,M.partspec,M.idunit as idunitcode,T.name as idunitname,M.idunitgroup as idunitgroupcode,G.name as idunitgroupname,
                            M.isSingleUnit,M.idSubUnitByReport as idSubUnitByReportcode,R.name as idSubUnitByReportname,M.idUnitByStock as idUnitByStockcode,K.name as idUnitByStockname,
                            M.idUnitByPurchase as idUnitByPurchasecode,P.name as idUnitByPurchasename,M.idUnitBySale as idUnitBySalecode,S.name as idUnitBySalename,
                            M.idunitbymanufacture as idunitbymanufacturecode,F.name as idunitbymanufacturename,M.idinventoryclass as idinventoryclasscode,C.name as idinventoryclassname,
                            M.isPurchase,M.isSale,M.isMadeSelf,M.isMaterial,M.isMadeRequest,M.idwarehouse as idwarehousecode,H.name as idwarehousename,M.lowQuantity,M.topQuantity,M.safeQuantity,
                            M.status,U.username as lm_user,M.lm_date,M.data_sources,M.is_retdproc,M.default_route
                            from TMateriel_Info M
                            left join TUnit T on M.idunit=T.code
                            left join TUnit R on M.idSubUnitByReport=R.code
                            left join TUnit K on M.idUnitByStock=K.code
                            left join TUnit P on M.idUnitByPurchase=P.code
                            left join TUnit S on M.idUnitBySale=S.code
                            left join TUnit F on M.idunitbymanufacture=F.code
                            left join TMateriel_Class C on M.idinventoryclass=C.code
                            left join TUnitGroup G on M.idunitgroup=G.code
                            left join TSecStck H on M.idwarehouse=H.code
                            left join TUser U on M.lm_user=U.usercode
                            where 1=1 " + search;
                sql = @"select *  from (
                        select
                        M.partcode,M.partname,M.partspec,M.idinventoryclass,M.idunit as idunitcode,T.name as idunitname,M.idunitgroup as idunitgroupcode,G.name as idunitgroupname,
                        M.isSingleUnit,M.idSubUnitByReport as idSubUnitByReportcode,R.name as idSubUnitByReportname,M.idUnitByStock as idUnitByStockcode,K.name as idUnitByStockname,
                        M.idUnitByPurchase as idUnitByPurchasecode,P.name as idUnitByPurchasename,M.idUnitBySale as idUnitBySalecode,S.name as idUnitBySalename,
                        M.idunitbymanufacture as idunitbymanufacturecode,F.name as idunitbymanufacturename,M.idinventoryclass as idinventoryclasscode,C.name as idinventoryclassname,
                        M.isPurchase,M.isSale,M.isMadeSelf,M.isMaterial,M.isMadeRequest,M.idwarehouse as idwarehousecode,H.name as idwarehousename,M.lowQuantity,M.topQuantity,M.safeQuantity,
                        M.status,U.username as lm_user,M.lm_date,M.data_sources,M.is_retdproc,M.default_route
                        from TMateriel_Info M
                        left join TUnit T on M.idunit=T.code
                        left join TUnit R on M.idSubUnitByReport=R.code
                        left join TUnit K on M.idUnitByStock=K.code
                        left join TUnit P on M.idUnitByPurchase=P.code
                        left join TUnit S on M.idUnitBySale=S.code
                        left join TUnit F on M.idunitbymanufacture=F.code
                        left join TMateriel_Class C on M.idinventoryclass=C.code
                        left join TUnitGroup G on M.idunitgroup=G.code
                        left join TSecStck H on M.idwarehouse=H.code
                        left join TUser U on M.lm_user=U.usercode
                        where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))
                        or   (M.isSingleUnit = '0' AND(
                            (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)
                            OR
                            (R.isSingleUnit = '0' AND M.idunitgroup = R.idunitgroup)
                            OR
                            (K.isSingleUnit = '0' AND M.idunitgroup = K.idunitgroup)
                            OR
                            (P.isSingleUnit = '0' AND M.idunitgroup = P.idunitgroup)
                            OR
                            (S.isSingleUnit = '0' AND M.idunitgroup = S.idunitgroup)
                            OR
                            (F.isSingleUnit = '0' AND M.idunitgroup = F.idunitgroup)
                        ))
                        ) as AA where 1=1" + search;
                // --------------查询指定数据--------------
                var total = 0; //总条数
                data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
@@ -851,25 +869,25 @@
                        str = sql,
                        parm = new
                        {
                            partcode=partcode,
                            partname=partname,
                            partspec=partspec,
                            idunit=unittypcode=="1"?unitcode:unitsubcode,
                            idunitgroup = unittypcode == "0"?"1":"0",
                            isSingleUnit= unittypcode,
                            idSubUnitByReport=idSubUnitByReport,
                            idUnitByStock= idUnitByStock,
                            idUnitByPurchase= idUnitByPurchase,
                            idUnitBySale= idUnitBySale,
                            idunitbymanufacture= idunitbymanufacture,
                            idinventoryclass= inventoryclasscode,
                            isPurchase= isPurchase,
                            isSale= isSale,
                            isMadeSelf= isMadeSelf,
                            isMaterial= isMaterial,
                            isMadeRequest= isMadeRequest,
                            idwarehouse= idwarehouse,
                            status= status,
                            partcode = partcode,
                            partname = partname,
                            partspec = partspec,
                            idunit = unittypcode == "1" ? unitcode : unitsubcode,
                            idunitgroup = unittypcode == "0" ? "1" : "0",
                            isSingleUnit = unittypcode,
                            idSubUnitByReport = idSubUnitByReport,
                            idUnitByStock = idUnitByStock,
                            idUnitByPurchase = idUnitByPurchase,
                            idUnitBySale = idUnitBySale,
                            idunitbymanufacture = idunitbymanufacture,
                            idinventoryclass = inventoryclasscode,
                            isPurchase = isPurchase,
                            isSale = isSale,
                            isMadeSelf = isMadeSelf,
                            isMaterial = isMaterial,
                            isMadeRequest = isMadeRequest,
                            idwarehouse = idwarehouse,
                            status = status,
                            lm_user = us.usercode,
                            lm_date = DateTime.Now.ToString(),
                            data_sources = data_sources
@@ -879,7 +897,7 @@
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了存货档案:"+ partcode, us.usertype);
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了存货档案:" + partcode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "新增操作成功!";
@@ -957,7 +975,7 @@
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了存货档案:"+ partcode, us.usertype);
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了存货档案:" + partcode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "修改操作成功!";
@@ -1023,14 +1041,14 @@
                    parm = new
                    {
                        partcode = partcode,
                        data_sources= data_sources
                        data_sources = data_sources
                    }
                });
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "删除", "删除了存货档案:"+partcode, us.usertype);
                    LogHelper.DbOperateLog(us.usercode, "删除", "删除了存货档案:" + partcode, us.usertype);
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "删除操作成功!";
@@ -1056,7 +1074,7 @@
        #endregion
        #region[存货档案关联工艺(工艺路线或工序)查询]
        public static ToMessage TMaterielFileAssociationRoute(string partcode,User us)
        public static ToMessage TMaterielFileAssociationRoute(string partcode, User us)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
@@ -1176,7 +1194,7 @@
                        //string分割转string[]
                        string[] routcode = Array.ConvertAll<string, string>(string.Join(",", json[0].children.Select(s => s.code)).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString());
                        sql = @"delete TPrteStep_Price where materiel_code=@partcode and route_code not in @routecode";
                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode, routecode= routcode } });
                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode, routecode = routcode } });
                    }
                }
                else //工序版
@@ -1233,7 +1251,7 @@
                if (aa)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "存货关联工艺", "产品:"+json[0].partcode+"关联了工艺:" + string.Join(",", json[0].children.Select(s => s.code)), us.usertype);
                    LogHelper.DbOperateLog(us.usercode, "存货关联工艺", "产品:" + json[0].partcode + "关联了工艺:" + string.Join(",", json[0].children.Select(s => s.code)), us.usertype);
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "操作成功!";
@@ -1259,6 +1277,581 @@
        #endregion
        #region[物料清单信息列表]
        public static ToMessage BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string version, string createuser, string operopendate, string operclosedate, string status, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            List<BomDate> parents = new List<BomDate>();
            string search = "", sql = "";
            try
            {
                if (parentpartcode != "" && parentpartcode != null)
                {
                    search += "and AA.materiel_code like '%'+@parentpartcode+'%' ";
                    dynamicParams.Add("@parentpartcode", parentpartcode);
                }
                if (parentpartname != "" && parentpartname != null)
                {
                    search += "and AA.materiel_name like '%'+@parentpartname+'%' ";
                    dynamicParams.Add("@parentpartname", parentpartname);
                }
                if (parentpartspec != "" && parentpartspec != null)
                {
                    search += "and AA.materiel_spec like '%'+@parentpartspec+'%' ";
                    dynamicParams.Add("@parentpartspec", parentpartspec);
                }
                if (version != "" && version != null)
                {
                    search += "and AA.version like '%'+@version+'%' ";
                    dynamicParams.Add("@version", version);
                }
                if (createuser != "" && createuser != null)
                {
                    search += "and AA.lm_user like '%'+@createuser+'%' ";
                    dynamicParams.Add("@createuser", createuser);
                }
                if (operopendate != "" && operopendate != null)
                {
                    search += "and AA.lm_date between @operopendate and @operclosedate ";
                    dynamicParams.Add("@operopendate", operopendate + " 00:00:00");
                    dynamicParams.Add("@operclosedate", operclosedate + " 23:59:59");
                }
                var total = 0; //总条数
                //查询Bom主表信息
                sql = @"select *  from(
                        select B.id,B.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,
                        M.idinventoryclass as materiel_typecode,C.name as materiel_typename,M.idunit as unitcode,T.name as unitname,
                        B.quantity,B.status,B.startdate,B.version,B.isdefaultbom,B.bomdepth,U.username as lm_user,B.lm_date
                        from TBom_Main B
                        left join TMateriel_Info M on B.materiel_code=M.partcode
                        left join TUnit T on M.idunit=T.code
                        left join TMateriel_Class C on M.idinventoryclass=C.code
                        left join TUser U on B.lm_user=U.usercode
                        where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))
                        or   (M.isSingleUnit = '0' AND(
                        (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)
                        ))
                        ) as AA " + search;
                parents = DapperHelper.GetPageListData<BomDate>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                for (int i = 0; i < parents.Count; i++)
                {
                    //通过Bom主表id查找子件信息
                    sql = @"select *  from(
                            select S.id,S.m_id,S.seq,S.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,
                            M.idunit as unitcode,T.name as unitname,S.base_quantity,S.loss_quantity,S.total_quantity,S.idchildbom
                            from TBom_Deta S
                            left join TMateriel_Info M on S.materiel_code=M.partcode
                            left join TUnit T on M.idunit=T.code
                            where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))
                            or   (M.isSingleUnit = '0' AND(
                            (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)
                            ))
                            ) as AA where AA.m_id=@m_id";
                    dynamicParams.Add("@m_id", parents[i].id);
                    var children = DapperHelper.select<BomDateSub>(sql, dynamicParams);
                    parents[i].children = children.ToList();
                }
                mes.code = "200";
                mes.message = "查询成功!";
                mes.data = parents;
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[物料清单新增修改获取父件信息-T+畅捷通模式]
        public static ToMessage AddUpdateTBomParentData(User us)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                //根据存货信息,查找自制属性或委外属性物料
                sql = @"select *   from (
                        select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.isMadeSelf,M.isMadeRequest,
                        (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup
                        from TMateriel_Info M
                        left join  TUnit U on  M.idunitgroup=U.idunitgroup and M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit
                        where M.isSingleUnit='0'  and U.IsMainUnit='1' and M.Status='0'
                        ) as AA where  AA.isMadeSelf='1' or AA.isMadeRequest='1'
                        union all
                        select *   from (
                        select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.isMadeSelf,M.isMadeRequest,
                        (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup
                        from  TMateriel_Info  M
                        inner join  TUnit U on  M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit
                        where M.IsSingleUnit='1' and U.IsMainUnit='0' and M.Status='0'
                        ) as AA where AA.isMadeSelf='1' or AA.isMadeRequest='1'";
                var data = DapperHelper.selecttable(sql);
                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[物料清单新增修改根据父件信息的计量单位组编码查找计量单位组信息-T+畅捷通模式]
        public static ToMessage AddUpdateTBomUnitGroup(string idunitgroup)
        {
            var dynamicParams = new DynamicParameters();
            string sql = "";
            try
            {
                //获取计量单位组信息
                sql = @"select code as unitcode,name as unitname
                        from TUnit where idunitgroup=@idunitgroup";
                dynamicParams.Add("@idunitgroup", idunitgroup);
                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 AddUpdateTBomMaxVsion(string parentpartcode)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                sql = @"select isnull(max(substring(version,charindex('V',version)+1,len(version)-charindex('V',version))),0)+1 as version
                        from TBom_Main where materiel_code=@parentpartcode";
                dynamicParams.Add("@parentpartcode", parentpartcode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                if (data.Rows.Count > 0)
                {
                    mes.code = "200";
                    mes.message = "获取版本号成功!";
                    mes.data = "V" + data.Rows[0]["version"].ToString();
                }
                else
                {
                    mes.code = "300";
                    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[物料清单新增修改获取子件信息-T+畅捷通模式]
        public static ToMessage AddUpdateTBomDetailsData(User us)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                //根据存货信息,查找生产耗用的物料
                sql = @"select *   from (
                        select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.IsMaterial,
                        (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup
                        from TMateriel_Info M
                        left join  TUnit U on  M.idunitgroup=U.idunitgroup and M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit
                        where M.isSingleUnit='0'  and U.IsMainUnit='1' and M.Status='0'
                        ) as AA where  AA.IsMaterial='1'
                        union all
                        select *   from (
                        select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.IsMaterial,
                        (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup
                        from  TMateriel_Info  M
                        inner join  TUnit U on  M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit
                        where M.IsSingleUnit='1' and U.IsMainUnit='0' and M.Status='0'
                        ) as AA where AA.IsMaterial='1' ";
                var data = DapperHelper.selecttable(sql);
                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[物料清单新增修改获取子件Bom-T+畅捷通模式]
        public static ToMessage AddUpdateTBomDetailsBomData(string materiel_code, User us)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                //根据子件物料编码查询子件对应的Bom信息
                sql = @"select B.id,B.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,B.version
                        from TBom_Main B
                        left join TMateriel_Info M on B.materiel_code=M.partcode
                        where B.materiel_code=@materiel_code";
                dynamicParams.Add("@materiel_code", materiel_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[物料清单新增修改提交-T+畅捷通模式]
        public static ToMessage TBomAddUpdate(string operType, BomDate bom, User us)
        {
            string sql = "";
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            using (var conn = new SqlConnection(sqlServerConnectString))
            {
                conn.Open();
                using (var transaction = conn.BeginTransaction())
                {
                    try
                    {
                        if (operType == "Add")
                        {
                            // å‡è®¾ä½ å·²ç»æœ‰äº†æ’入主表和子表的SQL语句
                            string masterUpdateversionSql = @"update TBom_Main set isdefaultbom='0' where materiel_code=@materiel_code";
                            string masterInsertSql = @"insert into TBom_Main(materiel_code,unitcode,bomdepth,isdefaultbom,quantity,status,startdate,version,lm_user,lm_date)
                            values(@materiel_code,@unitcode,@bomdepth,@isdefaultbom,@quantity,@status,@startdate,@version,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
                            string detailInsertSql = @"insert into TBom_Deta(m_id,seq,materiel_code,unitcode,base_quantity,loss_quantity,total_quantity,idchildbom)
                            values(@m_id,@seq,@materiel_code,@unitcode,@base_quantity,@loss_quantity,@total_quantity,@idchildbom)";
                            string detailUpdateSql = @"update TBom_Deta set idchildbom=@idchildbom where materiel_code=@materiel_code";
                            //查询当前父件物料+版本号是否存在
                            sql = @"select *  from TBom_Main where  materiel_code=@materiel_code and version=@version";
                            dynamicParams.Add("@materiel_code", bom.materiel_code);
                            dynamicParams.Add("@Version", bom.version);
                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data0.Rows.Count > 0)
                            {
                                mes.code = "300";
                                mes.count = 0;
                                mes.message = "同一物料版本号有重复!";
                                mes.data = null;
                                return mes;
                            }
                            //查询当前父件物料是否存在
                            sql = @"select *  from TBom_Main where materiel_code=@materiel_code";
                            dynamicParams.Add("@materiel_code", bom.materiel_code);
                            var data1 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data1.Rows.Count > 0)  //存在当前物料的其他版本BOM
                            {
                                if (bom.isdefaultbom == "1") //默认Bom为:是
                                {
                                    //更新物料清单对应其他非此版本的是否默认BOM
                                    var updateversionParam = new DynamicParameters();
                                    updateversionParam.Add("@materiel_code", bom.materiel_code);
                                    conn.Execute(masterUpdateversionSql, updateversionParam, transaction);
                                }
                            }
                            else
                            {
                                if (bom.isdefaultbom == "0") //默认Bom为:否
                                {
                                    mes.code = "300";
                                    mes.count = 0;
                                    mes.message = "一个产品只能有一个且必须有一个默认BOM!";
                                    mes.data = null;
                                    return mes;
                                }
                            }
                            // æ’入主表并获取新插入的ID
                            var masterParam = new DynamicParameters();
                            masterParam.Add("@materiel_code", bom.materiel_code);
                            masterParam.Add("@unitcode", bom.unitcode);
                            masterParam.Add("@bomdepth", bom.bomdepth);
                            masterParam.Add("@isdefaultbom", bom.isdefaultbom);
                            masterParam.Add("@quantity", bom.quantity);
                            masterParam.Add("@status", bom.status);
                            masterParam.Add("@startdate", bom.startdate);
                            masterParam.Add("@version", bom.version);
                            masterParam.Add("@lm_user", us.usercode);
                            masterParam.Add("@lm_date", DateTime.Now);
                            int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
                            // æ’入子表
                            foreach (var detail in bom.children)
                            {
                                var detailParam = new DynamicParameters();
                                detailParam.Add("@m_id", masterId);
                                detailParam.Add("@seq", detail.seq);
                                detailParam.Add("@materiel_code", detail.materiel_code);
                                detailParam.Add("@unitcode", detail.unitcode);
                                detailParam.Add("@base_quantity", detail.base_quantity);
                                detailParam.Add("@loss_quantity", detail.loss_quantity);
                                detailParam.Add("@total_quantity", detail.total_quantity);
                                detailParam.Add("@idchildbom", string.IsNullOrEmpty(detail.idchildbom) ? null : detail.idchildbom);
                                conn.Execute(detailInsertSql, detailParam, transaction);
                            }
                            //更新子表idchildbom
                            var detailUpdateParam = new DynamicParameters();
                            detailUpdateParam.Add("@idchildbom", masterId);
                            detailUpdateParam.Add("@materiel_code", bom.materiel_code);
                            conn.Execute(detailUpdateSql, detailUpdateParam, transaction);
                            // æ‰€æœ‰æ’入成功,提交事务
                            transaction.Commit();
                            //更新Bom层级
                            var bomdepthParam = new DynamicParameters();
                            bomdepthParam.Add("@bomId", masterId);
                            bomdepthParam.Add("@isAllFlag", 1);
                            var dt = DapperHelper.selectProcedure("AA_SP_UpdateBomDepth", bomdepthParam);
                            mes.code = "200";
                            mes.count = 0;
                            mes.message = "新增操作成功!";
                            mes.data = null;
                            //写入操作记录表
                            LogHelper.DbOperateLog(us.usercode, "新增", "新增了物料清单:" + bom.materiel_code + ",版本号为:" + bom.version, us.usertype);
                        }
                        if (operType == "Update")
                        {
                            // å‡è®¾ä½ å·²ç»æœ‰äº†æ’入的SQL语句
                            string masterUpdateversionSql = @"update TBom_Main set isdefaultbom='0' where materiel_code=@materiel_code and id<>@id";
                            string detailInsertSql = @"insert into TBom_Deta(m_id,seq,materiel_code,unitcode,base_quantity,loss_quantity,total_quantity,idchildbom)
                            values(@m_id,@seq,@materiel_code,@unitcode,@base_quantity,@loss_quantity,@total_quantity,@idchildbom)";
                            string detailUpdateSql = @"update TBom_Deta set seq=@seq,materiel_code=@materiel_code,base_quantity=@base_quantity,loss_quantity=@loss_quantity,
                            total_quantity=@total_quantity,unitcode=@unitcode,idchildbom=@idchildbom where materiel_code=@materiel_code and m_id=@m_id";
                            string detailDeleteSql = @"delete TBom_Deta  where materiel_code=@materiel_code and m_id=@m_id";
                            string masterUpdateSql = @"update TBom_Main set materiel_code=@materiel_code,unitcode=@unitcode,quantity=@quantity,status=@status,startdate=@startdate,
                                version=@version,isdefaultbom=@isdefaultbom,lm_user=@lm_user,lm_date=@lm_date where materiel_code=@materiel_code  and id=@ID";
                            //查询当前父件物料+版本号是否存在
                            sql = @"select *  from TBom_Main where  materiel_code=@materiel_code and version=@version and id=@ID";
                            dynamicParams.Add("@ID", bom.id);
                            dynamicParams.Add("@materiel_code", bom.materiel_code);
                            dynamicParams.Add("@version", bom.version);
                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data0.Rows.Count > 0 && data0.Rows.Count > 1)
                            {
                                mes.code = "300";
                                mes.count = 0;
                                mes.message = "同一物料版本号有重复!";
                                mes.data = null;
                                return mes;
                            }
                            //根据Bomid查询是否被工单引用
                            sql = @"select *  from TK_Wrk_Man where  bom_id=@bom_id";
                            dynamicParams.Add("@bom_id", bom.id);
                            var data_1 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data_1.Rows.Count > 0)
                            {
                                mes.code = "300";
                                mes.count = 0;
                                mes.message = "修改前BOM已经被工单引用,不可修改!";
                                mes.data = null;
                                return mes;
                            }
                            //查询当前父件物料非此版本是否存在
                            sql = @"select *  from TBom_Main where materiel_code=@materiel_code";
                            dynamicParams.Add("@materiel_code", bom.materiel_code);
                            var data1 = DapperHelper.selectdata(sql, dynamicParams);
                            if (data1.Rows.Count > 0)  //存在当前物料的其他版本BOM
                            {
                                // ä½¿ç”¨LINQ查询DataTable
                                var BomDefault = from row in data1.AsEnumerable()
                                                 where row.Field<int>("isdefaultbom") == 1
                                                 select row;
                                // æ£€æŸ¥æ˜¯å¦æœ‰ç»“æžœ
                                if (BomDefault.Any())
                                {
                                    if (bom.isdefaultbom == "1") //默认Bom为:是
                                    {
                                        //更新物料清单对应其他非此版本的是否默认BOM
                                        var updateversionParam = new DynamicParameters();
                                        updateversionParam.Add("@materiel_code", bom.materiel_code);
                                        updateversionParam.Add("@id", bom.id);
                                        conn.Execute(masterUpdateversionSql, updateversionParam, transaction);
                                    }
                                    else
                                    {
                                        if (bom.isdefaultbom == "0") //默认Bom为:是
                                        {
                                            mes.code = "300";
                                            mes.count = 0;
                                            mes.message = "一个产品只能有一个且必须有一个默认BOM!";
                                            mes.data = null;
                                            return mes;
                                        }
                                    }
                                }
                                else
                                {
                                    if (bom.isdefaultbom == "0") //默认Bom为:是
                                    {
                                        mes.code = "300";
                                        mes.count = 0;
                                        mes.message = "一个产品只能有一个且必须有一个默认BOM!";
                                        mes.data = null;
                                        return mes;
                                    }
                                }
                            }
                            else
                            {
                                if (bom.isdefaultbom == "0") //默认Bom为:否
                                {
                                    mes.code = "300";
                                    mes.count = 0;
                                    mes.message = "一个产品只能有一个且必须有一个默认BOM!";
                                    mes.data = null;
                                    return mes;
                                }
                            }
                            //通过父件id查找子件信息
                            sql = @"select *   from TBom_Deta where  m_id=@m_id";
                            dynamicParams.Add("@m_id", bom.id);
                            var list2 = DapperHelper.select<BomDateSub>(sql, dynamicParams);
                            // ä½¿ç”¨LINQ的GroupJoin来找出差异
                            var query = from item1 in bom.children
                                        join item2 in list2 on new { item1.m_id, item1.materiel_code }
                                        equals new { item2.m_id, item2.materiel_code } into gj
                                        from subitem in gj.DefaultIfEmpty()
                                        select new { Item1 = item1, Item2 = subitem };
                            var toAdd = query.Where(q => q.Item2 == null).Select(q => q.Item1).ToList();
                            var toUpdate = query.Where(q => q.Item2 != null && q.Item1.m_id == q.Item2.m_id && q.Item1.materiel_code == q.Item2.materiel_code).Select(q => q.Item1).ToList();
                            var toDelete = list2
                                .Where(item2 => !bom.children.Any(item1 =>
                                    item1.m_id == item2.m_id &&
                                    item1.materiel_code == item2.materiel_code
                                    ))
                                .ToList();
                            //新增
                            for (int i = 0; i < toAdd.Count; i++)
                            {
                                //写入物料清单子表
                                var detailParam = new DynamicParameters();
                                detailParam.Add("@m_id", toAdd[i].m_id);
                                detailParam.Add("@seq", toAdd[i].seq);
                                detailParam.Add("@materiel_code", toAdd[i].materiel_code);
                                detailParam.Add("@unitcode", toAdd[i].unitcode);
                                detailParam.Add("@base_quantity", toAdd[i].base_quantity);
                                detailParam.Add("@loss_quantity", toAdd[i].loss_quantity);
                                detailParam.Add("@total_quantity", toAdd[i].total_quantity);
                                detailParam.Add("@idchildbom", string.IsNullOrEmpty(toAdd[i].idchildbom) ? null : toAdd[i].idchildbom);
                                conn.Execute(detailInsertSql, detailParam, transaction);
                            }
                            //更新
                            for (int i = 0; i < toUpdate.Count; i++)
                            {
                                //更新物料清单子表
                                var detailUpdateParam = new DynamicParameters();
                                detailUpdateParam.Add("@m_id", toUpdate[i].m_id);
                                detailUpdateParam.Add("@seq", toUpdate[i].seq);
                                detailUpdateParam.Add("@materiel_code", toUpdate[i].materiel_code);
                                detailUpdateParam.Add("@unitcode", toUpdate[i].unitcode);
                                detailUpdateParam.Add("@base_quantity", toUpdate[i].base_quantity);
                                detailUpdateParam.Add("@loss_quantity", toUpdate[i].loss_quantity);
                                detailUpdateParam.Add("@total_quantity", toUpdate[i].total_quantity);
                                detailUpdateParam.Add("@idchildbom", string.IsNullOrEmpty(toUpdate[i].idchildbom) ? null : toUpdate[i].idchildbom);
                                conn.Execute(detailUpdateSql, detailUpdateParam, transaction);
                            }
                            //删除
                            for (int i = 0; i < toDelete.Count; i++)
                            {
                                //删除物料清单子表
                                var detailDeleteParam = new DynamicParameters();
                                detailDeleteParam.Add("@materiel_code", toDelete[i].materiel_code);
                                detailDeleteParam.Add("@m_id", toDelete[i].m_id);
                                conn.Execute(detailDeleteSql, detailDeleteParam, transaction);
                            }
                            //更新物料清单主表
                            var masterUpdateParam = new DynamicParameters();
                            masterUpdateParam.Add("@ID", bom.id);
                            masterUpdateParam.Add("@materiel_code", bom.materiel_code);
                            masterUpdateParam.Add("@unitcode", bom.unitcode);
                            masterUpdateParam.Add("@quantity", bom.quantity);
                            masterUpdateParam.Add("@status", bom.status);
                            masterUpdateParam.Add("@startdate", bom.startdate);
                            masterUpdateParam.Add("@version", bom.version);
                            masterUpdateParam.Add("@isdefaultbom", bom.isdefaultbom);
                            masterUpdateParam.Add("@lm_user", us.usercode);
                            masterUpdateParam.Add("@lm_date", DateTime.Now);
                            conn.Execute(masterUpdateSql, masterUpdateParam, transaction);
                            // æ‰€æœ‰æ’入成功,提交事务
                            transaction.Commit();
                            //更新Bom层级
                            var bomdepthParam = new DynamicParameters();
                            bomdepthParam.Add("@bomId", bom.id);
                            bomdepthParam.Add("@isAllFlag", 1);
                            var dt = DapperHelper.selectProcedure("AA_SP_UpdateBomDepth", bomdepthParam);
                            mes.code = "200";
                            mes.count = 0;
                            mes.message = "修改操作成功!";
                            mes.data = null;
                            //写入操作记录表
                            LogHelper.DbOperateLog(us.usercode, "修改", "修改了物料清单:" + bom.materiel_code + ",版本号为:" + bom.version, us.usertype);
                        }
                    }
                    catch (Exception e)
                    {
                        // æ•获异常,回滚事务
                        transaction.Rollback();
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = e.Message;
                        mes.data = null;
                    }
                }
            }
            return mes;
        }
        #endregion
        #region[物料清单删除提交-T+畅捷通模式]
        public static ToMessage TBomDelete(BomDate bom, User us)
        {
            throw new NotImplementedException();
        }
        #endregion
        #region[工单产品信息下拉框查询]
        public static ToMessage PartSelect()
        {
VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
@@ -72,11 +72,6 @@
                    dynamicParams.Add("@opendate", opendate + " 00:00:00");
                    dynamicParams.Add("@closedate", closedate + " 23:59:59");
                }
                if (search == "")
                {
                    search = "and 1=1 ";
                }
                search = search.Substring(3);//截取索引2后面的字符
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select top 100 percent AA.saleOrderCode,AA.m_po,AA.wkshp_code,AA.wkshp_name,AA.wo_code,AA.status,AA.lm_date,
@@ -99,7 +94,7 @@
                                 left join TMateriel_Info P on W.materiel_code=p.partcode
                                 left join  TOrganization F on W.wkshp_code=F.torg_code
                                 group by E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name,W.status,W.lm_date,P.partcode,P.partname,P.partspec,W.plan_qty
                            ) as AA where " + search;
                            ) as AA where AA.concat_name is not null " + search;
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
                mes.message = "查询成功!";
@@ -170,11 +165,6 @@
                    dynamicParams.Add("@opendate", opendate + " 00:00:00");
                    dynamicParams.Add("@closedate", closedate + " 23:59:59");
                }
                if (search == "")
                {
                    search = "and 1=1 ";
                }
                search = search.Substring(3);//截取索引2后面的字符
                // --------------查询指定数据--------------
                var total = 0; //总条数
@@ -200,7 +190,7 @@
                                 left join  TOrganization F on W.wkshp_code=F.torg_code
                                 group by E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name,W.status,W.lm_date,P.partcode,P.partname,P.partspec,W.plan_qty
                            ) as AA
                            where " + search;
                            where AA.concat_name is not null " + search;
                DataTable data = DapperHelper.selectdata(sql, dynamicParams);
                data.TableName = "Table"; //设置DataTable的名称
                string msg = DownLoad.DataTableToExcel(data, "生产进度报表");
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订单查询]
@@ -808,7 +809,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 +822,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 +835,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
@@ -872,216 +873,255 @@
            string sql = "", route_code = "";
            var dynamicParams = new DynamicParameters();
            List<object> list = new List<object>();
            try
            using (var conn = new SqlConnection(sqlServerConnectString))
            {
                dynamic dynObj = JObject.Parse(us.mesSetting);
                bool route = dynObj.route;
                if (route) //工艺路线版
                conn.Open();
                using (var transaction = conn.BeginTransaction())
                {
                    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)
                    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
                                    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  //是否关联工序
                                }
                            });
                            // å‡è®¾ä½ å·²ç»æœ‰äº†æ’入主表和子表的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)
                                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)";
                            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)";
                            // æ’入工单表
                            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);//是否关联工序
                            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);
                                }
                            }
                            // æ‰€æœ‰æ’入成功,提交事务
                            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
                            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 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 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);//是否关联工序
                            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);
                            //写入工单工序表
                            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);
                                }
                            }
                            //判断源头单据是否来源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);
                        }
                    }
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    catch (Exception e)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了工单:" + json.wocode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "修改操作成功!";
                        mes.data = null;
                    }
                    else
                    {
                        // æ•获异常,回滚事务
                        transaction.Rollback();
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = "修改操作失败!";
                        mes.message = e.Message;
                        mes.data = null;
                    }
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
@@ -1121,6 +1161,15 @@
                            sql = @"update TKimp_Ewo set status='CREATING',relse_qty=relse_qty-@orderqty  where wo=@m_po and id=@souceid";
                            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";
@@ -1176,6 +1225,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 +1233,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 +1247,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 +1267,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 +1282,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 +1295,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 +1315,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 +1327,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)
VueWebCoreApi/Models/Bom/BomDate.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace VueWebCoreApi.Models.Bom
{
    public class BomDate
    {
        /// <summary>
        /// æŽ’序序号
        /// </summary>
        public string rowNum { get; set; }
        /// <summary>
        /// ä¸»é”®ID
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// çˆ¶ä»¶ç¼–码
        /// </summary>
        public string materiel_code { get; set; }
        /// <summary>
        /// çˆ¶ä»¶åç§°
        /// </summary>
        public string materiel_name { get; set; }
        /// <summary>
        /// çˆ¶ä»¶è§„æ ¼
        /// </summary>
        public string materiel_spec { get; set; }
        /// <summary>
        /// å­˜è´§ç±»åž‹ç¼–码
        /// </summary>
        public string materiel_typecode { get; set; }
        /// <summary>
        /// å­˜è´§ç±»åž‹åç§°
        /// </summary>
        public string materiel_typename { get; set; }
        /// <summary>
        /// è®¡é‡å•位编码
        /// </summary>
        public string unitcode { get; set; }
        /// <summary>
        /// è®¡é‡å•位名称
        /// </summary>
        public string unitname { get; set; }
        /// <summary>
        /// åŸºç¡€ç”¨é‡
        /// </summary>
        public string quantity { get; set; }
        /// <summary>
        /// å¯ç”¨çŠ¶æ€:Y/N
        /// </summary>
        public string status { get; set; }
        /// <summary>
        /// å¯ç”¨æ—¥æœŸ
        /// </summary>
        public string startdate { get; set; }
        /// <summary>
        /// ç‰ˆæœ¬å·
        /// </summary>
        public string version { get; set; }
        /// <summary>
        /// æ˜¯å¦é»˜è®¤BOM:0(否)1(是)
        /// </summary>
        public string isdefaultbom { get; set; }
        /// <summary>
        /// Bom层级
        /// </summary>
        public string bomdepth { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string lm_user { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public string lm_date { get; set; }
        public List<BomDateSub> children { get; set; }
    }
    public class BomDateSub
    {
        /// <summary>
        /// ä¸»é”®ID
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// çˆ¶ä»¶ID
        /// </summary>
        public string m_id { get; set; }
        /// <summary>
        /// å­ä»¶åºå·
        /// </summary>
        public string seq { get; set; }
        /// <summary>
        /// å­ä»¶ç¼–码
        /// </summary>
        public string materiel_code { get; set; }
        /// <summary>
        /// å­ä»¶åç§°
        /// </summary>
        public string materiel_name { get; set; }
        /// <summary>
        /// å­ä»¶è§„æ ¼
        /// </summary>
        public string materiel_spec { get; set; }
        /// <summary>
        /// è®¡é‡å•位编码
        /// </summary>
        public string unitcode { get; set; }
        /// <summary>
        /// åŸºæœ¬ç”¨é‡
        /// </summary>
        public string base_quantity { get; set; }
        /// <summary>
        /// æŸè€—率
        /// </summary>
        public string loss_quantity { get; set; }
        /// <summary>
        /// å®žé™…用量
        /// </summary>
        public string total_quantity { get; set; }
        /// <summary>
        /// å­ä»¶bomid(对应自己的Bom主表id)
        /// </summary>
        public string idchildbom { get; set; }
    }
}
VueWebCoreApi/Models/MaterialCraftsSave.cs
@@ -64,6 +64,10 @@
        /// </summary>
        public string eqp_name { get; set; }
        /// <summary>
        /// å¯ç”¨çŠ¶æ€:Y/N
        /// </summary>
        public string enable { get; set; }
        /// <summary>
        /// è®¾å¤‡èŠ‚æ‹
        /// </summary>
        public string eqp_value { get; set; }
VueWebCoreApi/Models/WorkData/WorkList.cs
@@ -32,6 +32,10 @@
        /// </summary>
        public string partcode { get; set; }
        /// <summary>
        /// Bomid
        /// </summary>
        public string bomid { get; set; }
        /// <summary>
        /// å·¥è‰ºè·¯çº¿ç¼–码
        /// </summary>
        public string routecode { get; set; }
@@ -72,6 +76,10 @@
    public class WorkListSub
    {
        /// <summary>
        /// å·¥åºä»»åŠ¡ID
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// å·¥åºåºå·
        /// </summary>
        public string stepseq { get; set; }
@@ -82,7 +90,7 @@
        /// <summary>
        /// ç”Ÿäº§å•ä»·
        /// </summary>
        public string stepprice { get; set; }
        public string unprice { get; set; }
        /// <summary>
        /// æ˜¯å¦é¦–道工序
        /// </summary>
@@ -91,5 +99,17 @@
        /// æ˜¯å¦æœ«é“工序
        /// </summary>
        public string isend { get; set; }
        public List<WorkEqpListSub> WorkEqpListSub { get; set; }
    }
    public class WorkEqpListSub
    {
        /// <summary>
        /// è®¾å¤‡ç¼–码
        /// </summary>
        public string eqpcode { get; set; }
        /// <summary>
        /// ç”Ÿäº§å•ä»·
        /// </summary>
        public string unprice { get; set; }
    }
}
VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs
@@ -34,7 +34,7 @@
        /// <summary>
        /// å·¥åºå·¥ä»·
        /// </summary>
        public string stepprice { get; set; }
        public string unprice { get; set; }
        /// <summary>
        /// å·²ç”Ÿäº§æ•°é‡
        /// </summary>
@@ -80,9 +80,13 @@
        /// </summary>
        public string eqp_name { get; set; }
        /// <summary>
        /// æ˜¯å¦å¯ç”¨:Y/N
        /// </summary>
        public string enable { get; set; }
        /// <summary>
        /// è®¾å¤‡å·¥ä»·
        /// </summary>
        public string eqp_price { get; set; }
        public string unprice { get; set; }
        /// <summary>
        /// åˆæ ¼æ•°é‡
        /// </summary>
VueWebCoreApi/Tools/DapperHelper.cs
@@ -214,6 +214,42 @@
            }
        }
        public static List<T> GetPageListData<T>(string sql, Object parm, string orderBy, string sort, int pageIndex, int pageSize, out int total)
        {
            List<T> list = null;
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("SELECT COUNT(1) FROM ({0}) AS Result;", sql);
            sb.AppendFormat(@"SELECT *
                        FROM(SELECT *,ROW_NUMBER() OVER(ORDER BY {1} {2}) AS rowNum
                             FROM  ({0}) AS Temp) AS Result
                        WHERE  rowNum >= {3} AND rowNum <= {4}
                        ORDER BY {1} {2}", sql, orderBy, sort, pageIndex, pageSize);  //skip, pageIndex * pageSize
            using (IDbConnection conn = sqlConnection())
            {
                try
                {
                    using (var reader = conn.QueryMultiple(sb.ToString(), parm))
                    {
                        total = reader.ReadFirst<int>();
                        list = reader.Read<T>().ToList();
                    }
                }
                catch (Exception ex)
                {
                    //创建日志记录组件实例
                    LogHelper.WriteLog(ex);
                    throw ex;
                }
                finally
                {
                    conn.Dispose();
                    conn.Close();
                }
            }
            return list;
        }
        /// <summary>
        /// dapper通用分页函数