Commit 92cf07ec by lijingjing

添加原铝、电解质、磷生铁统计分析

parent e0c67824
......@@ -3,12 +3,17 @@ package com.patzn.cloud.service.lims.hmhj.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.google.common.collect.Lists;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.ReportDTO;
import com.patzn.cloud.service.hmhj.dto.StatsQueryDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSample;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleItemStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustSamplePrepareStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleStatusEnum;
import com.patzn.cloud.service.hmhj.vo.AlTasteStatsVO;
import com.patzn.cloud.service.hmhj.vo.ElectrolyteRatioStatsVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
import com.patzn.cloud.service.hmhj.vo.PMakeFeStatsVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -24,6 +29,7 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
/**
* 委托单样品 前端控制器
......@@ -447,4 +453,21 @@ public class EntrustSampleController extends ServiceController {
return success(entrustSampleService.pageTestResultQuery(getPage(), entrustSample));
}
@ApiOperation("原铝品味统计查询")
@PostMapping("/al_taste_stats_query")
public RestResult<List<AlTasteStatsVO>> getAlTasteStatsQuery(StatsQueryDTO statsQueryDTO) {
return success(entrustSampleService.getAlTasteStatsQuery(statsQueryDTO));
}
@ApiOperation("电解质分子比统计查询")
@PostMapping("/electrolyte_ratio_stats_query")
public RestResult<List<ElectrolyteRatioStatsVO>> getElectrolyteRatioStatsQuery(QueryDTO queryDTO) {
return success(entrustSampleService.getElectrolyteRatioStatsQuery(queryDTO));
}
@ApiOperation("磷生铁统计查询")
@PostMapping("/p_make_fe_stats_query")
public RestResult<List<PMakeFeStatsVO>> getPMakeFeStatsQuery(QueryDTO queryDTO) {
return success(entrustSampleService.getPMakeFeStatsQuery(queryDTO));
}
}
......@@ -61,6 +61,7 @@ public class UserInspectionCodeController extends ServiceController {
@ApiOperation("添加")
@PostMapping("/")
public RestResult<Boolean> add(UserInspectionCode userInspectionCode) {
userInspectionCode.setCreator(getAccount().getUserName());
return success(userInspectionCodeService.save(userInspectionCode));
}
......
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.StatsQueryDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSample;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.vo.AlTasteStatsVO;
import com.patzn.cloud.service.hmhj.vo.ElectrolyteRatioStatsVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
import com.patzn.cloud.service.hmhj.vo.PMakeFeStatsVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
......@@ -26,4 +31,10 @@ public interface EntrustSampleMapper extends BatchMapper<EntrustSample> {
List<EntrustSampleVO> selectMinStatusByEntrustIds(@Param("entrustIds") List<Long> entrustIds);
List<EntrustSampleVO> selectTestResultQuery(RowBounds rowBounds,@Param("vo") EntrustSampleVO entrustSample);
List<AlTasteStatsVO> selectAlTasteStats(@Param("vo") StatsQueryDTO queryDTO);
List<ElectrolyteRatioStatsVO> selectElectrolyteRatioStats(@Param("vo") QueryDTO queryDTO);
List<PMakeFeStatsVO> selectPMakeFeStats(@Param("vo") QueryDTO queryDTO);
}
......@@ -4,9 +4,14 @@ import com.baomidou.mybatisplus.mapper.Wrapper;
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.ReportDTO;
import com.patzn.cloud.service.hmhj.dto.StatsQueryDTO;
import com.patzn.cloud.service.hmhj.entity.EntrustSample;
import com.patzn.cloud.service.hmhj.vo.AlTasteStatsVO;
import com.patzn.cloud.service.hmhj.vo.ElectrolyteRatioStatsVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
import com.patzn.cloud.service.hmhj.vo.PMakeFeStatsVO;
import java.util.List;
......@@ -53,4 +58,10 @@ public interface IEntrustSampleService extends IBaseService<EntrustSample> {
Page<EntrustSampleVO> pageTestResultQuery(Page<EntrustSampleVO> page, EntrustSampleVO entrustSample);
int countByEntrustId(Long id);
List<AlTasteStatsVO> getAlTasteStatsQuery(StatsQueryDTO queryDTO);
List<ElectrolyteRatioStatsVO> getElectrolyteRatioStatsQuery(QueryDTO queryDTO);
List<PMakeFeStatsVO> getPMakeFeStatsQuery(QueryDTO queryDTO);
}
......@@ -10,12 +10,12 @@ import com.patzn.cloud.commons.toolkit.FileUtils;
import com.patzn.cloud.feign.base.client.SysFileTemplateClient;
import com.patzn.cloud.oss.starter.OssClient;
import com.patzn.cloud.service.base.entity.SysFileTemplate;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.ReportDTO;
import com.patzn.cloud.service.hmhj.dto.StatsQueryDTO;
import com.patzn.cloud.service.hmhj.entity.*;
import com.patzn.cloud.service.hmhj.enums.ContractSampleStatusEnum;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemIndexVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
import com.patzn.cloud.service.hmhj.vo.*;
import com.patzn.cloud.service.lims.common.StringHandleUtils;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import com.patzn.cloud.service.lims.hmhj.mapper.EntrustSampleMapper;
......@@ -141,39 +141,128 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
@Override
public Page<EntrustSampleVO> pageTestResultQuery(Page<EntrustSampleVO> page, EntrustSampleVO entrustSample) {
List<EntrustSampleVO> voList = baseMapper.selectTestResultQuery(page,entrustSample);
if (CollectionUtils.isEmpty(voList)){
List<EntrustSampleVO> voList = baseMapper.selectTestResultQuery(page, entrustSample);
if (CollectionUtils.isEmpty(voList)) {
return page;
}
List<Long> sampleIds = voList.stream().map(s->{
List<Long> sampleIds = voList.stream().map(s -> {
return s.getId();
}).collect(Collectors.toList());
List<EntrustSampleItemIndexVO> indexList = entrustSampleItemIndexService.listVOBySampleIds(sampleIds);
if (CollectionUtils.isEmpty(indexList)){
return page.setRecords(voList);
}
Map<Long,List<EntrustSampleItemIndex>> sampleIndexMap = new HashMap<>();
List<EntrustSampleItemIndexVO> indexList = entrustSampleItemIndexService.listVOBySampleIds(sampleIds);
if (CollectionUtils.isEmpty(indexList)) {
return page.setRecords(voList);
}
Map<Long, List<EntrustSampleItemIndex>> sampleIndexMap = new HashMap<>();
for (EntrustSampleItemIndexVO entrustSampleItemIndex : indexList) {
if (sampleIndexMap.containsKey(entrustSampleItemIndex.getSampleId())){
List<EntrustSampleItemIndex> itemIndexList = sampleIndexMap.get(entrustSampleItemIndex.getSampleId());
itemIndexList.add(entrustSampleItemIndex);
sampleIndexMap.put(entrustSampleItemIndex.getSampleId(),itemIndexList);
}else {
List<EntrustSampleItemIndex> itemIndexList = Lists.newArrayList();
itemIndexList.add(entrustSampleItemIndex);
sampleIndexMap.put(entrustSampleItemIndex.getSampleId(),itemIndexList);
}
if (sampleIndexMap.containsKey(entrustSampleItemIndex.getSampleId())) {
List<EntrustSampleItemIndex> itemIndexList = sampleIndexMap.get(entrustSampleItemIndex.getSampleId());
itemIndexList.add(entrustSampleItemIndex);
sampleIndexMap.put(entrustSampleItemIndex.getSampleId(), itemIndexList);
} else {
List<EntrustSampleItemIndex> itemIndexList = Lists.newArrayList();
itemIndexList.add(entrustSampleItemIndex);
sampleIndexMap.put(entrustSampleItemIndex.getSampleId(), itemIndexList);
}
}
for (EntrustSampleVO vo : voList) {
vo.setIndexList(sampleIndexMap.get(vo.getId()));
}
return page.setRecords(voList);
}
}
@Override
public int countByEntrustId(Long id) {
return super.count(Condition.create().eq("entrust_id",id));
return super.count(Condition.create().eq("entrust_id", id));
}
private void handleTotalData(AlTasteStatsVO vo, AlTasteStatsVO prevVO, Map<String, List<AlTasteStatsVO>> resultMap, boolean isLast) {
}
private AlTasteStatsVO getTotalData(List<AlTasteStatsVO> voList) {
AlTasteStatsVO bpStatsVO = new AlTasteStatsVO();
bpStatsVO.setPlant("合计");
bpStatsVO.setBranch(voList.get(0).getBranch());
for (AlTasteStatsVO t : voList) {
bpStatsVO.setTotal((null == bpStatsVO.getTotal() ? 0l : bpStatsVO.getTotal()) + t.getTotal());
bpStatsVO.setSlotsNum((null == bpStatsVO.getSlotsNum() ? 0l : bpStatsVO.getSlotsNum()) + t.getSlotsNum());
bpStatsVO.setAl85Num((null == bpStatsVO.getAl85Num() ? 0l : bpStatsVO.getAl85Num()) + t.getAl85Num());
bpStatsVO.setAl85Per((null == bpStatsVO.getAl85Per() ? 0.0000 : bpStatsVO.getAl85Per()) + t.getAl85Per());
bpStatsVO.setAl85SlotsNum((null == bpStatsVO.getAl85SlotsNum() ? 0l : bpStatsVO.getAl85SlotsNum()) + t.getAl85SlotsNum());
bpStatsVO.setAl70Num((null == bpStatsVO.getAl70Num() ? 0l : bpStatsVO.getAl70Num()) + t.getAl70Num());
bpStatsVO.setAl70Per((null == bpStatsVO.getAl70Per() ? 0.0000 : bpStatsVO.getAl70Per()) + t.getAl70Per());
bpStatsVO.setAl70SlotsNum((null == bpStatsVO.getAl70SlotsNum() ? 0l : bpStatsVO.getAl70SlotsNum()) + t.getAl70SlotsNum());
bpStatsVO.setFe10Num((null == bpStatsVO.getFe10Num() ? 0l : bpStatsVO.getFe10Num()) + t.getFe10Num());
bpStatsVO.setFe10Per((null == bpStatsVO.getFe10Per() ? 0.0000 : bpStatsVO.getFe10Per()) + t.getFe10Per());
bpStatsVO.setFe10SlotsNum((null == bpStatsVO.getFe10SlotsNum() ? 0l : bpStatsVO.getFe10SlotsNum()) + t.getFe10SlotsNum());
bpStatsVO.setFe08Num((null == bpStatsVO.getFe08Num() ? 0l : bpStatsVO.getFe08Num()) + t.getFe08Num());
bpStatsVO.setFe08Per((null == bpStatsVO.getFe08Per() ? 0.0000 : bpStatsVO.getFe08Per()) + t.getFe08Per());
bpStatsVO.setFe08SlotsNum((null == bpStatsVO.getFe08SlotsNum() ? 0l : bpStatsVO.getFe08SlotsNum()) + t.getFe08SlotsNum());
}
return bpStatsVO;
}
@Override
public List<AlTasteStatsVO> getAlTasteStatsQuery(StatsQueryDTO queryDTO) {
RestAssert.fail(null == queryDTO.getTimeS() || null == queryDTO.getTimeE(), "开始或结束时间为空");
long days = DateUtils.getDaysBetweenTwoDate(queryDTO.getTimeS(), queryDTO.getTimeE());
queryDTO.setDays(days);
List<AlTasteStatsVO> list = baseMapper.selectAlTasteStats(queryDTO);
List<AlTasteStatsVO> resultList = new ArrayList<>();
if (CollectionUtils.isEmpty(list)) {
return resultList;
}
Map<String, List<AlTasteStatsVO>> dataMap = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
AlTasteStatsVO vo = list.get(i);
String key = vo.getBranch() + vo.getPlant();
if (dataMap.isEmpty()) {
List<AlTasteStatsVO> newList = new ArrayList<>();
newList.add(vo);
dataMap.put(key, newList);
if (i == list.size() - 1) {
resultList.add(vo);
resultList.add(getTotalData(list));
}
continue;
}
if (!dataMap.containsKey(key)) {
AlTasteStatsVO prevVO = list.get(i - 1);
List<AlTasteStatsVO> prevList = dataMap.get(prevVO.getBranch() + prevVO.getPlant());
resultList.addAll(prevList);
resultList.add(getTotalData(prevList));
} else {
List<AlTasteStatsVO> lists = dataMap.get(key);
lists.add(vo);
if (i == list.size() - 1) {
resultList.addAll(lists);
resultList.add(getTotalData(lists));
}
}
}
// 汇总所有
AlTasteStatsVO alTasteStatsVO = getTotalData(list);
alTasteStatsVO.setBranch(null);
resultList.add(alTasteStatsVO);
return resultList;
}
@Override
public List<ElectrolyteRatioStatsVO> getElectrolyteRatioStatsQuery(QueryDTO queryDTO) {
RestAssert.fail(null == queryDTO.getTimeS() || null == queryDTO.getTimeE(), "开始或结束时间为空");
return baseMapper.selectElectrolyteRatioStats(queryDTO);
}
@Override
public List<PMakeFeStatsVO> getPMakeFeStatsQuery(QueryDTO queryDTO) {
RestAssert.fail(null == queryDTO.getTimeS() || null == queryDTO.getTimeE(), "开始或结束时间为空");
return baseMapper.selectPMakeFeStats(queryDTO);
}
@Override
......@@ -413,8 +502,8 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
Map<String, String> mapReplace = new HashMap<>();
mapReplace.put("#{nowDate}", DateUtils.toYearMonthDay(new Date()));
mapReplace.put("#{sampleNum}", countByEntrustId(entrust.getId())+"");
HSSFWorkbookUtil.replaceModel(mapReplace,xssfWorkbook,0);
mapReplace.put("#{sampleNum}", countByEntrustId(entrust.getId()) + "");
HSSFWorkbookUtil.replaceModel(mapReplace, xssfWorkbook, 0);
XSSFSheet sheetOne = xssfWorkbook.getSheetAt(0);
String sheetName = sheetOne.getSheetName();
System.out.println(sheetName);
......@@ -473,22 +562,22 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
} else {
if (null!=sysFileTemplate.getMoreSheet()&&sysFileTemplate.getMoreSheet()==1){
int total= sampleVOList.size();
int totalSheetSize = (total+templateSampleNum-1)/templateSampleNum;
List<List<EntrustSampleVO>> listList = Lists.partition(sampleVOList,templateSampleNum);
if (null != sysFileTemplate.getMoreSheet() && sysFileTemplate.getMoreSheet() == 1) {
int total = sampleVOList.size();
int totalSheetSize = (total + templateSampleNum - 1) / templateSampleNum;
List<List<EntrustSampleVO>> listList = Lists.partition(sampleVOList, templateSampleNum);
for (int i = 1; i < totalSheetSize; i++) {
xssfWorkbook.cloneSheet(0,sheetOne.getSheetName()+(i+1));
xssfWorkbook.cloneSheet(0, sheetOne.getSheetName() + (i + 1));
}
for (int k = 0; k < listList.size(); k++) {
Integer beginRow = sysFileTemplate.getSampleBeginRow();
List<EntrustSampleVO> sampleVOListIndex = listList.get(k);
List<EntrustSampleVO> sampleVOListIndex = listList.get(k);
for (EntrustSampleVO vo : sampleVOListIndex) {
List<EntrustSampleItemIndex> indexList = entrustSampleItemIndexService.listBySampleId(vo.getId());
vo.setIndexList(indexList);
XSSFSheet sheetOneIndex= xssfWorkbook.getSheetAt(k);
XSSFSheet sheetOneIndex = xssfWorkbook.getSheetAt(k);
XSSFRow xssfRow = sheetOneIndex.getRow(beginRow);
for (EntrustReportTemplateConfig config : configList) {
......@@ -507,7 +596,7 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
}
}else {
} else {
Integer beginRow = sysFileTemplate.getSampleBeginRow();
int insertRow = beginRow + sampleMergerNum * templateSampleNum;
XSSFRow zeroRow = sheetOne.getRow(beginRow);
......@@ -803,7 +892,5 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
}
}
}
}
......@@ -8,6 +8,7 @@ import com.patzn.cloud.commons.controller.LoginHelper;
import com.patzn.cloud.commons.toolkit.DateUtils;
import com.patzn.cloud.commons.toolkit.StringHandleUtils;
import com.patzn.cloud.feign.base.client.SysOrgClient;
import com.patzn.cloud.feign.lims.hmhj.client.LmsChemicalCategoryClient;
import com.patzn.cloud.service.base.entity.SysOrg;
import com.patzn.cloud.service.hmhj.dto.EntrustDTO;
import com.patzn.cloud.service.hmhj.dto.EntrustSampleDTO;
......@@ -16,6 +17,7 @@ import com.patzn.cloud.service.hmhj.enums.*;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
import com.patzn.cloud.service.hmhj.vo.EntrustVO;
import com.patzn.cloud.service.lims.chemical.entity.LmsChemicalCategory;
import com.patzn.cloud.service.lims.common.service.ILmsMsgService;
import com.patzn.cloud.service.lims.hmhj.mapper.EntrustMapper;
import com.patzn.cloud.service.lims.hmhj.service.*;
......@@ -73,6 +75,9 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
@Autowired
private SysOrgClient sysOrgClient;
@Autowired
private LmsChemicalCategoryClient lmsChemicalCategoryClient;
@Override
public Page<Entrust> page(Page<Entrust> page, Entrust entrust) {
......@@ -97,47 +102,82 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
public void initSampleCode(EntrustSample sample) {
// 样品类型
String category = sample.getCategory();
RestAssert.fail(StringUtils.isBlank(category), "样品类型不能为空");
String parentCategory = "";
if (StringUtils.isNotBlank(category)) {
LmsChemicalCategory chemicalCategory = lmsChemicalCategoryClient.getTopCategory(category).getData();
RestAssert.fail(null == chemicalCategory, "样品(物资)类型不能为空");
parentCategory = chemicalCategory.getName();
}
Account account = LoginHelper.getAccount();
int codeTypeNo = 0;
List<SysOrg> orgList = sysOrgClient.getListByUserId(account.getUserId()).getData();
// 是否包含二期部门
boolean secondPhase = orgList.stream().filter(t -> t.getName().contains("二期")).count() > 0;
// 具体是哪一期
String phase = orgList.stream().filter(t -> t.getName().contains("二期")).count() > 0 ? "Z" : "F";
// 默认样品初始编号
CodeTypeEnum codeType = null;
switch (sample.getName()) {
switch (parentCategory) {
case "原铝":
codeType = CodeTypeEnum.SAMPLE_YL_CODE;
break;
case "电解质":
codeType = CodeTypeEnum.SAMPLE_DJZ_CODE;
break;
case "外委检测":
case "外委检测物质":
codeType = CodeTypeEnum.SAMPLE_WWJC_CODE;
break;
case "三级编码物质":
codeType = CodeTypeEnum.SAMPLE_YFL_CODE;
break;
default:
codeType = CodeTypeEnum.SAMPLE_CODE;
break;
}
String sampleCode = codeRuleService.getKey((Integer) codeType.getValue(), codeType.getName(), sample);
String replaceStr = "XX", inspectNo = "", secondCode = "", thirdCode = "";
// 若为外委检测和三级编码,则查询质检编号
if (CodeTypeEnum.SAMPLE_WWJC_CODE == codeType || CodeTypeEnum.SAMPLE_YFL_CODE == codeType) {
List<UserInspectionCode> userInspectionCodeList = userInspectionCodeService.list(Condition.create().eq("user_id", account.getUserId()).eq("type", "ZJ").eq("deleted", 0));
if (CollectionUtils.isNotEmpty(userInspectionCodeList)) {
inspectNo = userInspectionCodeList.get(0).getNo();
}
}
if (CodeTypeEnum.SAMPLE_YL_CODE == codeType || CodeTypeEnum.SAMPLE_DJZ_CODE == codeType) {
sampleCode += sample.getSlotNo();
} else if (CodeTypeEnum.SAMPLE_WWJC_CODE == codeType) {
sampleCode = (secondPhase ? "Z" : "F") + sampleCode.substring(1);
// XX替换成质检员编号
// sampleCode = sampleCode.replace("XX", "01");
List<UserInspectionCode> userInspectionCodeList = userInspectionCodeService.list(Condition.create().eq("user_id",account.getUserId()).eq("type","ZJ").eq("deleted",0));
if(CollectionUtils.isNotEmpty(userInspectionCodeList)){
sampleCode = sampleCode.replace("XX",userInspectionCodeList.get(0).getNo());
}
}
// 外委检测样品编号
else if (CodeTypeEnum.SAMPLE_WWJC_CODE == codeType) {
sampleCode = phase + sampleCode.substring(1);
secondCode = sampleCode.replace(replaceStr, "");
sampleCode = sampleCode.replace(replaceStr, inspectNo);
}
// 三级编码默认使用第一级别的委托的编码,也就是默认为A
else if (CodeTypeEnum.SAMPLE_YFL_CODE == codeType) {
sampleCode = phase + sampleCode.substring(1);
secondCode = sampleCode.replace("A", "B").replace(replaceStr, inspectNo);
thirdCode = sampleCode.replace("A", "C").replace(replaceStr, "HY");
sampleCode = sampleCode.replace(replaceStr, inspectNo);
}
if (StringUtils.isNotBlank(sampleCode)) {
sample.setCode(sampleCode);
// 现只有一级编码
sample.setCodeType(codeTypeNo);
sample.setFirstCode(sampleCode);
// 默认一级编码
sample.setCodeType(codeTypeNo);
// 若为三级编号,修改对应类别
if (codeType == CodeTypeEnum.SAMPLE_WWJC_CODE) {
sample.setCodeType(2);
sample.setSecondCode(secondCode);
} else if (codeType == CodeTypeEnum.SAMPLE_YFL_CODE) {
sample.setCodeType(3);
sample.setSecondCode(secondCode);
sample.setThirdCode(thirdCode);
}
}
}
......
......@@ -35,15 +35,18 @@
<select id="selectByItemLeftRight" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO">
WITH i AS (
SELECT
id,
entrust_sample_id,
name,
status,
company_id,
standard,
group_name,
test_value,
group_id
id,
entrust_sample_id,
name,
status,
company_id,
standard,
group_name,
test_value,
group_id,
tester,
tester_id,
test_time
FROM
entrust_sample_item
WHERE
......
......@@ -124,4 +124,229 @@
</select>
<!--原铝品味统计查询-->
<select id="selectAlTasteStats" resultType="com.patzn.cloud.service.hmhj.vo.AlTasteStatsVO">
with ix as (
SELECT
i.company_id,
i.entrust_sample_id,
(case when sum(to_number(ii.test_value,'9999.99')) &lt;= 1.5 then 1 else 0 end) "al_85_num",
(case when sum(to_number(ii.test_value,'9999.99')) &gt; 1.5 and sum(to_number(ii.test_value,'9999.99')) &lt;= 3 then 1 else 0 end) "al_70_num",
sum(case when ii."name" = 'Fe%' and to_number(ii.test_value,'9999.99') &lt;= 0.1 then 1 else 0 end) "fe_10_num",
sum(case when ii."name" = 'Fe%' and to_number(ii.test_value,'9999.99') &lt;= 0.08 then 1 else 0 end) "fe_08_num"
FROM
entrust_sample_item i,
entrust_sample_item_index ii
WHERE
i.ID = ii.entrust_sample_item_id
AND i.deleted = 0
AND ii.deleted = 0
and ii.test_value is not null
GROUP BY i.company_id,i.entrust_sample_id
)
SELECT
e.model "branch",
e.plant,
COUNT ( 1 ) "total",
( CASE WHEN COUNT ( 1 ) / ${vo.days} > 1 THEN ( COUNT ( 1 ) / ${vo.days} / 2 ) ELSE 1 END ) "slots_num",
sum(ix.al_85_num) "al_85_num",
round(coalesce(sum(ix.al_85_num),0) / COUNT ( 1 ),4) "al_85_per",
round(coalesce(sum(ix.al_85_num),0) / ${vo.days} / 2) "al_85_slots_num",
sum(ix.al_70_num) "al_70_num",
round(coalesce(sum(ix.al_70_num),0) / COUNT ( 1 ),4) "al_70_per",
round(coalesce(sum(ix.al_70_num),0) / ${vo.days} / 2) "al_70_slots_num",
sum(ix.fe_10_num) "fe_10_num",
round(coalesce(sum(ix.fe_10_num),0) / COUNT ( 1 ),4) "fe_10_per",
round(coalesce(sum(ix.fe_10_num),0) / ${vo.days} / 2) "fe_10_slots_num",
sum(ix.fe_08_num) "fe_08_num",
round(coalesce(sum(ix.fe_08_num),0) / COUNT ( 1 ),4) "fe_08_per",
round(coalesce(sum(ix.fe_08_num),0) / ${vo.days} / 2) "fe_08_slots_num"
FROM
entrust_sample s
JOIN electrolyzer e ON s.electrolyzer_id = e.ID
LEFT JOIN ix ix ON ix.entrust_sample_id = s.id
WHERE
s.deleted = 0 and e.deleted = 0 and s.name = '原铝'
<if test="null != vo.timeS and null != vo.timeE">
AND EXISTS (
select 1 from entrust_sample_item si where si.deleted = 0 and si.entrust_sample_id = s.id
and to_char(si.test_time, 'YYYY-MM-dd HH24:MI:SS') BETWEEN #{vo.timeS} AND #{vo.timeE}
)
</if>
GROUP BY e.model, e.plant
</select>
<!--电解质分子比统计查询-->
<select id="selectElectrolyteRatioStats" resultType="com.patzn.cloud.service.hmhj.vo.ElectrolyteRatioStatsVO">
with ix as (
SELECT
i.company_id,
i.entrust_sample_id,
sum(case when ii.name = '电解质-MgF2' then 1 else 0 end) "mgf_num",
sum(case when ii.name = '电解质-MgF2' then to_number(ii.test_value,'9999.99') else 0.00 end) "mgf_val",
sum(case when ii.name = '电解质-氧化铝' then 1 else 0 end) "alo_num",
sum(case when ii.name = '电解质-氧化铝' then to_number(ii.test_value,'9999.99') else 0.00 end) "alo_val",
sum(case when ii.name = '电解质-氟化钙' then 1 else 0 end) "caf_num",
sum(case when ii.name = '电解质-氟化钙' then to_number(ii.test_value,'9999.99') else 0.00 end) "caf_val",
sum(case when ii.name = '电解质-分子比' then 1 else 0 end) "fzb_num",
sum(case when ii.name = '电解质-分子比' then to_number(ii.test_value,'9999.99') else 0.00 end) "fzb_val",
sum(case when ii.name = '电解质-分子比' and to_number(ii.test_value,'9999.99') &lt;= 2.15 then 1 else 0 end) "lt216_num",
sum(case when ii.name = '电解质-分子比' and
to_number(ii.test_value,'9999.99') &gt; 2.15 and to_number(ii.test_value,'9999.99') &lt;= 2.20
then 1 else 0 end
) "gt215_lte220_num",
sum(case when ii.name = '电解质-分子比' and
to_number(ii.test_value,'9999.99') &gt; 2.20 and to_number(ii.test_value,'9999.99') &lt;= 2.25
then 1 else 0 end
) "gt220_lte225_num",
sum(case when ii.name = '电解质-分子比' and
to_number(ii.test_value,'999.99') &gt; 2.25 and to_number(ii.test_value,'9999.99') &lt;= 2.30
then 1 else 0 end
) "gt225_lte230_num",
sum(case when ii.name = '电解质-分子比' and
to_number(ii.test_value,'999.99') &gt; 2.30 and to_number(ii.test_value,'9999.99') &lt;= 2.35
then 1 else 0 end
) "gt230_lte235_num",
sum(case when ii.name = '电解质-分子比' and
to_number(ii.test_value,'999.99') &gt; 2.35 and to_number(ii.test_value,'9999.99') &lt;= 2.40
then 1 else 0 end
) "gt235_lte240_num",
sum(case when ii.name = '电解质-分子比' and to_number(ii.test_value,'999.99') &gt; 2.40 then 1 else 0 end ) "gt240_num"
FROM
entrust_sample_item i,
entrust_sample_item_index ii
WHERE
i.ID = ii.entrust_sample_item_id
and ii.name like '%电解质-%'
AND i.deleted = 0
AND ii.deleted = 0
and ii.test_value is not null
GROUP BY i.company_id,i.entrust_sample_id
)
SELECT
e.model "branch", count(1) "total",
coalesce(round(sum(ix.mgf_val) / sum(ix.mgf_num)),0) "mgf_avg_num",
coalesce(round(sum(ix.alo_val) / sum(ix.alo_num)),0) "alo_avg_num",
coalesce(round(sum(ix.caf_val) / sum(ix.caf_num)),0) "caf_avg_num",
coalesce(round(sum(ix.fzb_val) / sum(ix.fzb_num)),0) "fzb_avg_num",
coalesce(sum(ix.lt216_num),0) "lt216_num",
coalesce(sum(ix.gt215_lte220_num),0) "gt215_lte220_num",
coalesce(sum(ix.gt220_lte225_num),0) "gt220_lte225_num",
coalesce(sum(ix.gt225_lte230_num),0) "gt225_lte230_num",
coalesce(sum(ix.gt230_lte235_num),0) "gt230_lte235_num",
coalesce(sum(ix.gt235_lte240_num),0) "gt235_lte240_num",
coalesce(sum(ix.gt240_num),0) "gt240_num",
coalesce(round(sum(ix.lt216_num) / count(1),2),0.00) "lt216_per",
coalesce(round(sum(ix.gt215_lte220_num) / count(1),2),0.00) "gt215_lte220_per",
coalesce(round(sum(ix.gt220_lte225_num) / count(1),2),0.00) "gt220_lte225_per",
coalesce(round(sum(ix.gt225_lte230_num) / count(1),2),0.00) "gt225_lte230_per",
coalesce(round(sum(ix.gt230_lte235_num) / count(1),2),0.00) "gt230_lte235_per",
coalesce(round(sum(ix.gt235_lte240_num) / count(1),2),0.00) "gt235_lte240_per",
coalesce(round(sum(ix.gt240_num) / count(1),2),0.00) "gt240_per"
FROM
entrust_sample s
JOIN electrolyzer e ON s.electrolyzer_id = e.ID
LEFT JOIN ix ix ON ix.entrust_sample_id = s.id
WHERE
s.deleted = 0 and e.deleted = 0
and s.name = '电解质'
<if test="null != vo.timeS and null != vo.timeE">
AND EXISTS (
select 1 from entrust_sample_item si where si.deleted = 0 and si.entrust_sample_id = s.id
and to_char(si.test_time, 'YYYY-MM-dd HH24:MI:SS') BETWEEN #{vo.timeS} AND #{vo.timeE}
)
</if>
GROUP BY e.model
</select>
<!--磷生铁统计查询-->
<select id="selectPMakeFeStats" resultType="com.patzn.cloud.service.hmhj.vo.PMakeFeStatsVO">
with pi as (
SELECT
PI.*,
(CASE WHEN PI.C_VAL &gt;= 2.50 AND PI.C_VAL &lt;= 3.10 THEN 1 ELSE 0 END) "c_in_num",
(CASE WHEN PI.C_VAL &gt;= 2.00 AND PI.C_VAL &lt;= 3.00 THEN 1 ELSE 0 END) "si_in_num",
(CASE WHEN PI.C_VAL &gt;= 0.60 AND PI.C_VAL &lt;= 0.90 THEN 1 ELSE 0 END) "mn_in_num",
(CASE WHEN PI.C_VAL &gt;= 0.80 AND PI.C_VAL &lt;= 1.40 THEN 1 ELSE 0 END) "p_in_num",
(CASE WHEN PI.C_VAL &gt; 0.15 THEN 1 ELSE 0 END) "s_in_num",
(CASE WHEN PI.C_VAL &lt; 2.50 THEN 1 ELSE 0 END) "c_lt_num",
(CASE WHEN PI.C_VAL &lt; 2.00 THEN 1 ELSE 0 END) "si_lt_num",
(CASE WHEN PI.C_VAL &lt; 0.60 THEN 1 ELSE 0 END) "mn_lt_num",
(CASE WHEN PI.C_VAL &lt; 0.80 THEN 1 ELSE 0 END) "p_lt_num",
(CASE WHEN PI.C_VAL &gt; 3.10 THEN 1 ELSE 0 END) "c_gt_num",
(CASE WHEN PI.C_VAL &gt; 3.00 THEN 1 ELSE 0 END) "si_gt_num",
(CASE WHEN PI.C_VAL &gt; 0.90 THEN 1 ELSE 0 END) "mn_gt_num",
(CASE WHEN PI.C_VAL &gt; 1.40 THEN 1 ELSE 0 END) "p_gt_num",
(CASE WHEN PI.C_VAL &gt;= 0.15 THEN 1 ELSE 0 END) "s_gt_num"
FROM (
SELECT
i.company_id,
u.period,
i.entrust_sample_id,
round(sum(case when ii.name = '磷生铁-C' then to_number(ii.test_value,'9999.99') else 0.00 end) / func_if_int(sum(case when ii.name = '磷生铁-C' then 1 else 0 end) = 0,1,sum(case when ii.name = '磷生铁-C' then 1 else 0 end)),2) "c_val",
round(sum(case when ii.name = '磷生铁-Si' then to_number(ii.test_value,'9999.99') else 0.00 end) / func_if_int(sum(case when ii.name = '磷生铁-Si' then 1 else 0 end) = 0,1,sum(case when ii.name = '磷生铁-C' then 1 else 0 end)),2) "si_val",
round(sum(case when ii.name = '磷生铁-Mn' then to_number(ii.test_value,'9999.99') else 0.00 end) / func_if_int(sum(case when ii.name = '磷生铁-Mn' then 1 else 0 end) = 0,1,sum(case when ii.name = '磷生铁-Mn' then 1 else 0 end)),2) "mn_val",
round(sum(case when ii.name = '磷生铁-P' then to_number(ii.test_value,'9999.99') else 0.00 end) / func_if_int(sum(case when ii.name = '磷生铁-P' then 1 else 0 end) = 0,1,sum(case when ii.name = '磷生铁-P' then 1 else 0 end)),2) "p_val",
round(sum(case when ii.name = '磷生铁-S' then to_number(ii.test_value,'9999.99') else 0.00 end) / func_if_int(sum(case when ii.name = '磷生铁-S' then 1 else 0 end) = 0,1,sum(case when ii.name = '磷生铁-S' then 1 else 0 end)),2) "s_val"
FROM
entrust_sample_item i,
entrust_sample_item_index ii,
dblink ('pc_base', 'select * from v_user_period') as u ( user_id int8, period VARCHAR)
WHERE
i.ID = ii.entrust_sample_item_id
AND I.TESTER_ID = u.USER_ID
-- and ii.name like '%磷生铁-%'
AND i.deleted = 0
AND ii.deleted = 0
AND ii.test_value is not null
<if test="null != vo.timeS and null != vo.timeE">
and to_char(i.test_time, 'YYYY-MM-dd HH24:MI:SS') BETWEEN #{vo.timeS} AND #{vo.timeE}
</if>
GROUP BY i.company_id,u.period,i.entrust_sample_id
) PI
)
select
round(sum(pi.c_val) / count(1),2) "c_val",
round(sum(pi.si_val) / count(1),2) "si_val",
round(sum(pi.mn_val) / count(1),2) "mn_val",
round(sum(pi.p_val) / count(1),2) "p_val",
round(sum(pi.s_val) / count(1),2) "s_val",
round(sum(pi.c_in_num) / count(1),2) "c_per",
round(sum(pi.si_in_num) / count(1),2) "si_per",
round(sum(pi.mn_in_num) / count(1),2) "mn_per",
round(sum(pi.p_in_num) / count(1),2) "p_per",
round(sum(pi.s_in_num) / count(1),2) "s_per",
sum(pi.c_lt_num) "c_lt_num",
sum(pi.si_lt_num) "si_lt_num",
sum(pi.mn_lt_num) "mn_lt_num",
sum(pi.p_lt_num) "p_lt_num",
sum(pi.c_in_num) "c_in_num",
sum(pi.si_in_num) "si_in_num",
sum(pi.mn_in_num) "mn_in_num",
sum(pi.p_in_num) "p_in_num",
sum(pi.s_in_num) "s_in_num",
sum(pi.c_gt_num) "c_gt_num",
sum(pi.si_gt_num) "si_gt_num",
sum(pi.mn_gt_num) "mn_gt_num",
sum(pi.p_gt_num) "p_gt_num",
sum(pi.s_gt_num) "s_gt_num"
from entrust_sample s
join pi pi on pi.entrust_sample_id = s.id
where s.deleted = 0
group by pi.period
</select>
</mapper>
-- 新增视图-用户所属第几期
-- 新增视图-用户所属第几期
create or replace view v_user_period
as
SELECT rel.user_id,
CASE
WHEN sum(strpos(r.name::text, '三期'::text)) > 0 THEN '三期'::text
ELSE '二期'::text
END AS period
FROM sys_user_rel_role rel
JOIN sys_role r ON r.id = rel.role_id
WHERE r.status = 1
GROUP BY rel.user_id
\ No newline at end of file
-- 开启dblink拓展
-- 开启dblink拓展
--执行:create extension dblink;
create extension dblink;
-- 创建数据库链接
SELECT dblink_connect('dev_base', 'host=localhost dbname=dev_base user=postgres password=post123');
SELECT dblink_connect('dev_lims', 'host=localhost dbname=dev_lims user=postgres password=post123');
SELECT dblink_connect('pc_base', 'host=localhost dbname=pc_base user=hjhmdb password=hm57hj6');
SELECT dblink_connect('pc_lims', 'host=localhost dbname=pc_lims user=hjhmdb password=hm57hj6');
-------------------------------------------------------------------------------------------------
-- 创建字符,数字处理函数
CREATE OR REPLACE FUNCTION "public"."func_decode"(VARIADIC "p_decode_list" _text)
RETURNS "pg_catalog"."text" AS $BODY$
declare
-- 获取数组长度(即入参个数)
v_len integer := array_length(p_decode_list, 1);
-- 声明存放返回值的变量
v_ret text;
begin
/*
* 功能说明:模拟Oracle中的DECODE功能(字符串处理, 其它格式可以自行转换返回值)
* 参数说明:格式同Oracle相同,至少三个参数
* 实现原理: 1、VARIADIC 允许变参; 2、Oracle中的DECODE是拿第一个数依次和之后的偶数位值进行比较,相同则取偶数位+1的数值,否则取最后一位值(最后一位为偶数为,否则为null)
*/
-- 同Oracle相同当参数不足三个抛出异常
if v_len >= 3 then
-- Oracle中的DECODE是拿第一个数依次和之后的偶数位值进行比较,相同则取偶数位+1的数值
for i in 2..(v_len - 1) loop
v_ret := null;
if mod(i, 2) = 0 then
if p_decode_list[1] = p_decode_list[i] then
v_ret := p_decode_list[i+1];
elsif p_decode_list[1] <> p_decode_list[i] then
if v_len = i + 2 and v_len > 3 then
v_ret := p_decode_list[v_len];
end if;
end if;
end if;
exit when v_ret is not null;
end loop;
else
raise exception 'UPG-00938: not enough args for function.';
end if;
return v_ret;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION "public"."func_if"("p_condition" bool, "p_fist_val" text, "p_last_val" text)
RETURNS "pg_catalog"."text" AS $BODY$
declare
v_ret_val text;
begin
/*
* 功能说明:模拟三元表达式 ( condition ? value1 : value2 );
* 参数说明:p_condition 接收 boolean类型的表达式 如: 1 = 1, 2 > 1 等; 后两个值是根据p_condition的真假对应的返回值
* 实现原理: p_condition 为真则返回p_fist_val, 否则返回P_last_val
*/
v_ret_val := null;
if true = p_condition then
v_ret_val := p_fist_val;
elsif false = p_condition then
v_ret_val := P_last_val;
end if;
return v_ret_val;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
--------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION "public"."func_if_int"("p_condition" bool, "p_fist_val" int8, "p_last_val" int8)
RETURNS "pg_catalog"."int8" AS $BODY$
declare
v_ret_val int8;
begin
/*
* 功能说明:模拟三元表达式 ( condition ? value1 : value2 );
* 参数说明:p_condition 接收 boolean类型的表达式 如: 1 = 1, 2 > 1 等; 后两个值是根据p_condition的真假对应的返回值
* 实现原理: p_condition 为真则返回p_fist_val, 否则返回P_last_val
*/
v_ret_val := null;
if true = p_condition then
v_ret_val := p_fist_val;
elsif false = p_condition then
v_ret_val := P_last_val;
end if;
return v_ret_val;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
----------------------------------------------------------------------------------
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