Browse Source

批量发货

cup 2 years ago
parent
commit
8f2218ed9d

+ 33 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/UserDeliverOrderMgrController.java

@@ -45,6 +45,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 @RestController
 @RequestMapping("/api/v1/mp/admin/deliver/order")
@@ -227,6 +228,37 @@ public class UserDeliverOrderMgrController extends BaseApiController {
 		return res ? AjaxResult.success() : AjaxResult.error("消息修改失败");
 	}
 
+
+	@PostMapping("/batchShip")
+	@PreAuthorize("@ss.hasPermi('order:deliver:ship')")
+	@ApiOperation(value = "批量发货")
+	public AjaxResult batchShip(MultipartFile file) {
+		// 获取文件内的提货订单数据列表
+		try {
+			ExcelUtil<DeliverOrderExcel> util = new ExcelUtil<DeliverOrderExcel>(DeliverOrderExcel.class);
+			List<DeliverOrderExcel> deliverOrderExcelList = util.importExcel(file.getInputStream());
+			if(null == deliverOrderExcelList || deliverOrderExcelList.size() == 0) {
+				return AjaxResult.error("导入失败,选择的导入文件中没有有效的数据");
+			}
+			// 过滤没有快递信息的数据
+			List<DeliverOrderExcel> deliverOrderList  = new ArrayList<>();
+			for (DeliverOrderExcel deliverOrderExcel : deliverOrderExcelList) {
+				if (StringUtils.isNotBlank(deliverOrderExcel.getDeliveryFlowId()) && StringUtils.isNotBlank(deliverOrderExcel.getCompanyName())) {
+					deliverOrderList.add(deliverOrderExcel);
+				}
+			}
+			if (CollectionUtils.isEmpty(deliverOrderList)) {
+				return AjaxResult.error("导入失败,选择的导入文件中没有有效的数据");
+			}
+
+			String content = userDeliverOrderService.batchShip(deliverOrderList);
+			return AjaxResult.success("success", content);
+		} catch (Exception e) {
+			return AjaxResult.error("导入失败,请联系管理员");
+		}
+	}
+
+
 	@Log(title = "提货订单导出", businessType = BusinessType.EXPORT)
 	@PostMapping("/export")
 	@ApiOperation("提货订单导出")
@@ -304,6 +336,7 @@ public class UserDeliverOrderMgrController extends BaseApiController {
 								deliverOrderExcel.setCode(userDeliverOrderItem.getSkuCode());
 							}
 
+							deliverOrderExcel.setItemId(userDeliverOrderItem.getItemId());
 							deliverOrderExcel.setTitle(userDeliverOrderItem.getTitle());
 							deliverOrderExcel.setProperties(userDeliverOrderItem.getProperties());
 							deliverOrderExcel.setGoodsNum(userDeliverOrderItem.getGoodsNum());

+ 3 - 0
mp-service/src/main/java/com/qs/mp/user/domain/excel/DeliverOrderExcel.java

@@ -16,6 +16,9 @@ import lombok.Data;
 @Data
 public class DeliverOrderExcel {
 
+    @Excel(name = "订单明细编号")
+    private String itemId;
+
     @Excel(name = "商品ID")
     private Long goodsId;
 

+ 7 - 0
mp-service/src/main/java/com/qs/mp/user/service/IUserDeliverOrderService.java

@@ -7,6 +7,7 @@ import com.qs.mp.user.domain.UserDeliverOrderItem;
 
 import java.util.List;
 
+import com.qs.mp.user.domain.excel.DeliverOrderExcel;
 import com.qs.mp.user.domain.param.UserDeliverOrderCancelParam;
 import org.apache.ibatis.annotations.Param;
 
@@ -93,4 +94,10 @@ public interface IUserDeliverOrderService extends IService<UserDeliverOrder> {
 	 */
     boolean updateShipInfo(UserDeliverOrderShipParam shipParam);
 
+	/**
+	 * 批量导入发货
+	 * @param deliverOrderExcelList
+	 * @return
+	 */
+    String batchShip(List<DeliverOrderExcel> deliverOrderExcelList);
 }

+ 82 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserDeliverOrderServiceImpl.java

@@ -9,8 +9,10 @@ import com.qs.mp.admin.domain.GoodsSku;
 import com.qs.mp.admin.domain.param.UserDeliverOrderShipParam;
 import com.qs.mp.admin.service.IGoodsService;
 import com.qs.mp.admin.service.IGoodsSkuService;
+import com.qs.mp.common.domain.DeliveryCompany;
 import com.qs.mp.common.enums.*;
 import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.common.service.IDeliveryCompanyService;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.pay.domain.PayOrder;
@@ -20,6 +22,7 @@ import com.qs.mp.user.domain.UserDeliverOrder;
 import com.qs.mp.user.domain.UserDeliverOrderItem;
 import com.qs.mp.user.domain.UserPrizeStorage;
 import com.qs.mp.user.domain.UserTicketOrder;
+import com.qs.mp.user.domain.excel.DeliverOrderExcel;
 import com.qs.mp.user.domain.param.UserDeliverOrderCancelParam;
 import com.qs.mp.user.domain.vo.DeliverOrderSettleVO;
 import com.qs.mp.user.domain.vo.UserDeliverOrderVO;
@@ -29,6 +32,7 @@ import com.qs.mp.user.service.IUserDeliverOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qs.mp.user.service.IUserPrizeStorageService;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -71,6 +75,9 @@ public class UserDeliverOrderServiceImpl extends ServiceImpl<UserDeliverOrderMap
   @Autowired
   private IGoodsSkuService goodsSkuService;
 
+  @Autowired
+  private IDeliveryCompanyService deliveryCompanyService;
+
   @Override
   @Transactional
   public String submitOrder(Long userId, String memo, DeliverOrderSettleVO orderSettleVO) {
@@ -290,6 +297,81 @@ public class UserDeliverOrderServiceImpl extends ServiceImpl<UserDeliverOrderMap
 		return false;
 	}
 
+    @Override
+    public String batchShip(List<DeliverOrderExcel> deliverOrderExcelList) {
+        // 成功数量
+        int successNum = 0;
+        // 失败数量
+        int failNum = 0;
+        // 失败原因
+        StringBuilder failSb = new StringBuilder();
+        StringBuilder sb = new StringBuilder();
+        for (DeliverOrderExcel deliverOrderExcel : deliverOrderExcelList) {
+            String failContent = "";
+            boolean flag = true;
+
+
+            DeliveryCompany deliveryCompany = deliveryCompanyService.getOne(new LambdaQueryWrapper<DeliveryCompany>().eq(DeliveryCompany::getCompanyName, deliverOrderExcel.getCompanyName()));
+            if (Objects.isNull(deliveryCompany)) {
+                flag = false;
+                failContent = "物流公司不存在";
+            }
+
+
+            if (flag) {
+                // 校验订单信息
+                UserDeliverOrderItem userDeliverOrderItem = userDeliverOrderItemService.getById(deliverOrderExcel.getItemId());
+                if (Objects.isNull(userDeliverOrderItem)) {
+                    flag = false;
+                    failContent = "订单明细ID不存在";
+                } else if (Objects.nonNull(userDeliverOrderItem.getDeliveryTime())) {
+                    flag = false;
+                    failContent = "商品已发货";
+                } else {
+                    List<UserDeliverOrderItem> itemList = new ArrayList<UserDeliverOrderItem>();
+                    // 构建发货参数,进行发货
+                    UserDeliverOrderItem item = new UserDeliverOrderItem();
+                    // 快递发货,设置物流信息
+                    item.setItemId(userDeliverOrderItem.getItemId());
+                    item.setDeliveryId(deliveryCompany.getDeliveryId());
+                    item.setDeliveryFlowId(deliverOrderExcel.getDeliveryFlowId());
+                    item.setDeliveryTime(new Date());
+                    itemList.add(item);
+                    boolean rtn = this.userDeliverOrderShip(userDeliverOrderItem.getOrderId(), itemList);
+                    if (!rtn) {
+                        flag = false;
+                        failContent = "发货失败,请重试";
+                    }
+                }
+            }
+
+            if (!flag) {
+                failNum++;
+                failSb.append("订单编号:")
+                        .append(deliverOrderExcel.getOrderId())
+                        .append("    商品ID:")
+                        .append(deliverOrderExcel.getGoodsId())
+                        .append("    商品名称:")
+                        .append(deliverOrderExcel.getTitle())
+                        .append("    发货失败原因:")
+                        .append(failContent)
+                        .append("<br>");
+            } else {
+                successNum++;
+            }
+        }
+
+        sb.append("发货成功:")
+                .append(successNum)
+                .append("<br>")
+                .append("发货失败:")
+                .append(failNum)
+                .append("<br>")
+                .append(failSb);
+
+        return sb.toString();
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean updateShipInfo(UserDeliverOrderShipParam shipParam) {