From 3793ba4a9b6be8faa6df0d4a76c06763ac03f873 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期三, 29 十月 2025 15:06:04 +0800
Subject: [PATCH] 外购成品报检相关问题调整
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java | 268 ++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 222 insertions(+), 46 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 ca9a5a9..7d550f7 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
@@ -26,6 +26,7 @@
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.api.IfsApiUtils;
@@ -37,12 +38,14 @@
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.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
@@ -309,9 +312,10 @@
}
}
});
- //鏄惁涓哄師鏉愭枡涓嬪崟
- 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);
@@ -349,47 +353,51 @@
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));
+ }
}
}
}
@@ -513,9 +521,10 @@
@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);
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);
@@ -547,12 +556,9 @@
* @return
*/
@Override
- public void getIfsOrder() {
- HashMap<String, Object> map = new HashMap<>();
- map.put("LOCATION_NO","1302");
- map.put("STATE_DB","To be Inspected");
+ public void getIfsOrder(Map<String, Object> map,Boolean isSplitOrder) {
List<Map<String, Object>> inventory = ifsApiUtils.getInventory(JSONUtil.toJsonStr(map));
- if(inventory.size() == 0) {
+ if(inventory.isEmpty()) {
return;
}
// 杩涜淇濆瓨
@@ -637,6 +643,9 @@
);
if(count == 0) {
ifsInventoryQuantity.setIsFirst(0);
+ if(isSplitOrder){
+ ifsInventoryQuantity.setIsSplitOrder(1);
+ }
// 鏌ヨ浜т笟閾炬娴嬫暟鎹�
String industryChainAttrFields = IndustryChainUtils.getIndustryChainAttrFields(ifsInventoryQuantity.getOrderNo(),
ifsInventoryQuantity.getLineNo(),
@@ -719,7 +728,7 @@
* @param id
*/
@Transactional
- public void updateIfsInventoryQuantity(Integer id) {
+ public void updateIfsInventoryQuantity(Long id) {
ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
.set(IfsInventoryQuantity::getIsRegister, 1)
.eq(IfsInventoryQuantity::getId, id));
@@ -1146,6 +1155,173 @@
}
+
+ /**
+ * ifs绉诲簱鎿嶄綔
+ * @param inventoryQuantity
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+ public String moveRawMaterial(IfsInventoryQuantity inventoryQuantity) {
+ //鏌ヨifs璁㈠崟璇︽儏
+ IfsInventoryQuantity one = ifsInventoryQuantityMapper.selectById(inventoryQuantity.getId());
+ 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());
+ }
+ //濡傛灉鏄媶鍒嗚鍗曪紝鍒欏皢鍚屼竴鎺ユ敹鍙风殑璁㈠崟鏍囪宸茬櫥璁版牎楠�
+ if(one.getIsSplitOrder()==1){
+ //鏌ヨ鍏朵綑鎷嗗垎鐨勮鍗�
+ List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+ .eq(IfsInventoryQuantity::getOrderNo, one.getOrderNo())
+ .eq(IfsInventoryQuantity::getPartNo, one.getPartNo())
+ .eq(IfsInventoryQuantity::getLineNo, one.getLineNo())
+ .eq(IfsInventoryQuantity::getReleaseNo, one.getReleaseNo())
+ .eq(IfsInventoryQuantity::getReceiptNo, one.getReceiptNo())
+ .eq(IfsInventoryQuantity::getIsSplitOrder, 1)
+ );
+ if(Objects.nonNull(quantityList) && !quantityList.isEmpty()){
+ //淇敼閲囪喘璁㈠崟鐧昏鐘舵��
+ List<Long> ids = quantityList.stream().map(IfsInventoryQuantity::getId).collect(Collectors.toList());
+ ifsInventoryQuantityMapper.update(null,Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+ .set(IfsInventoryQuantity::getIsRegister,1)
+ .in(IfsInventoryQuantity::getId, ids)
+ );
+ }
+ }else{
+ this.updateIfsInventoryQuantity(one.getId());
+ }
+ }
+ /**
+ * TODO 鍚庣画闇�瑕佽皟鐢↖FS鐨勬帴鍙� 绉诲叆鐨勫簱浣嶅彿 toLocation
+ */
+ // 妫�楠屽悗绉诲簱
+ //1301:鍘熸潗鏂欏悎鏍煎簱锛孋P-02-001:鎴愬搧搴�
+ toLocation = StringUtils.equals(inventoryQuantity.getOrderType(), OrderType.RAW.getValue())?"1301":"CP-02-001";
+ 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.getPurQtyInStore());
+ 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 one
+ * @param toLocation
+ */
+ 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);
+
+ Result result = ifsApiUtils.updateMoveReceiptLot(JSONUtil.toJsonStr(resultMap));
+
+ 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()));
+ }
+
+ 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());
+ }
+
+ }
+
+
}
--
Gitblit v1.9.3