factoryService.cs 9.28 KB
using Hh.Mes.Common.log;
using Hh.Mes.Common.Request;
using Hh.Mes.Pojo.System;
using Hh.Mes.POJO.Entity;
using Hh.Mes.POJO.Response;
using Hh.Mes.Service.Repository;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace Hh.Mes.Service.Configure
{
    /// <summary>
    /// 工厂
    /// </summary>
    public class FactoryService : RepositorySqlSugar<base_factory>
    {
        /// <summary>
        /// 新增  code = 字典前缀+对应表标识最大值
        /// </summary>
        /// <returns></returns>
        public dynamic Ins(base_factory model)
        {
            var response = new Response();
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                model.keys = Guid.NewGuid();
                model.createBy = base.sysWebUser?.Account;
                model.createTime = DateTime.Now;
                //var prefix = base.GetDictionaryDictValue("base_factory");
                //var maxValue = GetTableMaxValue<base_factory>("id");
                //model.factoryCode = prefix + maxValue;
                response.Status = Add(model);
                if (!response.Status) response.Message = "新增失败";
                return response;
            });
        }

        /// <summary>
        /// 根据主键数组 删除
        /// </summary>
        public dynamic DelByIds(string[] ids)
        {
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                var Result = new Response { Message = "" };
                var index = 0;
                foreach (var id in ids)
                {
                    var isExist = Context.Queryable<base_equipment>().Any(u => u.factoryCode == id);//是否存在
                    if (isExist)
                    {
                        index++;
                        //提示
                        Result.Code = 500;
                        Result.Message += $"keys为【{id}】的在设备表里面存在数据不能删除!!!";
                    }
                }
                if (index > 0) return Result;
                var result = Context.Deleteable<base_factory>().In(x => x.factoryCode, ids).ExecuteCommand() > 0;
                if (!result)
                {
                    Result.Code = 300;
                    Result.Message = SystemVariable.dataActionError;
                }
                return Result;
            });
        }

        /// <summary>
        /// 更新
        /// </summary>
        public dynamic Upd(base_factory model)
        {
            var response = new Response();
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                response.Status = Update(model);
                if (!response.Status) response.Message = SystemVariable.dataActionError;
                return response;
            });
        }

        #region 旧代码

        //public Task<DataSet> Load(PageReq pageReq, base_factory mode)
        //{
        //    string orderBy = (pageReq == null || string.IsNullOrEmpty(pageReq.field)) ? " id desc" : $"{pageReq.field} {pageReq.order} ";
        //    string sqlWhere = LoadSqlWhere(mode);
        //    var stringBuilder = new StringBuilder();
        //    //页码,页数
        //    //Exel ture 不分页
        //    if (!mode.Exel && pageReq != null)
        //    {
        //        stringBuilder.Append("declare @pageIndex int,@pageSize int,@offset int");
        //        stringBuilder.AppendLine($"  select @pageIndex={pageReq.page}, @pageSize={pageReq.limit}, @offset=(@pageIndex - 1) * @pageSize");
        //    }

        //    stringBuilder.AppendLine($@" select t1.*,t2.userAccount from base_factory t1 
        //                                 left join sys_user_project_rel t2 on t1.projectKeys=t2.clientKeys 
        //                                 where {sqlWhere}
        //                                 order by {orderBy} ");

        //    //Exel false 分页
        //    if (!mode.Exel)
        //    {
        //        stringBuilder.AppendLine("  offset @offset row fetch next @pageSize row only ");
        //        stringBuilder.Append($@" select rowTotal= count(*) from base_factory  t1  with(nolock)  
        //                                 left join sys_user_project_rel t2 on t1.projectKeys=t2.clientKeys  
        //                                 where {sqlWhere}");
        //    }
        //    return base.Context.Ado.GetDataSetAllAsync(stringBuilder.ToString(), new List<SugarParameter>(){
        //        new SugarParameter("@factoryCode", $"%{mode.factoryCode}%"),
        //        new SugarParameter("@factoryName", $"%{mode.factoryName}%"),
        //        new SugarParameter("@factorySelectWhere", $"{mode.factorySelectWhere}"),
        //    });
        //}

        //private string LoadSqlWhere(base_factory mode)
        //{
        //    var stringBuilder = new StringBuilder();
        //    stringBuilder.Append(" 1=1 ");
        //    if (!string.IsNullOrEmpty(mode.factoryCode))
        //    {
        //        stringBuilder.Append(" and  t1.factoryCode like  @factoryCode");
        //    }
        //    if (!string.IsNullOrEmpty(mode.factoryName))
        //    {
        //        stringBuilder.Append(" and  t1.factoryName like  @factoryName");
        //    }
        //    if (!string.IsNullOrEmpty(mode.projectKeysString))
        //    {
        //        var projectKeysList = mode.projectKeysString.Split(',', StringSplitOptions.RemoveEmptyEntries);
        //        var projectKeys = string.Join("','", projectKeysList.ToArray());
        //        stringBuilder.AppendFormat(" and t1.projectKeys in ('{0}')", projectKeys);

        //    }
        //    if (!string.IsNullOrEmpty(mode.factorySelectWhere))
        //    {
        //        stringBuilder.Append(" and  t1.projectKeys =  @factorySelectWhere");
        //    }
        //    //非管理员,查询登陆用户绑定 信息
        //    string user = sysWebUser.Account;
        //    if (user != SystemVariable.DefaultCreated)
        //    {
        //        stringBuilder.Append($" and  t2.userAccount ='{user}'");
        //    }
        //    return stringBuilder.ToString();
        //}

        #endregion

        public Response<List<base_factory>> Load(PageReq pageReq, base_factory mode)
        {
            var response = new Response<List<base_factory>>();
            try
            {
                var query = Context.Queryable<base_factory>().Where(LinqWhere(mode));
                var count = query.Count();
                var data = new List<base_factory>();
                if (!mode.Exel)
                {
                    data = query.ToList();
                }
                else
                {
                    data = query.ToPageList(pageReq.page, pageReq.limit).ToList();
                }
                response.Count = count;
                response.Result = data;
                return response;

            }
            catch (Exception ex)
            {
                response.Status = false;
                response.Message = ex.Message;
                return response;
            }
        }

        private Expression<Func<base_factory, bool>> LinqWhere(base_factory model)
        {
            var exp = Expressionable.Create<base_factory>();
            if (!string.IsNullOrWhiteSpace(model.factoryCode))
            {
                exp.And(x => x.factoryCode.Contains(model.factoryCode));
            }
            if (!string.IsNullOrWhiteSpace(model.factoryName))
            {
                exp.And(x => x.factoryName.Contains(model.factoryName));
            }
            //设备列表:选择项目联动查询厂房
            if (!string.IsNullOrEmpty(model.factorySelectWhere))
            {
                Guid.TryParse(model.factorySelectWhere, out var guid);
                exp.And(x => x.projectKeys == guid);
            }

            if (model.projectKeys != Guid.Empty)
            {
                exp.And(x => x.projectKeys == model.projectKeys);
            }
            else
            {
                string user = sysWebUser.Account;
                if (user != SystemVariable.DefaultCreated)
                {
                    var projectRoleKeys = GetProjectRoleKeys(user);
                    exp.And(x => SqlFunc.Subqueryable<sys_role_projects_rel>().Where(c => projectRoleKeys.Contains(c.project_roles_key) && c.project_key == x.keys).Any());
                }
            }

            return exp.ToExpression();//拼接表达式
        }

        /// <summary>
        /// 导出 
        /// </summary>
        public dynamic ExportData(base_factory entity)
        {
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                //var result = new Response();
                //var ds = Load(null, entity);
                //if (ds == null || ds.Result.Tables[0].Rows.Count == 0)
                //{
                //    result.Result = "[]";
                //    result.Count = 0;
                //}
                //else
                //{
                //    result.Result = ds.Result.Tables[0];
                //    result.Count = result.Result.Rows.Count;
                //}
                //return result;
                var result = Load(null, entity);
                return result;
            }, catchRetrunValue: "list");
        }
    }
}