yys
1.产品导入新增excel错误提示
2.bom导入新增excel错误提示
3.仓储物流增加库位字段
4.修改发货出库-新增库位
5.修改采购入库审核-新增库位
6.生产入库-新增库位,审核
| | |
| | | package com.ruoyi.approve.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.ruoyi.approve.pojo.ApproveNode; |
| | | import com.ruoyi.approve.service.IApproveNodeService; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.purchase.pojo.PurchaseLedger; |
| | | import com.ruoyi.sales.pojo.SalesLedgerProduct; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | |
| | | @Api(tags = "审æ¹è®°å½") |
| | | @RestController |
| | |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | @ApiOperation(value = "éè´å®¡æ ¸å¡«ååºä½å
¥åº") |
| | | @PostMapping("/purchaseApprove") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public AjaxResult purchaseApprove(@RequestBody List<SalesLedgerProduct> salesLedgerProducts) { |
| | | approveNodeService.purchaseApprove(salesLedgerProducts); |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * åå§å审æ¹èç¹ |
| | | * @param id |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.approve.pojo.ApproveNode; |
| | | import com.ruoyi.sales.pojo.SalesLedgerProduct; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | |
| | | void updateApproveNode(ApproveNode approveNode) throws IOException; |
| | | |
| | | void delApproveNodeByApproveId(String id); |
| | | |
| | | void purchaseApprove(List<SalesLedgerProduct> salesLedgerProducts); |
| | | } |
| | |
| | | // è´¨æ£ |
| | | if (salesLedgerProduct.getIsChecked()) { |
| | | purchaseLedgerServiceImpl.addQualityInspect(purchaseLedger, salesLedgerProduct); |
| | | }else { |
| | | //ç´æ¥å
¥åº |
| | | stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId()); |
| | | } |
| | | } |
| | | } else if (status.equals(3)) { |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void purchaseApprove(List<SalesLedgerProduct> salesLedgerProducts) { |
| | | for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) { |
| | | stockUtils.addStock(salesLedgerProduct.getProductModelId(), |
| | | salesLedgerProduct.getQuantity(), |
| | | StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), |
| | | salesLedgerProduct.getId(), |
| | | salesLedgerProduct.getStockLocation(), |
| | | 2); |
| | | } |
| | | } |
| | | |
| | | //审æ¹ç±»åè·å(ä¸å端页é¢å¯¹åº) |
| | | private String approveProcessType(Integer approveType){ |
| | | switch (approveType){ |
| | |
| | | */ |
| | | @Log(title = "导å
¥äº§å",businessType = BusinessType.IMPORT) |
| | | @PostMapping("import") |
| | | public AjaxResult importProduct(MultipartFile file) { |
| | | return AjaxResult.success(productModelService.importProduct(file)); |
| | | public void importProduct(HttpServletResponse response,MultipartFile file) { |
| | | productModelService.importProduct(file,response); |
| | | } |
| | | |
| | | /** |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.basic.dto; |
| | | |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Excel; |
| | | import lombok.Data; |
| | | import org.apache.poi.ss.usermodel.IndexedColors; |
| | | |
| | | @Data |
| | | public class ProductModelExcelCopyErrorDto extends ProductModelExcelCopyDto{ |
| | | |
| | | @Excel(name = "é误信æ¯",sort = 1,color = IndexedColors.RED) |
| | | private String errorMsg; |
| | | |
| | | } |
| | |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty(value = "é误信æ¯") |
| | | @TableField(exist = false) |
| | | private String errorMsg; |
| | | |
| | | @TableField(exist = false) |
| | | private List<CommonFile> SalesLedgerFiles; |
| | | |
| | |
| | | import com.ruoyi.basic.pojo.ProductModel; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | |
| | |
| | | */ |
| | | IPage<ProductModel> modelListPage(Page page , ProductDto productDto); |
| | | |
| | | Boolean importProduct(MultipartFile file); |
| | | void importProduct(MultipartFile file, HttpServletResponse response); |
| | | } |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Boolean importProduct(MultipartFile file) { |
| | | public void importProduct(MultipartFile file, HttpServletResponse response) { |
| | | ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class); |
| | | List<ProductModelExcelCopyDto> productModelList = null; |
| | | try { |
| | | ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class); |
| | | List<ProductModelExcelCopyDto> productModelList = productModelExcelUtil.importExcel(file.getInputStream()); |
| | | if(CollectionUtils.isNotEmpty(productModelList)){ |
| | | // 2. æäº§ååç§°,å¾çº¸ç¼å·åç» |
| | | Map<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> groupedByProductNameAndDrawingNumber = |
| | | productModelList.stream() |
| | | .collect(Collectors.groupingBy( |
| | | dto -> new AbstractMap.SimpleEntry<>( |
| | | dto.getProductName(), |
| | | dto.getModel() |
| | | ) |
| | | )); |
| | | // 2. éååç»ç»æå¤çæ°æ® |
| | | for (Map.Entry<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> entry : groupedByProductNameAndDrawingNumber.entrySet()) { |
| | | Map.Entry<String, String> groupKey = entry.getKey(); |
| | | String productName = groupKey.getKey(); // 产ååç§° |
| | | String drawingNumber = groupKey.getValue(); // å¾çº¸ç¼å· |
| | | List<ProductModelExcelCopyDto> dtoList = entry.getValue(); |
| | | |
| | | // 空å表跳è¿ï¼é¿å
åç»NPE |
| | | if (CollectionUtils.isEmpty(dtoList)) { |
| | | continue; |
| | | } |
| | | ProductModelExcelCopyDto firstDto = dtoList.get(0); |
| | | String model = firstDto.getModel(); |
| | | |
| | | // 3. æ¥è¯¢/æ°å¢äº§åï¼æäº§ååç§°+å¾çº¸ç¼å·ï¼æ´ç²¾åï¼ |
| | | Product product = getOrCreateProduct(productName, drawingNumber); |
| | | |
| | | // 4. æ¹éå¤ç产ååå·ï¼æå¾çº¸ç¼å·+åå·ï¼ |
| | | processProductModel(dtoList, product.getId(), model, drawingNumber); |
| | | } |
| | | } |
| | | return true; |
| | | productModelList = productModelExcelUtil.importExcel(file.getInputStream()); |
| | | }catch (Exception e) { |
| | | e.printStackTrace(); |
| | | throw new ServiceException("æä»¶è§£æå¤±è´¥"); |
| | | } |
| | | return false; |
| | | if(CollectionUtils.isNotEmpty(productModelList)){ |
| | | // 2. æäº§ååç§°,å¾çº¸ç¼å·åç» |
| | | Map<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> groupedByProductNameAndDrawingNumber = |
| | | productModelList.stream() |
| | | .collect(Collectors.groupingBy( |
| | | dto -> new AbstractMap.SimpleEntry<>( |
| | | dto.getProductName(), |
| | | dto.getModel() |
| | | ) |
| | | )); |
| | | List<ProductModelExcelCopyErrorDto> errorList = new ArrayList<>(); |
| | | // 2. éååç»ç»æå¤çæ°æ® |
| | | for (Map.Entry<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> entry : groupedByProductNameAndDrawingNumber.entrySet()) { |
| | | Map.Entry<String, String> groupKey = entry.getKey(); |
| | | String productName = groupKey.getKey(); // 产ååç§° |
| | | String drawingNumber = groupKey.getValue(); // å¾çº¸ç¼å· |
| | | List<ProductModelExcelCopyDto> dtoList = entry.getValue(); |
| | | |
| | | // 空å表跳è¿ï¼é¿å
åç»NPE |
| | | if (CollectionUtils.isEmpty(dtoList)) { |
| | | continue; |
| | | } |
| | | ProductModelExcelCopyDto firstDto = dtoList.get(0); |
| | | String model = firstDto.getModel(); |
| | | |
| | | // 3. æ¥è¯¢/æ°å¢äº§åï¼æäº§ååç§°+å¾çº¸ç¼å·ï¼æ´ç²¾åï¼ |
| | | Product product = getOrCreateProduct(productName, drawingNumber); |
| | | |
| | | // 4. æ¹éå¤ç产ååå·ï¼æå¾çº¸ç¼å·+åå·ï¼ |
| | | processProductModel(dtoList, product.getId(), model, drawingNumber,errorList); |
| | | } |
| | | if(CollectionUtils.isNotEmpty(errorList)){ |
| | | // 5. æ¹éå¤çéè¯¯æ°æ® |
| | | ExcelUtil<ProductModelExcelCopyErrorDto> errorExcelUtil = new ExcelUtil<>(ProductModelExcelCopyErrorDto.class); |
| | | errorExcelUtil.exportExcel(response,errorList, "éè¯¯æ°æ®"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | * æ½åéç¨æ¹æ³ï¼å¤ç产ååå·ï¼æ°å¢/æ´æ°ï¼ |
| | | */ |
| | | private void processProductModel(List<ProductModelExcelCopyDto> dtoList, |
| | | Long productId, String model, String drawingNumber) { |
| | | Long productId, |
| | | String model, |
| | | String drawingNumber, |
| | | List<ProductModelExcelCopyErrorDto> errorList) { |
| | | // æ¥è¯¢ææå·¥èºè·¯çº¿ |
| | | List<ProductProcess> productRoutes = productProcessMapper.selectList(new QueryWrapper<ProductProcess>()); |
| | | if(CollectionUtils.isEmpty(productRoutes)){ |
| | | throw new ServiceException("请å
å建产åå·¥èºè·¯çº¿"); |
| | | productRoutes = new ArrayList<>(); |
| | | } |
| | | for (ProductModelExcelCopyDto dto : dtoList) { |
| | | // æ¥è¯¢æ¡ä»¶ï¼åå·+å¾çº¸ç¼å·ï¼æ´ç²¾åï¼ç¬¦ååç»é»è¾ï¼ |
| | |
| | | for (ReturnSaleProductDto returnSaleProduct : list) { |
| | | bigDecimal = bigDecimal.add(returnSaleProduct.getPrice()); |
| | | // æ¯å¦æè´¨éé®é¢ |
| | | if (returnSaleProduct.getIsQuality() == 1) { |
| | | // æè´¨éé®é¢ï¼å
¥ä¸åæ ¼åº |
| | | stockUtils.addUnStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInUnQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode(),returnSaleProduct.getId()); |
| | | }else{ |
| | | // æ è´¨éé®é¢ï¼å
¥åæ ¼åº |
| | | stockUtils.addStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode(),returnSaleProduct.getId()); |
| | | } |
| | | // if (returnSaleProduct.getIsQuality() == 1) { |
| | | // // æè´¨éé®é¢ï¼å
¥ä¸åæ ¼åº |
| | | // stockUtils.addUnStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInUnQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode(),returnSaleProduct.getId()); |
| | | // }else{ |
| | | // // æ è´¨éé®é¢ï¼å
¥åæ ¼åº |
| | | // stockUtils.addStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode(),returnSaleProduct.getId()); |
| | | // } |
| | | returnSaleProduct.setStatus(1); |
| | | returnSaleProductService.updateById(returnSaleProduct); |
| | | } |
| | |
| | | stockUninventoryDto.setRecordType(String.valueOf(recordType)); |
| | | stockUninventoryDto.setQualitity(quantity); |
| | | stockUninventoryDto.setProductModelId(productModelId); |
| | | stockUninventoryDto.setStockLocation("ä¸åæ ¼åºä½"); |
| | | stockUninventoryService.addStockUninventory(stockUninventoryDto); |
| | | } |
| | | |
| | |
| | | stockUninventoryDto.setRecordType(String.valueOf(recordType)); |
| | | stockUninventoryDto.setQualitity(quantity); |
| | | stockUninventoryDto.setProductModelId(productModelId); |
| | | stockUninventoryDto.setStockLocation("ä¸åæ ¼åºä½"); |
| | | stockUninventoryService.subtractStockUninventory(stockUninventoryDto); |
| | | } |
| | | |
| | |
| | | * @param recordType |
| | | * @param recordId |
| | | */ |
| | | public void addStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) { |
| | | public void addStock(Long productModelId, |
| | | BigDecimal quantity, |
| | | String recordType, |
| | | Long recordId, |
| | | String stockLocation, |
| | | Integer isProduction) { |
| | | StockInventoryDto stockInventoryDto = new StockInventoryDto(); |
| | | stockInventoryDto.setRecordId(recordId); |
| | | stockInventoryDto.setRecordType(String.valueOf(recordType)); |
| | | stockInventoryDto.setQualitity(quantity); |
| | | stockInventoryDto.setProductModelId(productModelId); |
| | | stockInventoryService.addstockInventory(stockInventoryDto); |
| | | stockInventoryDto.setStockLocation(stockLocation); |
| | | stockInventoryService.addstockInventory(stockInventoryDto,isProduction); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param recordType |
| | | * @param recordId |
| | | */ |
| | | public void substractStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) { |
| | | public void substractStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId,String stockLocation) { |
| | | StockInventoryDto stockInventoryDto = new StockInventoryDto(); |
| | | stockInventoryDto.setRecordId(recordId); |
| | | stockInventoryDto.setRecordType(String.valueOf(recordType)); |
| | | stockInventoryDto.setQualitity(quantity); |
| | | stockInventoryDto.setProductModelId(productModelId); |
| | | stockInventoryDto.setStockLocation(stockLocation); |
| | | stockInventoryService.subtractStockInventory(stockInventoryDto); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | @PostMapping("uploadBom") |
| | | @PreAuthorize("@ss.hasPermi('product:bom:import')") |
| | | @PostMapping("/uploadBom") |
| | | @Log(title = "æ ¹æ®Excel导å
¥BOM", businessType = BusinessType.IMPORT) |
| | | @ApiOperation("æ ¹æ®Excel导å
¥BOM") |
| | | public AjaxResult uploadBom(@RequestParam("file") MultipartFile file) { |
| | | return productBomService.uploadBom(file); |
| | | public void uploadBom(@RequestParam("file") MultipartFile file,HttpServletResponse response) { |
| | | productBomService.uploadBom(file,response); |
| | | } |
| | | |
| | | @PostMapping("exportBom") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.production.dto; |
| | | |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Excel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.apache.poi.ss.usermodel.IndexedColors; |
| | | |
| | | @Data |
| | | public class BomImportErrorDto extends BomImportDto{ |
| | | |
| | | @ApiModelProperty(value = "é误信æ¯") |
| | | @Excel(name = "é误信æ¯",sort = 1,color = IndexedColors.RED) |
| | | private String errorMsg; |
| | | |
| | | } |
| | |
| | | private String npsNo; |
| | | |
| | | /** |
| | | * ä¸éè¿åå |
| | | */ |
| | | @ApiModelProperty(value = "ä¸éè¿åå ") |
| | | @Excel(name = "ä¸éè¿åå ") |
| | | private String reason; |
| | | |
| | | /** |
| | | * å®é
å
¥åºæ°é |
| | | */ |
| | | @ApiModelProperty(value = "å®é
å
¥åºæ°é") |
| | | @Excel(name = "å®é
å
¥åºæ°é") |
| | | private BigDecimal actualStockInNum; |
| | | |
| | | /** |
| | | * ç§æ·id |
| | | */ |
| | | @ApiModelProperty(value = "ç§æ·id") |
| | |
| | | @ApiModelProperty(value = "ç§æ·ID") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Long tenantId; |
| | | |
| | | @ApiModelProperty(value = "åºä½") |
| | | @TableField(exist = false) |
| | | private String stockLocation; |
| | | } |
| | |
| | | |
| | | AjaxResult add(ProductBom productBom); |
| | | |
| | | AjaxResult uploadBom(MultipartFile file); |
| | | void uploadBom(MultipartFile file,HttpServletResponse response); |
| | | |
| | | void exportBom(HttpServletResponse response, Integer bomId); |
| | | } |
| | |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.production.dto.BomImportDto; |
| | | import com.ruoyi.production.dto.BomImportErrorDto; |
| | | import com.ruoyi.production.dto.ProductBomDto; |
| | | import com.ruoyi.production.dto.ProductStructureDto; |
| | | import com.ruoyi.production.mapper.ProductBomMapper; |
| | |
| | | import com.ruoyi.production.service.ProductBomService; |
| | | import com.ruoyi.production.service.ProductProcessService; |
| | | import com.ruoyi.production.service.ProductStructureService; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | * @param children å½åç¶é¡¹çå项å表 |
| | | * @return ä¿ååçç¶é¡¹äº§åID |
| | | */ |
| | | private void saveBomRecursive(List<BomImportDto> children,ProductBom bom,ProductModel rootModel,Map<String, Long> processMap) { |
| | | private void saveBomRecursive(List<BomImportDto> children, |
| | | ProductBom bom,ProductModel rootModel, |
| | | Map<String, Long> processMap, |
| | | List<BomImportErrorDto> errorList ) { |
| | | // 1. è·åchildrenä¸å项产åç¼å·ä¸ºç©ºçæ°æ® |
| | | List<BomImportDto> parentChildren = children |
| | | .stream() |
| | | .filter(child -> StringUtils.isEmpty(child.getChildCode())) |
| | | .collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(parentChildren)){ |
| | | throw new ServiceException("è¯·éæ©ç¶é¡¹äº§åç¼å·"); |
| | | return; |
| | | } |
| | | BomImportDto parentId = parentChildren.get(0); // ç¶çº§æ°æ® |
| | | ProductStructure rootNode = new ProductStructure(); |
| | |
| | | } |
| | | // è·åå项模åä¿¡æ¯ |
| | | ProductModel childModel = findModel(child.getChildName(), child.getChildSpec()); |
| | | |
| | | if(childModel.getId() == null){ |
| | | BomImportErrorDto errorDto = new BomImportErrorDto(); |
| | | BeanUtils.copyProperties(child, errorDto); |
| | | errorDto.setErrorMsg(childModel.getErrorMsg()); |
| | | errorList.add(errorDto); |
| | | continue; |
| | | } |
| | | // æå
¥ç»æè¡¨ |
| | | ProductStructure node = new ProductStructure(); |
| | | node.setBomId(bom.getId()); |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public AjaxResult uploadBom(MultipartFile file) { |
| | | public void uploadBom(MultipartFile file,HttpServletResponse response) { |
| | | ExcelUtil<BomImportDto> util = new ExcelUtil<>(BomImportDto.class); |
| | | List<BomImportDto> list; |
| | | try { |
| | | list = util.importExcel(file.getInputStream()); |
| | | } catch (Exception e) { |
| | | return AjaxResult.error("Excelè§£æå¤±è´¥"); |
| | | throw new ServiceException("Excelè§£æå¤±è´¥"); |
| | | } |
| | | |
| | | if (list == null || list.isEmpty()) return AjaxResult.error("æ°æ®ä¸ºç©º"); |
| | | if (list == null || list.isEmpty()) throw new ServiceException("æä»¶ä¸ºç©º"); |
| | | |
| | | // å¤çå·¥åº |
| | | list.forEach(dto -> { |
| | |
| | | Map<String, List<BomImportDto>> parentMap = list.stream() |
| | | .filter(bom -> StringUtils.isNotBlank(bom.getParentCode())) |
| | | .collect(Collectors.groupingBy(BomImportDto::getParentCode)); |
| | | List<BomImportErrorDto> errorList = new ArrayList<>(); |
| | | // 2. éåææç¶é¡¹ï¼éå½ä¿å |
| | | for (Map.Entry<String, List<BomImportDto>> entry : parentMap.entrySet()) { |
| | | |
| | | // å建 BOM æ°æ® |
| | | BomImportDto first = entry.getValue().get(0); |
| | | ProductModel rootModel = findModel(first.getParentName(), first.getParentSpec()); |
| | | if(rootModel.getId() == null){ |
| | | BomImportErrorDto error = new BomImportErrorDto(); |
| | | BeanUtils.copyProperties(first, error); |
| | | error.setErrorMsg(rootModel.getErrorMsg()); |
| | | errorList.add(error); |
| | | continue; |
| | | } |
| | | ProductBom bom = new ProductBom(); |
| | | bom.setProductModelId(rootModel.getId()); |
| | | bom.setVersion("1.0"); |
| | |
| | | productBomMapper.updateById(bom); |
| | | // å¤çbomåè¡¨æ°æ® |
| | | List<BomImportDto> children = entry.getValue(); |
| | | saveBomRecursive(children,bom,rootModel,processMap); |
| | | saveBomRecursive(children,bom,rootModel,processMap,errorList); |
| | | } |
| | | return AjaxResult.success("BOM导å
¥æå"); |
| | | // 夿æ¯å¦æéè¯¯æ°æ®ï¼æå°±å¯¼åº |
| | | if(CollectionUtils.isNotEmpty(errorList)){ |
| | | ExcelUtil<BomImportErrorDto> utils = new ExcelUtil<>(BomImportErrorDto.class); |
| | | utils.exportExcel(response,errorList, "BOMéè¯¯æ°æ®"); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | ProductModel model = productModelService.getOne(new LambdaQueryWrapper<ProductModel>() |
| | | // .eq(ProductModel::getProductId, product.getId()) |
| | | .eq(ProductModel::getModel, spec).last("limit 1")); |
| | | if (model == null) throw new ServiceException("å¾çº¸ç¼å·æªç»´æ¤ï¼" + name + "[" + spec + "]"); |
| | | if (model == null){ |
| | | model = new ProductModel(); |
| | | model.setErrorMsg("å¾çº¸ç¼å·æªç»´æ¤ï¼" + "[" + spec + "]"); |
| | | } |
| | | return model; |
| | | } |
| | | |
| | |
| | | } |
| | | for (ProductionProductInput productionProductInput : productionProductInputs) { |
| | | productionProductInputMapper.insert(productionProductInput); |
| | | stockUtils.substractStock(productionProductInput.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductInput.getProductOrderId()); |
| | | stockUtils.substractStock(productionProductInput.getProductModelId(), |
| | | productionProductInput.getQuantity(), |
| | | StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), |
| | | productionProductInput.getProductOrderId(), |
| | | productionProductInput.getStockLocation()); |
| | | // æ£é¤ç©ææ¸
å |
| | | ProductStructureRecord productStructureRecord = productStructureRecordMapper.selectById(productionProductInput.getProductStructureRecordId()); |
| | | if(productStructureRecord != null){ |
| | |
| | | productionProductInput1.setReturnQuantity(qty.add(qty1)); |
| | | productionProductInputMapper.updateById(productionProductInput1); |
| | | // éæå
¥åº |
| | | stockUtils.addStock(input.getProductModelId(), input.getReturnQuantity(), StockInQualifiedRecordTypeEnum.RETURN_MATERIAL_IN.getCode(), input.getId()); |
| | | stockUtils.addStock(input.getProductModelId(), |
| | | input.getReturnQuantity(), StockInQualifiedRecordTypeEnum.RETURN_MATERIAL_IN.getCode(), |
| | | input.getId(), |
| | | input.getStockLocation(), |
| | | 2); |
| | | // å¢å ç©ææ¸
å |
| | | ProductStructureRecord productStructureRecord = productStructureRecordMapper.selectById(input.getProductStructureRecordId()); |
| | | if(productStructureRecord != null){ |
| | |
| | | productOrder.setEndTime(LocalDateTime.now());//ç»ææ¶é´ |
| | | productOrder.setStatus("已宿"); |
| | | // çäº§å®æå
¥åº |
| | | stockUtils.addStock(productProcessRouteItem.getProductModelId(), productOrder.getCompleteQuantity(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId()); |
| | | stockUtils.addStock(productProcessRouteItem.getProductModelId(), |
| | | productOrder.getCompleteQuantity(), |
| | | StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), |
| | | productOrder.getId(), |
| | | "", |
| | | 1); |
| | | } |
| | | // if (productWorkOrderList.stream().filter(item -> item.getStatus() == 3).count() == productProcessRouteItems.size() - 1) { |
| | | // |
| | |
| | | qualityUnqualifiedMapper.insert(qualityUnqualified); |
| | | } else { |
| | | //åæ ¼ç´æ¥å
¥åº |
| | | stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), qualityInspect.getId()); |
| | | stockUtils.addStock(qualityInspect.getProductModelId(), |
| | | qualityInspect.getQuantity(), |
| | | StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), |
| | | qualityInspect.getId(),"è´¨æ£åæ ¼å
¥åº",2); |
| | | } |
| | | qualityInspect.setInspectState(1);//å·²æäº¤ |
| | | return qualityInspectMapper.updateById(qualityInspect); |
| | |
| | | break; |
| | | case "è®©æ¥æ¾è¡": |
| | | //è°ç¨æäº¤åæ ¼çæ¥å£ |
| | | stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId()); |
| | | stockUtils.addStock(qualityInspect.getProductModelId(), |
| | | unqualified.getQuantity(), |
| | | StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), |
| | | unqualified.getId(), |
| | | "è®©æ¥æ¾è¡",2); |
| | | qualityInspect.setCheckResult("åæ ¼"); |
| | | qualityInspectService.submit(qualityInspect); |
| | | break; |
| | |
| | | return AjaxResult.success(listPage); |
| | | } |
| | | |
| | | @PostMapping("/update") |
| | | @ApiOperation("å货审æ¹,æ´æ°å货审æ¹ç¶æ") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public AjaxResult update(@RequestBody ShipmentApproval req) { |
| | | |
| | | // æ¥è¯¢åè´§å®¡æ¹ |
| | | ShipmentApproval shipmentApproval = shipmentApprovalMapper.selectById(req.getId()); |
| | | if (shipmentApproval == null) { |
| | | return AjaxResult.error("å货审æ¹ä¸åå¨"); |
| | | } |
| | | |
| | | // æ´æ°å货审æ¹ç¶æ |
| | | shipmentApproval.setApproveStatus(req.getApproveStatus()); |
| | | boolean update = shipmentApprovalService.updateById(shipmentApproval); |
| | | if (!update) { |
| | | // äºå¡åæ» |
| | | throw new ServiceException("åè´§å®¡æ¹æ´æ°å¤±è´¥"); |
| | | } |
| | | // æ¥è¯¢å
³èçéå®å°è´¦äº§å |
| | | SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId()); |
| | | if (salesLedgerProduct == null) { |
| | | // æå¼å¸¸äºå¡åæ» |
| | | throw new ServiceException("éå®å°è´¦ä¸åå¨ï¼å®¡æ¹åæ»"); |
| | | } |
| | | |
| | | // åæ¥æ´æ°éå®å°è´¦äº§åç审æ¹ç¶æ |
| | | salesLedgerProduct.setApproveStatus(req.getApproveStatus()); |
| | | salesLedgerProductService.updateById(salesLedgerProduct); |
| | | |
| | | // 审æ¹éè¿ |
| | | if (req.getApproveStatus() == 3) { |
| | | // // æ¥è¯¢éè´å
¥åºè®°å½ |
| | | // LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>() |
| | | // .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId()); |
| | | // ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper); |
| | | // |
| | | // if (procurementRecordStorage == null) { |
| | | // // ä¿è¯åé¢çä¿®æ¹å
¨é¨åæ» |
| | | // throw new ServiceException("éè´è®°å½ä¸åå¨ï¼å®¡æ¹åæ»"); |
| | | // } |
| | | |
| | | |
| | | //åºåº |
| | | stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId()); |
| | | } |
| | | |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 导åºåè´§ä¿¡æ¯ç®¡ç |
| | | */ |
| | |
| | | @Data |
| | | public class ShippingInfoDto extends ShippingInfo { |
| | | |
| | | @ApiModelProperty(value = "åºä½") |
| | | @TableField(exist = false) |
| | | private String stockLocation; |
| | | |
| | | /** |
| | | * 审æ¹äººidå表 |
| | | */ |
| | |
| | | */ |
| | | private BigDecimal returnTotal = BigDecimal.ZERO; |
| | | |
| | | private String productCategory; |
| | | |
| | | private String specificationModel; |
| | | |
| | | } |
| | |
| | | @TableName("sales_ledger_product") |
| | | @Data |
| | | public class SalesLedgerProduct implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty(value = "åºä½") |
| | | @TableField(exist = false) |
| | | private String stockLocation; |
| | | |
| | | /** |
| | | * 产åä¿¡æ¯ä¸»é® |
| | | */ |
| | |
| | | @ApiModel(value = "ShippingInfoDetail对象", description = "åè´§æç»è¡¨") |
| | | public class ShippingInfoDetail implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "åºä½") |
| | | private String stockLocation; |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | |
| | | } |
| | | // æ£åºå |
| | | shippingInfo.setShippingTotal(shippingInfoDetail.getShippingNum()); |
| | | shippingInfo.setStockLocation(shippingInfoDetail.getStockLocation()); |
| | | shippingInfoService.deductStock(shippingInfo); |
| | | // è¿ç§»æä»¶ |
| | | if(CollectionUtils.isNotEmpty(shippingInfoDetail.getTempFileIds())){ |
| | |
| | | } |
| | | //æ£ååºå |
| | | SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId()); |
| | | stockUtils.substractStock(salesLedgerProduct.getProductModelId(), req.getShippingTotal(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId()); |
| | | stockUtils.substractStock(salesLedgerProduct.getProductModelId(), |
| | | req.getShippingTotal(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), |
| | | req.getId(), |
| | | req.getStockLocation()); |
| | | byId.setExpressNumber(req.getExpressNumber()); |
| | | byId.setExpressCompany(req.getExpressCompany()); |
| | | byId.setStatus(req.getStatus()); |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; |
| | | import com.ruoyi.framework.aspectj.lang.annotation.Log; |
| | | import com.ruoyi.framework.aspectj.lang.enums.BusinessType; |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.framework.web.domain.R; |
| | | import com.ruoyi.stock.dto.StockInRecordDto; |
| | | import com.ruoyi.stock.dto.StockInventoryDto; |
| | | import com.ruoyi.stock.service.StockInRecordService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | |
| | | return AjaxResult.success(stockInRecordService.batchDelete(ids)); |
| | | } |
| | | |
| | | @ApiOperation("ç产å
¥åºå®¡æ ¸") |
| | | @PostMapping("/productionApprove") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R productionApprove(@RequestBody StockInRecordDto stockInRecordDto) { |
| | | return R.ok(stockInRecordService.productionApprove(stockInRecordDto)); |
| | | } |
| | | |
| | | |
| | | @PostMapping("/exportStockInRecord") |
| | | @ApiOperation("导åºå
¥åºè®°å½") |
| | | public void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto) { |
| | |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | |
| | | public R addstockInventory(@RequestBody StockInventoryDto stockInventoryDto) { |
| | | stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode())); |
| | | stockInventoryDto.setRecordId(0L); |
| | | return R.ok(stockInventoryService.addstockInventory(stockInventoryDto)); |
| | | return R.ok(stockInventoryService.addstockInventory(stockInventoryDto,2)); |
| | | } |
| | | |
| | | |
| | |
| | | return R.ok(stockInventoryService.subtractStockInventory(stockInventoryDto)); |
| | | } |
| | | |
| | | |
| | | @PostMapping("importStockInventory") |
| | | @ApiOperation("导å
¥åºå") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R importStockInventory(MultipartFile file) { |
| | | return stockInventoryService.importStockInventory(file); |
| | | } |
| | |
| | | import com.ruoyi.stock.pojo.StockInRecord; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | |
| | | @Data |
| | | public class StockInRecordDto extends StockInRecord { |
| | |
| | | //ç°åé |
| | | private String currentStock; |
| | | |
| | | /** |
| | | * ä¸éè¿åå |
| | | */ |
| | | private String reason; |
| | | |
| | | /** |
| | | * å®é
å
¥åºæ°é |
| | | */ |
| | | private BigDecimal actualStockInNum; |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | @Excel(name = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Excel(name = "åºä½") |
| | | private String stockLocation; |
| | | // |
| | | // @Excel(name = "ææ°æ´æ°æ¶é´") |
| | | // @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | |
| | | @ApiModelProperty(value = "å
¥åºæ°é") |
| | | private BigDecimal stockInNum; |
| | | |
| | | @ApiModelProperty(value = "å¾
å®¡æ ¸å
¥åºæ°éï¼ç产ï¼") |
| | | private BigDecimal waitAuditNum; |
| | | |
| | | @ApiModelProperty(value = "è®°å½ç±»å æä¸¾") |
| | | private String recordType; |
| | | |
| | |
| | | @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private Integer updateUser; |
| | | |
| | | @ApiModelProperty(value = "åºä½") |
| | | private String stockLocation; |
| | | |
| | | @ApiModelProperty(value = "ç¶æï¼1 - å¾
å®¡æ ¸ 2-å·²å
¥åºï¼") |
| | | private Integer status; |
| | | } |
| | |
| | | |
| | | @ApiModelProperty("夿³¨") |
| | | private String remark; |
| | | |
| | | @ApiModelProperty(value = "åºä½") |
| | | private String stockLocation; |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "ç±»å 0åæ ¼å
¥åº 1ä¸åæ ¼å
¥åº") |
| | | private String type; |
| | | |
| | | @ApiModelProperty(value = "åºä½") |
| | | private String stockLocation; |
| | | } |
| | |
| | | @ApiModelProperty("被订åé宿°é") |
| | | private BigDecimal lockedQuantity; |
| | | |
| | | @ApiModelProperty(value = "åºä½") |
| | | private String stockLocation; |
| | | |
| | | } |
| | |
| | | int batchDelete(List<Long> ids); |
| | | |
| | | void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto); |
| | | |
| | | Object productionApprove(StockInRecordDto stockInRecordDto); |
| | | } |
| | |
| | | |
| | | IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto); |
| | | |
| | | Boolean addstockInventory(StockInventoryDto stockInventoryDto); |
| | | Boolean addstockInventory(StockInventoryDto stockInventoryDto,Integer isProduction); |
| | | |
| | | Boolean subtractStockInventory(StockInventoryDto stockInventoryDto); |
| | | |
| | |
| | | package com.ruoyi.stock.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; |
| | |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.EnumUtil; |
| | | import com.ruoyi.common.utils.OrderUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.production.mapper.ProductOrderMapper; |
| | | import com.ruoyi.production.pojo.ProductOrder; |
| | | import com.ruoyi.stock.dto.StockInRecordDto; |
| | | import com.ruoyi.stock.dto.StockInventoryDto; |
| | | import com.ruoyi.stock.dto.StockUninventoryDto; |
| | |
| | | private StockInRecordMapper stockInRecordMapper; |
| | | private StockInventoryMapper stockInventoryMapper; |
| | | private StockUninventoryMapper stockUninventoryMapper; |
| | | |
| | | private ProductOrderMapper productOrderMapper; |
| | | |
| | | @Override |
| | | public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) { |
| | |
| | | StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); |
| | | stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId()); |
| | | stockUninventoryDto.setQualitity(stockInRecord.getStockInNum()); |
| | | stockUninventoryDto.setStockLocation(stockInRecord.getStockLocation()); |
| | | stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto); |
| | | } |
| | | } |
| | |
| | | ExcelUtil<StockInRecordExportData> util = new ExcelUtil<>(StockInRecordExportData.class); |
| | | util.exportExcel(response,list, "å
¥åºè®°å½ä¿¡æ¯"); |
| | | } |
| | | |
| | | @Override |
| | | public Object productionApprove(StockInRecordDto stockInRecordDto) { |
| | | //åè¿è¡æ°å¢åºåæ°éåºå |
| | | //å
æ¥è¯¢åºå表ä¸çäº§åæ¯å¦åå¨ï¼ä¸å卿°å¢ï¼å卿´æ° |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>() |
| | | .lambda() |
| | | .eq(StockInventory::getProductModelId, stockInRecordDto.getProductModelId()) |
| | | .eq(StockInventory::getStockLocation, stockInRecordDto.getStockLocation())); |
| | | StockInventory newStockInventory = new StockInventory(); |
| | | newStockInventory.setProductModelId(stockInRecordDto.getProductModelId()); |
| | | newStockInventory.setQualitity(stockInRecordDto.getActualStockInNum()); |
| | | newStockInventory.setVersion(1); |
| | | newStockInventory.setRemark(stockInRecordDto.getRemark()); |
| | | newStockInventory.setStockLocation(stockInRecordDto.getStockLocation()); |
| | | if (ObjectUtils.isEmpty(oldStockInventory)) { |
| | | stockInventoryMapper.insert(newStockInventory); |
| | | }else { |
| | | StockInventoryDto oldStockInventoryDto = new StockInventoryDto(); |
| | | BeanUtils.copyProperties(oldStockInventory, oldStockInventoryDto); |
| | | stockInventoryMapper.updateAddStockInventory(oldStockInventoryDto); |
| | | } |
| | | stockInRecordDto.setStatus(2); |
| | | stockInRecordDto.setStockInNum(stockInRecordDto.getActualStockInNum() == null ? stockInRecordDto.getWaitAuditNum() : stockInRecordDto.getActualStockInNum()); |
| | | stockInRecordMapper.updateById(stockInRecordDto); |
| | | ProductOrder productOrder = productOrderMapper.selectById(stockInRecordDto.getRecordId()); |
| | | if(productOrder != null){ |
| | | if(StringUtils.isNotEmpty(stockInRecordDto.getReason())){ |
| | | productOrder.setReason(stockInRecordDto.getReason()); |
| | | } |
| | | if(stockInRecordDto.getActualStockInNum() != null){ |
| | | productOrder.setActualStockInNum(stockInRecordDto.getActualStockInNum()); |
| | | } |
| | | productOrderMapper.updateById(productOrder); |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | //å
¥åºè°ç¨ |
| | | |
| | | /** |
| | | * |
| | | * @param stockInventoryDto |
| | | * @param isProduction æ¯å¦ç产å
¥åº 1-æ¯ 2-å¦ï¼ç产éè¦å®¡æ ¸æè½å
¥åºï¼ |
| | | * @return |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Boolean addstockInventory(StockInventoryDto stockInventoryDto) { |
| | | public Boolean addstockInventory(StockInventoryDto stockInventoryDto,Integer isProduction) { |
| | | //æ°å¢å
¥åºè®°å½åæ·»å åºå |
| | | StockInRecordDto stockInRecordDto = new StockInRecordDto(); |
| | | stockInRecordDto.setRecordId(stockInventoryDto.getRecordId()); |
| | | stockInRecordDto.setRecordType(stockInventoryDto.getRecordType()); |
| | | stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity()); |
| | | if(isProduction == 1){ |
| | | stockInRecordDto.setWaitAuditNum(stockInventoryDto.getQualitity()); |
| | | }else{ |
| | | stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity()); |
| | | } |
| | | stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); |
| | | stockInRecordDto.setType("0"); |
| | | stockInRecordDto.setStockLocation(stockInventoryDto.getStockLocation()); |
| | | stockInRecordDto.setStatus(isProduction); |
| | | stockInRecordService.add(stockInRecordDto); |
| | | if(isProduction == 1){ |
| | | return false; |
| | | } |
| | | //åè¿è¡æ°å¢åºåæ°éåºå |
| | | //å
æ¥è¯¢åºå表ä¸çäº§åæ¯å¦åå¨ï¼ä¸å卿°å¢ï¼å卿´æ° |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())); |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>() |
| | | .lambda() |
| | | .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()) |
| | | .eq(StockInventory::getStockLocation, stockInventoryDto.getStockLocation())); |
| | | if (ObjectUtils.isEmpty(oldStockInventory)) { |
| | | StockInventory newStockInventory = new StockInventory(); |
| | | newStockInventory.setProductModelId(stockInventoryDto.getProductModelId()); |
| | |
| | | newStockInventory.setRemark(stockInventoryDto.getRemark()); |
| | | newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity()); |
| | | newStockInventory.setWarnNum(stockInventoryDto.getWarnNum()); |
| | | newStockInventory.setStockLocation(stockInventoryDto.getStockLocation()); |
| | | stockInventoryMapper.insert(newStockInventory); |
| | | }else { |
| | | stockInventoryMapper.updateAddStockInventory(stockInventoryDto); |
| | |
| | | stockOutRecordDto.setStockOutNum(stockInventoryDto.getQualitity()); |
| | | stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); |
| | | stockOutRecordDto.setType("0"); |
| | | stockOutRecordDto.setStockLocation(stockInventoryDto.getStockLocation()); |
| | | stockOutRecordService.add(stockOutRecordDto); |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())); |
| | | StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>() |
| | | .lambda() |
| | | .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()) |
| | | .eq(StockInventory::getStockLocation, stockInventoryDto.getStockLocation())); |
| | | if (ObjectUtils.isEmpty(oldStockInventory)) { |
| | | throw new RuntimeException("产ååºåä¸åå¨"); |
| | | throw new RuntimeException("åºä½ã" + stockInventoryDto.getStockLocation() + "ã产ååºåä¸åå¨"); |
| | | } |
| | | BigDecimal lockedQty = oldStockInventory.getLockedQuantity(); |
| | | if (lockedQty == null) { |
| | |
| | | if (stockInventoryDto.getQualitity().compareTo(oldStockInventory.getQualitity().subtract(lockedQty)) > 0) { |
| | | throw new RuntimeException("åºåä¸è¶³æ æ³åºåº"); |
| | | } |
| | | |
| | | stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto); |
| | | return true; |
| | | } |
| | |
| | | } |
| | | stockInventoryDto.setLockedQuantity(dto.getLockedQuantity()); |
| | | stockInventoryDto.setProductModelId(item.getProductModelId()); |
| | | this.addstockInventory(stockInventoryDto); |
| | | stockInventoryDto.setStockLocation(dto.getStockLocation()); |
| | | this.addstockInventory(stockInventoryDto,2); |
| | | matched = true; |
| | | break; // æ¾å°å¹é
项åè·³åºå¾ªç¯ |
| | | } |
| | |
| | | StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); |
| | | stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId()); |
| | | stockUninventoryDto.setQualitity(stockOutRecord.getStockOutNum()); |
| | | stockUninventoryDto.setStockLocation(stockOutRecord.getStockLocation()); |
| | | stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto); |
| | | } |
| | | } |
| | |
| | | stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity()); |
| | | stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); |
| | | stockInRecordDto.setType("1"); |
| | | stockInRecordDto.setStockLocation(stockUninventoryDto.getStockLocation()); |
| | | stockInRecordService.add(stockInRecordDto); |
| | | //åè¿è¡æ°å¢åºåæ°éåºå |
| | | //å
æ¥è¯¢åºå表ä¸çäº§åæ¯å¦åå¨ï¼ä¸å卿°å¢ï¼å卿´æ° |
| | | StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())); |
| | | StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>() |
| | | .lambda() |
| | | .eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()) |
| | | .eq(StockUninventory::getStockLocation, stockUninventoryDto.getStockLocation())); |
| | | if (ObjectUtils.isEmpty(oldStockUnInventory)) { |
| | | StockUninventory newStockUnInventory = new StockUninventory(); |
| | | newStockUnInventory.setProductModelId(stockUninventoryDto.getProductModelId()); |
| | | newStockUnInventory.setQualitity(stockUninventoryDto.getQualitity()); |
| | | newStockUnInventory.setVersion(1); |
| | | newStockUnInventory.setRemark(stockUninventoryDto.getRemark()); |
| | | newStockUnInventory.setStockLocation(stockUninventoryDto.getStockLocation()); |
| | | stockUninventoryMapper.insert(newStockUnInventory); |
| | | }else { |
| | | stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto); |
| | |
| | | stockOutRecordDto.setRecordType(stockUninventoryDto.getRecordType()); |
| | | stockOutRecordDto.setStockOutNum(stockUninventoryDto.getQualitity()); |
| | | stockOutRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); |
| | | stockOutRecordDto.setStockLocation(stockUninventoryDto.getStockLocation()); |
| | | stockOutRecordDto.setType("1"); |
| | | stockOutRecordService.add(stockOutRecordDto); |
| | | StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())); |
| | | StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>() |
| | | .lambda() |
| | | .eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()) |
| | | .eq(StockUninventory::getStockLocation, stockUninventoryDto.getStockLocation())); |
| | | if (ObjectUtils.isEmpty(oldStockInventory)) { |
| | | throw new RuntimeException("产ååºåä¸åå¨"); |
| | | throw new RuntimeException("åºä½ã" + stockUninventoryDto.getStockLocation() + "ã产ååºåä¸åå¨"); |
| | | }else { |
| | | stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto); |
| | | } |
| | |
| | | sl.sales_contract_no, |
| | | sl.customer_name, |
| | | s.shipping_total AS shipping_total, |
| | | slp.id as salesLedgerProductId |
| | | slp.id as salesLedgerProductId, |
| | | slp.product_category, |
| | | slp.specification_model |
| | | FROM shipping_info s |
| | | LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id |
| | | LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id and slp.type = 1 |
| | |
| | | LEFT JOIN sys_user as u on sir.create_user = u.user_id |
| | | <where> |
| | | pm.product_type = #{params.productType} |
| | | <if test="params.status != null"> |
| | | and sir.status = #{params.status} |
| | | </if> |
| | | <if test="params.timeStr != null and params.timeStr != ''"> |
| | | and sir.create_time like concat('%',#{params.timeStr},'%') |
| | | </if> |
| | |
| | | (si.qualitity - COALESCE(si.locked_quantity, 0)) as un_locked_quantity, |
| | | pm.model, |
| | | si.remark, |
| | | si.stock_location, |
| | | pm.unit, |
| | | p.product_name |
| | | from stock_inventory si |
| | |
| | | </if> |
| | | update_time = now() |
| | | </set> |
| | | where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity} |
| | | where product_model_id = #{ew.productModelId} and stock_location = #{ew.stockLocation} and qualitity >= #{ew.qualitity} |
| | | </update> |
| | | <update id="updateAddStockUnInventory"> |
| | | update stock_uninventory |
| | |
| | | </if> |
| | | update_time = now() |
| | | </set> |
| | | where product_model_id = #{ew.productModelId} |
| | | where product_model_id = #{ew.productModelId} and stock_location = #{ew.stockLocation} |
| | | </update> |
| | | <select id="pageStockUninventory" resultType="com.ruoyi.stock.dto.StockUninventoryDto"> |
| | | select su.id, |