1.修改接口:UpdateMesOrderStepSearch   --工单派发
2.修改接口:MesOrderNewStepContent --工单派发
3.修改接口:RouteSelectStep--工单派发
4.新增组织架构类型接口:TOrganTypeDate
5.新增组织架构车间接口:TorgWkshop
6.新增车间查找设备接口:WkshopEqpPermissions
7.新增往来单位基础资料接口:CustomerTypePermissions
8.新增往来单位类型查找往来单位资料接口:CustomerTypeSearchPermissions
9.新增工序关联工作站接口
10.修改工序工价提交接口(增加了设备)
已添加2个文件
已修改14个文件
1455 ■■■■■ 文件已修改
VueWebCoreApi/Controllers/BasicSettingController.cs 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/GeneralBasicDataController.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/BLL/BasicSettingBLL.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs 635 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/ProductModelDAL.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/ProductionManagementDAL.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs 163 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/MaterialCraftsSave.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/TFlw_Rteqp.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Tools/ExcelList.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Tools/ImportExcelData.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Tools/SchedulingMethod.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/wwwroot/Excel/工序设置.xls 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/BasicSettingController.cs
@@ -31,14 +31,15 @@
        /// </summary>
        /// <param name="storg_code">组织编码</param>
        /// <param name="storg_name">组织名称</param>
        /// <param name="torgtype_code">组织类型编码</param>
        /// <returns></returns>
        [Route(template: "STorgData")]
        [HttpGet]
        public JsonResult STorgData(string storg_code, string storg_name)
        public JsonResult STorgData(string storg_code, string storg_name,string torgtype_code)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = BasicSettingBLL.STorgData(storg_code, storg_name);
            mes = BasicSettingBLL.STorgData(storg_code, storg_name, torgtype_code);
            return Json(mes);
        }
        #endregion
@@ -60,10 +61,11 @@
            string leve = obj["leve"].ToString(); //层级编码
            string parent_id = obj["parent_id"].ToString(); //parent_id
            string storgcode = obj["storgcode"].ToString(); //所属组织编码
            string torgtype_code = obj["torgtype_code"].ToString(); //组织类型编码
            string torg_seq = obj["torg_seq"].ToString(); //排序序号
            string status = obj["status"].ToString(); //状态
            string OperType = obj["OperType"].ToString();  //操作类型
            mes = BasicSettingBLL.AddUpdateOrganization(OrganCode, OrganName, leve, parent_id, storgcode, torg_seq, status, OperType, us);
            mes = BasicSettingBLL.AddUpdateOrganization(OrganCode, OrganName, leve, parent_id, storgcode, torgtype_code, torg_seq, status, OperType, us);
            return Json(mes);
        }
        #endregion
@@ -881,22 +883,16 @@
        /// <summary>
        /// å·¥åºæ–°å¢žç¼–辑
        /// </summary>
        /// <param name="obj">提交数据对象</param>
        /// <param name="OperType">操作类型:Add/Update</param>
        /// <param name="tflw_rteqp">提交数据</param>
        /// <returns></returns>
        [Route(template: "AddUpdateStep")]
        [HttpPost]
        public JsonResult AddUpdateStep([FromBody] JObject obj)
        public JsonResult AddUpdateStep(string OperType, TFlw_Rteqp tflw_rteqp)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            string stepid = obj["id"].ToString();    //工序id(主键)
            string stepcode = obj["stepcode"].ToString(); //工序编码
            string stepname = obj["stepname"].ToString(); //工序名称
            string steptypecode = obj["steptypecode"].ToString(); //工序类型编码
            string enable = obj["enable"].ToString();           //启用状态
            string description = obj["description"].ToString(); //工序描述
            string OperType = obj["OperType"].ToString();  //操作类型
            mes = BasicSettingBLL.AddUpdateStep(stepid, stepcode, stepname, steptypecode, enable, description, us, OperType);
            mes = BasicSettingBLL.AddUpdateStep(OperType, us, tflw_rteqp);
            return Json(mes);
        }
        #endregion
@@ -914,6 +910,41 @@
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = BasicSettingBLL.DeleteStep(stepcode, us);
            return Json(mes);
        }
        #endregion
        #region[工序定义关联工作站查询]
        /// <summary>
        /// å·¥åºå®šä¹‰å…³è”工作站查询
        /// </summary>
        /// <param name="stepcode">工序编码</param>
        /// <returns></returns>
        [Route(template: "StepAssociationEqp")]
        [HttpGet]
        public JsonResult StepAssociationEqp(string stepcode)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = BasicSettingBLL.StepAssociationEqp(stepcode, us);
            return Json(mes);
        }
        #endregion
        #region [工序定义关联工作站提交]
        /// <summary>
        /// å·¥åºå®šä¹‰å…³è”工作站提交
        /// </summary>
        /// <param name="stepcode">工序编码</param>
        /// <param name="json">提交数据</param>
        /// <returns></returns>
        [Route(template: "SaveStepAssociationEqp")]
        [HttpPost]
        public JsonResult SaveStepAssociationEqp(string stepcode, List<ObjectData> json)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = BasicSettingBLL.SaveStepAssociationEqp(stepcode, us, json);
            return Json(mes);
        }
        #endregion
@@ -961,7 +992,6 @@
        [HttpGet]
        public JsonResult RouteSelectStep(string partcode,string routecode)
        {
            mes = BasicSettingBLL.RouteSelectStep(partcode, routecode);
            return Json(mes);
        }
VueWebCoreApi/Controllers/GeneralBasicDataController.cs
@@ -17,6 +17,20 @@
        ToMessage mes = new ToMessage();
        RedisCommon redis = new RedisCommon();
        #region[组织架构类型资料]
        /// <summary>
        /// ç»„织架构类型资料
        /// </summary>
        /// <returns></returns>
        [Route(template: "TOrganTypeDate")]
        [HttpGet]
        public JsonResult TOrganTypeDate()
        {
            mes = GeneralBasicDataBLL.TOrganTypeDate();
            return Json(mes);
        }
        #endregion
        #region[组织架构基础资料]
        /// <summary>
        /// ç»„织架构基础资料
@@ -41,6 +55,20 @@
        public JsonResult PrentOrganizationNoCompany()
        {
            mes = GeneralBasicDataBLL.PrentOrganizationNoCompany();
            return Json(mes);
        }
        #endregion
        #region[组织架构车间基础资料]
        /// <summary>
        /// ç»„织架构车间基础资料
        /// </summary>
        /// <returns></returns>
        [Route(template: "TorgWkshop")]
        [HttpGet]
        public JsonResult TorgWkshop()
        {
            mes = GeneralBasicDataBLL.TorgWkshop();
            return Json(mes);
        }
        #endregion
@@ -183,6 +211,21 @@
        }
        #endregion
        #region[车间查找设备基础资料]
        /// <summary>
        /// è½¦é—´æŸ¥æ‰¾è®¾å¤‡åŸºç¡€èµ„æ–™
        /// </summary>
        /// <param name="wkshopcode">车间编码字符串集合</param>
        /// <returns></returns>
        [Route(template: "WkshopEqpPermissions")]
        [HttpGet]
        public JsonResult WkshopEqpPermissions(string wkshopcode)
        {
            mes = GeneralBasicDataBLL.WkshopEqpPermissions(wkshopcode);
            return Json(mes);
        }
        #endregion
        #region[设备类型编码查找设备信息]
        /// <summary>
        /// è®¾å¤‡ç±»åž‹ç¼–码查找设备信息
@@ -265,6 +308,20 @@
        }
        #endregion
        #region[往来单位类型基础资料]
        /// <summary>
        /// å¾€æ¥å•位类型基础资料
        /// </summary>
        /// <returns></returns>
        [Route(template: "CustomerTypePermissions")]
        [HttpGet]
        public JsonResult CustomerTypePermissions()
        {
            mes = GeneralBasicDataBLL.CustomerTypePermissions();
            return Json(mes);
        }
        #endregion
        #region[往来单位基础资料]
        /// <summary>
        /// å¾€æ¥å•位基础资料
@@ -279,6 +336,21 @@
        }
        #endregion
        #region[往来单位类型查找往来单位基础资料]
        /// <summary>
        /// å¾€æ¥å•位类型查找往来单位基础资料
        /// </summary>
        /// <param name="customertypecode">往来单位类型编码字符串集</param>
        /// <returns></returns>
        [Route(template: "CustomerTypeSearchPermissions")]
        [HttpGet]
        public JsonResult CustomerTypeSearchPermissions(string customertypecode)
        {
            mes = GeneralBasicDataBLL.CustomerTypeSearchPermissions(customertypecode);
            return Json(mes);
        }
        #endregion
        #region[存货树型基础资料]
        /// <summary>
        /// å­˜è´§æ ‘型基础资料
VueWebCoreApi/DLL/BLL/BasicSettingBLL.cs
@@ -49,16 +49,16 @@
        #region[组织架构,查询组织信息]
        public static ToMessage STorgData(string storg_code, string storg_name)
        public static ToMessage STorgData(string storg_code, string storg_name,string torgtype_code)
        {
            return BasicSettingDAL.STorgData(storg_code, storg_name);
            return BasicSettingDAL.STorgData(storg_code, storg_name, torgtype_code);
        }
        #endregion
        #region [组织架构新增编辑]
        public static ToMessage AddUpdateOrganization(string OrganCode, string OrganName, string leve, string parent_id,string storgcode, string torg_seq, string status, string OperType, User us)
        public static ToMessage AddUpdateOrganization(string OrganCode, string OrganName, string leve, string parent_id,string storgcode,string torgtype_code, string torg_seq, string status, string OperType, User us)
        {
            return BasicSettingDAL.AddUpdateOrganization(OrganCode, OrganName, leve, parent_id, storgcode, torg_seq, status, OperType, us);
            return BasicSettingDAL.AddUpdateOrganization(OrganCode, OrganName, leve, parent_id, storgcode, torgtype_code, torg_seq, status, OperType, us);
        }
        #endregion
@@ -350,9 +350,9 @@
        #endregion
        #region[工序新增编辑]
        public static ToMessage AddUpdateStep(string stepid, string stepcode, string stepname, string steptypecode, string enable, string description, User us, string operType)
        public static ToMessage AddUpdateStep(string operType, User us, TFlw_Rteqp tflw_rteqp)
        {
            return BasicSettingDAL.AddUpdateStep(stepid,stepcode, stepname, steptypecode, enable, description, us, operType);
            return BasicSettingDAL.AddUpdateStep(operType,us, tflw_rteqp);
        }
        #endregion
@@ -363,6 +363,20 @@
        }
        #endregion
        #region[工序定义关联工作站查询]
        public static ToMessage StepAssociationEqp(string stepcode,User us)
        {
            return BasicSettingDAL.StepAssociationEqp(stepcode, us);
        }
        #endregion
        #region [工序定义关联工作站提交]
        public static ToMessage SaveStepAssociationEqp(string stepcode, User us, List<ObjectData> json)
        {
            return BasicSettingDAL.SaveStepAssociationEqp(stepcode, us, json);
        }
        #endregion
        #region[节拍工价,产品信息查询]
        public static ToMessage PartSelect()
VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
@@ -9,6 +9,12 @@
{
    public class GeneralBasicDataBLL
    {
        #region[组织架构类型资料]
        public static ToMessage TOrganTypeDate()
        {
            return GeneralBasicDataDAL.TOrganTypeDate();
        }
        #endregion
        #region [组织架构查找]
        public static ToMessage PrentOrganization()
@@ -21,6 +27,13 @@
        public static ToMessage PrentOrganizationNoCompany()
        {
            return GeneralBasicDataDAL.PrentOrganizationNoCompany();
        }
        #endregion
        #region[组织架构车间基础资料]
        public static ToMessage TorgWkshop()
        {
            return GeneralBasicDataDAL.TorgWkshop();
        }
        #endregion
@@ -95,6 +108,13 @@
        }
        #endregion
        #region[车间查找设备基础资料]
        public static ToMessage WkshopEqpPermissions(string wkshopcode)
        {
            return GeneralBasicDataDAL.WkshopEqpPermissions(wkshopcode);
        }
        #endregion
        #region[设备类型编码查找设备信息]
        public static ToMessage EqpTypecodeSeachEqpPermissions(string eqptypecode)
        {
@@ -137,6 +157,13 @@
        }
        #endregion
        #region[往来单位类型基础资料]
        public static ToMessage CustomerTypePermissions()
        {
            return GeneralBasicDataDAL.CustomerTypePermissions();
        }
        #endregion
        #region[往来单位基础资料]
        public static ToMessage CustomerPermissions()
        {
@@ -144,6 +171,13 @@
        }
        #endregion
        #region[往来单位类型查找往来单位基础资料]
        public static ToMessage CustomerTypeSearchPermissions(string customertypecode)
        {
            return GeneralBasicDataDAL.CustomerTypeSearchPermissions(customertypecode);
        }
        #endregion
        #region[存货树型基础资料]
        public static ToMessage InventoryTreePermissions()
        {
VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
@@ -249,12 +249,17 @@
        #region[组织架构,查询组织信息]
        public static ToMessage STorgData(string storg_code, string storg_name)
        public static ToMessage STorgData(string storg_code, string storg_name,string torgtype_code)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (torgtype_code != "" && torgtype_code != null)
                {
                    search += "and T.torgtype_code=@torgtype_code ";
                    dynamicParams.Add("@torgtype_code", torgtype_code);
                }
                if (storg_code != "" && storg_code != null)
                {
                    search += "and T.torg_code like '%'+@storg_code+'%' ";
@@ -265,9 +270,10 @@
                    search += "and T.torg_name like '%'+@storg_name+'%' ";
                    dynamicParams.Add("@storg_name", storg_name);
                }
                var sql = @"select T.id,T.parent_id,T.torg_code,T.torg_name,T.status,T.leve,T.torg_seq,
                var sql = @"select T.id,T.parent_id,T.torg_code,T.torg_name,T.torgtype_code,Y.torgtype_name,T.status,T.leve,T.torg_seq,
                            T.lm_user  as usercode,U.username,T.lm_date  
                            from TOrganization T
                            left join TOrganType Y on T.torgtype_code=Y.torgtype_code
                            left join  TUser U on T.lm_user=U.usercode
                            where 1=1" + search + " order by T.lm_date desc";
                var data = DapperHelper.selectdata(sql, dynamicParams);
@@ -288,7 +294,7 @@
        #endregion
        #region[新增编辑组织架构]
        public static ToMessage AddUpdateOrganization(string OrganCode, string OrganName, string leve, string parent_id, string storgcode, string torg_seq, string status, string OperType, User us)
        public static ToMessage AddUpdateOrganization(string OrganCode, string OrganName, string leve, string parent_id, string storgcode,string torgtype_code, string torg_seq, string status, string OperType, User us)
        {
            string sql = "";
            List<object> list = new List<object>();
@@ -309,8 +315,8 @@
                        return mes;
                    }
                    sql = @"insert into TOrganization(parent_id,torg_code,torg_name,status,leve,torg_seq,lm_user,lm_date)
                            values(@parent_id,@torg_code,@torg_name,@status,@leve,@torg_seq,@lm_user,@lm_date)";
                    sql = @"insert into TOrganization(parent_id,torg_code,torg_name,torgtype_code,status,leve,torg_seq,lm_user,lm_date)
                            values(@parent_id,@torg_code,@torg_name,@torgtype_code,@status,@leve,@torg_seq,@lm_user,@lm_date)";
                    list.Add(new
                    {
                        str = sql,
@@ -319,6 +325,7 @@
                            parent_id = storgcode,
                            torg_code = OrganCode,
                            torg_name = OrganName,
                            torgtype_code= torgtype_code,
                            status = status,
                            leve = leve,
                            torg_seq = torg_seq,
@@ -387,7 +394,7 @@
                    }
                    //修改当前组织数据
                    sql = @"update TOrganization set parent_id=@parent_id,torg_name=@torg_name,leve=@leve,torg_seq=@torg_seq,lm_user=@lm_user,lm_date=@lm_date
                    sql = @"update TOrganization set parent_id=@parent_id,torg_name=@torg_name,torgtype_code=@torgtype_code,leve=@leve,torg_seq=@torg_seq,lm_user=@lm_user,lm_date=@lm_date
                            where torg_code=@torg_code";
                    list.Add(new
                    {
@@ -397,6 +404,7 @@
                            parent_id = storgcode,
                            torg_code = OrganCode,
                            torg_name = OrganName,
                            torgtype_code= torgtype_code,
                            leve = leve,
                            torg_seq = torg_seq,
                            lm_user = us.usercode,
@@ -489,7 +497,7 @@
                if (cont > 0)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "新增", "删除了组织:" + orgcode, us.usertype);
                    LogHelper.DbOperateLog(us.usercode, "删除", "删除了组织:" + orgcode, us.usertype);
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "删除操作成功!";
@@ -3127,7 +3135,7 @@
                else
                {
                    //判断当前工艺路线是否有设置节拍工价(有设置,提示先删除节拍工价设置)
                    sql = @"select *   from TPrteEqp_Stad where route_code=@routecode";
                    sql = @"select *   from TPrteStep_Price where route_code=@routecode";
                    dynamicParams.Add("@routecode", routecode);
                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
                    if (data0.Rows.Count > 0)
@@ -3218,7 +3226,7 @@
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select A.id,A.stepcode,A.stepname,A.flwtype,A.enable,A.descr,U.username as lm_user,A.lm_date
                var sql = @"select A.id,A.stepcode,A.stepname,A.flwtype,A.enable,A.is_eqp,A.descr,U.username as lm_user,A.lm_date
                            from TStep A
                            left join TUser U on A.lm_user=U.usercode
                            where A.is_delete<>'1' " + search;
@@ -3240,7 +3248,7 @@
        #endregion
        #region[工序新增编辑]
        public static ToMessage AddUpdateStep(string stepid, string stepcode, string stepname, string steptypecode, string enable, string description, User us, string operType)
        public static ToMessage AddUpdateStep(string operType, User us, TFlw_Rteqp tflw_rteqp)
        {
            var dynamicParams = new DynamicParameters();
            List<object> list = new List<object>();
@@ -3250,7 +3258,7 @@
                if (operType == "Add")
                {
                    sql = @"select *  from TStep where stepcode=@stepcode";
                    dynamicParams.Add("@stepcode", stepcode);
                    dynamicParams.Add("@stepcode", tflw_rteqp.stepcode);
                    var data = DapperHelper.selectdata(sql, dynamicParams);
                    if (data.Rows.Count > 0)
                    {
@@ -3260,20 +3268,52 @@
                        mes.data = null;
                        return mes;
                    }
                    //写入工序表
                    sql = @"insert into TStep(stepcode,stepname,flwtype,enable,descr,lm_user,lm_date) 
                               values(@stepcode,@stepname,@steptypecode,@enable,@description,@username,@CreateDate)";
                    dynamicParams.Add("@stepcode", stepcode);
                    dynamicParams.Add("@stepname", stepname);
                    dynamicParams.Add("@steptypecode", steptypecode);
                    dynamicParams.Add("@enable", enable);
                    dynamicParams.Add("@description", description);
                    dynamicParams.Add("@username", us.usercode);
                    dynamicParams.Add("@CreateDate", DateTime.Now.ToString());
                    int cont = DapperHelper.SQL(sql, dynamicParams);
                    if (cont > 0)
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            stepcode = tflw_rteqp.stepcode,
                            stepname = tflw_rteqp.stepname,
                            steptypecode = tflw_rteqp.steptypecode,
                            enable = tflw_rteqp.enable,
                            description = tflw_rteqp.description,
                            username = us.usercode,
                            CreateDate = DateTime.Now.ToString()
                        }
                    });
                    //写入工序关联设备表
                    if (tflw_rteqp.children.Count > 0)
                    {
                        for (int i = 0; i < tflw_rteqp.children.Count; i++)
                        {
                            sql = @"insert into TFlw_Rteqp(eqp_code,step_code,style,lm_user,lm_date)
                               values(@eqp_code,@step_code,@style,@lm_user,@lm_date)";
                            list.Add(new
                            {
                                str = sql,
                                parm = new
                                {
                                    eqp_code = tflw_rteqp.children[i].eqpcode,
                                    step_code = tflw_rteqp.children[i].stepcode,
                                    style = tflw_rteqp.children[i].style,
                                    lm_user = us.usercode,
                                    lm_date = DateTime.Now.ToString()
                                }
                            });
                        }
                        //标记物料表关联工艺路线标识
                        sql = @"update TStep set is_eqp='Y' where stepcode=@stepcode";
                        list.Add(new { str = sql, parm = new { stepcode = tflw_rteqp.stepcode } });
                    }
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了工序:" + stepcode, us.usertype);
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了工序:" + tflw_rteqp.stepcode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "新增操作成功!";
@@ -3290,13 +3330,14 @@
                if (operType == "Update")
                {
                    list.Clear();
                    //如果当前工序使用状态位N(未启用),需判断当前工序是否被工单引用
                    if (enable == "N")
                    //如果当前工序使用状态位N(未启用)
                    if (tflw_rteqp.enable == "N")
                    {
                        var sql0 = @"select *  from TK_Wrk_Step A where A.step_code=@stepcode";
                        dynamicParams.Add("@stepcode", stepcode);
                        var data = DapperHelper.selectdata(sql0, dynamicParams);
                        if (data.Rows.Count > 0)
                        //需判断当前工序是否被工单引用
                        sql = @"select *  from TK_Wrk_Step A where A.step_code=@stepcode";
                        dynamicParams.Add("@stepcode", tflw_rteqp.stepcode);
                        var data0 = DapperHelper.selectdata(sql, dynamicParams);
                        if (data0.Rows.Count > 0)
                        {
                            mes.code = "300";
                            mes.count = 0;
@@ -3305,14 +3346,61 @@
                            return mes;
                        }
                    }
                    //根据工序查找历史设备
                    sql = @"select step_code as stepcode,eqp_code as eqpcode,style  from TFlw_Rteqp  where step_code=@stepcode";
                    dynamicParams.Add("@stepcode", tflw_rteqp.stepcode);
                    var data = DapperHelper.select<StepEqpData>(sql, dynamicParams);
                    // åŽ†å²ä¸­æœ‰è€Œæäº¤ä¸­æ²¡æœ‰çš„å…ƒç´ (执行删除)
                    var inBNotInA = data.Where(b => !tflw_rteqp.children.Any(a => a.eqpcode == b.eqpcode)).ToList();
                    for (int i = 0; i < inBNotInA.Count; i++)
                    {
                        //删除工序关联设备表
                        sql = @"delete TFlw_Rteqp  where step_code=@step_code and eqp_code=@eqp_code";
                        list.Add(new { str = sql, parm = new { step_code = inBNotInA[i].stepcode, eqp_code= inBNotInA[i].eqpcode } });
                        //删除设备节拍工价表
                        sql = @"delete TPrteEqp_Stad  where step_code=@step_code and eqp_code=@eqp_code";
                        list.Add(new { str = sql, parm = new { step_code = inBNotInA[i].stepcode, eqp_code = inBNotInA[i].eqpcode } });
                    }
                    // æäº¤ä¸­æœ‰è€ŒåŽ†å²ä¸­æ²¡æœ‰çš„å…ƒç´ (执行写入)
                    var inANotInB = tflw_rteqp.children.Where(a => !data.Any(b => b.eqpcode == a.eqpcode)).ToList();
                    for (int i = 0; i < inANotInB.Count; i++)
                    {
                        //写入工序关联设备表
                        sql = @"insert into TFlw_Rteqp(eqp_code,step_code,style,lm_user,lm_date)
                               values(@eqp_code,@step_code,@style,@lm_user,@lm_date)";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                eqp_code = inANotInB[i].eqpcode,
                                step_code = inANotInB[i].stepcode,
                                style = inANotInB[i].style,
                                lm_user = us.usercode,
                                lm_date = DateTime.Now.ToString()
                            }
                        });
                    }
                    if (tflw_rteqp.children.Count > 0)
                    {
                        //标记物料表关联工艺路线标识
                        sql = @"update TStep set is_eqp='Y' where stepcode=@stepcode";
                        list.Add(new { str = sql, parm = new { stepcode = tflw_rteqp.stepcode } });
                    }
                    if (tflw_rteqp.children.Count <= 0)
                    {
                        //标记物料表关联工艺路线标识
                        sql = @"update TStep set is_eqp='N' where stepcode=@stepcode";
                        list.Add(new { str = sql, parm = new { stepcode = tflw_rteqp.stepcode } });
                    }
                    sql = @"update TStep set stepname=@stepname,flwtype=@steptypecode,enable=@enable,descr=@description,
                                lm_user=@username,lm_date=@CreateDate where id=@stepid";
                    list.Add(new { str = sql, parm = new { stepid = stepid, stepname = stepname, steptypecode = steptypecode, enable = enable, description = description, username = us.usercode, CreateDate = DateTime.Now.ToString() } });
                    list.Add(new { str = sql, parm = new { stepid = tflw_rteqp.id, stepname = tflw_rteqp.stepname, steptypecode = tflw_rteqp.steptypecode, enable = tflw_rteqp.enable, description = tflw_rteqp.description, username = us.usercode, CreateDate = DateTime.Now.ToString() } });
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了工序:" + stepcode, us.usertype);
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了工序:" + tflw_rteqp.stepcode, us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "修改操作成功!";
@@ -3347,6 +3435,18 @@
            try
            {
                list.Clear();
                //当前工序是否设置工价
                sql = @"select *  from TPrteStep_Price A where A.step_code=@stepcode";
                dynamicParams.Add("@stepcode", stepcode);
                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 TK_Wrk_Step A where A.step_code=@stepcode";
                dynamicParams.Add("@stepcode", stepcode);
@@ -3359,6 +3459,9 @@
                    mes.data = null;
                    return mes;
                }
                //删除工序关联工作站表
                sql = @"delete TFlw_Rteqp  where step_code=@stepcode";
                list.Add(new { str = sql, parm = new { stepcode = stepcode } });
                //删除工序
                sql = @"delete TStep  where stepcode=@stepcode";
                list.Add(new { str = sql, parm = new { stepcode = stepcode } });
@@ -3390,6 +3493,188 @@
            return mes;
        }
        #endregion
        #region[工序定义关联工作站查询]
        public static ToMessage StepAssociationEqp(string stepcode, User us)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            List<StepEqp> list = new List<StepEqp>();
            try
            {
                //获取工作站集合(车间、外协供应商,包含已绑定工作站标识)
                sql = @"select distinct T.torg_code as wksp_code,T.torg_name as wksp_name,'E' as type,(case when B.eqp_code is null then 'N' else 'Y' end) flag
                        from TOrganization T
                         left join(
                          select distinct A.eqp_code,B.torg_code as wksp_code  from TFlw_Rteqp A
                          inner join TEqpInfo B on A.eqp_code=B.code
                          where A.step_code=@stepcode   and B.enable='Y'
                         ) B on T.torg_code=B.wksp_code where T.torgtype_code='W'
                         UNION ALL
                         select distinct T.code as wksp_code,T.name as wksp_name,'W' as type,(case when B.customertype is null then 'N' else 'Y' end) flag
                         from TCustomerType T
                         left join(
                         select distinct A.eqp_code,B.customertype  from TFlw_Rteqp A
                         inner join TCustomer B on A.eqp_code=B.code
                         where A.step_code=@stepcode
                         ) B on T.code=B.customertype";
                dynamicParams.Add("@stepcode", stepcode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                for (int i = 0; i < data.Rows.Count; i++)
                {
                    StepEqp rout = new StepEqp();
                    rout.code = data.Rows[i]["WKSP_CODE"].ToString();
                    rout.name = data.Rows[i]["WKSP_NAME"].ToString();
                    rout.type = data.Rows[i]["TYPE"].ToString();
                    rout.flag = data.Rows[i]["FLAG"].ToString();
                    rout.children = new List<StepEqpCn>();
                    if (rout.type == "W") //外协供方
                    {
                        //根据外协供方标识编码查找外协供方信息(包含已关联标识)
                        sql = @"select A.code,A.name,'W' as type,(case when B.eqp_code is null then 'N' else 'Y' end) flag
                                from TCustomer A
                                left join(
                                select distinct A.eqp_code  from TFlw_Rteqp A
                                inner join TCustomer B on A.eqp_code=B.code
                                where A.step_code=@stepcode and B.customertype=@wxcode
                                ) B on A.code=B.eqp_code where A.customertype=@wxcode ";
                        dynamicParams.Add("@stepcode", stepcode);
                        dynamicParams.Add("@wxcode", rout.code);
                        var data0 = DapperHelper.selectdata(sql, dynamicParams);
                        for (int k = 0; k < data0.Rows.Count; k++)
                        {
                            StepEqpCn cn = new StepEqpCn();
                            cn.code = data0.Rows[k]["CODE"].ToString();//外协供方编码
                            cn.name = data0.Rows[k]["NAME"].ToString();//外协供方名称
                            cn.type = data0.Rows[k]["TYPE"].ToString();//工作站类型(E:设备 W:外协供方)
                            cn.flag = data0.Rows[k]["FLAG"].ToString();//关联标识
                            rout.children.Add(cn);
                        }
                        list.Add(rout);
                    }
                    else
                    {
                        //根据车间编码查找设备(包含已关联标识)
                        sql = @"select A.code,A.name,'E' as type,(case when B.eqp_code is null then 'N' else 'Y' end) flag
                                from TEqpInfo A
                                left join(
                                select distinct A.eqp_code  from TFlw_Rteqp A
                                inner join TEqpInfo B on A.eqp_code=B.code
                                where A.step_code=@stepcode  and B.enable='Y'
                                ) B on A.code=B.eqp_code where A.torg_code=@wkspcode ";
                        dynamicParams.Add("@stepcode", stepcode);
                        dynamicParams.Add("@wkspcode", data.Rows[i]["WKSP_CODE"].ToString());
                        var data0 = DapperHelper.selectdata(sql, dynamicParams);
                        for (int j = 0; j < data0.Rows.Count; j++)
                        {
                            StepEqpCn cn = new StepEqpCn();
                            cn.code = data0.Rows[j]["CODE"].ToString();//设备编码
                            cn.name = data0.Rows[j]["NAME"].ToString();//设备名称
                            cn.type = data0.Rows[j]["TYPE"].ToString();//工作站类型(E:设备 W:外协供方)
                            cn.flag = data0.Rows[j]["FLAG"].ToString();//关联标识
                            rout.children.Add(cn);
                        }
                        list.Add(rout);
                    }
                }
                mes.code = "200";
                mes.message = "查询成功!";
                mes.data = list;
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region [工序定义关联工作站提交]
        public static ToMessage SaveStepAssociationEqp(string stepcode, User us, List<ObjectData> json)
        {
            var sql = "";
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            try
            {
                list.Clear();
                //根据工序查找历史设备
                sql = @"select step_code as stepcode,eqp_code as eqpcode,style  from TFlw_Rteqp  where step_code=@stepcode";
                dynamicParams.Add("@stepcode", stepcode);
                var data = DapperHelper.select<StepEqpData>(sql, dynamicParams);
                // åŽ†å²ä¸­æœ‰è€Œæäº¤ä¸­æ²¡æœ‰çš„å…ƒç´ (执行删除)
                var inBNotInA = data.Where(b => !json.Any(a => a.code == b.eqpcode)).ToList();
                for (int i = 0; i < inBNotInA.Count; i++)
                {
                    //删除工序关联设备表
                    sql = @"delete TFlw_Rteqp  where step_code=@step_code and eqp_code=@eqp_code";
                    list.Add(new { str = sql, parm = new { step_code = inBNotInA[i].stepcode, eqp_code = inBNotInA[i].eqpcode } });
                    //删除设备节拍工价表
                    sql = @"delete TPrteEqp_Stad  where step_code=@step_code and eqp_code=@eqp_code";
                    list.Add(new { str = sql, parm = new { step_code = inBNotInA[i].stepcode, eqp_code = inBNotInA[i].eqpcode } });
                }
                // æäº¤ä¸­æœ‰è€ŒåŽ†å²ä¸­æ²¡æœ‰çš„å…ƒç´ (执行写入)
                var inANotInB = json.Where(a => !data.Any(b => b.eqpcode == a.code)).ToList();
                for (int i = 0; i < inANotInB.Count; i++)
                {
                    //写入工序关联设备表
                    sql = @"insert into TFlw_Rteqp(eqp_code,step_code,style,lm_user,lm_date)
                               values(@eqp_code,@step_code,@style,@lm_user,@lm_date)";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            eqp_code = inANotInB[i].code,
                            step_code = stepcode,
                            style = inANotInB[i].name,
                            lm_user = us.usercode,
                            lm_date = DateTime.Now.ToString()
                        }
                    });
                }
                if (json.Count > 0)
                {
                    //标记物料表关联工艺路线标识
                    sql = @"update TStep set is_eqp='Y' where stepcode=@stepcode";
                    list.Add(new { str = sql, parm = new { stepcode = stepcode } });
                }
                if (json.Count <= 0)
                {
                    //标记物料表关联工艺路线标识
                    sql = @"update TStep set is_eqp='N' where stepcode=@stepcode";
                    list.Add(new { str = sql, parm = new { stepcode = stepcode } });
                }
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "操作成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "操作失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[节拍工价,产品信息查询]
@@ -3437,28 +3722,79 @@
                        inner join TFlw_Rout B on A.route_code=B.code 
                        where A.materiel_code=@partcode and B.is_delete<>'1' and A.is_delete<>'1'";
                    dynamicParams.Add("@partcode", partcode);
                    var data = DapperHelper.selectdata(sql, dynamicParams);
                    mes.code = "200";
                    mes.message = "查询成功!";
                    mes.data = data;
                }
                else //工序版
                {
                    //通过产品编码查找关联的工序信息
                    sql = @"select A.step_seq,A.step_code,S.stepname as step_name,A.unprice,A.isbott,A.isend
                    sql = @"select A.step_seq as seq,A.step_code as code,S.stepname as name,A.unprice,A.isbott,A.isend,S.flwtype
                            from (
                            select S.materiel_code,R.step_seq,S.step_code,S.unprice,R.isbott,R.isend   from TPrteEqp_Stad S
                            select S.materiel_code,R.step_seq,S.step_code,S.unprice,R.isbott,R.isend   from TPrteStep_Price S
                            inner join TMateriel_Step R on S.materiel_code=R.materiel_code and S.step_code=R.step_code
                            where S.materiel_code=@partcode
                            where S.route_code is null and S.materiel_code=@partcode
                            union all
                            select  materiel_code,step_seq,step_code,'0' as unprice,isbott,isend from TMateriel_Step 
                            where materiel_code=@partcode and materiel_code+step_code
                            not in(select materiel_code+step_code  from TPrteEqp_Stad
                            where materiel_code=@partcode)
                            not in(select materiel_code+step_code  from TPrteStep_Price
                            where route_code is null and materiel_code=@partcode)
                            ) as A
                            left join TStep S on A.step_code=S.stepcode";
                            left join TStep S on A.step_code=S.stepcode
                            A.step_seq";
                    dynamicParams.Add("@partcode", partcode);
                    var parents = DapperHelper.select<SubData>(sql, dynamicParams);
                    for (int i = 0; i < parents.Count; i++)
                    {
                        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
                                from (
                                select S.eqp_code,S.eqp_value,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
                                inner join TMateriel_Step R on S.materiel_code=R.materiel_code and S.step_code=R.step_code
                                where S.materiel_code=@partcode and S.step_code=@stepcode and S.route_code is null
                                union all
                                select  R.eqp_code,'0' as eqp_value,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Step S
                                inner join TFlw_Rteqp R on S.step_code=R.step_code
                                where S.materiel_code=@partcode and S.step_code=@stepcode and S.materiel_code+S.step_code+R.eqp_code
                                not in(select materiel_code+step_code+eqp_code  from TPrteEqp_Stad
                                where materiel_code=@partcode and step_code=@stepcode and route_code is null)
                                ) as A
                                left join TEqpInfo E on A.eqp_code=E.code";
                            dynamicParams.Add("@partcode", partcode);
                            dynamicParams.Add("@stepcode", parents[i].code);
                            var children = DapperHelper.select<EqpSubData>(sql, dynamicParams);
                            parents[i].children = children.ToList();
                        }
                        else
                        {
                            //通过产品编码+工序编码查找对应外协供应商信息
                            sql = @"select A.eqp_code,C.name as eqp_name,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
                                inner join TMateriel_Step R on S.materiel_code=R.materiel_code and S.step_code=R.step_code
                                where S.materiel_code=@partcode and S.step_code=@stepcode and S.route_code is null
                                union all
                                select  R.eqp_code,'0' as eqp_value,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Step S
                                inner join TFlw_Rteqp R on S.step_code=R.step_code
                                where S.materiel_code=@partcode and S.step_code=@stepcode and S.materiel_code+S.step_code+R.eqp_code
                                not in(select materiel_code+step_code+eqp_code  from TPrteEqp_Stad
                                where materiel_code=@partcode and step_code=@stepcode and route_code is null)
                                ) as A
                                left join TCustomer C on A.eqp_code=C.code";
                            dynamicParams.Add("@partcode", partcode);
                            dynamicParams.Add("@stepcode", parents[i].code);
                            var children = DapperHelper.select<EqpSubData>(sql, dynamicParams);
                            parents[i].children = children.ToList();
                        }
                    }
                    mes.code = "200";
                    mes.message = "查询成功!";
                    mes.data = parents;
                }
                var data = DapperHelper.selectdata(sql, dynamicParams);
                mes.code = "200";
                mes.message = "查询成功!";
                mes.data = data;
            }
            catch (Exception e)
            {
@@ -3479,25 +3815,73 @@
            try
            {
                //通过工艺路线编码查找关联的工序信息
                sql = @"select A.step_seq,A.step_code,S.stepname as step_name,A.unprice,A.isbott,A.isend
                sql = @"select A.step_seq as seq,A.step_code as code,S.stepname as name,A.unprice,A.isbott,A.isend,S.flwtype
                        from (
                        select S.materiel_code,R.seq as step_seq,S.step_code,S.unprice,R.first_choke as isbott,R.last_choke as isend   from TPrteEqp_Stad S
                        select S.materiel_code,R.seq as step_seq,S.step_code,S.unprice,R.first_choke as isbott,R.last_choke as isend   from TPrteStep_Price S
                        inner join TFlw_Rtdt R on  S.route_code=R.rout_code and S.step_code=R.step_code
                        where S.materiel_code=@partcode and S.route_code=@route_code 
                        union all
                        select  @partcode as materiel_code,B.seq as step_seq,B.step_code,'0' as unprice,B.first_choke as isbott,B.last_choke as isend from TFlw_Rout A
                        inner join TFlw_Rtdt B on A.code=B.rout_code
                        where A.code=@route_code and  @partcode+A.code+B.step_code
                        not in(select materiel_code+rout_code+step_code  from TPrteEqp_Stad
                        not in(select materiel_code+rout_code+step_code  from TPrteStep_Price
                        where materiel_code=@partcode and route_code=@route_code)
                        ) as A
                        left join TStep S on A.step_code=S.stepcode";
                        left join TStep S on A.step_code=S.stepcode
                        order by A.step_seq";
                dynamicParams.Add("@partcode", partcode);
                dynamicParams.Add("@route_code", routecode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                var parents = DapperHelper.select<SubData>(sql, dynamicParams);
                for (int i = 0; i < parents.Count; i++)
                {
                    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
                                from (
                                select S.eqp_code,S.eqp_value,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
                                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
                                not in(select materiel_code+route_code+step_code+eqp_code  from TPrteEqp_Stad
                                where materiel_code=@partcode and route_code=@routecode  and step_code=@stepcode)
                                ) as A
                                left join TEqpInfo E on A.eqp_code=E.code";
                        dynamicParams.Add("@partcode", partcode);
                        dynamicParams.Add("@routecode", routecode);
                        dynamicParams.Add("@stepcode", parents[i].code);
                        var children = DapperHelper.select<EqpSubData>(sql, dynamicParams);
                        parents[i].children = children.ToList();
                    }
                    else
                    {
                        //通过产品编码+工艺路线+工序编码查找对应外协供应商信息
                        sql = @"select A.eqp_code,C.name as eqp_name,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
                                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
                                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
                                not in(select materiel_code+route_code+step_code+eqp_code  from TPrteEqp_Stad
                                where materiel_code=@partcode and route_code=@routecode  and step_code=@stepcode)
                                ) as A
                                left join TCustomer C on A.eqp_code=C.code";
                        dynamicParams.Add("@partcode", partcode);
                        dynamicParams.Add("@routecode", routecode);
                        dynamicParams.Add("@stepcode", parents[i].code);
                        var children = DapperHelper.select<EqpSubData>(sql, dynamicParams);
                        parents[i].children = children.ToList();
                    }
                }
                mes.code = "200";
                mes.message = "查询成功!";
                mes.data = data;
                mes.data = parents;
            }
            catch (Exception e)
            {
@@ -3546,8 +3930,8 @@
                    total = 0; //总条数
                    sql = @"select *  from (
                            select A.id,A.materiel_code as partcode,B.partname,B.partspec,A.route_code,C.name as route_name,
                            D.stepcode,D.stepname,A.unprice,U.username as lm_user,A.lm_date
                            from TPrteEqp_Stad A
                            D.stepcode,D.stepname,D.flwtype,A.unprice,U.username as lm_user,A.lm_date
                            from TPrteStep_Price A
                            left join TMateriel_Info B on A.materiel_code=B.partcode
                            left join TFlw_Rout C on A.route_code=C.code
                            left join TStep D on A.step_code=D.stepcode
@@ -3559,8 +3943,8 @@
                    search = search.Substring(3);//截取索引2后面的字符
                    total = 0; //总条数
                    sql = @"select *  from (
                            select A.id,A.materiel_code as partcode,B.partname,B.partspec,D.stepcode,D.stepname,A.unprice,U.username as lm_user,A.lm_date
                            from TPrteEqp_Stad A
                            select A.id,A.materiel_code as partcode,B.partname,B.partspec,D.stepcode,D.stepname,D.flwtype,A.unprice,U.username as lm_user,A.lm_date
                            from TPrteStep_Price A
                            left join TMateriel_Info B on A.materiel_code=B.partcode
                            left join TStep D on A.step_code=D.stepcode
                            left join TUser U on A.lm_user=U.usercode
@@ -3596,18 +3980,18 @@
                bool route = dynObj.route;
                if (route) //工艺路线版
                {
                    //工序信息
                    for (int i = 0; i < json[0].children.Count; i++)
                    {
                        //当前产品工艺路线对应工序是否已设置节拍工价
                        sql = @"select *  from TPrteEqp_Stad
                        where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode";
                        //当前产品工艺路线对应工序是否已设置工价
                        sql = @"select *  from TPrteStep_Price where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode";
                        dynamicParams.Add("@partcode", json[0].partcode);
                        dynamicParams.Add("@routecode", json[0].defaultroute_code);
                        dynamicParams.Add("@stepcode", json[0].children[i].code);
                        var data = DapperHelper.selectdata(sql, dynamicParams);
                        if (data.Rows.Count > 0)
                        {
                            sql = @"update TPrteEqp_Stad set unprice=@unprice,lm_user=@username,lm_date=@userdate
                            sql = @"update TPrteStep_Price set unprice=@unprice,lm_user=@username,lm_date=@userdate
                                    where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode";
                            list.Add(new
                            {
@@ -3625,7 +4009,7 @@
                        }
                        else 
                        {
                            sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,unprice,lm_user,lm_date)
                            sql = @"insert into TPrteStep_Price(materiel_code,route_code,step_code,unprice,lm_user,lm_date)
                                    values(@partcode,@routecode,@stepcode,@unprice,@username,@userdate)";
                            list.Add(new
                            {
@@ -3641,6 +4025,61 @@
                                }
                            });
                        }
                        //设备信息
                        for (int j = 0; j < json[0].children[i].children.Count; j++)
                        {
                            //当前产品工艺路线对应工序设备是否已设置节拍工价
                            sql = @"select *  from TPrteEqp_Stad where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                            dynamicParams.Add("@partcode", json[0].partcode);
                            dynamicParams.Add("@routecode", json[0].defaultroute_code);
                            dynamicParams.Add("@stepcode", json[0].children[i].code);
                            dynamicParams.Add("@eqpcode", json[0].children[i].children[j].eqp_code);
                            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
                                    where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                                list.Add(new
                                {
                                    str = sql,
                                    parm = new
                                    {
                                        partcode = json[0].partcode,
                                        routecode = json[0].defaultroute_code,
                                        stepcode = json[0].children[i].code,
                                        eqpcode = json[0].children[i].children[j].eqp_code,
                                        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,
                                        unprice = json[0].children[i].children[j].unprice,
                                        username = us.usercode,
                                        userdate = DateTime.Now.ToString()
                                    }
                                });
                            }
                            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)";
                                list.Add(new
                                {
                                    str = sql,
                                    parm = new
                                    {
                                        materiel_code = json[0].partcode,
                                        route_code = json[0].defaultroute_code,
                                        step_code = json[0].children[i].code,
                                        eqp_code = json[0].children[i].children[j].eqp_code,
                                        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,
                                        unprice = json[0].children[i].children[j].unprice,
                                        lm_user = us.usercode,
                                        lm_date = DateTime.Now.ToString()
                                    }
                                });
                            }
                        }
                    }
                }
                else //工序版
@@ -3648,14 +4087,13 @@
                    for (int i = 0; i < json[0].children.Count; i++)
                    {
                        //当前产品对应工序是否已设置节拍工价
                        sql = @"select *  from TPrteEqp_Stad
                        where materiel_code=@partcode and step_code=@stepcode";
                        sql = @"select *  from TPrteStep_Price where materiel_code=@partcode and step_code=@stepcode";
                        dynamicParams.Add("@partcode", json[0].partcode);
                        dynamicParams.Add("@stepcode", json[0].children[i].code);
                        var data = DapperHelper.selectdata(sql, dynamicParams);
                        if (data.Rows.Count > 0)
                        {
                            sql = @"update TPrteEqp_Stad set unprice=@unprice,lm_user=@username,lm_date=@userdate
                            sql = @"update TPrteStep_Price set unprice=@unprice,lm_user=@username,lm_date=@userdate
                                    where materiel_code=@partcode  and step_code=@stepcode";
                            list.Add(new
                            {
@@ -3672,7 +4110,7 @@
                        }
                        else
                        {
                            sql = @"insert into TPrteEqp_Stad(materiel_code,step_code,unprice,lm_user,lm_date)
                            sql = @"insert into TPrteStep_Price(materiel_code,step_code,unprice,lm_user,lm_date)
                                    values(@partcode,@stepcode,@unprice,@username,@userdate)";
                            list.Add(new
                            {
@@ -3687,11 +4125,63 @@
                                }
                            });
                        }
                        //设备信息
                        for (int j = 0; j < json[0].children[i].children.Count; j++)
                        {
                            //当前产品工艺路线对应工序设备是否已设置节拍工价
                            sql = @"select *  from TPrteEqp_Stad where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                            dynamicParams.Add("@partcode", json[0].partcode);
                            dynamicParams.Add("@routecode", json[0].defaultroute_code);
                            dynamicParams.Add("@stepcode", json[0].children[i].code);
                            dynamicParams.Add("@eqpcode", json[0].children[i].children[j].eqp_code);
                            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
                                    where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                                list.Add(new
                                {
                                    str = sql,
                                    parm = new
                                    {
                                        partcode = json[0].partcode,
                                        routecode = json[0].defaultroute_code,
                                        stepcode = json[0].children[i].code,
                                        eqpcode = json[0].children[i].children[j].eqp_code,
                                        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,
                                        unprice = json[0].children[i].children[j].unprice,
                                        username = us.usercode,
                                        userdate = DateTime.Now.ToString()
                                    }
                                });
                            }
                            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)";
                                list.Add(new
                                {
                                    str = sql,
                                    parm = new
                                    {
                                        materiel_code = json[0].partcode,
                                        route_code = json[0].defaultroute_code,
                                        step_code = json[0].children[i].code,
                                        eqp_code = json[0].children[i].children[j].eqp_code,
                                        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,
                                        unprice = json[0].children[i].children[j].unprice,
                                        lm_user = us.usercode,
                                        lm_date = DateTime.Now.ToString()
                                    }
                                });
                            }
                        }
                    }
                }
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
@@ -3729,8 +4219,27 @@
            var dynamicParams = new DynamicParameters();
            try
            {
                //删除节拍工价表
                sql = @"delete TPrteEqp_Stad  where id=@id";
                //查找工序工价表
                sql = @"select *  from TPrteStep_Price where id=@id";
                dynamicParams.Add("@id", id);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                if (data.Rows.Count > 0)
                {
                    //删除节拍工价表
                    sql = @"delete TPrteEqp_Stad  where materiel_code=@materiel_code and route_code=@route_code and step_code=@step_code";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            materiel_code = data.Rows[0]["materiel_code"].ToString(),
                            route_code = data.Rows[0]["route_code"].ToString(),
                            step_code = data.Rows[0]["step_code"].ToString()
                        }
                    });
                }
                //删除工序工价表
                sql = @"delete TPrteStep_Price  where id=@id";
                list.Add(new
                {
                    str = sql,
VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
@@ -13,7 +13,7 @@
{
    public class GeneralBasicDataDAL
    {
        public static DataTable dt;    //定义全局变量dt
        public static DataTable dt;    //定义全局变量dt
        public static bool res;       //定义全局变量dt
        public static ToMessage mes = new ToMessage(); //定义全局返回信息对象
        public static string strProcName = ""; //定义全局sql变量
@@ -21,7 +21,31 @@
        public static SqlParameter[] parameters; //定义全局SqlParameter参数数组
        public static dynamic CompanyCode = AppSetting.GetAppSetting("CompanyCode");
        public static dynamic CompanyName = AppSetting.GetAppSetting("CompanyName");
        #region[组织架构类型资料]
        public static ToMessage TOrganTypeDate()
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                sql = @"select torgtype_code,torgtype_name from TOrganType where torgtype_code<>'C'";
                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 PrentOrganization()
@@ -57,6 +81,30 @@
            try
            {
                sql = @"select * from TOrganization where  status='Y' and parent_id<>'0' or leve<>'0'";
                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 TorgWkshop()
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                sql = @"select * from TOrganization where  status='Y' and torgtype_code='W'";
                var data = DapperHelper.selectdata(sql, dynamicParams);
                mes.code = "200";
                mes.message = "查询成功!";
@@ -364,6 +412,32 @@
        }
        #endregion
        #region[车间查找设备基础资料]
        public static ToMessage WkshopEqpPermissions(string wkshopcode)
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                string[] wkshopcodelist = Array.ConvertAll<string, string>(wkshopcode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[]
                sql = @"select code,name from TEqpInfo where  enable='Y' and torg_code in @torg_code";
                dynamicParams.Add("@torg_code", wkshopcodelist);
                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 EqpTypecodeSeachEqpPermissions(string eqptypecode)
        {
@@ -534,6 +608,30 @@
        }
        #endregion
        #region[往来单位类型基础资料]
        public static ToMessage CustomerTypePermissions()
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                sql = @"select code,name from TCustomerType";
                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 CustomerPermissions()
        {
@@ -558,6 +656,32 @@
        }
        #endregion
        #region[往来单位类型查找往来单位基础资料]
        public static ToMessage CustomerTypeSearchPermissions(string customertypecode)
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                string[] customerTypecodelist = Array.ConvertAll<string, string>(customertypecode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[]
                sql = @"select code,name  from  TCustomer where customertype in @customerTypecodelist";
                dynamicParams.Add("@customerTypecodelist", customerTypecodelist);
                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 InventoryTreePermissions()
        {
VueWebCoreApi/DLL/DAL/ProductModelDAL.cs
@@ -513,7 +513,7 @@
                mes.code = "200";
                mes.message = "查询成功!";
                mes.data = data;
                LogHelper.OperateLog("999", "查询", "存货分类查询数据为:" + JsonConvert.SerializeObject(data), "PC");
                //LogHelper.OperateLog("999", "查询", "存货分类查询数据为:" + JsonConvert.SerializeObject(data), "PC");
            }
            catch (Exception e)
            {
@@ -1144,7 +1144,7 @@
                        sql = @"update TMateriel_Info set is_retdproc='N',default_route='' where partcode=@partcode";
                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode } });
                        //清除节拍工价表对应数据
                        sql = @"delete TPrteEqp_Stad where materiel_code=@partcode";
                        sql = @"delete TPrteStep_Price where materiel_code=@partcode";
                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode } });
                    }
                    else
@@ -1175,7 +1175,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 TPrteEqp_Stad where materiel_code=@partcode and route_code not in @routecode";
                        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 } });
                    }
                }
@@ -1190,7 +1190,7 @@
                        sql = @"update TMateriel_Info set is_retdproc='N',default_route='' where partcode=@partcode";
                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode } });
                        //清除节拍工价表对应数据
                        sql = @"delete TPrteEqp_Stad where materiel_code=@partcode";
                        sql = @"delete TPrteStep_Price where materiel_code=@partcode";
                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode } });
                    }
                    else
@@ -1225,7 +1225,7 @@
                        //清除节拍工价表当前产品对应工序不包含此次设置的其它数据
                        //string分割转string[]
                        string[] stepcode = Array.ConvertAll<string, string>(string.Join(",", json[0].children.Select(s => s.code)).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString());
                        sql = @"delete TPrteEqp_Stad where materiel_code=@partcode and step_code not in @stepcode";
                        sql = @"delete TPrteStep_Price where materiel_code=@partcode and step_code not in @stepcode";
                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode, stepcode = stepcode } });
                    }
                }
VueWebCoreApi/DLL/DAL/ProductionManagementDAL.cs
@@ -317,7 +317,7 @@
                        left join TStep S on B.step_code=S.stepcode
                        where A.code=@route_code and A.torg_code=@wkshopcode
                        ) as AA
                        left join (select * from TPrteEqp_Stad   where materiel_code=@partcode and route_code=@route_code and wkspcode=@wkshopcode) as S on
                        left join (select * from TPrteStep_Price   where materiel_code=@partcode and route_code=@route_code and wkspcode=@wkshopcode) as S on
                        AA.code=S.route_code and AA.step_code=S.step_code and AA.eqp_code=S.eqp_code";
                dynamicParams.Add("@partcode", partcode);
                dynamicParams.Add("@route_code", routecode);
@@ -488,7 +488,7 @@
                           S.eqp_value,S.cavity_qty,S.wkspcode,S.lm_user,S.lm_date,S.torg_code,S.is_delete,S.step_code
                           from TFlw_Rtdt A
                           inner join TFlw_Rteqp C on A.step_code=C.step_code
                           inner join (select *   from TPrteEqp_Stad  where materiel_code=@materiel_code and route_code=@routecode) as S on C.step_code=S.step_code and C.eqp_code=S.eqp_code";
                           inner join (select *   from TPrteStep_Price  where materiel_code=@materiel_code and route_code=@routecode) as S on C.step_code=S.step_code and C.eqp_code=S.eqp_code";
                    list.Add(new
                    {
                        str = sql,
@@ -608,7 +608,7 @@
                           S.eqp_value,S.cavity_qty,S.wkspcode,S.lm_user,S.lm_date,S.torg_code,S.is_delete,S.step_code
                           from TFlw_Rtdt A
                           inner join TFlw_Rteqp C on A.step_code=C.step_code
                           inner join (select *   from TPrteEqp_Stad  where materiel_code=@materiel_code and route_code=@routecode) as S on C.step_code=S.step_code and C.eqp_code=S.eqp_code";
                           inner join (select *   from TPrteStep_Price  where materiel_code=@materiel_code and route_code=@routecode) as S on C.step_code=S.step_code and C.eqp_code=S.eqp_code";
                    list.Add(new
                    {
                        str = sql,
VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
@@ -808,17 +808,50 @@
                    }
                }
                //获取工序信息
                sql = @"select S.wo_code,S.seq,S.step_code,T.stepname,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,(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
                        where S.wo_code=@wocode order by S.seq ";
                dynamicParams.Add("@wocode", wocode);
                var data1 = DapperHelper.selectdata(sql, dynamicParams);
                var 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,
                                (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
                                inner join TEqpInfo E on S.eqp_code=E.code
                                where S.m_id=@m_id";
                        dynamicParams.Add("@m_id", parents[i].id);
                        var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
                        parents[i].children = children.ToList();
                    }
                    else
                    {
                        //通过工艺路线工序表ID查找对应外协供应商信息
                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                                (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
                                inner join TCustomer E on S.eqp_code=E.code
                                where S.m_id=@m_id";
                        dynamicParams.Add("@m_id", parents[i].id);
                        var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
                        parents[i].children = children.ToList();
                    }
                }
                dir.Add("canupdate_qty", canupdate_qty);
                dir.Add("stepdata", data1);
                dir.Add("stepdata", parents);
                mes.code = "200";
                mes.count = data1.Rows.Count;
                mes.count = parents.Count;
                mes.message = "查询成功";
                mes.data = dir;
            }
@@ -1150,35 +1183,99 @@
                if (route) //工艺路线版
                {
                    //MES工单查找历史引用最新工序信息
                    sql = @"select S.wo_code,S.seq,S.step_code,S.stepprice,isbott,isend
                        from TK_Wrk_Step S
                        inner join (
                        select top 1 A.wo_code,A.route_code   from TK_Wrk_Man A
                        inner join TK_Wrk_Step S on A.wo_code=S.wo_code and A.route_code=S.route_code
                        where A.materiel_code=@partcode and A.wkshp_code=@wkshopcode and A.route_code=@routecode
                        order by A.lm_date desc
                        ) as W on S.wo_code=W.wo_code and S.route_code=W.route_code
                        left join TStep  T on S.step_code=T.stepcode
                        order by S.seq";
                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,'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 (
                           select top 1 S.id,A.wo_code,A.route_code   from TK_Wrk_Man A
                           inner join TK_Wrk_Step S on A.wo_code=S.wo_code and A.route_code=S.route_code
                           where A.materiel_code=@partcode and A.wkshp_code=@wkshopcode and A.route_code=@routecode
                           order by A.lm_date desc
                           ) as W on S.wo_code=W.wo_code and S.route_code=W.route_code
                           left join TStep  T on S.step_code=T.stepcode
                           order by S.seq";
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                    dynamicParams.Add("@partcode", partcode);
                    dynamicParams.Add("@routecode", routecode);
                    var 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,
                                (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
                                inner join TEqpInfo E on S.eqp_code=E.code
                                where S.m_id=@m_id";
                            dynamicParams.Add("@m_id", parents[i].id);
                            var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
                            parents[i].children = children.ToList();
                        }
                        else
                        {
                            //通过工艺路线工序表ID查找对应外协供应商信息
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                                (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
                                inner join TCustomer E on S.eqp_code=E.code
                                where S.m_id=@m_id";
                            dynamicParams.Add("@m_id", parents[i].id);
                            var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
                            parents[i].children = children.ToList();
                        }
                    }
                }
                else
                {
                    //MES工单查找历史引用最新工序信息
                    sql = @"select S.wo_code,S.seq,S.step_code,S.stepprice,isbott,isend
                        from TK_Wrk_Step S
                        inner join (
                        select top 1 A.wo_code   from TK_Wrk_Man A
                        inner join TK_Wrk_Step S on A.wo_code=S.wo_code
                        where A.materiel_code=@partcode and A.wkshp_code=@wkshopcode
                        order by A.lm_date desc
                        ) as W on S.wo_code=W.wo_code
                        left join TStep  T on S.step_code=T.stepcode
                        order by S.seq";
                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,'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 (
                            select top 1 A.wo_code   from TK_Wrk_Man A
                            inner join TK_Wrk_Step S on A.wo_code=S.wo_code
                            where A.materiel_code=@partcode and A.wkshp_code=@wkshopcode
                            order by A.lm_date desc
                            ) as W on S.wo_code=W.wo_code
                            left join TStep  T on S.step_code=T.stepcode
                            order by S.seq";
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                    dynamicParams.Add("@partcode", partcode);
                    var 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,
                                (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
                                inner join TEqpInfo E on S.eqp_code=E.code
                                where S.m_id=@m_id";
                            dynamicParams.Add("@m_id", parents[i].id);
                            var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
                            parents[i].children = children.ToList();
                        }
                        else
                        {
                            //通过工艺路线工序表ID查找对应外协供应商信息
                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
                                (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
                                inner join TCustomer E on S.eqp_code=E.code
                                where S.m_id=@m_id";
                            dynamicParams.Add("@m_id", parents[i].id);
                            var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
                            parents[i].children = children.ToList();
                        }
                    }
                }
                var data = DapperHelper.selectdata(sql, dynamicParams);
@@ -1923,7 +2020,7 @@
                        else //不按序收发料
                        {
                            mes = ScanStartReport.NoWXEncodingSeach(SelectType, wocode, stepcode);
                        }
                        }
                        break;
                    default:
                        break;
@@ -3382,7 +3479,7 @@
                                    }
                                }
                            }
                        }
                        }
                    }
                }
                else //不按序
@@ -3390,10 +3487,10 @@
                    //控制逻辑:当前工序报工调整-> (本道工序当前调整合格数+本道工序非当前报工合格总数)<下道工序报工总数(合格+不良+报废)   ==不能小于下道报工总数
                    list.Clear();
                    //判断当前工序是自制工序还是外协工序
                    if (json[0].flw_type.ToString() == "Z")
                    if (json[0].flw_type.ToString() == "Z")
                    {
                       //查询当前报工工序非此次报工:总报工数量、总不良数量、总工废数量、总料废数量
                        //查询当前报工工序非此次报工:总报工数量、总不良数量、总工废数量、总料废数量
                        sql = @"select isnull(sum(good_qty),0) as good_qty,isnull(sum(ng_qty),0) as ng_qty,isnull(sum(laborbad_qty),0) as laborbad_qty,isnull(sum(materielbad_qty),0) as materielbad_qty   
                                from TK_Wrk_Record where wo_code=@wo_code and style='B' and id<>@id and step_code=@step_code";
                        dynamicParams.Add("@wo_code", json[0].wo_code);
@@ -3415,7 +3512,7 @@
                            return mes;
                        }
                    }
                    if (json[0].flw_type.ToString() == "W")
                    if (json[0].flw_type.ToString() == "W")
                    {
                        //获取当前工序、供应商对应的总发料数量
                        sql = @"select isnull(sum(fqty),0) as fqty
@@ -3437,7 +3534,7 @@
                        decimal notthis_ngqty = decimal.Parse(dt.Rows[0]["ng_qty"].ToString());  //当前末道工序非本次报工总数
                        decimal notthis_laborbad_qty = decimal.Parse(dt.Rows[0]["laborbad_qty"].ToString());  //当前末道工序非本次报工工废总数
                        decimal notthis_materielbad_qty = decimal.Parse(dt.Rows[0]["materielbad_qty"].ToString());  //当前末道工序非本次报工料废总数
                       //获取当前末道工序收料总数量:本次修改收料数量+本次修改不良数量+本次修改工废数量+本次修改报工料废数量+当前工序非本次收料总数+当前工序非本次不良总数+当前工序非本次工废总数+当前工序非本次料废总数
                                                                                                                    //获取当前末道工序收料总数量:本次修改收料数量+本次修改不良数量+本次修改工废数量+本次修改报工料废数量+当前工序非本次收料总数+当前工序非本次不良总数+当前工序非本次工废总数+当前工序非本次料废总数
                        decimal updatereportsumqty = this_reportqty + this_ngqty + this_laborbadqty + this_materielbadqty + notthis_reportqty + notthis_ngqty + notthis_laborbad_qty + notthis_materielbad_qty;
                        //判断当前工序供应商收料总数>当前工序供应商对应发料数量
                        if (updatereportsumqty > decimal.Parse(dt_0.Rows[0]["fqty"].ToString()))
@@ -3485,7 +3582,7 @@
                            str = sql,
                            parm = new
                            {
                                step_price=decimal.Parse(json[0].unprice),
                                step_price = decimal.Parse(json[0].unprice),
                                good_qty = decimal.Parse(json[0].report_dvalue),
                                ng_qty = this_ng_dvalue,
                                laborbad_qty = this_laborbad_dvalue,
@@ -3588,7 +3685,7 @@
                            str = sql,
                            parm = new
                            {
                                step_price=decimal.Parse(json[0].unprice),
                                step_price = decimal.Parse(json[0].unprice),
                                good_qty = decimal.Parse(json[0].report_dvalue),
                                ng_qty = this_ng_dvalue,
                                laborbad_qty = this_laborbad_dvalue,
VueWebCoreApi/Models/MaterialCraftsSave.cs
@@ -7,18 +7,77 @@
{
    public class MaterialCraftsSave
    {
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        public string partcode { get; set; }
        /// <summary>
        /// å·¥è‰ºè·¯çº¿ç¼–码
        /// </summary>
        public string defaultroute_code { get; set; }
        /// <summary>
        /// å·¥åºå­é›†
        /// </summary>
        public List<SubData> children { get; set; }
    }
    public class SubData
    {
       public string code { get; set; }
       public string name { get; set; }
       public string seq { get; set; }
       public string isbott { get; set; }
       public string isend { get; set; }
       public string unprice { get; set; }
    {
        /// <summary>
        /// å·¥åºåºå·
        /// </summary>
        public string seq { get; set; }
        /// <summary>
        /// å·¥åºç¼–码
        /// </summary>
        public string code { get; set; }
        /// <summary>
        /// å·¥åºåç§°
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// å·¥åºå±žæ€§:Z(自制)/W(外协)
        /// </summary>
        public string flwtype { get; set; }
        /// <summary>
        /// æ˜¯å¦é¦–道工序
        /// </summary>
        public string isbott { get; set; }
        /// <summary>
        /// æ˜¯å¦æœ«é“工序
        /// </summary>
        public string isend { get; set; }
        /// <summary>
        /// å·¥åºå·¥ä»·
        /// </summary>
        public string unprice { get; set; }
        public List<EqpSubData> children { get; set; }
    }
    public class EqpSubData
    {
        /// <summary>
        /// è®¾å¤‡ç¼–码
        /// </summary>
        public string eqp_code { get; set; }
        /// <summary>
        /// è®¾å¤‡åç§°
        /// </summary>
        public string eqp_name { get; set; }
        /// <summary>
        /// è®¾å¤‡èŠ‚æ‹
        /// </summary>
        public string eqp_value { get; set; }
        /// <summary>
        /// ç”Ÿäº§èŠ‚æ‹
        /// </summary>
        public string stand_value { get; set; }
        /// <summary>
        /// åž‹è…”æ•°
        /// </summary>
        public string cavity_qty { get; set; }
        /// <summary>
        /// è®¡ä»¶å•ä»·
        /// </summary>
        public string unprice { get; set; }
    }
}
VueWebCoreApi/Models/TFlw_Rteqp.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace VueWebCoreApi.Models
{
    public class TFlw_Rteqp
    {
        /// <summary>
        /// å·¥åºid(主键)
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// å·¥åºç¼–码
        /// </summary>
        public string stepcode { get; set; }
        /// <summary>
        /// å·¥åºåç§°
        /// </summary>
        public string stepname { get; set; }
        /// <summary>
        /// å·¥åºç±»åž‹ç¼–码
        /// </summary>
        public string steptypecode { get; set; }
        /// <summary>
        /// å¯ç”¨çŠ¶æ€ï¼šY(启用) N(未启用)
        /// </summary>
        public string enable { get; set; }
        /// <summary>
        /// å·¥åºæè¿°
        /// </summary>
        public string description { get; set; }
        /// <summary>
        /// å…³è”工作站数据
        /// </summary>
        public List<StepEqpData> children { get; set; }//子节点
    }
    public class StepEqpData
    {
        /// <summary>
        /// å·¥åºç¼–码
        /// </summary>
        public string stepcode { get; set; }
        /// <summary>
        /// è®¾å¤‡ç¼–码/外协供应商编码
        /// </summary>
        public string eqpcode { get; set; }
        /// <summary>
        /// å…³è”工作站类型:设备 (E)  å§”外(W)
        /// </summary>
        public string style { get; set; }
    }
}
VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace VueWebCoreApi.Models.WorkData
{
    public class WorkRouteStepEqp
    {
        /// <summary>
        /// ä¸»é”®id
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// å·¥å•号
        /// </summary>
        public string wo_code { get; set; }
        /// <summary>
        /// å·¥åºåºå·
        /// </summary>
        public string seq { get; set; }
        /// <summary>
        /// å·¥åºç¼–码
        /// </summary>
        public string step_code { get; set; }
        /// <summary>
        /// å·¥åºåç§°
        /// </summary>
        public string stepname { get; set; }
        /// <summary>
        /// å·¥åºå±žæ€§:Z(自制)W(外协)
        /// </summary>
        public string flwtype { get; set; }
        /// <summary>
        /// å·¥åºå·¥ä»·
        /// </summary>
        public string stepprice { get; set; }
        /// <summary>
        /// å·²ç”Ÿäº§æ•°é‡
        /// </summary>
        public string produceq_qty { get; set; }
        /// <summary>
        /// åˆæ ¼æ•°é‡
        /// </summary>
        public string good_qty { get; set; }
        /// <summary>
        /// ä¸è‰¯æ•°é‡
        /// </summary>
        public string ng_qty { get; set; }
        /// <summary>
        /// å·¥åºŸæ•°é‡
        /// </summary>
        public string laborbad_qty { get; set; }
        /// <summary>
        /// æ–™åºŸæ•°é‡
        /// </summary>
        public string materielbad_qty { get; set; }
        /// <summary>
        /// å¾…产数量
        /// </summary>
        public string delive_qty { get; set; }
        /// <summary>
        /// é¦–道工序
        /// </summary>
        public string isbott { get; set; }
        /// <summary>
        /// æœ«é“工序
        /// </summary>
        public string isend { get; set; }
        public List<WorkRouteStepEqpSub> children { get; set; }
    }
    public class WorkRouteStepEqpSub
    {
        /// <summary>
        /// è®¾å¤‡ç¼–码
        /// </summary>
        public string eqp_code { get; set; }
        /// <summary>
        /// è®¾å¤‡åç§°
        /// </summary>
        public string eqp_name { get; set; }
        /// <summary>
        /// è®¾å¤‡å·¥ä»·
        /// </summary>
        public string eqp_price { get; set; }
        /// <summary>
        /// åˆæ ¼æ•°é‡
        /// </summary>
        public string good_qty { get; set; }
        /// <summary>
        /// ä¸è‰¯æ•°é‡
        /// </summary>
        public string ng_qty { get; set; }
        /// <summary>
        /// å·¥åºŸæ•°é‡
        /// </summary>
        public string laborbad_qty { get; set; }
        /// <summary>
        /// æ–™åºŸæ•°é‡
        /// </summary>
        public string materielbad_qty { get; set; }
    }
}
VueWebCoreApi/Tools/ExcelList.cs
@@ -12,7 +12,7 @@
            List<ScoreReport> list = new List<ScoreReport>
            {
                //new ScoreReport("0","组织架构"),
                 //new ScoreReport("0","组织架构"),
                new ScoreReport("1","岗位管理"),
                new ScoreReport("2","班组管理"),
                new ScoreReport("3","人员管理"),
VueWebCoreApi/Tools/ImportExcelData.cs
@@ -1349,7 +1349,7 @@
                return Message;
            }
            else if (excelTable[0].Columns.Count != 5)
            else if (excelTable[0].Columns.Count != 6)
            {
                code = "301";
                Message = "工序设置模板不符合规范,请检查列名字段数";
@@ -1383,6 +1383,12 @@
            {
                code = "301";
                Message = "工序设置模板:表头信息不符合规范,第2列应为{描述}";
                return Message;
            }
            else if (excelTable[0].Columns[5].ColumnName != "设备供方/编码")
            {
                code = "301";
                Message = "工序设置模板:表头信息不符合规范,第2列应为{设备供方/编码}";
                return Message;
            }
            else
@@ -3913,6 +3919,63 @@
                        list.Add(erro);
                    }
                }
                if (excelTable[0].Rows[k][5].ToString().Trim() != null && excelTable[0].Rows[k][5].ToString().Trim() != "")
                {
                    string[] eqpcodelist = Array.ConvertAll<string, string>(excelTable[0].Rows[k][5].ToString().Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString());
                    if (excelTable[0].Rows[k][5].ToString().Trim() == "自制")
                    {
                        for (int i = 0; i < eqpcodelist.Length; i++)
                        {
                            sql = @"select *  from TEqpInfo where code=@code";
                            dynamicParams.Add("@code", eqpcodelist[i].ToString());
                            dt = DapperHelper.selectdata(sql, dynamicParams);
                            if (dt.Rows.Count<=0)
                            {
                                ExcelErro erro = new ExcelErro();
                                erro.RoeNumber = "/";
                                erro.ErrorField = "{设备供方/编码}";
                                erro.ErrorCont = "工序类型为自制时,应填写有效的设备编码或工位编码,当前{*工序编号(唯一)}:"+ excelTable[0].Rows[k][0].ToString().Trim() + ",对应的{设备供方/编码}:"+ excelTable[0].Rows[k][5].ToString().Trim() + "存在不合理的值!";
                                list.Add(erro);
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < eqpcodelist.Length; i++)
                        {
                            sql = @"select *  from TCustomer where code=@code";
                            dynamicParams.Add("@code", eqpcodelist[i].ToString());
                            dt = DapperHelper.selectdata(sql, dynamicParams);
                            if (dt.Rows.Count <= 0)
                            {
                                ExcelErro erro = new ExcelErro();
                                erro.RoeNumber = "/";
                                erro.ErrorField = "{设备供方/编码}";
                                erro.ErrorCont = "工序类型为外协时,应填写有效的外协供应商编码,当前{*工序编号(唯一)}:" + excelTable[0].Rows[k][0].ToString().Trim() + ",对应的{设备供方/编码}:" + excelTable[0].Rows[k][5].ToString().Trim() + "存在不合理的值!";
                                list.Add(erro);
                            }
                        }
                    }
                }
            }
            // ä½¿ç”¨åŒ¿åå¯¹è±¡æ¥ç»„合多个字段的值,并对其进行分组
            var groupedRows = excelTable[0].AsEnumerable()
                .GroupBy(row => new
                {
                    StepCode = row.Field<string>("*工序编号(唯一)")
                })
                // ç­›é€‰å‡ºé‚£äº›åŒ…含多于一个元素的组(即重复的组合)
                .Where(group => group.Count() > 1)
                // é€‰æ‹©æ¯ä¸ªç»„中的所有行(即重复的行)
                .SelectMany(group => group);
            List<DataRow> listRow = groupedRows.ToList();
            if (listRow.Count > 0)
            {
                ExcelErro erro = new ExcelErro();
                erro.RoeNumber = "/";
                erro.ErrorField = "{*工序编号(唯一)}";
                erro.ErrorCont = "*工序编号(唯一)在导入文件中存在重复值";
                list.Add(erro);
            }
            if (list.Count > 0)
            {
@@ -5706,6 +5769,8 @@
                //导入工序
                for (int i = 0; i < excelTable[0].Rows.Count; i++)
                {
                    string[] eqpcodelist = Array.ConvertAll<string, string>(excelTable[0].Rows[i][5].ToString().Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString());
                    //写入工序表
                    sql = @"insert into TStep(stepcode,stepname,enable,descr,flwtype,lm_user,lm_date) 
                            values(@stepcode,@stepname,@enable,@descr,@flwtype,@lm_user,@lm_date)";
                    list.Add(new
@@ -5722,6 +5787,24 @@
                            lm_date = DateTime.Now.ToString()
                        }
                    });
                    //写入工序关联工作站表
                    for (int j = 0; j < eqpcodelist.Length; j++)
                    {
                        sql = @"insert into TFlw_Rteqp(eqp_code,step_code,style,lm_user,lm_date)
                            values(@eqp_code,@step_code,@style,@lm_user,@lm_date)";
                        list.Add(new
                        {
                            str = sql,
                            parm = new
                            {
                                eqp_code = eqpcodelist[j].ToString(),
                                step_code = excelTable[0].Rows[i][0].ToString().Trim(),
                                style = excelTable[0].Rows[i][2].ToString().Trim(),
                                lm_user = us.usercode,
                                lm_date = DateTime.Now.ToString()
                            }
                        });
                    }
                }
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
@@ -5850,7 +5933,7 @@
                        message = "导入失败!";
                    }
                    //查询工序节拍表中:产品+工艺路线+工序+设备是否存在
                    sql = @"select *  from TPrteEqp_Stad
                    sql = @"select *  from TPrteStep_Price
                        where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                    dynamicParams.Add("@partcode", partcode);
                    dynamicParams.Add("@routecode", routecode);
@@ -5859,7 +5942,7 @@
                    var data6 = DapperHelper.selectdata(sql, dynamicParams);
                    if (data6.Rows.Count > 0)
                    {
                        sql = @"update TPrteEqp_Stad set stand_value=@stand_value,eqp_value=@eqp_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
                        sql = @"update TPrteStep_Price set stand_value=@stand_value,eqp_value=@eqp_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
                        {
@@ -5881,7 +5964,7 @@
                    }
                    else
                    {
                        sql = @"insert into TPrteEqp_Stad(materiel_code,eqp_code,stand_value,route_code,unprice,eqp_value,cavity_qty,wkspcode,lm_user,lm_date,step_code)
                        sql = @"insert into TPrteStep_Price(materiel_code,eqp_code,stand_value,route_code,unprice,eqp_value,cavity_qty,wkspcode,lm_user,lm_date,step_code)
                              values(@partcode,@eqpcode,@stand_value,@routecode,@unprice,@eqp_value,@cavity_qty,@wkspcode,@username,@userdate,@stepcode)";
                        list.Add(new
                        {
VueWebCoreApi/Tools/SchedulingMethod.cs
@@ -42,7 +42,7 @@
                            left join TFlw_Rtdt B on K.code=B.rout_code and B.first_choke='Y'
                            left join TFlw_Rteqp C on B.step_code= C.step_code
                            left join TEqpInfo D on C.eqp_code=D.code 
                            left join TPrteEqp_Stad H on  C.eqp_code= H.eqp_code  and  K.code=H.route_code and B.step_code=H.step_code
                            left join TPrteStep_Price H on  C.eqp_code= H.eqp_code  and  K.code=H.route_code and B.step_code=H.step_code
                            where A.wo_code=@wocode and H.materiel_code=@partcode  and D.wksp_code=@wkshpcode  and D.enable='Y' 
                            order by C.eqp_code";
            dynamicParams.Add("@wocode", wocode);
VueWebCoreApi/wwwroot/Excel/¹¤ÐòÉèÖÃ.xls
Binary files differ