Commit 6fed301c by lijingjing

添加检测项目比对功能;

parent 09b4416d
......@@ -9,15 +9,13 @@ import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.RangeStatsQueryDTO;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
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.enums.EntrustSampleItemStatusEnum;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.ItemVO;
import com.patzn.cloud.service.hmhj.vo.SampleItemVO;
import com.patzn.cloud.service.hmhj.vo.TesterWorkloadStatsVO;
import com.patzn.cloud.service.hmhj.vo.*;
import com.patzn.cloud.service.lims.base.entity.LmsUserRelGroup;
import com.patzn.cloud.service.lims.base.vo.LmsUserRelGroupVO;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustSampleItemService;
......@@ -62,6 +60,19 @@ public class EntrustSampleItemController extends ServiceController {
return success(entrustSampleItemService.page(getPage(), entrustSampleItem));
}
@ApiOperation(value = "检测项目对比数据", notes = "检测项目对比数据")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_SIDX, value = "排序字段", paramType = "query", dataTypeClass = String.class),
@ApiImplicitParam(name = RestConstants.PAGE_SORD, value = "排序方式", paramType = "query", dataTypeClass = String.class),
})
@PostMapping("/compare_items")
public RestResult<Page<ItemCompareVO>> compareItems(RangeStatsQueryDTO queryDTO) {
return success(entrustSampleItemService.pageCompareItems(getPage(), queryDTO));
}
@ApiOperation("查询 id 信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
......@@ -745,4 +756,5 @@ public class EntrustSampleItemController extends ServiceController {
public RestResult<Boolean> backUserItem(@RequestParam("ids") Long[] ids) {
return success(entrustSampleItemService.backUserItem(ids));
}
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.baomidou.mybatisplus.annotations.SqlParser;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.RangeStatsQueryDTO;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSampleItem;
import com.patzn.cloud.service.hmhj.vo.*;
......@@ -87,4 +89,6 @@ public interface EntrustSampleItemMapper extends BatchMapper<EntrustSampleItem>
List<ItemVO> pageItemDataRight(RowBounds rowBounds, @Param("vo") ItemVO vo);
Integer deletePhysicalByEntrustIds(@Param("entrustIds") List<Long> entrustIds);
List<ItemCompareVO> selectCompareItems(RowBounds rowBounds, @Param("vo") RangeStatsQueryDTO queryDTO);
}
......@@ -3,9 +3,11 @@ package com.patzn.cloud.service.lims.hmhj.mapper;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.entity.MaterialItem;
import java.util.List;
/**
* <p>
* Mapper 接口
* Mapper 接口
* </p>
*
* @author wwd
......@@ -13,4 +15,5 @@ import com.patzn.cloud.service.hmhj.entity.MaterialItem;
*/
public interface MaterialItemMapper extends BatchMapper<MaterialItem> {
List<MaterialItem> selectAlLimitItemList();
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.RangeStatsQueryDTO;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSampleItem;
import com.patzn.cloud.service.hmhj.entity.ItemDeviate;
......@@ -26,6 +27,8 @@ public interface IEntrustSampleItemService extends IBaseService<EntrustSampleIte
Page<EntrustSampleItem> page(Page<EntrustSampleItem> page, EntrustSampleItem entrustSampleItem);
Page<ItemCompareVO> pageCompareItems(Page<ItemCompareVO> page, RangeStatsQueryDTO queryDTO);
boolean removeByIds(List<Long> ids);
boolean updateItemBatch(String itemJson);
......@@ -141,4 +144,5 @@ public interface IEntrustSampleItemService extends IBaseService<EntrustSampleIte
Boolean backUserItem(Long[] ids);
boolean deletePhysicalByEntrustIds(List<Long> ids);
}
......@@ -5,9 +5,10 @@ import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.entity.MaterialItem;
import java.util.List;
import java.util.Map;
/**
* 服务类
* 服务类
*
* @author wwd
* @since 2021-02-03
......@@ -19,4 +20,6 @@ public interface IMaterialItemService extends IBaseService<MaterialItem> {
boolean removeByIds(List<Long> ids);
boolean importItemForMaterial(Long material, Long[] ids);
Map<String, String> listAlLimitItemMap();
}
......@@ -22,6 +22,7 @@ import com.patzn.cloud.oss.starter.OssFileResult;
import com.patzn.cloud.service.BaseEntity;
import com.patzn.cloud.service.hmhj.bean.KV;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.RangeStatsQueryDTO;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.entity.*;
import com.patzn.cloud.service.hmhj.enums.EntrustFlowEnum;
......@@ -61,6 +62,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
......@@ -142,6 +144,9 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
@Autowired
private UserInfoServiceImpl userInfoService;
@Autowired
private IMaterialItemService materialItemService;
@Value("${libreOffice.url}")
private String libreOfficeUrl;
......@@ -172,6 +177,39 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
}
@Override
public Page<ItemCompareVO> pageCompareItems(Page<ItemCompareVO> page, RangeStatsQueryDTO queryDTO) {
if (null == queryDTO.getQueryDate()) {
queryDTO.setQueryDate(new Date());
}
List<ItemCompareVO> itemCompareVOList = baseMapper.selectCompareItems(page, queryDTO);
// 查询样本库下检测项目限定值
Map<String, String> limitValueMap = materialItemService.listAlLimitItemMap();
itemCompareVOList.forEach(item -> {
item.setLimitValue(limitValueMap.get(item.getSampleName() + item.getName()));
item.setReclaim(false);
try {
BigDecimal newVal = new BigDecimal(item.getTestValue());
BigDecimal oldVal = new BigDecimal(item.getOldTestValue());
BigDecimal difVal = newVal.subtract(oldVal);
item.setDiffValue(difVal.doubleValue());
if (StringUtils.isNotBlank(item.getLimitValue())) {
BigDecimal limitValue = new BigDecimal(item.getLimitValue());
// 差值与限定值相比,大于0需要重取
if (difVal.abs().compareTo(limitValue) > 0) {
item.setReclaim(true);
}
}
} catch (Exception e) {
logger.error("数据转换错误!");
logger.error("data conversion exception---->: {}", e.getMessage());
}
});
return page.setRecords(itemCompareVOList);
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
......
......@@ -19,10 +19,13 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 服务实现类
* 服务实现类
*
* @author wwd
* @since 2021-02-03
......@@ -53,16 +56,16 @@ public class MaterialItemServiceImpl extends BaseServiceImpl<MaterialItemMapper,
@Transactional(rollbackFor = Exception.class)
@Override
public boolean importItemForMaterial(Long material, Long[] ids) {
RestAssert.fail(null ==material,"请选择物资ID");
RestAssert.fail(null == materialService.getById(material),"物资不存在");
RestAssert.fail(ArrayUtils.isEmpty(ids),"请选择检测项目");
RestAssert.fail(null == material, "请选择物资ID");
RestAssert.fail(null == materialService.getById(material), "物资不存在");
RestAssert.fail(ArrayUtils.isEmpty(ids), "请选择检测项目");
List<Qualification> qualificationList = qualificationService.list(Condition.create().in("id",ids));
RestAssert.fail(CollectionUtils.isEmpty(qualificationList),"选择的检测项目不存在");
List<Qualification> qualificationList = qualificationService.list(Condition.create().in("id", ids));
RestAssert.fail(CollectionUtils.isEmpty(qualificationList), "选择的检测项目不存在");
List<MaterialItem> saveMaterialItemList = new ArrayList<>();
for (Qualification qualification:qualificationList) {
for (Qualification qualification : qualificationList) {
MaterialItem materialItem = new MaterialItem();
materialItem.setMaterialId(material);
......@@ -78,11 +81,21 @@ public class MaterialItemServiceImpl extends BaseServiceImpl<MaterialItemMapper,
saveMaterialItemList.add(materialItem);
}
if (CollectionUtils.isNotEmpty(saveMaterialItemList)){
return saveBatch(saveMaterialItemList);
if (CollectionUtils.isNotEmpty(saveMaterialItemList)) {
return saveBatch(saveMaterialItemList);
}
return false;
}
@Override
public Map<String, String> listAlLimitItemMap() {
// 查询原铝下检测项目限定值
List<MaterialItem> items = baseMapper.selectAlLimitItemList();
if (CollectionUtils.isNotEmpty(items)) {
return items.stream().collect(Collectors.toMap(MaterialItem::getName, MaterialItem::getLimitValue));
}
return new HashMap<>(2);
}
}
......@@ -787,6 +787,60 @@
order by e.code, i.name, s.code
</select>
<!--查询某个日期的比对检测项目数据-->
<select id="selectCompareItems" resultType="com.patzn.cloud.service.hmhj.vo.ItemCompareVO">
SELECT
n.*,
o.test_value "old_test_value"
FROM
(
SELECT DISTINCT ON
( s.slot_no, ii.NAME ) s.NAME "sample_name",
s.code "sample_code",
s.slot_no,
ii.NAME,
ii.test_value
FROM
entrust_sample_item_index ii
JOIN entrust_sample_item i ON i.ID = ii.entrust_sample_item_id
AND i.deleted = 0
JOIN entrust_sample s ON s.ID = i.entrust_sample_id
AND s.deleted = 0
WHERE
ii.deleted = 0
AND ii.NAME IN ( '原铝Fe', '原铝Ga' )
AND s.NAME IN ( '原铝', '原铝重取' )
AND to_char( ii.ctime, 'yyyy-MM-dd' ) = to_char(#{vo.queryDate}::timestamp,'yyyy-MM-dd')
ORDER BY
s.slot_no,
ii.NAME,
i.ctime DESC
) n
JOIN (
SELECT DISTINCT ON
( s.slot_no, ii.NAME ) s.NAME "sample_name",
s.code "sample_code",
s.slot_no,
ii.NAME,
ii.test_value
FROM
entrust_sample_item_index ii
JOIN entrust_sample_item i ON i.ID = ii.entrust_sample_item_id
AND i.deleted = 0
JOIN entrust_sample s ON s.ID = i.entrust_sample_id
AND s.deleted = 0
WHERE
ii.deleted = 0
AND ii.NAME IN ( '原铝Fe', '原铝Ga' )
AND s.NAME IN ( '原铝', '原铝重取' )
AND to_char( ii.ctime, 'yyyy-MM-dd' ) = to_char(#{vo.queryDate}::timestamp + '-2 day','yyyy-MM-dd')
ORDER BY
s.slot_no,
ii.NAME,
i.ctime DESC
) o ON n.slot_no = o.slot_no AND n.NAME = o.NAME
</select>
<update id="updateBatchByData" parameterType="java.util.List">
<foreach collection="itemList" item="item" index="index" open="" close="" separator=";">
update entrust_sample_item
......
......@@ -2,4 +2,16 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.patzn.cloud.service.lims.hmhj.mapper.MaterialItemMapper">
<select id="selectAlLimitItemList" resultType="com.patzn.cloud.service.hmhj.entity.MaterialItem">
select
m.name || mi.name "name",
mi.limit_value
from material_item mi
join material m on m.id = mi.material_id and m.deleted = 0
where mi.deleted = 0
and m.name in ('原铝','铝成品')
and mi.name in ('原铝Fe','原铝Ga')
and mi.limit_value is not null
order by m.name,mi.name
</select>
</mapper>
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