|
@@ -0,0 +1,188 @@
|
|
|
+package com.fjhx.victoriatourist.service.jd.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.area.utils.AreaUtil;
|
|
|
+import com.fjhx.customer.service.customer.CustomerService;
|
|
|
+import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
+import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.item.util.excel.util.ExcelUtil;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.bo.JdOrderExcelImportBo;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.dto.JdOrderDto;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.dto.JdOrderSelectDto;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.po.JdOrder;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.po.JdOrderDetails;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.vo.JdOrderDetailsVo;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.vo.JdOrderVo;
|
|
|
+import com.fjhx.victoriatourist.mapper.jd.JdOrderMapper;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdOrderDetailsService;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdOrderService;
|
|
|
+import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
+import com.ruoyi.common.exception.ServiceException;
|
|
|
+import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 京东订单 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author
|
|
|
+ * @since 2023-04-20
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> implements JdOrderService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CustomerService customerService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private JdOrderDetailsService jdOrderDetailsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<JdOrderVo> getPage(JdOrderSelectDto dto) {
|
|
|
+ IWrapper<JdOrder> wrapper = getWrapper();
|
|
|
+ wrapper.eq("jo", JdOrder::getStatus, dto.getStatus());
|
|
|
+ wrapper.orderByDesc("jo", JdOrder::getId);
|
|
|
+
|
|
|
+ Page<JdOrderVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
+ List<JdOrderVo> records = page.getRecords();
|
|
|
+ if (records.size() == 0) {
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 赋值国省市
|
|
|
+ AreaUtil.setAreaName(records);
|
|
|
+
|
|
|
+ // 赋值客户名称
|
|
|
+ customerService.attributeAssign(records, JdOrder::getCustomerId, (item, customer) -> {
|
|
|
+ item.setCustomerName(customer.getName());
|
|
|
+ });
|
|
|
+
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public JdOrderVo detail(Long id) {
|
|
|
+ JdOrder JdOrder = this.getById(id);
|
|
|
+ JdOrderVo result = BeanUtil.toBean(JdOrder, JdOrderVo.class);
|
|
|
+
|
|
|
+ List<JdOrderDetails> jdOrderDetailsList = jdOrderDetailsService.list(q -> q.eq(JdOrderDetails::getJdOrderId, id));
|
|
|
+ List<JdOrderDetailsVo> jdOrderDetailsVoList = BeanUtil.copyToList(jdOrderDetailsList, JdOrderDetailsVo.class);
|
|
|
+ productInfoService.attributeAssign(jdOrderDetailsVoList, JdOrderDetails::getProductId, (item, product) -> {
|
|
|
+ item.setProductCode(product.getCode());
|
|
|
+ item.setProductName(product.getName());
|
|
|
+ });
|
|
|
+
|
|
|
+ result.setJdOrderDetailsList(jdOrderDetailsVoList);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void add(JdOrderDto jdOrderDto) {
|
|
|
+
|
|
|
+ // 订单id
|
|
|
+ long jdOrderId = IdWorker.getId();
|
|
|
+
|
|
|
+ // 订单金额
|
|
|
+ BigDecimal amount = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ List<JdOrderDetails> jdOrderDetailsList = jdOrderDto.getJdOrderDetailsList();
|
|
|
+
|
|
|
+ for (JdOrderDetails jdOrderDetails : jdOrderDetailsList) {
|
|
|
+ jdOrderDetails.setJdOrderId(jdOrderId);
|
|
|
+ jdOrderDetails.setSubtotal(jdOrderDetails.getPrice().multiply(jdOrderDetails.getQuantity()));
|
|
|
+ jdOrderDetails.setQuantityDelivered(BigDecimal.ZERO);
|
|
|
+ amount = amount.add(jdOrderDetails.getSubtotal());
|
|
|
+ }
|
|
|
+
|
|
|
+ jdOrderDto.setId(jdOrderId);
|
|
|
+ // 未出库
|
|
|
+ jdOrderDto.setStatus(1);
|
|
|
+ // 订单金额
|
|
|
+ jdOrderDto.setAmount(amount);
|
|
|
+ jdOrderDto.setQuantityDelivered(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ this.save(jdOrderDto);
|
|
|
+ this.jdOrderDetailsService.saveBatch(jdOrderDetailsList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @DSTransactional
|
|
|
+ @Override
|
|
|
+ public void excelImport(MultipartFile file, Long customerId) {
|
|
|
+ List<JdOrderExcelImportBo> boList = ExcelUtil.read(file, JdOrderExcelImportBo.class);
|
|
|
+
|
|
|
+ List<String> productCodeList = boList.stream().map(JdOrderExcelImportBo::getProductCode)
|
|
|
+ .filter(Objects::nonNull).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 验证产品编号是否存在
|
|
|
+ List<ProductInfo> productInfoList = productInfoService.list(q -> q.in(ProductInfo::getCode, productCodeList));
|
|
|
+ if (productInfoList.size() != productCodeList.size()) {
|
|
|
+ List<String> itemCodeList = productInfoList.stream().map(ProductInfo::getCode).collect(Collectors.toList());
|
|
|
+ String nonCodeStr = productCodeList.stream().filter(item -> !itemCodeList.contains(item)).collect(Collectors.joining(","));
|
|
|
+ throw new ServiceException("未知产品编号:" + nonCodeStr);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 产品编号、产品id map
|
|
|
+ Map<String, Long> productCodeIdMap = productInfoList.stream().collect(Collectors.toMap(ProductInfo::getCode, BaseIdPo::getId));
|
|
|
+
|
|
|
+ // 订单编号、订单信息 map
|
|
|
+ HashMap<String, JdOrder> orderCodeIdMap = new LinkedHashMap<>();
|
|
|
+ List<JdOrderDetails> orderDetailsList = new ArrayList<>();
|
|
|
+
|
|
|
+ long batchFlag = IdWorker.getId();
|
|
|
+
|
|
|
+ for (JdOrderExcelImportBo bo : boList) {
|
|
|
+ // 订单id
|
|
|
+ JdOrder jdOrder = orderCodeIdMap.computeIfAbsent(bo.getCode(), code -> {
|
|
|
+ Long id = IdWorker.getId();
|
|
|
+
|
|
|
+ JdOrder item = new JdOrder();
|
|
|
+ item.setId(id);
|
|
|
+ item.setCode(bo.getCode());
|
|
|
+ item.setCustomerId(customerId);
|
|
|
+ item.setDistributionCenter(bo.getDistributionCenter());
|
|
|
+ item.setDetailedAddress(bo.getDetailedAddress());
|
|
|
+ item.setContactPerson(bo.getContactPerson());
|
|
|
+ item.setContactNumber(bo.getContactNumber());
|
|
|
+ item.setAmount(BigDecimal.ZERO);
|
|
|
+ item.setStatus(1);
|
|
|
+ item.setQuantityDelivered(BigDecimal.ZERO);
|
|
|
+ item.setBatchFlag(batchFlag);
|
|
|
+ return item;
|
|
|
+ });
|
|
|
+
|
|
|
+ BigDecimal subtotal = bo.getQuantity().multiply(bo.getPrice());
|
|
|
+ jdOrder.setAmount(jdOrder.getAmount().add(subtotal));
|
|
|
+
|
|
|
+ JdOrderDetails jdOrderDetails = new JdOrderDetails();
|
|
|
+ jdOrderDetails.setId(IdWorker.getId());
|
|
|
+ jdOrderDetails.setJdOrderId(jdOrder.getId());
|
|
|
+ jdOrderDetails.setProductId(productCodeIdMap.get(bo.getProductCode()));
|
|
|
+ jdOrderDetails.setPrice(bo.getPrice());
|
|
|
+ jdOrderDetails.setQuantity(bo.getQuantity());
|
|
|
+ jdOrderDetails.setSubtotal(subtotal);
|
|
|
+ jdOrderDetails.setQuantityDelivered(BigDecimal.ZERO);
|
|
|
+ orderDetailsList.add(jdOrderDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.saveBatch(orderCodeIdMap.values());
|
|
|
+ this.jdOrderDetailsService.saveBatch(orderDetailsList);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|