yujia 7 лет назад
Родитель
Сommit
079e900ade

+ 3 - 2
src/main/java/com/uas/platform/b2c/logistics/controller/InvoiceController.java

@@ -5,6 +5,7 @@ import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
+import com.uas.platform.b2c.logistics.model.Invoice;
 import com.uas.platform.b2c.logistics.model.InvoiceFOrder;
 import com.uas.platform.b2c.logistics.service.InvoiceFOrderService;
 import com.uas.platform.b2c.logistics.service.InvoiceService;
@@ -56,9 +57,9 @@ public class InvoiceController {
 	 */
 	@RequestMapping(value = "/create/{orid}/order", method = RequestMethod.PUT)
 	@ApiOperation(value = "订单转出货", httpMethod = "PUT")
-	public InvoiceFOrder send(@ApiParam(required = true, value = "订单id") @PathVariable Long orid) {
+	public Invoice send(@ApiParam(required = true, value = "订单id") @PathVariable Long orid) {
 		logger.log("客户出货单信息管理", "转出货", "转出货的订单id=" + orid + ",操作人:" + SystemSession.getUser().getUserUU() + "-" + SystemSession.getUser().getUserName());
-		return inForService.createInvoiceFOrder(orid);
+		return invoiceService.createInvoiceFOrder(orid);
 	}
 
 	/**

+ 63 - 0
src/main/java/com/uas/platform/b2c/logistics/model/Invoice.java

@@ -771,4 +771,67 @@ public class Invoice extends Document implements Serializable {
         this.orid = fPurchase.getOrid();
         this.proofingid = fPurchase.getProofingid();
     }
+
+    public Invoice(InvoiceFOrder iOrder) {
+        this.invoiceid = iOrder.getInvoiceid();
+        this.buyeruu = iOrder.getBuyeruu();
+        this.buyerenuu = iOrder.getBuyerenuu();
+        this.buyername = iOrder.getBuyername();
+        this.piclass = Type.Invoice_B2c_code.value();
+        this.sourceid = iOrder.getSourceid();
+        this.remark = iOrder.getInforRemark();
+        this.uasPurcid = iOrder.getUasPurcid();
+        this.jsonSpAddress = iOrder.getJsonSpAddress();
+        this.jsonSdAddress = iOrder.getJsonSdAddress();
+        this.logistics = iOrder.getLogistics();
+        this.createtime = iOrder.getCreattime();
+        this.status = iOrder.getStatus();
+        this.currency = iOrder.getCurrency();
+        this.taxes = iOrder.getTaxes();
+        this.fare = iOrder.getFare();
+        this.jsonRule = iOrder.getJsonRule();
+        this.jsonTakeSelf = iOrder.getJsonTakeSelf();
+        this.price = iOrder.getPrice();
+        this.ensurePrice = iOrder.getEnsurePrice();
+        this.transationPrice = iOrder.getTransationPrice();
+        this.statushistory = iOrder.getStatushistory();
+        this.qty = iOrder.getNumber();
+        this.orderId = iOrder.getOrid();
+        this.proofingid = iOrder.getProofingid();
+    }
+
+    public Invoice(Order order) {
+		this.buyeruu = order.getBuyeruu();
+		this.buyerenuu = order.getBuyerenuu();
+		this.buyername = order.getBuyername();
+		this.buyerentername = order.getBuyerentername();
+		this.sellerenuu = order.getSellerenuu();
+		this.sellername = order.getSellername();
+		this.piclass = Type.Invoice_B2c_code.value();
+		this.sourceid = order.getOrderid();
+		this.remark = order.getOrderRemark();
+		this.uasPurcid = order.getUasPurcid();
+		this.jsonSpAddress = order.getJsonAddress();
+		this.jsonSdAddress = order.getJsonSdAddress();
+		this.createtime = order.getCreattime();
+		this.status = order.getStatus();
+		this.currency = order.getCurrency();
+		this.taxes = order.getTaxes();
+		this.fare = order.getFare();
+		this.jsonRule = order.getJsonRule();
+		this.jsonTakeSelf = order.getJsonTakeSelf();
+		this.price = order.getPrice();
+		this.ensurePrice = order.getEnsurePrice();
+		this.transationPrice = order.getTransationPrice();
+		this.statushistory = order.getStatushistory();
+		this.qty = order.getQty();
+		this.sendType = order.getDeliverytype();
+		this.deliveryType = Type.valueOf(this.sendType).getPhrase();
+		this.selfDeliveryName = order.getSelfDeliveryName();
+		this.selfDeliveryPhone = order.getSelfDeliveryPhone();
+		this.storeid = order.getStoreid();
+		this.orid = order.getOrderid();
+		this.orderId = order.getId();
+		this.proofingid = order.getProofingid();
+	}
 }

+ 51 - 11
src/main/java/com/uas/platform/b2c/logistics/model/InvoiceDetail.java

@@ -222,7 +222,7 @@ public class InvoiceDetail {
 	 * 含税单价
 	 */
 	@Column(name = "detail_taxunitprice")
-	private Double taxunitprice;
+	private Double taxUnitprice;
 
 
 	/**
@@ -512,12 +512,13 @@ public class InvoiceDetail {
 		this.tax = tax;
 	}
 
-	public Double getTaxunitprice() {
-		return taxunitprice;
+	public Double getTaxUnitprice() {
+		return taxUnitprice;
 	}
 
-	public void setTaxunitprice(Double taxunitprice) {
-		this.taxunitprice = taxunitprice;
+	public InvoiceDetail setTaxUnitprice(Double taxUnitprice) {
+		this.taxUnitprice = taxUnitprice;
+		return this;
 	}
 
 	public Long getOrderDetailId() {
@@ -588,7 +589,7 @@ public class InvoiceDetail {
 		this.brandid = puDetail.getBrandid();
 		this.img = puDetail.getImg();
 		this.unitprice = puDetail.getUnitprice();
-		this.taxunitprice = puDetail.getTaxUnitPrice();
+		this.taxUnitprice = puDetail.getTaxUnitPrice();
 		this.qty = puDetail.getNumber();
 		this.taxes = puDetail.getTaxes();
 		this.price = puDetail.getPrice();
@@ -614,7 +615,7 @@ public class InvoiceDetail {
 		this(puDetail);
 		this.qty = qty;
 		this.taxes = puDetail.getTaxes();
-		this.price = NumberUtil.mul(qty, this.taxunitprice);
+		this.price = NumberUtil.mul(qty, this.taxUnitprice);
 		this.ensurePrice = this.price;
 		this.transationPrice = this.price;
 
@@ -643,7 +644,7 @@ public class InvoiceDetail {
 		this.img = detail.getImg();
 		this.original = detail.getOriginal();
 		this.unitprice = detail.getUnitprice();
-		this.taxunitprice = detail.getTaxUnitprice();
+		this.taxUnitprice = detail.getTaxUnitprice();
 		Double taxRate = detail.getTaxRate() == null ? 0 : detail.getTaxRate();
 		this.tax = Double.valueOf(taxRate * 100).shortValue();
 		this.taxes = detail.getTaxes();
@@ -670,9 +671,9 @@ public class InvoiceDetail {
 	 */
 	public InvoiceDetail(OrderDetail detail, String detailId, Double qty) {
 		this(detail, detailId);
-		this.taxes = NumberUtil.mul(NumberUtil.sub(this.taxunitprice, this.unitprice), qty);
+		this.taxes = NumberUtil.mul(NumberUtil.sub(this.taxUnitprice, this.unitprice), qty);
 		this.qty = qty;
-		this.price = NumberUtil.mul(qty, this.taxunitprice);
+		this.price = NumberUtil.mul(qty, this.taxUnitprice);
 		this.ensurePrice = this.price;
 	}
 
@@ -713,11 +714,50 @@ public class InvoiceDetail {
 		this.transationPrice = fPurchaseDetail.getTransationPrice();
 		this.taxes = fPurchaseDetail.getTaxes();
 		this.tax = fPurchaseDetail.getTax();
-		this.taxunitprice = fPurchaseDetail.getTaxUnitPrice();
+		this.taxUnitprice = fPurchaseDetail.getTaxUnitPrice();
 		this.b2cMaxDelivery = fPurchaseDetail.getB2cMaxDelivery();
 		this.b2cMinDelivery = fPurchaseDetail.getB2cMinDelivery();
 		this.spec = fPurchaseDetail.getSpec();
 		this.status = fPurchaseDetail.getStatus();
 	}
 
+
+	/**
+	 *
+	 * @param fOrderDetail
+	 */
+	public InvoiceDetail(InvoiceFOrderDetail fOrderDetail) {
+		this.detailid = fOrderDetail.getDetailid();
+		this.detno = fOrderDetail.getDetno();
+		this.orderDetailId = fOrderDetail.getOrdetailid();
+		this.purchaseDetailId = fOrderDetail.getProductid();
+		this.batchCode = fOrderDetail.getBatchCode();
+		this.remark = fOrderDetail.getRemark();
+		this.goodsnumber = fOrderDetail.getGoodsnumber();
+		this.productid = fOrderDetail.getProductid();
+		this.original = fOrderDetail.getOriginal();
+		this.uuid = fOrderDetail.getUuid();
+		this.cmpCode = fOrderDetail.getCmpCode();
+		this.kiName = fOrderDetail.getKiName();
+		this.kindUuid = fOrderDetail.getKindUuid();
+		this.brandNameCn = fOrderDetail.getBrandNameCn();
+		this.brandNameEn = fOrderDetail.getBrName();
+		this.brandid = fOrderDetail.getBrandid();
+		this.branduuid = fOrderDetail.getBranduuid();
+		this.img = fOrderDetail.getImg();
+		this.unitprice = fOrderDetail.getUnitprice();
+		this.qty = fOrderDetail.getNumber();
+		this.currency = fOrderDetail.getCurrency();
+		this.price = fOrderDetail.getPrice();
+		this.ensurePrice = fOrderDetail.getEnsurePrice();
+		this.transationPrice = fOrderDetail.getTransationPrice();
+		this.taxes = fOrderDetail.getTaxes();
+		this.tax = fOrderDetail.getTax();
+		this.taxUnitprice = fOrderDetail.getTaxunitprice();
+		this.b2cMaxDelivery = fOrderDetail.getB2cMaxDelivery();
+		this.b2cMinDelivery = fOrderDetail.getB2cMinDelivery();
+		this.spec = fOrderDetail.getSpec();
+		this.status = fOrderDetail.getStatus();
+	}
+
 }

+ 15 - 0
src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFOrder.java

@@ -208,6 +208,12 @@ public class InvoiceFOrder extends Document implements Serializable {
 	@Column(name = "in_uaspurcid")
 	private Long uasPurcid;
 
+	/**
+	 * 下载状态
+	 */
+	@Column(name = "in_down_status")
+	private String downStatus;
+
 	/**
 	 * 发货单明细
 	 */
@@ -481,4 +487,13 @@ public class InvoiceFOrder extends Document implements Serializable {
 	public void setFare(Double fare) {
 		this.fare = fare;
 	}
+
+	public String getDownStatus() {
+		return downStatus;
+	}
+
+	public InvoiceFOrder setDownStatus(String downStatus) {
+		this.downStatus = downStatus;
+		return this;
+	}
 }

+ 15 - 0
src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFPurchase.java

@@ -249,6 +249,12 @@ public class InvoiceFPurchase extends Document implements Serializable {
 	@Column(name = "in_orid")
 	private String orid;
 
+	/**
+	 * 下载状态
+	 */
+	@Column(name = "in_down_status")
+	private String downStatus;
+
 	@Transient
 	private Boolean isSelfSeller;
 
@@ -582,6 +588,15 @@ public class InvoiceFPurchase extends Document implements Serializable {
 		this.jsonTakeSelf = jsonTakeSelf;
 	}
 
+	public String getDownStatus() {
+		return downStatus;
+	}
+
+	public InvoiceFPurchase setDownStatus(String downStatus) {
+		this.downStatus = downStatus;
+		return this;
+	}
+
 	/**
 	 * @Tip 对象初始化时必须给历史记录赋值
 	 */

+ 3 - 0
src/main/java/com/uas/platform/b2c/logistics/service/InvoiceService.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.logistics.service;
 
+import com.uas.platform.b2c.logistics.model.Invoice;
 import com.uas.platform.b2c.trade.support.ResultMap;
 
 /**
@@ -9,4 +10,6 @@ public interface InvoiceService {
 
 
     ResultMap convert();
+
+    Invoice createInvoiceFOrder(Long orid);
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFOrderServiceImpl.java

@@ -209,7 +209,7 @@ public class InvoiceFOrderServiceImpl implements InvoiceFOrderService {
 
 		}
 		return "success";
-	};
+	}
 
 	@Override
 	public InvoiceFOrder createInvoiceFOrder(Long orid) {

+ 92 - 5
src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceServiceImpl.java

@@ -1,17 +1,27 @@
 package com.uas.platform.b2c.logistics.service.impl;
 
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.logistics.dao.InvoiceDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFOrderDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFPurchaseDao;
-import com.uas.platform.b2c.logistics.model.Invoice;
-import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
+import com.uas.platform.b2c.logistics.model.*;
 import com.uas.platform.b2c.logistics.service.InvoiceService;
+import com.uas.platform.b2c.logistics.util.ModelConvertUtil;
+import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import com.uas.platform.b2c.trade.order.dao.OrderDao;
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.OrderDetail;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.core.model.EncodingRulesConstant;
+import com.uas.platform.core.model.Status;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 @Service
 public class InvoiceServiceImpl implements InvoiceService {
@@ -22,11 +32,17 @@ public class InvoiceServiceImpl implements InvoiceService {
 
     private final InvoiceFOrderDao invoiceFOrderDao;
 
+    private final OrderDao orderDao;
+
+    private final CreateNumberService createNumberService;
+
     @Autowired
-    public InvoiceServiceImpl(InvoiceDao invoiceDao, InvoiceFPurchaseDao invoiceFPurchaseDao, InvoiceFOrderDao invoiceFOrderDao) {
+    public InvoiceServiceImpl(InvoiceDao invoiceDao, InvoiceFPurchaseDao invoiceFPurchaseDao, InvoiceFOrderDao invoiceFOrderDao, OrderDao orderDao, CreateNumberService createNumberService) {
         this.invoiceDao = invoiceDao;
         this.invoiceFPurchaseDao = invoiceFPurchaseDao;
         this.invoiceFOrderDao = invoiceFOrderDao;
+        this.orderDao = orderDao;
+        this.createNumberService = createNumberService;
     }
 
     @Override
@@ -35,8 +51,79 @@ public class InvoiceServiceImpl implements InvoiceService {
         List<Invoice> invoices = new ArrayList<>();
         Invoice invoice = null;
         for (InvoiceFPurchase fPurchase : invoiceFPurchases) {
-            invoice = new Invoice(fPurchase);
+            fPurchase.setDownStatus("已下载");
+            invoice = ModelConvertUtil.invoiceFPurchaseConvertInvoice(fPurchase);
+            invoices.add(invoice);
+        }
+        invoiceFPurchaseDao.save(invoiceFPurchases);
+        List<InvoiceFOrder> invoiceFOrders = invoiceFOrderDao.findAll();
+        for (InvoiceFOrder invoiceFOrder : invoiceFOrders) {
+            invoiceFOrder.setDownStatus("已下载");
+            invoice = ModelConvertUtil.invoiceFOrderConvertInvoice(invoiceFOrder);
+            invoices.add(invoice);
+        }
+        invoiceFOrderDao.save(invoiceFOrders);
+        List<Invoice> invoices1 = invoiceDao.save(invoices);
+        return ResultMap.success(invoices1.size());
+    }
+
+
+
+    @Override
+    public Invoice createInvoiceFOrder(Long orid) {
+        Order order = orderDao.findOne(orid);
+        if (order.getStatus() != Status.SHIPPED.value()) {
+            throw new IllegalAccessError("订单不为已出货状态,不能为此订单转出货单");
+        }
+        Invoice invoice = new Invoice(order);
+        String invoiceid = EncodingRulesConstant.INVOICE_FROMORDER.replace("_TIMESTAP_NUMBER",
+                createNumberService.getTimeNumber("trade$invoice_fmor", 8));
+        invoice.setInvoiceid(invoiceid);
+        Set<InvoiceDetail> iDetails = new HashSet<>();
+        Double taxes = 0.0d;
+        Double prices = 0.0d;
+        Double ensurePrices = 0.0d;
+        // 给明细赋值
+        for (OrderDetail orD : order.getOrderDetails()) {
+            if (!Status.SHIPPED.equals(orD.getStatus().intValue())) {
+                continue;
+            }
+            InvoiceFOrderDetail inForD = orD.convertInvoiceFOrderDetail(createNumberService);
+            inForD.setInvoiceFOrder(inFor);
+            taxes = NumberUtil.add(taxes, inForD.getTaxes());
+            prices = NumberUtil.add(prices,inForD.getPrice());
+            ensurePrices = NumberUtil.add(ensurePrices,inForD.getEnsurePrice());
+            iDetails.add(inForD);
+        }
+
+        Long uu = SystemSession.getUser().getUserUU();
+        // 如果是现货,则需要平台手动发货(需要录用快递信息)
+        inFor.setTobeshipped(uu);
+        taxes = NumberUtil.pricesScaleTwo(taxes);
+        inFor.setTaxes(taxes);
+        ensurePrices = NumberUtil.pricesScaleTwo(ensurePrices);
+        inFor.setEnsurePrice(ensurePrices);
+        prices = NumberUtil.pricesScaleTwo(prices);
+        inFor.setPrice(prices);
+        inFor.setInvoiceFOrderDetails(iDetails);
+
+        // 手动将平台状态改成202(要考虑一点,UAS和平台做的单据是否都可以这样做)
+        inFor.setSendstatus(Status.NOT_UPLOAD.value());
+
+        inFor = inForDao.save(inFor);
+        /**
+         * 改写订单单关联属性及状态
+         *
+         * @TODO 这里是用OneToOne还是什么有待考究
+         */
+        // 判断关联的出货单是否为待收货状态
+        if (inFor.getStatus().equals(Status.INBOUND.value())) {
+            orderService.setInBound(order.getId(), inFor.getInvoiceid());
+        } else {
+            order.setStatusSending(uu);
+            order.addInInds(inFor.getInvoiceid());
+            orderDao.save(order);
         }
-        return null;
+        return inFor;
     }
 }

+ 17 - 5
src/main/java/com/uas/platform/b2c/logistics/util/ModelConvertUtil.java

@@ -1,9 +1,6 @@
 package com.uas.platform.b2c.logistics.util;
 
-import com.uas.platform.b2c.logistics.model.Invoice;
-import com.uas.platform.b2c.logistics.model.InvoiceDetail;
-import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
-import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
+import com.uas.platform.b2c.logistics.model.*;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -15,7 +12,7 @@ import java.util.Set;
  */
 public class ModelConvertUtil {
 
-    public Invoice invoiceFPurchaseConvertInvoice(InvoiceFPurchase fPurchase) {
+    public static Invoice invoiceFPurchaseConvertInvoice(InvoiceFPurchase fPurchase) {
         Invoice invoice =  new Invoice(fPurchase);
         Set<InvoiceDetail> set = new HashSet<>();
         InvoiceDetail detail = null;
@@ -27,4 +24,19 @@ public class ModelConvertUtil {
         invoice.setInvoiceDetails(set);
         return invoice;
     }
+
+
+    public static Invoice invoiceFOrderConvertInvoice(InvoiceFOrder iOrder) {
+        Invoice invoice =  new Invoice(iOrder);
+        Set<InvoiceDetail> set = new HashSet<>();
+        InvoiceDetail detail = null;
+        Set<InvoiceFOrderDetail> invoiceFOrderDetails = iOrder.getInvoiceFOrderDetails();
+        for (InvoiceFOrderDetail fOrderDetail : invoiceFOrderDetails) {
+            detail = new InvoiceDetail(fOrderDetail);
+            detail.setInvoice(invoice);
+            set.add(detail);
+        }
+        invoice.setInvoiceDetails(set);
+        return invoice;
+    }
 }

+ 19 - 16
src/main/java/com/uas/platform/b2c/trade/order/model/Order.java

@@ -7,7 +7,7 @@ import com.uas.platform.b2c.core.constant.Status;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.StringUtilB2C;
 import com.uas.platform.b2c.fa.payment.model.Installment;
-import com.uas.platform.b2c.logistics.model.InvoiceFOrder;
+import com.uas.platform.b2c.logistics.model.Invoice;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.EncodingRulesConstant;
@@ -2326,25 +2326,28 @@ public class Order extends Document implements Serializable {
 	 * @param createNumberService the create number service
 	 * @return the invoice f order
 	 */
-	public InvoiceFOrder convertInvoiceFOrder(CreateNumberService createNumberService) {
+	public Invoice convertInvoiceFOrder(CreateNumberService createNumberService) {
 		String invoiceid = EncodingRulesConstant.INVOICE_FROMORDER.replace("_TIMESTAP_NUMBER",
 				createNumberService.getTimeNumber("trade$invoice_fmor", 8));
-		Date date = new Date();
-		InvoiceFOrder inFor = new InvoiceFOrder();
-		inFor.setInvoiceid(invoiceid);
+		Invoice invoice = new Invoice();
+		invoice.setInvoiceid(invoiceid);
 		// 给属性赋值
-		inFor.setCreattime(date);
-		inFor.setBuyeruu(this.getBuyeruu());
-		inFor.setBuyerenuu(this.getBuyerenuu());
-		inFor.setBuyername(this.buyername);
+		invoice.setCreatetime(new Date());
+		invoice.setBuyeruu(this.buyeruu);
+		invoice.setBuyerenuu(this.buyerenuu);
+		invoice.setBuyername(this.buyername);
+		invoice.setBuyerentername(this.buyerentername);
+		invoice.setSellerenuu(this.sellerenuu);
+		invoice.setSellername(this.sellername);
 		// TODO 这里需要考虑确认总价的(默认和总价相等 打折等其他逻辑待考虑)
-		inFor.setJsonSpAddress(this.getJsonAddress());
-		inFor.setCurrency(this.currency);
-		inFor.setOrid(this.getId());
-		inFor.setSourceid(this.orderid);
-		inFor.setProofingid(this.proofingid);
-		inFor.setUasPurcid(this.uasPurcid);
-		return inFor;
+		invoice.setJsonSpAddress(this.getJsonAddress());
+		invoice.setCurrency(this.currency);
+		invoice.setOrderId(this.id);
+		invoice.setOrid(this.orderid);
+		invoice.setSourceid(this.orderid);
+		invoice.setProofingid(this.proofingid);
+		invoice.setUasPurcid(this.uasPurcid);
+		return invoice;
 	}
 
 	/**