فهرست منبع

处理买家确认收货的问题

yujia 7 سال پیش
والد
کامیت
7f4ba0eb72
20فایلهای تغییر یافته به همراه556 افزوده شده و 256 حذف شده
  1. 2 2
      src/main/java/com/uas/platform/b2c/external/erp/order/api/OrderController.java
  2. 1 1
      src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/B2cOrderServiceImpl.java
  3. 30 0
      src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFOrderDetail.java
  4. 32 9
      src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFPurchaseDetail.java
  5. 15 0
      src/main/java/com/uas/platform/b2c/logistics/service/InvoiceFOrderService.java
  6. 16 9
      src/main/java/com/uas/platform/b2c/logistics/service/InvoiceFPurchaseService.java
  7. 75 4
      src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFOrderServiceImpl.java
  8. 56 10
      src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFPurchaseServiceImpl.java
  9. 38 6
      src/main/java/com/uas/platform/b2c/prod/commodity/model/InOutboundDetail.java
  10. 10 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/CommodityInOutboundService.java
  11. 16 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/InOutboundDetailService.java
  12. 27 1
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/CommodityInOutboundServiceImpl.java
  13. 47 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/InOutboundDetailServiceImpl.java
  14. 9 0
      src/main/java/com/uas/platform/b2c/trade/deprecated/model/OrderRelationInfo.java
  15. 7 9
      src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java
  16. 10 35
      src/main/java/com/uas/platform/b2c/trade/order/model/Order.java
  17. 11 20
      src/main/java/com/uas/platform/b2c/trade/order/model/Purchase.java
  18. 5 3
      src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java
  19. 148 146
      src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java
  20. 1 1
      src/main/java/com/uas/platform/b2c/trade/order/task/OrderTask.java

+ 2 - 2
src/main/java/com/uas/platform/b2c/external/erp/order/api/OrderController.java

@@ -145,8 +145,8 @@ public class OrderController {
      * @return order simple info
      */
     @RequestMapping(value = "/simpleinfo/ones/{id}", method = RequestMethod.PUT, params = "_status=ensureaccept")
-	public OrderSimpleInfo ensureAccept(@PathVariable Long id) {
-		return orderService.ensureOrderAccept(id.toString());
+	public ResultMap ensureAccept(@PathVariable Long id) {
+		return orderService.ensureOrderAccept(id, "");
 	}
 
     /**

+ 1 - 1
src/main/java/com/uas/platform/b2c/external/erp/order/service/impl/B2cOrderServiceImpl.java

@@ -179,7 +179,7 @@ public class B2cOrderServiceImpl implements B2cOrderService {
     public String ensury(String orderid) {
         Order order = orderDao.findByOrderid(orderid);
         if (order != null) {
-            orderService.ensureOrderAccept(order.getId().toString());
+            orderService.ensureOrderAccept(order.getId(), "");
             return SUCCESS;
         } else {
             throw new IllegalOperatorException("警告!订单编号有误");

+ 30 - 0
src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFOrderDetail.java

@@ -203,6 +203,18 @@ public class InvoiceFOrderDetail {
 	@Column(name = "go_b2cmindelivery")
 	private Short b2cMinDelivery;
 
+	/**
+	 * 物料id
+	 */
+	@Column(name = "detail_productid")
+	private Long productid;
+
+	/**
+	 * 规格信息
+	 */
+	@Column(name = "detail_spec", length = 4000)
+	private String spec;
+
 	public InvoiceFOrderDetail() {
 	}
 
@@ -502,4 +514,22 @@ public class InvoiceFOrderDetail {
         this.branduuid = branduuid;
         return this;
     }
+
+	public Long getProductid() {
+		return productid;
+	}
+
+	public InvoiceFOrderDetail setProductid(Long productid) {
+		this.productid = productid;
+		return this;
+	}
+
+	public String getSpec() {
+		return spec;
+	}
+
+	public InvoiceFOrderDetail setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
 }

+ 32 - 9
src/main/java/com/uas/platform/b2c/logistics/model/InvoiceFPurchaseDetail.java

@@ -2,20 +2,12 @@ package com.uas.platform.b2c.logistics.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.uas.platform.b2c.core.utils.NumberUtil;
-import com.uas.platform.b2c.prod.store.model.QualificationType;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 import com.uas.platform.core.exception.IllegalStatusException;
 import com.uas.platform.core.persistence.StatusColumn;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 /**
  * 发货单(来源于采购单的)明细
@@ -234,6 +226,18 @@ public class InvoiceFPurchaseDetail {
 	@Column(name = "go_b2cmindelivery")
 	private Short b2cMinDelivery;
 
+	/**
+	 * 物料id
+	 */
+	@Column(name = "detail_productid")
+	private Long productid;
+
+	/**
+	 * 规格信息
+	 */
+	@Column(name = "detail_spec", length = 4000)
+	private String spec;
+
 	public InvoiceFPurchaseDetail() {
 	}
 
@@ -309,6 +313,7 @@ public class InvoiceFPurchaseDetail {
 		this.b2cMaxDelivery = puDetail.getB2cMaxDelivery();
 		this.remark = puDetail.getRemark();
 		this.goodsnumber = puDetail.getGoodsnumber();
+		this.spec = puDetail.getSpec();
 	}
 
 	public Long getId() {
@@ -589,4 +594,22 @@ public class InvoiceFPurchaseDetail {
         this.branduuid = branduuid;
         return this;
     }
+
+	public Long getProductid() {
+		return productid;
+	}
+
+	public InvoiceFPurchaseDetail setProductid(Long productid) {
+		this.productid = productid;
+		return this;
+	}
+
+	public String getSpec() {
+		return spec;
+	}
+
+	public InvoiceFPurchaseDetail setSpec(String spec) {
+		this.spec = spec;
+		return this;
+	}
 }

+ 15 - 0
src/main/java/com/uas/platform/b2c/logistics/service/InvoiceFOrderService.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2c.logistics.service;
 
 import com.uas.platform.b2c.logistics.model.InvoiceFOrder;
+import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
 import org.springframework.data.domain.Page;
@@ -122,6 +123,13 @@ public interface InvoiceFOrderService {
 	 */
 	ResultMap orderShip(String json, Long id);
 
+	/**
+	 * 对发货签收
+	 * @param invoiceid
+	 * @return
+	 */
+	ResultMap signReceive(String invoiceid, Order order);
+
 	/**
 	 * 根据出货单号查看出货单详情
 	 *
@@ -139,4 +147,11 @@ public interface InvoiceFOrderService {
 	 * @return page 返回InvoiceFOrder的page对象
 	 */
 	Page<InvoiceFOrder> findAdminInFor(PageInfo pageInfo, String keyword, String status);
+
+	/**
+	 * 根据单号,获取发货信息
+	 * @param invoiceid 发货单
+	 * @return  InvoiceFOrder
+	 */
+	InvoiceFOrder findByInvoiceid(String invoiceid);
 }

+ 16 - 9
src/main/java/com/uas/platform/b2c/logistics/service/InvoiceFPurchaseService.java

@@ -1,18 +1,17 @@
 package com.uas.platform.b2c.logistics.service;
 
-import java.util.List;
-import java.util.Map;
-
-import javax.management.OperationsException;
-
-import com.uas.platform.b2c.trade.order.model.Purchase;
-import com.uas.platform.b2c.trade.support.ResultMap;
-import org.springframework.data.domain.Page;
-
 import com.alibaba.fastjson.JSONObject;
 import com.uas.api.b2c_erp.seller.model.Invoice;
 import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
+import com.uas.platform.b2c.trade.order.model.Order;
+import com.uas.platform.b2c.trade.order.model.Purchase;
+import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+
+import javax.management.OperationsException;
+import java.util.List;
+import java.util.Map;
 
 /**
  * The interface InvoiceFPurchase service.
@@ -134,6 +133,14 @@ public interface InvoiceFPurchaseService {
 	 */
 	public Page<InvoiceFPurchase> findPageBusiness(PageInfo info, String keyword, String status, boolean isProof);
 
+	/**
+	 * 对发货签收
+	 *
+	 * @param invoiceid
+	 * @return
+	 */
+	ResultMap signReceive(String invoiceid, Order order);
+
 	/**
 	 * 平台查看卖家出货单
 	 *

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

@@ -2,6 +2,10 @@ package com.uas.platform.b2c.logistics.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.b2c.common.account.model.TradeLog;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
+import com.uas.platform.b2c.common.account.service.EnterpriseService;
+import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.TradeBufferedLogger;
 import com.uas.platform.b2c.core.utils.DoubleArith;
@@ -15,6 +19,10 @@ import com.uas.platform.b2c.logistics.service.InvoiceFOrderDetailService;
 import com.uas.platform.b2c.logistics.service.InvoiceFOrderService;
 import com.uas.platform.b2c.logistics.service.LogisticsPortService;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
+import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
+import com.uas.platform.b2c.prod.commodity.service.CommodityInOutboundService;
+import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
+import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
 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;
@@ -74,6 +82,18 @@ public class InvoiceFOrderServiceImpl implements InvoiceFOrderService {
 	@Autowired
 	private OrderDao orderDao;
 
+	@Autowired
+	private SysConf sysConf;
+
+	@Autowired
+	private EnterpriseService enterpriseService;
+
+	@Autowired
+	private InOutboundDetailService inOutboundDetailService;
+
+	@Autowired
+	private CommodityInOutboundService commodityInOutboundService;
+
 	@Override
 	public InvoiceFOrder save(InvoiceFOrder inFor) {
 		Set<InvoiceFOrderDetail> inForDs = inFor.getInvoiceFOrderDetails();
@@ -236,7 +256,7 @@ public class InvoiceFOrderServiceImpl implements InvoiceFOrderService {
 			orderService.setInBound(order.getId(), inFor.getInvoiceid());
 		} else {
 			order.setStatusSending(uu);
-			order.setInid(inFor.getInvoiceid());
+			order.addInInds(inFor.getInvoiceid());
 			orderDao.save(order);
 		}
 		return inFor;
@@ -371,7 +391,7 @@ public class InvoiceFOrderServiceImpl implements InvoiceFOrderService {
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		order.setDeliverTime(sdf.format(new Date()));
 		order.setJsonSdAddress(addr);
-		order.addInInds(inF.getId());
+		order.addInInds(inF.getInvoiceid());
 		Set<OrderDetail> orderDetails = order.getOrderDetails();
 		if (NumberUtil.compare(order.getQty(), order.getShipQty()) < 1) {
 			for (OrderDetail orderDetail : orderDetails) {
@@ -385,6 +405,43 @@ public class InvoiceFOrderServiceImpl implements InvoiceFOrderService {
 		return ResultMap.success(inF);
 	}
 
+	/**
+	 * 对发货签收
+	 *
+	 * @param invoiceid
+	 * @return
+	 */
+	@Override
+	public ResultMap signReceive(String invoiceid, Order order) {
+		if (StringUtils.isEmpty(invoiceid)) {
+			return ResultMap.success(null);
+		} else {
+			// 2 出货单设置成已收货
+			InvoiceFOrder invoiceFOrder = inForDao.findByInvoiceid(invoiceid);
+			if (invoiceFOrder == null) {
+				throw new IllegalOperatorException("没有传入有效的订单信息");
+			}
+			User user = SystemSession.getUser();
+			Long useruu = null;
+			if (user == null) {
+				useruu = user.getUserUU();
+			} else {
+				UserBaseInfo enterpriseAdminInfo = enterpriseService.getEnterpriseAdminInfo(sysConf.getEnUU());
+				useruu = enterpriseAdminInfo.getUserUU();
+			}
+			invoiceFOrder.setStatusReceived(useruu);
+			Set<InvoiceFOrderDetail> invoiceFOrderDetails = invoiceFOrder.getInvoiceFOrderDetails();
+			for (InvoiceFOrderDetail fOrderDetail : invoiceFOrderDetails) {
+				fOrderDetail.setStatus(Status.RECEIVED.value());
+			}
+			// 采购入库
+			Set<InOutboundDetail> outboundDetails = inOutboundDetailService.produceInOutboundDetailByInvoiceFOrderDetail(invoiceFOrderDetails);
+			commodityInOutboundService.saveCommodityInOutbound(outboundDetails, InOutBoundType.PURCHASE_INBOUND, order);
+			inForDao.save(invoiceFOrder);
+
+			return ResultMap.success(null);
+		}
+	}
 
 	/**
 	 * 根据Order生成平台出货单,并进行发货动作
@@ -466,7 +523,7 @@ public class InvoiceFOrderServiceImpl implements InvoiceFOrderService {
 		if (NumberUtil.compare(order.getQty(), order.getShipQty()) < 1) {
 			order.setStatusSending(userUU);
 		}
-		order.setInid(invoice.getInvoiceid());
+		order.addInInds(invoice.getInvoiceid());
 		return ResultMap.success(invoice);
 	}
 
@@ -554,7 +611,7 @@ public class InvoiceFOrderServiceImpl implements InvoiceFOrderService {
 				detail.setStatusSending(userUU);
 			}
 		}
-		order.setInid(invoice.getInvoiceid());
+		order.addInInds(invoice.getInvoiceid());
 		orderDao.save(order);
 
 		// 记录平台转出货单日志
@@ -608,4 +665,18 @@ public class InvoiceFOrderServiceImpl implements InvoiceFOrderService {
 
 	}
 
+	/**
+	 * 根据单号,获取发货信息
+	 *
+	 * @param invoiceid 发货单
+	 * @return InvoiceFOrder
+	 */
+	@Override
+	public InvoiceFOrder findByInvoiceid(String invoiceid) {
+		if (StringUtils.isEmpty(invoiceid)) {
+			return null;
+		} else {
+			return inForDao.findByInvoiceid(invoiceid);
+		}
+	}
 }

+ 56 - 10
src/main/java/com/uas/platform/b2c/logistics/service/impl/InvoiceFPurchaseServiceImpl.java

@@ -5,6 +5,9 @@ import com.uas.api.b2c_erp.seller.model.Invoice;
 import com.uas.platform.b2c.common.account.dao.EnterpriseDao;
 import com.uas.platform.b2c.common.account.model.Enterprise;
 import com.uas.platform.b2c.common.account.model.TradeLog;
+import com.uas.platform.b2c.common.account.model.User;
+import com.uas.platform.b2c.common.account.model.UserBaseInfo;
+import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.core.config.SysConf;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.TradeBufferedLogger;
@@ -23,6 +26,7 @@ import com.uas.platform.b2c.prod.commodity.model.CommodityInOutbound;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.service.CommodityInOutboundService;
+import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
@@ -89,10 +93,16 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 
 	private final OrderDao orderDao;
 
+	private final EnterpriseService enterpriseService;
+
+
+	@Autowired
+	private InOutboundDetailService inOutboundDetailService;
+
 	@Autowired
 	public InvoiceFPurchaseServiceImpl(InvoiceFPurchaseDao inFpuDao, CreateNumberService createNumberService,
 									   EnterpriseDao enterpriseDao, PurchaseDao purchaseDao, LogisticsDao logisticsDao,
-									   LogisticsCompanyCodeDao logisticsCompanyCodeDao, OrderDao orderDao, SysConf sysConf, LogisticsOldService logisticsService, ProductService productService, CommodityInOutboundService commodityInOutboundService) {
+									   LogisticsCompanyCodeDao logisticsCompanyCodeDao, OrderDao orderDao, SysConf sysConf, LogisticsOldService logisticsService, ProductService productService, CommodityInOutboundService commodityInOutboundService, EnterpriseService enterpriseService) {
 		this.inFpuDao = inFpuDao;
 		this.createNumberService = createNumberService;
 		this.enterpriseDao = enterpriseDao;
@@ -104,6 +114,7 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 		this.logisticsService = logisticsService;
 		this.productService = productService;
 		this.commodityInOutboundService = commodityInOutboundService;
+		this.enterpriseService = enterpriseService;
 	}
 
 	@Override
@@ -200,7 +211,6 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 		logger.log(inFpu, TradeLog.VoucherOperation.SELLER_PREPARE_SHIP, changeLog);
 
 		// 设置采购单关联属性
-		purchase.setInid(inFpu.getInvoiceid());
 		purchaseDao.save(purchase);
 
 		return inFpu;
@@ -286,6 +296,7 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 			String detailId = createNumberService.generateVoucherId(EncodingRulesConstant.INVOICE_DETAIL_FROMPURCHASE,
 					"trade$invoice_fmpu_dt", 9);
 			inFpuD.setDetailid(detailId);
+			inFpuD.setProductid(product.getId());
 			inFpuD.setDetno(detno++);
 			inFpuD.setInvoiceFPurchase(inFpu);
 			inFpuD.setStatus(Status.TOBESHIPPED.value());
@@ -516,6 +527,45 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 		}, pageInfo);
 	}
 
+
+	/**
+	 * 对发货签收
+	 *
+	 * @param invoiceid
+	 * @return
+	 */
+	@Override
+	public ResultMap signReceive(String invoiceid, Order order) {
+		if (StringUtils.isEmpty(invoiceid)) {
+			return ResultMap.success(null);
+		} else {
+			// 2 出货单设置成已收货
+			InvoiceFPurchase fPurchase = inFpuDao.findByInvoiceid(invoiceid);
+			if (fPurchase == null) {
+				throw new IllegalOperatorException("没有传入有效的订单信息");
+			}
+			User user = SystemSession.getUser();
+			Long useruu = null;
+			if (user == null) {
+				useruu = user.getUserUU();
+			} else {
+				UserBaseInfo enterpriseAdminInfo = enterpriseService.getEnterpriseAdminInfo(sysConf.getEnUU());
+				useruu = enterpriseAdminInfo.getUserUU();
+			}
+			fPurchase.setStatusReceived(useruu);
+			Set<InvoiceFPurchaseDetail> purchaseDetails = fPurchase.getInvoiceFPurchaseDetails();
+			for (InvoiceFPurchaseDetail detail : purchaseDetails) {
+				detail.setStatus(Status.RECEIVED.value());
+			}
+
+			// 采购入库
+			Set<InOutboundDetail> outboundDetails = inOutboundDetailService.produceInOutboundDetailByInvoiceFPurchaseDetail(purchaseDetails);
+			commodityInOutboundService.saveCommodityInOutbound(outboundDetails, InOutBoundType.PURCHASE_INBOUND, order);
+			inFpuDao.save(fPurchase);
+			return ResultMap.success(null);
+		}
+	}
+
 	@Override
 	public InvoiceFPurchase findById(Long id) {
 		return inFpuDao.getOne(id);
@@ -649,13 +699,7 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 		Order order = null;
 		if(!purchase.getStoreid().equals(sysConf.getStoreid())) {
 			order = orderDao.findByOrderid(purchase.getOrderid());
-			if(order == null) {
-				return new ResultMap(CodeType.NOT_PERMIT, "您订单的信息有误,请重新提交");
-			}
-			if (inFpu.getLogistics() != null){
-				order.setLgtId(inFpu.getLogistics().getId());
-			}
-			orderDao.save(order);
+			order.addInInds(inFpu.getInvoiceid());
 		}
 
 		if(NumberUtil.compare(purchase.getQty(), purchase.getShipQty()) < 1) {
@@ -675,7 +719,9 @@ public class InvoiceFPurchaseServiceImpl implements InvoiceFPurchaseService {
 			}
 			purchase.setStatusInBound(userUU);
 		}
-		orderDao.save(order);
+		if (order != null) {
+			orderDao.save(order);
+		}
 		purchaseDao.save(purchase);
 		return ResultMap.success("ok");
 	}

+ 38 - 6
src/main/java/com/uas/platform/b2c/prod/commodity/model/InOutboundDetail.java

@@ -2,6 +2,8 @@ package com.uas.platform.b2c.prod.commodity.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.uas.platform.b2c.logistics.model.InvoiceFOrderDetail;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
 import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 
 import javax.persistence.*;
@@ -227,7 +229,37 @@ public class InOutboundDetail implements Serializable {
     public InOutboundDetail() {
     }
 
-    public InOutboundDetail(Product product) {
+    public InOutboundDetail(InvoiceFOrderDetail detail) {
+        this.brandCn = detail.getBrandNameCn();
+        this.brandEn = detail.getBrName();
+        this.brandId = detail.getBrandid();
+        this.branduuid = detail.getBranduuid();
+        this.kindId = detail.getKindUuid();
+        this.kindName = detail.getKiName();
+        this.cmpCode = detail.getCmpCode();
+        this.cmpuuid = detail.getUuid();
+        this.spec = detail.getSpec();
+        this.qty = detail.getNumber();
+        this.price = detail.getPrice();
+        this.productId = detail.getProductid();
+    }
+
+    public InOutboundDetail(InvoiceFPurchaseDetail detail) {
+        this.brandCn = detail.getBrandNameCn();
+        this.brandEn = detail.getBrName();
+        this.brandId = detail.getBrandid();
+        this.branduuid = detail.getBranduuid();
+        this.kindId = detail.getKindUuid();
+        this.kindName = detail.getKiName();
+        this.cmpCode = detail.getCmpCode();
+        this.cmpuuid = detail.getUuid();
+        this.spec = detail.getSpec();
+        this.qty = detail.getNumber();
+        this.price = detail.getPrice();
+        this.productId = detail.getProductid();
+    }
+
+    public InOutboundDetail(Product product, PurchaseDetail detail, Double qty) {
         this.brandCn = product.getPbrand();
         this.brandEn = product.getPbranden();
         this.brandId = product.getPbrandid();
@@ -237,12 +269,12 @@ public class InOutboundDetail implements Serializable {
         this.cmpCode = product.getPcmpcode();
         this.cmpuuid = product.getCmpUuId();
         this.spec = product.getSpec();
-        this.qty = product.getErpReserve();
-        this.price = product.getPrice();
+        this.qty = qty;
+        this.price = detail.getTaxUnitPrice();
         this.productId = product.getId();
     }
 
-    public InOutboundDetail(Product product, PurchaseDetail detail, Double qty) {
+    public InOutboundDetail(Product product) {
         this.brandCn = product.getPbrand();
         this.brandEn = product.getPbranden();
         this.brandId = product.getPbrandid();
@@ -252,8 +284,8 @@ public class InOutboundDetail implements Serializable {
         this.cmpCode = product.getPcmpcode();
         this.cmpuuid = product.getCmpUuId();
         this.spec = product.getSpec();
-        this.qty = qty;
-        this.price = detail.getTaxUnitPrice();
+        this.qty = product.getErpReserve();
+        this.price = product.getPrice();
         this.productId = product.getId();
     }
 }

+ 10 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/CommodityInOutboundService.java

@@ -2,6 +2,7 @@ package com.uas.platform.b2c.prod.commodity.service;
 
 import com.uas.platform.b2c.prod.commodity.model.CommodityInOutbound;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
+import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
@@ -39,6 +40,15 @@ public interface CommodityInOutboundService {
     CommodityInOutbound produceCommodityInOutbound(Set<InOutboundDetail> details, String type);
 
 
+    /**
+     * 根据出入库明细生成出入库记录
+     * @param details 明细信息
+     * @param type 出入库类型
+     * @return
+     */
+    CommodityInOutbound saveCommodityInOutbound(Set<InOutboundDetail> details, String type, Order order);
+
+
     /**
      * 入库动作,传入入库明细,生成入库信息
      * @param detail 传入的明细

+ 16 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/InOutboundDetailService.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.prod.commodity.service;
 
+import com.uas.platform.b2c.logistics.model.InvoiceFOrderDetail;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 
 import java.util.List;
@@ -16,4 +18,18 @@ public interface InOutboundDetailService {
      * @return
      */
     List<InOutboundDetail> findByProductId(Set<Long> productIds);
+
+    /**
+     * 根据发货单生成入库信息
+     * @param details
+     * @return
+     */
+    Set<InOutboundDetail> produceInOutboundDetailByInvoiceFOrderDetail(Set<InvoiceFOrderDetail> details);
+
+    /**
+     * 根据发货单生成入库信息
+     * @param details
+     * @return
+     */
+    Set<InOutboundDetail> produceInOutboundDetailByInvoiceFPurchaseDetail(Set<InvoiceFPurchaseDetail> details);
 }

+ 27 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/CommodityInOutboundServiceImpl.java

@@ -13,6 +13,7 @@ import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.type.InOutBoundType;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import com.uas.platform.b2c.trade.order.model.Order;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
 import com.uas.platform.core.exception.IllegalOperatorException;
@@ -28,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -113,6 +115,30 @@ public class CommodityInOutboundServiceImpl implements CommodityInOutboundServic
         }
     }
 
+    /**
+     * 根据出入库明细生成出入库记录
+     *
+     * @param details 明细信息
+     * @param type    出入库类型
+     * @param order
+     * @return
+     */
+    @Override
+    public CommodityInOutbound saveCommodityInOutbound(Set<InOutboundDetail> details, String type, Order order) {
+        if (CollectionUtils.isEmpty(details)) {
+            return null;
+        }
+        CommodityInOutbound inOutbound = produceCommodityInOutbound(details, type);
+        inOutbound.setAffiliatedEnuu(order.getBuyerenuu());
+        inOutbound.setAffiliatedEnterprise(order.getBuyerentername());
+        if (StringUtils.isEmpty(inOutbound.getAffiliatedEnterprise())) {
+            inOutbound.setAffiliatedEnterprise(order.getBuyername());
+        }
+        inOutbound.setAssociateOrderid(order.getOrderid());
+        CommodityInOutbound commodityInOutbound = save(inOutbound);
+        return commodityInOutbound;
+    }
+
     /**
      * 入库动作,传入入库明细,生成入库信息
      *
@@ -186,7 +212,7 @@ public class CommodityInOutboundServiceImpl implements CommodityInOutboundServic
                 throw new IllegalOperatorException("没有需要操作的信息");
             }
             if (CollectionUtils.isNotEmpty(set)) {
-                return ResultMap.success("剩余库存为0,不能出库");
+                return new ResultMap(CodeType.NOT_PERMIT, "剩余库存为0,不能出库");
             }
             inOutbound.setInOutboundDetails(set);
             inOutbound.setAffiliatedEnterprise(enName);

+ 47 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/InOutboundDetailServiceImpl.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.prod.commodity.service.impl;
 
+import com.uas.platform.b2c.logistics.model.InvoiceFOrderDetail;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchaseDetail;
 import com.uas.platform.b2c.prod.commodity.model.InOutboundDetail;
 import com.uas.platform.b2c.prod.commodity.dao.InOutboundDetailDao;
 import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
@@ -8,6 +10,7 @@ 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;
 
@@ -40,4 +43,48 @@ public class InOutboundDetailServiceImpl implements InOutboundDetailService {
             return inOutboundDetailDao.findByProductId(productIds);
         }
     }
+
+    /**
+     * 根据发货单生成入库信息
+     *
+     * @param details
+     * @return
+     */
+    @Override
+    public Set<InOutboundDetail> produceInOutboundDetailByInvoiceFOrderDetail(Set<InvoiceFOrderDetail> details) {
+        if (CollectionUtils.isEmpty(details)) {
+            return new HashSet<>();
+        }
+        Set<InOutboundDetail> inOutBoundset = new HashSet<>();
+        InOutboundDetail  detail = null;
+        Short detno = 1;
+        for (InvoiceFOrderDetail invoiceFOrderDetail : details) {
+            detail = new InOutboundDetail(invoiceFOrderDetail);
+            detail.setDetno(detno++);
+            inOutBoundset.add(detail);
+        }
+        return inOutBoundset;
+    }
+
+    /**
+     * 根据发货单生成入库信息
+     *
+     * @param details
+     * @return
+     */
+    @Override
+    public Set<InOutboundDetail> produceInOutboundDetailByInvoiceFPurchaseDetail(Set<InvoiceFPurchaseDetail> details) {
+        if (CollectionUtils.isEmpty(details)) {
+            return new HashSet<>();
+        }
+        Set<InOutboundDetail> inOutBoundset = new HashSet<>();
+        InOutboundDetail  detail = null;
+        Short detno = 1;
+        for (InvoiceFPurchaseDetail invoiceFPurchaseDetail : details) {
+            detail = new InOutboundDetail(invoiceFPurchaseDetail);
+            detail.setDetno(detno++);
+            inOutBoundset.add(detail);
+        }
+        return inOutBoundset;
+    }
 }

+ 9 - 0
src/main/java/com/uas/platform/b2c/trade/deprecated/model/OrderRelationInfo.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.trade.deprecated.model;
 
+import org.springframework.util.StringUtils;
+
 /**
  * 订单关联的信息 
  * @author aof
@@ -70,6 +72,13 @@ public class OrderRelationInfo {
 	public void setB2cLogistic(String b2cLogistic) {
 		this.b2cLogistic = b2cLogistic;
 	}
+
+	public void addB2cLogistic(String b2cLogistic) {
+		if (!StringUtils.isEmpty(b2cLogistic)) {
+			this.b2cLogistic += ",";
+		}
+		this.b2cLogistic += b2cLogistic;
+	}
 	
 	
 }

+ 7 - 9
src/main/java/com/uas/platform/b2c/trade/order/controller/OrderController.java

@@ -239,16 +239,14 @@ public class OrderController {
 	}
 
 	/**
-	 * 客户确认收
-	 *
-	 * @param ids the ids
-	 * @return order simple info
+	 * 客户签收发
+	 * @param id 客户订单主键
+	 * @param invoiceId 对应的发货单 如果发货单信息存在,则只对
+	 * @return
 	 */
-	@RequestMapping(value = "/simpleinfo/ones/{ids}", method = RequestMethod.PUT, params = "_status=ensureaccept")
-	public OrderSimpleInfo ensureAccept(@PathVariable("ids") String ids) {
-		assert logger != null;
-		logger.log("买家订单管理", "买家确认收货", "确认收货单号: " + ids);
-		return orderService.ensureOrderAccept(ids);
+	@RequestMapping(value = "/signReceive", method = RequestMethod.PUT, params = "_status=ensureaccept")
+	public ResultMap ensuerAccept(Long id, String invoiceId) {
+		return orderService.ensureOrderAccept(id, invoiceId);
 	}
 
 	/**

+ 10 - 35
src/main/java/com/uas/platform/b2c/trade/order/model/Order.java

@@ -358,12 +358,6 @@ public class Order extends Document implements Serializable {
 	@Column(name = "or_statushistory", columnDefinition = "TEXT")
 	private String statushistory;
 
-	/**
-	 * 转的发货单流水号
-	 */
-	@Column(name = "in_id")
-	private String inid;
-
 	/**
 	 * 确认金额(考虑商城打折的情况)包括运费
 	 */
@@ -452,8 +446,8 @@ public class Order extends Document implements Serializable {
 	/**
 	 * 关联出货单id
 	 */
-	@Column(name = "or_ininds")
-	private String inInds;
+	@Column(name = "or_inids", columnDefinition = "1000")
+	private String inIds;
 
 	/**
 	 * 订单明细
@@ -1800,24 +1794,6 @@ public class Order extends Document implements Serializable {
 
 	}
 
-	/**
-	 * Gets inid.
-	 *
-	 * @return the inid
-	 */
-	public String getInid() {
-		return inid;
-	}
-
-	/**
-	 * Sets inid.
-	 *
-	 * @param inid the inid
-	 */
-	public void setInid(String inid) {
-		this.inid = inid;
-	}
-
 	/**
 	 * Gets lgt id.
 	 *
@@ -2584,20 +2560,20 @@ public class Order extends Document implements Serializable {
 		return this;
 	}
 
-	public String getInInds() {
-		return inInds;
+	public String getInIds() {
+		return inIds;
 	}
 
-	public Order setInInds(String inInds) {
-		this.inInds = inInds;
+	public Order setInIds(String inIds) {
+		this.inIds = inIds;
 		return this;
 	}
 
-	public Order addInInds(Long inInds) {
-		if (!StringUtils.isEmpty(this.inInds)) {
-			this.inInds += ",";
+	public Order addInInds(String inid) {
+		if (!StringUtils.isEmpty(this.inIds)) {
+			this.inIds += ",";
 		}
-		this.inInds += inInds;
+		this.inIds += inid;
 		return this;
 	}
 
@@ -2639,7 +2615,6 @@ public class Order extends Document implements Serializable {
 				", price=" + price +
 				", currency='" + currency + '\'' +
 				", statushistory='" + statushistory + '\'' +
-				", inid='" + inid + '\'' +
 				", ensurePrice=" + ensurePrice +
 				", transationPrice=" + transationPrice +
 				", custreturnQty=" + custreturnQty +

+ 11 - 20
src/main/java/com/uas/platform/b2c/trade/order/model/Purchase.java

@@ -195,8 +195,8 @@ public class Purchase extends Document implements Serializable {
 	/**
 	 * 转的发货单id
 	 */
-	@Column(name = "in_id", columnDefinition = "1000")
-	private String inid;
+	@Column(name = "pu_inids", columnDefinition = "1000")
+	private String inids;
 
 	/**
 	 * 存来源订单号(ID), 同意存放订单号
@@ -1443,29 +1443,20 @@ public class Purchase extends Document implements Serializable {
 		this.statushistory = statushistory;
 	}
 
-	/**
-	 * Gets inid.
-	 *
-	 * @return the inid
-	 */
-	public String getInid() {
-		return inid;
+	public String getInids() {
+		return inids;
 	}
 
-	/**
-	 * Sets inid.
-	 *
-	 * @param inid the inid
-	 */
-	public void setInid(String inid) {
-		this.inid = inid;
+	public Purchase setInids(String inids) {
+		this.inids = inids;
+		return this;
 	}
 
 	public void addInid(String inid) {
-		if (!StringUtils.isEmpty(this.inid)) {
-			this.inid += ",";
+		if (!StringUtils.isEmpty(this.inids)) {
+			this.inids += ",";
 		}
-		this.inid += inid;
+		this.inids += inid;
 	}
 
 	/**
@@ -1819,7 +1810,7 @@ public class Purchase extends Document implements Serializable {
 				+ ", price=" + price + ", invoicetype=" + invoicetype + ", invoicetitle=" + invoicetitle + ", invoiceAddress="
 				+ invoiceAddress + ", vatBillStatus=" + vatBillStatus + ", tobeReceiveinvoice=" + tobeReceiveinvoice + ", ensurePrice="
 				+ ensurePrice + ", transationPrice=" + transationPrice + ", returnQty=" + returnQty + ", changeQty=" + changeQty
-				+ ", statushistory=" + statushistory + ", inid=" + inid + ", orderid=" + orderid + ", lgtId=" + lgtId + ", proofingid="
+				+ ", statushistory=" + statushistory + ", orderid=" + orderid + ", lgtId=" + lgtId + ", proofingid="
 				+ proofingid + ", sendstatus=" + sendstatus + ", purchaseDetails=" + purchaseDetails + "]";
 	}
 

+ 5 - 3
src/main/java/com/uas/platform/b2c/trade/order/service/OrderService.java

@@ -173,13 +173,15 @@ public interface OrderService {
 	 */
 	Page<OrderSimpleInfo> findOnesToBePaidPageSimpleInfo(PageInfo page, String keyword);
 
+
 	/**
 	 * 客户确认订单收货
 	 *
-	 * @param ids the ids
-	 * @return order simple info
+	 * @param id 客户订单
+	 * @param invoiceId 出货单号
+	 * @return ResultMap
 	 */
-	OrderSimpleInfo ensureOrderAccept(String ids);
+	ResultMap ensureOrderAccept(Long id, String invoiceId);
 
 	/**
 	 * 根据orderid查找某个人的订单

+ 148 - 146
src/main/java/com/uas/platform/b2c/trade/order/service/impl/OrderServiceImpl.java

@@ -40,15 +40,21 @@ import com.uas.platform.b2c.logistics.dao.AddressDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFOrderDao;
 import com.uas.platform.b2c.logistics.dao.InvoiceFPurchaseDao;
 import com.uas.platform.b2c.logistics.dao.PickUpAddressDao;
-import com.uas.platform.b2c.logistics.model.*;
+import com.uas.platform.b2c.logistics.model.Address;
+import com.uas.platform.b2c.logistics.model.InvoiceFOrder;
+import com.uas.platform.b2c.logistics.model.InvoiceFPurchase;
+import com.uas.platform.b2c.logistics.model.PickUpAddress;
+import com.uas.platform.b2c.logistics.service.InvoiceFOrderService;
 import com.uas.platform.b2c.logistics.service.InvoiceFPurchaseService;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
 import com.uas.platform.b2c.prod.commodity.model.GoodsHistory;
 import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
+import com.uas.platform.b2c.prod.commodity.service.CommodityInOutboundService;
 import com.uas.platform.b2c.prod.commodity.service.GoodsHistoryService;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
+import com.uas.platform.b2c.prod.commodity.service.InOutboundDetailService;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
 import com.uas.platform.b2c.prod.product.component.dao.ComponentDao;
 import com.uas.platform.b2c.prod.product.component.modal.Component;
@@ -219,8 +225,17 @@ public class OrderServiceImpl implements OrderService {
     @Autowired
     private MessageNotifyPersonalManagementService messageNotifyPersonalManagementService;
 
+    @Autowired
+    private InOutboundDetailService inOutboundDetailService;
+
+    @Autowired
+    private CommodityInOutboundService commodityInOutboundService;
+
     private final BoundedExecutor executor;
 
+    @Autowired
+    private InvoiceFOrderService invoiceFOrderService;
+
     @Autowired
     public OrderServiceImpl(OrderDao orderDao) {
         this.orderDao = orderDao;
@@ -696,12 +711,6 @@ public class OrderServiceImpl implements OrderService {
         }
         Order order = (Order) resultMap1.getData();
 
-		/*
-         * 核心逻辑放在这里,其余逻辑放到外部,避免对核心业务逻辑的干扰
-		 */
-//        if (order.getOrderDetails().size() == 0) {
-//            throw new IllegalOperatorException("你没有商品需要确认订单,请返回购物车选择要购买的商品");
-//        }
         // 设置发票信息
         setBillInfo(order);
         // 设置订单信息
@@ -742,11 +751,6 @@ public class OrderServiceImpl implements OrderService {
             assert logger != null;
             String changeLog = TradeLogUtil.changeStatusLog(Status.TOBECONFIRMED.toString(), Status.TOBEPAID.toString());
             logger.log(or, TradeLog.VoucherOperation.BUYER_ENSURE_ORDER, changeLog);
-
-//            OrderMessage orderMessage = new OrderMessage();
-//            orderMessage.setOrder(order);
-//            orderMessage.setEncodeOrderId(EncryptionFilter.encode(order.getOrderid()));
-//            internalMessageService.messageToBuyer(orderMessage, "velocity/orderMessage.vm", "订单信息", null);
         }
         return ResultMap.success(orderList);
     }
@@ -1366,7 +1370,7 @@ public class OrderServiceImpl implements OrderService {
         Order order = orderDao.findOne(orid);
         Long uu = SystemSession.getUser().getUserUU();
         order.setStatusInBound(uu);
-        order.setInid(inid);
+        order.addInInds(inid);
         return orderDao.save(order);
     }
 
@@ -1736,140 +1740,128 @@ public class OrderServiceImpl implements OrderService {
         return bankTransfer;
     }
 
+    /**
+     * 客户确认订单收货
+     *
+     * @param id        客户订单
+     * @param invoiceId 出货单号
+     * @return ResultMap
+     */
     @Override
-    @Transactional
-    public OrderSimpleInfo ensureOrderAccept(String ids) {
-        String[] idArray = ids.split(SplitChar.HYPHEN);
-        OrderSimpleInfo simple = null;
-        //统计每个器件的购买数量
-        Map<String, Double> mapQty = new HashMap<String, Double>();
-        //统计每个器件的下单数
-        Map<String, Integer> mapNum = new HashMap<String, Integer>();
-        Set<String> uuids = null;
-
-        for (String id : idArray) {
-            uuids = new HashSet<String>();
-            Order order = orderDao.findOne(Long.parseLong(id));
-            if (order.getStatus().intValue() != Status.INBOUND.value()) {
-                throw new IllegalOperatorException("当前订单不在待收货状态,不能收货!");
-            }
-            Long uu = null;
-            if (SystemSession.getUser() == null) {//有可能是自动定时任务执行当前代码
-                uu = sysConf.getAdminUU();
-            } else {
-                uu = SystemSession.getUser().getUserUU();
-            }
-            List<Purchase> purchases = purchaseDao.findByOrderid(order.getOrderid());
-
-            //如果是优软代售
-            if (order.getStoreid().equals(sysConf.getStoreid())) {
-                // 2 出货单设置成已收货
-                InvoiceFOrder invoiceFOrder = invoiceFOrderDao.findByInvoiceid(order.getInid());
-                if (invoiceFOrder == null) {
-                    throw new IllegalOperatorException("没有传入有效的订单信息");
-                }
-                invoiceFOrder.setStatusReceived(uu);
-                Set<InvoiceFOrderDetail> invoiceFOrderDetails = invoiceFOrder.getInvoiceFOrderDetails();
-                for (InvoiceFOrderDetail invoiceFOrderDetail : invoiceFOrderDetails) {
-                    if (invoiceFOrderDetail.getStatus().intValue() == Status.INBOUND.value()) {
-                        invoiceFOrderDetail.setStatus(Status.RECEIVED.value());
-                    }
-                }
-                invoiceFOrderDao.save(invoiceFOrder);
-
-                // 3.关联采购单设置成待付款
-                for (Purchase purchase2 : purchases) {
-                    if (purchase2.getStatus().intValue() != Status.RECEIVED.value()) {
-                        throw new IllegalOperatorException("订单关联的采购单:" + purchase2.getPurchaseid() + ",状态异常:"
-                                + Status.valueOf(purchase2.getStatus()).getPhrase());
-                    }
-                    Set<PurchaseDetail> purchaseDetails = purchase2.getPurchaseDetails();
-                    for (PurchaseDetail purchaseDetail : purchaseDetails) {
-                        if (purchaseDetail.getStatus().intValue() == Status.RECEIVED.value()) {
-                            purchaseDetail.setStatusToBePaid(uu);
-                        }
-                    }
-                    purchase2.setTobepaid(uu);
-                    purchaseDao.save(purchase2);
+    public ResultMap ensureOrderAccept(Long id, String invoiceId) {
+        if (id == null) {
+            return new ResultMap(CodeType.NO_INFO, "订单信息缺失");
+        }
+        Order order = orderDao.findOne(id);
+        if (order == null) {
+            return new ResultMap(CodeType.NO_INFO, "订单信息错误,找不到对应订单信息");
+        }
+        // 第一步 对发货单确认收货, 采购入库
+        if (!StringUtils.isEmpty(invoiceId)) {
+            invoiceSignReceive(order, invoiceId);
+        } else {
+            String inIds = order.getInIds();
+            if (StringUtils.isEmpty(inIds)) {
+                return new ResultMap(CodeType.NO_INFO, "关联的发货单缺失");
+            }
+            String[] invoiceids = inIds.split(SplitChar.COMMA);
+            for (String inid : invoiceids) {
+                invoiceSignReceive(order, inid);
+            }
+        }
+        if (NumberUtil.compare(order.getQty(), order.getShipQty()) > 0) {
+            return ResultMap.success(null);
+        }
+        //如果已经全部发货 (order.getQty() < order.getShipQty())
+        String inIds = order.getInIds();
+        String[] invoiceids = inIds.split(SplitChar.COMMA);
+        Boolean selfSell = true, allReceive = true;
+        if (sysConf.getStoreid().equals(order.getStoreid())) {
+            selfSell = false;
+        }
+        for (String inId : invoiceids) {
+            if (selfSell) {
+                InvoiceFPurchase fPurchase = invoiceFPService.findByInvoiceid(inId);
+                if (fPurchase.getStatus().intValue() != Status.RECEIVED.value()) {
+                    allReceive = false;
+                    break;
                 }
-            } else {//不是优软代售
-                for (Purchase purchase : purchases) {
-                    String inid = purchase.getInid();
-                    InvoiceFPurchase invoice = invoiceFPurchaseDao.findByInvoiceid(inid);
-                    invoice.setStatusReceived(uu);
-                    for (InvoiceFPurchaseDetail detail : invoice.getInvoiceFPurchaseDetails()) {
-                        if (detail.getStatus().intValue() == Status.INBOUND.value()) {
-                            detail.setStatus(Status.RECEIVED.value());
-                        }
-                    }
-                    invoiceFPurchaseDao.save(invoice);
-
-                    if (purchase.getStatus().intValue() != Status.INBOUND.value()) {
-                        throw new IllegalOperatorException("订单关联的采购单:" + purchase.getPurchaseid() + ",状态异常:"
-                                + Status.valueOf(purchase.getStatus()).getPhrase());
-                    }
-
-                    for (PurchaseDetail detail : purchase.getPurchaseDetails()) {
-                        if (detail.getStatus().intValue() == Status.INBOUND.value()) {
-                            detail.setStatusToBePaid(uu);
-                        }
-                    }
-                    purchase.setTobepaid(uu);
-                    purchaseDao.save(purchase);
+            } else {
+                InvoiceFOrder invoiceFOrder = invoiceFOrderService.findByInvoiceid(inId);
+                if (invoiceFOrder.getStatus().intValue() != Status.RECEIVED.value()) {
+                    allReceive = false;
+                    break;
                 }
             }
+        }
+        //如果未全部收货
+        if (!allReceive) {
+            return ResultMap.success(null);
+        }
+        //如果已全部收货
+        Long uu = null;
+        if (SystemSession.getUser() == null) {//有可能是自动定时任务执行当前代码
+            uu = sysConf.getAdminUU();
+        } else {
+            uu = SystemSession.getUser().getUserUU();
+        }
+        List<Purchase> purchases = purchaseDao.findByOrderid(order.getOrderid());
+        //不是优软代售
+        for (Purchase purchase : purchases) {
+            if ((purchase.getStatus().intValue() != Status.INBOUND.value()) && (purchase.getStatus().intValue() != Status.RECEIVED.value())) {
+                throw new IllegalOperatorException("订单关联的采购单:" + purchase.getPurchaseid() + ",状态异常:"
+                        + Status.valueOf(purchase.getStatus()).getPhrase());
+            }
 
-            // 1 订单设置成已收货
-            order.setStatusReceived(uu);
-            order.setReciptTime(new Date());
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(order.getReciptTime());
-            // TODO huxz 计算订单自动完成时间
-            calendar.add(Calendar.MILLISECOND, 1);
-            //calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + ORDER_COMPLETE_DAYS);
-            order.setAutoCompleteTime(calendar.getTime());
-
-            // TODO huxz 二次签收直接变更状态为已完成状态
-            // 设置明细的状态
-            Set<OrderDetail> orderDetails = order.getOrderDetails();
-            for (OrderDetail orderDetail : orderDetails) {
-                if (orderDetail.getStatus().intValue() == Status.INBOUND.value()) {
-                    orderDetail.setStatusReceived(uu);
-
-                    //统计器件的购买的数量
-                    String uuid = orderDetail.getUuid();
-                    if (!StringUtils.isEmpty(uuid)) {
-                        Double num = mapQty.get(uuid);
-                        num = num == null ? 0 : num;
-                        num = num + orderDetail.getNumber();
-                        uuids.add(uuid);
-                        mapQty.put(uuid, num);
-                    }
-
+            for (PurchaseDetail detail : purchase.getPurchaseDetails()) {
+                if (detail.getStatus().intValue() == Status.INBOUND.value() || (detail.getStatus().intValue() == Status.RECEIVED.value())) {
+                    detail.setStatusToBePaid(uu);
                 }
             }
-
-            //统计每个器件的下单数量
-            for (String uuid : uuids) {
-                Integer num = mapNum.get(uuid);
-                num = num == null ? 0 : num;
-                num++;
-                mapNum.put(uuid, num);
+            purchase.setTobepaid(uu);
+            purchaseDao.save(purchase);
+        }
+        // 1 订单设置成已收货
+        order.setStatusReceived(uu);
+        order.setReciptTime(new Date());
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(order.getReciptTime());
+        // TODO huxz 计算订单自动完成时间
+        calendar.add(Calendar.MILLISECOND, 1);
+        //calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + ORDER_COMPLETE_DAYS);
+        order.setAutoCompleteTime(calendar.getTime());
+
+        // TODO huxz 二次签收直接变更状态为已完成状态
+        // 设置明细的状态
+        Set<OrderDetail> orderDetails = order.getOrderDetails();
+        for (OrderDetail orderDetail : orderDetails) {
+            if (orderDetail.getStatus().intValue() == Status.INBOUND.value()) {
+                orderDetail.setStatusReceived(uu);
             }
+        }
+        orderDao.save(order);
+        return ResultMap.success(null);
+    }
 
-            order = orderDao.save(order);
-            simple = new OrderSimpleInfo(order);
+    /**
+     * 对发货单确认收货
+     * @param order 订单
+     * @param invoiceid 出货单
+     * @return 返回结果
+     */
+    private ResultMap invoiceSignReceive(Order order, String invoiceid) {
+        if (order == null) {
+            return new ResultMap(CodeType.NO_INFO, "订单信息为空");
         }
-        Set<String> keySet = mapQty.keySet();
-        for (String uuid : keySet) {
-            Component component = componentDao.findByUuid(uuid);
-            if (component != null) {
-                component.setOrderNumber((component.getOrderNumber() == null ? 0 : component.getOrderNumber()) - 1);
-                component.setOrderQty((component.getOrderQty() == null ? 0 : component.getOrderQty()) - mapQty.get(uuid));
-                componentDao.save(component);
-            }
+        if (StringUtils.isEmpty(invoiceid)) {
+            return new ResultMap(CodeType.NO_INFO, "发货单信息缺失");
+        }
+        if (sysConf.getStoreid().equals(order.getStoreid())) {
+            invoiceFOrderService.signReceive(invoiceid, order);
+        } else {
+            invoiceFPService.signReceive(invoiceid,order);
         }
-        return simple;
+        return ResultMap.success(null);
     }
 
     @Override
@@ -2450,20 +2442,30 @@ public class OrderServiceImpl implements OrderService {
 
         OrderRelationInfo info = new OrderRelationInfo();
         // 获取平台
-        if (order.getInid() != null) {
-            InvoiceFOrder inFOrder = invoiceFOrderDao.findByInvoiceid(order.getInid());
-            info.setInForderid(inFOrder.getInvoiceid());
-            String b2cLogistic = inFOrder.getLogistics() == null ? null : inFOrder.getLogistics().getNumber();
-            info.setB2cLogistic(b2cLogistic);
+        if (org.apache.commons.lang.StringUtils.isNotEmpty(order.getInIds())) {
+            String inIds = order.getInIds();
+            String[] invoiceids = inIds.split(SplitChar.COMMA);
+            for (String invoiceid : invoiceids) {
+                InvoiceFOrder inFOrder = invoiceFOrderDao.findByInvoiceid(invoiceid);
+                info.setInForderid(inFOrder.getInvoiceid());
+                String b2cLogistic = inFOrder.getLogistics() == null ? null : inFOrder.getLogistics().getNumber();
+                info.addB2cLogistic(b2cLogistic);
+            }
+
         }
         List<Purchase> purchases = purchaseDao.findByOrderid(order.getOrderid());
         for (Purchase purc : purchases) {
             info.setPurchaseid(purc.getPurchaseid() + "-");
-            InvoiceFPurchase invoiceFPurchase = invoiceFPurchaseDao.findByInvoiceid(purc.getInid());
-            info.setInFpurcid(invoiceFPurchase.getInvoiceid() + "-");
-            String vendLogistic = invoiceFPurchase.getLogistics() == null ? null
-                    : invoiceFPurchase.getLogistics().getNumber();
-            info.setVendLogistic(vendLogistic + "-");
+            String inids = purc.getInids();
+            String[] split = inids.split(SplitChar.COMMA);
+            for (String invoiceid : split) {
+                InvoiceFPurchase invoiceFPurchase = invoiceFPurchaseDao.findByInvoiceid(invoiceid);
+                info.setInFpurcid(invoiceFPurchase.getInvoiceid() + "-");
+                String vendLogistic = invoiceFPurchase.getLogistics() == null ? null
+                        : invoiceFPurchase.getLogistics().getNumber();
+                info.setVendLogistic(vendLogistic + "-");
+            }
+
         }
         // 删除最后一个-
         info.setPurchaseid(info.getPurchaseid().substring(0, info.getPurchaseid().length() - 1));

+ 1 - 1
src/main/java/com/uas/platform/b2c/trade/order/task/OrderTask.java

@@ -137,7 +137,7 @@ public class OrderTask {
                 String[] split = ids.split(SplitChar.HYPHEN);
                 for (String id : split) {
                     try {
-                        orderService.ensureOrderAccept(id);
+                        orderService.ensureOrderAccept(Long.valueOf(id), "");
                     }catch (Exception e) {
                         Map<String, Object> map  = new HashedMap();
                         map.put("title", "自动确认收货");