|
@@ -1,14 +1,21 @@
|
|
|
package com.fjhx.service.order.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fjhx.constants.SystemConfigKeyConstant;
|
|
|
import com.fjhx.entity.abnormal.AbnormalInfo;
|
|
|
+import com.fjhx.entity.jd.JdBackDetails;
|
|
|
+import com.fjhx.entity.logistics.LogisticsCompany;
|
|
|
import com.fjhx.entity.logistics.LogisticsInfo;
|
|
|
import com.fjhx.entity.order.OrderDetails;
|
|
|
import com.fjhx.entity.order.OrderInfo;
|
|
|
+import com.fjhx.entity.product.ProductInfo;
|
|
|
+import com.fjhx.entity.stock.Stock;
|
|
|
+import com.fjhx.entity.warehouse.Warehouse;
|
|
|
import com.fjhx.enums.stock.OutTypeEnum;
|
|
|
import com.fjhx.mapper.order.OrderDetailsMapper;
|
|
|
import com.fjhx.params.order.IssueDto;
|
|
@@ -17,24 +24,34 @@ import com.fjhx.params.stock.ChangeProduct;
|
|
|
import com.fjhx.params.stock.StockChangeDto;
|
|
|
import com.fjhx.params.stock.StockTransferAddDto;
|
|
|
import com.fjhx.service.abnormal.AbnormalInfoService;
|
|
|
+import com.fjhx.service.logistics.LogisticsCompanyService;
|
|
|
import com.fjhx.service.logistics.LogisticsInfoService;
|
|
|
+import com.fjhx.service.order.JdOrderInfo;
|
|
|
import com.fjhx.service.order.OrderDetailsService;
|
|
|
import com.fjhx.service.order.OrderInfoService;
|
|
|
+import com.fjhx.service.product.ProductInfoService;
|
|
|
import com.fjhx.service.stock.StockService;
|
|
|
import com.fjhx.service.stock.StockTransferService;
|
|
|
import com.fjhx.service.system.SystemConfigService;
|
|
|
+import com.fjhx.service.warehouse.WarehouseService;
|
|
|
import com.fjhx.uitl.kd100.KD100Util;
|
|
|
import com.fjhx.utils.Assert;
|
|
|
+import org.springblade.core.excel.util.ExcelUtil;
|
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
|
+import org.springblade.core.tool.api.R;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.net.Socket;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -66,6 +83,15 @@ public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, Ord
|
|
|
@Autowired
|
|
|
private AbnormalInfoService abnormalInfoService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private WarehouseService warehouseService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LogisticsCompanyService logisticsCompanyService;
|
|
|
+
|
|
|
@Override
|
|
|
public List<OrderDetailsEx> listByOrderSalesId(Long orderId) {
|
|
|
Assert.notEmpty(orderId, "订单id不能为空");
|
|
@@ -114,13 +140,13 @@ public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, Ord
|
|
|
boolean flag = false;
|
|
|
List<IssueDto.IssueDetails> orderDetailsList = issueDto.getOrderDetailsList();
|
|
|
List<OrderDetails> list = list(q -> q.eq(OrderDetails::getOrderId, orderId));
|
|
|
- for (OrderDetails orderDetails:list){
|
|
|
+ for (OrderDetails orderDetails : list) {
|
|
|
IssueDto.IssueDetails issueDetails = orderDetailsList.stream().filter(i -> orderDetails.getProductId().equals(i.getProductId())).findFirst().get();
|
|
|
- if(orderDetails.getQuantity()!=issueDetails.getChangeQuantity()){
|
|
|
+ if (orderDetails.getQuantity() != issueDetails.getChangeQuantity()) {
|
|
|
flag = true;
|
|
|
}
|
|
|
}
|
|
|
- if(flag) {
|
|
|
+ if (flag) {
|
|
|
AbnormalInfo abnormalInfo = new AbnormalInfo();
|
|
|
abnormalInfo.setId(IdWorker.getId());
|
|
|
abnormalInfo.setType(20);
|
|
@@ -164,6 +190,98 @@ public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, Ord
|
|
|
logisticsInfoService.save(logisticsInfo);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public void issueExcelImport(MultipartFile file) {
|
|
|
+ List<JdOrderInfo> list = ExcelUtil.read(file, JdOrderInfo.class);
|
|
|
+ //获取所有订单编号并获取所有订单信息
|
|
|
+ List<String> codes = list.stream().map(JdOrderInfo::getCode).distinct().collect(Collectors.toList());
|
|
|
+ List<OrderInfo> orderInfos = orderInfoService.list(q -> q.in(OrderInfo::getCode, codes));
|
|
|
+ if(orderInfos.size()!=codes.size()){
|
|
|
+ throw new ServiceException("列表中含有未知订单编号");
|
|
|
+ }
|
|
|
+ //获取所有产品编码,并获取所有产品信息
|
|
|
+ List<String> productCode = list.stream().map(JdOrderInfo::getProductCode).distinct().collect(Collectors.toList());
|
|
|
+ List<ProductInfo> productInfos = productInfoService.list(q -> q.in(ProductInfo::getCode,productCode));
|
|
|
+ if(productInfos.size()!=productCode.size()){
|
|
|
+ throw new ServiceException("列表中含有未知产品编号");
|
|
|
+ }
|
|
|
+ //获取订单明细
|
|
|
+ List<Long> orderIds = orderInfos.stream().map(OrderInfo::getId).distinct().collect(Collectors.toList());
|
|
|
+ List<OrderDetails> orderDetails = list(q -> q.in(OrderDetails::getOrderId, orderIds));
|
|
|
+ //获取仓库信息
|
|
|
+ List<String> warehouseNames = list.stream().map(JdOrderInfo::getWarehouseName).distinct().collect(Collectors.toList());
|
|
|
+ List<Warehouse> warehouses = warehouseService.list(q -> q.in(Warehouse::getName, warehouseNames));
|
|
|
+
|
|
|
+ List<OrderDetails> orderDetailsList = new ArrayList<>();//统一操作未出库数量
|
|
|
+ List<Stock> stockList = new ArrayList<>();//统一操作库存
|
|
|
+ List<LogisticsInfo> logisticsInfoList = new ArrayList<>();//统一操作物流信息
|
|
|
+ List<OrderInfo> orderInfoList = new ArrayList<>();//统一操作订单信息
|
|
|
+
|
|
|
+ List<Long> collect2 = orderDetails.stream().map(OrderDetails::getProductId).distinct().collect(Collectors.toList());
|
|
|
+ List<Stock> list2 = stockService.list(q -> q.in(Stock::getGoodsId, collect2));
|
|
|
+
|
|
|
+ for (JdOrderInfo jdOrderInfo:list){
|
|
|
+ OrderInfo orderInfos1 = orderInfos.stream().filter(p -> jdOrderInfo.getCode().equals(p.getCode())).findAny().get();
|
|
|
+ ProductInfo productInfos1 = productInfos.stream().filter(p -> jdOrderInfo.getProductCode().equals(p.getCode())).findAny().get();
|
|
|
+ jdOrderInfo.setOrderId(orderInfos1.getId());
|
|
|
+ jdOrderInfo.setProductId(productInfos1.getId());
|
|
|
+ //操作未出库数量
|
|
|
+ OrderDetails orderDetails2 = orderDetails.stream().filter(p -> jdOrderInfo.getOrderId().equals(p.getOrderId())).findAny().get();
|
|
|
+ orderDetails2.setNotIssuedQuantity(orderDetails2.getNotIssuedQuantity().subtract(jdOrderInfo.getQuantity()));
|
|
|
+ orderDetails2.setReservationNumber(jdOrderInfo.getReservationNumber());
|
|
|
+ orderDetailsList.add(orderDetails2);
|
|
|
+// updateById(orderDetails2);
|
|
|
+ //操作库存
|
|
|
+ Warehouse warehouse1 = warehouses.stream().filter(p -> jdOrderInfo.getWarehouseName().equals(p.getName())).findAny().get();
|
|
|
+ Long warehouseId = warehouse1.getId();
|
|
|
+
|
|
|
+ Stock stock = list2.stream().filter(p -> p.getWarehouseId().equals(warehouseId)).findAny().get();
|
|
|
+// Stock stock = stockService.getOne(q -> q.eq(Stock::getGoodsId, jdOrderInfo.getProductId()).eq(Stock::getWarehouseId, warehouseId));
|
|
|
+ stock.setQuantity(stock.getQuantity().subtract(jdOrderInfo.getQuantity()));
|
|
|
+ stockList.add(stock);
|
|
|
+// stockService.updateById(stock);
|
|
|
+ }
|
|
|
+
|
|
|
+ //根据物流公司名查出所有物流公司信息
|
|
|
+ List<String> collect = list.stream().distinct().map(JdOrderInfo::getLogisticsCompany).collect(Collectors.toList());
|
|
|
+ List<LogisticsCompany> list1 = logisticsCompanyService.list(q -> q.in(LogisticsCompany::getName, collect));
|
|
|
+
|
|
|
+ List<JdOrderInfo> collect1 = list.stream().distinct().collect(Collectors.toList());
|
|
|
+ for (JdOrderInfo jdOrderInfo:collect1) {
|
|
|
+ Warehouse warehouse1 = warehouses.stream().filter(p -> jdOrderInfo.getWarehouseName().equals(p.getName())).findAny().get();
|
|
|
+ Long warehouseId = warehouse1.getId();
|
|
|
+ //操作物流公司
|
|
|
+ LogisticsCompany logisticsCompany = list1.stream().filter(p->p.getName().equals(jdOrderInfo.getLogisticsCompany())).findAny().get();
|
|
|
+// LogisticsCompany logisticsCompany = logisticsCompanyService.getOne(q -> q.eq(LogisticsCompany::getName, jdOrderInfo.getLogisticsCompany()));
|
|
|
+ LogisticsInfo logisticsInfo = new LogisticsInfo();
|
|
|
+ logisticsInfo.setId(IdWorker.getId());
|
|
|
+ logisticsInfo.setBusinessId(jdOrderInfo.getOrderId());
|
|
|
+ logisticsInfo.setBusinessCode(jdOrderInfo.getCode());
|
|
|
+ logisticsInfo.setBusinessType(2);
|
|
|
+ logisticsInfo.setStatus(0);
|
|
|
+ Integer state = KD100Util.getStateAndMonitor(logisticsCompany.getCode(), jdOrderInfo.getLogisticsCompanyCode());
|
|
|
+ logisticsInfo.setLogisticsStatus(state);
|
|
|
+ logisticsInfo.setLogisticsCompanyCode(logisticsCompany.getCode());
|
|
|
+ logisticsInfo.setCode(jdOrderInfo.getLogisticsCompanyCode());
|
|
|
+ logisticsInfo.setWarehouseId(warehouseId);
|
|
|
+ logisticsInfoList.add(logisticsInfo);
|
|
|
+// logisticsInfoService.save(logisticsInfo);
|
|
|
+ //操作订单状态
|
|
|
+ OrderInfo orderInfo = orderInfos.stream().filter(p -> p.getId().equals(jdOrderInfo.getOrderId())).findAny().get();
|
|
|
+// OrderInfo orderInfo = orderInfoService.getById(jdOrderInfo.getOrderId());
|
|
|
+ orderInfo.setStatus(2);
|
|
|
+ orderInfo.setIssueStatus(3);
|
|
|
+ orderInfoList.add(orderInfo);
|
|
|
+// orderInfoService.updateById(orderInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ updateBatchById(orderDetailsList);//统一操作未出库数量
|
|
|
+ stockService.updateBatchById(stockList);//统一操作库存
|
|
|
+ logisticsInfoService.saveBatch(logisticsInfoList);////统一操作物流信息
|
|
|
+ orderInfoService.updateBatchById(orderInfos);//统一操作订单信息
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 更新订单明细未出库数量
|
|
|
*/
|