From 0e5bddf6084d3dfb7bcad7217d4320898416eba3 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 23 十月 2025 16:49:12 +0800
Subject: [PATCH] 拆分原材料和外购成品的业务流程(报检、下单、检验)
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java | 246 ++++++++++++++++++-------------------------------
1 files changed, 91 insertions(+), 155 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
index 742af90..1a7ce8c 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsReportServiceImpl.java
@@ -1,7 +1,10 @@
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -22,31 +25,40 @@
import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
import com.ruoyi.basic.pojo.IfsInventoryQuantity;
import com.ruoyi.common.constant.InsOrderTypeConstants;
-import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.constant.MenuJumpPathConstants;
import com.ruoyi.common.core.domain.entity.InformationNotification;
-import com.ruoyi.common.core.domain.entity.User;
-import com.ruoyi.common.properties.WechatProperty;
+import com.ruoyi.common.config.WechatProperty;
import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.api.IfsApiUtils;
import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.InsReportExport;
import com.ruoyi.inspect.dto.ReportPageDto;
import com.ruoyi.inspect.mapper.*;
import com.ruoyi.inspect.pojo.*;
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsReportService;
import com.ruoyi.inspect.mapper.InsUnqualifiedHandlerMapper;
+import com.ruoyi.basic.vo.IfsInventoryQuantityVO;
+import com.ruoyi.inspect.service.RawMaterialOrderService;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.InformationNotificationService;
+import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.*;
+import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -65,6 +77,7 @@
* @createDate 2024-03-17 22:10:02
*/
@Service
+@Slf4j
public class InsReportServiceImpl extends ServiceImpl<InsReportMapper, InsReport>
implements InsReportService {
@Resource
@@ -81,8 +94,7 @@
private String wordUrl;
@Value("${file.path}")
private String imgUrl;
- @Value("${file.licenseUrl}")
- private String licenseUrl;
+
@Resource
private InsOrderMapper insOrderMapper;
@Resource
@@ -104,6 +116,9 @@
@Resource
private InsSampleUserMapper insSampleUserMapper;
+ @Autowired
+ private RawMaterialOrderService rawMaterialOrderService;
+
@Override
public Map<String, Object> pageInsReport(Page page, ReportPageDto reportPageDto) {
@@ -111,9 +126,11 @@
// todo: 浠呯湅鑷繁
//鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id
String laboratory = null;
- Integer createOrderUser = null;
+
+ Integer createOrderUser = reportPageDto.getCreateOrderUser();
String queryStatus = reportPageDto.getQueryStatus();
reportPageDto.setQueryStatus(null);
+ reportPageDto.setCreateOrderUser(null);
map.put("body", insReportMapper.pageInsReport(page,
QueryWrappers.queryWrappers(reportPageDto),
@@ -185,7 +202,7 @@
info.setSenderId(submitUserId); //鍙戦�佷汉
info.setConsigneeId(userId); //鏀朵欢浜�
info.setViewStatus(false);
- info.setJumpPath("b1-report-preparation");
+ info.setJumpPath(MenuJumpPathConstants.REPORT_PREPARATION);
informationNotificationService.addInformationNotification(info);
//绯荤粺鐢熸垚鎶ュ憡鍦板潃
String url = insReport.getUrl();
@@ -257,7 +274,7 @@
IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
String message = "";
- message += "鎶ュ憡缂栧埗瀹℃牳閫�鍥為�氱煡";
+ message += "鑰愪笣绯荤粺鎶ュ憡缂栧埗瀹℃牳閫�鍥為�氱煡";
message += "\n瀹℃牳浜�: " + checkUserName;
message += "\n濮旀墭缂栧彿: " + order.getEntrustCode();
message += "\n鏍峰搧鍚嶇О: " + insSample.getModel();
@@ -306,7 +323,7 @@
info.setSenderId(checkUserId); //鍙戦�佷汉
info.setConsigneeId(userId); //鏀朵欢浜�
info.setViewStatus(false);
- info.setJumpPath("b1-report-preparation");
+ info.setJumpPath(MenuJumpPathConstants.REPORT_PREPARATION);
informationNotificationService.addInformationNotification(info);
//绯荤粺鐢熸垚鎶ュ憡鍦板潃
String url = insReport.getUrl();
@@ -332,7 +349,7 @@
IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
String message = "";
- message += "鎶ュ憡缂栧埗鎵瑰噯閫氱煡";
+ message += "鑰愪笣绯荤粺鎶ュ憡缂栧埗鎵瑰噯閫氱煡";
message += "\n妫�楠屼汉: " + userName;
message += "\n澶嶆牳浜�: " + checkUserName;
message += "\n濮旀墭缂栧彿: " + order.getEntrustCode();
@@ -394,7 +411,7 @@
IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
String message = "";
- message += "鎶ュ憡缂栧埗鎵瑰噯閫�鍥為�氱煡";
+ message += "鑰愪笣绯荤粺鎶ュ憡缂栧埗鎵瑰噯閫�鍥為�氱煡";
message += "\n鎵瑰噯浜�: " + ratifyUserName;
message += "\n濮旀墭缂栧彿: " + order.getEntrustCode();
message += "\n鏍峰搧鍚嶇О: " + insSample.getModel();
@@ -535,12 +552,16 @@
}
// 鍘嬬缉涓存椂鏂囦欢澶�
zipFilePath = wordUrl + "/zip/output.zip";
+ // 鍒ゆ柇zip璺緞鏄惁瀛樺湪
+ File zipDir = new File(wordUrl + "/zip");
+ if(!zipDir.isDirectory()){
+ zipDir.mkdirs();
+ }
zipDirectory(tempFolderPath, zipFilePath);
// 娓呯悊涓存椂鏂囦欢澶�
deleteDirectory(tempFolder);
- System.out.println("ZIP鏂囦欢鍒涘缓瀹屾垚锛�");
} catch (IOException e) {
e.printStackTrace();
}
@@ -675,13 +696,11 @@
FileOutputStream os = null;
try {
//鍑瘉 涓嶇劧鍒囨崲鍚庢湁姘村嵃
-// InputStream is = this.getClass().getResourceAsStream("/lib/license.xml");
-// InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("license.xml");
- InputStream is = Files.newInputStream(new File(licenseUrl).toPath());
+ InputStream is = new ClassPathResource("/lib/license.xml").getInputStream();
License license = new License();
license.setLicense(is);
if (!license.getIsLicensed()) {
- System.out.println("License楠岃瘉涓嶉�氳繃...");
+ log.info("License楠岃瘉涓嶉�氳繃...");
return null;
}
//鐢熸垚涓�涓┖鐨凱DF鏂囦欢
@@ -776,8 +795,10 @@
stamp.close();
}
- @Transactional(rollbackFor = Exception.class)
- public void isRawMaterial(InsOrder insOrder) {
+
+ @Override
+ @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+ public void isRawMaterial(InsOrder insOrder,Boolean registerInsResults,Boolean hasExemption) {
IfsInventoryQuantity one = ifsInventoryQuantityMapper.selectOne(new LambdaQueryWrapper<IfsInventoryQuantity>()
.eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
if (Objects.isNull(one)) {
@@ -791,9 +812,25 @@
// 鍒ゆ柇鏄惁鏈変笉鍚堟牸
Long unqualifiedCount = getUnqualifiedCount(insOrder);
- if (count.equals(0L) && unqualifiedCount.equals(0L) && one.getIsFinish().equals(0) && one.getIsSource().equals(1)) {
+ if (count.equals(0L) && unqualifiedCount.equals(0L) && one.getIsFinish().equals(0) && one.getIsSource().equals(1) && registerInsResults) {
// 鍘熸潗鏂欑Щ搴�
- toLocation = this.moveRawMaterial(one);
+ //濡傛灉鏄媶鍒嗙殑璁㈠崟锛屽垯鎶婃媶鍒嗙殑鎵�鏈夋壒娆¢兘绉诲簱
+ if(one.getIsSplitOrder()==1 && !hasExemption){
+ //鏌ヨ鎷嗗垎璁㈠崟璇︽儏
+ List<IfsInventoryQuantityVO> ifsInventoryQuantityVOS = ifsInventoryQuantityMapper.selectSplitOrderList(one.getPartNo(), one.getLineNo(), one.getReleaseNo(), one.getReceiptNo(), one.getOrderNo());
+ for (IfsInventoryQuantityVO vo : ifsInventoryQuantityVOS) {
+ //濡傛灉鏈夊鎵樺崟淇℃伅涓斿悎鏍硷紝璧扮櫥璁板悗绉诲簱锛涘鏋滄病鏈夛紝鍒欒蛋鍏嶆锛涗笉鍚堟牸涓嶅仛澶勭悊
+ if(Objects.isNull(vo.getInsOrderId())){
+ rawMaterialOrderService.rawOrderRelease(vo.getId(), vo.getPartDesc());
+ }else if(Objects.equals(vo.getInsOrderId(),insOrder.getId())){
+ toLocation = insOrderService.moveRawMaterial(vo);
+ }else if(Objects.nonNull(vo.getInsResult()) && 1 == vo.getInsResult()){
+ toLocation = insOrderService.moveRawMaterial(vo);
+ }
+ }
+ }else{
+ toLocation = insOrderService.moveRawMaterial(one);
+ }
}
// 鍒ゆ柇缁撴潫鐘舵�佷慨鏀瑰悎鏍肩姸鎬�
@@ -881,75 +918,6 @@
}
/**
- * ifs绉诲簱鎿嶄綔
- * @param one
- * @return
- */
- @Override
- public String moveRawMaterial(IfsInventoryQuantity one) {
- String toLocation;
- // 鐧昏閲囪喘妫�楠岀粨鏋淪TD
- if (one.getIsRegister().equals(0)) {
- Map<String, Object> resultMap = new HashMap<>();
- List<Map<String, Object>> resultList = new ArrayList<>();
- Map<String, Object> map = new HashMap<>();
- map.put("ORDER_NO", one.getOrderNo()); // 閲囪喘璁㈠崟鍙�
- map.put("LINE_NO", one.getLineNo()); // 琛屽彿
- map.put("RELEASE_NO", one.getReleaseNo()); // 涓嬭揪鍙�
- map.put("RECEIPT_NO", one.getReceiptNo()); // 鎺ユ敹鍙�
- map.put("PURCH_QTY", one.getQtyToInspect()); // 瑕佹楠岀殑閲囪喘鏁伴噺
- resultList.add(map);
- resultMap.put("RECORD_ID", UUID.randomUUID().toString());
- resultMap.put("SYSCODE", "LIMS");
- resultMap.put("SYSMODEL", "鐧昏閲囪喘妫�楠岀粨鏋�");
- resultMap.put("BATCH_INFO", resultList);
- Result result = ifsApiUtils.getProcurementResults(JSONUtil.toJsonStr(resultMap));
- if (result.getCode() != 200) {
- throw new ErrorException("IFS鐧昏閲囪喘妫�楠岀粨鏋滃け璐�: " + result.getMessage());
- }
- }
- insOrderService.updateIfsInventoryQuantity(one.getId());
- /**
- * TODO 鍚庣画闇�瑕佽皟鐢↖FS鐨勬帴鍙� 绉诲叆鐨勫簱浣嶅彿 toLocation
- */
- // 妫�楠屽悗绉诲簱
- toLocation = "1301";
- Map<String, Object> moveResultMap = new HashMap<>();
- List<Map<String, Object>> moveResultList = new ArrayList<>();
- Map<String, Object> moveMap = new HashMap<>();
- moveMap.put("ORDER_NO", one.getOrderNo()); // 閲囪喘璁㈠崟鍙�
- moveMap.put("LINE_NO", one.getLineNo());
- moveMap.put("RELEASE_NO", one.getReleaseNo());
- moveMap.put("RECEIPT_NO", one.getReceiptNo());
- moveMap.put("PART_NO", one.getPartNo());
- moveMap.put("QTY", one.getQtyArrived());
- moveMap.put("LOCATION_NO", one.getLocationNo());
- moveMap.put("TO_LOCATION_NO", toLocation);
- moveMap.put("LOT_BATCH_NO", one.getLotBatchNo());
- moveMap.put("SERIAL_NO", one.getSerialNo());
- moveMap.put("WAIV_DEV_REJ_NO", one.getWaivDevRejNo());
- moveMap.put("ENG_CHG_LEVEL", one.getEngChgLevel());
- moveMap.put("ACTIVITY_SEQ", one.getActivitySeq());
- moveResultList.add(moveMap);
- moveResultMap.put("RECORD_ID", UUID.randomUUID().toString());
- moveResultMap.put("SYSCODE", "LIMS");
- moveResultMap.put("SYSMODEL", "妫�楠屽悗绉诲簱");
- moveResultMap.put("BATCH_INFO", moveResultList);
-
- Result result1 = ifsApiUtils.moveReceipt(JSONUtil.toJsonStr(moveResultMap));
- // 濡傛灉鏈夊繀椤讳负闆朵欢鎸囧畾鎵瑰彿鎶ラ敊闇�瑕侀噸鏂版彁浜ょЩ搴撲俊鎭幓鎸囧畾鎵瑰彿
- if (result1.getCode() != 200) {
- String message = result1.getMessage();
- if (message.contains("蹇呴』涓洪浂浠�") && message.contains("鎸囧畾鎵瑰彿")) {
- updaeBatch(one, toLocation);
- } else {
- throw new ErrorException("IFS妫�楠屽悗绉诲簱澶辫触: " + result1.getMessage());
- }
- }
- return toLocation;
- }
-
- /**
* 閫�鍥炲埌妫�楠屼换鍔�
* @param id
* @return
@@ -981,74 +949,43 @@
return false;
}
-
/**
- * 鍏堜慨鏀归噰璐鍗曟壒娆″彿, 鍚庤繘琛岀Щ搴撴搷浣�
- * @param one
- * @param toLocation
+ * 鎶ュ憡鎶ヨ〃瀵煎嚭
+ * @param dto
+ * @param response
*/
- private void updaeBatch(IfsInventoryQuantity one, String toLocation) {
- if (one.getIsUpdateBatch().equals(0)) {
- // 鍏堜慨鏀规壒娆″彿鍚庤繘琛岀Щ搴�
- Map<String, Object> resultMap = new HashMap<>();
- List<Map<String, Object>> resultList = new ArrayList<>();
- Map<String, Object> map = new HashMap<>();
- map.put("ORDER_NO", one.getOrderNo()); // 閲囪喘璁㈠崟鍙�
- map.put("LINE_NO", one.getLineNo()); // 琛屽彿
- map.put("RELEASE_NO", one.getReleaseNo()); // 涓嬭揪鍙�
- map.put("RECEIPT_NO", one.getReceiptNo()); // 鎺ユ敹鍙�
- map.put("PART_NO", one.getPartNo()); //闆朵欢鍙�
- map.put("CONFIGURATION_ID", one.getConfigurationId()); // 閰嶇疆鏍囪瘑
- map.put("LOCATION_NO", one.getLocationNo()); // 搴撲綅鍙�
- map.put("LOT_BATCH_NO", one.getLotBatchNo());// 鎵规鍙�
- map.put("NEW_LOT_BATCH_NO", one.getUpdateBatchNo()); // 鐩爣鎵规鍙�
- map.put("SERIAL_NO", one.getSerialNo()); // 搴忓垪鍙�
- map.put("ENG_CHG_LEVEL", one.getEngChgLevel()); // 鐗堟湰鍙�
- map.put("WAIV_DEV_REJ_NO", one.getWaivDevRejNo()); // wdr鍙�
- map.put("ACTIVITY_SEQ", one.getActivitySeq()); // 娲诲姩搴忓彿
- map.put("QTY_TO_CHANGE", one.getQtyArrived()); // 鍙樻洿鏁伴噺
- resultList.add(map);
- resultMap.put("RECORD_ID", UUID.randomUUID().toString());
- resultMap.put("SYSCODE", "LIMS");
- resultMap.put("SYSMODEL", "淇敼閲囪喘璁㈠崟鎵规鍙�");
- resultMap.put("BATCH_INFO", resultList);
+ @Override
+ public void reportAllExport(ReportPageDto dto, HttpServletResponse response) throws UnsupportedEncodingException {
- Result result = ifsApiUtils.updateMoveReceiptLot(JSONUtil.toJsonStr(resultMap));
+ Integer createOrderUser = dto.getCreateOrderUser();
+ String queryStatus = dto.getQueryStatus();
+ dto.setQueryStatus(null);
+ dto.setCreateOrderUser(null);
- if (result.getCode() != 200) {
- throw new ErrorException("IFS淇敼鎵规鍙峰け璐�: " + result.getMessage());
- }
- ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
- .set(IfsInventoryQuantity::getIsUpdateBatch, 1)
- .eq(IfsInventoryQuantity::getId, one.getId()));
+ List<InsReportExport> insReportExports = insReportMapper.reportAllExport(QueryWrappers.queryWrappers(dto),
+ SecurityUtils.getUserId().intValue(),
+ queryStatus,
+ createOrderUser);
+
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+ String fileName = URLEncoder.encode("鎶ュ憡鎶ヨ〃瀵煎嚭", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ try {
+ //鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ //鑾峰彇sheet0瀵硅薄
+ WriteSheet mainSheet = EasyExcel.writerSheet(0, "鎶ュ憡鎶ヨ〃瀵煎嚭").head(InsReportExport.class).build();
+
+ //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
+ excelWriter.write(insReportExports, mainSheet);
+ //鍏抽棴娴�
+ excelWriter.finish();
+ } catch (IOException e) {
+ throw new RuntimeException("瀵煎嚭澶辫触");
}
- Map<String, Object> moveResultMap = new HashMap<>();
- List<Map<String, Object>> moveResultList = new ArrayList<>();
- Map<String, Object> moveMap = new HashMap<>();
- moveMap.put("ORDER_NO", one.getOrderNo()); // 閲囪喘璁㈠崟鍙�
- moveMap.put("LINE_NO", one.getLineNo());
- moveMap.put("RELEASE_NO", one.getReleaseNo());
- moveMap.put("RECEIPT_NO", one.getReceiptNo());
- moveMap.put("PART_NO", one.getPartNo());
- moveMap.put("QTY", one.getQtyArrived());
- moveMap.put("LOCATION_NO", one.getLocationNo());
- moveMap.put("TO_LOCATION_NO", toLocation);
- moveMap.put("LOT_BATCH_NO", one.getUpdateBatchNo());
- moveMap.put("SERIAL_NO", one.getSerialNo());
- moveMap.put("WAIV_DEV_REJ_NO", one.getWaivDevRejNo());
- moveMap.put("ENG_CHG_LEVEL", one.getEngChgLevel());
- moveMap.put("ACTIVITY_SEQ", one.getActivitySeq());
- moveResultList.add(moveMap);
- moveResultMap.put("RECORD_ID", UUID.randomUUID().toString());
- moveResultMap.put("SYSCODE", "LIMS");
- moveResultMap.put("SYSMODEL", "妫�楠屽悗绉诲簱");
- moveResultMap.put("BATCH_INFO", moveResultList);
-
- Result result1 = ifsApiUtils.moveReceipt(JSONUtil.toJsonStr(moveResultMap));
- if (result1.getCode() != 200) {
- throw new ErrorException("IFS妫�楠屽悗绉诲簱澶辫触: " + result1.getMessage());
- }
}
@@ -1116,11 +1053,11 @@
FileOutputStream os = null;
try {
//鍑瘉 涓嶇劧鍒囨崲鍚庢湁姘村嵃
- InputStream is = Files.newInputStream(new File(licenseUrl).toPath());
+ InputStream is = new ClassPathResource("/lib/license.xml").getInputStream();
License license = new License();
license.setLicense(is);
if (!license.getIsLicensed()) {
- System.out.println("License楠岃瘉涓嶉�氳繃...");
+ log.info("License楠岃瘉涓嶉�氳繃...");
return null;
}
//鐢熸垚涓�涓┖鐨凱DF鏂囦欢
@@ -1131,7 +1068,6 @@
//瑕佽浆鎹㈢殑word鏂囦欢
com.aspose.words.Document doc = new com.aspose.words.Document(wordPath);
doc.save(os, SaveFormat.PDF);
- String name = file.getName();
return file.getName();
} catch (Exception e) {
e.printStackTrace();
--
Gitblit v1.9.3