Commit 1d3c42c8 by Neo Turing

init

parents
################################################################################
# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
################################################################################
/Src/bin
/Src/obj
using Kivii.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims
{
internal class Configs
{
//------------数据库表名称
public const string TableNameReport = "LIMS_Reports";
public const string TableNameReportFile = "LIMS_ReportFiles";
public const string TableNameReportHistory = "LIMS_Reports_History";
public const string TableNameReportItem = "LIMS_ReportItems";
public const string TableNameReportItemHistory = "LIMS_ReportItems_History";
public const string TableNameReportJudgement = "LIMS_ReportJudgements";
public const string TableNameTest = "LIMS_Tests";
public const string TableNameTestHistory = "LIMS_Tests_History";
public const string TableNameSample = "LIMS_Samples";
public const string TableNameTemplate = "LIMS_Templates";
public const string TableNameTemplateFile = "LIMS_TemplateFiles";
public const string TableNameSampleSource = "LIMS_SampleSources";
public const string TableNameTemplateDetail = "LIMS_TemplateDetails";
public const string TableNameReportNote = "LIMS_ReportNotes";
public const string TableNameReportChange = "LIMS_ReportChanges";
public const string TableNameThirdReportOrder = "LIMS_ThirdReportOrders";
public const string TableNameThirdReportOrderDetail = "LIMS_ThirdReportOrderDetails";
public const string TableNameB2bLink = "LIMS_B2bLinks";
//public const string TableNameSampleSource = "LIMS_SampleSource";
public const string RouteLimsReportRead = "/Lims/ReportRead";
public const string RouteReportPdf = "/Lims/Report/{Code}/{ReportId}";
public const string RouteReportGenerateSourcePath = "/Report/Excel";
public const string RouteReportGenerateCombineSourcePath = "/Report/Excel01";
public const string RouteReportSampleFilePath = "/Samples/Images";
public static List<string> JudgementNoPassResults = new List<string> { "不合格", "不符合", "抗沾湿性能较差", "抗沾湿性能差", "不具有抗沾湿性能", "抗勾丝性能差", "抗静水压性能差", "抗静电性能差" };
public static ILog Logger { get; } = LogManager.GetLogger("Kivii.Lac.Lims");
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
[Alias(Configs.TableNameB2bLink)]
[Api(Description = "电商客户关系表")]
public class B2bLink: EntityWithMetadata, IEntityInAssemblyDb,
IEntityHasCreator,IEntityHasUpdater
{
[ApiMember(Description = "所属客户Kvid")]
[IgnoreUpdate]
[Required]
public Guid OwnerKvid { get; set; }
[ApiMember(Description = "所属客户名称")]
[Default("")]
[StringLength(500)]
public string OwnerName { get; set; }
[ApiMember(Description = "关联类型")]
[StringLength(100)]
public LinkType LinkType { get; set; }
[ApiMember(Description = "关联客户Kvid")]
[IgnoreUpdate]
[Required]
public Guid LinkKvid { get; set; }
[ApiMember(Description = "关联客户名称")]
[Default("")]
[StringLength(500)]
public string LinkName { get; set; }
[ApiMember(Description = "配置参数")]
[StringLength(int.MaxValue)]//必须要配置StringLength,因为序列化的文本比较大
//Default(""), 不能赋空值,在mySql中会报错
public string Parameters { get; set; }
[ApiMember(Description = "配置查询")]
[StringLength(int.MaxValue)]//必须要配置StringLength,因为序列化的文本比较大
public string Filters { get; set; }
[ApiMember(Description = "备注")]
[StringLength(2000)]
public string Remark { get; set; }
#region 创建/更新人V1.0
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
public enum LinkType
{
Unsupported = 0,// 不支持的类型
/// <summary>
/// 委托单位
/// </summary>
Demander,
/// <summary>
/// 生产单位
/// </summary>
Manufacturer,
/// <summary>
/// 付款单位
/// </summary>
Payer
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
/// <summary>
/// Status约束:100(草稿状态),150(审批中),200(审批通过)
/// </summary>
[Alias(Configs.TableNameReportChange)]
[Api(Description = "报告更改")]
public class ReportChange: EntityWithMetadata
{
#region 第三方关联
[ApiMember(Description = "业务Kvid")]
[IgnoreUpdate]
[DefaultEmptyGuid]
public Guid BizKvid { get; set; }
[ApiMember(Description = "业务流水号")]
[IgnoreUpdate]
[StringLength(200), Default("")]
public string BizId { get; set; }
[ApiMember(Description = "业务类型,指实体类型全名称")]
[IgnoreUpdate]
[StringLength(200), Default("")]
public string BizType { get; set; }
#endregion
#region 关联信息
/// <summary>
/// 关联报告Kvid
/// </summary>
[ApiMember(Description = "报告Kvid")]
[DefaultEmptyGuid]
public Guid ReportKvid { get; set; }
#endregion
#region 原报告信息,冗余信息
/// <summary>
/// 报告编号
/// </summary>
[ApiMember(Description = "报告编号")]
[StringLength(50), Default("")]
public string ReportId { get; set; }
/// <summary>
/// 委托单位
/// </summary>
[ApiMember(Description = "需方Kvid")]
[DefaultEmptyGuid]
public Guid ReportDemanderKvid { get; set; }
[ApiMember(Description = "需方名称,即检测单位")]
[StringLength(100), Required]
public string ReportDemanderName { get; set; }
[DefaultEmptyGuid]
public Guid ReportDemanderContactKvid { get; set; }
[ApiMember(Description = "需方联系人")]
[StringLength(100), Default("")]
public string ReportDemanderContactName { get; set; }
/// <summary>
/// 生产单位
/// </summary>
[ApiMember(Description = "生产单位Kvid")]
[DefaultEmptyGuid]
public Guid ReportSampleManufacturerKvid { get; set; }
[ApiMember(Description = "生产单位")]
[StringLength(100), Default("")]
public string ReportSampleManufacturerName { get; set; }
/// <summary>
/// 样品名称
/// </summary>
[ApiMember(Description = "样品名称")]
[StringLength(200), Required]
public string ReportSampleName { get; set; }
/// <summary>
/// 样品批次号
/// </summary>
[ApiMember(Description = "样品批次号")]
[StringLength(200), Default("")]
public string ReportSampleBatchNumber { get; set; }
/// <summary>
/// 检验依据
/// </summary>
[ApiMember(Description = "检验依据")]
[StringLength(1000), Default("")]
public string ReportTestStandards { get; set; }
/// <summary>
/// 原报告付款单位Kvid
/// </summary>
[DefaultEmptyGuid]
public Guid ReportPayerKvid { get; set; }
/// <summary>
/// 原报告付款单位
/// </summary>
[ApiMember(Description = "付款单位,贷方")]
[StringLength(100)]
public string ReportPayerName { get; set; }
/// <summary>
/// 报告受理人Kvid
/// </summary>
[ApiMember(Description = "原报告受理人Kvid")]
[DefaultEmptyGuid]
public Guid ReportOperatorKvid { get; set; }
/// <summary>
/// 报告接待人(受理人)
/// </summary>
[ApiMember(Description = "受理人姓名")]
[StringLength(50), Default("")]
public string ReportOperatorName { get; set; }
/// <summary>
/// 报告签发人Kvid
/// </summary>
[ApiMember(Description = "原报告签发人Kvid")]
[DefaultEmptyGuid]
public Guid ReportIssuerKvid { get; set; }
/// <summary>
/// 报告签发人
/// </summary>
[ApiMember(Description = "签发人姓名")]
[StringLength(50), Default("")]
public string ReportIssuerName { get; set; }
/// <summary>
/// 原报告委托日期
/// </summary>
[ApiMember(Description = "委托日期")]
public DateTime? ReportDealDate { get; set; }
/// <summary>
/// 原报告要求完成日期
/// </summary>
[ApiMember(Description = "完成日期")]
public DateTime? ReportDeadDate { get; set; }
/// <summary>
/// 原报告备注
/// </summary>
[ApiMember(Description = "报告备注")]
[StringLength(2000), Default("")]
public string ReportRemark { get; set; }
#endregion
#region 基本信息
[ApiMember(Description = "编号")]
[SerialNumber]
[StringLength(100), Default("")]
public string SerialNumber { get; set; }
/// <summary>
/// 报告份数
/// </summary>
[ApiMember(Description = "报告份数")]
[DecimalLength(4, 2), Default(0)]
public decimal Quantity { get; set; }
[ApiMember(Description = "数量单位")]
[Ignore]
public string QuantityUnit
{
get
{
return "份";
}
}
/// <summary>
/// 更改类型
/// </summary>
[ApiMember(Description = "更改类型")]
[StringLength(200)]
[Default("")]
public string Type { get; set; }
/// <summary>
/// 更改报告内容
/// </summary>
[ApiMember(Description = "更改内容")]
[StringLength(2000)]
public string Content { get; set; }
/// <summary>
/// 费用信息
/// </summary>
[ApiMember(Description = "货币单位")]
[IgnoreUpdate]
[StringLength(50), Required]
public CurrencyUnit Currency { get; set; }
[ApiMember(Description = "更改费")]
[DecimalLength(10, 2), Default(0)]
public decimal Amount { get; set; }
/// <summary>
/// 经办人Kvid
/// </summary>
[DefaultEmptyGuid]
public Guid OperatorKvid { get; set; }
/// <summary>
/// 更改报告受理人(经办人)
/// </summary>
[ApiMember(Description = "经办人姓名")]
[StringLength(20), Default("")]
public string OperatorName { get; set; }
/// <summary>
/// 责任人
/// </summary>
[ApiMember(Description = "责任人Kvid")]
[DefaultEmptyGuid]
public Guid PersonLiableKvid { get; set; }
[ApiMember(Description = "责任人姓名")]
[StringLength(50), Default("")]
public string PersonLiableName { get; set; }
/// <summary>
/// 审批人
/// </summary>
[ApiMember(Description = "审批人Kvid")]
[DefaultEmptyGuid]
public Guid ApproverKvid { get; set; }
[ApiMember(Description = "审批人姓名")]
[StringLength(50), Default("")]
public string ApproverName { get; set; }
/// <summary>
/// 受理日期:默认为当天日期
/// </summary>
[ApiMember(Description = "受理日期")]
public DateTime? OperateDate { get; set; }
/// <summary>
/// 要求完成日期
/// </summary>
[ApiMember(Description = "完成日期")]
public DateTime? DeadDate { get; set; }
/// <summary>
/// 备注
/// </summary>
[ApiMember(Description = "备注")]
[StringLength(2000), Default("")]
public string Remark { get; set; }
#endregion
#region 创建/更新人V1.0
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
[Api(Description = "报告文件")]
[Alias(Configs.TableNameReportFile)]
public class ReportFile: EntityWithMetadata, IEntityInAssemblyDb
{
/// <summary>
/// 报告号
/// </summary>
[Required]
[ApiMember(Description = "所属报告Kvid")]
public Guid ReportKvid { get; set; }
/// <summary>
/// 使用到的模板的Kvid,避免更新Report中的Template后,重新生成ReportFile
/// </summary>
[Required]
[ApiMember(Description = "所属模板Kvid")]
public Guid TemplateKvid { get; set; }
/// <summary>
/// 文件Kvid
/// </summary>
//[DefaultEmptyGuid]
//[ApiMember(Description = "存储Kvid")]
//public Guid DbFileKvid { get; set; }
/// <summary>
/// 模板Kvid
/// </summary>
[Required]
[ApiMember(Description = "模板Kvid")]
public Guid TemplateFileKvid { get; set; }
/// <summary>
/// 文件名称
/// </summary>
[StringLength(200),Required]
[ApiMember(Description = "文件名称")]
public string Name { get; set; }
/// <summary>
/// 文件标签,
/// 设计规则:
/// 在某一状态需要重新生成,则在状态值前加G
/// 如:G100,代表Status为100时,重新生成文件;
/// 200,代表Status为200时根据已经生成的文件基础上执行生成程序
/// </summary>
[Default("")]
[StringLength(200)]
[ApiMember(Description = "文件标签")]
public string Tags { get; set; }
/// <summary>
/// 模板路径
/// </summary>
[StringLength(500),Required]
[ApiMember(Description = "模板路径")]
public string TemplateFilePath { get; set; }
/// <summary>
/// 排序号,一定要正确,合成报告时用到
/// </summary>
[Default(0)]
[ApiMember(Description = "排序号")]
public int SortID { get; set; }
/// <summary>
/// 生成的报告路径
/// </summary>
[StringLength(500)]
[Default("")]
[ApiMember(Description = "生成路径")]
public string Path { get; set; }
#region 创建/更新人V1.0
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
[Alias(Configs.TableNameReportNote)]
[Api(Description = "报告流转")]
public class ReportNote : EntityWithMetadata
{
#region 关联相关
/// <summary>
/// 报告Kvid
/// </summary>
[ApiMember(Description = "报告Kvid")]
[DefaultEmptyGuid]
public Guid ReportKvid { get; set; }
#endregion
/// <summary>
/// 流转标题
/// </summary>
[ApiMember(Description = "流转标题")]
[StringLength(100), Required]
public string Title { get; set; }
/// <summary>
/// 流转类型
/// </summary>
[ApiMember(Description = "流转类型")]
[StringLength(100), Default("")]
public string Type { get; set; }
/// <summary>
/// 当前流程
/// </summary>
[ApiMember(Description = "当前流程")]
[StringLength(100), Required]
public string From { get; set; }
/// <summary>
/// 目标流程
/// </summary>
[ApiMember(Description = "目标流程")]
[StringLength(100), Required]
public string To { get; set; }
/// <summary>
/// 操作人
/// </summary>
[ApiMember(Description = "操作人")]
[StringLength(100), Default("")]
public string OperatorName { get; set; }
/// <summary>
/// 操作人Kvid
/// </summary>
[ApiMember(Description = "操作人Kvid")]
public Guid OperatorKvid { get; set; }
/// <summary>
/// 操作日期
/// </summary>
[ApiMember(Description = "操作日期")]
public DateTime OperateTime { get; set; }
/// <summary>
/// 摘要
/// </summary>
[ApiMember(Description = "摘要")]
[StringLength(1000), Default("")]
public string Summary { get; set; }
/// <summary>
/// IP地址
/// </summary>
[ApiMember(Description = "IP地址")]
[StringLength(100), Default(""),IgnoreUpdate]
[CurrentIpAddress]
public string IP { get; set; }
}
public class ReportNoteEx : ReportNote
{
public string ReportId { get; set; }
public string ReportOperatorName { get; set; }
public string ReportPreparerName { get; set; }
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
[Alias(Configs.TableNameSample)]
[Api(Description = "样品信息")]
public class Sample: EntityWithMetadata, IEntityInAssemblyDb,IEntityHasRemark,IEntityHasCreator, IEntityHasUpdater
{
#region 关联信息
[ApiMember(Description = "样品来源Kvid")]
[DefaultEmptyGuid]
public Guid SourceKvid { get; set; }
[InternalSetter]
[DefaultEmptyGuid]
public Guid RootKvid { get; set; }
[ApiMember(Description ="父级样品Kvid")]
[DefaultEmptyGuid]
public Guid ParentKvid { get; set; }
#endregion
#region 样品来源信息(冗余字段)
/// <summary>
/// 来源编号,若为抽样,则记录计划编号,若为邮寄到样,则记录快递单号
/// </summary>
[ApiMember(Description = "来源编号")]
[StringLength(200), Default("")]
public string SourceBatchNumber { get; set; }
[ApiMember(Description = "来样方式")]
[StringLength(50), Default("")]
public string SourceType { get; set; }
#endregion
#region 基本信息
[ApiMember(Description = "样品名称")]
[Required]
[StringLength(200)]
public string Name { get; set; }
[ApiMember(Description ="样品类型")]
[StringLength(50),Default("")]
public string Type { get; set; }
[ApiMember(Description = "样品批次编号")]
[StringLength(200), Default("")]
public string BatchNumber { get; set; }
[ApiMember(Description = "样品编号")]
[SerialNumber]
[StringLength(100), Default("")]
public string SerialNumber { get; set; }
[ApiMember(Description = "样品品牌")]
[StringLength(200),Default("")]
public string Brand { get; set; }
[ApiMember(Description = "样品规格")]
[StringLength(200), Default("")]
public string Specification { get; set; }
[ApiMember(Description = "样品型号")]
[StringLength(200), Default("")]
public string Model { get; set; }
[ApiMember(Description = "样品材质")]
[StringLength(200), Default("")]
public string Material { get; set; }
/// <summary>
/// 样品品级
/// </summary>
public string Grade { get; set; }
/// <summary>
/// 安全类别
/// </summary>
public string GradeSafety { get; set; }
[ApiMember(Description = "样品状况")]
[StringLength(200), Default("")]
public string Condition { get; set; }
#endregion
#region 数量相关
[ApiMember(Description = "样品数量")]
[DecimalLength(10, 2),Default(0)]
public decimal Quantity { get; set; }
[ApiMember(Description = "数量单位")]
[StringLength(50), Default("")]
public string QuantityUnit { get; set; }
#endregion
#region 生产单位信息及生产日期
[ApiMember(Description = "生产单位Kvid")]
[DefaultEmptyGuid]
[IgnoreUpdate]
public Guid ManufacturerKvid { get; set; }
[ApiMember(Description = "生产单位")]
[StringLength(100), Default("")]
public string ManufacturerName { get; set; }
[ApiMember(Description = "生产单位联系人Kvid")]
[DefaultEmptyGuid]
[IgnoreUpdate]
public Guid ManufacturerContactKvid { get; set; }
[ApiMember(Description = "生产单位联系人姓名")]
[StringLength(50), Default("")]
public string ManufacturerContactName { get; set; }
[ApiMember(Description = "生产单位联系人电话")]
[StringLength(50), Default("")]
//正则表达式验证:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})
public string ManufacturerContactNumber { get; set; }
[ApiMember(Description = "生产单位地址")]
[StringLength(200), Default("")]
public string ManufacturerAddress { get; set; }
[ApiMember(Description = "生产日期")]
public DateTime? ProductionDate { get; set; }
#endregion
#region 文本 备注
[ApiMember(Description = "备注")]
[StringLength(1000), Default("")]
public string Remark { get; set; }
#endregion
#region 创建/更新人V1.0
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
[Alias(Configs.TableNameSampleSource)]
[Api(Description = "样品来源信息")]
public class SampleSource: EntityWithMetadata,IEntityHasBiz, IEntityInAssemblyDb, IEntityHasRemark, IEntityHasCreator, IEntityHasUpdater
{
#region 第三方关联V1.0
//可关联快递+省局抽样任务等信息
[ApiMember(Description = "业务Kvid")]
[IgnoreUpdate]
[DefaultEmptyGuid]
public Guid BizKvid { get; set; }
[ApiMember(Description = "业务流水号")]
[IgnoreUpdate]
[StringLength(200), Default("")]
public string BizId { get; set; }
[ApiMember(Description = "业务类型,指实体类型全名称")]
[IgnoreUpdate]
[StringLength(200), Default("")]
public string BizType { get; set; }
#endregion
#region 基本信息
/// <summary>
/// 送样,快递等
/// </summary>
[ApiMember(Description = "来源类型")]
[StringLength(100), Required]
public string Type { get; set; }
/// <summary>
/// 来源编号:若为邮寄到样,则记录快递单号
/// </summary>
[ApiMember(Description = "来源编号")]
[StringLength(200), Default("")]
public string BatchNumber { get; set; }
#endregion
#region 日期单位
/// <summary>
/// 快递或送样默认为到样时间
/// </summary>
[ApiMember(Description = "到样日期")]
public DateTime EffectiveDate { get; set; }
#endregion
#region 文本描述和 备注
[ApiMember(Description = "备注")]
[StringLength(1000)]
public string Remark { get; set; }
#endregion
#region 创建/更新人V1.0
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
public enum TemplateType
{
Unsupported = 0,
Common = 1,
EnterPrise = 2,
Supervise = 3
}
public enum TemplateCategoryType
{
Unsupported = 0,
Report = 1,//报告模板
SDMS = 2,//原始记录模板
ReportItem = 3//检验项目模板
}
/// <summary>
/// 模板的流程状态设置,暂定6个状态
/// </summary>
public enum StatusType
{
Unsupported = 0,
First = 100,
Second = 200,
Third = 300,
Fourth = 400,
Fifth = 500,
Sixth = 600
}
/// <summary>
/// 可管理报告模板、原始记录模板、检验项目模板
/// </summary>
[Api(Description = "模版管理")]
[Alias(Configs.TableNameTemplate)]
public class Template:EntityWithMetadata, IEntityInAssemblyDb
{
//2021/01/15因项目模板需要树形结构显示,新增树形结构
[DefaultEmptyGuid]
public Guid RootKvid { get; set; }
[DefaultEmptyGuid]
public Guid ParentKvid { get; set; }
[Required]
[ApiMember(Description = "模版名称")]
public string Name { get; set; }
/// <summary>
/// 用于记录通用模板、企业模板等
/// 在Type为Report时使用,枚举类型
/// </summary>
[Required]
[ApiMember(Description = "模板类型")]
public TemplateType Type { get; set; }
/// <summary>
/// 用于记录报告模板,还是原始记录模板,还是检验项目模板
/// 枚举类型
/// </summary>
[Required]
[ApiMember(Description = "模板类别")]
public TemplateCategoryType Category { get; set; }
[Default(0)]
[ApiMember(Description = "排序号")]
public int SortId { get; set; }
[ApiMember(Description = "生效日期")]
public DateTime? EffectiveTime { get; set; }
[ApiMember(Description = "失效日期")]
public DateTime? ExpiredTime { get; set; }
[ApiMember(Description = "是否受控")]
[Default(0)]
public bool IsUnderController { get; set; }
/// <summary>
/// 一个受控号可能存在多个模板,所以不能唯一
/// </summary>
[Default("")]
[ApiMember(Description = "受控号")]
public string UnderControllerId { get; set; }
[Default("")]
[ApiMember(Description ="备注")]
public string Remark { get; set; }
#region 创建/更新人V1.0
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
public enum TemplateDetailType
{
Unsupported = 0,
/// <summary>
/// 检测项目录,有子项的大项
/// </summary>
TestFolder,
/// <summary>
/// 检测项,子项或者无子项的大项
/// </summary>
Test
}
[Alias(Configs.TableNameTemplateDetail)]
[Api(Description = "项目模版明细")]
public class TemplateDetail : EntityWithMetadata, IEntityInAssemblyDb
{
[DefaultEmptyGuid]
public Guid OwnerKvid { get; set; }
#region 检验项目信息
[DefaultEmptyGuid]
public Guid RootKvid { get; set; }
[ApiMember(Description = "关联父级Kvid")]
[DefaultEmptyGuid]
public Guid ParentKvid { get; set; }
[ApiMember(Description = "引用标准Kvid")]
[DefaultEmptyGuid]
public Guid StandardKvid { get; set; }
[ApiMember(Description = "标准代码")]
[Default("")]
[StringLength(200)]
public string StandardCode { get; set; }
[ApiMember(Description = "标准名称")]
[Default("")]
[StringLength(200)]
public string StandardTitle { get; set; }
[ApiMember(Description = "引用检测项目Kvid")]
[DefaultEmptyGuid]
public Guid DetectionKvid { get; set; }
[ApiMember(Description = "引用检测项目名称")]
[Default("")]
[StringLength(200)]
public string DetectionTitle { get; set; }
[ApiMember(Description = "测试方法")]
[Default("")]
[StringLength(200)]
public string DetectionCodeActual { get; set; }
[Default("")]
[ApiMember(Description = "数值单位")]
[StringLength(100)]
public string DetectionUnit { get; set; }
[ApiMember(Description = "标准值")]
[StringLength(500)]
public string DetectionValueQualified { get; set; }
[ApiMember(Description = "引用原生检测项目Kvid")]
[DefaultEmptyGuid]
public Guid DetectionReferenceKvid { get; set; }
#endregion
#region 金额相关
[ApiMember(Description = "货币单位")]
[IgnoreUpdate]
[Default("")]
[StringLength(20)]
public CurrencyUnit Currency { get; set; }
[ApiMember(Description = "条目Kvid")]
[DefaultEmptyGuid]
public Guid GoodsKvid { get; set; }
[ApiMember(Description = "包装Kvid")]
[DefaultEmptyGuid]
public Guid PackageKvid { get; set; }
[ApiMember(Description = "价格类型")]
[Default("")]
public string PackageUnit { get; set; }
[ApiMember(Description = "价格")]
[DecimalLength(10, 2), Default(0)]
public decimal Amount { get; set; }
#endregion
#region 基本信息
[ApiMember(Description = "检验项目类型")]
public TemplateDetailType Type { get; set; }
[ApiMember(Description = "项目名称", IsRequired = true)]
[Required]
[StringLength(500)]
public string Title { get; set; }
[ApiMember(Description = "首要排序号")]
[Default(0)]
public int SortId { get; set; }
[ApiMember(Description = "次要排序号")]
[Default(0)]
public int SortIdEx { get; set; }
[ApiMember(Description = "备注")]
[StringLength(2000)]
public string Remark { get; set; }
#endregion
#region 检测人员信息
/// <summary>
/// 录入人员与检测人员的区别:
/// 录入人员指实际录数据的人员
/// 检测人员指实验还未开始,由相关部门将该检验分配给的指定检测人员
/// </summary>
[ApiMember(Description = "检测小组Kvid")]
[DefaultEmptyGuid]
public Guid WorkGroupKvid { get; set; }
[ApiMember(Description = "检测小组")]
[StringLength(50)]
public string WorkGroupName { get; set; }
[ApiMember(Description = "检测人员Kvid")]
[DefaultEmptyGuid]
public Guid WorkerKvid { get; set; }
[ApiMember(Description = "检测人员")]
[StringLength(50), Default("")]
public string WorkerName { get; set; }
#endregion
#region 创建/更新人V1.0
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
/// <summary>
/// 记录模板和文件的关系及标签
/// </summary>
[Api(Description = "模版文件")]
[Alias(Configs.TableNameTemplateFile)]
public class TemplateFile:EntityWithMetadata, IEntityInAssemblyDb
{
[Required]
public Guid TemplateKvid { get; set; }
[StringLength(200), Required]
[ApiMember(Description = "文件名称")]
public string Name { get; set; }
/// <summary>
/// 记录文件的物理路径
/// </summary>
[StringLength(200), Required]
[IgnoreUpdate]
[ApiMember(Description ="文件路径")]
public string Path { get; set; }
/// <summary>
/// 用来记录当前模板在指定状态生成
/// 设计规则:
/// 1、记录Report的Status,字母+数字,用逗号分隔,如U100,G200,300
/// 2、G+Status 重新生成
/// 3、U+Status 在已有的文件上生成
/// 若无字母前缀,默认在已有文件上生成
/// </summary>
[StringLength(200), Default("")]
[ApiMember(Description = "文件标签")]
public string Tags { get; set; }
[Default(0)]
[ApiMember(Description = "排序号")]
public int SortId { get; set; }
#region 创建/更新人V1.0
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "更新人Kvid ")]
[CurrentMemberKvid]
public Guid UpdaterKvid { get; set; }
[ApiMember(Description = "更新人")]
[StringLength(50), CurrentMemberName]
public string UpdaterName { get; set; }
#endregion
}
}
using Kivii.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lims.Entities
{
[Alias(Configs.TableNameTest)]
[Api(Description = "检验信息")]
public class Test : EntityWithMetadata, IEntityInAssemblyDb, IEntityHasCreator,IEntityHasRemark,IEntityHasRole
{
/// <summary>
/// 聚合同一项目下的所有检测记录
/// </summary>
[ApiMember(Description = "RootKvid")]
[DefaultEmptyGuid]
[IgnoreUpdate]
public Guid RootKvid { get; set; }
#region 关联信息
[ApiMember(Description = "样品Kvid")]
[DefaultEmptyGuid]
[IgnoreUpdate]
public Guid SampleKvid { get; set; }
[ApiMember(Description = "样品根Kvid")]
[DefaultEmptyGuid]
public Guid SampleRootKvid { get; set; }
[ApiMember(Description ="关联方法标准Kvid")]
[Required]
public Guid StandardKvid { get; set; }
[ApiMember(Description = "关联方法标准的检验项目Kvid")]
[Required]
public Guid DetectionKvid { get; set; }
#endregion
[ApiMember(Description = "实测值")]
[StringLength(500)]
public string Value { get; set; }
[ApiMember(Description = "原始记录路径")]
[StringLength(200),Default("")]
public string OriginalFilePath { get; set; }
#region 人员相关
[ApiMember(Description = "创建人Kvid ")]
[IgnoreUpdate]
[CurrentMemberKvid]
public Guid CreatorKvid { get; set; }
[ApiMember(Description = "创建人")]
[IgnoreUpdate]
[StringLength(50), CurrentMemberName]
public string CreatorName { get; set; }
[ApiMember(Description = "审核人员Kvid")]
[DefaultEmptyGuid]
public Guid ReviewerKvid { get; set; }
[ApiMember(Description = "审核人员")]
[StringLength(50), Default("")]
public string ReviewerName { get; set; }
#endregion
[ApiMember(Description = "备注信息")]
[StringLength(200),Default("")]
public string Remark { get; set; }
#region 时间相关
[ApiMember(Description = "审核时间")]
public DateTime? ReviewTime { get; set; }
#endregion
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
using Kivii.Lims.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Extensions
{
/// <summary>
/// 报告明细格式化筛选扩展类,使用internal 类型,说明这些扩展方法只能在本动态库中使用
/// </summary>
internal static class ReportItemFormatterExtensions
{
/// <summary>
/// 获取检验大项集合,不包含树形结构。
/// </summary>
/// <param name="allReportItems">必须是一个报告的全项</param>
/// <returns></returns>
public static List<ReportItem> GetMainTest(this List<ReportItem> allReportItems)
{
var rtns = new List<ReportItem>();
if (allReportItems.IsNullOrEmpty()) return rtns;
foreach (var item in allReportItems)
{
if (item.Type == ReportItemType.TestFolder)
{
rtns.Add(item);
continue;
}
if (item.Type == ReportItemType.Test)
{
if (item.ParentKvid == Guid.Empty)
{
rtns.Add(item);
continue;
}
var parentTest = allReportItems.FirstOrDefault(o => o.Kvid == item.ParentKvid);
////如果原列表里未找到父级,需要去数据库里找到
if (parentTest == null)
{
}
//要是仍然为空再跳过
if (parentTest == null) continue;
if (parentTest.Type != ReportItemType.TestFolder)
{
rtns.Add(item);
continue;
}
}
}
return rtns;
}
public static List<ReportItemEx> getTreeItemsEx(this List<ReportItemEx> datasource, Guid kvid)
{
var rtns = datasource.Where(o => o.ParentKvid == kvid).OrderBy(o => o.ReportKvid).OrderBy(o => o.SortId).ThenBy(o => o.SortIdEx).ThenBy(o => o.Title).ToList();
if (rtns.IsNullOrEmpty()) return null;
foreach (var rtn in rtns)
{
rtn.SubItemExs = getTreeItemsEx(datasource, rtn.Kvid);
}
return rtns;
}
public static void getPlatItemsEx(this List<ReportItemEx> treeItems, List<ReportItemEx> rtns)
{
if (treeItems.IsNullOrEmpty()) return;
foreach (var item in treeItems)
{
rtns.Add(item);
getPlatItemsEx(item.SubItemExs, rtns);
item.SubItemExs = null;
}
}
}
}
using Kivii.Lims.Entities;
using Kivii.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims
{
public static class SampleExtension
{
/// <summary>
/// 获取子样品的流水号
/// </summary>
/// <param name="sample"></param>
/// <param name="conn"></param>
/// <returns></returns>
[Obsolete("此方法过期")]
public static string GetSubSerialNumber(this Sample sample, IDbConnection conn = null)
{
sample.RootKvid.ThrowIfEmpty("RootKvid不能为空");
if (conn == null) conn = KiviiContext.GetOpenedDbConnection<Sample>();
var rootSample = conn.SingleById<Sample>(sample.RootKvid);
rootSample.ThrowIfNull("主样品不存在");
var allcount = conn.Count<Sample>(o => o.RootKvid == rootSample.Kvid);
//allcount不需要加1,因为Root的也统计进去了
return $"{rootSample.SerialNumber}-{allcount}";
}
}
}
using Kivii.Lac.Lims.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims
{
public class ReportFeature : IPlugin
{
public void Register(IAppHost appHost)
{
appHost.RegisterService<ReportService>();
}
}
}
using Kivii.Lims.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Interfaces
{
public interface IReportInterface
{
object Execute(Report report, string certificateType);
}
}
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C95B0C60-754F-4248-A65A-B1918D533983}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Kivii.Lac.Lims</RootNamespace>
<AssemblyName>Kivii.Lac.Lims.V4.5</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Kivii.Common.V4.5, Version=5.6.2024.11000, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Kivii.Common.5.6.2024.11000\lib\net45\Kivii.Common.V4.5.dll</HintPath>
</Reference>
<Reference Include="Kivii.Core.V4.5, Version=5.6.2024.11000, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Kivii.Core.5.6.2024.11000\lib\net45\Kivii.Core.V4.5.dll</HintPath>
</Reference>
<Reference Include="Kivii.Linq.V4.5, Version=5.6.2024.11000, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Kivii.Linq.5.6.2024.11000\lib\net45\Kivii.Linq.V4.5.dll</HintPath>
</Reference>
<Reference Include="Kivii.Office.OpenXml.V4.5, Version=5.6.2025.3220, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Kivii.Office.OpenXml.5.6.2025.3220\lib\net45\Kivii.Office.OpenXml.V4.5.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Configs.cs" />
<Compile Include="Entities\B2bLink.cs" />
<Compile Include="Entities\Report.cs" />
<Compile Include="Entities\ReportChange.cs" />
<Compile Include="Entities\ReportFile.cs" />
<Compile Include="Entities\ReportItem.cs" />
<Compile Include="Entities\ReportNote.cs" />
<Compile Include="Entities\Sample.cs" />
<Compile Include="Entities\SampleSource.cs" />
<Compile Include="Entities\Template.cs" />
<Compile Include="Entities\TemplateDetail.cs" />
<Compile Include="Entities\TemplateFile.cs" />
<Compile Include="Entities\Test.cs" />
<Compile Include="Extensions\ReportExtension.cs" />
<Compile Include="Extensions\ReportItemExtension.cs" />
<Compile Include="Extensions\ReportItemExtensions.Formatter.cs" />
<Compile Include="Extensions\SampleExtension.cs" />
<Compile Include="Features\ReportFeature.cs" />
<Compile Include="Interfaces\IReportInterface.cs" />
<Compile Include="LimsRole.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\ReportService.cs" />
<Compile Include="Transforms\ReportRequest.cs" />
<Compile Include="Transforms\RestfulB2bLink.cs" />
<Compile Include="Transforms\RestfulReport.cs" />
<Compile Include="Transforms\RestfulReport.Statistic.cs" />
<Compile Include="Transforms\RestfulReportChange.cs" />
<Compile Include="Transforms\RestfulReportFile.cs" />
<Compile Include="Transforms\RestfulReportItem.cs" />
<Compile Include="Transforms\RestfulReportItem.Query.cs" />
<Compile Include="Transforms\RestfulReportNote.cs" />
<Compile Include="Transforms\RestfulSample.cs" />
<Compile Include="Transforms\RestfulSampleSource.cs" />
<Compile Include="Transforms\RestfulTemplate.cs" />
<Compile Include="Transforms\RestfulTemplateDetail.cs" />
<Compile Include="Transforms\RestfulTemplateFile.cs" />
<Compile Include="Transforms\RestfulTest.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims
{
public class LimsRoles:IMemberRoleProvider
{
[RoleMember("实验室管理员","对实验室所有业务均具有管理权限",0)]
public const string Manager = "126D20A0-C426-437C-B808-BBA8DB269079";
[RoleMember("业务员", "负责业务受理", 0)]
public const string LimsBusinesser = "99526FD4-7F9D-4814-938C-82F9343946E7";
[RoleMember("合同评审员", "对业务受理数据进行评审", 0)]
public const string ContractReviewer = "326FAB64-AD05-4971-B9B7-0644D4DDFEE5";
[RoleMember("分派员", "对报告中所有的检测项目进行分组,安排任务至各检测组", 0)]
public const string Assigner = "9B56C205-04F9-42C1-87DD-F07E4DC28860";
[RoleMember("检验管理员", "管理当前报告内所有的检测项目信息", 0)]
public const string InspectAdministrator = "0097112F-474A-4B16-A060-2ABE3DF4BE4D";
[RoleMember("检验员", "对报告中的检测项目进行数据录入和数据复核", 0)]
public const string Inspector = "101A88A8-7EBF-47F4-974B-CB8E6F616DA6";
[RoleMember("编制人", "对报告内容及检测数据进行编制,生成电子文档,调整数据格式", 0)]
public const string Preparer = "6F62FE01-E0D5-4A27-8ABF-F118BFEA807C";
[RoleMember("审核人", "对报告内容进行审核", 0)]
public const string Reviewer = "1CF93FBE-F553-4A8E-ADF9-F0C364E40790";
[RoleMember("签发人", "负责对最终的报告进行签发", 0)]
public const string Issuer = "BD00C812-B4B0-4A7A-88FE-3878505F5346";
[RoleMember("打印员", "系统内置打印员", 0)]
public const string Printor = "6AF0FD59-D9A2-40D6-9954-A27CB2C19E2D";
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("Kivii.Lac.Lims.V4.5")]
[assembly: AssemblyDescription("实验室资质认证Lims")]//Lac:Laboratory Accreditation/Certification 实验室认可/认证
[assembly: AssemblyDefaultAlias("Kivii.Lac.Lims")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Kivii.Lac.Lims.V4.5")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("c95b0c60-754f-4248-a65a-b1918d533983")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.4.2025.5160")]
[assembly: AssemblyFileVersion("5.4.2025.5160")]
using Kivii.Lims.Entities;
using Kivii.Lac.Lims.Transforms;
using Kivii.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Services
{
public class ReportService : Service
{
public object Any(ReportPdf request)
{
request.Code.ThrowIfNullOrEmpty("请传入验证码{Code}");
request.ReportId.ThrowIfNullOrEmpty("请传入报告号{ReportId}.Pdf");
var conn = KiviiContext.GetOpenedDbConnection<Report>();
var queryReportKvid = conn.From<Report>();
queryReportKvid.Where(o => o.ReportId == request.ReportId);
queryReportKvid.Select(o => o.Kvid);
var reportKvid = conn.Single<Guid>(queryReportKvid);
reportKvid.ThrowIfEmpty($"未找到此报告{request.ReportId}");
(!reportKvid.ToString().ToLower().StartsWith(request.Code.ToLower())).ThrowIfTrue("验证码Code 不正确!");
var queryPdfEntityFile = conn.From<EntityDbFile<Report>>();
queryPdfEntityFile.Where(o => o.OwnerKvid == reportKvid && o.ParentKvid == Guid.Empty && o.Extension.ToLower() == ".pdf"&&o.DbFolderPath == "/Reports/Pdf");
var pdfEntityFile = conn.Single(queryPdfEntityFile);
(pdfEntityFile == null).ThrowIfTrue("未找到文件");
if (request.View.IsNullOrEmpty())
{
var physicalFilePath = pdfEntityFile.GetPhysicalPath();
var fileInfo = new FileInfo(physicalFilePath);
return new HttpResult(fileInfo, asAttachment: request.Download, fileName: pdfEntityFile.Name);//asAttachment是否直接下载,fileName文件名称
}
var virtualFilePath = pdfEntityFile.GetVirtualPath();
pdfEntityFile.Path = virtualFilePath;
return new HttpResult
{
Response = pdfEntityFile,
View = request.View
};
}
}
}
using Kivii.Lims;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
[Route(Configs.RouteReportPdf)]
public class ReportPdf
{
public string Code { get; set; }
public string ReportId { get; set; }
public string View { get; set; }
public bool Download { get; set; } = false;
}
}
using Kivii.Lims.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
#region CUDQR
[RequiresAnyRole(SystemRoles.Everyone)]
public class B2bLinkCreate : RestfulCreate<B2bLink> { }
[RequiresAnyRole(SystemRoles.Everyone)]
public class B2bLinkUpdate : RestfulUpdate<B2bLink> { }
[RequiresAnyRole(SystemRoles.Everyone)]
public class B2bLinkDelete : RestfulDelete<B2bLink> { }
[RequiresAnyRole(SystemRoles.Everyone)]
public class B2bLinkQuery : RestfulQuery<B2bLink> { }
[RequiresAnyRole(SystemRoles.Everyone)]
public class B2bLinkRead : RestfulRead<B2bLink> { }
#endregion
}
using Kivii.Lims.Entities;
using Kivii.Lac.Lims.Extensions;
using Kivii.Linq;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
public class ReportStatisticResponse : RestfulQueryResponse<Report>
{
public DateTime BeginTime { get; set; }
public DateTime EndTime { get; set; }
/// <summary>
/// 付款金额
/// </summary>
public decimal AmountPayment { get; set; }
/// <summary>
/// 结算金额
/// </summary>
public decimal AmountSettlement { get; set; }
/// <summary>
/// 报告费 (ServiceFee)
/// </summary>
public decimal AmountReport { get; set; }
/// <summary>
/// 更改报告费 (ChangeFee)
/// </summary>
public decimal AmountReportChange { get; set; }
/// <summary>
/// 检验费(Task表统计来,区别与TaskFee)
/// </summary>
public decimal AmountTask { get; set; }
public decimal AmountUrgent { get; set; }
/// <summary>
/// 检验折后费(Task表统计来,区别与TasksDisCountFee)
/// </summary>
public decimal AmountTaskDiscount { get; set; }
/// <summary>
/// 套餐费(PackageFee)
/// </summary>
public decimal AmountPackage { get; set; }
/// <summary>
/// 应收检测费 AmountTask*UrgentRate
/// </summary>
public decimal AmountTaskTotal { get; set; }
/// <summary>
/// 实收检测费 AmountTaskDiscount*UrgentRate
/// </summary>
public decimal AmountTaskDiscountTotal { get; set; }
/// <summary>
/// 报告批次(不包含X报告)
/// </summary>
public int Quantity { get; set; }
/// <summary>
/// X报告批次
/// </summary>
public int XQuantity { get; set; }
public object GetReportItems()
{
var reportKvids = new List<Guid>();
var rtns = new List<ReportItem>();
if (!Results.IsNullOrEmpty())
{
reportKvids.AddRange(Results.Select(o => o.Kvid));
var conn = KiviiContext.GetOpenedDbConnection<ReportItem>();
rtns = conn.Select<ReportItem>(o => Sql.In(o.ReportKvid, reportKvids));
}
foreach (var item in Results)
{
var details = rtns.Where(o => o.ReportKvid == item.Kvid).ToList();
item.Tag = details.filterReportItem();
}
return rtns;
}
}
[Api(Description = "报告合同统计")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class ReportGroupQuotation : RestfulExecution<Report>
{
public Guid QuotationKvid { get; set; }
public DateTime BeginTime { get; set; }
public DateTime EndTime { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
QuotationKvid.ThrowIfEmpty("请传入要统计的合同信息!");
int monthDay = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
if (BeginTime == DateTime.MinValue) BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
if (EndTime == DateTime.MinValue) EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, monthDay);
BeginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd"));
EndTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
if (EndTime < BeginTime) throw new Exception("查询结束日期不可小于开始日期!");
var conn = KiviiContext.GetOpenedDbConnection<Report>();
var query = conn.From<Report>();
query.Where(o => o.QuotationKvid == QuotationKvid && o.DealDate >= BeginTime && o.DealDate < EndTime);
query.Select(o => new { o.QuotationName, o.DealDate, o.Amount, o.AmountPlan, o.AmountTest, o.AmountTestPlan, o.AmountSettlement, o.AmountPayment, o.QuotationAmount });
query.OrderBy(o => o.DealDate);
var reports = conn.Select(query);
var rtns = new ReportStatisticResponse();
rtns.Results = new List<Report>();
rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime;
if (reports.IsNullOrEmpty()) return rtns;
reports.ForEach(o =>//处理如果有协议费,那就把折后的检测费清除,方便最终统计
{
if (o.QuotationAmount > 0) o.AmountTest = 0;
});
var group = reports.GroupBy(o => new { o.QuotationName, Category = o.DealDate.Value.ToString("yyyy-MM") });
foreach (var key in group)
{
var item = new Report();
item.QuotationName = key.Key.QuotationName;
item.Category = key.Key.Category;
item.Quantity = key.Count();
item.Amount = key.Sum(o => o.Amount);
item.AmountPlan = key.Sum(o => o.AmountPlan);
item.AmountTest = key.Sum(o => o.AmountTest);
item.AmountTestPlan = key.Sum(o => o.AmountTestPlan);
item.AmountSettlement = key.Sum(o => o.AmountSettlement);
item.AmountPayment = key.Sum(o => o.AmountPayment);
item.QuotationAmount = key.Sum(o => o.QuotationAmount);
rtns.Results.Add(item);
}
rtns.Total = rtns.Results.Count;
return rtns;
}
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
using Kivii.Lims.Entities;
using Kivii.Linq;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
[RequiresAnyRole(SystemRoles.Everyone)]
public class ReportFileQuery:RestfulQuery<ReportFile>
{
}
[RequiresAnyRole(SystemRoles.Everyone)]
public class ReportFileUpdate : RestfulUpdate<ReportFile>
{
}
[RequiresAnyRole(SystemRoles.Everyone)]
public class ReportFileDelete : RestfulDelete<ReportFile>
{
}
[RequiresAnyRole(SystemRoles.Everyone)]
public class ReportFileUpdateSortId : RestfulExecution<ReportFile>
{
public List<ReportFile> reportFiles { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
#region 数据验证
(reportFiles.Count == 0).ThrowIfTrue("未传入操作数据!");
#endregion
var conn = KiviiContext.GetOpenedDbConnection<ReportFile>();
var rtns = new RestfulQueryResponse<ReportFile>();
rtns.Results = new List<ReportFile>();
foreach (var reportFile in reportFiles)
{
reportFile.AddOnlyProperties(o=>o.SortID);
conn.UpdateOnly(reportFile);
rtns.Results.Add(reportFile);
}
rtns.Total = rtns.Results.Count;
return rtns;
}
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
using Kivii.Lims.Entities;
using Kivii.Linq;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
#region CUDQR
[RequiresAnyRole(SystemRoles.Everyone)]
public class ReportNoteQuery:RestfulQuery<ReportNote> { }
#endregion
#region 报告打回及返工任务查询
[Api(Description = "报告打回及返工任务查询")]
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class ReportNoteQueryEx : RestfulExecution<ReportNote>
{
//参数名不能与返回的字段同名
public string ReportIdFilter { get; set; }
public string ReportOperatorNameFilter { get; set; }
public DateTime? DeadDateGreaterThanOrEqualTo { get; set; }
public DateTime? DeadDateLessThanOrEqualTo { get; set; }
#region QueryArgs
public virtual int? Skip { get; set; }
public virtual int? Take { get; set; }
public virtual string OrderBy { get; set; }
public string OrderByDesc { get; set; }
public virtual string Include { get; set; }
public virtual string Fields { get; set; }
public string QueryKeys { get; set; }
public string QueryValues { get; set; }
#endregion
public override object OnExecution(IRequest req, IResponse res)
{
//返工的title要提前组织好
List<string> titles = new List<string>();
titles.Add("任务打回");
titles.Add("项目打回");
titles.Add("回收");
titles.Add("报告召回");
var conn = KiviiContext.GetOpenedDbConnection<ReportNote>();
var dynamicParams = Request.GetRequestParams();
var autoQuery = Request.TryResolve<IAutoQueryDb>();
autoQuery.IncludeTotal = true;
var request = new RestfulQuery<ReportNoteEx>();
request.PopulateWith(this);
var sqlExpress = autoQuery.CreateQuery(Request, conn, request, dynamicParams);
sqlExpress
.LeftJoin<Report>((reportNoteEx, report) => reportNoteEx.ReportKvid == report.Kvid)
.Select<ReportNote, Report>((reportNote, report) => new
{
T = Sql.AllFields(reportNote),
report.ReportId,
ReportOperatorName = report.OperatorName,
ReportPreparerName = report.PreparerName
});
sqlExpress.And<ReportNote>(o => Sql.In(o.Title, titles));
if (!ReportIdFilter.IsNullOrEmpty())
{
sqlExpress.And<Report>(o => o.ReportId.Contains(ReportIdFilter));
}
if (!ReportOperatorNameFilter.IsNullOrEmpty())
{
sqlExpress.And<Report>(o => o.OperatorName.Contains(ReportOperatorNameFilter));
}
if (DeadDateGreaterThanOrEqualTo != null)
{
sqlExpress.And<Report>(o => o.DeadDate >= DeadDateGreaterThanOrEqualTo);
}
if (DeadDateLessThanOrEqualTo != null)
{
sqlExpress.And<Report>(o => o.DeadDate <= DeadDateLessThanOrEqualTo);
}
var rtns = autoQuery.Execute(Request, conn, request, sqlExpress);
return rtns;
}
}
#endregion
}
using Kivii.Lims;
using Kivii.Lims.Entities;
using Kivii.Linq;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
#region CDUQD
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleCreate : RestfulCreate<Sample> { }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleDelete : RestfulDelete<Sample> { }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleUpdate : RestfulUpdate<Sample> { }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleQuery : RestfulQuery<Sample> { }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleRead : RestfulRead<Sample> { }
#endregion
[RequiresAnyRole(SystemRoles.Everyone)]
public class SampleBindImages : RestfulExecution<Sample>
{
public Guid DbFileKvid { get; set; }
public List<Guid> DbFileKvids { get; set; }
public Guid ReportKvid { get; set; }
public bool AutoDelete { get; set; } = true;
public override object OnExecution(IRequest req, IResponse res)
{
(DbFileKvid == Guid.Empty && DbFileKvids.IsNullOrEmpty()).ThrowIfTrue("Need DbFileKvid Or DbFileKvids!");
if (DbFileKvids.IsNullOrEmpty()) DbFileKvids = new List<Guid>();
if (DbFileKvid != Guid.Empty) DbFileKvids.Add(DbFileKvid);
if (ReportKvid == Guid.Empty) throw new Exception("缺少关联报告信息");
var conn = KiviiContext.GetOpenedDbConnection<Report>();
var report = conn.SingleById<Report>(ReportKvid);
if (report == null) throw new Exception("未找到此报告信息!");
conn.InitEntityType<EntityDbFile<Sample>>();
var dbFiles = conn.SelectByIds<EntityDbFile<Sample>>(DbFileKvids);
if (dbFiles.IsNullOrEmpty()) throw new Exception("未找到要关联的图片");
var rtns = new RestfulExecutionResponse<EntityDbFile<Sample>>();
rtns.Results = new List<EntityDbFile<Sample>>();
foreach (var item in dbFiles)
{
var filePath = item.GetPhysicalPath();
Stream mStream = File.OpenRead(filePath);
var sPath = $"/Storages{Configs.RouteReportSampleFilePath}/{report.SampleKvid}/{item.Name}";
var virtualFile = KiviiContext.VirtualFiles.WriteFile(sPath, mStream);
mStream.Close();
mStream.Dispose();
if (AutoDelete) conn.DeleteById<EntityDbFile<Sample>>(item.Kvid);
rtns.Results.Add(item);
}
return rtns;
}
}
#region 新建报告绑定Sample功能
//[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
//[Api(Description = "样品绑定")]
//public class SampleBind : RestfulExecution<Sample>
//{
// public Guid SampleKvid { get; set; }
// public Report Report { get; set; }
// public override object OnExecution(IRequest req, IResponse res)
// {
// //验证数据有效性
// var conn = KiviiContext.GetOpenedDbConnection<Report>();
// var sample = conn.SingleById<Sample>(SampleKvid);
// sample.ThrowIfNull("未查询到绑定的样品信息!");
// if (Report.Kvid != Guid.Empty) throw new Exception("当前报告已关联了样品,无法绑定新的样品!");
// var rtns = new RestfulCreateResponse<Report>();
// var trans = conn.OpenTransaction();
// try
// {
// //创建report
// var report = new Report();
// report.PopulateWith(Report);
// report.Kvid = Guid.NewGuid();
// report.ReportId = string.Empty;
// report.SampleBatchNumber = sample.BatchNumber;
// report.SampleBrand = sample.Brand;
// report.SampleGrade = sample.Grade;
// report.SampleGradeSafety = sample.GradeSafety;
// report.SampleKvid = sample.Kvid;
// report.SampleManufacturerAddress = sample.ManufacturerAddress;
// report.SampleManufacturerContactKvid = sample.ManufacturerContactKvid;
// report.SampleManufacturerContactName = sample.ManufacturerContactName;
// report.SampleManufacturerContactNumber = sample.ManufacturerContactNumber;
// report.SampleManufacturerKvid = sample.ManufacturerKvid;
// report.SampleManufacturerName = sample.ManufacturerName;
// report.SampleModel = sample.Model;
// report.SampleName = sample.Name;
// report.SampleQuantity = sample.Quantity;
// report.SampleQuantityUnit = sample.QuantityUnit;
// conn.Insert(report);
// report.RemoveAllOnlyProperties();
// rtns.Results = new List<Report>();
// rtns.Results.Add(report);
// //查询Test
// var queryTests = conn.From<Test>();
// queryTests.Where(o => o.SampleKvid == SampleKvid);
// var tests = conn.Select(queryTests);
// //创建ReportJudgement
// foreach (var test in tests)
// {
// var reportJudgement = new ReportJudgement();
// reportJudgement.ReportKvid = report.Kvid;
// reportJudgement.TestKvid = test.Kvid;
// reportJudgement.ValueUnit = test.ValueUnit;
// reportJudgement.ValueQualified = test.ValueQualified;
// conn.Insert(reportJudgement);
// }
// trans?.Commit();
// }
// catch(Exception ex)
// {
// trans?.Rollback();
// throw ex;
// }
// return rtns;
// }
//}
#endregion
}
using Kivii.Lims.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
#region CDUQD
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleSourceCreate : RestfulCreate<SampleSource> { }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleSourceDelete : RestfulDelete<SampleSource> { }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleSourceUpdate : RestfulUpdate<SampleSource> { }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleSourceQuery : RestfulQuery<SampleSource> { }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class SampleSourceRead : RestfulRead<SampleSource> { }
#endregion
}
using Kivii.Lims.Entities;
using Kivii.Linq;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateCreate : RestfulCreate<Template>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateRead : RestfulRead<Template>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateUpdate : RestfulUpdate<Template>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateDelete : RestfulDelete<Template>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateQuery : RestfulQuery<Template>
{ }
[RequiresAnyRole(SystemRoles.Everyone)]
public class TemplateQueryByCustomer : RestfulExecution<Template>
{
public List<Guid> CustomerKvids { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
var rtns = new RestfulQueryResponse<Template>();
rtns.Results = new List<Template>();
var conn = KiviiContext.GetOpenedDbConnection<Template>();
var queryRelatedTemplateKvid = conn.From<EntityRelation<Template>>();
queryRelatedTemplateKvid.Where(o => o.RelationType == "Kivii.Customers.Entities.Customer" && Sql.In(o.RelationKvid, CustomerKvids));
queryRelatedTemplateKvid.SelectDistinct(o => o.EntityKvid);
var queryTemplate = conn.From<Template>();
queryTemplate.Where(o => o.EffectiveTime <= DateTime.Now && (o.ExpiredTime >= DateTime.Now||o.ExpiredTime == null));
queryTemplate.Where(o => o.Type == TemplateType.Common || Sql.In(o.Kvid, queryRelatedTemplateKvid));
queryTemplate.OrderBy(o => o.SortId);
rtns.Results = conn.Select(queryTemplate);
rtns.Total = rtns.Results.Count;
return rtns;
}
}
}
using Kivii.Lims.Entities;
using Kivii.Linq;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateDetailCreate : RestfulCreate<TemplateDetail>
{
public override bool OnPreRestfulCreate(IRequest req, IResponse res, IDbConnection dbConnection, IRestfulCreateResponse<TemplateDetail> rtns)
{
#region 项目类型判断
if (Item.ParentKvid != Guid.Empty)
{
var parentNode = dbConnection.SingleById<TemplateDetail>(Item.ParentKvid);
if (parentNode != null)
{
(parentNode.Type == TemplateDetailType.Unsupported).ThrowIfTrue("未知项下不可建立子项!");
if (parentNode.Type == TemplateDetailType.Test)
{
(Item.Type != TemplateDetailType.Test).ThrowIfTrue($"此项下不可建立当前类型{Item.Type}!");
parentNode.Type = TemplateDetailType.TestFolder;
parentNode.AddOnlyProperties(o => o.Type);
dbConnection.UpdateOnly(parentNode);
}
}
else Item.ParentKvid = Guid.Empty;
}
#endregion
Item.AddOnlyProperties(o => o.Status);
return base.OnPreRestfulCreate(req, res, dbConnection, rtns);
}
}
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateDetailRead : RestfulRead<TemplateDetail>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateDetailUpdate : RestfulUpdate<TemplateDetail>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateDetailDelete : RestfulDelete<TemplateDetail>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateDetailQuery : RestfulQuery<TemplateDetail>
{ }
}
using Kivii.Lims.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateFileCreate : RestfulCreate<TemplateFile>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateFileRead : RestfulRead<TemplateFile>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateFileUpdate : RestfulUpdate<TemplateFile>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateFileDelete : RestfulDelete<TemplateFile>
{ }
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
public class TemplateFileQuery : RestfulQuery<TemplateFile>
{ }
}
using Kivii;
using Kivii.Lims.Entities;
using Kivii.Lac.Lims.Extensions;
using Kivii.Linq;
using Kivii.Linq.Legacy;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Kivii.Lac.Lims.Transforms
{
#region CQ
[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
[Api(Description = "查询")]
public class TestQuery : RestfulQuery<Test>
{ }
/// <summary>
/// 创建Test时更新对应Report中的实测值字段
/// </summary>
//[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
//[Api(Description = "创建")]
//public class TestCreate : RestfulCreate<Test>
//{
// public Guid ReportItemKvid { get; set; }
// public override bool OnPreRestfulCreate(IRequest req, IResponse res, IDbConnection dbConnection, IRestfulCreateResponse<Test> rtns)
// {
// var reportItem = dbConnection.SingleById<ReportItem>(ReportItemKvid);
// reportItem.ThrowIfNull("未找到检测项!");
// Item.Kvid = Guid.NewGuid();
// Item.AddOnlyProperties(o => o.Kvid);
// Item.RootKvid = Item.Kvid;
// if (reportItem.TestKvid != Guid.Empty)
// {
// var originalTest = dbConnection.SingleById<Test>(reportItem.TestKvid);
// if (originalTest == null) throw new Exception("数据异常,未找到源检验数据!");
// Item.RootKvid = originalTest.RootKvid;
// }
// Item.AddOnlyProperties(o => o.RootKvid);
// Item.SampleKvid = reportItem.SampleKvid;
// Item.AddOnlyProperties(o => o.SampleKvid);
// Item.SampleRootKvid = reportItem.SampleRootKvid;
// Item.AddOnlyProperties(o => o.SampleRootKvid);
// return base.OnPreRestfulCreate(req, res, dbConnection, rtns);
// }
// public override bool OnPostRestfulCreate(IRequest req, IResponse res, IDbConnection dbConnection, IRestfulCreateResponse<Test> rtns)
// {
// var reportItem = dbConnection.SingleById<ReportItem>(ReportItemKvid);
// var currentTest = rtns.Results.FirstOrDefault();
// reportItem.TestKvid = currentTest.Kvid;
// reportItem.TestRootKvid = currentTest.RootKvid;
// reportItem.TestCreateTime = currentTest.CreateTime;
// reportItem.TestCreatorKvid = currentTest.CreatorKvid;
// reportItem.TestCreatorName = currentTest.CreatorName;
// reportItem.TestValue = currentTest.Value;
// reportItem.StatusType = ReportItemStatusType.BeforeReview;
// reportItem.AddOnlyProperties(o => new { o.TestKvid, o.TestRootKvid, o.TestCreateTime, o.TestCreatorKvid, o.TestCreatorName, o.TestValue, o.Status });
// dbConnection.UpdateOnly(reportItem);
// return base.OnPostRestfulCreate(req, res, dbConnection, rtns);
// }
//}
#endregion
#region <待重写,99>根据某一条Test生成复测记录
//[RequiresAnyRole(SystemRoles.Administrator, SystemRoles.Manager, SystemRoles.Configuration)]
//[Api(Description = "生成复测")]
//public class TestRepeat : RestfulExecution<Test>
//{
// private IDbTransaction _trans;
// public List<Guid> TestKvids { get; set; }
// public Guid ReportKvid { get; set; }
// public override object OnExecution(IRequest req, IResponse res)
// {
// var conn = KiviiContext.GetOpenedDbConnection<Test>();
// var queryTest = conn.From<Test>();
// queryTest.Where(o => Sql.In(o.Kvid, TestKvids));
// var reTests = conn.Select(queryTest);
// if (reTests.Exists(o => o.Type != TestType.Test)) throw new Exception("待复测项存在类型为非检验项类型,无法复测!");
// if (reTests.Exists(o => o.ValueTested == null || o.ValueTested == string.Empty)) throw new Exception("存在无实测值的待复测项,无法复测!");
// _trans = conn.OpenTransaction();
// var response = new RestfulCreateResponse<Test>();
// response.Results = new List<Test>();
// foreach (var reTest in reTests)
// {
// //生成复测项目
// var newTest = new Test();
// newTest.PopulateWith(reTest);
// newTest.Kvid = Guid.NewGuid();
// newTest.ValueTested = string.Empty;
// newTest.Type = TestType.ReTest;
// conn.Insert(newTest);
// response.Results.Add(newTest);
// //在ReportJudgement中创建对应关系
// var reportJudgement = new ReportJudgement();
// reportJudgement.ReportKvid = ReportKvid;
// reportJudgement.TestKvid = newTest.Kvid;
// reportJudgement.ValueUnit = newTest.ValueUnit;
// reportJudgement.ValueQualified = newTest.ValueQualified;
// conn.Insert(reportJudgement);
// }
// _trans?.Commit();
// return response;
// }
//}
#endregion
}
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Kivii.Common" version="5.6.2024.11000" targetFramework="net45" />
<package id="Kivii.Core" version="5.6.2024.11000" targetFramework="net45" />
<package id="Kivii.Linq" version="5.6.2024.11000" targetFramework="net45" />
<package id="Kivii.Office.OpenXml" version="5.6.2025.3220" targetFramework="net45" />
</packages>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment