From 3728fa293e1faf4bf4f9bf41105b84ddb43dc82e Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 02 十一月 2026 16:53:02 +0800
Subject: [PATCH] feat(order-rates): 新增筛选条件下全部订单费用汇总接口
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java | 414 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 409 insertions(+), 5 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
index ed0874d..db1a1d9 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -55,6 +55,7 @@
import com.ruoyi.inspect.vo.TemplateConditionVo;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationEventPublisher;
@@ -80,6 +81,7 @@
* @description 閽堝琛ㄣ�恑ns_order(妫�楠屼笅鍗�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
* @createDate 2024-03-12 16:17:55
*/
+@Slf4j
@Service
@AllArgsConstructor
public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
@@ -125,8 +127,32 @@
}
// 妫�楠屼腑锛氭柊鑱氫笅鍗曞厤瀹℃牳鍗冲彈鐞嗭紝闇�鏍峰搧鎺ユ敹鎻愪氦鍚庯紙ins_sample_receipt.status=1锛夋墠灞曠ず
String receiptSubmitted = sampleOrderDto.getState() != null && sampleOrderDto.getState() == 1 ? "1" : null;
- return insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto), laboratory,
- isOrderAll, receiptSubmitted);
+ IPage<SampleOrderDto> result = insOrderMapper.selectInsOrderPage(page,
+ QueryWrappers.queryWrappers(sampleOrderDto), laboratory, isOrderAll, receiptSubmitted);
+ List<Integer> candidateIds = result.getRecords().stream()
+ .filter(row -> Integer.valueOf(-1).equals(row.getTypeSource())
+ && Integer.valueOf(1).equals(row.getState()))
+ .map(SampleOrderDto::getId)
+ .collect(Collectors.toList());
+ if (!candidateIds.isEmpty()) {
+ Set<Integer> receivedIds = insSampleReceiptMapper.selectList(Wrappers.<InsSampleReceipt>lambdaQuery()
+ .in(InsSampleReceipt::getInsOrderId, candidateIds)
+ .eq(InsSampleReceipt::getStatus, 1)
+ .select(InsSampleReceipt::getInsOrderId)).stream()
+ .map(InsSampleReceipt::getInsOrderId).collect(Collectors.toSet());
+ Set<Integer> taskIds = insOrderStateService.list(Wrappers.<InsOrderState>lambdaQuery()
+ .in(InsOrderState::getInsOrderId, candidateIds)
+ .select(InsOrderState::getInsOrderId)).stream()
+ .map(InsOrderState::getInsOrderId).collect(Collectors.toSet());
+ Set<Integer> assignedIds = insSampleUserMapper.selectList(Wrappers.<InsSampleUser>lambdaQuery()
+ .in(InsSampleUser::getInsSampleId, candidateIds)
+ .select(InsSampleUser::getInsSampleId)).stream()
+ .map(InsSampleUser::getInsSampleId).collect(Collectors.toSet());
+ result.getRecords().forEach(row -> row.setEditable(
+ candidateIds.contains(row.getId()) && !receivedIds.contains(row.getId())
+ && !taskIds.contains(row.getId()) && !assignedIds.contains(row.getId())));
+ }
+ return result;
}
@@ -276,6 +302,9 @@
@Override
@Transactional(rollbackFor = Exception.class)
public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder) {
+ if (insOrder == null || insOrder.getSampleDate() == null) {
+ throw new ErrorException("閫佹牱鏃ユ湡涓嶈兘涓虹┖");
+ }
// todo: 涓嬪崟鍒ゆ柇鎶芥牱璁″垝鐨勫敮涓�鎬�
if (insOrder.getQuarterItemId() != null) {
Long quarterItemCount = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
@@ -487,6 +516,9 @@
}
// 濮旀墭瑕佹眰瀛楁鏍¢獙锛氬洓缁勫崟閫夊繀閫夛紝鍒嗗寘/蹇�掕仈鍔ㄥ繀濉�
InsOrder reqOrder = dto.getInsOrder();
+ if (reqOrder.getSampleDate() == null) {
+ throw new ErrorException("閫佹牱鏃ユ湡涓嶈兘涓虹┖");
+ }
if (reqOrder.getSubcontractType() == null || reqOrder.getSampleDisposal() == null
|| reqOrder.getResultEvaluation() == null || reqOrder.getReportDelivery() == null) {
throw new ErrorException("璇烽�夋嫨鍒嗗寘鍐呭銆佹牱鍝佸缃�佸缁撴灉璇勪环鍜屾姤鍛婁氦浠樻柟寮�");
@@ -554,6 +586,9 @@
.thenComparing(item -> item.getTemplateRowIndex() == null
? Integer.MAX_VALUE : item.getTemplateRowIndex()))
.collect(Collectors.toList());
+ if (templateItems.isEmpty()) {
+ throw new ErrorException("鎵�閫夊師濮嬭褰曟ā鏉挎湭閰嶇疆妫�楠岄」鎴栧鍑哄�硷紝涓嶈兘涓嬪崟");
+ }
StandardMethod standardMethod = standardMethodService.getById(standard.getStandardMethodId());
if (standardMethod == null || StringUtils.isBlank(standardMethod.getCode())) {
@@ -569,6 +604,7 @@
order.setIsExemption(0);
order.setFactory(null);
order.setLaboratory(standard.getLaboratory());
+ order.setStandardTreeId(dto.getStandardTreeId());
order.setSampleType(null);
order.setSample(standardCode);
order.setPrepareUserEn(null);
@@ -633,6 +669,174 @@
return order.getId();
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int updateNewJuInsOrder(InsPlaceOrderDto dto) {
+ if (dto == null || dto.getOrderId() == null || dto.getInsOrder() == null || dto.getStandardTreeId() == null) {
+ throw new ErrorException("涓嬪崟淇℃伅鎴栨爣鍑嗕笉鑳戒负绌�");
+ }
+ InsOrder currentOrder = insOrderMapper.selectById(dto.getOrderId());
+ if (currentOrder == null) {
+ throw new ErrorException("妫�楠屽崟涓嶅瓨鍦�");
+ }
+ if (!Integer.valueOf(1).equals(currentOrder.getState()) || !Integer.valueOf(-1).equals(currentOrder.getTypeSource())) {
+ throw new ErrorException("褰撳墠濮旀墭涓嶅厑璁哥紪杈�");
+ }
+ assertNewJuOrderEditable(dto.getOrderId());
+
+ String sampleCode = StringUtils.trim(dto.getSampleCode());
+ if (StringUtils.isBlank(sampleCode) || sampleCode.length() < 2) {
+ throw new ErrorException("鏍峰搧缂栧彿涓嶈兘涓虹┖涓斾笉鑳藉皯浜�2浣�");
+ }
+ InsOrder order = dto.getInsOrder();
+ if (order.getSampleDate() == null) {
+ throw new ErrorException("閫佹牱鏃ユ湡涓嶈兘涓虹┖");
+ }
+ if (order.getSubcontractType() == null || order.getSampleDisposal() == null
+ || order.getResultEvaluation() == null || order.getReportDelivery() == null) {
+ throw new ErrorException("璇烽�夋嫨鍒嗗寘鍐呭銆佹牱鍝佸缃�佸缁撴灉璇勪环鍜屾姤鍛婁氦浠樻柟寮�");
+ }
+ if (Integer.valueOf(1).equals(order.getSubcontractType()) && StringUtils.isBlank(order.getSubcontractCompany())) {
+ throw new ErrorException("鍒嗗寘鍐呭涓烘湁鏃讹紝鍒嗗寘鍗曚綅淇℃伅涓嶈兘涓虹┖");
+ }
+ if (Integer.valueOf(2).equals(order.getReportDelivery())
+ && (StringUtils.isBlank(order.getReportAddress()) || StringUtils.isBlank(order.getReportReceiver()))) {
+ throw new ErrorException("鎶ュ憡浜や粯鏂瑰紡涓哄揩閫掓椂锛岃濉啓鎶ュ憡瀵勯�佸湴鍧�鍜屾敹浠朵汉鍙婄數璇�");
+ }
+
+ StandardTree standard = standardTreeService.getById(dto.getStandardTreeId());
+ if (standard == null || StringUtils.isBlank(standard.getSample())
+ || standard.getSampleType() != null || standard.getModel() != null) {
+ throw new ErrorException("璇烽�夋嫨鏍囧噯搴撲簩绾ф爣鍑�");
+ }
+ List<StandardTreeTemplateBindingVo> bindings = standardTreeService.selectTemplateBindings(dto.getStandardTreeId());
+ if (bindings.isEmpty()) {
+ throw new ErrorException("璇ユ爣鍑嗗皻鏈粦瀹氬彲鐢ㄧ殑鍘熷璁板綍妯℃澘");
+ }
+ Map<Integer, StandardTreeTemplateBindingVo> bindingMap = bindings.stream()
+ .collect(Collectors.toMap(StandardTreeTemplateBindingVo::getTemplateId, binding -> binding, (first, ignored) -> first));
+ List<OrderTemplateSelectionDto> selections = dto.getTemplateList();
+ if (selections == null) {
+ selections = bindings.stream().map(binding -> {
+ OrderTemplateSelectionDto selection = new OrderTemplateSelectionDto();
+ selection.setTemplateId(binding.getTemplateId());
+ selection.setSort(binding.getSort());
+ return selection;
+ }).collect(Collectors.toList());
+ }
+ if (selections.isEmpty()) {
+ throw new ErrorException("璇疯嚦灏戜繚鐣欎竴涓師濮嬭褰曟ā鏉�");
+ }
+ Set<Integer> selectedTemplateIds = new HashSet<>();
+ for (int index = 0; index < selections.size(); index++) {
+ OrderTemplateSelectionDto selection = selections.get(index);
+ if (selection == null || selection.getTemplateId() == null || !bindingMap.containsKey(selection.getTemplateId())) {
+ throw new ErrorException("鎵�閫夊師濮嬭褰曟ā鏉夸笉灞炰簬褰撳墠鏍囧噯");
+ }
+ if (!selectedTemplateIds.add(selection.getTemplateId())) {
+ throw new ErrorException("鍘熷璁板綍妯℃澘涓嶈兘閲嶅閫夋嫨");
+ }
+ if (selection.getSort() == null) {
+ selection.setSort(index);
+ }
+ }
+ selections.sort(Comparator.comparing(OrderTemplateSelectionDto::getSort)
+ .thenComparing(OrderTemplateSelectionDto::getTemplateId));
+ Map<Integer, Integer> templateSortMap = selections.stream().collect(Collectors.toMap(
+ OrderTemplateSelectionDto::getTemplateId, OrderTemplateSelectionDto::getSort));
+ List<TemplateInspectionItemDto> templateItems = standardTreeService.selectTemplateInspectionItems(dto.getStandardTreeId()).stream()
+ .filter(item -> selectedTemplateIds.contains(item.getTemplateId()))
+ .sorted(Comparator.comparing((TemplateInspectionItemDto item) -> templateSortMap.get(item.getTemplateId()))
+ .thenComparing(item -> item.getTemplateRowIndex() == null ? Integer.MAX_VALUE : item.getTemplateRowIndex()))
+ .collect(Collectors.toList());
+ if (templateItems.isEmpty()) {
+ throw new ErrorException("鎵�閫夊師濮嬭褰曟ā鏉挎湭閰嶇疆妫�楠岄」鎴栧鍑哄�硷紝涓嶈兘涓嬪崟");
+ }
+ StandardMethod standardMethod = standardMethodService.getById(standard.getStandardMethodId());
+ if (standardMethod == null || StringUtils.isBlank(standardMethod.getCode())) {
+ throw new ErrorException("鏍囧噯缂栧彿涓嶅瓨鍦�");
+ }
+ String standardCode = standardMethod.getCode().trim();
+
+ order.setId(currentOrder.getId());
+ order.setState(currentOrder.getState());
+ order.setInsState(currentOrder.getInsState());
+ order.setExamineTime(currentOrder.getExamineTime());
+ order.setSendTime(currentOrder.getSendTime());
+ order.setIsExemption(currentOrder.getIsExemption());
+ order.setFactory(null);
+ order.setLaboratory(standard.getLaboratory());
+ order.setStandardTreeId(dto.getStandardTreeId());
+ order.setSampleType(null);
+ order.setSample(standardCode);
+ order.setPrepareUserEn(null);
+ order.setPrepareCode(null);
+ order.setRemarkEn(null);
+ order.setTemperature(null);
+ order.setHumidity(null);
+ if (!Integer.valueOf(1).equals(order.getSubcontractType())) {
+ order.setSubcontractCompany(null);
+ }
+ if (!Integer.valueOf(2).equals(order.getReportDelivery())) {
+ order.setReportAddress(null);
+ order.setReportReceiver(null);
+ }
+ insOrderMapper.updateById(order);
+
+ List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getInsOrderId, currentOrder.getId()).orderByAsc(InsSample::getId));
+ if (samples.size() != 1) {
+ throw new ErrorException("妫�楠屾牱鍝佹暟鎹紓甯�");
+ }
+ InsSample sample = samples.get(0);
+ sample.setSampleCode(sampleCode);
+ sample.setLaboratory(standard.getLaboratory());
+ sample.setSampleType(null);
+ sample.setSample(standardCode);
+ sample.setModel(null);
+ insSampleMapper.updateById(sample);
+ insProductMapper.delete(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, sample.getId()));
+ insOrderStandardTemplateMapper.delete(Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+ .eq(InsOrderStandardTemplate::getInsOrderId, currentOrder.getId()));
+ insOrderTemplateDeviceMapper.delete(Wrappers.<InsOrderTemplateDevice>lambdaQuery()
+ .eq(InsOrderTemplateDevice::getInsOrderId, currentOrder.getId()));
+ int productSort = 0;
+ for (TemplateInspectionItemDto item : templateItems) {
+ InsProduct product = new InsProduct();
+ product.setInsSampleId(sample.getId());
+ product.setInspectionItem(item.getInspectionItem());
+ product.setInspectionItemClass("");
+ product.setInspectionItemSubclass("");
+ product.setLaboratory(standard.getLaboratory());
+ product.setSample(standardCode);
+ product.setTemplateId(item.getTemplateId());
+ product.setTemplateRowIndex(item.getTemplateRowIndex());
+ product.setSonLaboratory(DIRECT_TEMPLATE_LABORATORY);
+ product.setState(1);
+ product.setSort(productSort++);
+ insProductMapper.insert(product);
+ }
+ saveTemplateSnapshots(currentOrder.getId(), selections, bindingMap);
+ String entrustCode = buildEntrustCode(order, Collections.singletonList(sample));
+ assertEntrustCodeUnique(entrustCode, currentOrder.getId());
+ insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate().eq(InsOrder::getId, currentOrder.getId())
+ .set(InsOrder::getEntrustCode, entrustCode));
+ applicationEventPublisher.publishEvent(new com.ruoyi.inspect.event.NewJuOrderPlacedEvent(currentOrder.getId()));
+ return currentOrder.getId();
+ }
+
+ private void assertNewJuOrderEditable(Integer orderId) {
+ Long receiptCount = insSampleReceiptMapper.selectCount(Wrappers.<InsSampleReceipt>lambdaQuery()
+ .eq(InsSampleReceipt::getInsOrderId, orderId).eq(InsSampleReceipt::getStatus, 1));
+ Long taskCount = insOrderStateService.count(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, orderId));
+ Long userCount = insSampleUserMapper.selectCount(Wrappers.<InsSampleUser>lambdaQuery()
+ .eq(InsSampleUser::getInsSampleId, orderId));
+ if (receiptCount > 0 || taskCount > 0 || userCount > 0) {
+ throw new ErrorException("璇ュ鎵樺凡杩涘叆妫�楠岋紝涓嶈兘缂栬緫");
+ }
+ }
+
private void saveTemplateSnapshots(Integer orderId, List<OrderTemplateSelectionDto> selections,
Map<Integer, StandardTreeTemplateBindingVo> bindingMap) {
for (OrderTemplateSelectionDto selection : selections) {
@@ -645,9 +849,11 @@
snapshot.setTemplateId(template.getId());
snapshot.setName(template.getName());
snapshot.setNumber(template.getNumber());
+ snapshot.setStandardRequirement(template.getStandardRequirement());
snapshot.setRemark(template.getRemark());
snapshot.setThing(template.getThing());
snapshot.setSort(selection.getSort());
+ snapshot.setDeviceDefaultsInitialized(0);
insOrderStandardTemplateMapper.insert(snapshot);
StandardTreeTemplateBindingVo binding = bindingMap.get(selection.getTemplateId());
@@ -732,6 +938,38 @@
map.put("sampleCode", orderSamples.isEmpty() ? null : orderSamples.get(0).getSampleCode());
map.put("insOrderTemplate", map1);
map.put("templateList", templateList);
+ Set<Integer> orderTemplateIds = templateList.stream()
+ .map(OrderTemplateSummaryVo::getTemplateId).collect(Collectors.toSet());
+ List<Integer> methodIds = standardMethodService.list(Wrappers.<StandardMethod>lambdaQuery()
+ .eq(StandardMethod::getCode, insOrder.getSample())
+ .select(StandardMethod::getId)).stream()
+ .map(StandardMethod::getId).collect(Collectors.toList());
+ if (insOrder.getStandardTreeId() != null) {
+ map.put("standardTreeId", insOrder.getStandardTreeId());
+ } else if (!methodIds.isEmpty() && !orderTemplateIds.isEmpty()) {
+ List<StandardTree> candidates = standardTreeService.list(Wrappers.<StandardTree>lambdaQuery()
+ .in(StandardTree::getStandardMethodId, methodIds)
+ .isNull(StandardTree::getSampleType)
+ .isNull(StandardTree::getModel));
+ Map<StandardTree, Set<Integer>> matches = candidates.stream()
+ .filter(tree -> StringUtils.isNotBlank(tree.getSample())
+ && Objects.equals(tree.getLaboratory(), insOrder.getLaboratory()))
+ .collect(Collectors.toMap(tree -> tree,
+ tree -> standardTreeService.selectTemplateBindings(tree.getId()).stream()
+ .map(StandardTreeTemplateBindingVo::getTemplateId)
+ .collect(Collectors.toSet())));
+ matches.entrySet().removeIf(entry -> !entry.getValue().containsAll(orderTemplateIds));
+ if (matches.size() == 1) {
+ map.put("standardTreeId", matches.keySet().iterator().next().getId());
+ } else if (matches.size() > 1) {
+ List<StandardTree> exactMatches = matches.entrySet().stream()
+ .filter(entry -> entry.getValue().equals(orderTemplateIds))
+ .map(Map.Entry::getKey).collect(Collectors.toList());
+ if (exactMatches.size() == 1) {
+ map.put("standardTreeId", exactMatches.get(0).getId());
+ }
+ }
+ }
return map;
}
@@ -832,8 +1070,14 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
Map<String, Object> map = new HashMap<>();
+ try {
+ initializeTemplateDevicesOnFirstOpen(id, laboratory);
+ } catch (RuntimeException e) {
+ log.warn("妫�楠屼换鍔¢粯璁よ澶囧悓姝ュけ璐ワ紝orderId={}", id, e);
+ }
// InsOrder insOrder = insOrderMapper.selectById(id);
IfsOrderVO ifsOrderVO = insOrderMapper.selectOrderInfoById(id);
Map<Integer, List<Integer>> templateDeviceIds = insOrderTemplateDeviceMapper.selectList(
@@ -850,8 +1094,8 @@
.eq(InsOrderStandardTemplate::getInsOrderId, id)
.select(InsOrderStandardTemplate::getTemplateId,
InsOrderStandardTemplate::getTemperature,
- InsOrderStandardTemplate::getHumidity,
InsOrderStandardTemplate::getDetectionTime,
+ InsOrderStandardTemplate::getDetectionEndTime,
InsOrderStandardTemplate::getDetectionPlace,
InsOrderStandardTemplate::getInsResult)
.orderByAsc(InsOrderStandardTemplate::getSort,
@@ -860,8 +1104,9 @@
TemplateConditionVo condition = new TemplateConditionVo();
condition.setTemplateId(snapshot.getTemplateId());
condition.setTemperature(snapshot.getTemperature());
- condition.setHumidity(snapshot.getHumidity());
condition.setDetectionTime(snapshot.getDetectionTime());
+ condition.setDetectionEndTime(snapshot.getDetectionEndTime() == null
+ ? snapshot.getDetectionTime() : snapshot.getDetectionEndTime());
condition.setDetectionPlace(snapshot.getDetectionPlace());
condition.setInsResult(snapshot.getInsResult());
condition.setDeviceIds(templateDeviceIds.getOrDefault(
@@ -876,6 +1121,165 @@
List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
map.put("reportModel", list2);
return map;
+ }
+
+ /**
+ * 鎵撳紑妫�楠屼换鍔℃椂锛屾妸灏氭湭琚汉宸ユ敼鍔ㄨ繃鐨勬ā鏉胯澶囧悓姝ヤ负鏍囧噯搴撳綋鍓嶇粦瀹氱殑璁惧锛�
+ * 妫�楠屽憳鎵嬪姩澧炲垹杩囩殑妯℃澘浠ヤ汉宸ヤ负鍑嗭紝涓嶅啀鑷姩濉厖銆�
+ */
+ private void initializeTemplateDevicesOnFirstOpen(Integer orderId, String laboratory) {
+ InsOrder order = insOrderMapper.selectById(orderId);
+ if (order == null || !Objects.equals(order.getTypeSource(), -1)
+ || !Objects.equals(order.getState(), 1)
+ || "QUALITY_MONITOR".equals(order.getTaskSource())) {
+ return;
+ }
+ if (StringUtils.isNotBlank(laboratory)) {
+ InsOrderState orderState = insOrderStateService.getOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, orderId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .last("limit 1"));
+ // 浠呭緟妫�銆佸湪妫�闃舵鍚屾锛涜繘鍏ュ鏍哥瓑鍚庣画鐘舵�佸悗浠ヤ繚瀛樹笅鏉ョ殑璁惧涓哄噯銆�
+ if (orderState != null && orderState.getInsState() != null
+ && orderState.getInsState() != 0 && orderState.getInsState() != 1) {
+ return;
+ }
+ }
+ List<InsOrderStandardTemplate> snapshots = insOrderStandardTemplateMapper.selectList(
+ Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+ .eq(InsOrderStandardTemplate::getInsOrderId, orderId)
+ .select(InsOrderStandardTemplate::getId,
+ InsOrderStandardTemplate::getTemplateId,
+ InsOrderStandardTemplate::getDeviceDefaultsInitialized)
+ .orderByAsc(InsOrderStandardTemplate::getSort, InsOrderStandardTemplate::getId)
+ .last("FOR UPDATE"));
+ if (snapshots.isEmpty() || snapshots.stream().allMatch(
+ snapshot -> Objects.equals(snapshot.getDeviceDefaultsInitialized(), 1))) {
+ return;
+ }
+
+ Map<Integer, List<InsOrderTemplateDevice>> existingDevices = insOrderTemplateDeviceMapper.selectList(
+ Wrappers.<InsOrderTemplateDevice>lambdaQuery()
+ .eq(InsOrderTemplateDevice::getInsOrderId, orderId)
+ .orderByAsc(InsOrderTemplateDevice::getSort, InsOrderTemplateDevice::getId))
+ .stream().filter(relation -> relation.getTemplateId() != null)
+ .collect(Collectors.groupingBy(InsOrderTemplateDevice::getTemplateId));
+ Map<Integer, List<Integer>> defaults = findStandardDeviceDefaults(order, snapshots);
+
+ for (InsOrderStandardTemplate snapshot : snapshots) {
+ // 妫�楠屽憳鎵嬪姩閫夋嫨鎴栨竻绌鸿繃鐨勬ā鏉夸互浜哄伐涓哄噯锛屼笉鍐嶅鐢ㄦ爣鍑嗗簱榛樿鍊笺��
+ if (Objects.equals(snapshot.getDeviceDefaultsInitialized(), 1)) {
+ continue;
+ }
+ Integer templateId = snapshot.getTemplateId();
+ if (templateId == null) {
+ continue;
+ }
+ List<InsOrderTemplateDevice> currentDevices = existingDevices.getOrDefault(
+ templateId, Collections.emptyList());
+ // 鏃ф暟鎹病鏈夊垵濮嬪寲鏍囪锛屽凡鏈夎澶囪涓轰汉宸ラ�夋嫨锛屾爣璁板悗涓嶅啀鑷姩瑕嗙洊銆�
+ if (snapshot.getDeviceDefaultsInitialized() == null && !currentDevices.isEmpty()) {
+ insOrderStandardTemplateMapper.update(null,
+ Wrappers.<InsOrderStandardTemplate>lambdaUpdate()
+ .eq(InsOrderStandardTemplate::getId, snapshot.getId())
+ .set(InsOrderStandardTemplate::getDeviceDefaultsInitialized, 1));
+ continue;
+ }
+ if (!defaults.containsKey(templateId)) {
+ continue;
+ }
+ List<Integer> standardDeviceIds = defaults.get(templateId).stream()
+ .filter(Objects::nonNull).distinct().collect(Collectors.toList());
+ List<Integer> currentDeviceIds = currentDevices.stream()
+ .map(InsOrderTemplateDevice::getDeviceId)
+ .filter(Objects::nonNull).distinct().collect(Collectors.toList());
+ if (currentDeviceIds.equals(standardDeviceIds)) {
+ continue;
+ }
+ // 鏈垵濮嬪寲杩囩殑妯℃澘瀹屽叏瀵归綈鏍囧噯搴撶粦瀹氾細缁戝畾鍑犱釜灏辨樉绀哄嚑涓��
+ insOrderTemplateDeviceMapper.delete(
+ Wrappers.<InsOrderTemplateDevice>lambdaQuery()
+ .eq(InsOrderTemplateDevice::getInsOrderId, orderId)
+ .eq(InsOrderTemplateDevice::getTemplateId, templateId));
+ for (int index = 0; index < standardDeviceIds.size(); index++) {
+ InsOrderTemplateDevice relation = new InsOrderTemplateDevice();
+ relation.setInsOrderId(orderId);
+ relation.setTemplateId(templateId);
+ relation.setDeviceId(standardDeviceIds.get(index));
+ relation.setSort(index);
+ insOrderTemplateDeviceMapper.insert(relation);
+ }
+ }
+ }
+
+ private Map<Integer, List<Integer>> findStandardDeviceDefaults(InsOrder order,
+ List<InsOrderStandardTemplate> snapshots) {
+ Set<Integer> templateIds = snapshots.stream().map(InsOrderStandardTemplate::getTemplateId)
+ .filter(Objects::nonNull).collect(Collectors.toSet());
+ Integer standardTreeId = order.getStandardTreeId();
+ if (standardTreeId == null && StringUtils.isNotBlank(order.getSample()) && !templateIds.isEmpty()) {
+ List<Integer> methodIds = standardMethodService.list(Wrappers.<StandardMethod>lambdaQuery()
+ .eq(StandardMethod::getCode, order.getSample())
+ .select(StandardMethod::getId)).stream()
+ .map(StandardMethod::getId).collect(Collectors.toList());
+ if (!methodIds.isEmpty()) {
+ List<StandardTree> candidates = standardTreeService.list(Wrappers.<StandardTree>lambdaQuery()
+ .in(StandardTree::getStandardMethodId, methodIds)
+ .eq(StandardTree::getLaboratory, order.getLaboratory())
+ .isNotNull(StandardTree::getSample)
+ .isNull(StandardTree::getSampleType)
+ .isNull(StandardTree::getModel));
+ if (candidates.size() == 1) {
+ // 鍚屼竴鏍囧噯缂栧彿銆佸悓涓�瀹為獙瀹ゅ彧鏈変竴涓簩绾ц妭鐐规椂鐩存帴璁ゅ畾锛�
+ // 閬垮厤鏍囧噯搴撹皟鏁磋繃妯℃澘鍚庢棫璁㈠崟鍖归厤涓嶄笂銆�
+ standardTreeId = candidates.get(0).getId();
+ } else if (!candidates.isEmpty()) {
+ List<StandardTree> matches = candidates.stream()
+ .filter(tree -> StringUtils.isNotBlank(tree.getSample()))
+ .filter(tree -> {
+ Set<Integer> boundIds = standardTreeService.selectTemplateBindings(tree.getId()).stream()
+ .map(StandardTreeTemplateBindingVo::getTemplateId).collect(Collectors.toSet());
+ return boundIds.containsAll(templateIds);
+ }).collect(Collectors.toList());
+ if (matches.size() == 1) {
+ standardTreeId = matches.get(0).getId();
+ } else if (!matches.isEmpty()) {
+ List<StandardTree> exact = matches.stream().filter(tree ->
+ standardTreeService.selectTemplateBindings(tree.getId()).stream()
+ .map(StandardTreeTemplateBindingVo::getTemplateId)
+ .collect(Collectors.toSet()).equals(templateIds))
+ .collect(Collectors.toList());
+ if (exact.size() == 1) {
+ standardTreeId = exact.get(0).getId();
+ }
+ }
+ }
+ }
+ }
+ if (standardTreeId == null) {
+ return Collections.emptyMap();
+ }
+ StandardTree standard = standardTreeService.getById(standardTreeId);
+ if (standard == null || StringUtils.isBlank(standard.getSample())
+ || !Objects.equals(standard.getLaboratory(), order.getLaboratory())
+ || standard.getSampleType() != null || standard.getModel() != null) {
+ return Collections.emptyMap();
+ }
+ if (order.getStandardTreeId() == null) {
+ insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
+ .eq(InsOrder::getId, order.getId())
+ .isNull(InsOrder::getStandardTreeId)
+ .set(InsOrder::getStandardTreeId, standardTreeId));
+ }
+ List<StandardTreeTemplateBindingVo> bindings = standardTreeService.selectTemplateBindings(standardTreeId);
+ Map<Integer, List<Integer>> defaults = new HashMap<>();
+ for (StandardTreeTemplateBindingVo binding : bindings) {
+ if (templateIds.contains(binding.getTemplateId())) {
+ defaults.put(binding.getTemplateId(), binding.getDeviceIds() == null
+ ? Collections.emptyList() : binding.getDeviceIds());
+ }
+ }
+ return defaults;
}
@Override
@@ -1402,7 +1806,7 @@
List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(orderDto.getId());
orderDto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
}
- orderDto.setCreateTimeString(orderDto.getCreateTime() == null ? "" : orderDto.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ orderDto.setSampleDateString(orderDto.getSampleDate() == null ? "" : orderDto.getSampleDate().toString());
}
--
Gitblit v1.9.3