JRT高效率开发

news2024/11/24 6:05:24

得益于前期的基础投入,借助代码生成的加持,本来计划用一周实现质控物维护界面,实际用来四小时左右完成质控物维护主体,效率大大超过预期。

JRT从设计之初就是为了证明Spring打包模式不适合软件服务模式,觉得Spring打包模式开发效率太低、维护不现实、做不到分钟级别的需求响应。从开发环境、部署、脚本化、码表、代码生成、打印导出都用java实现等都是优秀考虑的效率。

质控物是下面这个界面,涉及增删改数据9个表,查树三个表,工作量自己估计,别看表多,增删改查的功能点多,基于JRT、实际写的代码不多,都是用生成代码加级联查询组装的。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
代码结构,没多余概念,只有界面和后台
在这里插入图片描述

主体后台-可以看后台了解JRT推荐的业务范式

import JRT.Core.CustomAttributes.Trans;
import JRT.Core.Dto.OutValue;
import JRT.Core.Util.ReflectUtil;
import JRTBLLBase.BaseHttpHandler;
import JRTBLLBase.Helper;
import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.ParamDto;
import JRT.Core.Dto.OutParam;
import JRT.Model.Entity.*;
import JRT.Core.Util.Convert;
import JRT.Core.MultiPlatform.JRTContext;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
*由代码生成器生成的后台代码
*/
public class ashBTQCMaterial extends BaseHttpHandler {

	/**
	 * 得到仪器树
	 * @return
	 */
	public String GetMachineTree() throws Exception
	{
		List<MachineTreeDto> retList=new ArrayList<>();
		//得到用户可以访问的工作组
		List<SYSUserRole> roleList=EntityManager().FindByColVal(SYSUserRole.class,"UserDR",UserLogin().UserID);
		if(roleList!=null&&roleList.size()>0)
		{
			HashMap hasOutWG=new HashMap();
			for(SYSUserRole role:roleList)
			{
				//每个工作组只输出一次
				if(hasOutWG.containsKey(role.WorkGroupDR))
				{
					continue;
				}
				hasOutWG.put(role.WorkGroupDR,true);
				//工作组树节点
				MachineTreeDto wgTree=new MachineTreeDto();
				wgTree.RowID=role.WorkGroupDR;
				wgTree.id="WG-"+role.WorkGroupDR;
				BTWorkGroup wgDto=EntityManager().DolerGet(BTWorkGroup.class,role.WorkGroupDR);
				wgTree.text=wgDto.CName;
				wgTree.children=new ArrayList<>();
				wgTree.Type="WG";
				retList.add(wgTree);
				//查询所有工作小组
				List<BTWorkGroupMachine> wgmList=EntityManager().FindByColVal(BTWorkGroupMachine.class,"WorkGroupDR",role.WorkGroupDR);
				if(wgmList!=null&&wgmList.size()>0)
				{
					for(BTWorkGroupMachine wgm:wgmList)
					{
						//工作小组树节点
						MachineTreeDto wgmTree=new MachineTreeDto();
						wgmTree.RowID=wgm.RowID;
						wgmTree.id="WGM-"+wgm.RowID;
						wgmTree.text=wgm.CName;
						wgmTree.children=new ArrayList<>();
						wgmTree.Type="WGM";
						wgTree.children.add(wgmTree);
						//查询工作小组下的所有仪器
						List<BTMIMachineParameter> machList=EntityManager().FindByColVal(BTMIMachineParameter.class,"WorkGroupMachineDR",wgm.RowID);
						if(machList!=null&&machList.size()>0)
						{
							for(BTMIMachineParameter mi:machList)
							{
								//仪器树节点
								MachineTreeDto miTree=new MachineTreeDto();
								miTree.RowID=mi.RowID;
								miTree.id="MI-"+mi.RowID;
								miTree.text=mi.CName;
								miTree.Type="MI";
								wgmTree.children.add(miTree);
							}
						}
					}
				}
			}
		}
		//删除没有仪器的节点
		DealNoMachineTree(retList);
		return Helper.Object2Json(retList);
	}


	/**
	 * 保存数据,前台按表的属性名提交
	 * @return 字符串
	 */
	@Trans
	public String SaveBTQCMaterial() throws Exception
    {
		BTQCMaterial dto=new BTQCMaterial();
		//主键  
		dto.RowID=Helper.ValidParam(JRTContext.GetRequest(Request, "RowID"), dto.RowID);
		//代码  
		dto.Code=Helper.ValidParam(JRTContext.GetRequest(Request, "Code"), dto.Code);
		//名称  
		dto.CName=Helper.ValidParam(JRTContext.GetRequest(Request, "CName"), dto.CName);
		//仪器  
		dto.MachineDR=Helper.ValidParam(JRTContext.GetRequest(Request, "MachineDR"), dto.MachineDR);
		//浓度数  
		dto.Levels=Helper.ValidParam(JRTContext.GetRequest(Request, "Levels"), dto.Levels);
		//波长  
		dto.WaveLength=Helper.ValidParam(JRTContext.GetRequest(Request, "WaveLength"), dto.WaveLength);
		//是否自动入库  {1:true,0:false}
		dto.AutoSave=Helper.ValidParam(JRTContext.GetRequest(Request, "AutoSave"), dto.AutoSave);
		//说明  
		dto.Remark=Helper.ValidParam(JRTContext.GetRequest(Request, "Remark"), dto.Remark);
		//序号  
		dto.Sequence=Helper.ValidParam(JRTContext.GetRequest(Request, "Sequence"), dto.Sequence);
		//激活  {1:true,0:false}
		dto.Active=Helper.ValidParam(JRTContext.GetRequest(Request, "Active"), dto.Active);
		//是否覆盖数据  {1:true,0:false}
		dto.IsOverWriteData=Helper.ValidParam(JRTContext.GetRequest(Request, "IsOverWriteData"), dto.IsOverWriteData);
		//不允许日间质控  {1:true,0:false}
		dto.NotAllowDay=Helper.ValidParam(JRTContext.GetRequest(Request, "NotAllowDay"), dto.NotAllowDay);
		//日间质控没做不显示  {1:true,0:false}
		dto.NotShowNullDay=Helper.ValidParam(JRTContext.GetRequest(Request, "NotShowNullDay"), dto.NotShowNullDay);
		OutValue key=new OutValue();
		int ret=0;
		//更新
		if(dto.RowID>0)
		{
			ret=EntityManager().Update(dto,null, ErrRet(), null, null, null);
		}
		//插入数据
		else
		{
			ret=EntityManager().Save(dto,key,ErrRet());
			if(ret==1) {
				for (int i = 0; i < dto.Levels; i++) {
					BTQCMaterialLevel levDto = new BTQCMaterialLevel();
					levDto.CName = "浓度" + (i + 1);
					levDto.Color = "";
					levDto.LevelNo = i + 1;
					levDto.MaterialDR = dto.RowID;
					EntityManager().Save(levDto,key,ErrRet());
				}
			}
			else
			{
				throw new Exception(Err.GetString());
			}
		}
		if(ret==1)
		{
			return Helper.Success();
		}
		else
		{
			return Helper.Error();
		}
    }



	/**
	 * 删除数据,多个RowID以上尖号分割
	 * @return 字符串
	 */
	@Trans
	public String DeleteBTQCMaterial() throws Exception
    {
		String RowIDS=Helper.ValidParam(JRTContext.GetRequest(Request, "RowIDS"), "");
		if(RowIDS.isEmpty())
		{
			return Helper.Error("请传入要删除数据的RowID,多个以^分割!");
		}
		//分割主键
		String [] arr=RowIDS.split("^");
		//out参数
		OutParam out=new OutParam();
		//循环删除数据
		for(int i=0;i<arr.length;i++)
		{
			int id = Convert.ToInt32(arr[i]);
			//删除质控浓度
			EntityManager().RemoveByColVal(BTQCMaterialLevel.class, "MaterialDR", id);
			//删除质控标识
			EntityManager().RemoveByColVal(BTQCMachineQC.class, "MaterialDR", id);
			//删除质控规则
			EntityManager().RemoveByColVal(BTQCMaterialRules.class, "MaterialDR", id);
			int ret=EntityManager().RemoveById(BTQCMaterial.class,id,out);
			if(ret!=1)
			{
				return Helper.Error(out);
			}
		}
		return Helper.Success();
	}


	/**
	 * 查询选择树的仪器
	 * @return 字符串
	 */
	public String QrySelectMachine() throws Exception {
		List<BTMIMachineParameter> retist = new ArrayList<>();
		//工作组
		String WorkGroupDR = Helper.ValidParam(JRTContext.GetRequest(Request, "WorkGroupDR"), "");
		//工作小组
		String WorkGroupMachineDR = Helper.ValidParam(JRTContext.GetRequest(Request, "WorkGroupMachineDR"), "");
		//仪器
		String MachineDR = Helper.ValidParam(JRTContext.GetRequest(Request, "MachineDR"), "");
		//选择工作组
		if(!WorkGroupDR.isEmpty()) {
			//查工作小组
			List<BTWorkGroupMachine> wgmList=EntityManager().FindByColVal(BTWorkGroupMachine.class,"WorkGroupDR",Integer.valueOf(WorkGroupDR));
			if(wgmList!=null&&wgmList.size()>0)
			{
				for(BTWorkGroupMachine wgm:wgmList)
				{
					//查仪器
					List<BTMIMachineParameter> miList=EntityManager().FindByColVal(BTMIMachineParameter.class,"WorkGroupMachineDR",wgm.RowID);
					retist.addAll(miList);
				}
			}
		}
		//选择工作小组
		else if(!WorkGroupMachineDR.isEmpty()) {
			//查仪器
			List<BTMIMachineParameter> miList=EntityManager().FindByColVal(BTMIMachineParameter.class,"WorkGroupMachineDR",Integer.valueOf(WorkGroupMachineDR));
			retist.addAll(miList);
		}
		//选择仪器
		else if(!MachineDR.isEmpty()) {
			BTMIMachineParameter mi=EntityManager().DolerGet(BTMIMachineParameter.class,Integer.valueOf(MachineDR));
			retist.add(mi);
		}
		return Helper.Object2Json(retist);
	}


	/**
	 * 查询数据,前台按表的属性名提交
	 * @return 字符串
	 */
	public String QryBTQCMaterial() throws Exception
    {
		List<BTQCMaterialDto> retlist=new ArrayList<>();
		//工作组
		String WorkGroupDR=Helper.ValidParam(JRTContext.GetRequest(Request, "WorkGroupDR"), "");
		//工作小组
		String WorkGroupMachineDR=Helper.ValidParam(JRTContext.GetRequest(Request, "WorkGroupMachineDR"), "");
		//仪器
		String MachineDR=Helper.ValidParam(JRTContext.GetRequest(Request, "MachineDR"), "");
		//存仪器
		List<BTMIMachineParameter> machList=new ArrayList<>();
		//选择工作组
		if(!WorkGroupDR.isEmpty()) {
			//查工作小组
			List<BTWorkGroupMachine> wgmList=EntityManager().FindByColVal(BTWorkGroupMachine.class,"WorkGroupDR",Integer.valueOf(WorkGroupDR));
			if(wgmList!=null&&wgmList.size()>0)
			{
				for(BTWorkGroupMachine wgm:wgmList)
				{
					//查仪器
					List<BTMIMachineParameter> miList=EntityManager().FindByColVal(BTMIMachineParameter.class,"WorkGroupMachineDR",wgm.RowID);
					machList.addAll(miList);
				}
			}
		}
		//选择工作小组
		else if(!WorkGroupMachineDR.isEmpty()) {
			//查仪器
			List<BTMIMachineParameter> miList=EntityManager().FindByColVal(BTMIMachineParameter.class,"WorkGroupMachineDR",Integer.valueOf(WorkGroupMachineDR));
			machList.addAll(miList);
		}
		//选择仪器
		else if(!MachineDR.isEmpty()) {
			BTMIMachineParameter mi=EntityManager().DolerGet(BTMIMachineParameter.class,Integer.valueOf(MachineDR));
			machList.add(mi);
		}
		if(machList.size()>0)
		{
			for(BTMIMachineParameter mi:machList)
			{
				List<BTQCMaterialDto> miMats=EntityManager().FindByColVal(BTQCMaterialDto.class,"MachineDR",mi.RowID);
				if(miMats!=null&&miMats.size()>0) {
					for(BTQCMaterialDto one:miMats)
					{

						one.WorkGroupMachineDR=mi.WorkGroupMachineDR;
						BTWorkGroupMachine wgm=EntityManager().DolerGet(BTWorkGroupMachine.class,mi.WorkGroupMachineDR);
						one.WorkGroupMachineName=wgm.CName;
						one.WorkGroupDR=wgm.WorkGroupDR;
						BTWorkGroup wg=EntityManager().DolerGet(BTWorkGroup.class,wgm.WorkGroupDR);
						one.WorkGroupName=wg.CName;
						one.MachineName=mi.CName;
					}
					retlist.addAll(miMats);
				}
			}
		}
		return Helper.Object2Json(retlist);
	}


	/**
	 * 保存数据,前台按表的属性名提交
	 * @return 字符串
	 */
	public String SaveBTQCMaterialTestCode() throws Exception
	{
		BTQCMaterialTestCode dto=new BTQCMaterialTestCode();
		//主键
		dto.RowID=Helper.ValidParam(JRTContext.GetRequest(Request, "RowID"), dto.RowID);
		//质控物
		dto.MaterialDR=Helper.ValidParam(JRTContext.GetRequest(Request, "MaterialDR"), dto.MaterialDR);
		//项目
		dto.TestCodeDR=Helper.ValidParam(JRTContext.GetRequest(Request, "TestCodeDR"), dto.TestCodeDR);
		//浓度
		dto.LevelNo=Helper.ValidParam(JRTContext.GetRequest(Request, "LevelNo"), dto.LevelNo);
		//开始日期
		dto.StartDate=Helper.ValidParam(JRTContext.GetRequest(Request, "StartDate"), dto.StartDate);
		//靶子
		dto.Mean=Helper.ValidParam(JRTContext.GetRequest(Request, "Mean"), dto.Mean);
		//标准差
		dto.SD=Helper.ValidParam(JRTContext.GetRequest(Request, "SD"), dto.SD);
		//设置CV
		dto.SetCV=Helper.ValidParam(JRTContext.GetRequest(Request, "SetCV"), dto.SetCV);
		//目标CV
		dto.TargetCV=Helper.ValidParam(JRTContext.GetRequest(Request, "TargetCV"), dto.TargetCV);
		//质控品批号
		dto.LotNo=Helper.ValidParam(JRTContext.GetRequest(Request, "LotNo"), dto.LotNo);
		//质控物厂家
		dto.MatManufacturer=Helper.ValidParam(JRTContext.GetRequest(Request, "MatManufacturer"), dto.MatManufacturer);
		//厂家均值
		dto.ManufacturerMean=Helper.ValidParam(JRTContext.GetRequest(Request, "ManufacturerMean"), dto.ManufacturerMean);
		//厂家标准差
		dto.ManufacturerSD=Helper.ValidParam(JRTContext.GetRequest(Request, "ManufacturerSD"), dto.ManufacturerSD);
		//试剂批号
		dto.RgLot=Helper.ValidParam(JRTContext.GetRequest(Request, "RgLot"), dto.RgLot);
		//试剂厂家
		dto.RgManufacturer=Helper.ValidParam(JRTContext.GetRequest(Request, "RgManufacturer"), dto.RgManufacturer);
		//测试方法
		dto.TestMethod=Helper.ValidParam(JRTContext.GetRequest(Request, "TestMethod"), dto.TestMethod);
		//计算类型
		dto.CalcType=Helper.ValidParam(JRTContext.GetRequest(Request, "CalcType"), dto.CalcType);
		//精度
		dto.Precision=Helper.ValidParam(JRTContext.GetRequest(Request, "Precision"), dto.Precision);
		//稀释倍数
		dto.Dilutions=Helper.ValidParam(JRTContext.GetRequest(Request, "Dilutions"), dto.Dilutions);
		//说明
		dto.Remark=Helper.ValidParam(JRTContext.GetRequest(Request, "Remark"), dto.Remark);
		//浓度单位
		dto.LevelUnit=Helper.ValidParam(JRTContext.GetRequest(Request, "LevelUnit"), dto.LevelUnit);
		//CV来源
		dto.CVSource=Helper.ValidParam(JRTContext.GetRequest(Request, "CVSource"), dto.CVSource);
		//生产日期
		dto.ProductDate=Helper.ValidParam(JRTContext.GetRequest(Request, "ProductDate"), dto.ProductDate);
		//有效日期
		dto.ExpiryDate=Helper.ValidParam(JRTContext.GetRequest(Request, "ExpiryDate"), dto.ExpiryDate);
		//关闭日期
		dto.ClosingDate=Helper.ValidParam(JRTContext.GetRequest(Request, "ClosingDate"), dto.ClosingDate);
		//校正液批次
		dto.AmendLiquidLot=Helper.ValidParam(JRTContext.GetRequest(Request, "AmendLiquidLot"), dto.AmendLiquidLot);
		//主波长
		dto.WaveLengthMian=Helper.ValidParam(JRTContext.GetRequest(Request, "WaveLengthMian"), dto.WaveLengthMian);
		//波长
		dto.WaveLength=Helper.ValidParam(JRTContext.GetRequest(Request, "WaveLength"), dto.WaveLength);
		//生效日期
		dto.RgEffectiveDate=Helper.ValidParam(JRTContext.GetRequest(Request, "RgEffectiveDate"), dto.RgEffectiveDate);
		//校准液有效期
		dto.AmendLiquidDate=Helper.ValidParam(JRTContext.GetRequest(Request, "AmendLiquidDate"), dto.AmendLiquidDate);
		//校准液
		dto.AmendLiquid=Helper.ValidParam(JRTContext.GetRequest(Request, "AmendLiquid"), dto.AmendLiquid);
		//偏离图SD
		dto.DeviationRatioSD=Helper.ValidParam(JRTContext.GetRequest(Request, "DeviationRatioSD"), dto.DeviationRatioSD);
		//规则说明
		dto.RuleRemark=Helper.ValidParam(JRTContext.GetRequest(Request, "RuleRemark"), dto.RuleRemark);
		//序号
		dto.Sequence=Helper.ValidParam(JRTContext.GetRequest(Request, "Sequence"), dto.Sequence);
		//激活  {1:true,0:false}
		dto.Active=Helper.ValidParam(JRTContext.GetRequest(Request, "Active"), dto.Active);
		//计算靶值
		dto.FloatMean=Helper.ValidParam(JRTContext.GetRequest(Request, "FloatMean"), dto.FloatMean);
		//计算标准差
		dto.FloatSD=Helper.ValidParam(JRTContext.GetRequest(Request, "FloatSD"), dto.FloatSD);
		//累计总数
		dto.AccSum=Helper.ValidParam(JRTContext.GetRequest(Request, "AccSum"), dto.AccSum);
		//累计均值
		dto.AccMean=Helper.ValidParam(JRTContext.GetRequest(Request, "AccMean"), dto.AccMean);
		//累计标准差
		dto.AccSD=Helper.ValidParam(JRTContext.GetRequest(Request, "AccSD"), dto.AccSD);
		//在控个数
		dto.InControlNum=Helper.ValidParam(JRTContext.GetRequest(Request, "InControlNum"), dto.InControlNum);
		//在控均值
		dto.InControlMean=Helper.ValidParam(JRTContext.GetRequest(Request, "InControlMean"), dto.InControlMean);
		//在控标准差
		dto.InControlSD=Helper.ValidParam(JRTContext.GetRequest(Request, "InControlSD"), dto.InControlSD);
		OutParam out=new OutParam();
		int ret=0;
		//更新
		if(dto.RowID>0)
		{
			ret=EntityManager().Update(dto,null, out, null, null, null);
		}
		//插入数据
		else
		{
			ret=EntityManager().Save(dto,out);
		}
		if(ret==1)
		{
			return Helper.Success();
		}
		else
		{
			return Helper.Error(out);
		}
	}



	/**
	 * 删除数据,多个RowID以上尖号分割
	 * @return 字符串
	 */
	public String DeleteBTQCMaterialTestCode() throws Exception
	{
		String RowIDS=Helper.ValidParam(JRTContext.GetRequest(Request, "RowIDS"), "");
		if(RowIDS.isEmpty())
		{
			return Helper.Error("请传入要删除数据的RowID,多个以^分割!");
		}
		//分割主键
		String [] arr=RowIDS.split("^");
		//out参数
		OutParam out=new OutParam();
		//循环删除数据
		for(int i=0;i<arr.length;i++)
		{
			int ret=EntityManager().RemoveById(BTQCMaterialTestCode.class,Convert.ToInt32(arr[i]),out);
			if(ret!=1)
			{
				return Helper.Error(out);
			}
		}
		return Helper.Success();
	}



	/**
	 * 查询数据,前台按表的属性名提交
	 * @return 字符串
	 */
	public String QryBTQCMaterialTestCode() throws Exception
	{
		//分页
		int pageSize = Helper.ValidParam(JRT.Core.MultiPlatform.JRTContext.GetRequest(Request, "rows"), -1);
		int pageIndex = Helper.ValidParam(JRT.Core.MultiPlatform.JRTContext.GetRequest(Request, "page"), -1);
		//质控物
		int MaterialDR=Helper.ValidParam(JRTContext.GetRequest(Request, "MaterialDR"), 0);
		//按项目和浓度筛选
		String TestCodeDR=Helper.ValidParam(JRTContext.GetRequest(Request, "TestCodeDR"), "");
		String LevelNo=Helper.ValidParam(JRTContext.GetRequest(Request, "LevelNo"), "");
		//筛选
		String Filter=Helper.ValidParam(JRTContext.GetRequest(Request, "Filter"), "");
		//质控浓度数据
		List<BTQCMaterialLevel> levList=EntityManager().FindByColVal(BTQCMaterialLevel.class,"MaterialDR",MaterialDR);
		HashParam hs=new HashParam();
		hs.Add("MaterialDR",MaterialDR);
		if(!TestCodeDR.isEmpty())
		{
			hs.Add("TestCodeDR",Convert.ToInt32(TestCodeDR));
		}
		if(!LevelNo.isEmpty())
		{
			hs.Add("LevelNo",Convert.ToInt32(LevelNo));
		}
		OutValue totalNum=new OutValue();
		//分页查询
		List<BTQCMaterialTestCodeDto> dataList=EntityManager().FindAll(BTQCMaterialTestCodeDto.class,hs,"StartDate desc",pageSize,pageIndex,"",null,null,totalNum);
		List<BTQCMaterialTestCodeDto> retList=new ArrayList<>();
		if(dataList!=null&&dataList.size()>0)
		{
			for(BTQCMaterialTestCodeDto one:dataList)
			{

				one.LevelNoName="";
				for(BTQCMaterialLevel lev:levList)
				{
					if(lev.LevelNo==one.LevelNo)
					{
						one.LevelNoName=lev.CName;
					}
				}
				//项目数据
				BTTestCode tsDto=EntityManager().DolerGet(BTTestCode.class,one.TestCodeDR);
				one.TestCodeCode=tsDto.Code;
				one.TestCodeDR=tsDto.RowID;
				one.TestCodeSynonym=tsDto.Synonym;
				one.TestCodeName=tsDto.CName;
				boolean isPerData=false;
				if(!Filter.isEmpty()&&one.LevelNoName.contains(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.TestCodeName.contains(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.TestCodeCode.equals(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.LotNo.equals(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.RgLot.equals(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.Remark.contains(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.MatManufacturer.equals(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.RgManufacturer.equals(Filter))
				{
					isPerData=true;
				}
				if(Filter.isEmpty()||isPerData==true)
				{
					retList.add(one);
				}
			}
		}
		return Helper.MakeTotalJson(retList,totalNum);
	}

	/**
	 * 查询能够开通的项目或者已经开通的项目
	 * @return
	 */
	public String QueryOpenTestCode() throws Exception
	{
		//查是否有开通项目
		boolean HasOpen=Helper.ValidParam(JRTContext.GetRequest(Request, "HasOpen"), false);
		//质控物主键
		int MaterialDR=Helper.ValidParam(JRTContext.GetRequest(Request, "MaterialDR"), 0);
		//得到质控物的数据
		BTQCMaterial matDto=EntityManager().DolerGet(BTQCMaterial.class,MaterialDR);
		//仪器数据
		BTMIMachineParameter machDto=EntityManager().DolerGet(BTMIMachineParameter.class,matDto.MachineDR);
		//查询仪器项目
		List<BTMIMachineTestCode> machTsList=EntityManager().FindByColVal(BTMIMachineTestCode.class,"MachineParameterDR",matDto.MachineDR);
		//质控浓度数据
		List<BTQCMaterialLevel> levList=EntityManager().FindByColVal(BTQCMaterialLevel.class,"MaterialDR",MaterialDR);
		//返回列表
		List<BTMIMachineTestCodeDto> retList=new ArrayList<>();
		if(machTsList!=null&&machTsList.size()>0)
		{
			for(int i=0;i<machTsList.size();i++)
			{
				//没激活的不要
				if(machTsList.get(i).Active!=null&&machTsList.get(i).Active==false)
				{
					continue;
				}
				for(int j=1;j<=matDto.Levels;j++)
				{
					HashParam hs=new HashParam();
					hs.Add("MaterialDR",matDto.RowID);
					hs.Add("TestCodeDR",machTsList.get(i).TestCodeDR);
					hs.Add("LevelNo",j);
					//按条件检查是否有数据
					boolean hasOpen=EntityManager().CheckHasData(BTQCMaterialTestCode.class,hs,null,null);
					//根据开通决定输出
					if(hasOpen==HasOpen)
					{
						BTMIMachineTestCodeDto one=new BTMIMachineTestCodeDto();
						one.MaterialDR=matDto.RowID;
						one.MachineDR=machDto.RowID;
						one.LevelNo=j;
						one.LevelNoName="";
						for(BTQCMaterialLevel lev:levList)
						{
							if(lev.LevelNo==j)
							{
								one.LevelNoName=lev.CName;
							}
						}
						//项目数据
						BTTestCode tsDto=EntityManager().DolerGet(BTTestCode.class,machTsList.get(i).TestCodeDR);
						one.TestCodeCode=tsDto.Code;
						one.TestCodeDR=tsDto.RowID;
						one.TestCodeSynonym=tsDto.Synonym;
						one.TestCodeName=tsDto.CName;
						retList.add(one);
					}
				}
			}
		}
		return Helper.Object2Json(retList);
	}

	/**
	 * 开通质控项目
	 * @return
	 */
	@Trans
	public String OpenBTQCMaterialTestCode() throws Exception
	{
		int MaterialDR=Helper.ValidParam(JRTContext.GetRequest(Request, "MaterialDR"), 0);
		int MaterialLotDR=Helper.ValidParam(JRTContext.GetRequest(Request, "MaterialLotDR"), 0);
		String OpenTsLev=Helper.ValidParam(JRTContext.GetRequest(Request, "OpenTsLev"), "");
		String [] arr=OpenTsLev.split("\\^");
		//公共信息
		BTQCMaterialLot lotDto=EntityManager().DolerGet(BTQCMaterialLot.class,MaterialLotDR);
		OutValue key=new OutValue();
		for(String one:arr)
		{
			String [] tsLev=one.split("-");
			int TestCodeDR=Convert.ToInt32(tsLev[0]);
			int LevelNo=Convert.ToInt32(tsLev[1]);
			BTQCMaterialTestCode dto=new BTQCMaterialTestCode();
			//拷贝相同的属性值
			ReflectUtil.CopyProperties(lotDto,dto);
			dto.MaterialDR=MaterialDR;
			dto.TestCodeDR=TestCodeDR;
			dto.LevelNo=LevelNo;
			int ret=EntityManager().Save(dto,key,ErrRet());
			if(ret!=1)
			{
				throw new Exception(Err.GetString());
			}

		}
		return Helper.Success();
	}


	/**
	 * 查询数据,前台按表的属性名提交
	 * @return 字符串
	 */
	public String QryQCResMaterialTestCode() throws Exception
	{
		//分页
		int pageSize = Helper.ValidParam(JRT.Core.MultiPlatform.JRTContext.GetRequest(Request, "rows"), -1);
		int pageIndex = Helper.ValidParam(JRT.Core.MultiPlatform.JRTContext.GetRequest(Request, "page"), -1);
		//质控物
		int MaterialDR=Helper.ValidParam(JRTContext.GetRequest(Request, "MaterialDR"), 0);
		//按项目和浓度筛选
		String TestCodeDR=Helper.ValidParam(JRTContext.GetRequest(Request, "TestCodeDR"), "");
		String LevelNo=Helper.ValidParam(JRTContext.GetRequest(Request, "LevelNo"), "");
		//筛选
		String Filter=Helper.ValidParam(JRTContext.GetRequest(Request, "Filter"), "");
		//质控浓度数据
		List<BTQCMaterialLevel> levList=EntityManager().FindByColVal(BTQCMaterialLevel.class,"MaterialDR",MaterialDR);
		HashParam hs=new HashParam();
		hs.Add("MaterialDR",MaterialDR);
		if(!TestCodeDR.isEmpty())
		{
			hs.Add("TestCodeDR",Convert.ToInt32(TestCodeDR));
		}
		if(!LevelNo.isEmpty())
		{
			hs.Add("LevelNo",Convert.ToInt32(LevelNo));
		}
		OutValue totalNum=new OutValue();
		//分页查询
		List<QCResMaterialTestCodeDto> dataList=EntityManager().FindAll(QCResMaterialTestCodeDto.class,hs,"TestDate desc",pageSize,pageIndex,"",null,null,totalNum);
		List<QCResMaterialTestCodeDto> retList=new ArrayList<>();
		if(dataList!=null&&dataList.size()>0)
		{
			for(QCResMaterialTestCodeDto one:dataList)
			{

				one.LevelNoName="";
				for(BTQCMaterialLevel lev:levList)
				{
					if(lev.LevelNo==one.LevelNo)
					{
						one.LevelNoName=lev.CName;
					}
				}
				//项目数据
				BTTestCode tsDto=EntityManager().DolerGet(BTTestCode.class,one.TestCodeDR);
				one.TestCodeCode=tsDto.Code;
				one.TestCodeDR=tsDto.RowID;
				one.TestCodeSynonym=tsDto.Synonym;
				one.TestCodeName=tsDto.CName;
				boolean isPerData=false;
				if(!Filter.isEmpty()&&one.LevelNoName.contains(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.TestCodeName.contains(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.TestCodeCode.equals(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.LotNo.equals(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.RgLot.equals(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.Remark.contains(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.MatManufacturer.equals(Filter))
				{
					isPerData=true;
				}
				if(!Filter.isEmpty()&&one.RgManufacturer.equals(Filter))
				{
					isPerData=true;
				}
				if(Filter.isEmpty()||isPerData==true)
				{
					retList.add(one);
				}
			}
		}
		return Helper.MakeTotalJson(retList,totalNum);
	}


	/**
	 * 去除没有仪器的树节点
	 * @param retList 树节点集合
	 */
	private void DealNoMachineTree(List<MachineTreeDto> retList) throws Exception
	{
		if(retList!=null&&retList.size()>0)
		{
			for(int i=0;i<retList.size();i++)
			{
				//没有工作小组的工作组删掉
				if(retList.get(i).children.size()==0)
				{
					retList.remove(i);

					i--;
				}
				else
				{
					//检查每个工作小组
					for(int j=0;j<retList.get(i).children.size();j++)
					{
						//工作小组下没有仪器
						if(retList.get(i).children.get(j).children.size()==0)
						{
							retList.get(i).children.remove(j);
							j--;
						}
					}
					//没有小组就把工作组节点也删了
					if(retList.get(i).children.size()==0)
					{
						retList.remove(i);
						i--;
					}
				}
			}
		}
	}

	/**
	 * 质控业务数据的批次项目信息
	 */
	public static class QCResMaterialTestCodeDto extends QCResMaterialTestCode
	{
		/**
		 * 浓度名称
		 */
		public String LevelNoName;

		/**
		 * 项目代码
		 */
		public String TestCodeCode;

		/**
		 * 项目名称
		 */
		public String TestCodeName;

		/**
		 * 项目缩写
		 */
		public String TestCodeSynonym;
	}

	/**
	 * 返回仪器项目的数据
	 */
	public static class BTMIMachineTestCodeDto
	{
		/**
		 * 质控物主键
		 */
		public int MaterialDR;

		/**
		 * 仪器主键
		 */
		public int MachineDR;

		/**
		 * 项目主键
		 */
		public int TestCodeDR;

		/**
		 * 浓度
		 */
		public int LevelNo;

		/**
		 * 浓度名称
		 */
		public String LevelNoName;

		/**
		 * 项目代码
		 */
		public String TestCodeCode;

		/**
		 * 项目名称
		 */
		public String TestCodeName;

		/**
		 * 项目缩写
		 */
		public String TestCodeSynonym;
	}

	/**
	 * 质控仪器树实体
	 */
	public static class MachineTreeDto {

		/**
		 * 数据唯一键
		 */
		public int RowID;

		/**
		 * 树id
		 */
		public String id;

		/**
		 * 树文本
		 */
		public String text;

		/**
		 * 是否选择
		 */
		public String checked;

		/**
		 * 子节点
		 */
		public List<MachineTreeDto> children;

		/**
		 * 节点类型
		 */
		public String Type;

	}

	/**
	 * 质控物实体
	 */
	public  static class BTQCMaterialDto  extends BTQCMaterial
	{
		/**
		 * 工作组主键
		 */
		public int WorkGroupDR;

		/**
		 * 工作组名称
		 */
		public String WorkGroupName;

		/**
		 * 工作小组主键
		 */
		public int WorkGroupMachineDR;

		/**
		 * 工作小组名称
		 */
		public String WorkGroupMachineName;

		/**
		 * 仪器名称
		 */
		public String MachineName;


	}

	/**
	 * 质控项目的返回实体
	 */
	public static class BTQCMaterialTestCodeDto extends BTQCMaterialTestCode
	{
		/**
		 * 浓度名称
		 */
		public String LevelNoName;

		/**
		 * 项目代码
		 */
		public String TestCodeCode;

		/**
		 * 项目名称
		 */
		public String TestCodeName;

		/**
		 * 项目缩写
		 */
		public String TestCodeSynonym;
	}


}

主体界面代码太多,博客放不下,放个质控规则维护的界面前端,前后台交互通过ajax
在这里插入图片描述

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>质控规则维护</title>
    <link rel="shortcut icon" href="../../resource/common/images/favicon.ico" />
    <script src="../../resource/common/js/JRTBSBase.js" type="text/javascript"></script>
    <link href="../../resource/plug/spectrum/css/spectrum.css" rel="stylesheet" type="text/css" />
    <script src="../../resource/plug/spectrum/js/spectrum.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        SYSPageCommonInfo.Init();
        var BasePath = '';
        var ResourcePath = '';
        var WebServicAddress = SYSPageCommonInfo.Data.WebServicAddress;
        var UserID = SYSPageCommonInfo.Data.Sesssion.UserID;
        var GroupID = SYSPageCommonInfo.Data.Sesssion.GroupID;
        var SessionStr = SYSPageCommonInfo.Data.SessionStr;
    </script>
    <script type="text/javascript">
        //全局变量
        var me = {
            actionUrl: '../ashx/ashBTQCRules.ashx'
        };

        //jquery入口
        $(function () {

            //规则颜色
            $("#txtBTQCRulesColor").spectrum({
                showInput: true,
                showPalette: true,
                color: "",
                cancelText:"取消",
                chooseText:"选择",
                clearText:"清空选择",
                palette: [
                    ["#333333", "#449be2", "#50b90c", "#39c6c8", "afd17e", "#A85B93"],
                    ["#FFD572", "#ff32a1", "#d952d1", "#9152d9", "#494dee", "#327eb2"],
                    ["#f3723b", "#21be97", "#2ab66a", "#aade5f", "#ffb746", "#ff793e"],
                    ["#ff5252", "#f16e57", "#fd930c", "#d07605", "#955606", "#8be451"],
                    ["#ec90da", "#338001", "#fda632", "#0670c6", "#135890", "#afd17e"],
                    ["#c00eb5", "#891082", "#7dba56", "#f4d44f", "#6abfef", "c0c0c0"]
                ]
            });

            //质控状态
            $("#txtBTQCRulesStatus").combogrid({
                panelWidth: 350,
                idField: 'RowID',
                width: 205,
                textField: 'CName',
                data:[
                    {
                        RowID:"W",
                        CName:"警告"
                    },
                    {
                        RowID:"R",
                        CName:"失控"
                    }
                ],
                columns: [[
                    { field: 'RowID', title: '主键', width: 60 },
                    { field: 'CName', title: '名称', width: 260 }
                ]]
            });

            //新增数据点击
            $("#btnAddBTQCRules").click(function () {
                $("#txtBTQCRulesRowID").val(""); 
				$('#winEditBTQCRules').window({
                    title: TranslateDataMTHD('Add Data', '新增数据', ''),
                    modal: true
                });
            });


            //修改数据点击
            $("#btnUpdateBTQCRules").click(function () {
				UpdateBTQCRules();
            });

			//修改数据
			function UpdateBTQCRules(row)
			{
                var selectRow = $('#dgBTQCRules').datagrid("getSelected");
                if(row!=null)
                {
                	selectRow=row;
                }
                if (selectRow == null) {
                    $.messager.alert(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Please select the data to modify', '请选择要修改的数据!', ''), 'info');
                    return;
                }
				$("#formBTQCRules").form('load', selectRow);
                $("#txtBTQCRulesColor").spectrum("set",selectRow.Color);
				$('#winEditBTQCRules').window({
                    title: TranslateDataMTHD('Update Data', '修改数据', ''),
                    modal: true
                });
			}



            //删除数据点击
            $("#btnDeleteBTQCRules").click(function () {
                var checkRow = $('#dgBTQCRules').datagrid("getChecked");
                var selectRow = $('#dgBTQCRules').datagrid("getSelected");
                if ((checkRow == null || checkRow.length == 0)&&selectRow==null) {
                    $.messager.alert(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Please select the data to delete', '请勾选要删除的数据!', ''), 'info');
                    return;
                }
                if ((checkRow == null || checkRow.length == 0)) {
                    checkRow=[selectRow];
                }
                var RowIDS = "";
                for (var i = 0; i < checkRow.length; i++) {
                    if (i == 0) {
                        RowIDS = checkRow[i].RowID;
                    }
                    else {
                        RowIDS += "^" + checkRow[i].RowID;
                    }
                }
                $.messager.confirm(TranslateDataMTHD('Info', '提示', ''), TranslateDataMTHD('Do you want to delete the selected data', '是否要删除选择的数据?', '') , function (r) {
                    if (r) {
                		//开启等待
                		$.messager.progress({ text: TranslateDataMTHD("Deleting data","正在删除数据", ""), interval: 500 });
                		setTimeout(function () {
                    		$.messager.progress('close');
                		}, 8000);
                		//往后台提交数据
                		$.ajax({
                    		type: "post",
                    		dataType: "json",
                    		cache: false, //
                    		async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir
                    		url: me.actionUrl + '?Method=DeleteBTQCRules',
                    		data: { RowIDS: RowIDS },
                    		success: function (data, status) {
                        		$.messager.progress('close');
                        		if (!FilterBackData(data)) {
                            		return;
                        		}
                        		if (!data.IsOk) {
                            		$.messager.alert(TranslateDataMTHD("Error message", "错误提示", ""), TranslateDataMTHD("failed to dalete data, error message:", "删除失败,错误信息:", "") + data.Message);
                        		}
                        		else {
                            		QryBTQCRules();
                            		$.messager.show({
                                		title: TranslateDataMTHD("Info", "提示", ""),
                               		 	msg: TranslateDataMTHD("Successfully deleted!", "删除成功!", ""),
                                		timeout: 500,
                                		showType: 'slide'
                            		});
                        		}
                    		}
                		});
                    }
                });
            });


            //保存数据
            $("#btnSaveBTQCRules").click(function () {
                var saveData = jQuery.parseJSON($("#formBTQCRules").serializeObject());
                var Color = $("#txtBTQCRulesColor").spectrum('get').toHexString();
                saveData.Color=Color;
                //开启等待
                $.messager.progress({ text: TranslateDataMTHD("Saving data","正在保存数据", ""), interval: 500 });
                setTimeout(function () {
                    $.messager.progress('close');
                }, 8000);
                //往后台提交数据
                $.ajax({
                    type: "post",
                    dataType: "json",
                    cache: false, //
                    async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir
                    url: me.actionUrl + '?Method=SaveBTQCRules',
                    data: saveData,
                    success: function (data, status) {
                        $.messager.progress('close');
                        if (!FilterBackData(data)) {
                            return;
                        }
                        if (!data.IsOk) {
                            $.messager.alert(TranslateDataMTHD("Error message", "错误提示", ""), TranslateDataMTHD("failed to dalete data, error message:", "删除失败,错误信息:", "") + data.Message);
                        }
                        else {
                            QryBTQCRules();
                            $.messager.show({
                                title: TranslateDataMTHD("Info", "提示", ""),
                                msg: TranslateDataMTHD("Successfully saveed!", "保存成功!", ""),
                                timeout: 500,
                                showType: 'slide'
                            });
                            $('#winEditBTQCRules').window("close");
                        }
                    }
                });
            });


            //关闭窗口
            $("#btnCloseBTQCRules").click(function () {
				$('#winEditBTQCRules').window("close");
            });


            //构造查询事件
            $("#txtFilterBTQCRules").searchbox({
                searcher: function (value, name) {
                    QryBTQCRules();
                },
                prompt: TranslateDataMTHD('Enter query', '回车查询', '')
            });



            //激活布尔渲染
            $('#txtBTQCRulesActive').combobox({
                valueField:'RowID',
                textField:'CName',
                width: 205,
                data: [{"RowID":false,"CName":TranslateDataMTHD('No', '否', '')},{"RowID":true,"CName":TranslateDataMTHD('Yes', '是', '')}]
            });

            //BTQCRules表格
            $('#dgBTQCRules').datagrid({
                remoteSort:false,
                singleSelect: true,
                toolbar: "#dgBTQCRulesToolBar",
                fit: true,
                onSelect: function (index, row) {
                    //方便拷贝到子表查询用
                	var selectBTQCRules=$('#dgBTQCRules').datagrid("getSelected");
                },
                onDblClickRow: function (index, row) {
                    UpdateBTQCRules(row);
                },

                columns: [[
                    { field: 'ChkFlag', title: TranslateDataMTHD('Check', '选择', ''), width: 20, sortable: true, align: 'center', checkbox: true },
                    { field: 'RowID', title: TranslateDataMTHD('RowID', '主键', '') , width: 50, sortable: true },
                    { field: 'Code', title: TranslateDataMTHD('Code', '代码', '') , width: 60, sortable: true },
                    { field: 'CName', title: TranslateDataMTHD('CName', '名称', '') , width: 120, sortable: true },
                    { field: 'Status', title: TranslateDataMTHD('Status', '状态', '') , width: 80, sortable: true },
                    { field: 'Color', title: TranslateDataMTHD('Color', '颜色', '') , width: 80, sortable: true,
                        formatter: function (value, rowData, rowIndex) {
                            if (value == "") {
                                var LevelNoIndex = rowData.LevelNo - 1;
                                value = AllLineColor[LevelNoIndex];
                            }
                            return '<span style="color:' + value + ';font-weight:bold;">' + TranslateDataMTHD('Color', '颜色', "") + '</span>'
                        }
                     },
                    { field: 'Remark', title: TranslateDataMTHD('Remark', '说明', '') , width: 650, sortable: true },
                    { field: 'Sequence', title: TranslateDataMTHD('Sequence', '序号', '') , width: 60, sortable: true },
                    { field: 'Active', title: TranslateDataMTHD('Active', '激活', '') , width: 60, sortable: true,
                        formatter: function (value, rowData, rowIndex) {
                            return rowData.Active == true ? '<img src="../images/icon/active.png" alt="激活" title="激活"/>' : '<img src="../images/icon/cross.png" alt="未激活" title="未激活"/>';
                        }
                    }
                ]]
            });


            //查询BTQCRules
            function QryBTQCRules() {
                var Filter = $("#txtFilterBTQCRules").searchbox("getValue");
                //开启等待,默认注释,在单击事件调用的逻辑启用等待会冲掉双击事件,按需要开启
                //$.messager.progress({ text: TranslateDataMTHD("Querying data","正在查询数据", ""), interval: 500 });
                //setTimeout(function () {
                    //$.messager.progress('close');
                //}, 8000);
                $.ajax({
                    type: "post",
                    dataType: "json",
                    cache: false, //
                    async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asir
                    url: me.actionUrl + '?Method=QryBTQCRules',
                    data: { Filter: Filter },
                    success: function (data, status) {
                        //结束等待
                        //$.messager.progress('close');
                        if (!FilterBackData(data)) {
                           return;
                        }
                        $('#dgBTQCRules').datagrid("loadData", data);
                    }
                });
            };


            //执行查询数据
            QryBTQCRules();


		});
    </script>
</head>
<body>
    <div class="easyui-layout" fit="true" style="border: none;">
        <div data-options="region:'center',title:''" style="border: none;">
            <div id="dgBTQCRulesToolBar" style="padding: 3px 0px 3px 10px;">
                <a id="btnAddBTQCRules" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'" plain="true" listranslate="html~Add">新增</a>
                <a id="btnUpdateBTQCRules" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-write-order'" plain="true" listranslate="html~Mod">修改</a>
                <a id="btnDeleteBTQCRules" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" plain="true" listranslate="html~Del">删除</a>
                <input id="txtFilterBTQCRules" style="margin-left: 14px; width: 240px;"></input>
            </div>
            <table id="dgBTQCRules" title="" iconcls="icon-paper" listranslate="title~BTQCRules"></table>
        </div>
        <div id="winEditBTQCRules" style="padding: 10px 0px 0px 10px;width:550px;height:318px;display: none;">
            <form id="formBTQCRules" name="edit_form" method="post">
                <input type="hidden" id="txtBTQCRulesRowID" name="RowID" value="0" />
                <table>
                    <tr>
                        <td class="lisar" jrttranslate="html~Code">代码</td>
                        <td class="lisal"><input id="txtBTQCRulesCode" type="text" name="Code" style="width:200px;" class="easyui-validatebox"  maxlength="10"/></td>
                        <td class="lisar" jrttranslate="html~CName">名称</td>
                        <td class="lisal"><input id="txtBTQCRulesCName" type="text" name="CName" style="width:200px;" class="easyui-validatebox"  maxlength="40"/></td>
                    </tr>
                    <tr>
                        <td class="lisar" jrttranslate="html~Status">状态</td>
                        <td class="lisal"><input id="txtBTQCRulesStatus" type="text" name="Status" style="width:200px;" class="easyui-validatebox"  maxlength="1"/></td>
                        <td class="lisar" jrttranslate="html~Color">颜色</td>
                        <td class="lisal"><input id="txtBTQCRulesColor" type="text" name="Color" style="width:200px;" class="easyui-validatebox"  maxlength="10"/></td>
                    </tr>
                    <tr>
                        <td class="lisar" jrttranslate="html~Remark">说明</td>
                        <td class="lisal" colspan="3">
                            <textarea id="txtBTQCRulesRemark" name="Remark" style="width:460px;height: 90px; resize: none;" rows="3" class="easyui-validatebox"  maxlength="200"  cols="40" ></textarea>
                        </td>
                    </tr>
                    <tr>
                        <td class="lisar" jrttranslate="html~Sequence">序号</td>
                        <td class="lisal"><input id="txtBTQCRulesSequence" type="text" name="Sequence" style="width:200px;" class="easyui-validatebox"  maxlength="10"/></td>
                        <td class="lisar" jrttranslate="html~Active">激活</td>
                        <td class="lisal"><input id="txtBTQCRulesActive" type="text" name="Active" style="width:200px;" class="easyui-validatebox"  maxlength="1"/></td>
                    </tr>
                </table>
                <div region="south" border="fale" style="text-align: center; padding: 5px 0 0;">
                    <a id="btnSaveBTQCRules" href="#" class="easyui-linkbutton" plain="false" listranslate="html~Save">保存</a>
                    <span class="sp6"></span>
                    <a id="btnCloseBTQCRules" href="#" class="easyui-linkbutton" plain="false" listranslate="html~Cancel">取消</a>
                </div>
            </form>
        </div>
   </div>
</body>
</html>


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1583346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c# list/task/ dictionary/委托简单到高级使用

在 C# 编程中&#xff0c;List、Task、Dictionary 和委托&#xff08;Delegates&#xff09;是常用的数据结构和功能特性&#xff0c;它们在处理集合、异步编程、键值对存储以及事件和回调实现中扮演着重要角色。 C# List List<T> 是 C# 中的一个泛型集合&#xff0c;它…

MySQL基础(下)

函数 函数 是指一段可以直接被另一段程序调用的程序或代码 字符串函数 SELECT 函数(参数); --concat 连接 select concat(Hello , MySQL);--lower 将所有大写转换为小写 select lower(Hello); --upper 将所有小写转换为大写 select upper(Hello);--lpad 左填充 select lpad(0…

从零开始学习的ai教程视频,如何入手?

个人认为小白想零基础学习ai应该从理论和实操两个方面入手。理论是支撑实践的前提&#xff0c;只有以一种全局观角度了解ai才能实现从熟练使用ai到有自我意识的用ai创作。 接下来将会简单介绍一些理论免费学习网站和软件&#xff08;一笔带过&#xff0c;不重点&#xff09;&a…

刷题之动态规划-回文串

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的回文串类型相关的题目 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是动态规划的核心步骤&#xff0c;…

OneForAll安装使用

OneForAll简介 OneForAll是一款功能强大的子域收集工具 原项目地址&#xff1a;GitHub - shmilylty/OneForAll: OneForAll是一款功能强大的子域收集工具 gitee项目地址&#xff1a;OneForAll: OneForAll是一款功能强大的子域收集工具 # 安装Python Windows系统安装python参…

C++ //练习 11.23 11.2.1节练习(第378页)中的map以孩子的姓为关键字,保存他们的名的vector,用multimap重写此map。

C Primer&#xff08;第5版&#xff09; 练习 11.23 练习 11.23 11.2.1节练习&#xff08;第378页&#xff09;中的map以孩子的姓为关键字&#xff0c;保存他们的名的vector&#xff0c;用multimap重写此map。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09;…

制作一个RISC-V的操作系统十-Trap和Exception(流 mtvec mepc mcause mtval mstatus trap完整流程)

文章目录 流mtvecmepcmcausemtvalmstatustrap 初始化trap的top half&#xff08;硬件完成&#xff09;trap的bottom half&#xff08;软件完成&#xff09;从trap返回代码实现 流 控制流&#xff1a;程序控制的执行流 trap分为中断和异常 mtvec base&#xff1a;存储trap入…

【Keil5-编译4个阶段】

Keil5-编译 ■ GCC编译4个阶段■ 预处理->编译->汇编->链接■ GNU工具链开发流程图■ armcc/armasm&#xff08;编译C和汇编&#xff09;■ armlink &#xff08;链接&#xff09;■ armar &#xff08;打包&#xff09;■ fromelf &#xff08;格式转换器&#xff09…

在B站看课的进度助手

效果 代码 BilibiliVideoDurationCrawler import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; imp…

简单用Nodejs + express 编写接口

文章目录 get接口示范post接口示范注意点 准备工作可以看上一篇文章&#xff1a;文章链接》》 get接口示范 app.get(/, (req, res) > {res.send("Hello World"); })因为是get接口&#xff0c;所以可以直接在浏览器上请求&#xff08;端口地址接口名&#xff09;…

Java 二叉数(1)

一、认识树 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 有一个特殊的…

零基础入门NLP - 新闻文本分类比赛方案分享 nano- Rank1

nano- 康一帅 简介 环境 Tensorflow 1.14.0Keras 2.3.1bert4keras 0.8.4 文件说明 EDA&#xff1a;用于探索性数据分析。data_utils&#xff1a;用于预训练语料的构建。pretraining&#xff1a;用于Bert的预训练。train&#xff1a;用于新闻文本分类模型的训练。pred&a…

Celery使用异步、定时任务使用

一、什么是Celery 1.1、celery是什么 Celery是一个简单、灵活且可靠的&#xff0c;处理大量消息的分布式系统&#xff0c;专注于实时处理的异步任务队列&#xff0c;同时也支持任务调度。 Celery的架构由三部分组成&#xff0c;消息中间件&#xff08;message broker&#xf…

网络安全加密算法---对称加密

三位同学一组完成数据的对称加密传输。 三位同学分别扮演图中 A、B 和 KDC 三个角色&#xff0c;说明 KA、KB&#xff0c;KAB 和发送的数据Data 的内容。 给出图中 2 和 3 中的数据&#xff0c;以及 Data 加密后的密文。可以完成多轮角色互换的通信 过程。其中一轮过程要求 K…

【Entity Framework】聊聊EF中键

【Entity Framework】聊聊EF中键 文章目录 【Entity Framework】聊聊EF中键一、概述二、配置主键2.1 约定配置主键2.2 单个属性配置为实体主键2.3 组合主键 三、主键名称四、键类型和值五、备用键 一、概述 键用作每个实体实例的唯一标识符。EF中的大多数实体都有一个键&#…

Vue2电商前台项目(三):完成Search搜索模块业务

目录 一、请求数据并展示 1.写Search模块的接口 2.写Vuex中的search仓库&#xff08;三连环&#xff09; 3.组件拿到search仓库的数据 用getters简化仓库中的数据 4.渲染商品数据到页面 5.search模块根据不同的参数获取数据展示 &#xff08;1&#xff09;把派发actions…

layui中对table表格内容鼠标移入显示 tips内容

要在Layui中的表格中实现鼠标移入显示Tips&#xff0c;你可以使用Layui的事件监听和Tips组件。 有两种实现方式&#xff01; 第一种是&#xff0c;通过自定义鼠标事件显示 tips。在渲染 table 时&#xff0c;对 filed 进行重构&#xff0c;增加相应的选择器标识&#xff0c;一…

冯喜运:4.10晚间黄金原油走势分析

黄金消息技术面分析&#xff1a;美国CPI年率创半年新高&#xff0c;美国3月未季调CPI年率录得3.5%&#xff0c;高于预期的3.4%水平&#xff0c;为2023年9月以来最高水平。美国CPI高于预期&#xff0c;现货黄金短线下挫16美元。日线当前的指标macd依旧属于金叉放量运行&#xff…

unipush+个推实现消息推送

1.注册个推平台的帐号个推&#xff0c;专业的数据智能服务商-为垂直领域提供数据智能解决方案 2.应用列表中选择新增应用/服务 3.填写下应用信息4.创建好应用后在manifest.json中的sdkConfigs配置上写入appid、appkey、appsecret "sdkConfigs" : {"ad" :…

tailwindcss+vue3+vite+preline项目搭建

最近原子化样式比较火&#xff0c;用了一下确实还不错&#xff0c;也确实是用一些标准的样式能够使网页看起来比较统一&#xff0c;而且能够极大的减轻起名字的压力&#xff0c;有利有弊&#xff0c;就不一一细说了。 之前开发都是习惯于使用vitevue3来开发的&#xff0c;此次搭…