소스 검색

经销商订单发货

guanglong 3 년 전
부모
커밋
605a386505

+ 22 - 5
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/ChannelOrderMgrController.java

@@ -2,18 +2,26 @@ package com.qs.mp.web.controller.api.admin;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qs.mp.admin.domain.TicketPackage;
+import com.qs.mp.admin.domain.param.ChannelOrderShipParam;
+import com.qs.mp.admin.domain.param.UserDeliverOrderShipParam;
 import com.qs.mp.channel.domain.ChannelOrder;
+import com.qs.mp.channel.domain.ChannelOrderDetail;
 import com.qs.mp.channel.domain.ChannelOrderItem;
 import com.qs.mp.channel.domain.vo.ChannelOrderVO;
+import com.qs.mp.channel.service.IChannelOrderDetailService;
 import com.qs.mp.channel.service.IChannelOrderItemService;
 import com.qs.mp.channel.service.IChannelOrderService;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.core.redis.RedisCache;
 import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.user.domain.UserDeliverOrderItem;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
+import java.util.ArrayList;
 import java.util.List;
 import lombok.AllArgsConstructor;
 import ma.glasnost.orika.MapperFacade;
@@ -37,6 +45,9 @@ public class ChannelOrderMgrController extends BaseApiController {
 
   @Autowired
   private IChannelOrderItemService channelOrderItemService;
+  
+  @Autowired
+  private IChannelOrderDetailService channelOrderDetailService;
 
   @Autowired
   private MapperFacade mapperFacade;
@@ -94,10 +105,16 @@ public class ChannelOrderMgrController extends BaseApiController {
    */
   @PostMapping("/ship")
   @ApiOperation(value = "订单发货" , notes = "在订单发货页面提交")
-  public AjaxResult ship(@RequestBody ChannelOrder order) {
-
-    return AjaxResult.success();
-  }
-
+  public AjaxResult ship(@RequestBody ChannelOrderShipParam shipParam) {
+		if(null == shipParam || StringUtils.isBlank(shipParam.getOrderId())) {
+			return error(ErrorCodeEnum.ERROR_CODE_1001);
+		}
+		if(null != shipParam && null != shipParam.getPkgIds()
+				&& shipParam.getPkgIds().size() > 0) {
+			boolean rtn = channelOrderService.channelOrderShip(shipParam.getOrderId(), shipParam.getPkgIds());
+			return rtn ? AjaxResult.success() : AjaxResult.error("发货失败");
+		}
+		return AjaxResult.error("发货失败");
+	}
 
 }

+ 49 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/ChannelOrderShipParam.java

@@ -0,0 +1,49 @@
+package com.qs.mp.admin.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.validation.constraints.NotNull;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.qs.mp.admin.domain.TicketPackage;
+import com.qs.mp.common.enums.DeliverOrderStatusEnum;
+import lombok.Data;
+
+/**
+ * @describe 用户提货订单发货
+ * @auther quanshu
+ * @create 2022-03-07 20:43:44
+ */
+@ApiModel(value = "用户提货订单发货参数")
+@Data
+public class ChannelOrderShipParam {
+
+	@ApiModelProperty(value = "订单编号", required = false)
+	private String orderId;
+
+	/**
+	 * 物流公司ID
+	 */
+	@NotNull(message = "快递公司不能为空")
+	@ApiModelProperty(value = "物流公司", required = false)
+	private Long deliveryId;
+
+	/**
+	 * 物流单号ID
+	 */
+	@NotNull(message = "物流单号不能为空")
+	@ApiModelProperty(value = "物流单号", required = false)
+	private String deliveryFlowId;
+	
+	
+	@NotNull(message = "票包列表不能为空")
+	@ApiModelProperty(value = "票包ID列表", required = false)
+	private List<String> pkgIds;
+}

+ 12 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelOrderService.java

@@ -1,6 +1,9 @@
 package com.qs.mp.channel.service;
 
 import com.qs.mp.channel.domain.ChannelOrder;
+
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
 import com.qs.mp.pay.domain.PayOrder;
@@ -37,4 +40,13 @@ public interface IChannelOrderService extends IService<ChannelOrder> {
    * @param payOrder
    */
   void paySuccess(PayOrder payOrder);
+  
+	/**
+	 * 渠道订单发货
+	 * 
+	 * @param orderId
+	 * @param pkgIds
+	 * @return
+	 */
+	boolean channelOrderShip(String orderId, List<String> pkgIdList);
 }

+ 85 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderServiceImpl.java

@@ -3,26 +3,35 @@ package com.qs.mp.channel.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.TicketPackage;
 import com.qs.mp.admin.service.ITicketBoxService;
+import com.qs.mp.admin.service.ITicketPackageService;
 import com.qs.mp.user.domain.UserAddr;
 import com.qs.mp.channel.domain.ChannelOrder;
+import com.qs.mp.channel.domain.ChannelOrderDetail;
 import com.qs.mp.channel.domain.ChannelOrderItem;
 import com.qs.mp.channel.domain.vo.ChannelCartVO;
 import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
 import com.qs.mp.channel.mapper.ChannelOrderMapper;
 import com.qs.mp.channel.service.IChannelCartService;
+import com.qs.mp.channel.service.IChannelOrderDetailService;
 import com.qs.mp.channel.service.IChannelOrderItemService;
 import com.qs.mp.channel.service.IChannelOrderService;
+import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.enums.ChannelOrderStatusEnum;
 import com.qs.mp.common.enums.TicketBoxStatusEnum;
+import com.qs.mp.common.enums.TicketPkgStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.pay.domain.PayOrder;
 import com.qs.mp.system.service.id.BizIdGenerator;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,6 +66,12 @@ public class ChannelOrderServiceImpl extends
 
   @Autowired
   private IChannelCartService channelCartService;
+  
+  @Autowired
+  private ITicketPackageService ticketPackageService;
+  
+  @Autowired
+  private IChannelOrderDetailService channelOrderDetailervice;
 
   @Override
   @Transactional
@@ -190,4 +205,74 @@ public class ChannelOrderServiceImpl extends
       throw new ServiceException("渠道采购票组订单支付成功时,更新订单状态失败");
     }
   }
+
+	@Override
+	@Transactional
+	public boolean channelOrderShip(String orderId, List<String> pkgIdList) {
+		ChannelOrder channelOrder = getById(orderId);
+		if(null == channelOrder || StringUtils.isBlank(channelOrder.getOrderId())) {
+			throw new ServiceException("发货订单异常,发货失败");
+		}
+		
+		List<TicketPackage> ticketPkgList = new ArrayList<TicketPackage>();
+		if(null != pkgIdList && pkgIdList.size() > 0) {
+			LambdaQueryWrapper<TicketPackage> queryWrapper = new LambdaQueryWrapper<TicketPackage>();
+			queryWrapper.eq(TicketPackage::getStatus, TicketPkgStatusEnum.FOR_SALE);
+			queryWrapper.in(TicketPackage::getPkgId,  pkgIdList);
+			ticketPkgList = ticketPackageService.list(queryWrapper);
+			if(null == ticketPkgList || ticketPkgList.size() == 0
+					|| ticketPkgList.size() != pkgIdList.size()) {
+				throw new ServiceException("发货票包状态异常,发货失败");
+			}
+		}
+		List<ChannelOrderItem> orderItemList = channelOrderItemService.list(
+		        new LambdaQueryWrapper<ChannelOrderItem>()
+		            .eq(ChannelOrderItem::getOrderId, orderId));
+		// 验证发货的盲票包是否与订单中的盲票包数量一致
+		if(null == orderItemList || orderItemList.size() == 0 ) {
+			throw new ServiceException("订单明细查询异常, 发货失败");
+		}
+		List<ChannelOrderDetail> detailList = new ArrayList<ChannelOrderDetail>();
+		// 验证是否为本订单盲票
+		for(TicketPackage ticketPackage:ticketPkgList) {
+			if(null != ticketPackage && StringUtils.isNotBlank(ticketPackage.getBoxId())) {
+				long num = orderItemList.stream().filter(channelOrderItem -> channelOrderItem.getBoxId().equals(ticketPackage.getBoxId())).count();
+				if(num < 1) {
+					String msg = "票包"+ticketPackage.getStartSn()+"-" + ticketPackage.getEndSn() +"非本订单盲票";
+					throw new ServiceException(msg);
+				}
+				ChannelOrderDetail channelOrderDetail = new ChannelOrderDetail();
+				channelOrderDetail.setBoxId(ticketPackage.getBoxId());
+				channelOrderDetail.setPkgId(ticketPackage.getPkgId());
+				channelOrderDetail.setOrderId(orderId);
+				channelOrderDetail.setStartSn(ticketPackage.getStartSn());
+				channelOrderDetail.setEndSn(ticketPackage.getEndSn());
+				channelOrderDetail.setChannelId(channelOrder.getChannelId());
+				detailList.add(channelOrderDetail);
+			}
+		}
+		// 校验数量是否一致
+		for(ChannelOrderItem orderItem:orderItemList) {
+			if(null != orderItem && StringUtils.isNotBlank(orderItem.getBoxId()) ) {
+				long totalNum = ticketPkgList.stream().filter(TicketPackage -> TicketPackage.getBoxId().equals(orderItem.getBoxId())).count();
+				if(totalNum != orderItem.getOrderNum()) {
+					String msg = "票组"+orderItem.getTitle()+"盲票包" + (totalNum > orderItem.getOrderNum()?"少于":"已超出")+"订单购买的盲票包数量";
+					throw new ServiceException(msg);
+				}
+			}
+		}
+		
+		boolean res = channelOrderDetailervice.saveBatch(detailList);
+		if(res) {
+			// 修改票包已销售状态
+			LambdaUpdateWrapper<TicketPackage> updateWrapper = new LambdaUpdateWrapper<TicketPackage>();
+			updateWrapper.set(TicketPackage::getStatus, TicketPkgStatusEnum.SOLD);
+			updateWrapper.in(TicketPackage::getPkgId, pkgIdList);
+			return ticketPackageService.update(updateWrapper);
+		}
+		
+		return false;
+	}
+	  
+  
 }