Commit c465c0f9 by lijingjing

优化霍煤响应速度;

parent ca681a49
...@@ -17,4 +17,6 @@ public interface IGradingItemService extends IBaseService<GradingItem> { ...@@ -17,4 +17,6 @@ public interface IGradingItemService extends IBaseService<GradingItem> {
Page<GradingItem> page(Page<GradingItem> page, GradingItem gradingItem); Page<GradingItem> page(Page<GradingItem> page, GradingItem gradingItem);
boolean removeByIds(List<Long> ids); boolean removeByIds(List<Long> ids);
List<GradingItem> listByProductIds(List<Long> productIds);
} }
...@@ -17,4 +17,6 @@ public interface IGradingProductService extends IBaseService<GradingProduct> { ...@@ -17,4 +17,6 @@ public interface IGradingProductService extends IBaseService<GradingProduct> {
Page<GradingProduct> page(Page<GradingProduct> page, GradingProduct gradingProduct); Page<GradingProduct> page(Page<GradingProduct> page, GradingProduct gradingProduct);
boolean removeByIds(List<Long> ids); boolean removeByIds(List<Long> ids);
List<GradingProduct> listByStandardIds(List<Long> standardIds);
} }
...@@ -25,4 +25,6 @@ public interface IGradingStandardService extends IBaseService<GradingStandard> { ...@@ -25,4 +25,6 @@ public interface IGradingStandardService extends IBaseService<GradingStandard> {
boolean abolish(Long[] ids, String reason, Account account); boolean abolish(Long[] ids, String reason, Account account);
boolean editGradingStandard(GradingStandardDTO dto, Account account); boolean editGradingStandard(GradingStandardDTO dto, Account account);
List<GradingStandard> listByIds(List<Long> ids);
} }
...@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.plugins.Page; ...@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.CollectionUtils; import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.toolkit.IOUtils; import com.baomidou.mybatisplus.toolkit.IOUtils;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.patzn.cloud.commons.api.RestAssert; import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.cloud.commons.controller.Account; import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.controller.LoginHelper; import com.patzn.cloud.commons.controller.LoginHelper;
...@@ -64,6 +65,7 @@ import java.util.*; ...@@ -64,6 +65,7 @@ import java.util.*;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static java.util.stream.Collectors.toSet; import static java.util.stream.Collectors.toSet;
...@@ -87,9 +89,6 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -87,9 +89,6 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
private IEntrustRecordService entrustRecordService; private IEntrustRecordService entrustRecordService;
@Autowired @Autowired
private IEntrustSampleItemService entrustSampleItemService;
@Autowired
private IEntrustSampleItemIndexService entrustSampleItemIndexService; private IEntrustSampleItemIndexService entrustSampleItemIndexService;
@Autowired @Autowired
...@@ -187,7 +186,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -187,7 +186,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
RestAssert.fail(entrustSampleItemList.stream().anyMatch(t -> null == t.getId()), "要修改检测值的编号为空"); RestAssert.fail(entrustSampleItemList.stream().anyMatch(t -> null == t.getId()), "要修改检测值的编号为空");
updateBatchById(entrustSampleItemList); updateBatchById(entrustSampleItemList);
EntrustSampleItem sampleItem = entrustSampleItemList.get(0); EntrustSampleItem sampleItem = entrustSampleItemList.get(0);
entrustSampleItemList = entrustSampleItemService.list(Condition.create().eq("entrust_sample_id", sampleItem.getEntrustSampleId())); entrustSampleItemList = list(Condition.create().eq("entrust_sample_id", sampleItem.getEntrustSampleId()));
// //
EntrustSample entrustSample = entrustSampleService.getById(sampleItem.getEntrustSampleId()); EntrustSample entrustSample = entrustSampleService.getById(sampleItem.getEntrustSampleId());
if (null != entrustSample && null != entrustSample.getContractSampleId()) { if (null != entrustSample && null != entrustSample.getContractSampleId()) {
...@@ -383,7 +382,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -383,7 +382,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
if (entrustService.isCanIntoNextNode(entrust)) { if (entrustService.isCanIntoNextNode(entrust)) {
entrustService.submitToNextNode(entrust, account); entrustService.submitToNextNode(entrust, account);
// 提交后执行组合判定 // 提交后执行组合判定
entrustSampleItemService.updateItemComposeJudgeByEntrustId(entrustId); updateItemComposeJudgeByEntrustId(entrustId);
updateComposeJudgeByTestValue(entrustId); updateComposeJudgeByTestValue(entrustId);
// 执行转PDF操作 // 执行转PDF操作
executor1.execute(() -> changeExcelToPdf(ids, list)); executor1.execute(() -> changeExcelToPdf(ids, list));
...@@ -396,7 +395,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -396,7 +395,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
entrustService.updateById(entrust); entrustService.updateById(entrust);
// 提交后执行组合判定 // 提交后执行组合判定
entrustSampleItemService.updateItemComposeJudgeByEntrustId(entrustId); updateItemComposeJudgeByEntrustId(entrustId);
updateComposeJudgeByTestValue(entrustId); updateComposeJudgeByTestValue(entrustId);
// 添加委托日志 // 添加委托日志
...@@ -1146,7 +1145,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -1146,7 +1145,7 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean updateQualityJudge(Long[] ids, Account account) { public boolean updateQualityJudge(Long[] ids, Account account) {
long time1 = System.currentTimeMillis();
logger.error("======================质量判定开始========================"); logger.error("======================质量判定开始========================");
RestAssert.fail(ArrayUtils.isEmpty(ids), "样品编号不能为空"); RestAssert.fail(ArrayUtils.isEmpty(ids), "样品编号不能为空");
...@@ -1163,13 +1162,61 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -1163,13 +1162,61 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
sampleList.addAll(batchSampleList); sampleList.addAll(batchSampleList);
} }
// 是否外委数据
boolean isOutEntrustData = contractSampleService.isOutEntrustData(sampleList.get(0).getContractSampleId());
logger.error("是否外委数据:" + isOutEntrustData);
// 样品ids || 样品对应的标准ids
List<Long> sampleIds = new ArrayList<>(), standardIds = new ArrayList<>();
sampleList.forEach(s -> {
if (!sampleIds.contains(s.getId())) {
sampleIds.add(s.getId());
}
if (!standardIds.contains(s.getProductStandardId())) {
standardIds.add(s.getProductStandardId());
}
});
// === 查询检测项目指标信息
// 检测值【内部检测值实际为指标表中数据,外委检测值为检测项目数据】
List<EntrustSampleItemVO> allSampleItemList;
// 若为外部检测
if (isOutEntrustData) {
allSampleItemList = getListBySampleIds(sampleIds);
} else {
// 获取检测项目及指标数据
allSampleItemList = getSampleItemIndexList(sampleIds);
}
// === 查询所有样品标准信息
List<GradingStandard> standardList = gradingStandardService.listByIds(standardIds);
// key ==> value 直接获取
Map<Long, GradingStandard> standardMap = standardList.stream().collect(Collectors.toMap(GradingStandard::getId, Function.identity()));
// === 查询对应产品等级信息
List<GradingProduct> productList = gradingProductService.listByStandardIds(standardIds);
// == 以key ===> value 形式处理
Map<Long, List<GradingProduct>> productMap = Maps.newHashMapWithExpectedSize(standardIds.size());
Optional.ofNullable(productList).orElse(new ArrayList<>()).forEach(p -> {
MapMergeUtils.getorCreateMapArrayList(p.getGradingStandardId(), productMap, p);
});
List<Long> productIds = Optional.ofNullable(productList).orElse(new ArrayList<>()).stream().map(GradingProduct::getId).collect(Collectors.toList());
// === 查询产品等级下的检测项目
List<GradingItem> itemList = gradingItemService.listByProductIds(productIds);
// == 以key ===> value 形式处理
Map<Long, List<GradingItem>> itemMap = Maps.newHashMapWithExpectedSize(productIds.size());
Optional.ofNullable(itemList).orElse(new ArrayList<>()).forEach(item -> {
MapMergeUtils.getorCreateMapArrayList(item.getGradingProductId(), itemMap, item);
});
long time2 = (System.currentTimeMillis() - time1) / 1000;
System.out.println("time2:::::::" + time2);
//其他稀有元素 //其他稀有元素
List<String> otherYsList = Arrays.asList("Mn", "V", "Ni"); List<String> otherYsList = Arrays.asList("Mn", "V", "Ni");
List<EntrustSample> updateSampleList = new ArrayList<>(); List<EntrustSample> updateSampleList = new ArrayList<>();
// 是否外委数据
boolean isOutEntrustData = contractSampleService.isOutEntrustData(sampleList.get(0).getContractSampleId());
logger.error("是否外委数据:" + isOutEntrustData);
// 样品标识:对于样品下存在特殊字符的检测值,整个样品不再做判级 // 样品标识:对于样品下存在特殊字符的检测值,整个样品不再做判级
sampleFlag: sampleFlag:
...@@ -1180,25 +1227,20 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -1180,25 +1227,20 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
boolean isSpecStandard = sampleVO.getProductCode().contains("GB/T 1196 2017"); boolean isSpecStandard = sampleVO.getProductCode().contains("GB/T 1196 2017");
logger.error("====是否GB/T 1196 2017标准:" + isSpecStandard); logger.error("====是否GB/T 1196 2017标准:" + isSpecStandard);
// 检测值【内部检测值实际为指标表中数据,外委检测值为检测项目数据】 // 检测值【内部检测值实际为指标表中数据,外委检测值为检测项目数据】
List<EntrustSampleItemVO> sampleItemList; // 从总集合中过滤出
// 若为外部检测 List<EntrustSampleItemVO> sampleItemList = allSampleItemList.stream()
if (isOutEntrustData) { .filter(t -> Objects.equals(t.getEntrustSampleId(), sample.getId())).collect(Collectors.toList());
sampleItemList = entrustSampleItemService.getListBySampleId(sampleVO.getId());
} else {
// 获取检测项目及指标数据
sampleItemList = getSampleItemIndexList(sampleVO.getId());
}
RestAssert.fail(CollectionUtils.isEmpty(sampleItemList), "样品检测项目及内容不能为空"); RestAssert.fail(CollectionUtils.isEmpty(sampleItemList), "样品检测项目及内容不能为空");
StringBuffer sb = new StringBuffer("====检测项目检测值:\r\n"); StringBuffer sb = new StringBuffer("====检测项目检测值:\r\n");
for (EntrustSampleItemVO item : sampleItemList) { // for (EntrustSampleItemVO item : sampleItemList) {
sb.append(String.format("itemName=%s,testValue=%s\r\n", item.getName(), item.getTestValue())); // sb.append(String.format("itemName=%s,testValue=%s\r\n", item.getName(), item.getTestValue()));
} // }
logger.error(sb.toString()); // logger.error(sb.toString());
// 获得产品标准信息 -- 实时最新不是根据样品中的是否组合判定进行判定 // 获得产品标准信息 -- 实时最新不是根据样品中的是否组合判定进行判定
// 可能需要根据样品中的字段进行判断是否需要组合判定composeJudge // 可能需要根据样品中的字段进行判断是否需要组合判定composeJudge
GradingStandard standard = gradingStandardService.getById(sampleVO.getProductStandardId()); GradingStandard standard = standardMap.get(sample.getProductStandardId());
RestAssert.fail(null == standard, "产品标准不能为空"); RestAssert.fail(null == standard, "产品标准不能为空");
logger.error("====检验标准,名称:{},编号:{},组合标识:{}", standard.getName(), standard.getCode(), standard.getComposeJudge()); logger.error("====检验标准,名称:{},编号:{},组合标识:{}", standard.getName(), standard.getCode(), standard.getComposeJudge());
// 是否组合判定 // 是否组合判定
...@@ -1234,24 +1276,6 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -1234,24 +1276,6 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
} }
} }
// 计算合计-组合判定合计值
/*totalDecimal = sampleItemList.stream().map(t -> {
if (StringUtils.isBlank(t.getTestValue())) {
return BigDecimal.ZERO;
}
String testValue = t.getTestValue().trim();
int composeJudge = null == t.getComposeJudge() ? 0 : t.getComposeJudge().intValue();
// 符合此条件,需要判断是否此标准且为稀有元素且值小于0.01即可忽略为0
RestAssert.fail(!isNumber(testValue), String.format("样品编号【%s】存在错误检测值【%s】", sample.getCode(), testValue));
// 判定包含稀有元素
boolean incSpecElement = otherYsList.stream().anyMatch(x -> t.getName().contains(x));
if (1 == composeJudge || (isSpecStandard && incSpecElement && Double.parseDouble(testValue) >= 0.01)) {
return new BigDecimal(testValue);
}
return BigDecimal.ZERO;
}).reduce(BigDecimal.ZERO, BigDecimal::add);
*/
logger.error("====杂质值:{}", totalDecimal); logger.error("====杂质值:{}", totalDecimal);
// 杂质合计值修约 // 杂质合计值修约
double totalValue = totalDecimal.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); double totalValue = totalDecimal.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
...@@ -1270,25 +1294,22 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -1270,25 +1294,22 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
return true; return true;
}).collect(Collectors.toMap(EntrustSampleItemVO::getName, t -> Double.parseDouble(t.getTestValue()))); }).collect(Collectors.toMap(EntrustSampleItemVO::getName, t -> Double.parseDouble(t.getTestValue())));
sb = new StringBuffer("====实际比较的检测项目:\r\n"); // sb = new StringBuffer("====实际比较的检测项目:\r\n");
for (Map.Entry<String, Double> entry : itemDataMap.entrySet()) { // for (Map.Entry<String, Double> entry : itemDataMap.entrySet()) {
sb.append(String.format("检测项目,name:%s,testValue:%f", entry.getKey(), entry.getValue())).append("\r\n"); // sb.append(String.format("检测项目,name:%s,testValue:%f", entry.getKey(), entry.getValue())).append("\r\n");
} // }
//
logger.error(sb.toString()); // logger.error(sb.toString());
// 获得产品等级信息 // 获得产品等级信息
List<GradingProduct> gradingProductList = gradingProductService.list(Condition.create() List<GradingProduct> gradingProductList = productMap.get(standard.getId());
.eq("grading_standard_id", standard.getId())
// 依旧优先级来处理判定顺序
.orderBy("judge_priority", true));
RestAssert.fail(CollectionUtils.isEmpty(gradingProductList), "产品标准不能为空"); RestAssert.fail(CollectionUtils.isEmpty(gradingProductList), "产品标准不能为空");
sb = new StringBuffer("====产品标准:\r\n"); // sb = new StringBuffer("====产品标准:\r\n");
for (GradingProduct gp : gradingProductList) { // for (GradingProduct gp : gradingProductList) {
sb.append(String.format("grade:%s,sumVal:%f,symbol:%s", gp.getProductGrade(), gp.getSumValue(), gp.getSumCompare())).append("\r\n"); // sb.append(String.format("grade:%s,sumVal:%f,symbol:%s", gp.getProductGrade(), gp.getSumValue(), gp.getSumCompare())).append("\r\n");
} // }
logger.error(sb.toString()); // logger.error(sb.toString());
logger.error("==== 循环产品等级 ==== "); logger.error("==== 循环产品等级 ==== ");
// 循环产品标准依次判定级别 // 循环产品标准依次判定级别
...@@ -1301,7 +1322,9 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -1301,7 +1322,9 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
logger.error("==== GradingProduct, grade:{},sumVal:{},symbol:{}", product.getProductGrade(), product.getSumValue(), product.getSumCompare()); logger.error("==== GradingProduct, grade:{},sumVal:{},symbol:{}", product.getProductGrade(), product.getSumValue(), product.getSumCompare());
// 比较单个大小是否都符合 // 比较单个大小是否都符合
List<GradingItem> gradingItemList = gradingItemService.list(Condition.create().eq("grading_product_id", product.getId()).isNotNull("limit_value")); List<GradingItem> gradingItemList = itemMap.get(product.getId());
// gradingItemList.stream().filter(g -> Objects.equals(g.getGradingProductId(), product.getId())).collect(Collectors.toList());
RestAssert.fail(CollectionUtils.isEmpty(gradingItemList), "产品等级【" + product.getProductGrade() + "】下的检测项目为空"); RestAssert.fail(CollectionUtils.isEmpty(gradingItemList), "产品等级【" + product.getProductGrade() + "】下的检测项目为空");
sb = new StringBuffer("====过滤前产品下检测项目:\r\n"); sb = new StringBuffer("====过滤前产品下检测项目:\r\n");
...@@ -1412,26 +1435,25 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -1412,26 +1435,25 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
sampleBrandMap = updateSampleList.stream().collect(Collectors.toMap(EntrustSample::getId, EntrustSample::getSampleGrading)); sampleBrandMap = updateSampleList.stream().collect(Collectors.toMap(EntrustSample::getId, EntrustSample::getSampleGrading));
entrustSampleService.updateBatchById(updateSampleList); entrustSampleService.updateBatchById(updateSampleList);
logger.error("====更新样品判级:]\r\n"); logger.error("====更新样品判级:]\r\n");
for (EntrustSample s : updateSampleList) { // for (EntrustSample s : updateSampleList) {
logger.error("====判定合格品级:sampleId:{},sampleName:{},sampleCode:{},grading:{}", s.getId(), s.getName(), s.getCode(), s.getSampleGrading()); // logger.error("====判定合格品级:sampleId:{},sampleName:{},sampleCode:{},grading:{}", s.getId(), s.getName(), s.getCode(), s.getSampleGrading());
} // }
} }
Map<Long, String> finalSampleBrandMap = sampleBrandMap; Map<Long, String> finalSampleBrandMap = sampleBrandMap;
executor1.execute(() -> { // executor1.execute(() -> {
// 处理正常的报告文件 // // 处理正常的报告文件
handleSampleBrand(ids, finalSampleBrandMap, false); // handleSampleBrand(ids, finalSampleBrandMap, false);
// 处理一级编码的报告文件 // // 处理一级编码的报告文件
handleSampleBrand(ids, finalSampleBrandMap, true); // handleSampleBrand(ids, finalSampleBrandMap, true);
}); // });
executor1.execute(() -> { // executor1.execute(() -> {
// 针对铝成品和原铝进行发送ERP数据处理 // // 针对铝成品和原铝进行发送ERP数据处理
logger.error("{}开始执行发送ERP请求:---->ERP---", DateUtils.toYearMonthDayTime(new Date())); // logger.error("{}开始执行发送ERP请求:---->ERP---", DateUtils.toYearMonthDayTime(new Date()));
sendTestDataToErp(Arrays.asList(ids), finalSampleBrandMap); // sendTestDataToErp(Arrays.asList(ids), finalSampleBrandMap);
}); // });
logger.error("======================质量判定结束========================"); logger.error("======================质量判定结束========================");
return true; return true;
} }
...@@ -2112,18 +2134,19 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI ...@@ -2112,18 +2134,19 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
Map<String, String> sampleMap = null; Map<String, String> sampleMap = null;
// 根据是否一级编码确定使用得objectKey // 根据是否一级编码确定使用得objectKey
if (finalIsOther) { if (finalIsOther) {
sampleMap = reportSampleList.stream().filter(t -> t.getOtherObjectKey().equals(objectKey)) sampleMap = reportSampleList.stream().filter(t -> Objects.equals(t.getOtherObjectKey(), objectKey))
.collect(Collectors.toMap(ReportSampleVO::getFirstCode, ReportSampleVO::getSampleGrading)); .collect(Collectors.toMap(ReportSampleVO::getFirstCode, ReportSampleVO::getSampleGrading));
} else { } else {
sampleMap = reportSampleList.stream().filter(t -> Objects.equals(objectKey, t.getObjectKey())) sampleMap = reportSampleList.stream().filter(t -> Objects.equals(objectKey, t.getObjectKey()))
.collect(Collectors.toMap(t -> { .collect(Collectors.toMap(t -> {
if (StringUtils.isNotBlank(t.getThirdCode())) { if (StringUtils.isNotBlank(t.getThirdCode())) {
return t.getThirdCode(); return t.getThirdCode();
} else if (StringUtils.isNotBlank(t.getSecondCode())) { } else if (StringUtils.isNotBlank(t.getSecondCode())) {
return t.getSecondCode(); return t.getSecondCode();
} }
return t.getFirstCode(); return t.getFirstCode();
}, ReportSampleVO::getSampleGrading)); }, ReportSampleVO::getSampleGrading)
);
} }
if (StringUtils.isBlank(objectKey)) { if (StringUtils.isBlank(objectKey)) {
......
...@@ -16,6 +16,7 @@ import com.patzn.cloud.commons.exception.PatznException; ...@@ -16,6 +16,7 @@ import com.patzn.cloud.commons.exception.PatznException;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl; import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.commons.toolkit.DateUtils; import com.patzn.cloud.commons.toolkit.DateUtils;
import com.patzn.cloud.commons.toolkit.FileUtils; import com.patzn.cloud.commons.toolkit.FileUtils;
import com.patzn.cloud.commons.toolkit.MapMergeUtils;
import com.patzn.cloud.feign.base.client.SysFileTemplateClient; import com.patzn.cloud.feign.base.client.SysFileTemplateClient;
import com.patzn.cloud.oss.starter.OssClient; import com.patzn.cloud.oss.starter.OssClient;
import com.patzn.cloud.service.hmhj.dto.*; import com.patzn.cloud.service.hmhj.dto.*;
...@@ -215,21 +216,16 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe ...@@ -215,21 +216,16 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
if (CollectionUtils.isEmpty(indexList)) { if (CollectionUtils.isEmpty(indexList)) {
return page.setRecords(voList); return page.setRecords(voList);
} }
Map<Long, List<EntrustSampleItemIndex>> sampleIndexMap = new HashMap<>(); Map<Long, List<EntrustSampleItemIndex>> sampleIndexMap = new HashMap<>();
for (EntrustSampleItemIndexVO entrustSampleItemIndex : indexList) { indexList.forEach(idx -> {
if (sampleIndexMap.containsKey(entrustSampleItemIndex.getSampleId())) { MapMergeUtils.getorCreateMapArrayList(idx.getSampleId(), sampleIndexMap, idx);
List<EntrustSampleItemIndex> itemIndexList = sampleIndexMap.get(entrustSampleItemIndex.getSampleId()); });
itemIndexList.add(entrustSampleItemIndex);
sampleIndexMap.put(entrustSampleItemIndex.getSampleId(), itemIndexList); voList.forEach(vo -> {
} else {
List<EntrustSampleItemIndex> itemIndexList = Lists.newArrayList();
itemIndexList.add(entrustSampleItemIndex);
sampleIndexMap.put(entrustSampleItemIndex.getSampleId(), itemIndexList);
}
}
for (EntrustSampleVO vo : voList) {
vo.setIndexList(sampleIndexMap.get(vo.getId())); vo.setIndexList(sampleIndexMap.get(vo.getId()));
} });
// 数据排序,有结果的排在前面,无结果排后面 // 数据排序,有结果的排在前面,无结果排后面
Collections.sort(voList, Comparator.comparingInt(t -> CollectionUtils.isNotEmpty(t.getIndexList()) ? 1 : 0)); Collections.sort(voList, Comparator.comparingInt(t -> CollectionUtils.isNotEmpty(t.getIndexList()) ? 1 : 0));
......
package com.patzn.cloud.service.lims.hmhj.service.impl; package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl; import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.service.hmhj.entity.GradingItem; import com.patzn.cloud.service.hmhj.entity.GradingItem;
import com.patzn.cloud.service.lims.hmhj.mapper.GradingItemMapper; import com.patzn.cloud.service.lims.hmhj.mapper.GradingItemMapper;
import com.patzn.cloud.service.lims.hmhj.service.IGradingItemService; import com.patzn.cloud.service.lims.hmhj.service.IGradingItemService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* 服务实现类 * 服务实现类
* *
* @author wwd * @author wwd
* @since 2021-05-14 * @since 2021-05-14
...@@ -31,4 +34,12 @@ public class GradingItemServiceImpl extends BaseServiceImpl<GradingItemMapper, G ...@@ -31,4 +34,12 @@ public class GradingItemServiceImpl extends BaseServiceImpl<GradingItemMapper, G
public boolean removeByIds(List<Long> ids) { public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0; return baseMapper.deleteBatchIds(ids) > 0;
} }
@Override
public List<GradingItem> listByProductIds(List<Long> productIds) {
if (CollectionUtils.isEmpty(productIds)) {
return new ArrayList<>();
}
return list(Condition.create().in("grading_product_id", productIds).isNotNull("limit_value"));
}
} }
package com.patzn.cloud.service.lims.hmhj.service.impl; package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl; import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.service.hmhj.entity.GradingProduct; import com.patzn.cloud.service.hmhj.entity.GradingProduct;
import com.patzn.cloud.service.lims.hmhj.mapper.GradingProductMapper; import com.patzn.cloud.service.lims.hmhj.mapper.GradingProductMapper;
import com.patzn.cloud.service.lims.hmhj.service.IGradingProductService; import com.patzn.cloud.service.lims.hmhj.service.IGradingProductService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* 服务实现类 * 服务实现类
* *
* @author wwd * @author wwd
* @since 2021-05-14 * @since 2021-05-14
...@@ -31,4 +34,13 @@ public class GradingProductServiceImpl extends BaseServiceImpl<GradingProductMap ...@@ -31,4 +34,13 @@ public class GradingProductServiceImpl extends BaseServiceImpl<GradingProductMap
public boolean removeByIds(List<Long> ids) { public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0; return baseMapper.deleteBatchIds(ids) > 0;
} }
@Override
public List<GradingProduct> listByStandardIds(List<Long> standardIds) {
if (CollectionUtils.isEmpty(standardIds)) {
return new ArrayList<>();
}
// 依旧优先级来处理判定顺序
return list(Condition.create().in("grading_standard_id", standardIds).orderBy("judge_priority", true));
}
} }
...@@ -31,7 +31,7 @@ import java.util.Date; ...@@ -31,7 +31,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
/** /**
* 服务实现类 * 服务实现类
* *
* @author wwd * @author wwd
* @since 2021-05-14 * @since 2021-05-14
...@@ -52,12 +52,12 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM ...@@ -52,12 +52,12 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM
@Override @Override
public Page<GradingStandard> page(Page<GradingStandard> page, GradingStandard gradingStandard) { public Page<GradingStandard> page(Page<GradingStandard> page, GradingStandard gradingStandard) {
Wrapper wrapper = new EntityWrapper<>(gradingStandard); Wrapper wrapper = new EntityWrapper<>(gradingStandard);
if (StringUtils.isNotBlank(gradingStandard.getCode())){ if (StringUtils.isNotBlank(gradingStandard.getCode())) {
wrapper.like("code",gradingStandard.getCode()); wrapper.like("code", gradingStandard.getCode());
gradingStandard.setCode(null); gradingStandard.setCode(null);
} }
if (StringUtils.isNotBlank(gradingStandard.getName())){ if (StringUtils.isNotBlank(gradingStandard.getName())) {
wrapper.like("name",gradingStandard.getName()); wrapper.like("name", gradingStandard.getName());
gradingStandard.setName(null); gradingStandard.setName(null);
} }
return this.page(page, wrapper); return this.page(page, wrapper);
...@@ -71,8 +71,8 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM ...@@ -71,8 +71,8 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean addGradingStandard(GradingStandardDTO dto, Account account) { public boolean addGradingStandard(GradingStandardDTO dto, Account account) {
RestAssert.fail(StringUtils.isBlank(dto.getCode()),"产品标准不能为空!"); RestAssert.fail(StringUtils.isBlank(dto.getCode()), "产品标准不能为空!");
RestAssert.fail(StringUtils.isBlank(dto.getName()),"产品标准名称不能为空!"); RestAssert.fail(StringUtils.isBlank(dto.getName()), "产品标准名称不能为空!");
GradingStandard gradingStandard = dto.convert(GradingStandard.class); GradingStandard gradingStandard = dto.convert(GradingStandard.class);
gradingStandard.setId(IdWorker.getId()); gradingStandard.setId(IdWorker.getId());
...@@ -81,14 +81,14 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM ...@@ -81,14 +81,14 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM
List<GradingItem> saveItemList = new ArrayList<>(); List<GradingItem> saveItemList = new ArrayList<>();
List<GradingProduct> saveGradingProductList = new ArrayList<>(); List<GradingProduct> saveGradingProductList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(gradingProductList)){ if (CollectionUtils.isNotEmpty(gradingProductList)) {
for (GradingProductDTO productDTO : gradingProductList) { for (GradingProductDTO productDTO : gradingProductList) {
List<GradingItem> itemList = productDTO.getGradingItemList(); List<GradingItem> itemList = productDTO.getGradingItemList();
GradingProduct product = productDTO.convert(GradingProduct.class); GradingProduct product = productDTO.convert(GradingProduct.class);
product.setGradingStandardId(gradingStandard.getId()); product.setGradingStandardId(gradingStandard.getId());
product.setId(IdWorker.getId()); product.setId(IdWorker.getId());
saveGradingProductList.add(product); saveGradingProductList.add(product);
if (CollectionUtils.isNotEmpty(itemList)){ if (CollectionUtils.isNotEmpty(itemList)) {
for (GradingItem item : itemList) { for (GradingItem item : itemList) {
item.setGradingProductId(product.getId()); item.setGradingProductId(product.getId());
saveItemList.add(item); saveItemList.add(item);
...@@ -96,7 +96,7 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM ...@@ -96,7 +96,7 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM
} }
} }
} }
if (save(gradingStandard)){ if (save(gradingStandard)) {
gradingProductService.saveBatch(saveGradingProductList); gradingProductService.saveBatch(saveGradingProductList);
gradingItemService.saveBatch(saveItemList); gradingItemService.saveBatch(saveItemList);
} }
...@@ -117,12 +117,12 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM ...@@ -117,12 +117,12 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean abolish(Long[] ids, String reason, Account account) { public boolean abolish(Long[] ids, String reason, Account account) {
RestAssert.fail(ArrayUtils.isEmpty(ids),"请选择需要作废的判级标准"); RestAssert.fail(ArrayUtils.isEmpty(ids), "请选择需要作废的判级标准");
RestAssert.fail(StringUtils.isBlank(reason),"请填写,作废原因!"); RestAssert.fail(StringUtils.isBlank(reason), "请填写,作废原因!");
List<GradingStandard> standards = super.list(Condition.create().in("id",ids).eq("effective",1)); List<GradingStandard> standards = super.list(Condition.create().in("id", ids).eq("effective", 1));
if (CollectionUtils.isNotEmpty(standards)){ if (CollectionUtils.isNotEmpty(standards)) {
for (GradingStandard standard : standards) { for (GradingStandard standard : standards) {
RestAssert.fail("判级标准:"+standard.getCode()+"已经作废,请勿重复作废!"); RestAssert.fail("判级标准:" + standard.getCode() + "已经作废,请勿重复作废!");
} }
} }
GradingStandard gradingStandard = new GradingStandard(); GradingStandard gradingStandard = new GradingStandard();
...@@ -145,22 +145,22 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM ...@@ -145,22 +145,22 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM
saveRecord.add(record); saveRecord.add(record);
} }
gradingRecordService.saveBatch(saveRecord); gradingRecordService.saveBatch(saveRecord);
return super.update(gradingStandard,Condition.create().in("id",ids)); return super.update(gradingStandard, Condition.create().in("id", ids));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public boolean editGradingStandard(GradingStandardDTO dto, Account account) { public boolean editGradingStandard(GradingStandardDTO dto, Account account) {
if (null == dto.getId()){ if (null == dto.getId()) {
return false; return false;
} }
List<GradingProductDTO> sampleList = dto.getGradingProductList(); List<GradingProductDTO> sampleList = dto.getGradingProductList();
if (CollectionUtils.isEmpty(sampleList)){ if (CollectionUtils.isEmpty(sampleList)) {
// PtAssert.fail("样品不能为空"); // PtAssert.fail("样品不能为空");
} }
GradingStandard standard =dto.convert(GradingStandard.class); GradingStandard standard = dto.convert(GradingStandard.class);
if (updateById(standard)){ if (updateById(standard)) {
List<Long> sampleIdsList = new ArrayList<>(); List<Long> sampleIdsList = new ArrayList<>();
List<GradingProduct> updateSampleList = new ArrayList<>(); List<GradingProduct> updateSampleList = new ArrayList<>();
...@@ -170,43 +170,43 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM ...@@ -170,43 +170,43 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM
List<GradingItem> saveItemList = new ArrayList<>(); List<GradingItem> saveItemList = new ArrayList<>();
List<GradingItem> updateItemList = new ArrayList<>(); List<GradingItem> updateItemList = new ArrayList<>();
for (GradingProductDTO productDTO:sampleList) { for (GradingProductDTO productDTO : sampleList) {
GradingProduct sample = productDTO.convert(GradingProduct.class); GradingProduct sample = productDTO.convert(GradingProduct.class);
if (null != sample.getId()){ if (null != sample.getId()) {
updateSampleList.add(sample); updateSampleList.add(sample);
sampleIdsList.add(sample.getId()); sampleIdsList.add(sample.getId());
}else{ } else {
sample.setGradingStandardId(standard.getId()); sample.setGradingStandardId(standard.getId());
sample.setId(IdWorker.getId()); sample.setId(IdWorker.getId());
saveSampleList.add(sample); saveSampleList.add(sample);
} }
List<GradingItem> viewItemList= productDTO.getGradingItemList(); List<GradingItem> viewItemList = productDTO.getGradingItemList();
if (CollectionUtils.isNotEmpty(viewItemList)){ if (CollectionUtils.isNotEmpty(viewItemList)) {
for (GradingItem item:viewItemList) { for (GradingItem item : viewItemList) {
if (null == item.getId()){ if (null == item.getId()) {
item.setId(IdWorker.getId()); item.setId(IdWorker.getId());
item.setGradingProductId(sample.getId()); item.setGradingProductId(sample.getId());
saveItemList.add(item); saveItemList.add(item);
}else{ } else {
updateItemList.add(item); updateItemList.add(item);
} }
} }
} }
} }
if (CollectionUtils.isNotEmpty(updateSampleList)){ if (CollectionUtils.isNotEmpty(updateSampleList)) {
gradingProductService.updateBatchById(updateSampleList); gradingProductService.updateBatchById(updateSampleList);
} }
if (CollectionUtils.isNotEmpty(saveSampleList)){ if (CollectionUtils.isNotEmpty(saveSampleList)) {
gradingProductService.saveBatch(saveSampleList); gradingProductService.saveBatch(saveSampleList);
} }
if (CollectionUtils.isNotEmpty(saveItemList)){ if (CollectionUtils.isNotEmpty(saveItemList)) {
gradingItemService.saveBatch(saveItemList); gradingItemService.saveBatch(saveItemList);
} }
if (CollectionUtils.isNotEmpty(updateItemList)){ if (CollectionUtils.isNotEmpty(updateItemList)) {
gradingItemService.updateBatchById(updateItemList); gradingItemService.updateBatchById(updateItemList);
} }
...@@ -222,4 +222,12 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM ...@@ -222,4 +222,12 @@ public class GradingStandardServiceImpl extends BaseServiceImpl<GradingStandardM
gradingRecordService.save(record); gradingRecordService.save(record);
return true; return true;
} }
@Override
public List<GradingStandard> listByIds(List<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
return new ArrayList<>();
}
return super.list(Condition.create().in("id", ids));
}
} }
...@@ -10,7 +10,7 @@ server: ...@@ -10,7 +10,7 @@ server:
spring: spring:
# 环境 dev|test|pro # 环境 dev|test|pro
profiles: profiles:
active: local active: dev
application: application:
name: hmhj name: hmhj
# 模板引擎配置 # 模板引擎配置
......
...@@ -682,6 +682,7 @@ ...@@ -682,6 +682,7 @@
<select id="listIndexReplaceItemBySampleIds" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO"> <select id="listIndexReplaceItemBySampleIds" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO">
select select
i.name || '##'|| ii.name "name", i.name || '##'|| ii.name "name",
i.entrust_sample_id,
ii.*, ii.*,
i.compose_judge, i.compose_judge,
s.code "sample_code", s.code "sample_code",
......
...@@ -37,38 +37,14 @@ ...@@ -37,38 +37,14 @@
</select> </select>
<select id="selectVOList" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleVO"> <select id="selectVOList" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleVO">
with sample_item as (
select
i.company_id,
i.entrust_sample_id,
max(i.group_id) "group_id",
string_agg(distinct i.name,'、') "item_names"
<!-- ,case when count(1) != count(distinct i.name) then true else false end "item_report" -->
from entrust_sample_item i where i.deleted = 0
<if test="null != vo.entrustId">
AND i.entrust_id = #{vo.entrustId}
</if>
<if test="null != vo.itemStatus">
and i.status = #{vo.itemStatus}
</if>
<if test="null != vo.itemStatusList">
and i.status IN
<foreach collection="vo.itemStatusList" index="index" item="itemStatus" open="(" separator="," close=")">
#{itemStatus}
</foreach>
</if>
<if test="null != vo.testerId ">
and i.tester_id = #{vo.testerId}
</if>
group by i.company_id,i.entrust_sample_id
)
SELECT SELECT
s.*, s.*,
i.group_id, max(i.group_id) "group_id",
i.item_names string_agg ( DISTINCT i.NAME, '、' ) "item_names"
FROM entrust_sample s FROM entrust_sample s
JOIN sample_item i on i.entrust_sample_id = s.id JOIN entrust_sample_item i on i.entrust_sample_id = s.id and i.deleted = 0
WHERE deleted = 0 WHERE s.deleted = 0
<if test="null != vo.entrustId"> <if test="null != vo.entrustId">
AND s.entrust_id = #{vo.entrustId} AND s.entrust_id = #{vo.entrustId}
</if> </if>
...@@ -97,29 +73,6 @@ ...@@ -97,29 +73,6 @@
AND s.status != #{vo.notStatus} AND s.status != #{vo.notStatus}
</if> </if>
<!--
<if test="null != vo.itemStatus or null != vo.itemStatusList or null != vo.testerId">
AND exists (
select 1 from entrust_sample_item i where i.deleted = 0 and i.entrust_sample_id = s.id
<if test="null != vo.itemStatus">
and i.status = #{vo.itemStatus}
</if>
<if test="null != vo.itemStatusList">
and i.status IN
<foreach collection="vo.itemStatusList" index="index" item="itemStatus" open="(" separator="," close=")">
#{itemStatus}
</foreach>
</if>
<if test="null != vo.testerId ">
and i.tester_id = #{vo.testerId}
</if>
)
</if>
-->
<if test="null != vo.statusList"> <if test="null != vo.statusList">
and s.status IN and s.status IN
<foreach collection="vo.statusList" index="index" item="status" open="(" separator="," close=")"> <foreach collection="vo.statusList" index="index" item="status" open="(" separator="," close=")">
...@@ -134,7 +87,22 @@ ...@@ -134,7 +87,22 @@
</foreach> </foreach>
</if> </if>
order by s.order_by asc, s.code ,s.ctime desc <if test="null != vo.itemStatus">
and i.status = #{vo.itemStatus}
</if>
<if test="null != vo.itemStatusList">
and i.status IN
<foreach collection="vo.itemStatusList" index="index" item="itemStatus" open="(" separator="," close=")">
#{itemStatus}
</foreach>
</if>
<if test="null != vo.testerId ">
and i.tester_id = #{vo.testerId}
</if>
GROUP BY s.ID
ORDER BY s.order_by asc, s.code ,s.ctime desc
</select> </select>
<select id="selectMinStatusByEntrustIds" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleVO"> <select id="selectMinStatusByEntrustIds" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleVO">
...@@ -211,6 +179,22 @@ ...@@ -211,6 +179,22 @@
<if test="null != vo.slotNoE"> <if test="null != vo.slotNoE">
AND to_number(s.slot_no,'99999') &lt;= #{vo.slotNoE} AND to_number(s.slot_no,'99999') &lt;= #{vo.slotNoE}
</if> </if>
<if test="null != vo.shift">
<choose>
<!--零点 =》 00:00-8:00 -->
<when test="0 == vo.shift">
and "time"('00:00:00') &lt;= "time"(e.entrust_time) and "time"('08:00:00') > "time"(e.entrust_time)
</when>
<!--白班 =》 8:00-16:00 -->
<when test="1 == vo.shift">
and "time"('08:00:00') &lt;= "time"(e.entrust_time) and "time"('16:00:00') > "time"(e.entrust_time)
</when>
<!--中班 =》 16:00 —24:00 -->
<when test="2 == vo.shift">
and "time"('16:00:00') &lt;= "time"(e.entrust_time) and "time"('23:59:59') >= "time"(e.entrust_time)
</when>
</choose>
</if>
ORDER BY e.code,s.code ORDER BY e.code,s.code
</select> </select>
......
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