From bd46f203b0d30a3d33b7c51ae9a528e4807477e1 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 17 九月 2026 17:17:16 +0800
Subject: [PATCH] feat: 1.检验单详情温湿度 2.报告编制样品外观.平均值优化
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java | 481 +++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 395 insertions(+), 86 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 d3f2274..be9fcb1 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
@@ -16,18 +16,30 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.InventoryDetailDTO;
+import com.ruoyi.basic.dto.StandardTreeTemplateBindingVo;
+import com.ruoyi.basic.dto.TemplateInspectionItemDto;
import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
import com.ruoyi.basic.mapper.StandardProductListMapper;
import com.ruoyi.basic.mapper.StructureItemParameterMapper;
import com.ruoyi.basic.pojo.IfsInventoryQuantity;
import com.ruoyi.basic.pojo.StandardProductList;
+import com.ruoyi.basic.pojo.StandardMethod;
import com.ruoyi.basic.pojo.StructureItemParameter;
import com.ruoyi.basic.pojo.StructureTestObject;
+import com.ruoyi.basic.pojo.StandardTree;
+import com.ruoyi.basic.pojo.StandardTemplate;
+import com.ruoyi.basic.service.StandardTemplateService;
+import com.ruoyi.basic.service.StandardMethodService;
+import com.ruoyi.basic.service.StandardTreeService;
+import com.ruoyi.basic.utils.StandardTreePathParser;
import com.ruoyi.common.constant.InsOrderTypeConstants;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.enums.OrderType;
import com.ruoyi.common.numgen.NumberGenerator;
-import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.api.IfsApiUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.*;
@@ -37,7 +49,10 @@
import com.ruoyi.inspect.service.InsOrderStateService;
import com.ruoyi.inspect.service.InsProductService;
import com.ruoyi.inspect.service.InsSampleService;
+import com.ruoyi.inspect.vo.IfsOrderVO;
import com.ruoyi.inspect.vo.InsOrderPrintingVo;
+import com.ruoyi.inspect.vo.OrderTemplateSummaryVo;
+import com.ruoyi.inspect.vo.TemplateConditionVo;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
@@ -69,6 +84,8 @@
public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
implements InsOrderService {
+ private static final String DIRECT_TEMPLATE_LABORATORY = "鏂拌仛";
+
private InsOrderMapper insOrderMapper;
private InsSampleService insSampleService;
private InsSampleMapper insSampleMapper;
@@ -85,6 +102,11 @@
private SpotCheckQuarterItemMapper spotCheckQuarterItemMapper;
private StandardProductListMapper standardProductListMapper;
private StructureItemParameterMapper structureItemParameterMapper;
+ private StandardTreeService standardTreeService;
+ private StandardMethodService standardMethodService;
+ private StandardTemplateService standardTemplateService;
+ private InsOrderStandardTemplateMapper insOrderStandardTemplateMapper;
+ private InsOrderTemplateDeviceMapper insOrderTemplateDeviceMapper;
@@ -117,36 +139,52 @@
insOrderMapper.updateById(insOrder);
List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
List<Integer> ids = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
- List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
- .in(InsProduct::getInsSampleId, ids)
- .eq(InsProduct::getState, 1)
- .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
+ List<InsProduct> insProducts = ids.isEmpty()
+ ? Collections.emptyList()
+ : insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .in(InsProduct::getInsSampleId, ids)
+ .eq(InsProduct::getState, 1)
+ .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
+
+ InsOrder order = insOrderMapper.selectById(orderId);
+ boolean directTemplateOrder = isDirectTemplateOrder(order, insSamples);
+ Set<String> taskLaboratories = directTemplateOrder
+ ? Collections.singleton(DIRECT_TEMPLATE_LABORATORY)
+ : insProducts.stream()
+ .map(InsProduct::getSonLaboratory)
+ .filter(StringUtils::isNotBlank)
+ .collect(Collectors.toCollection(LinkedHashSet::new));
+ if (!directTemplateOrder && taskLaboratories.size() != insProducts.size()) {
+ throw new ErrorException("璇ユ楠屽崟鏈夋湭缁存姢瀹為獙瀹ょ殑妫�楠岄」鐩�");
+ }
// 鎵归噺娣诲姞妫�楠屼换鍔$姸鎬佽〃
- List<InsOrderState> insOrderStateList = insProducts.stream().map(insProduct -> {
+ List<InsOrderState> insOrderStateList = taskLaboratories.stream()
+ .filter(laboratory -> insOrderStateService.count(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, orderId)
+ .eq(InsOrderState::getLaboratory, laboratory)) == 0)
+ .map(laboratory -> {
InsOrderState insOrderState = new InsOrderState();
insOrderState.setInsOrderId(orderId);
- try {
- insOrderState.setLaboratory(insProduct.getSonLaboratory());
- } catch (NullPointerException e) {
- throw new ErrorException("璇ユ楠屽崟鏈夋湭缁存姢瀹為獙瀹ょ殑妫�楠岄」鐩�");
- }
+ insOrderState.setLaboratory(laboratory);
insOrderState.setInsState(0);
return insOrderState;
}).collect(Collectors.toList());
- insOrderStateService.saveBatch(insOrderStateList);
+ if (!insOrderStateList.isEmpty()) {
+ insOrderStateService.saveBatch(insOrderStateList);
+ }
if (userId != null) {
InsSampleUser insSampleUser = new InsSampleUser();
insSampleUser.setState(0);
insSampleUser.setUserId(userId);
insSampleUser.setInsSampleId(orderId);
- insSampleUser.setSonLaboratory(sonLaboratory);
+ insSampleUser.setSonLaboratory(directTemplateOrder
+ ? DIRECT_TEMPLATE_LABORATORY : sonLaboratory);
insSampleUserMapper.insert(insSampleUser);
}
// 鍒ゆ柇璁㈠崟鏈夋病鏈夌粦瀹氭娊鏍疯鍒�
- InsOrder order = insOrderMapper.selectById(orderId);
if (order.getQuarterItemId() != null) {
// 闇�瑕佹坊鍔犱笅鍙戞椂闂村埌鎶芥牱鏃堕棿, 鍙栨牱浜哄憳灏辨槸妫�娴嬩汉
SpotCheckQuarterItem spotCheckQuarterItem = spotCheckQuarterItemMapper.selectById(order.getQuarterItemId());
@@ -157,6 +195,22 @@
}
return 1;
+ }
+
+ private boolean isDirectTemplateOrder(InsOrder order, List<InsSample> samples) {
+ if (order == null || CollectionUtils.isEmpty(samples)) {
+ return false;
+ }
+ Long snapshotCount = insOrderStandardTemplateMapper.selectCount(
+ Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+ .eq(InsOrderStandardTemplate::getInsOrderId, order.getId()));
+ return snapshotCount > 0 && samples.stream().anyMatch(sample ->
+ sample.getStandardMethodListId() == null
+ && StringUtils.isBlank(sample.getFactory())
+ && StringUtils.isBlank(sample.getSampleType())
+ && StringUtils.isBlank(sample.getModel())
+ && StringUtils.isBlank(order.getFactory())
+ && StringUtils.isBlank(order.getSampleType()));
}
@@ -310,9 +364,9 @@
}
}
});
- //鏄惁涓哄師鏉愭枡涓嬪崟
- if (insOrder.getTypeSource() != null && insOrder.getTypeSource().equals(1)) {
- // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+ //鍘熸潗鏂欎笅鍗曟垨澶栬喘鎴愬搧涓嬪崟
+ if (Objects.nonNull(insOrder.getTypeSource())&&Objects.nonNull(insOrder.getIfsInventoryId())) {
+ // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
User user = userMapper.selectById(declareUserId);
@@ -350,51 +404,191 @@
upInsOrderOfState(insOrder);
// 鍒嗛厤妫�楠屼汉
- upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), "鍘熸潗鏂�");
+ String sonLaboratory = insOrder.getTypeSource().equals(1)?"鍘熸潗鏂�":"鎴愬搧瀹為獙瀹�";
+ upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), sonLaboratory);
- // 鏍规嵁闆朵欢鍙峰垽鏂槸鍚︽槸杈呮潗
- boolean isRaw = false;
- StructureTestObject productObject = insOrderMapper.selectProductByPartNo(ifsInventoryQuantity.getPartNo());
- // 鏌ヨ浜у搧
- if (productObject != null && StrUtil.isNotBlank(productObject.getObjectType()) && productObject.getObjectType().equals("1")) {
- isRaw = true;
- } else {
- // 鏌ヨ瀵硅薄
- StructureTestObject testObject = insOrderMapper.selectByPartNo(ifsInventoryQuantity.getPartNo());
- if (testObject != null && StrUtil.isNotBlank(testObject.getObjectType()) && testObject.getObjectType().equals("1")) {
+ //鏄惁涓哄師鏉愭枡涓嬪崟
+ if(insOrder.getTypeSource().equals(1)){
+ // 鏍规嵁闆朵欢鍙峰垽鏂槸鍚︽槸杈呮潗
+ boolean isRaw = false;
+ StructureTestObject productObject = insOrderMapper.selectProductByPartNo(ifsInventoryQuantity.getPartNo());
+ // 鏌ヨ浜у搧
+ if (productObject != null && StrUtil.isNotBlank(productObject.getObjectType()) && productObject.getObjectType().equals("1")) {
isRaw = true;
+ } else {
+ // 鏌ヨ瀵硅薄
+ StructureTestObject testObject = insOrderMapper.selectByPartNo(ifsInventoryQuantity.getPartNo());
+ if (testObject != null && StrUtil.isNotBlank(testObject.getObjectType()) && testObject.getObjectType().equals("1")) {
+ isRaw = true;
+ }
}
- }
- if (isRaw) {
- // 鑾峰彇褰撳墠瀛e害鐨勫紑濮嬫椂闂村拰缁撴潫鏃堕棿
- LocalDateTime now = LocalDateTime.now();
- // 鑾峰彇褰撳墠鏈堜唤
- int month = now.getMonthValue();
- // 纭畾褰撳墠瀛e害鐨勫紑濮嬫湀浠�
- int startMonth = (month - 1) / 3 * 3 + 1;
- // 鏋勯�犲搴︾殑寮�濮嬫椂闂�
- LocalDateTime startOfQuarter = LocalDateTime.of(now.getYear(), Month.of(startMonth), 1, 0, 0);
- // 璁$畻涓嬩竴涓搴︾殑寮�濮嬫椂闂�
- LocalDateTime startOfNextQuarter = startOfQuarter.plusMonths(3);
- // 璁$畻褰撳墠瀛e害鐨勭粨鏉熸椂闂�
- LocalDateTime endOfQuarter = startOfNextQuarter.minusSeconds(1);
+ if (isRaw) {
+ // 鑾峰彇褰撳墠瀛e害鐨勫紑濮嬫椂闂村拰缁撴潫鏃堕棿
+ LocalDateTime now = LocalDateTime.now();
+ // 鑾峰彇褰撳墠鏈堜唤
+ int month = now.getMonthValue();
+ // 纭畾褰撳墠瀛e害鐨勫紑濮嬫湀浠�
+ int startMonth = (month - 1) / 3 * 3 + 1;
+ // 鏋勯�犲搴︾殑寮�濮嬫椂闂�
+ LocalDateTime startOfQuarter = LocalDateTime.of(now.getYear(), Month.of(startMonth), 1, 0, 0);
+ // 璁$畻涓嬩竴涓搴︾殑寮�濮嬫椂闂�
+ LocalDateTime startOfNextQuarter = startOfQuarter.plusMonths(3);
+ // 璁$畻褰撳墠瀛e害鐨勭粨鏉熸椂闂�
+ LocalDateTime endOfQuarter = startOfNextQuarter.minusSeconds(1);
- // 鏍规嵁涓嬪崟鐨勮鏍煎瀷鍙峰垽鏂槸鍚︿负瀛e害棣栨鍑虹幇
- Integer count = ifsInventoryQuantityMapper.selectIsFirst(insOrder.getPartDetail(),
- ifsInventoryQuantity.getSupplierName(),
- startOfNextQuarter,
- endOfQuarter);
+ // 鏍规嵁涓嬪崟鐨勮鏍煎瀷鍙峰垽鏂槸鍚︿负瀛e害棣栨鍑虹幇
+ Integer count = ifsInventoryQuantityMapper.selectIsFirst(insOrder.getPartDetail(),
+ ifsInventoryQuantity.getSupplierName(),
+ startOfNextQuarter,
+ endOfQuarter);
- if(count == 0) {
- ifsInventoryQuantity.setIsFirst(1);
- ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
- .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId())
- .set(IfsInventoryQuantity::getIsFirst, 1));
+ if (count == 0) {
+ ifsInventoryQuantity.setIsFirst(1);
+ ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+ .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId())
+ .set(IfsInventoryQuantity::getIsFirst, 1));
+ }
}
}
}
return insOrder.getId();
+ }
+
+ /**
+ * 鏂拌仛鏍囧噯搴撶洿缁戞ā鏉跨殑涓嬪崟娴佺▼锛氫竴涓鍗曘�佷竴涓牱鍝侊紝妫�楠岃褰曞畬鍏ㄧ敱妯℃澘鏍囪鐢熸垚銆�
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int addNewJuInsOrder(InsPlaceOrderDto dto) {
+ if (dto == null || dto.getInsOrder() == null || dto.getStandardTreeId() == null) {
+ 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());
+
+ StandardMethod standardMethod = standardMethodService.getById(standard.getStandardMethodId());
+ if (standardMethod == null || StringUtils.isBlank(standardMethod.getCode())) {
+ throw new ErrorException("鏍囧噯缂栧彿涓嶅瓨鍦�");
+ }
+ String standardCode = standardMethod.getCode().trim();
+
+ InsOrder order = dto.getInsOrder();
+ order.setId(null);
+ order.setState(0);
+ order.setIsExemption(0);
+ order.setFactory(null);
+ order.setLaboratory(standard.getLaboratory());
+ order.setSampleType(null);
+ order.setSample(standardCode);
+ order.setPrepareUserEn(null);
+ order.setPrepareCode(null);
+ order.setRemarkEn(null);
+ // 鏂拌仛璁㈠崟鐨勭幆澧冩潯浠剁敱妫�楠屼换鍔″~鍐欙紝閬垮厤涓嬪崟妯℃澘鎴栨祻瑙堝櫒缂撳瓨甯﹀叆鏃у�笺��
+ order.setTemperature(null);
+ order.setHumidity(null);
+ insOrderMapper.insert(order);
+
+ InsSample sample = new InsSample();
+ sample.setInsOrderId(order.getId());
+ sample.setSampleCode(dto.getSampleCode());
+ sample.setFactory(null);
+ sample.setLaboratory(standard.getLaboratory());
+ sample.setSampleType(null);
+ sample.setSample(standardCode);
+ sample.setModel(null);
+ sample.setQuantity(1);
+ sample.setStandardMethodListId(null);
+ insSampleMapper.insert(sample);
+
+ int productSort = 0;
+ for (TemplateInspectionItemDto item : templateItems) {
+ InsProduct product = new InsProduct();
+ product.setInsSampleId(sample.getId());
+ product.setInspectionItem(item.getInspectionItem());
+ product.setInspectionItemClass("");
+ product.setInspectionItemSubclass("");
+ product.setFactory(null);
+ product.setLaboratory(standard.getLaboratory());
+ product.setSampleType(null);
+ product.setSample(standardCode);
+ product.setModel(null);
+ product.setTemplateId(item.getTemplateId());
+ product.setTemplateRowIndex(item.getTemplateRowIndex());
+ product.setSonLaboratory(DIRECT_TEMPLATE_LABORATORY);
+ product.setState(1);
+ product.setSort(productSort++);
+ insProductMapper.insert(product);
+ }
+ saveTemplateSnapshots(order.getId(), selections);
+ return order.getId();
+ }
+
+ private void saveTemplateSnapshots(Integer orderId, List<OrderTemplateSelectionDto> selections) {
+ for (OrderTemplateSelectionDto selection : selections) {
+ StandardTemplate template = standardTemplateService.getById(selection.getTemplateId());
+ if (template == null) {
+ throw new ErrorException("鍘熷璁板綍妯℃澘涓嶅瓨鍦�");
+ }
+ InsOrderStandardTemplate snapshot = new InsOrderStandardTemplate();
+ snapshot.setInsOrderId(orderId);
+ snapshot.setTemplateId(template.getId());
+ snapshot.setName(template.getName());
+ snapshot.setNumber(template.getNumber());
+ snapshot.setRemark(template.getRemark());
+ snapshot.setThing(template.getThing());
+ snapshot.setSort(selection.getSort());
+ insOrderStandardTemplateMapper.insert(snapshot);
+ }
}
/**
@@ -438,9 +632,33 @@
list = insSampleMapper.selectSampleProductListByOrderId2(id);
}
Map<String, Object> map1 = insSampleMapper.selectInsOrder(id);
+ List<InsSample> orderSamples = insSampleMapper.selectList(
+ Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getInsOrderId, id)
+ .select(InsSample::getSampleCode)
+ .orderByAsc(InsSample::getId));
+ List<OrderTemplateSummaryVo> templateList = insOrderStandardTemplateMapper.selectList(
+ Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+ .eq(InsOrderStandardTemplate::getInsOrderId, id)
+ .orderByAsc(InsOrderStandardTemplate::getSort,
+ InsOrderStandardTemplate::getId))
+ .stream()
+ .map(template -> {
+ OrderTemplateSummaryVo summary = new OrderTemplateSummaryVo();
+ summary.setTemplateId(template.getTemplateId());
+ summary.setName(template.getName());
+ summary.setNumber(template.getNumber());
+ summary.setRemark(template.getRemark());
+ summary.setSort(template.getSort());
+ return summary;
+ })
+ .collect(Collectors.toList());
map.put("insOrder", insOrder);
map.put("sampleProduct", list);
+ // 鏍峰搧缂栧彿鐩存帴浠庢牱鍝佽〃璇诲彇锛屼笉渚濊禆妫�楠岄」鐩叧鑱旀煡璇㈡槸鍚︽湁缁撴灉銆�
+ map.put("sampleCode", orderSamples.isEmpty() ? null : orderSamples.get(0).getSampleCode());
map.put("insOrderTemplate", map1);
+ map.put("templateList", templateList);
return map;
}
@@ -454,24 +672,15 @@
insOrder.setExamineTime(LocalDateTime.now());
if (insOrder.getState() == 1) {
//瀹℃牳閫氳繃鎵嶄細鐢熸垚濮旀墭缂栧彿
- // todo: 妫�楠岀被鍨嬬紪鍙�
InsOrder order = this.getById(insOrder.getId());
- String code = "";
- switch (order.getOrderType()) {
- case InsOrderTypeConstants.SPOT_CHECK:
- code = "C";
- break;
- case InsOrderTypeConstants.CUSTOMER_ORDERED:
- code = "W";
- break;
- case InsOrderTypeConstants.ENTER_THE_FACTORY:
- case InsOrderTypeConstants.QUARTERLY_TEST:
- code = "Y";
- break;
- }
- // 鐢熸垚缂栧彿
- String no = numberGenerator.generateNumberWithPrefix(3,
- "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+ // 濮旀墭缂栧彿鎸夐�佹牱鏃ユ湡鐙珛娴佹按锛屼緥濡傦細LMSY-20260909-01銆�
+ // 鍘嗗彶/澶栭儴璁㈠崟鏈~鍐欓�佹牱鏃ユ湡鏃跺洖閫�鍒板綋澶╋紝閬垮厤褰卞搷鍘熸湁娴佺▼銆�
+ LocalDate entrustDate = order.getSampleDate() == null ? LocalDate.now() : order.getSampleDate();
+ String entrustCodePrefix = "LMSY-"
+ + entrustDate.format(DateTimeFormatter.BASIC_ISO_DATE)
+ + "-";
+ String no = numberGenerator.generateNumberWithPrefix(2,
+ entrustCodePrefix,
InsOrder::getEntrustCode);
// 鍒ゆ柇鏄惁鏄搴︽楠�, 鏄搴︽楠屽彇娑堝師鏉愭枡瀛e害妫�楠屼笅鍗�
if (InsOrderTypeConstants.QUARTERLY_TEST.equals(order.getOrderType())) {
@@ -514,9 +723,43 @@
@Override
public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
Map<String, Object> map = new HashMap<>();
- InsOrder insOrder = insOrderMapper.selectById(id);
+// InsOrder insOrder = insOrderMapper.selectById(id);
+ IfsOrderVO ifsOrderVO = insOrderMapper.selectOrderInfoById(id);
+ Map<Integer, List<Integer>> templateDeviceIds = insOrderTemplateDeviceMapper.selectList(
+ Wrappers.<InsOrderTemplateDevice>lambdaQuery()
+ .eq(InsOrderTemplateDevice::getInsOrderId, id)
+ .orderByAsc(InsOrderTemplateDevice::getSort,
+ InsOrderTemplateDevice::getId))
+ .stream().collect(Collectors.groupingBy(
+ InsOrderTemplateDevice::getTemplateId,
+ LinkedHashMap::new,
+ Collectors.mapping(InsOrderTemplateDevice::getDeviceId, Collectors.toList())));
+ List<TemplateConditionVo> templateConditions = insOrderStandardTemplateMapper.selectList(
+ Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+ .eq(InsOrderStandardTemplate::getInsOrderId, id)
+ .select(InsOrderStandardTemplate::getTemplateId,
+ InsOrderStandardTemplate::getTemperature,
+ InsOrderStandardTemplate::getHumidity,
+ InsOrderStandardTemplate::getDetectionTime,
+ InsOrderStandardTemplate::getDetectionPlace,
+ InsOrderStandardTemplate::getInsResult)
+ .orderByAsc(InsOrderStandardTemplate::getSort,
+ InsOrderStandardTemplate::getId))
+ .stream().map(snapshot -> {
+ TemplateConditionVo condition = new TemplateConditionVo();
+ condition.setTemplateId(snapshot.getTemplateId());
+ condition.setTemperature(snapshot.getTemperature());
+ condition.setHumidity(snapshot.getHumidity());
+ condition.setDetectionTime(snapshot.getDetectionTime());
+ condition.setDetectionPlace(snapshot.getDetectionPlace());
+ condition.setInsResult(snapshot.getInsResult());
+ condition.setDeviceIds(templateDeviceIds.getOrDefault(
+ snapshot.getTemplateId(), Collections.emptyList()));
+ return condition;
+ }).collect(Collectors.toList());
+ ifsOrderVO.setTemplateConditions(templateConditions);
List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
- map.put("insOrder", insOrder);
+ map.put("insOrder", ifsOrderVO);
map.put("sampleProduct", list);
//鏌ヨ鎵�鏈夎褰曟ā鐗堝幓閲�
List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
@@ -638,12 +881,6 @@
if(isSplitOrder){
ifsInventoryQuantity.setIsSplitOrder(1);
}
- // 鏌ヨ浜т笟閾炬娴嬫暟鎹�
- String industryChainAttrFields = IndustryChainUtils.getIndustryChainAttrFields(ifsInventoryQuantity.getOrderNo(),
- ifsInventoryQuantity.getLineNo(),
- ifsInventoryQuantity.getReleaseNo());
- ifsInventoryQuantity.setIndustryChain(industryChainAttrFields);
-
ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
}
}
@@ -791,6 +1028,9 @@
ifsInventoryQuantity.setIsCopper(1);
ifsInventoryQuantity.setIsQuarter(0);
ifsInventoryQuantity.setInspectStatus(0);
+ //閾滄潗鏂欎笅鍗曢粯璁ゅ��
+ ifsInventoryQuantity.setOrderType(OrderType.RAW.getValue());
+ ifsInventoryQuantity.setMaterialProp("01Cu");
ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
@@ -800,10 +1040,8 @@
ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
-
insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
insOrder.setState(1);
-
upInsOrderOfState(insOrder);
upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), "鍘熸潗鏂�");
@@ -869,6 +1107,19 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateInsOrder(InsOrderUpdateDto insOrderUpdateDto) {
+ InsOrder currentOrder = insOrderMapper.selectById(insOrderUpdateDto.getInsOrder().getId());
+ if (currentOrder == null || !Objects.equals(currentOrder.getState(), 2)) {
+ throw new ErrorException("鍙湁閫�鍥炵殑妫�楠屽崟鍙互淇敼");
+ }
+ boolean hasSelectedProduct = CollectionUtils.isNotEmpty(insOrderUpdateDto.getSampleProduct())
+ && insOrderUpdateDto.getSampleProduct().stream()
+ .filter(sample -> CollectionUtils.isNotEmpty(sample.getInsProduct()))
+ .flatMap(sample -> sample.getInsProduct().stream())
+ .anyMatch(product -> Objects.equals(product.getState(), 1));
+ if (!hasSelectedProduct) {
+ throw new ErrorException("璇疯嚦灏戦�夋嫨涓�涓楠岄」");
+ }
+
// 淇敼璁㈠崟
insOrderUpdateDto.getInsOrder().setState(0);
insOrderUpdateDto.getInsOrder().setTell("");
@@ -876,11 +1127,50 @@
// 淇敼妫�楠岄」
for (SampleProductDto sampleProductDto : insOrderUpdateDto.getSampleProduct()) {
+ Long sampleCount = insSampleMapper.selectCount(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getId, sampleProductDto.getId())
+ .eq(InsSample::getInsOrderId, insOrderUpdateDto.getInsOrder().getId()));
+ if (sampleCount == 0) {
+ throw new ErrorException("妫�楠屾牱鍝佹暟鎹紓甯�");
+ }
+
insSampleService.update(Wrappers.<InsSample>lambdaUpdate()
.eq(InsSample::getId, sampleProductDto.getId())
.set(InsSample::getSpecialStandardMethod, sampleProductDto.getSpecialStandardMethod()));
- insProductService.updateBatchById(sampleProductDto.getInsProduct());
+ List<InsProduct> products = sampleProductDto.getInsProduct();
+ if (CollectionUtils.isEmpty(products)) {
+ continue;
+ }
+
+ Set<Integer> productIds = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, sampleProductDto.getId()))
+ .stream()
+ .map(InsProduct::getId)
+ .collect(Collectors.toSet());
+ if (products.stream().anyMatch(product -> product.getId() != null && !productIds.contains(product.getId()))) {
+ throw new ErrorException("妫�楠岄」鏁版嵁寮傚父");
+ }
+
+ List<Integer> removedIds = products.stream()
+ .filter(product -> product.getId() != null && !Objects.equals(product.getState(), 1))
+ .map(InsProduct::getId)
+ .collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(removedIds)) {
+ insProductService.removeByIds(removedIds);
+ }
+
+ List<InsProduct> existingProducts = products.stream()
+ .filter(product -> product.getId() != null && Objects.equals(product.getState(), 1))
+ .collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(existingProducts)) {
+ insProductService.updateBatchById(existingProducts);
+ }
+
+ List<InsProduct> newProducts = products.stream()
+ .filter(product -> product.getId() == null && Objects.equals(product.getState(), 1))
+ .collect(Collectors.toList());
+ addInsProductMethod(sampleProductDto.getId(), newProducts);
}
return true;
@@ -896,6 +1186,11 @@
return insOrderMapper.labelOrderPrinting(ids);
}
+ @Override
+ public List<InventoryDetailDTO> labelOutsideOrderPrinting(List<Integer> ids) {
+ return insOrderMapper.labelOutsideOrderPrinting(ids);
+ }
+
/**
* 鏍规嵁鏍峰搧id鏌ヨ妫�楠岄」鏍�
* @param insSampleId
@@ -907,11 +1202,18 @@
InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
.eq(InsProduct::getInsSampleId, insSampleId)
.last("limit 1"));
- String tree = insProduct.getFactory() + " - " +
- insProduct.getLaboratory() + " - " +
- insProduct.getSampleType() + " - " +
- insProduct.getSample() + " - " +
- insProduct.getModel();
+ String tree;
+ if (insProduct.getSampleType() == null && insProduct.getModel() == null
+ && StringUtils.isNotBlank(insProduct.getLaboratory())
+ && StringUtils.isNotBlank(insProduct.getSample())) {
+ tree = StandardTreePathParser.canonical(insProduct.getLaboratory(), insProduct.getSample());
+ } else {
+ tree = insProduct.getFactory() + " - " +
+ insProduct.getLaboratory() + " - " +
+ insProduct.getSampleType() + " - " +
+ insProduct.getSample() + " - " +
+ insProduct.getModel();
+ }
// 鏌ヨ鏍囧噯鏍�
List<StandardProductList> standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
.eq(StandardProductList::getStandardMethodListId, insProduct.getStandardMethodListId())
@@ -1204,7 +1506,14 @@
* TODO 鍚庣画闇�瑕佽皟鐢↖FS鐨勬帴鍙� 绉诲叆鐨勫簱浣嶅彿 toLocation
*/
// 妫�楠屽悗绉诲簱
- toLocation = "1301";
+ //1301:鍘熸潗鏂欏悎鏍煎簱锛孋P-02-001:鎴愬搧搴�
+ if(StringUtils.equals(inventoryQuantity.getOrderType(), OrderType.RAW.getValue())){
+ toLocation = "1301";
+ }else if(StringUtils.equals(inventoryQuantity.getOrderType(), OrderType.WG.getValue())){
+ toLocation = "CP-02-001";
+ }else{
+ toLocation = "1301";
+ }
Map<String, Object> moveResultMap = new HashMap<>();
List<Map<String, Object>> moveResultList = new ArrayList<>();
Map<String, Object> moveMap = new HashMap<>();
--
Gitblit v1.9.3