最近搜索

实验室项目 文档

浏览:804
管理员 2021-12-03 11:25



添加平行样 (平行样添加到最后)

化探-平行样


上传样品数量,小于等于20,添加1个

上传样品数量,大于20,按8%添加(50个加4个平行样) 超过50个样。按50分段,每段取4个样。有余数继续按8%取样。向上取整(余数的8%假如是3.2那么4个)


光谱半定量-平行样


上传样品数量,小于等于5,全部复制成平行样。


上传样品数量,大于5小于等于10,(6-10包含10) 随机抽取1个作为平行样。


上传样品数量,大于等于10,按10%添加(10个添加1个平行样) 超过10个样。按10分段,每段取1个样。有余数 不用计算直接添加1个样。


其它-平行样


上传样品数量,小于等于5,全部复制成平行样。


上传样品数量,大于5小于等于10,(6-10包含10) 随机抽取1个作为平行样。


上传样品数量,大于等于10,按20%添加(10个添加2个平行样) 超过10个样。按10分段,每段取2个样。有余数 继续按20%取样,需要计算取1个样还是取2个样。向上取整(余数的20%假如是0.2那么1个  假如是1.1那么2个)




添加标样(添加到中间,前50,4个那么就在50中间随机4个位置放)

化探的标样的检测项目是 上传样品的集合,不含Au。

不是化探的标样是检测项目的集合(上传样品的检测项目集合,含Au)

金标样的检测项目是Au 永远只是Au  单独1个。

化探样品包括Au-标样


上传样品数量,小于50,随机添加1个标准物质 1个金标样(添加位置随机添加到中间)


上传样品数量,大于等于50,按8%添加(50个样品添加4个标准物质,4个金标样,一共是8个。刚好我们的标准物质是4,金标样也是4个)

添加位置,50个样品会随机4个位置,每个位置添加1个标准物质和1个金标样。有余数 继续按8%取样向上取整。



化探样品不包括Au-标样

上传样品数量,小于50,随机添加1个标准物质 (添加位置随机添加到中间)


上传样品数量,大于等于50,按8%添加(50个样品添加4个标准物质。刚好我们的标准物质是4)

添加位置,每50个样品会随机4个位置,每个位置添加1个标准物质。有余数 继续按8%取样向上取整。





样品不是化探-标样(这个不区别是不是Au)


上传样品数量,小于50,随机添加1个标准物质 (添加位置随机添加到中间)


上传样品数量,大于等于50,按2%添加(50个样品添加1个标准物质,随机1个)添加位置,每50个样品会随机1个位置,有余数 直接添加1个标准物质,位置也是随机。


关于修改样品和添加样品,位置的控制这个有点技术。


添加样品, 修改样品向下,修改样品向上





关于分配任务。

创建检测任务逻辑。

创建检测任务每一组的time_str标记不同。  可以根据time_str查询这组的任务。

task也是单个 不再是多个了。

上传检测 结果excel

下载的体测任务进行了sensample.order 排序 。

上传完所有结果之后,会设置这个任务已完成。设置完成时间。已完成数量。

image.png


上传检测结果,如果上传过的结果,

程序选择是跳过。不会更新结果。除非管理员清空结果。这边才可以重新上传。





关于清空上传结果


image.png

如果清空结果了,则需要重新上传。 已完成数量也会变。完成时间也取消。状态也会变。


清空结果,如果是有实际误差的  还有铀镭要检测一边。





计算超差

实际误差和允许误差,只有平行样和标样有。(样品没有)

化探Au之外的,没有标样没有允许误差和实际误差。


计算超差。有2个地方。如果改的话,这2个地方都要改

前面是一键计算超差。 后面是平行样多结果。要使用这个。

image.png






图谱



这个地方随后要测试一下

image.png



点击图谱弹出窗口,

/houtai/register/tupu?registerId=3&project=As

1:拿出所有的标样。

//把标样拿出来  这个标样应该按  检测编号 排序的  从小向大  其实就是order
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("state", 2);
		map.put("register",register);
		List<SendSample> sendSamples = sendSampleService.list(map , 0, 100);
		//把标样拿出来  这个标样应该按  检测编号 排序的  从小向大  其实就是order


1.1计算有几段。 每4个算一段。

//标样必须是4的整倍。其余的可以不要。
int duan = 4;
int duanNum = sendSamples.size() / duan;


2:遍历所有的标样,拿出这个标样对应的检测结果,过虑检测项目。 并不是所有的检测项目 

List<Task> taskList = taskDao.find_registerId_sendSampleId_project(register.getId(), sendSample.getId(), project);


@Query(value = "select * from t_task where register_id = ?1  and send_sample_id = ?2 and project = ?3  and is_result=1 
ORDER BY test_number ASC ", nativeQuery = true)
public  List<Task>  find_registerId_sendSampleId_project(Integer registerId,Integer sendSampleId,String  project);	


3:把拿到的数据加载到mav中。 总代码如下。

	 
	@RequestMapping("/tupu")
	public ModelAndView tupu(Integer registerId,  String project) throws Exception {
		ModelAndView mav = new ModelAndView();
		Register register = registerDao.findId(registerId);
		mav.addObject("register", register);
		mav.addObject("title", "图谱");
		List<Task>  taskResultAll  = new ArrayList<Task>();
		
		//把标样拿出来  这个标样应该按  检测编号 排序的  从小向大  其实就是order
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("state", 2);
		map.put("register",register);
		List<SendSample> sendSamples = sendSampleService.list(map , 0, 100);
		//把标样拿出来  这个标样应该按  检测编号 排序的  从小向大  其实就是order
		
		//标样必须是4的整倍。其余的可以不要。
		int duan = 4;
		int duanNum = sendSamples.size() / duan;
		//duanNum * 4 是我们要拿的标样数量
		for(SendSample sendSample :sendSamples) {
		//for(int i=0;i<(duanNum*4);i++) {
			//SendSample sendSample  =  sendSamples.get(i);
			//根据    报表id  样品id  检测项目  isresutl=1 拿检测任务。
			List<Task> taskList = taskDao.find_registerId_sendSampleId_project(register.getId(), sendSample.getId(), project);
			taskResultAll.addAll(taskList);
		}
		
		mav.addObject("project", project);
		mav.addObject("duanNum", duanNum);
		mav.addObject("taskResultAll", taskResultAll);
		mav.setViewName("/admin/page/register/tupu.html");
		return mav;
	}













复查

复查和检测任务一样。在同一地方。只是type不同

@Column(nullable = false, columnDefinition = "int(5) comment '上传类型 .1第一次   2复查.'")
	private Integer type;




设置最佳结果

上传ids 遍历ids


第一:判断当前是不是平行样

如果是平行样,则先拿sendSamples,因为平行样有对应的样品。 这2个不管哪一个有多结果,都不可以设置最佳。

代码如下:

 
 
                        if(task.getState()==1) {
				//平行样
				//拿到2个样  1个样品state0      1个平行样state1   
				List<SendSample>  sendSamples =  sendSampleDao.list_register_smaple_name(task.getRegisterId(), task.getSmapleName());
				//看看平行样的上传结果 是不是多个。
				List<Task> taskResult0  = taskDao.test_num_project_regis2_isresult(sendSamples.get(0).getTestNumber(), task.getProject().trim(), task.getRegisterId(),1);
				List<Task>  taskResult1  = taskDao.test_num_project_regis2_isresult(sendSamples.get(1).getTestNumber(), task.getProject().trim(),task.getRegisterId(),1);
				//0是样品  1是平行样  不管0和1 任意超了都不行。
				if(taskResult0.size()>1) {
					clear = false;//如果任意一种样 结果有多个都清
				}
				if(taskResult1.size()>1) {
					clear = false;//如果任意一种样 结果有多个都清
				}
			}			
			

第二:判断当前是不是样品

如果是样品 并不是所有的样品都有平行样。

根据原样id拿SendSample,如果有2个就表示有平行样,如果有1个就表示没有平行样。

List<SendSample>  sendSamples =  sendSampleDao.list_register_smaple_name(task.getRegisterId(), task.getSmapleName());

如果sendSamples.size()==2 说明样品有平行样。

                               if(sendSamples.size()==2) {
					//这个样品是有平行样的样品
					List<Task> taskResult0  = taskDao.test_num_project_regis2_isresult(sendSamples.get(0).getTestNumber(), task.getProject().trim(), task.getRegisterId(),1);
					List<Task>  taskResult1  = taskDao.test_num_project_regis2_isresult(sendSamples.get(1).getTestNumber(), task.getProject().trim(),task.getRegisterId(),1);
					//0是样品  1是平行样  不管0和1 任意超了都不行。
					if(taskResult0.size()>1) {
						clear = false;//如果任意一种样 结果有多个都清
					}
					if(taskResult1.size()>1) {
						clear = false;//如果任意一种样 结果有多个都清
					}
				}

如果样品只有一个,则查一下有没有复查。

如果有复查,那么确定一下他是不是选中一个。(取消全部选中当前,意思是说不看之前,有没有选择,直接选择你)

                                       //这个样品只有1个。并没有平行样。哪就查看这个样品 有没有复查。  样品也是有复查的
					//根据   检测编号 检测项目 regisid isresult  
					List<Task> tempList =  taskDao.test_num_project_regis2_isresult(task.getTestNumber(),task.getProject(),task.getRegisterId(),task.getIsResult());
					//大于1表示样品有复查。
					if(tempList.size()>1) {
						//样品只有一个但是有复查,那么判断它设置的最佳是不是1个,只有1个可以通过设置最佳。
						//判断一下我选的是不是一个。
						//拿出选择的id和tempList对比一下
						int count = 0;
						for(Task task2  : tempList) {
							for(String id: idsStr) {
								//这是遍历 设置最佳的所有id
								if(id.equals(task2.getId().toString())) {
									count++;
								}
							}
						}
						if(count>1) {
							clear = false;//虽然样品是单个,但是结果有复查  不设置。
						}else {
							//如果只有1个选择了,清空其它 选上你。如果 不清空其它。慢慢多选几次就全选了
							for(Task task2  : tempList) {
								task2.setUseIt(0);
								taskDao.save(task2);
							}
						}
					}


第三:判断当前是不是标样

如果是标样,则判断标样是不是多结果。

如果是多结果,则判断ids是不是只有一个选中。

如果多个选中,则不处理。

如果1个选中,则设置最佳。 (取消全部选中当前,意思是说不看之前,有没有选择,直接选择你)


第四:镭含量

如果设置了最佳,则判断是不是镭检测项目,如果是则设置对应的铀的镭含量








取消最佳结果

这部分对于是否取消铀的镭含量,暂时没有处理




铀镭平衡 比特结果(铀矿石)

如果镭设置最佳了,则更新铀的镭含量。(如果铀有多个结果包含也一起更新)

假如铀复查 上传结果了。  这时候就要更新我的镭含量。(万镭含量有了。这时候就要自己更新自己了)(未落实)



关于比特单位 和比特结果(铀矿石专有的别的矿石没有)

检测项目  Ra  Th K  U  都有比特单位和比特结果

检测U 有额外的镭含量和铀镭平衡


计算比特结果的方法(比特结果在上传的哪一刻就记录好了)

检测项目是 U  铀单位10-6,U的结果乘以12.24,换算成单位Bq/kg  保留 2位小数。

  

检测项目是 Ra  铀单位10-11,Ra的结果除以0.002736,换算成单位Bq/kg  保留 2位小数。

  

检测项目是 Th  铀单位10-6,Th的结果乘以4.075,换算成单位Bq/kg  保留 2位小数。

  

检测项目是 K  铀单位10-2,K的结果乘以306,换算成单位Bq/kg  保留 2位小数。

  

镭含量和铀镭平衡

如果设置了最佳,则判断是不是镭检测项目,如果是则设置对应的铀的镭含量

计算铀镭平衡,









关于时间的计算

加密算法。试用期是30天。不能超过30天

激活码 设计成21位的数字+字母只是只用最后4位或者最后2位

这是为了迷惑对方

浏览器指纹获取第1位和最后一位。

然后和输入的激活码第1位和最后一位。 放到一起必须是30的整倍才会激活30天

如果是第2次激活  就使用第2位。 

如果是第3次激活  就使用第3位。 

激活次数都写在系统里面。




数据库BUG 点击我的检测任务异常。报错。

执行高版本数据的错误即可。


set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';


set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';


执行完之后,

关闭项目 --启动项目。即可正常。




导出excel

导出结果的检测项目,位置是3行。4列

image.png




关于检测结果的位置设置。


检测项目以及单位的位置,是根据检测编号定的。

编号的位置 上一行是检测项目  再上一行是单位 。

至于列就是根据  检测项目 在哪一列。自定义数据中定的。如下图

image.png





关于分配检测任务有一个bug

就是第1行,没有数据

第2行有数据。 保存没有问题,展示有问题。

因为数据库记录的行是第2行。  获取的数据实际只有1个。没有办法放到第2行。

解决方法:重新添加排序号。如下图

image.png





如果做了超出的检测项目。后面计算 会不会影响 。



image.png

image.png




上传检测项目不能重复。















=============================================







标样管理。标准样品管理


image.png

1,添加标样会自动被全 化学式或者检测项目。检测项目和化学式 有没有其中一个是空,自动补全(如果查不到,则不会补全)

2,添加标样,校验是否重复,根据,根据 name,标样名称 和  project,检测项目 ,查询是否存在。  

3,修改标样,不会校验是否重复,但是会自动补全,检测项目或者化学式 。



关于化碳  还是 区域地球 化学样品。如果这个名称修改了。有几个地方也要改的。



联系站长

站长微信:xiaomao0055

站长QQ:14496453