From d28a5401ac1e2995ec6de12a81395aa5d05b040a Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 05 十一月 2026 10:17:49 +0800
Subject: [PATCH] refactor(order): 提取外协判断方法并还原原下单
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java | 167 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 138 insertions(+), 29 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
index 2fc3082..d3be4ec 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -7,6 +7,7 @@
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
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.support.ExcelTypeEnum;
@@ -20,24 +21,23 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.*;
+import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
+import com.ruoyi.basic.mapper.StandardTreeMapper;
import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.common.config.WechatProperty;
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.config.WechatProperty;
+import com.ruoyi.common.enums.ContractType;
import com.ruoyi.common.enums.OrderType;
+import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.LimsDateUtil;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.common.utils.api.IfsApiUtils;
-import com.ruoyi.common.utils.api.MesApiUtils;
-import com.ruoyi.inspect.dto.CopperInsOrderDto;
-import com.ruoyi.inspect.dto.OrderSplitDTO;
-import com.ruoyi.inspect.dto.RawMaterialStandardTreeDto;
-import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
-import com.ruoyi.basic.mapper.StandardTreeMapper;
-import com.ruoyi.inspect.dto.SampleProductDto;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.*;
import com.ruoyi.inspect.excel.OrderSplitExcelData;
import com.ruoyi.inspect.excel.OrderSplitExcelListener;
import com.ruoyi.inspect.mapper.InsOrderMapper;
@@ -47,13 +47,12 @@
import com.ruoyi.inspect.pojo.IfsSplitOrderRecord;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsReport;
-import com.ruoyi.inspect.pojo.InsUnqualifiedHandler;
import com.ruoyi.inspect.service.IfsSplitOrderRecordService;
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsReportService;
import com.ruoyi.inspect.service.RawMaterialOrderService;
-import com.ruoyi.common.numgen.NumberGenerator;
-import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.service.OutsourceOrderFlowService;
+import com.ruoyi.inspect.vo.ProductVo;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
import com.ruoyi.system.mapper.UserMapper;
@@ -88,24 +87,35 @@
public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
private StandardTreeMapper standardTreeMapper;
+
private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
+
private UserMapper userMapper;
+
private InsOrderService insOrderService;
+
private InsOrderMapper insOrderMapper;
+
private InsSampleMapper insSampleMapper;
+
private final NumberGenerator<InsOrder> numberGenerator;
+
private InsReportService insReportService;
+
private WechatProperty wechatProperty;
+
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
private InsProductMapper insProductMapper;
+
private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
private IfsApiUtils ifsApiUtils;
private IfsSplitOrderRecordService ifsSplitOrderRecordService;
- private InsUnqualifiedHandlerMapper insUnqualifiedHandlerMapper;
-
+ private final NumberGenerator<IfsSplitOrderRecord> splitOrderRecordNumberGenerator;
+ private OutsourceOrderFlowService outsourceOrderFlowService;
@Override
public Result selectStandardTreeListByPartNo(String partNo) {
@@ -117,7 +127,7 @@
for (FactoryDto factoryDto : factoryDtos) {
for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
- if (sampleTypeDto.getChildren().size() == 0) {
+ if (sampleTypeDto.getChildren().isEmpty()) {
sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
}
// 鍒ゆ柇缁戝畾鐨勬槸鍚︽槸褰撳墠闆朵欢鍙�
@@ -159,10 +169,61 @@
return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
}
+ /** 淇濈暀澶栧崗鍒嗙被鏌ヨ鏉′欢锛岄伩鍏嶅師鏉愭枡鍒楄〃瑕嗙洊鍒嗙被銆� */
+ @Override
+ public IPage<IfsInventoryQuantity> getOutsourceWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
+ validateOutsourceType(ifsInventoryQuantity.getOrderType());
+ ifsInventoryQuantity.setIsInspect(1);
+ ifsInventoryQuantity.setState(0);
+ return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)
+ .eq(StringUtils.isNotBlank(ifsInventoryQuantity.getMaterialProp()), "material_prop", ifsInventoryQuantity.getMaterialProp()));
+ }
+
@Override
public IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto));
+ }
+
+ /** 妫�楠屼腑鍒楄〃鎸夌湡瀹炲鍗忓垎绫昏繃婊ゃ�� */
+ @Override
+ public IPage<IfsInventoryQuantityDto> getOutsourceByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto dto) {
+ validateOutsourceType(dto.getOrderType());
+ dto.setOrderState(1);
+ dto.setState(1);
+ // 鎸夐敭鍊肩簿纭瓫閫夛紝閬垮厤鈥滄垚鍝佲�濇ā绯婂尮閰嶅埌鈥滃崐鎴愬搧鈥濄��
+ return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(dto)
+ .eq(StringUtils.isNotBlank(dto.getMaterialProp()), "material_prop", dto.getMaterialProp()));
+ }
+
+ /** 宸叉楠屽垪琛ㄦ寜鐪熷疄澶栧崗鍒嗙被杩囨护銆� */
+ @Override
+ public IPage<IfsInventoryQuantitySupplierDto> getOutsourceByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto dto) {
+ dto.setOrderState(4);
+ dto.setState(2);
+ return getOutsourceByAll(page, dto);
+ }
+
+ /** 鍏ㄩ儴鍒楄〃淇濈暀鐪熷疄鍒嗙被鍜屾绱㈡潯浠讹紝涓嶅己鍒堕檺鍒舵楠岀姸鎬併�� */
+ @Override
+ public IPage<IfsInventoryQuantitySupplierDto> getOutsourceByAll(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto dto) {
+ validateOutsourceType(dto.getOrderType());
+ String begin = dto.getBeginDeclareDate();
+ String end = dto.getEndDeclareDate();
+ dto.setBeginDeclareDate(null);
+ dto.setEndDeclareDate(null);
+ dto.setIsInspect(1);
+ IPage<IfsInventoryQuantitySupplierDto> result = standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(dto)
+ .eq(StringUtils.isNotBlank(dto.getMaterialProp()), "material_prop", dto.getMaterialProp()), begin, end);
+ result.getRecords().forEach(r -> r.setOrderTypeName(OrderType.getLabelByValue(r.getOrderType())));
+ return result;
+ }
+
+ /** 闄愬埗澶栧崗鍒楄〃鎺ュ彛鍙兘鏌ヨ涓や釜澶栧崗鍒嗙被銆� */
+ private void validateOutsourceType(String orderType) {
+ if (!outsourceOrderFlowService.isOutsource(orderType)) {
+ throw new ErrorException("闈炴硶鐨勫鍗忚鍗曞垎绫�");
+ }
}
@@ -172,7 +233,8 @@
* @return
*/
@Override
- public int inspectionReport(List<Long> ids,String orderType) {
+ public int inspectionReport(List<Long> ids,String orderType,String materialProp) {
+ outsourceOrderFlowService.resolve(orderType, materialProp);
Integer userId = SecurityUtils.getUserId().intValue();
ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
.in(IfsInventoryQuantity::getId, ids)
@@ -180,6 +242,7 @@
.set(IfsInventoryQuantity::getDeclareUserId, userId)
.set(IfsInventoryQuantity::getIsInspect, 1)
.set(IfsInventoryQuantity::getOrderType,orderType)
+ .set(IfsInventoryQuantity::getMaterialProp,materialProp)
.set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
);
threadPoolTaskExecutor.execute(() -> {
@@ -245,6 +308,10 @@
if(!validateValue){
throw new ErrorException("鎶ユ澶辫触锛岄潪娉曠殑閿�鍞鍗曞垎绫绘灇涓�");
}
+ outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp());
+ validateUpdateBatchNo(ifsInventoryQuantity);
+ //鎵规鍙峰瓧姣嶈浆澶у啓
+ ifsInventoryQuantity.setUpdateBatchNo(ifsInventoryQuantity.getUpdateBatchNo().toUpperCase(Locale.ROOT));
ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
.eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
.set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
@@ -253,6 +320,7 @@
.set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
.set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
.set(IfsInventoryQuantity::getOrderType,ifsInventoryQuantity.getOrderType())
+ .set(IfsInventoryQuantity::getMaterialProp,ifsInventoryQuantity.getMaterialProp())
);
threadPoolTaskExecutor.execute(() -> {
@@ -266,6 +334,26 @@
WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
});
return 1;
+ }
+
+ /**
+ * 鏍¢獙澶栬喘璁㈠崟鎶ユ鐨勬壒娆″彿鏄惁閲嶅
+ * @param ifsInventoryQuantity
+ */
+ public void validateUpdateBatchNo(IfsInventoryQuantity ifsInventoryQuantity){
+ if(StringUtils.equals(ifsInventoryQuantity.getOrderType(),OrderType.WG.getValue())){
+ //鏌ヨ鍘嗗彶璁板綍
+ Long count = ifsInventoryQuantityMapper.selectCount(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+ .eq(IfsInventoryQuantity::getContract,ifsInventoryQuantity.getContract())
+ .eq(IfsInventoryQuantity::getPartNo,ifsInventoryQuantity.getPartNo())
+ .eq(IfsInventoryQuantity::getUpdateBatchNo,ifsInventoryQuantity.getUpdateBatchNo())
+ .eq(IfsInventoryQuantity::getOrderType,OrderType.WG.getValue())
+ .ne(IfsInventoryQuantity::getState,0)
+ );
+ if(count>0){
+ throw new RuntimeException("鎶ユ澶辫触锛岄浂浠�"+ifsInventoryQuantity.getPartNo()+"鎵�鎶ユ鐨勬壒娆″彿銆�"+ifsInventoryQuantity.getUpdateBatchNo()+"銆戝凡瀛樺湪锛�");
+ }
+ }
}
/**
@@ -316,10 +404,16 @@
if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
}
+ // 鍏嶆涓庢甯镐笅鍗曚娇鐢ㄧ浉鍚岀殑澶栧崗鏉ユ簮瑙勫垯銆�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+ if (ifsInventoryQuantity == null) {
+ throw new ErrorException("鎵句笉鍒伴攢鍞鍗曚俊鎭�");
+ }
insOrder.setSendTime(LocalDateTime.now());
// 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
insOrder.setState(4);
- insOrder.setTypeSource(1);
+ insOrder.setTypeSource(outsourceOrderFlowService.resolveTypeSource(
+ ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp(), 1));
String code = "Y";
// 鐢熸垚缂栧彿
@@ -350,7 +444,6 @@
});
// 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
- IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
User user = userMapper.selectById(declareUserId);
// 渚涘簲鍟嗗悕绉�
@@ -371,7 +464,7 @@
insOrderMapper.updateById(insOrder);
// 娣诲姞宸ユ椂
- addAuxiliary(insOrder, ifsInventoryQuantity);
+// addAuxiliary(insOrder, ifsInventoryQuantity);
// todo: ifs鐩存帴绉诲簱
insReportService.isRawMaterial(insOrder,true,true);
@@ -442,7 +535,9 @@
InsOrder insOrder = new InsOrder();
insOrder.setState(4);
- insOrder.setTypeSource(1);
+ // 鍒楄〃鐩存帴鍏嶆涔熸寜鐪熷疄澶栧崗鍒嗙被鍙婄墿鏂欏睘鎬х‘瀹氭潵婧愩��
+ insOrder.setTypeSource(outsourceOrderFlowService.resolveTypeSource(
+ ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp(), 1));
String code = "Y";
// 鐢熸垚缂栧彿
String no = numberGenerator.generateNumberWithPrefix(3,
@@ -466,7 +561,7 @@
insOrderMapper.insert(insOrder);
// 娣诲姞宸ユ椂
- addAuxiliary(insOrder, ifsInventoryQuantity);
+// addAuxiliary(insOrder, ifsInventoryQuantity);
// todo: ifs鐩存帴绉诲簱
insReportService.isRawMaterial(insOrder,true,true);
@@ -526,6 +621,8 @@
if(!OrderType.validateValue(ifsInventoryQuantity.getOrderType())){
throw new ErrorException("鏂板鎶ユ淇℃伅澶辫触锛岄潪娉曠殑閿�鍞鍗曞垎绫绘灇涓�");
}
+ outsourceOrderFlowService.resolve(ifsInventoryQuantity.getOrderType(), ifsInventoryQuantity.getMaterialProp());
+ validateUpdateBatchNo(ifsInventoryQuantity);
ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
}
@@ -603,7 +700,7 @@
insOrderMapper.updateById(insOrder);
// 娣诲姞宸ユ椂
- addAuxiliary(insOrder, ifsInventoryQuantity);
+// addAuxiliary(insOrder, ifsInventoryQuantity);
return insOrder.getId();
}
@@ -750,6 +847,9 @@
}
}
+ //鏌ヨ妫�楠岄」璁板綍
+ List<Long> ifsIds = ifsByOverList.stream().map(IfsInventoryQuantitySupplierDto::getId).collect(Collectors.toList());
+ List<ProductVo> inspectList = insProductMapper.selectInspectListByIfsIfs(ifsIds);
response.setContentType("application/vnd.ms-excel");
@@ -761,10 +861,12 @@
//鏂板缓ExcelWriter
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
//鑾峰彇sheet0瀵硅薄
- WriteSheet mainSheet = EasyExcel.writerSheet(0, "鍘熸潗鏂欐娴嬩俊鎭鍑�").head(IfsInventoryQuantitySupplierDto.class).build();
+ WriteSheet mainSheet = EasyExcel.writerSheet(0, "鍘熸潗鏂欐娴嬩俊鎭�昏").head(IfsInventoryQuantitySupplierDto.class).build();
+ WriteSheet inspectSheet = EasyExcel.writerSheet(1, "鍘熸潗鏂欐娴嬫暟鎹鎯�").head(ProductVo.class).build();
//鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
excelWriter.write(ifsByOverList, mainSheet);
+ excelWriter.write(inspectList, inspectSheet);
//鍏抽棴娴�
excelWriter.finish();
} catch (IOException e) {
@@ -892,7 +994,7 @@
inAttrMap.put("BATCH_INFO", batchInfoData);
String inAttr = JSONObject.toJSONString(inAttrMap);
//璋冪敤ifs鎺ュ彛
- Result result = ifsApiUtils.updateMoveReceiptLot(inAttr);
+ Result result = ifsApiUtils.updateMoveReceiptLot(ifsInventoryQuantity.getContract(),inAttr);
if(result.getCode()!=200){
throw new RuntimeException("IFS閲囪喘鎺ユ敹鏇存敼鎵瑰彿璇锋眰寮傚父锛�"+result.getMessage());
}
@@ -914,7 +1016,7 @@
}
//ifs鏇存敼鎵瑰彿鎺ュ彛璋冪敤鎴愬姛锛屾媺鍙栨柊鎷嗗垎鐨刬fs璁㈠崟骞舵姤妫�
Map<String, Object> map = new HashMap<>();
- map.put("LOCATION_NO","1302");
+// map.put("LOCATION_NO","1302");
map.put("STATE_DB","To be Inspected");
map.put("PART_NO",ifsInventoryQuantity.getPartNo());
map.put("ORDER_NO",ifsInventoryQuantity.getOrderNo());
@@ -938,24 +1040,31 @@
if(Objects.nonNull(splitOrderList) && !splitOrderList.isEmpty()){
List<Long> ids = splitOrderList.stream().map(IfsInventoryQuantity::getId).collect(Collectors.toList());
ids.add(ifsInventoryQuantity.getId());
- this.inspectionReport(ids,OrderType.RAW.getValue());
+ this.inspectionReport(ids,OrderType.RAW.getValue(),orderSplitDTO.getMaterialProp());
}
//鍕鹃�夊悓姝ュ埌MES锛屼繚瀛樿鍗曟媶鍒嗚褰�
if(orderSplitDTO.getPushToMes()){
- List<IfsSplitOrderRecord> collect = orderSplitDTO.getSplitDetailList().stream().map(m -> {
+ orderSplitDTO.getSplitDetailList().forEach(m -> {
IfsSplitOrderRecord record = new IfsSplitOrderRecord();
BeanUtil.copyProperties(m, record);
+ record.setSystemNo(splitOrderRecordNumberGenerator.generateNumberWithPrefix(IfsSplitOrderRecord.DIGIT, IfsSplitOrderRecord.PREFIX, IfsSplitOrderRecord::getSystemNo));
record.setOrderNo(ifsInventoryQuantity.getOrderNo());
record.setLineNo(ifsInventoryQuantity.getLineNo());
record.setReleaseNo(ifsInventoryQuantity.getReleaseNo());
record.setReceiptNo(ifsInventoryQuantity.getReceiptNo());
- return record;
- }).collect(Collectors.toList());
- return ifsSplitOrderRecordService.saveBatch(collect);
+ ifsSplitOrderRecordService.save(record);
+ });
+ return true;
}
return false;
}
+ @Override
+ @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+ public Long getOrderCountByIfsId(Long ifsId) {
+ return insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getIfsInventoryId,ifsId).ne(InsOrder::getState,-1));
+ }
+
/**
* 娣诲姞宸ユ椂
* @param insOrder
--
Gitblit v1.9.3