|
|
@ -10,11 +10,11 @@ import com.win.module.infra.enums.TrendsTypeEnum; |
|
|
|
import com.win.module.system.api.serialnumber.SerialNumberApi; |
|
|
|
import com.win.module.system.api.user.AdminUserApi; |
|
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
import com.win.module.wms.controller.bom.vo.BomExportReqVO; |
|
|
|
import com.win.module.wms.controller.productrepairRecord.vo.ProductrepairRecordDetailCreateReqVO; |
|
|
|
import com.win.module.wms.controller.productrepairRecord.vo.ProductrepairRecordMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.productrepairRequest.vo.*; |
|
|
|
import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; |
|
|
|
import com.win.module.wms.controller.transferissueRequest.vo.TransferissueRequestMainImportErrorVO; |
|
|
|
import com.win.module.wms.convert.productrepairRecord.ConsumeRecordDetailbConvert; |
|
|
|
import com.win.module.wms.convert.productrepairRecord.ProductrepairRecordDetailConvert; |
|
|
|
import com.win.module.wms.convert.productrepairRecord.ProductrepairRecordMainConvert; |
|
|
@ -22,11 +22,9 @@ import com.win.module.wms.convert.productrepairRequest.ProductrepairRequestDetai |
|
|
|
import com.win.module.wms.convert.productrepairRequest.ProductrepairRequestDetailbConvert; |
|
|
|
import com.win.module.wms.convert.productrepairRequest.ProductrepairRequestMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.balance.BalanceDO; |
|
|
|
import com.win.module.wms.dal.dataobject.bom.BomDO; |
|
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productrepairRecord.ConsumeRecordDetailbDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productrepairRecord.ProductrepairRecordDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productrepairRecord.ProductrepairRecordMainDO; |
|
|
@ -66,6 +64,7 @@ import javax.annotation.Resource; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
|
|
@ -200,32 +199,56 @@ public class ProductrepairRequestMainServiceImpl implements ProductrepairRequest |
|
|
|
private ProductrepairRequestMainDO validatorToCreate(ProductrepairRequestMainCreateReqVO createReqVO, RequestsettingDO requestsettingDO) { |
|
|
|
// DBT——>DBT3("ProductRepairRequest")
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductRepairRequest"); |
|
|
|
ProductrepairRequestMainDO productrepairRequestMainDO = validateMainMethod(createReqVO,businesstypeDO,requestsettingDO); |
|
|
|
ProductrepairRequestMainDO mainBo = validateMainMethod(createReqVO,businesstypeDO,requestsettingDO); |
|
|
|
// 子表处理逻辑 ProductrepairRequestDetailaDO
|
|
|
|
List<ProductrepairRequestDetailaCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
for(ProductrepairRequestDetailaCreateReqVO productrepairRequestDetailaCreateReqVO:subList){ |
|
|
|
validateDetailMethod(productrepairRequestMainDO, productrepairRequestDetailaCreateReqVO,businesstypeDO); |
|
|
|
validateDetailMethod(mainBo, productrepairRequestDetailaCreateReqVO,businesstypeDO); |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode()); |
|
|
|
productrepairRequestMainDO.setNumber(number); |
|
|
|
productrepairRequestMainDO.setDepartmentCode(userApi.getUser(getLoginUserId()).getDeptId().toString()); |
|
|
|
productrepairRequestMainMapper.insert(productrepairRequestMainDO); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PRODUCT_REPAIR_REQUEST.getCode()); |
|
|
|
mainBo.setNumber(number); |
|
|
|
mainBo.setDepartmentCode(userApi.getUser(getLoginUserId()).getDeptId().toString()); |
|
|
|
productrepairRequestMainMapper.insert(mainBo); |
|
|
|
for(ProductrepairRequestDetailaCreateReqVO productrepairRequestDetailaCreateReqVO:subList){ |
|
|
|
ProductrepairRequestDetailaDO productrepairRequestDetailaDO = ProductrepairRequestDetailaConvert.INSTANCE.convert(productrepairRequestDetailaCreateReqVO); |
|
|
|
productrepairRequestDetailaDO.setMasterId(productrepairRequestMainDO.getId()); |
|
|
|
productrepairRequestDetailaDO.setNumber(productrepairRequestMainDO.getNumber()); |
|
|
|
productrepairRequestDetailaDO.setInventoryStatus(businesstypeDO.getOutInventoryStatuses()); |
|
|
|
productrepairRequestDetailaMapper.insert(productrepairRequestDetailaDO); |
|
|
|
ProductrepairRequestDetailaDO detailaDO = ProductrepairRequestDetailaConvert.INSTANCE.convert(productrepairRequestDetailaCreateReqVO); |
|
|
|
detailaDO.setMasterId(mainBo.getId()); |
|
|
|
detailaDO.setNumber(mainBo.getNumber()); |
|
|
|
detailaDO.setInventoryStatus(businesstypeDO.getOutInventoryStatuses()); |
|
|
|
productrepairRequestDetailaMapper.insert(detailaDO); |
|
|
|
List<ProductrepairRequestDetailbCreateReqVO> consumereDetailbList = productrepairRequestDetailaCreateReqVO.getChildList(); |
|
|
|
List<ProductrepairRequestDetailbDO> childList = new ArrayList<>(); |
|
|
|
for(ProductrepairRequestDetailbCreateReqVO productrepairRequestDetailbCreateReqVO:consumereDetailbList){ |
|
|
|
ProductrepairRequestDetailbDO productrepairRequestDetailbDO = ProductrepairRequestDetailbConvert.INSTANCE.convert(productrepairRequestDetailbCreateReqVO); |
|
|
|
productrepairRequestDetailbDO.setMasterId(productrepairRequestDetailaDO.getId()); |
|
|
|
childList.add(productrepairRequestDetailbDO); |
|
|
|
ProductrepairRequestDetailbDO detailbDO = ProductrepairRequestDetailbConvert.INSTANCE.convert(productrepairRequestDetailbCreateReqVO); |
|
|
|
detailbDO.setMasterId(detailaDO.getId()); |
|
|
|
detailbDO.setNumber(detailaDO.getNumber()); |
|
|
|
validateDetailbBom(detailbDO,detailaDO,mainBo); // 创建二级子表数据
|
|
|
|
detailbDO.setId(null); |
|
|
|
childList.add(detailbDO); |
|
|
|
} |
|
|
|
productrepairRequestDetailbMapper.insertBatch(childList); |
|
|
|
} |
|
|
|
return productrepairRequestMainDO; |
|
|
|
return mainBo; |
|
|
|
} |
|
|
|
|
|
|
|
private void validateDetailbBom(ProductrepairRequestDetailbDO detailbDO, ProductrepairRequestDetailaDO detailaDO, ProductrepairRequestMainDO mainBo) { |
|
|
|
// 校验--物品基本信息
|
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailbDO.getItemCode()); |
|
|
|
// 赋值物品Item相关信息
|
|
|
|
detailbDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
detailbDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
detailbDO.setItemName(itembasicDO.getName()); |
|
|
|
detailbDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
// 校验库存余额
|
|
|
|
List<String> inventoryStatus = new ArrayList<>(); |
|
|
|
inventoryStatus.add("OK"); // 查询合格的边料库存余额
|
|
|
|
List<BalanceDO> list = jobUtils.selectlocationReturnManagementAccuracy(detailbDO.getItemCode(),null,null,detailaDO.getFromLocationCode(),inventoryStatus); |
|
|
|
BalanceDO balanceDO = list.get(0); // 去第一条库存余额
|
|
|
|
detailbDO.setInventoryStatus(balanceDO.getInventoryStatus()); |
|
|
|
detailbDO.setBatch(balanceDO.getBatch()); |
|
|
|
detailbDO.setPackingNumber(balanceDO.getPackingNumber()); |
|
|
|
detailbDO.setFromLocationCode(balanceDO.getLocationCode()); |
|
|
|
detailbDO.setCreateTime(LocalDateTime.now()); |
|
|
|
detailbDO.setCreator(null); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateDetailMethod(ProductrepairRequestMainDO mainDO, ProductrepairRequestDetailaBaseVO detailDo,BusinesstypeDO businesstypeDO) { |
|
|
@ -249,22 +272,23 @@ public class ProductrepairRequestMainServiceImpl implements ProductrepairRequest |
|
|
|
detailDo.setFromLocationCode(workstationDO.getRawLocationCode()); |
|
|
|
} |
|
|
|
// 校验--库存余额 TB——>TB1
|
|
|
|
validateBalance(detailDo); |
|
|
|
validateBalance(detailDo,mainDO); |
|
|
|
// 校验--物品类型 DBT——>DBT2——>IT
|
|
|
|
jobUtils.selectItembasicExist(itembasicDO.getType(),businesstypeDO); |
|
|
|
jobUtils.ifInType(itembasicDO.getType(),businesstypeDO); |
|
|
|
// 校验--来源库位 DBT——>DBT2——>LO
|
|
|
|
jobUtils.ifInToLocationType(detailDo.getFromLocationCode(), businesstypeDO); |
|
|
|
// 校验--库存状态 DBT——>DBT2——>ISO
|
|
|
|
jobUtils.ifOutInventoryStatuses(detailDo.getInventoryStatus(),businesstypeDO); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateBalance(ProductrepairRequestDetailaBaseVO detailDo) { |
|
|
|
private void validateBalance(ProductrepairRequestDetailaBaseVO detailDo,ProductrepairRequestMainDO mainDO) { |
|
|
|
String inventoryStatus = detailDo.getInventoryStatus(); |
|
|
|
String[] inventoryArray = inventoryStatus.split(","); |
|
|
|
List<String> inventorystatus = Arrays.asList(inventoryArray); |
|
|
|
List<BalanceDO> list = jobUtils.selectlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getPackingNumber(), detailDo.getBatch(), detailDo.getFromLocationCode(),inventorystatus); |
|
|
|
if(list != null && list.size() > 0){ |
|
|
|
BalanceDO balanceDO = list.get(0); |
|
|
|
mainDO.setFromWarehouseCode(balanceDO.getWarehouseCode()); |
|
|
|
if(balanceDO.getQty().compareTo(detailDo.getQty()) < 0){ |
|
|
|
// 返修数量【qty】不能大于库存数量【banlance.qty】
|
|
|
|
throw exception(PRODUCTREPAIR_REQUEST_DETAILA_QTY_ERROR,detailDo.getQty(),balanceDO.getQty()); |
|
|
@ -480,11 +504,28 @@ public class ProductrepairRequestMainServiceImpl implements ProductrepairRequest |
|
|
|
IPage<ProductrepairRequestBomRespVO> myPage = MyBatisUtils.buildPage(pageVO); |
|
|
|
List<Map<String,Object>> list = jobUtils.bomDismantleList(pageVO.getItemCode(),""); |
|
|
|
List<ProductrepairRequestBomRespVO> resultList = new ArrayList<>(); |
|
|
|
Map<String,ProductrepairRequestDetailbDO> detailbDOMap = new HashMap<>(); |
|
|
|
if(pageVO.getMasterId() != null){ |
|
|
|
List<ProductrepairRequestDetailbDO> detailbBOList = productrepairRequestDetailbMapper.selectList(pageVO.getMasterId()); |
|
|
|
if(detailbBOList != null && detailbBOList.size() > 0){ |
|
|
|
detailbDOMap.putAll(detailbBOList.stream().collect(Collectors.toMap(ProductrepairRequestDetailbDO::getItemCode,item -> item))); |
|
|
|
} |
|
|
|
} |
|
|
|
for(Map<String,Object> map:list){ |
|
|
|
ProductrepairRequestBomRespVO productrepairRequestBomRespVO = new ProductrepairRequestBomRespVO(); |
|
|
|
productrepairRequestBomRespVO.setItemCode(map.get("itemCode") != null?map.get("itemCode").toString():""); |
|
|
|
String itemCode = map.get("itemCode") != null?map.get("itemCode").toString():""; |
|
|
|
productrepairRequestBomRespVO.setItemCode(itemCode); |
|
|
|
if(StringUtils.isNotEmpty(productrepairRequestBomRespVO.getItemCode())){ |
|
|
|
if(detailbDOMap.get(productrepairRequestBomRespVO.getItemCode()) != null){ |
|
|
|
ProductrepairRequestDetailbDO productrepairRequestDetailbDO = detailbDOMap.get(productrepairRequestBomRespVO.getItemCode()); |
|
|
|
productrepairRequestBomRespVO = ProductrepairRequestDetailbConvert.INSTANCE.convertRespVO(productrepairRequestDetailbDO); |
|
|
|
}else { |
|
|
|
productrepairRequestBomRespVO.setQty(BigDecimal.ZERO); |
|
|
|
} |
|
|
|
}else { |
|
|
|
productrepairRequestBomRespVO.setQty(BigDecimal.ZERO); |
|
|
|
} |
|
|
|
productrepairRequestBomRespVO.setUom(map.get("uom") != null?map.get("uom").toString():""); |
|
|
|
productrepairRequestBomRespVO.setQty(BigDecimal.ZERO); |
|
|
|
productrepairRequestBomRespVO.setVersion(map.get("version") != null?map.get("version").toString():""); |
|
|
|
resultList.add(productrepairRequestBomRespVO); |
|
|
|
} |
|
|
@ -494,5 +535,10 @@ public class ProductrepairRequestMainServiceImpl implements ProductrepairRequest |
|
|
|
return pageResult; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<TransferissueRequestMainImportErrorVO> importProductrepairRequestMainList(List<ProductrepairRequestMainCreateReqVO> createReqVOList, Integer mode, Boolean updatePart) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|