|
|
@@ -1,596 +0,0 @@
|
|
|
-package cn.com.wingxi.biandan.mq.consumer.clear;
|
|
|
-
|
|
|
-import cn.com.wingxi.biandan.common.enums.*;
|
|
|
-import cn.com.wingxi.biandan.common.mq.bo.order.OrderBO;
|
|
|
-import cn.com.wingxi.biandan.common.mq.constant.OrderMqKey;
|
|
|
-import cn.com.wingxi.biandan.common.mq.core.AbstractRabbitConsumer;
|
|
|
-import cn.com.wingxi.biandan.common.utils.DateUtils;
|
|
|
-import cn.com.wingxi.biandan.common.utils.bean.BeanUtils;
|
|
|
-import cn.com.wingxi.biandan.mq.server.material.domain.MaterialKindMq;
|
|
|
-import cn.com.wingxi.biandan.mq.server.material.service.IMatePriceMqService;
|
|
|
-import cn.com.wingxi.biandan.mq.server.material.service.IMaterialKindMqService;
|
|
|
-import cn.com.wingxi.biandan.mq.server.product.domain.ProdMateMq;
|
|
|
-import cn.com.wingxi.biandan.mq.server.product.service.IProdMateMqService;
|
|
|
-import cn.com.wingxi.biandan.mq.server.product.service.IProdPriceMqService;
|
|
|
-import cn.com.wingxi.biandan.mq.server.system.service.ISysDeptVoService;
|
|
|
-import cn.com.wingxi.biandan.common.core.domain.entity.SysDept;
|
|
|
-import cn.com.wingxi.biandan.system.material.domain.MatePrice;
|
|
|
-import cn.com.wingxi.biandan.system.merchant.domain.Merchant;
|
|
|
-import cn.com.wingxi.biandan.system.merchant.service.IMerchantService;
|
|
|
-import cn.com.wingxi.biandan.system.order.domain.ClearOrder;
|
|
|
-import cn.com.wingxi.biandan.system.order.domain.ClearOrderDetail;
|
|
|
-import cn.com.wingxi.biandan.system.order.domain.Order;
|
|
|
-import cn.com.wingxi.biandan.system.order.domain.OrderDetail;
|
|
|
-import cn.com.wingxi.biandan.system.order.service.IClearOrderDetailService;
|
|
|
-import cn.com.wingxi.biandan.system.order.service.IClearOrderService;
|
|
|
-import cn.com.wingxi.biandan.system.order.service.IOrderDetailService;
|
|
|
-import cn.com.wingxi.biandan.system.order.service.IOrderService;
|
|
|
-import cn.com.wingxi.biandan.system.product.domain.Prod;
|
|
|
-import cn.com.wingxi.biandan.system.product.domain.ProdPrice;
|
|
|
-import cn.com.wingxi.biandan.system.product.service.IProdService;
|
|
|
-import cn.com.wingxi.biandan.system.vendor.domain.Vendor;
|
|
|
-import cn.com.wingxi.biandan.system.vendor.service.IVendorService;
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
-import com.google.common.collect.Lists;
|
|
|
-import com.rabbitmq.client.Channel;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.commons.collections.CollectionUtils;
|
|
|
-import org.springframework.amqp.core.Binding;
|
|
|
-import org.springframework.amqp.core.Message;
|
|
|
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|
|
-import org.springframework.context.annotation.Bean;
|
|
|
-import org.springframework.stereotype.Component;
|
|
|
-
|
|
|
-import javax.annotation.Resource;
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-/**
|
|
|
- * @ClassName 订单清分
|
|
|
- * @projectName biandan
|
|
|
- * @Deacription 订单清分
|
|
|
- * @Author FZ.Dong
|
|
|
- * @Date 2020/9/15 16:56
|
|
|
- * @Version 1.0
|
|
|
- **/
|
|
|
-
|
|
|
-
|
|
|
-@Slf4j
|
|
|
-@Component
|
|
|
-public class ClearOrderPayedMqConsumer extends AbstractRabbitConsumer {
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IMerchantService iMerchantService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IVendorService iVendorService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private ISysDeptVoService iSysDeptVoService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IOrderService iOrderService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IOrderDetailService iOrderDetailService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IClearOrderService iClearOrderService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IClearOrderDetailService iClearOrderDetailService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IProdService iProdService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IMaterialKindMqService iMaterialKindMqService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IProdMateMqService iProdMateMqService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IProdPriceMqService iProdPriceMqService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private IMatePriceMqService iMatePriceMqService;
|
|
|
-
|
|
|
- @Bean(OrderMqKey.EDIT_QUEUE_CLEAR_FOR_PAYED)
|
|
|
- @Override
|
|
|
- protected List<Binding> getBindingList() {
|
|
|
- return Lists.newArrayList(this.bind(
|
|
|
- OrderMqKey.EDIT_EXCHANGE,
|
|
|
- OrderMqKey.EDIT_QUEUE_CLEAR_FOR_PAYED,
|
|
|
- OrderMqKey.EDIT_ROUTE_FOR_PAYED
|
|
|
- ));
|
|
|
- }
|
|
|
-
|
|
|
- @RabbitListener(queues = OrderMqKey.EDIT_QUEUE_CLEAR_FOR_PAYED)
|
|
|
- @Override
|
|
|
- public void onMessage(Message message, Channel channel) throws Exception {
|
|
|
- this.convertMessage(message, channel);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean execute(String body, Channel channel, Message message) throws Exception {
|
|
|
- log.info("清分订单创建MQ,处理推送的订单数据【{}】.", body);
|
|
|
-
|
|
|
- // 消息唯一id
|
|
|
- String messageId = message.getMessageProperties().getMessageId();
|
|
|
- // json对象转换
|
|
|
- OrderBO orderBo = JSON.parseObject(body, OrderBO.class);
|
|
|
-
|
|
|
- // 通过订单id查询是否存在
|
|
|
- List<ClearOrder> exists = iClearOrderService.selectClearOrderByOrderId(orderBo.getOrderId());
|
|
|
- // ack
|
|
|
- if (CollectionUtils.isNotEmpty(exists)) {
|
|
|
- log.info("清分订单创建MQ,订单【{}】数据已存在.", orderBo.getOrderNo());
|
|
|
- // 处理成功
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- // 原始订单信息
|
|
|
- Order orgOrder = iOrderService.selectOrderByOrderId(orderBo.getOrderId());
|
|
|
-
|
|
|
- // 订单明细
|
|
|
- List<OrderDetail> orderDetailList = iOrderDetailService.selectOrderDetailByOrderId(orderBo.getOrderId());
|
|
|
-
|
|
|
- // M2C
|
|
|
- buildM2CClearOrder(orgOrder, orderDetailList);
|
|
|
-
|
|
|
- // M2M,M2P,P2V
|
|
|
- buildM2MClearOrder(orgOrder, orderDetailList, orgOrder.getSellerId(), orgOrder.getSellerRole());
|
|
|
-
|
|
|
- //buildV2PClearOrder(orgOrder, orderDetailList);
|
|
|
-
|
|
|
- log.info("清分订单创建MQ,订单【{}】数据处理完成.", orderBo.getOrderNo());
|
|
|
- // 处理成功
|
|
|
- return true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 构建M2C清分数据, C端与商户
|
|
|
- *
|
|
|
- * @param order
|
|
|
- */
|
|
|
- public void buildM2CClearOrder(Order order, List<OrderDetail> orderDetailList) {
|
|
|
-
|
|
|
- String opName = "清分订单创建MQ";
|
|
|
- Date nowDate = DateUtils.getNowDate();
|
|
|
-
|
|
|
- // 构建清分数据对象
|
|
|
- ClearOrder nco = new ClearOrder();
|
|
|
- nco.setOrderId(order.getOrderId()); // 订单ID
|
|
|
- nco.setOrderNo(order.getOrderNo()); // 订单号
|
|
|
- nco.setBuyerId(order.getBuyerId()); // 购买方编号
|
|
|
- nco.setBuyerRole(order.getBuyerRole()); // 购买方角色
|
|
|
- nco.setTradeType(ETradeType.M2C.getVal()); // 交易区分
|
|
|
- nco.setSellerId(order.getSellerId()); // 销售方编号
|
|
|
- nco.setSellerRole(order.getSellerRole());// 销售方角色
|
|
|
- nco.setPayeeId(order.getPayeeId());
|
|
|
- nco.setPayeeRole(order.getPayeeRole());
|
|
|
- nco.setFinishTime(order.getFinishTime());// 订单完成时间
|
|
|
- nco.setOrderStatus(order.getOrderStatus());// 订单状态
|
|
|
- //nco.setSettleTime();// 结算时间
|
|
|
- nco.setSettleStatus(ESettleStatus.UNSETTLED.getVal());// 结算状态
|
|
|
- //nco.setInvoiceTime();// 开票时间
|
|
|
- nco.setInvoiceStatus(EInvoiceStatus.UNBILLED.getVal()); // 开票状态
|
|
|
- nco.setDelFlag(EDelete.FALSE.getVal()); // 删除标志(0代表存在 2代表删除)
|
|
|
- nco.setCreateUser(opName); // 创建用户
|
|
|
- nco.setCreateTime(nowDate); // 创建时间
|
|
|
- nco.setUpdateUser(opName); // 更新用户
|
|
|
- nco.setUpdateTime(nowDate); // 更新时间
|
|
|
- iClearOrderService.insertClearOrder(nco);
|
|
|
-
|
|
|
- // 循环处理子订单
|
|
|
- for (OrderDetail od : orderDetailList) {
|
|
|
- ClearOrderDetail ncod = new ClearOrderDetail();
|
|
|
- ncod.setOrderId(od.getOrderId()); // 订单ID
|
|
|
- ncod.setOrderNo(nco.getOrderNo()); // 订单号
|
|
|
- ncod.setOrderDetailId(od.getOrderDetailId());// 订单明细ID
|
|
|
- ncod.setBuyerId(nco.getBuyerId()); // 购方ID
|
|
|
- ncod.setBuyerRole(nco.getBuyerRole()); // 购方角色
|
|
|
- ncod.setSellerId(nco.getSellerId()); // 销方ID
|
|
|
- ncod.setSellerRole(nco.getSellerRole());// 销方角色
|
|
|
- ncod.setTradeType(nco.getTradeType()); // 交易区分
|
|
|
- ncod.setSuiteId(od.getSuiteId());
|
|
|
- ncod.setProdId(od.getProdId()); // 商品ID
|
|
|
- ncod.setProdName(od.getProdName()); // 商品名
|
|
|
- ncod.setPprId(od.getPprId()); // 商品属性组合ID
|
|
|
- ncod.setPprName(od.getPprName()); // 商品属性组合名
|
|
|
- ncod.setOrgProdId(od.getOrgProdId()); // 元商品ID
|
|
|
- ncod.setMateId(od.getMateId()); // 素材ID
|
|
|
- ncod.setMateName(od.getMateName()); // 素材名称
|
|
|
- ncod.setProdType(od.getProdType()); // 商品区分
|
|
|
- ncod.setPfSellFlag(od.getPfSellFlag()); // 平台经销标志
|
|
|
- ncod.setBuyPrice(od.getBuyPrice()); // 购方购买单价
|
|
|
- ncod.setSalePrice(od.getSalePrice()); // 销方结算价
|
|
|
- ncod.setSurfaceQty(od.getSurfaceQty());
|
|
|
- ncod.setUnitQty(od.getUnitQty());
|
|
|
- ncod.setOrderQty(od.getBuyQty()); // 订单数量
|
|
|
- ncod.setReturnQty(od.getReturnQty()); // 退货数量
|
|
|
- ncod.setServiceRate(order.getServiceRate()); // 服务费率
|
|
|
- ncod.setFinishTime(od.getFinishTime()); // 订单完成时间
|
|
|
- ncod.setOrderStatus(od.getOrderDetailStatus());// 订单状态
|
|
|
-// ncod.setSettleTime();// 结算时间
|
|
|
- ncod.setSettleStatus(ESettleStatus.UNSETTLED.getVal());// 结算状态
|
|
|
-// ncod.setInvoiceTime();// 开票时间
|
|
|
- ncod.setInvoiceStatus(EInvoiceStatus.UNBILLED.getVal());// 开票状态
|
|
|
-// ncod.setSettleBatchNo("");// 结算批次号
|
|
|
-// ncod.setInvoiceBatchNo("");// 开票批次号
|
|
|
-// ncod.setInvoiceBillNo("");// 发票请求流水号
|
|
|
- ncod.setDelFlag(EDelete.FALSE.getVal());// 删除标志(0代表存在 2代表删除)
|
|
|
- ncod.setCreateUser(opName); // 创建用户
|
|
|
- ncod.setCreateTime(nowDate); // 创建时间
|
|
|
- ncod.setUpdateUser(opName); // 更新用户
|
|
|
- ncod.setUpdateTime(nowDate); // 更新时间
|
|
|
- iClearOrderDetailService.insertClearOrderDetail(ncod);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 构建M2M清分数据 商户与上级商户或者平台
|
|
|
- *
|
|
|
- * @param order
|
|
|
- */
|
|
|
- public void buildM2MClearOrder(Order order, List<OrderDetail> orderDetailList, Long buyerId, String buyerRole) {
|
|
|
-
|
|
|
- String opName = "清分订单创建MQ";
|
|
|
- Date nowDate = DateUtils.getNowDate();
|
|
|
-
|
|
|
- // 商户的上级部门,可能是商户或者平台
|
|
|
- SysDept sellerDept = iSysDeptVoService.selectParentDeptByDeptId(buyerId);
|
|
|
- Long sellerId = sellerDept.getDeptId();
|
|
|
- // 平台在商户表存在预置数据
|
|
|
- Merchant sellerMerc = iMerchantService.selectMerchantByMercId(sellerId);
|
|
|
- List<OrderDetail> unpackDetailList = new ArrayList<>();
|
|
|
-
|
|
|
- for (OrderDetail od : orderDetailList) {
|
|
|
- if(EDelete.TRUE.getVal().equals(od.getDelFlag())) {
|
|
|
- // 自营商品在前面舍弃了
|
|
|
- continue;
|
|
|
- }
|
|
|
-//====================================================================
|
|
|
-// FIXED("FIXED", "固化商品"), //2023-05-30 逻辑暂不考虑
|
|
|
-// HALF_FIXED("HALF_FIXED", "半固化商品"), //2023-05-30 逻辑暂不考虑
|
|
|
-// MERCPROD("MERC_PRODUCT", "商户商品"), //2023-05-30 商户与商户之间结算
|
|
|
-//====================================================================
|
|
|
-// MERCMATE("MERC_MATERIAL", "商户素材"), //2023-05-30 逻辑暂不考虑
|
|
|
-//====================================================================
|
|
|
-// NORMAL("NORMAL", "常规商品"), //2023-05-30 商户与商户之间结算,商户与供应商的结算在商户后台下单时进行,平台经销商品需要生成B2P,P2V
|
|
|
-// CUSTOMIZABLE("CUSTOMIZABLE", "定制商品"), //2023-05-30 逻辑暂不考虑
|
|
|
-// MATERIAL("MATERIAL", "素材"); //2023-05-30 逻辑暂不考虑
|
|
|
-//====================================================================
|
|
|
- if (EProdType.FIXED.getVal().equals(od.getProdType())
|
|
|
- || EProdType.HALF_FIXED.getVal().equals(od.getProdType())) {
|
|
|
-
|
|
|
- // 商品的归属商户
|
|
|
- if(od.getVendorId().longValue() != buyerId.longValue()) {
|
|
|
- // 非自营,保留
|
|
|
- OrderDetail nod = new OrderDetail();
|
|
|
- BeanUtils.copyBeanProp(nod, od);
|
|
|
- unpackDetailList.add(nod);
|
|
|
- } else {
|
|
|
- // 商品固化设计面数量
|
|
|
- int surfaceQty = iProdMateMqService.selectProdMateSurfaceQty(od.getProdId(), od.getPprId());
|
|
|
- Prod orgProd = iProdService.selectProdByProdId(od.getOrgProdId());
|
|
|
- OrderDetail nod = new OrderDetail();
|
|
|
- BeanUtils.copyBeanProp(nod, od);
|
|
|
- nod.setProdId(orgProd.getProdId());
|
|
|
- nod.setProdName(orgProd.getProdName());
|
|
|
- nod.setProdType(orgProd.getProdType());
|
|
|
- nod.setSurfaceQty(surfaceQty + od.getSurfaceQty());
|
|
|
- unpackDetailList.add(nod);
|
|
|
-
|
|
|
- // 查询所用素材
|
|
|
- List<ProdMateMq> prodMateList = iProdMateMqService.selectProdMateUnitQty(od.getProdId(), od.getPprId());
|
|
|
- for(ProdMateMq pmm : prodMateList) {
|
|
|
- // 素材的归属商户
|
|
|
- MaterialKindMq mkm = iMaterialKindMqService.selectMaterialKindMqByMateId(pmm.getMateId());
|
|
|
- if(mkm.getMercId().longValue() != buyerId.longValue()) {
|
|
|
- OrderDetail nmod = new OrderDetail();
|
|
|
- nmod.setOrderDetailId(od.getOrderDetailId());
|
|
|
- nmod.setOrderId(od.getOrderId());
|
|
|
- nmod.setSuiteId(od.getSuiteId());
|
|
|
- nmod.setProdId(orgProd.getProdId());
|
|
|
- nmod.setProdName(orgProd.getProdName());
|
|
|
- if(EMateBelong.MERC.getVal().equals(mkm.getMateBelong())) {
|
|
|
- nmod.setProdType(EProdType.MERCMATE.getVal());
|
|
|
- } else {
|
|
|
- nmod.setProdType(EProdType.MATERIAL.getVal());
|
|
|
- }
|
|
|
- nmod.setMateId(pmm.getMateId());
|
|
|
- nmod.setMateName(pmm.getMateName());
|
|
|
- //nmod.setMateType(EMateType);
|
|
|
- nmod.setVendorId(mkm.getVendorId());
|
|
|
- nmod.setSurfaceQty(0);
|
|
|
- nmod.setUnitQty(pmm.getMateQty());
|
|
|
- nmod.setBuyQty(od.getBuyQty());
|
|
|
- nmod.setAfterQty(od.getAfterQty());
|
|
|
- nmod.setReturnQty(od.getReturnQty());
|
|
|
- nmod.setBuyPrice(od.getSalePrice());
|
|
|
- nmod.setSurfaceQty(surfaceQty + od.getSurfaceQty());
|
|
|
- nmod.setOrderDetailStatus(od.getOrderDetailStatus());
|
|
|
- unpackDetailList.add(nmod);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else if(EProdType.MERCPROD.getVal().equals(od.getProdType())) {
|
|
|
- // 商户商品的归属商户
|
|
|
- if(od.getVendorId().longValue() != buyerId.longValue()) {
|
|
|
- // 非自营,保留
|
|
|
- OrderDetail nod = new OrderDetail();
|
|
|
- BeanUtils.copyBeanProp(nod, od);
|
|
|
- unpackDetailList.add(nod);
|
|
|
- } else {
|
|
|
- // 自营素材,舍弃
|
|
|
- // 借用delFlag,后续供应链不在统计
|
|
|
- od.setDelFlag(EDelete.TRUE.getVal());
|
|
|
- }
|
|
|
- } else if(EProdType.MERCMATE.getVal().equals(od.getProdType())) {
|
|
|
- // 素材的归属商户
|
|
|
- MaterialKindMq mkm = iMaterialKindMqService.selectMaterialKindMqByMateId(od.getMateId());
|
|
|
- if(mkm.getMercId().longValue() != buyerId.longValue()) {
|
|
|
- // 非自营,保留
|
|
|
- OrderDetail nod = new OrderDetail();
|
|
|
- BeanUtils.copyBeanProp(nod, od);
|
|
|
- unpackDetailList.add(nod);
|
|
|
- } else {
|
|
|
- // 自营素材,舍弃
|
|
|
- // 借用delFlag,后续供应链不在统计
|
|
|
- od.setDelFlag(EDelete.TRUE.getVal());
|
|
|
- }
|
|
|
- } else {
|
|
|
-// NORMAL("NORMAL", "常规商品"),
|
|
|
-// CUSTOMIZABLE("CUSTOMIZABLE", "定制商品"),
|
|
|
-// MATERIAL("MATERIAL", "素材");
|
|
|
- // 归属平台,保留
|
|
|
- // 平台经销商品且销售方为平台时需要
|
|
|
- if((EDeptType.PLATFORM.getVal().equals(sellerDept.getDeptType()) && EYesNo.YES.getVal().equals(od.getPfSellFlag()))
|
|
|
- || EDeptType.MERCHANT.getVal().equals(sellerDept.getDeptType())) {
|
|
|
- OrderDetail nod = new OrderDetail();
|
|
|
- BeanUtils.copyBeanProp(nod, od);
|
|
|
- unpackDetailList.add(nod);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(!unpackDetailList.isEmpty()) {
|
|
|
- // M2M,M2P
|
|
|
- // 构建清分数据对象
|
|
|
- ClearOrder nco = new ClearOrder();
|
|
|
- nco.setOrderId(order.getOrderId()); // 订单ID
|
|
|
- nco.setOrderNo(order.getOrderNo()); // 订单号
|
|
|
- nco.setBuyerId(buyerId); // 购买方编号
|
|
|
- nco.setBuyerRole(buyerRole); // 购买方角色
|
|
|
- nco.setTradeType(getTradeType(buyerRole, sellerDept.getDeptType()).getVal()); // 交易区分
|
|
|
- nco.setSellerId(sellerId); // 销售方编号
|
|
|
- nco.setSellerRole(sellerDept.getDeptType());// 销售方角色
|
|
|
- nco.setPayeeId(order.getPayeeId());
|
|
|
- nco.setPayeeRole(order.getPayeeRole());
|
|
|
- nco.setFinishTime(order.getFinishTime());// 订单完成时间
|
|
|
- nco.setOrderStatus(order.getOrderStatus());// 订单状态
|
|
|
- //nco.setSettleTime();// 结算时间
|
|
|
- nco.setSettleStatus(ESettleStatus.UNSETTLED.getVal());// 结算状态
|
|
|
- //nco.setInvoiceTime();// 开票时间
|
|
|
- nco.setInvoiceStatus(EInvoiceStatus.UNBILLED.getVal()); // 开票状态
|
|
|
- nco.setDelFlag(EDelete.FALSE.getVal()); // 删除标志(0代表存在 2代表删除)
|
|
|
- nco.setCreateUser(opName); // 创建用户
|
|
|
- nco.setCreateTime(nowDate); // 创建时间
|
|
|
- nco.setUpdateUser(opName); // 更新用户
|
|
|
- nco.setUpdateTime(nowDate); // 更新时间
|
|
|
- iClearOrderService.insertClearOrder(nco);
|
|
|
-
|
|
|
- // 循环处理子订单
|
|
|
- for (OrderDetail od : unpackDetailList) {
|
|
|
- ClearOrderDetail ncod = new ClearOrderDetail();
|
|
|
- ncod.setOrderId(od.getOrderId()); // 订单ID
|
|
|
- ncod.setOrderNo(nco.getOrderNo()); // 订单号
|
|
|
- ncod.setOrderDetailId(od.getOrderDetailId());// 订单明细ID
|
|
|
- ncod.setBuyerId(nco.getBuyerId()); // 购方ID
|
|
|
- ncod.setBuyerRole(nco.getBuyerRole()); // 购方角色
|
|
|
- ncod.setSellerId(nco.getSellerId()); // 销方ID
|
|
|
- ncod.setSellerRole(nco.getSellerRole());// 销方角色
|
|
|
- ncod.setTradeType(nco.getTradeType()); // 交易区分
|
|
|
- ncod.setSuiteId(od.getSuiteId());
|
|
|
- ncod.setProdId(od.getProdId()); // 商品ID
|
|
|
- ncod.setProdName(od.getProdName()); // 商品名
|
|
|
- ncod.setPprId(od.getPprId()); // 商品属性组合ID
|
|
|
- ncod.setPprName(od.getPprName()); // 商品属性组合名
|
|
|
- ncod.setOrgProdId(od.getOrgProdId()); // 元商品ID
|
|
|
- ncod.setMateId(od.getMateId()); // 素材ID
|
|
|
- ncod.setMateName(od.getMateName()); // 素材名称
|
|
|
- ncod.setProdType(od.getProdType()); // 商品区分
|
|
|
- ncod.setPfSellFlag(od.getPfSellFlag()); // 平台经销标志
|
|
|
- ncod.setBuyPrice(getPrice(ncod, nco.getBuyerId(), nco.getSellerId())); // 购方购买单价
|
|
|
-
|
|
|
- // 销方结算价
|
|
|
- Long vendorId = 100L; // 平台
|
|
|
- if(EDeptType.MERCHANT.getVal().equals(sellerDept.getDeptType())) {
|
|
|
- vendorId = sellerDept.getParentId();
|
|
|
- }
|
|
|
- od.setSalePrice(getPrice(ncod, nco.getSellerId(), vendorId));
|
|
|
-
|
|
|
- ncod.setSalePrice(od.getSalePrice()); // 销方结算价
|
|
|
- ncod.setOrderQty(od.getBuyQty()); // 订单数量
|
|
|
- ncod.setReturnQty(od.getReturnQty()); // 退货数量
|
|
|
- ncod.setServiceRate(sellerMerc.getServiceRate()); // 服务费率
|
|
|
- ncod.setFinishTime(od.getFinishTime()); // 订单完成时间
|
|
|
- ncod.setOrderStatus(od.getOrderDetailStatus());// 订单状态
|
|
|
- // ncod.setSettleTime();// 结算时间
|
|
|
- ncod.setSettleStatus(ESettleStatus.UNSETTLED.getVal());// 结算状态
|
|
|
- // ncod.setInvoiceTime();// 开票时间
|
|
|
- ncod.setInvoiceStatus(EInvoiceStatus.UNBILLED.getVal());// 开票状态
|
|
|
- // ncod.setSettleBatchNo("");// 结算批次号
|
|
|
- // ncod.setInvoiceBatchNo("");// 开票批次号
|
|
|
- // ncod.setInvoiceBillNo("");// 发票请求流水号
|
|
|
- ncod.setDelFlag(EDelete.FALSE.getVal());// 删除标志(0代表存在 2代表删除)
|
|
|
- ncod.setCreateUser(opName); // 创建用户
|
|
|
- ncod.setCreateTime(nowDate); // 创建时间
|
|
|
- ncod.setUpdateUser(opName); // 更新用户
|
|
|
- ncod.setUpdateTime(nowDate); // 更新时间
|
|
|
- iClearOrderDetailService.insertClearOrderDetail(ncod);
|
|
|
- }
|
|
|
- // V2M
|
|
|
- if(EDeptType.PLATFORM.getVal().equals(sellerDept.getDeptType())) {
|
|
|
- // 构建清分数据对象
|
|
|
- buildV2MClearOrder(order,unpackDetailList, buyerId);
|
|
|
- }
|
|
|
- }
|
|
|
- if(EDeptType.MERCHANT.getVal().equals(sellerDept.getDeptType())) {
|
|
|
- // 上级供应商
|
|
|
- buildM2MClearOrder(order, unpackDetailList, sellerId, sellerDept.getDeptType());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 构建清分数据 经销商与供应商
|
|
|
- *
|
|
|
- * @param order
|
|
|
- */
|
|
|
- public void buildV2MClearOrder(Order order, List<OrderDetail> orderDetailList, Long buyerId) {
|
|
|
-
|
|
|
- String opName = "清分订单创建MQ";
|
|
|
- Date nowDate = DateUtils.getNowDate();
|
|
|
-
|
|
|
- // 供应商
|
|
|
- // 按照供应商分组
|
|
|
- Map<Long, List<OrderDetail>> orderMap = orderDetailList.stream().collect(Collectors.groupingBy(item -> item.getVendorId()));
|
|
|
- for (Map.Entry<Long, List<OrderDetail>> orderEntry : orderMap.entrySet()) {
|
|
|
- Long vendorId = orderEntry.getKey();
|
|
|
- Vendor vendor = iVendorService.selectVendorByVendorId(vendorId);
|
|
|
- if(vendor == null){
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- // 明细
|
|
|
- List<OrderDetail> details = orderEntry.getValue();
|
|
|
-
|
|
|
- // 构建清分数据对象
|
|
|
- ClearOrder nco = new ClearOrder();
|
|
|
- nco.setOrderId(order.getOrderId()); // 订单ID
|
|
|
- nco.setOrderNo(order.getOrderNo()); // 订单号
|
|
|
- nco.setBuyerId(buyerId); // 购买方编号
|
|
|
- nco.setBuyerRole(ERoleKey.MERCHANT.getCode()); // 购买方角色
|
|
|
- nco.setTradeType(ETradeType.V2P.getVal()); // 交易区分
|
|
|
- nco.setSellerId(vendorId); // 销售方编号
|
|
|
- nco.setSellerRole(ERoleKey.VENDOR.getCode());// 销售方角色
|
|
|
- nco.setPayeeId(order.getPayeeId());
|
|
|
- nco.setPayeeRole(order.getPayeeRole());
|
|
|
- nco.setFinishTime(order.getFinishTime());// 订单完成时间
|
|
|
- nco.setOrderStatus(order.getOrderStatus());// 订单状态
|
|
|
- //nco.setSettleTime();// 结算时间
|
|
|
- nco.setSettleStatus(ESettleStatus.UNSETTLED.getVal());// 结算状态
|
|
|
- //nco.setInvoiceTime();// 开票时间
|
|
|
- nco.setInvoiceStatus(EInvoiceStatus.UNBILLED.getVal()); // 开票状态
|
|
|
- nco.setDelFlag(EDelete.FALSE.getVal()); // 删除标志(0代表存在 2代表删除)
|
|
|
- nco.setCreateUser(opName); // 创建用户
|
|
|
- nco.setCreateTime(nowDate); // 创建时间
|
|
|
- nco.setUpdateUser(opName); // 更新用户
|
|
|
- nco.setUpdateTime(nowDate); // 更新时间
|
|
|
- iClearOrderService.insertClearOrder(nco);
|
|
|
-
|
|
|
- // 循环处理子订单
|
|
|
- for (OrderDetail od : details) {
|
|
|
- ClearOrderDetail ncod = new ClearOrderDetail();
|
|
|
- ncod.setOrderId(od.getOrderId()); // 订单ID
|
|
|
- ncod.setOrderNo(nco.getOrderNo()); // 订单号
|
|
|
- ncod.setOrderDetailId(od.getOrderDetailId());// 订单明细ID
|
|
|
- ncod.setBuyerId(nco.getBuyerId()); // 购方ID
|
|
|
- ncod.setBuyerRole(nco.getBuyerRole()); // 购方角色
|
|
|
- ncod.setSellerId(nco.getSellerId()); // 销方ID
|
|
|
- ncod.setSellerRole(nco.getSellerRole());// 销方角色
|
|
|
- ncod.setTradeType(nco.getTradeType()); // 交易区分
|
|
|
- ncod.setSuiteId(od.getSuiteId());
|
|
|
- ncod.setProdId(od.getProdId()); // 商品ID
|
|
|
- ncod.setProdName(od.getProdName()); // 商品名
|
|
|
- ncod.setPprId(od.getPprId()); // 商品属性组合ID
|
|
|
- ncod.setPprName(od.getPprName()); // 商品属性组合名
|
|
|
- ncod.setOrgProdId(od.getOrgProdId()); // 元商品ID
|
|
|
- ncod.setMateId(od.getMateId()); // 素材ID
|
|
|
- ncod.setMateName(od.getMateName()); // 素材名称
|
|
|
- ncod.setProdType(od.getProdType()); // 商品区分
|
|
|
- ncod.setPfSellFlag(od.getPfSellFlag()); // 平台经销标志
|
|
|
- ncod.setBuyPrice(getPrice(ncod, nco.getBuyerId(), nco.getSellerId())); // 购方购买单价
|
|
|
- ncod.setSalePrice(getPrice(ncod, nco.getSellerId(), nco.getSellerId())); // 销方结算价
|
|
|
- ncod.setOrderQty(od.getBuyQty()); // 订单数量
|
|
|
- ncod.setReturnQty(od.getReturnQty()); // 退货数量
|
|
|
- ncod.setServiceRate(vendor.getServiceRate()); // 服务费率 TODO
|
|
|
- ncod.setFinishTime(od.getFinishTime()); // 订单完成时间
|
|
|
- ncod.setOrderStatus(od.getOrderDetailStatus());// 订单状态
|
|
|
-// ncod.setSettleTime();// 结算时间
|
|
|
- ncod.setSettleStatus(ESettleStatus.UNSETTLED.getVal());// 结算状态
|
|
|
-// ncod.setInvoiceTime();// 开票时间
|
|
|
- ncod.setInvoiceStatus(EInvoiceStatus.UNBILLED.getVal());// 开票状态
|
|
|
-// ncod.setSettleBatchNo("");// 结算批次号
|
|
|
-// ncod.setInvoiceBatchNo("");// 开票批次号
|
|
|
-// ncod.setInvoiceBillNo("");// 发票请求流水号
|
|
|
- ncod.setDelFlag(EDelete.FALSE.getVal());// 删除标志(0代表存在 2代表删除)
|
|
|
- ncod.setCreateUser(opName); // 创建用户
|
|
|
- ncod.setCreateTime(nowDate); // 创建时间
|
|
|
- ncod.setUpdateUser(opName); // 更新用户
|
|
|
- ncod.setUpdateTime(nowDate); // 更新时间
|
|
|
- iClearOrderDetailService.insertClearOrderDetail(ncod);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 交易区分
|
|
|
- *
|
|
|
- * @param buyerRole
|
|
|
- * @param sellerRole
|
|
|
- * @return
|
|
|
- */
|
|
|
- private ETradeType getTradeType(String buyerRole, String sellerRole){
|
|
|
- if(ERoleKey.CUSTOMER.getCode().equals(buyerRole)){
|
|
|
- if(ERoleKey.MERCHANT.getCode().equals(sellerRole)) {
|
|
|
- return ETradeType.M2C;
|
|
|
- }
|
|
|
- } else if(ERoleKey.MERCHANT.getCode().equals(buyerRole)) {
|
|
|
- if(ERoleKey.MERCHANT.getCode().equals(sellerRole)) {
|
|
|
- return ETradeType.M2M;
|
|
|
- } else if(ERoleKey.PLATFORM.getCode().equals(sellerRole)){
|
|
|
- return ETradeType.P2M;
|
|
|
- }
|
|
|
- }
|
|
|
- return ETradeType.V2P;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 取价格
|
|
|
- *
|
|
|
- * @param clearOrderDetail
|
|
|
- * @return
|
|
|
- */
|
|
|
- private BigDecimal getPrice(ClearOrderDetail clearOrderDetail, Long buyerId, Long salesmanId) {
|
|
|
-
|
|
|
- if(EProdType.NORMAL.getVal().equals(clearOrderDetail.getProdType())
|
|
|
- || EProdType.CUSTOMIZABLE.getVal().equals(clearOrderDetail.getProdType())
|
|
|
- || EProdType.FIXED.getVal().equals(clearOrderDetail.getProdType())
|
|
|
- || EProdType.HALF_FIXED.getVal().equals(clearOrderDetail.getProdType())
|
|
|
- || EProdType.MERCPROD.getVal().equals(clearOrderDetail.getProdType())) {
|
|
|
- // 查询商品价格
|
|
|
- ProdPrice spp = new ProdPrice();
|
|
|
- spp.setProdId(clearOrderDetail.getProdId());
|
|
|
- spp.setPprId(clearOrderDetail.getPprId());
|
|
|
- spp.setBuyerId(buyerId);
|
|
|
- spp.setSalesmanId(salesmanId);
|
|
|
- spp.setSurfaceQty(clearOrderDetail.getSurfaceQty());
|
|
|
-
|
|
|
- return iProdPriceMqService.getProdPriceByUnionId(spp);
|
|
|
- } else {
|
|
|
- // 查询素材价格
|
|
|
- MatePrice smp = new MatePrice();
|
|
|
- smp.setMateId(clearOrderDetail.getMateId());
|
|
|
- smp.setBuyerId(buyerId);
|
|
|
- smp.setSalesmanId(salesmanId);
|
|
|
- return iMatePriceMqService.getMatePriceByUnionId(smp);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|