|
@@ -2,7 +2,6 @@ package com.fjhx.wms.service.stock.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
-import com.alibaba.excel.annotation.ExcelProperty;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.alibaba.fastjson2.JSONWriter;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
@@ -42,11 +41,8 @@ import com.fjhx.wms.utils.CodeEnum;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import com.ruoyi.system.utils.UserUtil;
|
|
|
-import lombok.Getter;
|
|
|
-import lombok.Setter;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.math.BigDecimal;
|
|
@@ -87,8 +83,6 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
@Autowired
|
|
|
private WmsService wmsService;
|
|
|
@Autowired
|
|
|
- private StockFrozenService stockFrozenService;
|
|
|
- @Autowired
|
|
|
private PurService purService;
|
|
|
@Autowired
|
|
|
private CompanyInfoService companyInfoService;
|
|
@@ -126,11 +120,11 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
wrapper.eq("sw", StockWait::getBusinessType, dto.getBusinessType());
|
|
|
|
|
|
//关键字搜索
|
|
|
- if(ObjectUtil.isNotEmpty(dto.getKeyword())){
|
|
|
- wrapper.and(q->q
|
|
|
- .like("sw", StockWait::getBusinessCode,dto.getKeyword())
|
|
|
- .or().like("lis.code",dto.getKeyword())
|
|
|
- .or().exists("SELECT swd.stock_wait_id FROM stock_wait_details swd LEFT JOIN bytesailing_item.product_info pi ON swd.product_id = pi.id where ( pi.`name` LIKE CONCAT( '%', {0}, '%' ) OR pi.custom_code LIKE CONCAT( '%', {0}, '%' ))",dto.getKeyword())
|
|
|
+ if (ObjectUtil.isNotEmpty(dto.getKeyword())) {
|
|
|
+ wrapper.and(q -> q
|
|
|
+ .like("sw", StockWait::getBusinessCode, dto.getKeyword())
|
|
|
+ .or().like("lis.code", dto.getKeyword())
|
|
|
+ .or().exists("SELECT swd.stock_wait_id FROM stock_wait_details swd LEFT JOIN bytesailing_item.product_info pi ON swd.product_id = pi.id where ( pi.`name` LIKE CONCAT( '%', {0}, '%' ) OR pi.custom_code LIKE CONCAT( '%', {0}, '%' ))", dto.getKeyword())
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -266,7 +260,6 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
List<Stock> stockList = new ArrayList<>();
|
|
|
|
|
|
List<StockWaitDetails> stockWaitDetailsDtoList = stockWaitDto.getStockWaitDetailsList();
|
|
|
- Map<Long, StockWaitDetails> stockWaitDetailsMap = stockWaitDetailsDtoList.stream().collect(Collectors.toMap(StockWaitDetails::getId, Function.identity()));
|
|
|
|
|
|
//更新已出入库数量以及待出入库状态
|
|
|
stockWaitDetailsService.changeStockWaitStatus(stockWaitDto);
|
|
@@ -388,6 +381,10 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
if (StockWaitType.SALE_ORDER_OUT.getDetailType() == businessType) {
|
|
|
opType = 2;
|
|
|
}
|
|
|
+ //京东订单出库
|
|
|
+ if (StockWaitType.JD_ORDER_OUT.getDetailType().equals(businessType)) {
|
|
|
+ opType = 2;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
stockService.ModifyInventory(stockJournal.getId(), opType, stockList, stockWaitDto.getWarehouseId());
|
|
@@ -418,17 +415,17 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
wmsService.outbounds(stockWaitDto);
|
|
|
}
|
|
|
|
|
|
- //生产任务待出库
|
|
|
- if (StockWaitType.PRODUCTION_TASK_OUT.getDetailType().equals(businessType)) {
|
|
|
- for (StockWaitDetails stockWaitDetailsDto : stockWaitDetailsDtoList) {
|
|
|
- StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(stockWaitDetailsDto.getId());
|
|
|
- //减少冻结库存
|
|
|
- StockFrozen stockFrozen = stockFrozenService.getOne(q -> q.eq(StockFrozen::getProductId, stockWaitDetails.getProductId()));
|
|
|
- BigDecimal subtract = stockFrozen.getFrozenQuantity().subtract(stockWaitDetailsDto.getQuantity());
|
|
|
- stockFrozen.setFrozenQuantity(subtract);
|
|
|
- stockFrozenService.updateById(stockFrozen);
|
|
|
- }
|
|
|
+ //京东订单出库
|
|
|
+ if (StockWaitType.JD_ORDER_OUT.getDetailType().equals(businessType)) {
|
|
|
+ //只能出库一次
|
|
|
+ stockWait.setStatus(2);
|
|
|
+ //创建物流数据
|
|
|
+ wmsService.createJdLogisticsInfo(stockWaitDto);
|
|
|
+ //并自动回告
|
|
|
+ //TODO 自动回告还没完成
|
|
|
}
|
|
|
+
|
|
|
+ updateById(stockWait);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -461,9 +458,9 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
} else if (StockWaitType.SALE_ORDER_OUT.getDetailType().equals(businessType)) {
|
|
|
//销售订单出库
|
|
|
return JournalType.SALES_OUT.getDetailType();
|
|
|
- } else if (StockWaitType.PRODUCTION_TASK_OUT.getDetailType().equals(businessType)) {
|
|
|
- //生产任务待出库
|
|
|
- return JournalType.PRODUCTION_TASK_OUT.getDetailType();
|
|
|
+ } else if (StockWaitType.JD_ORDER_OUT.getDetailType().equals(businessType)) {
|
|
|
+ //京东销售出库
|
|
|
+ return JournalType.JD_SALES_OUT.getDetailType();
|
|
|
} else {
|
|
|
throw new ServiceException("未知待出入库业务类型");
|
|
|
}
|
|
@@ -507,107 +504,107 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
|
|
|
ExcelUtil.export(httpServletResponse, stockWaitList, InStockWaitExportExcel.class);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 待出库 excel导入出库
|
|
|
- */
|
|
|
- @DSTransactional
|
|
|
- void outStockWaitImportExcel(MultipartFile file, StockWaitDto stockWaitDto) {
|
|
|
- Assert.notEmpty(stockWaitDto.getBusinessType(), "业务类型不能为空");
|
|
|
-
|
|
|
- List<OutStockWaitImportExcelBo> list = new ArrayList<>();
|
|
|
- Assert.notEmpty(list, "Excel文档为空请检查");
|
|
|
-
|
|
|
- List<String> linkCodes = list.stream().map(OutStockWaitImportExcelBo::getLinkCode).distinct().collect(Collectors.toList());
|
|
|
- List<StockWait> stockWaitList = this.list(q -> q.in(StockWait::getBusinessCode, linkCodes));
|
|
|
-
|
|
|
- long count = stockWaitList.stream().map(StockWait::getBusinessType).distinct().count();
|
|
|
- if (count > 1) {
|
|
|
- throw new ServiceException("文档中的数据存在多种业务类型 请检查");
|
|
|
- }
|
|
|
-
|
|
|
- if (stockWaitList.size() < linkCodes.size()) {
|
|
|
- List<String> newLinkCodes = stockWaitList.stream().map(StockWait::getBusinessCode).distinct().collect(Collectors.toList());
|
|
|
- List<String> difference = linkCodes.stream().filter(element -> !newLinkCodes.contains(element)).collect(Collectors.toList());
|
|
|
- String differenceStr = difference.stream().collect(Collectors.joining(","));
|
|
|
- throw new ServiceException("文档存在未知单号:" + differenceStr);
|
|
|
- }
|
|
|
-
|
|
|
- //赋值产品id
|
|
|
- List<String> productCodes = list.stream().map(OutStockWaitImportExcelBo::getProductCode).distinct().collect(Collectors.toList());
|
|
|
- Map<String, Long> productInfoMap = productInfoService.mapKV(ProductInfo::getCustomCode, ProductInfo::getId,
|
|
|
- q -> q.in(ProductInfo::getCustomCode, productCodes));
|
|
|
- for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : list) {
|
|
|
- String productCode = outStockWaitImportExcelBo.getProductCode();
|
|
|
- Long productId = productInfoMap.get(productCode);
|
|
|
- if (ObjectUtil.isEmpty(productId)) {
|
|
|
- throw new ServiceException("该产品不存在:" + productCode);
|
|
|
- }
|
|
|
- outStockWaitImportExcelBo.setProductId(productId);
|
|
|
- }
|
|
|
-
|
|
|
- //操作出库
|
|
|
- Map<String, List<OutStockWaitImportExcelBo>> excelMap = list.stream().collect(Collectors.groupingBy(OutStockWaitImportExcelBo::getLinkCode));
|
|
|
- for (StockWait stockWait : stockWaitList) {
|
|
|
- //查询明细信息
|
|
|
- List<OutStockWaitImportExcelBo> outStockWaitImportExcelBos = excelMap.get(stockWait.getBusinessCode());
|
|
|
- List<Long> productIds = outStockWaitImportExcelBos.stream().map(OutStockWaitImportExcelBo::getProductId).distinct().collect(Collectors.toList());
|
|
|
-
|
|
|
- Map<Long, StockWaitDetails> stockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getProductId, q -> q
|
|
|
- .eq(StockWaitDetails::getStockWaitId, stockWait.getId())
|
|
|
- .eq(StockWaitDetails::getProductId, productIds)
|
|
|
- );
|
|
|
-
|
|
|
- for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : outStockWaitImportExcelBos) {
|
|
|
- StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(outStockWaitImportExcelBo);
|
|
|
- outStockWaitImportExcelBo.setStockWaitDetailId(stockWaitDetails.getId());
|
|
|
- }
|
|
|
-
|
|
|
- //数据预处理
|
|
|
- stockWaitDto.setBusinessType(stockWait.getBusinessType());
|
|
|
- List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
|
|
|
- for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : outStockWaitImportExcelBos) {
|
|
|
- StockWaitDetails stockWaitDetails = new StockWaitDetails();
|
|
|
- stockWaitDetails.setId(outStockWaitImportExcelBo.getStockWaitDetailId());
|
|
|
- stockWaitDetails.setProductId(outStockWaitImportExcelBo.getProductId());
|
|
|
- stockWaitDetails.setQuantity(outStockWaitImportExcelBo.getOutQuantity());
|
|
|
- stockWaitDetails.setStockWaitId(stockWait.getId());
|
|
|
- stockWaitDetailsList.add(stockWaitDetails);
|
|
|
- }
|
|
|
- stockWaitDto.setStockWaitDetailsList(stockWaitDetailsList);
|
|
|
-
|
|
|
- if (StockWaitType.SALE_ORDER_OUT.getDetailType().equals(stockWait.getBusinessType())) {
|
|
|
- //销售订单
|
|
|
- addByWdly(stockWaitDto);
|
|
|
- } else if (StockWaitType.JD_ORDER_OUT.getDetailType().equals(stockWait.getBusinessType())) {
|
|
|
- //京东订单
|
|
|
- wmsService.jdOrderOutbound(stockWaitDto);
|
|
|
- } else if (StockWaitType.BACK_OUT.getDetailType().equals(stockWait.getBusinessType())) {
|
|
|
- //采购退货
|
|
|
- wmsService.purchaseBackOutbound(stockWaitDto);
|
|
|
- } else {
|
|
|
- throw new ServiceException("存在未知业务的数据!");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Getter
|
|
|
- @Setter
|
|
|
- class OutStockWaitImportExcelBo {
|
|
|
- /**
|
|
|
- * 产品id
|
|
|
- */
|
|
|
- private Long productId;
|
|
|
- /**
|
|
|
- * 待出库明细id
|
|
|
- */
|
|
|
- private Long stockWaitDetailId;
|
|
|
-
|
|
|
- @ExcelProperty("关联单号")
|
|
|
- private String linkCode;
|
|
|
- @ExcelProperty("物品编码")
|
|
|
- private String productCode;
|
|
|
- @ExcelProperty("出库数量")
|
|
|
- private BigDecimal outQuantity;
|
|
|
- }
|
|
|
+// /**
|
|
|
+// * 待出库 excel导入出库
|
|
|
+// */
|
|
|
+// @DSTransactional
|
|
|
+// void outStockWaitImportExcel(MultipartFile file, StockWaitDto stockWaitDto) {
|
|
|
+// Assert.notEmpty(stockWaitDto.getBusinessType(), "业务类型不能为空");
|
|
|
+//
|
|
|
+// List<OutStockWaitImportExcelBo> list = new ArrayList<>();
|
|
|
+// Assert.notEmpty(list, "Excel文档为空请检查");
|
|
|
+//
|
|
|
+// List<String> linkCodes = list.stream().map(OutStockWaitImportExcelBo::getLinkCode).distinct().collect(Collectors.toList());
|
|
|
+// List<StockWait> stockWaitList = this.list(q -> q.in(StockWait::getBusinessCode, linkCodes));
|
|
|
+//
|
|
|
+// long count = stockWaitList.stream().map(StockWait::getBusinessType).distinct().count();
|
|
|
+// if (count > 1) {
|
|
|
+// throw new ServiceException("文档中的数据存在多种业务类型 请检查");
|
|
|
+// }
|
|
|
+//
|
|
|
+// if (stockWaitList.size() < linkCodes.size()) {
|
|
|
+// List<String> newLinkCodes = stockWaitList.stream().map(StockWait::getBusinessCode).distinct().collect(Collectors.toList());
|
|
|
+// List<String> difference = linkCodes.stream().filter(element -> !newLinkCodes.contains(element)).collect(Collectors.toList());
|
|
|
+// String differenceStr = difference.stream().collect(Collectors.joining(","));
|
|
|
+// throw new ServiceException("文档存在未知单号:" + differenceStr);
|
|
|
+// }
|
|
|
+//
|
|
|
+// //赋值产品id
|
|
|
+// List<String> productCodes = list.stream().map(OutStockWaitImportExcelBo::getProductCode).distinct().collect(Collectors.toList());
|
|
|
+// Map<String, Long> productInfoMap = productInfoService.mapKV(ProductInfo::getCustomCode, ProductInfo::getId,
|
|
|
+// q -> q.in(ProductInfo::getCustomCode, productCodes));
|
|
|
+// for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : list) {
|
|
|
+// String productCode = outStockWaitImportExcelBo.getProductCode();
|
|
|
+// Long productId = productInfoMap.get(productCode);
|
|
|
+// if (ObjectUtil.isEmpty(productId)) {
|
|
|
+// throw new ServiceException("该产品不存在:" + productCode);
|
|
|
+// }
|
|
|
+// outStockWaitImportExcelBo.setProductId(productId);
|
|
|
+// }
|
|
|
+//
|
|
|
+// //操作出库
|
|
|
+// Map<String, List<OutStockWaitImportExcelBo>> excelMap = list.stream().collect(Collectors.groupingBy(OutStockWaitImportExcelBo::getLinkCode));
|
|
|
+// for (StockWait stockWait : stockWaitList) {
|
|
|
+// //查询明细信息
|
|
|
+// List<OutStockWaitImportExcelBo> outStockWaitImportExcelBos = excelMap.get(stockWait.getBusinessCode());
|
|
|
+// List<Long> productIds = outStockWaitImportExcelBos.stream().map(OutStockWaitImportExcelBo::getProductId).distinct().collect(Collectors.toList());
|
|
|
+//
|
|
|
+// Map<Long, StockWaitDetails> stockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getProductId, q -> q
|
|
|
+// .eq(StockWaitDetails::getStockWaitId, stockWait.getId())
|
|
|
+// .eq(StockWaitDetails::getProductId, productIds)
|
|
|
+// );
|
|
|
+//
|
|
|
+// for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : outStockWaitImportExcelBos) {
|
|
|
+// StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(outStockWaitImportExcelBo);
|
|
|
+// outStockWaitImportExcelBo.setStockWaitDetailId(stockWaitDetails.getId());
|
|
|
+// }
|
|
|
+//
|
|
|
+// //数据预处理
|
|
|
+// stockWaitDto.setBusinessType(stockWait.getBusinessType());
|
|
|
+// List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
|
|
|
+// for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : outStockWaitImportExcelBos) {
|
|
|
+// StockWaitDetails stockWaitDetails = new StockWaitDetails();
|
|
|
+// stockWaitDetails.setId(outStockWaitImportExcelBo.getStockWaitDetailId());
|
|
|
+// stockWaitDetails.setProductId(outStockWaitImportExcelBo.getProductId());
|
|
|
+// stockWaitDetails.setQuantity(outStockWaitImportExcelBo.getOutQuantity());
|
|
|
+// stockWaitDetails.setStockWaitId(stockWait.getId());
|
|
|
+// stockWaitDetailsList.add(stockWaitDetails);
|
|
|
+// }
|
|
|
+// stockWaitDto.setStockWaitDetailsList(stockWaitDetailsList);
|
|
|
+//
|
|
|
+// if (StockWaitType.SALE_ORDER_OUT.getDetailType().equals(stockWait.getBusinessType())) {
|
|
|
+// //销售订单
|
|
|
+// addByWdly(stockWaitDto);
|
|
|
+// } else if (StockWaitType.JD_ORDER_OUT.getDetailType().equals(stockWait.getBusinessType())) {
|
|
|
+// //京东订单
|
|
|
+// wmsService.jdOrderOutbound(stockWaitDto);
|
|
|
+// } else if (StockWaitType.BACK_OUT.getDetailType().equals(stockWait.getBusinessType())) {
|
|
|
+// //采购退货
|
|
|
+// wmsService.purchaseBackOutbound(stockWaitDto);
|
|
|
+// } else {
|
|
|
+// throw new ServiceException("存在未知业务的数据!");
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// @Getter
|
|
|
+// @Setter
|
|
|
+// class OutStockWaitImportExcelBo {
|
|
|
+// /**
|
|
|
+// * 产品id
|
|
|
+// */
|
|
|
+// private Long productId;
|
|
|
+// /**
|
|
|
+// * 待出库明细id
|
|
|
+// */
|
|
|
+// private Long stockWaitDetailId;
|
|
|
+//
|
|
|
+// @ExcelProperty("关联单号")
|
|
|
+// private String linkCode;
|
|
|
+// @ExcelProperty("物品编码")
|
|
|
+// private String productCode;
|
|
|
+// @ExcelProperty("出库数量")
|
|
|
+// private BigDecimal outQuantity;
|
|
|
+// }
|
|
|
|
|
|
}
|