Commit 4f5fb9d9 by lijingjing

添加样品判定是否合格;

parent 395a9209
......@@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSampleItem;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleCalcResultVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.TesterWorkloadStatsVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import java.util.List;
import java.util.Map;
/**
* <p>
......@@ -48,4 +50,6 @@ public interface EntrustSampleItemMapper extends BatchMapper<EntrustSampleItem>
int selectUnallocatedCountByEntrustId(@Param("entrustId") Long entrustId);
List<TesterWorkloadStatsVO> selectTesterWorkloadStatus(@Param("vo") QueryDTO queryDTO);
List<EntrustSampleCalcResultVO> selectSampleCalcResult(@Param("vo") QueryDTO queryDTO);
}
......@@ -7,12 +7,14 @@ import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSampleItem;
import com.patzn.cloud.service.hmhj.entity.ItemDeviate;
import com.patzn.cloud.service.hmhj.entity.OriginalRecord;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleCalcResultVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.TesterWorkloadStatsVO;
import com.patzn.cloud.service.lims.base.entity.LmsUserRelGroup;
import com.patzn.cloud.service.lims.base.vo.LmsUserRelGroupVO;
import java.util.List;
import java.util.Map;
/**
* 服务类
......@@ -78,4 +80,6 @@ public interface IEntrustSampleItemService extends IBaseService<EntrustSampleIte
Page<LmsUserRelGroupVO> pageGroupUser(Page<LmsUserRelGroupVO> page, LmsUserRelGroup soilExperiment);
List<TesterWorkloadStatsVO> getTesterWorkloadStatusQuery(QueryDTO queryDTO);
List<EntrustSampleCalcResultVO> getSampleCalcResult(QueryDTO queryDTO);
}
......@@ -16,6 +16,7 @@ import com.patzn.cloud.service.hmhj.entity.*;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleItemStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustStatusEnum;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleCalcResultVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
import com.patzn.cloud.service.hmhj.vo.TesterWorkloadStatsVO;
......@@ -862,4 +863,9 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
public List<TesterWorkloadStatsVO> getTesterWorkloadStatusQuery(QueryDTO queryDTO){
return baseMapper.selectTesterWorkloadStatus(queryDTO);
}
@Override
public List<EntrustSampleCalcResultVO> getSampleCalcResult(QueryDTO queryDTO){
return baseMapper.selectSampleCalcResult(queryDTO);
}
}
......@@ -200,8 +200,6 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
}
for (EntrustSampleVO vo : voList) {
vo.setIndexList(sampleIndexMap.get(vo.getId()));
// 获取检测结果,判定是否合格
}
// 数据排序,有结果的排在前面,无结果排后面
Collections.sort(voList,Comparator.comparingInt(t->CollectionUtils.isNotEmpty(t.getIndexList()) ? 1 : 0));
......
......@@ -370,4 +370,75 @@
</if>
GROUP BY i.tester_id,i.tester,o.org_name
</select>
<!--查询样品是否合格-->
<select id="selectSampleCalcResult" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleCalcResultVO">
select
t.entrust_id,
t.sample_id,
t.sample_name,
t.compose_judge,
t.sum_compare,
t.sum_value,
(case when t.compose_judge = 1 and min(t.calc_result) > 0 then
(case when strpos(t.sum_compare,'>') > 0 then sum(case when t.item_compose_judge = 1 then to_number(t.test_value,'9999.99') else 0 end ) - t.sum_value
else t.sum_value - sum(case when t.item_compose_judge = 1 then to_number(t.test_value,'9999.99') else 0 end ) end)
else min(t.calc_result) end ) "calcResult"
from (
with gspi as (
SELECT
g.*,
gi.grading_product_id,
gi.name,
gi.compose_judge "item_compose_judge",
gi.decision_symbol,
gi.limit_value
from (SELECT
gp.grading_standard_id,
gs.compose_judge,
gp.sum_compare,
(case when strpos(gp.sum_compare,'>') > 0 then max(gp.sum_value) else min(gp.sum_value) end) "sum_value"
FROM
grading_product gp
join grading_standard gs on gs.id = gp.grading_standard_id
WHERE
gp.deleted = 0 and gs.deleted = 0
group by gp.grading_standard_id,gs.compose_judge , gp.sum_compare
order by gp.grading_standard_id
) g
join grading_product gpt on (g.grading_standard_id = gpt.grading_standard_id and g.sum_compare = gpt.sum_compare and g.sum_value = gpt.sum_value)
join grading_item gi on gi.grading_product_id = gpt.id
where gpt.deleted = 0 and gi.deleted = 0
)
select
s.company_id,
s.entrust_id,
s.id "sample_id",
s.name "sample_name",
i.name "item_name",
ii.test_value,
g.*,
(case when strpos(g.decision_symbol,'>') > 0 then to_number(ii.test_value,'9999.99') - to_number(g.limit_value,'9999.99')
else to_number(ii.test_value,'9999.99') - to_number(g.limit_value,'9999.99') end ) "calc_result"
from entrust_sample_item i
join entrust_sample_item_index ii on ii.entrust_sample_item_id = i.id
join entrust_sample s on s.id = i.entrust_sample_id
join gspi g on g.grading_standard_id = s.product_standard_id and strpos(i.name,g.name) >= 0
where i.deleted = 0 and ii.deleted = 0
<if test="null != vo.entrustId">
and s.entrust_id = #{vo.entrustId}
</if>
<if test="null != vo.sampleId">
and s.id = #{vo.sampleId}
</if>
) t
group by
t.entrust_id,
t.sample_id,
t.sample_name,
t.compose_judge,
t.sum_compare,
t.sum_value
</select>
</mapper>
......@@ -108,17 +108,22 @@
e.entrust_time,
e.test_side,
s.supplier,
s.manufacturer
s.manufacturer,
(case when cr.calc_result != null then (case when cr.calc_result &gt;0 then 1 else 0 end) else null end) "isQualified"
FROM entrust_sample s
JOIN entrust e ON s.entrust_id = e.ID
JOIN (
SELECT i.entrust_sample_id FROM entrust_sample_item i
JOIN entrust_sample_item_index x ON i.ID = x.entrust_sample_item_id
WHERE i.deleted = 0 AND x.deleted = 0 AND x.test_value IS NOT NULL
GROUP BY i.entrust_sample_id
) k ON s.ID = k.entrust_sample_id
left join (
-- 实际每个样品一条记录,此处去除测试冗余数据
select cr.sample_id,max(cr.calc_result) "calc_result" from v_sample_calc_result cr
group by cr.sample_id
) cr on cr.sample_id = s.id
WHERE
s.deleted = 0
AND e.deleted = 0
......
create or replace view v_sample_calc_result
create or replace view v_sample_calc_result
as
SELECT t.company_id,
t.entrust_id,
t.sample_id,
t.sample_name,
t.compose_judge,
t.sum_compare,
t.sum_value,
CASE
WHEN t.compose_judge = 1 AND min(t.calc_result) > 0::numeric THEN
CASE
WHEN strpos(t.sum_compare::text, '<'::text) > 0 THEN t.sum_value - sum(
CASE
WHEN t.item_compose_judge = 1 THEN to_number(t.test_value::text, '9999.99'::text)
ELSE 0::numeric
END)
ELSE sum(
CASE
WHEN t.item_compose_judge = 1 THEN to_number(t.test_value::text, '9999.99'::text)
ELSE 0::numeric
END) - t.sum_value
END
ELSE min(t.calc_result)
END AS calc_result
FROM ( WITH gspi AS (
SELECT g_1.grading_standard_id,
g_1.compose_judge,
g_1.sum_compare,
g_1.sum_value,
gi.grading_product_id,
gi.name,
gi.compose_judge AS item_compose_judge,
gi.decision_symbol,
gi.limit_value
FROM ( SELECT gp.grading_standard_id,
gs.compose_judge,
gp.sum_compare,
CASE
WHEN strpos(gp.sum_compare::text, '>'::text) > 0 THEN max(gp.sum_value)
ELSE min(gp.sum_value)
END AS sum_value
FROM grading_product gp
JOIN grading_standard gs ON gs.id = gp.grading_standard_id
WHERE gp.deleted = 0 AND gs.deleted = 0
GROUP BY gp.grading_standard_id, gs.compose_judge, gp.sum_compare
ORDER BY gp.grading_standard_id) g_1
JOIN grading_product gpt ON g_1.grading_standard_id = gpt.grading_standard_id AND g_1.sum_compare::text = gpt.sum_compare::text AND g_1.sum_value = gpt.sum_value
JOIN grading_item gi ON gi.grading_product_id = gpt.id
WHERE gpt.deleted = 0 AND gi.deleted = 0
)
SELECT s.company_id,
s.entrust_id,
s.id AS sample_id,
s.name AS sample_name,
i.name AS item_name,
ii.test_value,
g.grading_standard_id,
g.compose_judge,
g.sum_compare,
g.sum_value,
g.grading_product_id,
g.name,
g.item_compose_judge,
g.decision_symbol,
g.limit_value,
CASE
WHEN strpos(g.decision_symbol::text, '>'::text) > 0 THEN to_number(ii.test_value::text, '9999.99'::text) - to_number(g.limit_value::text, '9999.99'::text)
ELSE to_number(ii.test_value::text, '9999.99'::text) - to_number(g.limit_value::text, '9999.99'::text)
END AS calc_result
FROM entrust_sample_item i
JOIN entrust_sample_item_index ii ON ii.entrust_sample_item_id = i.id
JOIN entrust_sample s ON s.id = i.entrust_sample_id
JOIN gspi g ON g.grading_standard_id = s.product_standard_id AND strpos(i.name::text, g.name::text) >= 0
WHERE i.deleted = 0 AND ii.deleted = 0) t
GROUP BY t.company_id, t.entrust_id, t.sample_id, t.sample_name, t.compose_judge, t.sum_compare, t.sum_value
\ 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