From 5a90ac8955f198f21954a3dca0443d1c5892bf0b Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期二, 03 十一月 2026 18:08:29 +0800
Subject: [PATCH] 成品下单批量下单接口与检验委托单批次合并(batch_no),含数据库加列脚本
---
cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 582 insertions(+), 44 deletions(-)
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java
index 3bf8cd5..e11c031 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InspectionOrderServiceImpl.java
@@ -3,6 +3,7 @@
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -20,6 +21,7 @@
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsReportService;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.process.dto.InspectionOrderDetailExportDto;
import com.ruoyi.process.dto.InspectionOrderDto;
import com.ruoyi.process.dto.InspectionOrderExportDto;
import com.ruoyi.process.mapper.InspectionOrderMapper;
@@ -90,14 +92,86 @@
/**
- * 妫�楠屽鎵樺崟鍒嗛〉鏌ヨ
- * @param page
- * @param InspectionOrder
- * @return
+ * 妫�楠屽鎵樺崟鍒嗛〉鏌ヨ锛氬悓涓�鎵规鐨勬牱鍝佸悎骞舵垚涓�琛屽睍绀恒��
+ * 杩囨护鏉′欢鍏堝尮閰嶈鍗曪紝鍐嶆寜鎵规琛ュ叏鎴愬憳锛屾渶鍚庡湪鍐呭瓨閲屽垎缁勫拰鍒嗛〉銆�
*/
@Override
- public IPage<InspectionOrderDto> pageInspectionOrder(Page page, InspectionOrder InspectionOrder) {
- return baseMapper.pageInspectionOrder(page, QueryWrappers.queryWrappers(InspectionOrder));
+ public IPage<InspectionOrderDto> pageInspectionOrder(Page page, InspectionOrder inspectionOrderQuery) {
+ QueryWrapper<InspectionOrder> queryWrapper = QueryWrappers.queryWrappers(inspectionOrderQuery);
+ queryWrapper.orderByDesc("create_time").orderByDesc("inspection_order_id");
+ List<InspectionOrder> matched = baseMapper.selectList(queryWrapper);
+
+ Page<InspectionOrderDto> result = new Page<>(page.getCurrent(), page.getSize(), 0);
+ if (matched.isEmpty()) {
+ result.setRecords(Collections.emptyList());
+ return result;
+ }
+
+ Set<String> batchNos = matched.stream()
+ .map(InspectionOrder::getBatchNo)
+ .filter(StrUtil::isNotBlank)
+ .collect(Collectors.toSet());
+ List<InspectionOrder> allOrders = new ArrayList<>(matched);
+ if (!batchNos.isEmpty()) {
+ Set<Integer> matchedIds = matched.stream()
+ .map(InspectionOrder::getInspectionOrderId)
+ .collect(Collectors.toSet());
+ allOrders.addAll(baseMapper.selectList(Wrappers.<InspectionOrder>lambdaQuery()
+ .in(InspectionOrder::getBatchNo, batchNos)
+ .notIn(InspectionOrder::getInspectionOrderId, matchedIds)));
+ }
+
+ Map<String, List<InspectionOrder>> membersByGroup = allOrders.stream()
+ .collect(Collectors.groupingBy(this::batchGroupKey));
+ Map<Integer, String> groupKeyById = allOrders.stream()
+ .collect(Collectors.toMap(InspectionOrder::getInspectionOrderId, this::batchGroupKey, (first, ignored) -> first));
+ Map<String, Integer> detailCountByGroup = new HashMap<>();
+ List<InspectionOrderDetail> details = inspectionOrderDetailService.list(
+ Wrappers.<InspectionOrderDetail>lambdaQuery()
+ .in(InspectionOrderDetail::getInspectionOrderId, groupKeyById.keySet())
+ .select(InspectionOrderDetail::getInspectionOrderId));
+ for (InspectionOrderDetail detail : details) {
+ String groupKey = groupKeyById.get(detail.getInspectionOrderId());
+ if (groupKey != null) {
+ detailCountByGroup.merge(groupKey, 1, Integer::sum);
+ }
+ }
+
+ // 鎸夊尮閰嶈鍗曠殑鍏堝悗椤哄簭杈撳嚭鍒嗙粍锛涗唬琛ㄥ崟鍥哄畾鍙栫粍鍐呮渶鏃╃殑璁㈠崟锛屼繚璇佺炕椤电ǔ瀹�
+ LinkedHashMap<String, InspectionOrder> orderedGroups = new LinkedHashMap<>();
+ for (InspectionOrder order : matched) {
+ orderedGroups.putIfAbsent(batchGroupKey(order), order);
+ }
+ List<InspectionOrderDto> groups = new ArrayList<>();
+ for (Map.Entry<String, InspectionOrder> entry : orderedGroups.entrySet()) {
+ List<InspectionOrder> members = membersByGroup.getOrDefault(entry.getKey(),
+ Collections.singletonList(entry.getValue()));
+ InspectionOrder representative = members.stream()
+ .min(Comparator.comparing(InspectionOrder::getInspectionOrderId))
+ .orElse(entry.getValue());
+ InspectionOrderDto dto = new InspectionOrderDto();
+ BeanUtils.copyProperties(representative, dto);
+ dto.setMemberCount(members.size());
+ dto.setDetailCount(detailCountByGroup.getOrDefault(entry.getKey(), 0));
+ groups.add(dto);
+ }
+
+ long total = groups.size();
+ int from = (int) Math.min(total, Math.max(0L, (page.getCurrent() - 1) * page.getSize()));
+ int to = (int) Math.min(total, from + page.getSize());
+ result.setTotal(total);
+ result.setRecords(from >= to ? Collections.emptyList() : new ArrayList<>(groups.subList(from, to)));
+ return result;
+ }
+
+ private String batchGroupKey(InspectionOrder order) {
+ return StrUtil.isBlank(order.getBatchNo()) ? "#" + order.getInspectionOrderId() : order.getBatchNo();
+ }
+
+ private List<InspectionOrder> listBatchMembers(String batchNo) {
+ return baseMapper.selectList(Wrappers.<InspectionOrder>lambdaQuery()
+ .eq(InspectionOrder::getBatchNo, batchNo)
+ .orderByAsc(InspectionOrder::getInspectionOrderId));
}
/**
@@ -146,14 +220,7 @@
/*鏂板7.8鎶ュ憡缁撴灉*/
ProcessReport processReport = new ProcessReport();
processReport.setInspectionOrderId(inspectionOrder.getInsOrderId());
- processReport.setInsReportCode(inspectionOrder.getEntrustCode());//鎶ュ憡缂栧彿=濮旀墭缂栧彿
- //椤垫暟
- try {
- com.aspose.words.Document doc = new com.aspose.words.Document(path);
- processReport.setPages(doc.getPageCount()+"");
- } catch (Exception e) {
- }
- processReport.setNumber("1");//鍙戦�佷唤鏁伴粯璁�1
+ processReport.setInsReportCode(insReport.getCode());//鎶ュ憡缂栧彿浣跨敤姝e紡鎶ュ憡缂栧彿
processReport.setSend(inspectionOrder.getCommissionUnit());//鍙戝線浣曞=濮旀墭鍗曚綅
processReport.setMethod(inspectionOrder.getSend()==1?"鑷彇":"鍏朵粬");//鍙戦�佹柟寮�
processReport.setSendTime(insReport.getRatifyTime().toLocalDate());//鍙戦�佹棩鏈�
@@ -227,6 +294,77 @@
.collect(Collectors.toSet());
}
+ private void syncHeaderSampleFields(InspectionOrderDto inspectionOrder) {
+ if (CollectionUtils.isEmpty(inspectionOrder.getOrderDetailList())) {
+ return;
+ }
+ InspectionOrderDetail first = inspectionOrder.getOrderDetailList().get(0);
+ if (StrUtil.isNotBlank(first.getSampleName())) {
+ inspectionOrder.setSampleName(first.getSampleName());
+ }
+ if (StrUtil.isNotBlank(first.getQuantity())) {
+ inspectionOrder.setQuantity(first.getQuantity());
+ }
+ if (StrUtil.isNotBlank(first.getSampleStatus())) {
+ inspectionOrder.setSampleStatus(first.getSampleStatus());
+ }
+ }
+
+ private void applyRequirementFields(InspectionOrderDto inspectionOrder) {
+ if (inspectionOrder.getSampleDisposal() != null) {
+ inspectionOrder.setProcessing(Integer.valueOf(2).equals(inspectionOrder.getSampleDisposal()) ? 1 : 0);
+ }
+ if (inspectionOrder.getReportDelivery() != null) {
+ inspectionOrder.setSend(Integer.valueOf(1).equals(inspectionOrder.getReportDelivery()) ? 1 : 0);
+ }
+ }
+
+ private void syncInsOrderRequirement(InspectionOrderDto inspectionOrder) {
+ if (inspectionOrder.getInsOrderId() == null) {
+ return;
+ }
+ InsOrder insOrder = new InsOrder();
+ insOrder.setId(inspectionOrder.getInsOrderId());
+ insOrder.setSubcontractType(inspectionOrder.getSubcontractType());
+ if (inspectionOrder.getSubcontractType() != null) {
+ insOrder.setSubcontractCompany(Integer.valueOf(1).equals(inspectionOrder.getSubcontractType())
+ ? (inspectionOrder.getSubcontractCompany() == null ? "" : inspectionOrder.getSubcontractCompany())
+ : "");
+ }
+ insOrder.setSampleDisposal(inspectionOrder.getSampleDisposal());
+ insOrder.setResultEvaluation(inspectionOrder.getResultEvaluation());
+ insOrder.setReportDelivery(inspectionOrder.getReportDelivery());
+ insOrder.setReportAddress(inspectionOrder.getReportAddress());
+ insOrder.setReportReceiver(inspectionOrder.getReportReceiver());
+ if (inspectionOrder.getSampleDisposal() != null) {
+ insOrder.setProcessing(inspectionOrder.getProcessing());
+ }
+ if (inspectionOrder.getReportDelivery() != null) {
+ insOrder.setSend(inspectionOrder.getSend());
+ }
+ insOrderService.updateById(insOrder);
+ }
+
+ private void fillRequirementFields(InspectionOrder inspectionOrder, InspectionOrderDto dto, InsOrder insOrder) {
+ Integer sampleDisposal = insOrder == null ? null : insOrder.getSampleDisposal();
+ if (sampleDisposal == null) {
+ sampleDisposal = inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 1 ? 2 : 1;
+ }
+ Integer reportDelivery = insOrder == null ? null : insOrder.getReportDelivery();
+ if (reportDelivery == null) {
+ reportDelivery = inspectionOrder.getSend() != null && inspectionOrder.getSend() == 1 ? 1 : 2;
+ }
+ Integer subcontractType = insOrder != null && insOrder.getSubcontractType() != null ? insOrder.getSubcontractType() : 0;
+ dto.setSubcontractType(subcontractType);
+ dto.setSubcontractCompany(subcontractType == 1 && insOrder != null && insOrder.getSubcontractCompany() != null
+ ? insOrder.getSubcontractCompany() : "");
+ dto.setSampleDisposal(sampleDisposal);
+ dto.setResultEvaluation(insOrder != null && insOrder.getResultEvaluation() != null ? insOrder.getResultEvaluation() : 0);
+ dto.setReportDelivery(reportDelivery);
+ dto.setReportAddress(insOrder != null && insOrder.getReportAddress() != null ? insOrder.getReportAddress() : "");
+ dto.setReportReceiver(insOrder != null && insOrder.getReportReceiver() != null ? insOrder.getReportReceiver() : "");
+ }
+
/**
* 妫�楠屽鎵樺崟淇敼
* @param InspectionOrder
@@ -234,24 +372,143 @@
*/
@Override
public boolean updateInspectionOrder(InspectionOrderDto InspectionOrder) {
+ if (StrUtil.isNotBlank(InspectionOrder.getBatchNo())) {
+ return updateBatchInspectionOrder(InspectionOrder);
+ }
+ applyRequirementFields(InspectionOrder);
+ syncHeaderSampleFields(InspectionOrder);
baseMapper.updateById(InspectionOrder);
- // 鍒犻櫎涔嬪墠鐨勮鎯�
- inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
- .eq(InspectionOrderDetail::getInspectionOrderId, InspectionOrder.getInspectionOrderId()));
+ // 鏄庣粏涓� null 琛ㄧず鏈涓嶇淮鎶ゆ槑缁嗭紝淇濈暀鍘熸暟鎹紱绌烘暟缁勮〃绀烘竻绌�
+ if (InspectionOrder.getOrderDetailList() != null) {
+ inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
+ .eq(InspectionOrderDetail::getInspectionOrderId, InspectionOrder.getInspectionOrderId()));
- // 鏂板璇︽儏
- for (InspectionOrderDetail InspectionOrderDetail : InspectionOrder.getOrderDetailList()) {
- InspectionOrderDetail.setInspectionOrderId(InspectionOrder.getInspectionOrderId());
+ if (CollectionUtils.isNotEmpty(InspectionOrder.getOrderDetailList())) {
+ for (InspectionOrderDetail InspectionOrderDetail : InspectionOrder.getOrderDetailList()) {
+ InspectionOrderDetail.setInspectionOrderId(InspectionOrder.getInspectionOrderId());
+ }
+ inspectionOrderDetailService.saveBatch(InspectionOrder.getOrderDetailList());
+ }
}
- inspectionOrderDetailService.saveBatch(InspectionOrder.getOrderDetailList());
- //淇敼7.9鎶ュ憡缁撴灉
- ProcessReport processReport = processReportService.getOne(Wrappers.<ProcessReport>lambdaQuery().eq(ProcessReport::getInspectionOrderId, InspectionOrder.getInspectionOrderId()));
- processReport.setInsReportCode(InspectionOrder.getEntrustCode());//鎶ュ憡缂栧彿=濮旀墭缂栧彿
- processReportService.updateById(processReport);
+ syncInsOrderRequirement(InspectionOrder);
+ syncProcessReport(InspectionOrder.getInsOrderId());
return true;
+ }
+
+ /**
+ * 鍚堝苟缂栬緫锛氬叕鍏卞鎵樹俊鎭箍鎾埌鏁存壒锛屾槑缁嗘寜琛屾墍灞炲鎵樺崟鍐欏洖銆�
+ */
+ private boolean updateBatchInspectionOrder(InspectionOrderDto inspectionOrder) {
+ List<InspectionOrder> members = listBatchMembers(inspectionOrder.getBatchNo());
+ if (members.isEmpty()) {
+ throw new ErrorException("鎵规鏁版嵁涓嶅瓨鍦�");
+ }
+ Set<Integer> memberIds = members.stream()
+ .map(InspectionOrder::getInspectionOrderId)
+ .collect(Collectors.toSet());
+ Integer representativeId = inspectionOrder.getInspectionOrderId();
+ if (representativeId == null || !memberIds.contains(representativeId)) {
+ representativeId = members.get(0).getInspectionOrderId();
+ }
+ applyRequirementFields(inspectionOrder);
+
+ for (InspectionOrder member : members) {
+ copyBatchHeader(inspectionOrder, member);
+ baseMapper.updateById(member);
+ }
+
+ if (inspectionOrder.getOrderDetailList() != null) {
+ inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
+ .in(InspectionOrderDetail::getInspectionOrderId, memberIds));
+ if (CollectionUtils.isNotEmpty(inspectionOrder.getOrderDetailList())) {
+ Map<Integer, List<InspectionOrderDetail>> detailsByOwner = new LinkedHashMap<>();
+ for (InspectionOrderDetail detail : inspectionOrder.getOrderDetailList()) {
+ Integer ownerId = detail.getInspectionOrderId();
+ if (ownerId == null || !memberIds.contains(ownerId)) {
+ ownerId = representativeId;
+ }
+ detail.setInspectionOrderDetailId(null);
+ detail.setInspectionOrderId(ownerId);
+ detailsByOwner.computeIfAbsent(ownerId, key -> new ArrayList<>()).add(detail);
+ }
+ final Integer fallbackOwnerId = representativeId;
+ for (Map.Entry<Integer, List<InspectionOrderDetail>> entry : detailsByOwner.entrySet()) {
+ InspectionOrder member = members.stream()
+ .filter(item -> item.getInspectionOrderId().equals(entry.getKey()))
+ .findFirst()
+ .orElse(members.stream()
+ .filter(item -> item.getInspectionOrderId().equals(fallbackOwnerId))
+ .findFirst().orElse(null));
+ InspectionOrderDetail first = entry.getValue().get(0);
+ if (member != null) {
+ if (StrUtil.isNotBlank(first.getSampleName())) {
+ member.setSampleName(first.getSampleName());
+ }
+ if (StrUtil.isNotBlank(first.getQuantity())) {
+ member.setQuantity(first.getQuantity());
+ }
+ if (StrUtil.isNotBlank(first.getSampleStatus())) {
+ member.setSampleStatus(first.getSampleStatus());
+ }
+ baseMapper.updateById(member);
+ }
+ inspectionOrderDetailService.saveBatch(entry.getValue());
+ }
+ }
+ }
+
+ for (InspectionOrder member : members) {
+ InspectionOrderDto memberDto = new InspectionOrderDto();
+ BeanUtils.copyProperties(inspectionOrder, memberDto);
+ memberDto.setInspectionOrderId(member.getInspectionOrderId());
+ memberDto.setInsOrderId(member.getInsOrderId());
+ memberDto.setEntrustCode(member.getEntrustCode());
+ memberDto.setBatchNo(member.getBatchNo());
+ syncInsOrderRequirement(memberDto);
+ syncProcessReport(member.getInsOrderId());
+ }
+ return true;
+ }
+
+ private void copyBatchHeader(InspectionOrderDto source, InspectionOrder target) {
+ target.setCommissionUnit(source.getCommissionUnit());
+ target.setCommissionDate(source.getCommissionDate());
+ target.setCommissionUser(source.getCommissionUser());
+ target.setCommissionPhone(source.getCommissionPhone());
+ target.setProduction(source.getProduction());
+ target.setIsLeave(source.getIsLeave());
+ target.setSampleSource(source.getSampleSource());
+ target.setProcessing(source.getProcessing());
+ target.setSend(source.getSend());
+ target.setCriterionRule(source.getCriterionRule());
+ target.setCriterionRuleRemark(source.getCriterionRuleRemark());
+ target.setGeneralOfficeUser(source.getGeneralOfficeUser());
+ target.setReceiptData(source.getReceiptData());
+ target.setReceiveStatus(source.getReceiveStatus());
+ target.setFeeStatus(source.getFeeStatus());
+ target.setSampleTakerUser(source.getSampleTakerUser());
+ target.setSampleData(source.getSampleData());
+ target.setAppointed(source.getAppointed());
+ }
+
+ private void syncProcessReport(Integer insOrderId) {
+ if (insOrderId == null) {
+ return;
+ }
+ ProcessReport processReport = processReportService.getOne(Wrappers.<ProcessReport>lambdaQuery()
+ .eq(ProcessReport::getInspectionOrderId, insOrderId)
+ .last("limit 1"));
+ InsReport insReport = insReportService.getOne(Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getInsOrderId, insOrderId)
+ .orderByDesc(InsReport::getId)
+ .last("limit 1"));
+ if (processReport != null && insReport != null) {
+ processReport.setInsReportCode(insReport.getCode());//鎶ュ憡缂栧彿浣跨敤姝e紡鎶ュ憡缂栧彿
+ processReportService.updateById(processReport);
+ }
}
/**
@@ -261,12 +518,15 @@
*/
@Override
public boolean delInspectionOrder(Integer inspectionOrderId) {
+ InspectionOrder order = baseMapper.selectById(inspectionOrderId);
inspectionOrderDetailService.remove(Wrappers.<InspectionOrderDetail>lambdaQuery()
.eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId));
baseMapper.deleteById(inspectionOrderId);
- //鍒犻櫎7.8鎶ュ憡
- processReportService.remove(Wrappers.<ProcessReport>lambdaQuery()
- .eq(ProcessReport::getInspectionOrderId, inspectionOrderId));
+ //鍒犻櫎7.8鎶ュ憡锛堣琛� inspection_order_id 瀛樼殑鏄垚鍝佽鍗昳d锛�
+ if (order != null && order.getInsOrderId() != null) {
+ processReportService.remove(Wrappers.<ProcessReport>lambdaQuery()
+ .eq(ProcessReport::getInspectionOrderId, order.getInsOrderId()));
+ }
//鍒犻櫎瀵瑰簲鐨勮澶囦娇鐢ㄨ褰�
processOrderDeviceService.remove(Wrappers.<ProcessOrderDevice>lambdaQuery()
.eq(ProcessOrderDevice::getInspectionOrderId, inspectionOrderId));
@@ -284,6 +544,21 @@
return true;
}
+ @Override
+ public boolean delInspectionOrder(Integer inspectionOrderId, String batchNo) {
+ if (StrUtil.isBlank(batchNo)) {
+ return delInspectionOrder(inspectionOrderId);
+ }
+ List<InspectionOrder> members = listBatchMembers(batchNo);
+ if (members.isEmpty()) {
+ return delInspectionOrder(inspectionOrderId);
+ }
+ for (InspectionOrder member : members) {
+ delInspectionOrder(member.getInspectionOrderId());
+ }
+ return true;
+ }
+
/**
* 妫�楠屽鎵樺崟鏌ョ湅璇︽儏
* @param inspectionOrderId
@@ -295,9 +570,81 @@
InspectionOrderDto inspectionOrderDto = new InspectionOrderDto();
BeanUtils.copyProperties(inspectionOrder, inspectionOrderDto);
+ InsOrder insOrder = inspectionOrder.getInsOrderId() == null ? null : insOrderService.getById(inspectionOrder.getInsOrderId());
+ fillRequirementFields(inspectionOrder, inspectionOrderDto, insOrder);
+ if (inspectionOrderDto.getSampleSource() == null) {
+ inspectionOrderDto.setSampleSource(1);
+ }
+ if (inspectionOrderDto.getReceiveStatus() == null) {
+ inspectionOrderDto.setReceiveStatus(1);
+ }
+ if (inspectionOrderDto.getFeeStatus() == null) {
+ inspectionOrderDto.setFeeStatus(2);
+ }
+
// 鏌ヨ璇︾粏淇℃伅
inspectionOrderDto.setOrderDetailList(inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery()
- .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)));
+ .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)
+ .orderByAsc(InspectionOrderDetail::getInspectionOrderDetailId)));
+ return inspectionOrderDto;
+ }
+
+ /**
+ * 鎸夋壒娆℃煡鐪嬶細澶翠俊鎭彇浠h〃鍗曪紝鏄庣粏鍚堝苟鏁存壒鏍峰搧銆�
+ */
+ @Override
+ public InspectionOrderDto getInspectionOrderOne(Integer inspectionOrderId, String batchNo) {
+ if (StrUtil.isBlank(batchNo)) {
+ return getInspectionOrderOne(inspectionOrderId);
+ }
+ List<InspectionOrder> members = listBatchMembers(batchNo);
+ if (members.isEmpty()) {
+ return getInspectionOrderOne(inspectionOrderId);
+ }
+ InspectionOrder representative = members.stream()
+ .filter(item -> item.getInspectionOrderId().equals(inspectionOrderId))
+ .findFirst()
+ .orElse(members.get(0));
+ InspectionOrderDto inspectionOrderDto = new InspectionOrderDto();
+ BeanUtils.copyProperties(representative, inspectionOrderDto);
+
+ InsOrder insOrder = representative.getInsOrderId() == null ? null
+ : insOrderService.getById(representative.getInsOrderId());
+ fillRequirementFields(representative, inspectionOrderDto, insOrder);
+ if (inspectionOrderDto.getSampleSource() == null) {
+ inspectionOrderDto.setSampleSource(1);
+ }
+ if (inspectionOrderDto.getReceiveStatus() == null) {
+ inspectionOrderDto.setReceiveStatus(1);
+ }
+ if (inspectionOrderDto.getFeeStatus() == null) {
+ inspectionOrderDto.setFeeStatus(2);
+ }
+ inspectionOrderDto.setMemberCount(members.size());
+
+ Map<Integer, String> entrustCodeById = members.stream()
+ .collect(Collectors.toMap(InspectionOrder::getInspectionOrderId,
+ item -> item.getEntrustCode() == null ? "" : item.getEntrustCode()));
+ List<InspectionOrderDetail> details = inspectionOrderDetailService.list(
+ Wrappers.<InspectionOrderDetail>lambdaQuery()
+ .in(InspectionOrderDetail::getInspectionOrderId, entrustCodeById.keySet())
+ .orderByAsc(InspectionOrderDetail::getInspectionOrderId)
+ .orderByAsc(InspectionOrderDetail::getInspectionOrderDetailId));
+ Map<Integer, List<InspectionOrderDetail>> detailsByOwner = details.stream()
+ .collect(Collectors.groupingBy(InspectionOrderDetail::getInspectionOrderId,
+ LinkedHashMap::new, Collectors.toList()));
+ for (InspectionOrder member : members) {
+ List<InspectionOrderDetail> ownerDetails = detailsByOwner.get(member.getInspectionOrderId());
+ if (CollectionUtils.isEmpty(ownerDetails)) {
+ continue;
+ }
+ List<String> codes = buildDetailEntrustCodes(member.getEntrustCode(), ownerDetails);
+ for (int index = 0; index < ownerDetails.size(); index++) {
+ ownerDetails.get(index).setEntrustCode(codes.get(index));
+ }
+ }
+ inspectionOrderDto.setOrderDetailList(details);
+ inspectionOrderDto.setDetailCount(details.size());
return inspectionOrderDto;
}
@@ -322,6 +669,27 @@
inspectionOrderDto.setAppointed(order.getAppointed());//绾﹀畾鏃堕棿
inspectionOrderDto.setSend(order.getSend());//鎶ュ憡鍙戦�佹柟寮�
inspectionOrderDto.setCommissionPhone(order.getPhone());//鎶ュ憡鍙戦�佹柟寮�
+
+ Integer subcontractType = order.getSubcontractType() == null ? 0 : order.getSubcontractType();
+ inspectionOrderDto.setSubcontractType(subcontractType);
+ inspectionOrderDto.setSubcontractCompany(subcontractType == 1 && order.getSubcontractCompany() != null
+ ? order.getSubcontractCompany() : "");
+ Integer sampleDisposal = order.getSampleDisposal();
+ if (sampleDisposal == null) {
+ sampleDisposal = order.getProcessing() != null && order.getProcessing() == 1 ? 2 : 1;
+ }
+ inspectionOrderDto.setSampleDisposal(sampleDisposal);
+ inspectionOrderDto.setResultEvaluation(order.getResultEvaluation() == null ? 0 : order.getResultEvaluation());
+ Integer reportDelivery = order.getReportDelivery();
+ if (reportDelivery == null) {
+ reportDelivery = order.getSend() != null && order.getSend() == 1 ? 1 : 2;
+ }
+ inspectionOrderDto.setReportDelivery(reportDelivery);
+ inspectionOrderDto.setReportAddress(order.getReportAddress() == null ? "" : order.getReportAddress());
+ inspectionOrderDto.setReportReceiver(order.getReportReceiver() == null ? "" : order.getReportReceiver());
+ inspectionOrderDto.setSampleSource(1);
+ inspectionOrderDto.setReceiveStatus(1);
+ inspectionOrderDto.setFeeStatus(2);
return inspectionOrderDto;
}
@@ -370,16 +738,99 @@
@Override
public void exportInspectionOrder(Integer inspectionOrderId, HttpServletResponse response) {
- InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId);
- InspectionOrderExportDto inspectionOrderExportDto = extracted(inspectionOrder);
- List<InspectionOrderDetail> list = inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery()
- .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId));
- int index = 1;
- for (InspectionOrderDetail inspectionOrderDetail : list) {
- inspectionOrderDetail.setIndex(index);
- index++;
- }
+ exportSingleInspectionOrder(inspectionOrderId, response);
+ }
+ @Override
+ public void exportInspectionOrder(Integer inspectionOrderId, String batchNo, HttpServletResponse response) {
+ if (StrUtil.isBlank(batchNo)) {
+ exportSingleInspectionOrder(inspectionOrderId, response);
+ return;
+ }
+ List<InspectionOrder> members = listBatchMembers(batchNo);
+ if (members.isEmpty()) {
+ exportSingleInspectionOrder(inspectionOrderId, response);
+ return;
+ }
+ InspectionOrder representative = members.stream()
+ .filter(item -> item.getInspectionOrderId().equals(inspectionOrderId))
+ .findFirst()
+ .orElse(members.get(0));
+ InsOrder insOrder = representative.getInsOrderId() == null ? null
+ : insOrderService.getById(representative.getInsOrderId());
+ InspectionOrderExportDto inspectionOrderExportDto = extracted(representative, insOrder);
+
+ Map<Integer, List<InspectionOrderDetail>> detailsByOwner = inspectionOrderDetailService.list(
+ Wrappers.<InspectionOrderDetail>lambdaQuery()
+ .in(InspectionOrderDetail::getInspectionOrderId, members.stream()
+ .map(InspectionOrder::getInspectionOrderId)
+ .collect(Collectors.toList()))
+ .orderByAsc(InspectionOrderDetail::getInspectionOrderId)
+ .orderByAsc(InspectionOrderDetail::getInspectionOrderDetailId))
+ .stream()
+ .collect(Collectors.groupingBy(InspectionOrderDetail::getInspectionOrderId,
+ LinkedHashMap::new, Collectors.toList()));
+
+ List<InspectionOrderDetailExportDto> detailList = new ArrayList<>();
+ for (InspectionOrder member : members) {
+ List<InspectionOrderDetail> ownerDetails = detailsByOwner.get(member.getInspectionOrderId());
+ if (CollectionUtils.isEmpty(ownerDetails)) {
+ continue;
+ }
+ List<String> detailEntrustCodes = buildDetailEntrustCodes(member.getEntrustCode(), ownerDetails);
+ for (int i = 0; i < ownerDetails.size(); i++) {
+ InspectionOrderDetail inspectionOrderDetail = ownerDetails.get(i);
+ InspectionOrderDetailExportDto row = new InspectionOrderDetailExportDto();
+ row.setSampleName(StrUtil.isNotBlank(inspectionOrderDetail.getSampleName())
+ ? inspectionOrderDetail.getSampleName() : member.getSampleName());
+ row.setSampleNumber(inspectionOrderDetail.getSampleNumber());
+ row.setTestItem(inspectionOrderDetail.getTestItem());
+ row.setQuantity(StrUtil.isNotBlank(inspectionOrderDetail.getQuantity())
+ ? inspectionOrderDetail.getQuantity() : member.getQuantity());
+ row.setSampleStatus(StrUtil.isNotBlank(inspectionOrderDetail.getSampleStatus())
+ ? inspectionOrderDetail.getSampleStatus() : member.getSampleStatus());
+ row.setTestStandard(inspectionOrderDetail.getTestStandard());
+ row.setRemark(inspectionOrderDetail.getRemark());
+ row.setEntrustCode(detailEntrustCodes.get(i));
+ detailList.add(row);
+ }
+ }
+ inspectionOrderExportDto.setProjectName(detailList.size() + "涓牱鍝�");
+ writeInspectionOrderExport(inspectionOrderExportDto, detailList, response);
+ }
+
+ private void exportSingleInspectionOrder(Integer inspectionOrderId, HttpServletResponse response) {
+ InspectionOrder inspectionOrder = baseMapper.selectById(inspectionOrderId);
+ InsOrder insOrder = inspectionOrder.getInsOrderId() == null ? null : insOrderService.getById(inspectionOrder.getInsOrderId());
+ InspectionOrderExportDto inspectionOrderExportDto = extracted(inspectionOrder, insOrder);
+ List<InspectionOrderDetail> list = inspectionOrderDetailService.list(Wrappers.<InspectionOrderDetail>lambdaQuery()
+ .eq(InspectionOrderDetail::getInspectionOrderId, inspectionOrderId)
+ .orderByAsc(InspectionOrderDetail::getInspectionOrderDetailId));
+ List<String> detailEntrustCodes = buildDetailEntrustCodes(inspectionOrder.getEntrustCode(), list);
+ List<InspectionOrderDetailExportDto> detailList = new ArrayList<>();
+ for (int i = 0; i < list.size(); i++) {
+ InspectionOrderDetail inspectionOrderDetail = list.get(i);
+ InspectionOrderDetailExportDto row = new InspectionOrderDetailExportDto();
+ row.setSampleName(StrUtil.isNotBlank(inspectionOrderDetail.getSampleName())
+ ? inspectionOrderDetail.getSampleName() : inspectionOrder.getSampleName());
+ row.setSampleNumber(inspectionOrderDetail.getSampleNumber());
+ row.setTestItem(inspectionOrderDetail.getTestItem());
+ row.setQuantity(StrUtil.isNotBlank(inspectionOrderDetail.getQuantity())
+ ? inspectionOrderDetail.getQuantity() : inspectionOrder.getQuantity());
+ row.setSampleStatus(StrUtil.isNotBlank(inspectionOrderDetail.getSampleStatus())
+ ? inspectionOrderDetail.getSampleStatus() : inspectionOrder.getSampleStatus());
+ row.setTestStandard(inspectionOrderDetail.getTestStandard());
+ row.setRemark(inspectionOrderDetail.getRemark());
+ row.setEntrustCode(detailEntrustCodes.get(i));
+ detailList.add(row);
+ }
+ inspectionOrderExportDto.setProjectName(detailList.size() + "涓牱鍝�");
+ writeInspectionOrderExport(inspectionOrderExportDto, detailList, response);
+ }
+
+ private void writeInspectionOrderExport(InspectionOrderExportDto inspectionOrderExportDto,
+ List<InspectionOrderDetailExportDto> detailList,
+ HttpServletResponse response) {
// 鑾峰彇璺緞
InputStream inputStream = this.getClass().getResourceAsStream("/static/inspection-order.docx");
Configure configure = Configure.builder()
@@ -388,13 +839,14 @@
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
new HashMap<String, Object>() {{
put("inspectionOrder", inspectionOrderExportDto);
- put("inspectionOrderDetailList", list);
+ put("inspectionOrderDetailList", detailList);
}});
try {
response.setContentType("application/msword");
String fileName = URLEncoder.encode(
- inspectionOrderExportDto.getSampleName(), "UTF-8");
+ StrUtil.isBlank(inspectionOrderExportDto.getSampleName())
+ ? "瀹㈡埛妫�娴嬪鎵樹功" : inspectionOrderExportDto.getSampleName(), "UTF-8");
response.setHeader("Content-disposition",
"attachment;filename=" + fileName + ".docx");
OutputStream os = response.getOutputStream();
@@ -408,7 +860,7 @@
}
}
- private InspectionOrderExportDto extracted(InspectionOrder inspectionOrder) {
+ private InspectionOrderExportDto extracted(InspectionOrder inspectionOrder, InsOrder insOrder) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
InspectionOrderExportDto inspectionOrderExportDto = new InspectionOrderExportDto();
BeanUtils.copyProperties(inspectionOrder, inspectionOrderExportDto);
@@ -427,13 +879,99 @@
}
inspectionOrderExportDto.setIsLeave1(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() == 1? "鈽�" : "鈻�");
- inspectionOrderExportDto.setIsLeave2(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() == 0? "鈽�" : "鈻�");
- inspectionOrderExportDto.setSend0(inspectionOrder.getSend() != null && inspectionOrder.getSend() == 1? "鈽�" : "鈻�");
- inspectionOrderExportDto.setSend1(inspectionOrder.getSend() != null && inspectionOrder.getSend() == 0? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setIsLeave2(inspectionOrder.getIsLeave() != null && inspectionOrder.getIsLeave() != 1? "鈽�" : "鈻�");
inspectionOrderExportDto.setProcessing0(inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 0? "鈽�" : "鈻�");
inspectionOrderExportDto.setProcessing1(inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 1? "鈽�" : "鈻�");
inspectionOrderExportDto.setCriterionRule0(inspectionOrder.getCriterionRule() != null && inspectionOrder.getCriterionRule() == 0? "鈽�" : "鈻�");
inspectionOrderExportDto.setCriterionRule1(inspectionOrder.getCriterionRule() != null && inspectionOrder.getCriterionRule() == 1? "鈽�" : "鈻�");
+
+ Integer subcontractType = insOrder != null && insOrder.getSubcontractType() != null ? insOrder.getSubcontractType() : 0;
+ Integer sampleDisposal = insOrder == null ? null : insOrder.getSampleDisposal();
+ if (sampleDisposal == null) {
+ sampleDisposal = inspectionOrder.getProcessing() != null && inspectionOrder.getProcessing() == 1 ? 2 : 1;
+ }
+ Integer resultEvaluation = insOrder != null && insOrder.getResultEvaluation() != null ? insOrder.getResultEvaluation() : 0;
+ Integer reportDelivery = insOrder == null ? null : insOrder.getReportDelivery();
+ if (reportDelivery == null) {
+ reportDelivery = inspectionOrder.getSend() != null && inspectionOrder.getSend() == 1 ? 1 : 2;
+ }
+
+ inspectionOrderExportDto.setSubcontractType(subcontractType);
+ inspectionOrderExportDto.setSubcontractCompany(subcontractType == 1 && insOrder != null && insOrder.getSubcontractCompany() != null
+ ? insOrder.getSubcontractCompany() : "");
+ inspectionOrderExportDto.setSubcontractYes(subcontractType == 1 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setSubcontractNo(subcontractType == 0 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setSampleDisposal(sampleDisposal);
+ inspectionOrderExportDto.setResultEvaluation(resultEvaluation);
+ inspectionOrderExportDto.setResultEvaluationYes(resultEvaluation == 1 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setResultEvaluationNo(resultEvaluation == 0 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setReportDelivery(reportDelivery);
+ inspectionOrderExportDto.setSendSelf(reportDelivery == 1 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setSendExpress(reportDelivery == 2 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setSendElectronic(reportDelivery == 3 ? "鈽�" : "鈻�");
+ boolean express = reportDelivery == 2;
+ inspectionOrderExportDto.setReportAddress(express && insOrder != null && insOrder.getReportAddress() != null
+ ? insOrder.getReportAddress() : "");
+ inspectionOrderExportDto.setReportReceiver(express && insOrder != null && insOrder.getReportReceiver() != null
+ ? insOrder.getReportReceiver() : "");
+
+ int sampleSource = inspectionOrder.getSampleSource() == null ? 1 : inspectionOrder.getSampleSource();
+ int receiveStatus = inspectionOrder.getReceiveStatus() == null ? 1 : inspectionOrder.getReceiveStatus();
+ int feeStatus = inspectionOrder.getFeeStatus() == null ? 2 : inspectionOrder.getFeeStatus();
+ inspectionOrderExportDto.setSourceSend(sampleSource == 1 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setSourceSample(sampleSource == 2 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setReceiveOk(receiveStatus == 1 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setReceiveDefect(receiveStatus == 2 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setReceiveReject(receiveStatus == 3 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setFeeReceived(feeStatus == 1 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setFeeUnpaid(feeStatus == 2 ? "鈽�" : "鈻�");
+ inspectionOrderExportDto.setFeePrepaid(feeStatus == 3 ? "鈽�" : "鈻�");
return inspectionOrderExportDto;
}
+
+ private static String buildDetailEntrustCode(String orderEntrustCode, String sampleNumber) {
+ if (StrUtil.isBlank(orderEntrustCode) || StrUtil.isBlank(sampleNumber)) {
+ return orderEntrustCode;
+ }
+ String trimmed = sampleNumber.trim();
+ String suffix = trimmed.length() >= 2 ? trimmed.substring(trimmed.length() - 2) : trimmed;
+ int index = orderEntrustCode.lastIndexOf('-');
+ return index < 0 ? orderEntrustCode : orderEntrustCode.substring(0, index + 1) + suffix;
+ }
+
+ /**
+ * 閫愯濮旀墭缂栧彿锛氶粯璁ゅ彇鏍峰搧缂栧彿鍚庝袱浣嶏紱鍑虹幇閲嶅鎴栦负绌烘椂鐢ㄨ鍙峰厹搴曪紝淇濊瘉涓嶉噸澶嶃��
+ */
+ private static List<String> buildDetailEntrustCodes(String orderEntrustCode, List<InspectionOrderDetail> details) {
+ List<String> bases = details.stream()
+ .map(detail -> buildDetailEntrustCode(orderEntrustCode, detail.getSampleNumber()))
+ .map(base -> base == null ? "" : base)
+ .collect(Collectors.toList());
+ Map<String, Integer> counts = new HashMap<>();
+ for (String base : bases) {
+ counts.merge(base, 1, Integer::sum);
+ }
+ String prefix = "";
+ if (StrUtil.isNotBlank(orderEntrustCode)) {
+ int index = orderEntrustCode.lastIndexOf('-');
+ prefix = index < 0 ? orderEntrustCode + "-" : orderEntrustCode.substring(0, index + 1);
+ }
+ Set<String> used = new HashSet<>();
+ List<String> result = new ArrayList<>();
+ for (int i = 0; i < bases.size(); i++) {
+ String base = bases.get(i);
+ String candidate = base;
+ if (StrUtil.isBlank(base) || counts.getOrDefault(base, 0) > 1 || used.contains(candidate)) {
+ int seq = i + 1;
+ candidate = prefix + String.format("%02d", seq);
+ while (used.contains(candidate)) {
+ seq += bases.size();
+ candidate = prefix + String.format("%02d", seq);
+ }
+ }
+ used.add(candidate);
+ result.add(candidate);
+ }
+ return result;
+ }
}
--
Gitblit v1.9.3