BaseEquipmentService.cs 10.8 KB
using Hh.Mes.Common.Infrastructure;
using Hh.Mes.Common.log;
using Hh.Mes.Common.Request;
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;
using Hh.Mes.Pojo.System;
using NPOI.SS.Formula.Functions;

namespace Hh.Mes.Service.Equipment
{
    public class BaseEquipmentService : RepositorySqlSugar<base_equipment>
    {
        public dynamic Load(PageReq pageReq, base_equipment entity)
        {
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                var result = new Response();

                //先组合查询表达式
                dynamic query = null;

                //如果非管理员查出对应用户客户管理项目下厂房里的设备:
                string currentUser = sysWebUser.Account;
                if (currentUser != SystemVariable.DefaultCreated)
                {
                    var expression = LinqWhereNoSystem(entity);
                    query = Context.Queryable<sys_user_client_rel, base_project_client_rel, base_equipment, base_equipment_type, base_project, base_sim_equipment_rel, base_factory>
                                                            ((x, y, z, type, p, s, f) =>
                                                              new JoinQueryInfos(JoinType.Inner, x.userAccount == currentUser && x.clientKeys == y.clientKeys,
                                                                                 JoinType.Inner, y.projectKeys == z.projectKeys,
                                                                                 JoinType.Inner, z.equipmentTypeCode == type.code,
                                                                                 JoinType.Inner, z.projectKeys == p.keys,
                                                                                 JoinType.Left, s.equipmentCode == z.equipmentCode,
                                                                                 JoinType.Inner, f.projectKeys == z.projectKeys && f.factoryCode == z.factoryCode
                                                                                )
                                                            )
                                                          .Where(expression)
                                                          .Select((x, y, z, type, p, s, f) => new
                                                          {
                                                              z.id,
                                                              z.projectKeys,
                                                              p.projectName,
                                                              z.factoryCode,
                                                              s.simNumber,
                                                              f.factoryName,

                                                              z.equipmentCode,
                                                              z.equipmentName,
                                                              z.equipmentTypeCode,
                                                              type.name,

                                                              z.destinationArea,
                                                              z.ip,
                                                              z.remark,
                                                              z.equipmentMaintainRuleCode,
                                                              z.isEnable,
                                                              z.startTime,

                                                              z.createBy,
                                                              z.createTime,
                                                              z.updateBy,
                                                              z.updateTime,
                                                          });

                }
                else
                {
                    var expression = LinqWhereSystem(entity);
                    query = Context.Queryable<base_equipment, base_equipment_type, base_project, base_sim_equipment_rel, base_factory>
                                                          ((x, y, p, s, f) =>
                                                           new JoinQueryInfos(
                                                               JoinType.Inner, x.equipmentTypeCode == y.code,
                                                               JoinType.Inner, x.projectKeys == p.keys,
                                                               JoinType.Left, s.equipmentCode == x.equipmentCode,
                                                               JoinType.Inner, f.projectKeys == x.projectKeys && f.factoryCode == x.factoryCode
                                                               )
                                                          )
                                                          .Where(expression)
                                                          .Select((x, y, p, s, f) => new
                                                          {
                                                              x.id,
                                                              x.projectKeys,
                                                              p.projectName,
                                                              x.factoryCode,
                                                              s.simNumber,
                                                              f.factoryName,

                                                              x.equipmentCode,
                                                              x.equipmentName,
                                                              x.equipmentTypeCode,
                                                              y.name,

                                                              x.destinationArea,
                                                              x.ip,
                                                              x.remark,
                                                              x.equipmentMaintainRuleCode,
                                                              x.isEnable,
                                                              x.startTime,

                                                              x.createBy,
                                                              x.createTime,
                                                              x.updateBy,
                                                              x.updateTime,
                                                          });
                }


                //Exel false 分页
                if (!entity.Exel)
                {
                    int total = 0;
                    result.Result = query.ToOffsetPage(pageReq.page, pageReq.limit, ref total);
                    result.Count = total;
                }
                else
                {
                    result.Result = query.ToList();
                    result.Count = result.Result.Count();
                }
                return result;
            }, catchRetrunValue: "list");
        }

        public dynamic Ins(base_equipment entity)
        {
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                var response = new Response();
                entity.createBy = sysWebUser?.Account;
                entity.createTime = DateTime.Now;
                response.Status = Add(entity);
                if (!response.Status) response.Message = SystemVariable.dataActionError;
                return response;
            });
        }

        public dynamic Upd(base_equipment entity)
        {
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                var response = new Response();
                entity.updateBy = sysWebUser?.Account;
                entity.updateTime = DateTime.Now;
                response.Status = Update(entity);
                if (!response.Status) response.Message = SystemVariable.dataActionError;
                return response;
            });
        }

        public dynamic DelByIds(int[] ids)
        {
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                var response = new Response();
                Context.Deleteable<base_equipment>(t => ids.Contains(t.id)).ExecuteCommand();
                return response;
            });
        }

        public Response ExportData(base_equipment entity)
        {
            return Load(null, entity);
        }

        public Expression<Func<sys_user_client_rel, base_project_client_rel, base_equipment, base_equipment_type, base_project, bool>> LinqWhereNoSystem(base_equipment model)
        {
            try
            {
                var exp = Expressionable.Create<sys_user_client_rel, base_project_client_rel, base_equipment, base_equipment_type, base_project>();
                if (!string.IsNullOrWhiteSpace(model.equipmentCode))
                {
                    exp.And((x, y, z, type, p) => z.equipmentCode.Contains(model.equipmentCode));
                }
                if (!string.IsNullOrWhiteSpace(model.equipmentName))
                {
                    exp.And((x, y, z, type, p) => z.equipmentName.Contains(model.equipmentName));
                }
                if (model.projectKeys != Guid.Empty)
                {
                    exp.And((x, y, z, type, p) => z.projectKeys == model.projectKeys);
                }
                return exp.ToExpression();//拼接表达式
            }
            catch (Exception ex)
            {
                throw new Exception($"{ex.Message}");
            }
        }



        public Expression<Func<base_equipment, base_equipment_type, base_project, bool>> LinqWhereSystem(base_equipment model)
        {
            try
            {
                var exp = Expressionable.Create<base_equipment, base_equipment_type, base_project>();
                if (!string.IsNullOrWhiteSpace(model.equipmentCode))
                {
                    exp.And((x, y, p) => x.equipmentCode.Contains(model.equipmentCode));
                }
                if (!string.IsNullOrWhiteSpace(model.equipmentName))
                {
                    exp.And((x, y, p) => x.equipmentName.Contains(model.equipmentName));
                }
                if (model.projectKeys != Guid.Empty)
                {
                    exp.And((x, y, p) => x.projectKeys == model.projectKeys);
                }
                return exp.ToExpression();//拼接表达式
            }
            catch (Exception ex)
            {
                throw new Exception($"{ex.Message}");
            }
        }
    }
}