Просмотр исходного кода

采购变更单与采购单解耦

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@1180 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
suntg 10 лет назад
Родитель
Сommit
3e287021f7

+ 6 - 6
src/main/java/com/uas/platform/b2b/controller/SaleOrderChangeController.java

@@ -54,7 +54,7 @@ public class SaleOrderChangeController {
 		logger.log("客户采购变更单", "查看收到的客户采购变更单列表(全部)");
 		PageInfo info = new PageInfo(params);
 		// 我作为卖家,把我的企业ID作为供应商ID传入
-		info.filter("order.vendUU", SystemSession.getUser().getEnterprise().getUu());
+		info.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		return purchaseOrderChangeService.findAllByPageInfo(info, keyword);
 	}
 
@@ -72,7 +72,7 @@ public class SaleOrderChangeController {
 		// 变更单状态为未回复
 		info.filter("status", Status.NOT_REPLY.value());
 		// 我作为卖家,把我的企业ID作为供应商ID传入
-		info.filter("order.vendUU", SystemSession.getUser().getEnterprise().getUu());
+		info.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		return purchaseOrderChangeService.findAllByPageInfo(info, keyword);
 	}
 
@@ -90,7 +90,7 @@ public class SaleOrderChangeController {
 		// 变更单状态为已回复
 		info.filter("status", Status.REPLIED.value());
 		// 我作为卖家,把我的企业ID作为供应商ID传入
-		info.filter("order.vendUU", SystemSession.getUser().getEnterprise().getUu());
+		info.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		return purchaseOrderChangeService.findAllByPageInfo(info, keyword);
 	}
 
@@ -131,7 +131,7 @@ public class SaleOrderChangeController {
 	public ModelAndView exportChanges(String keyword) {
 		PageInfo pageInfo = new PageInfo(1, JxlsExcelView.MAX_SIZE, 0);
 		pageInfo.sorting("date", Direction.DESC);
-		pageInfo.filter("order.vendUU", SystemSession.getUser().getEnterprise().getUu());
+		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
 		ModelAndView modelAndView = new ModelAndView();
 		modelAndView.addObject("dateFormat", dateFormat);
@@ -152,7 +152,7 @@ public class SaleOrderChangeController {
 	public ModelAndView exportTodoChanges(String keyword) {
 		PageInfo pageInfo = new PageInfo(1, JxlsExcelView.MAX_SIZE, 0);
 		pageInfo.sorting("date", Direction.DESC);
-		pageInfo.filter("order.vendUU", SystemSession.getUser().getEnterprise().getUu());
+		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		// 变更单状态为未回复
 		pageInfo.filter("status", Status.NOT_REPLY.value());
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
@@ -175,7 +175,7 @@ public class SaleOrderChangeController {
 	public ModelAndView exportDoneChanges(String keyword) {
 		PageInfo pageInfo = new PageInfo(1, JxlsExcelView.MAX_SIZE, 0);
 		pageInfo.sorting("date", Direction.DESC);
-		pageInfo.filter("order.vendUU", SystemSession.getUser().getEnterprise().getUu());
+		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		// 变更单状态为已回复
 		pageInfo.filter("status", Status.REPLIED.value());
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");

+ 5 - 5
src/main/java/com/uas/platform/b2b/dao/PurchaseOrderChangeDao.java

@@ -20,7 +20,7 @@ public interface PurchaseOrderChangeDao extends JpaSpecificationExecutor<Purchas
 	 * @param code
 	 * @return
 	 */
-	@Query("from PurchaseOrderChange r where r.order.enUU = :enUU and r.code = :code")
+	@Query("from PurchaseOrderChange r where r.enUU = :enUU and r.code = :code")
 	public List<PurchaseOrderChange> findByEnUUAndCode(@Param("enUU") long enUU, @Param("code") String code);
 
 	/**
@@ -31,7 +31,7 @@ public interface PurchaseOrderChangeDao extends JpaSpecificationExecutor<Purchas
 	 * @param sendStatus
 	 * @return
 	 */
-	@Query("from PurchaseOrderChange r where r.order.enUU = :enUU and r.status = :status and r.backStatus = :backStatus")
+	@Query("from PurchaseOrderChange r where r.enUU = :enUU and r.status = :status and r.backStatus = :backStatus")
 	public List<PurchaseOrderChange> findByEnUUAndStatusAndBackStatus(@Param("enUU") long enUU, @Param("status") short status,
 			@Param("backStatus") short backStatus);
 
@@ -44,7 +44,7 @@ public interface PurchaseOrderChangeDao extends JpaSpecificationExecutor<Purchas
 	 *            上传到卖家ERP的状态
 	 * @return
 	 */
-	@Query("from PurchaseOrderChange r where r.order.vendUU = :vendUU and r.sendStatus = :sendStatus")
+	@Query("from PurchaseOrderChange r where r.vendUU = :vendUU and r.sendStatus = :sendStatus")
 	public List<PurchaseOrderChange> findByVendUUAndSendStatus(@Param("vendUU") long vendUU, @Param("sendStatus") short sendStatus);
 
 	/**
@@ -58,7 +58,7 @@ public interface PurchaseOrderChangeDao extends JpaSpecificationExecutor<Purchas
 	 *            回复信息上传到卖家ERP的状态
 	 * @return
 	 */
-	@Query("from PurchaseOrderChange r where r.order.vendUU = :vendUU and r.status = :status and r.replySendStatus = :replySendStatus")
+	@Query("from PurchaseOrderChange r where r.vendUU = :vendUU and r.status = :status and r.replySendStatus = :replySendStatus")
 	public List<PurchaseOrderChange> findByVendUUAndStatusAndReplySendStatus(@Param("vendUU") long vendUU, @Param("status") short status,
 			@Param("replySendStatus") short replySendStatus);
 	
@@ -69,6 +69,6 @@ public interface PurchaseOrderChangeDao extends JpaSpecificationExecutor<Purchas
 	 * @param status
 	 * @return
 	 */
-	@Query("select count(o) from PurchaseOrderChange o where o.order.vendUU = :vendUU and o.status = :status")
+	@Query("select count(o) from PurchaseOrderChange o where o.vendUU = :vendUU and o.status = :status")
 	public int getCountByVendUUAndStatus(@Param("vendUU") long vendUU, @Param("status") short status);
 }

+ 1 - 4
src/main/java/com/uas/platform/b2b/erp/model/PurchaseChangeDetail.java

@@ -4,7 +4,6 @@ import java.util.Date;
 
 import com.uas.platform.b2b.model.Product;
 import com.uas.platform.b2b.model.PurchaseOrderChangeItem;
-import com.uas.platform.b2b.model.PurchaseOrderItem;
 import com.uas.platform.b2b.support.SystemSession;
 
 /**
@@ -110,9 +109,7 @@ public class PurchaseChangeDetail {
 		changeItem.setNewTaxrate(this.pcd_newtaxrate);
 		changeItem.setNumber(this.pcd_detno);
 		changeItem.setRemark(this.pcd_remark);
-		PurchaseOrderItem orderItem = new PurchaseOrderItem();
-		orderItem.setNumber(this.pcd_pddetno);
-		changeItem.setOrderItem(orderItem);
+		changeItem.setOrderItemNumber(this.pcd_pddetno);
 		Product newProduct = new Product();
 		newProduct.setEnUU(SystemSession.getUser().getEnterprise().getUu());
 		newProduct.setCode(this.pcd_newprodcode);

+ 2 - 2
src/main/java/com/uas/platform/b2b/erp/model/SaleDownChange.java

@@ -147,8 +147,8 @@ public class SaleDownChange {
 	public SaleDownChange(PurchaseOrderChange orderChange) {
 		this.b2b_pc_id = orderChange.getId();
 		this.sc_code = orderChange.getCode();
-		this.sc_sacode = orderChange.getOrder().getCode();
-		this.sc_custuu = orderChange.getOrder().getEnUU();
+		this.sc_sacode = orderChange.getOrderCode();
+		this.sc_custuu = orderChange.getEnUU();
 		this.sc_indate = orderChange.getDate();
 		this.sc_remark = orderChange.getRemark();
 		this.sc_description = orderChange.getDescription();

+ 1 - 1
src/main/java/com/uas/platform/b2b/erp/model/SaleDownChangeDetail.java

@@ -125,7 +125,7 @@ public class SaleDownChangeDetail {
 		this.scd_newprice = changeItem.getNewPrice();
 		this.scd_newqty = changeItem.getNewQty();
 		this.scd_newtaxrate = changeItem.getNewTaxrate();
-		this.scd_sddetno = changeItem.getOrderItem().getNumber();
+		this.scd_sddetno = changeItem.getOrderItemNumber();
 	}
 
 }

+ 35 - 5
src/main/java/com/uas/platform/b2b/erp/service/impl/PurchaseChangeServiceImpl.java

@@ -46,16 +46,14 @@ public class PurchaseChangeServiceImpl implements PurchaseChangeService {
 			List<PurchaseOrderChange> orderChanges = purchaseOrderChangeDao.findByEnUUAndCode(enUU, change.getPc_code());
 			// 原采购单需存在,变更单不存在
 			if (orders.size() > 0 && orderChanges.size() == 0) {
-				orderChange.setOrder(orders.get(0));
-				orderChange.setOrderId(orders.get(0).getId());
+				convertOrderInfo(orderChange, orders.get(0));// 赋值原单据信息字段
 				if (!CollectionUtils.isEmpty(orderChange.getOrderChangeItems())) {
 					for (PurchaseOrderChangeItem item : orderChange.getOrderChangeItems()) {
 						// 取订单明细ID
 						List<PurchaseOrderItem> orderItems = purchaseOrderItemDao.findByEnUUAndOrderCodeAndNumber(enUU, orderChange
-								.getOrder().getCode(), item.getOrderItem().getNumber());
+								.getOrderCode(), item.getOrderItemNumber());
 						if (orderItems.size() > 0) {
-							item.setOrderItem(orderItems.get(0));
-							item.setOrderItemId(orderItems.get(0).getId());
+							convertOrderItemInfo(item, orderItems.get(0));// 赋值原单据信息字段
 						}
 						// 取平台的产品ID
 						Product newProduct = item.getNewProduct();
@@ -80,5 +78,37 @@ public class PurchaseChangeServiceImpl implements PurchaseChangeService {
 			replies.add(new PurchaseChangeReply(change));
 		return replies;
 	}
+	
+	/**
+	 * 向变更单赋值原单据信息字段
+	 * @param change
+	 * @param order
+	 */
+	private void convertOrderInfo(PurchaseOrderChange change, PurchaseOrder order) {
+		change.setEnUU(order.getEnUU());
+		change.setUserUU(order.getUserUU());
+		change.setVendUU(order.getVendUU());
+		change.setVendUserUU(order.getVendUserUU());
+		change.setOrderId(order.getId());
+		change.setOldCurrency(order.getCurrency());
+		change.setOldPayments(order.getPayments());
+		change.setOldRate(order.getRate());
+		change.setOrderCode(order.getCode());
+	}
+	
+	/**
+	 * 向变更单明细赋值原单据信息字段
+	 * @param changeItem
+	 * @param orderItem
+	 */
+	private void convertOrderItemInfo(PurchaseOrderChangeItem changeItem, PurchaseOrderItem orderItem) {
+		changeItem.setOldDelivery(orderItem.getDelivery());
+		changeItem.setOldPrice(orderItem.getPrice());
+		changeItem.setOldProductId(orderItem.getProductId());
+		changeItem.setOldQty(orderItem.getQty());
+		changeItem.setOldTaxrate(orderItem.getTaxrate());
+		changeItem.setOrderItemId(orderItem.getId());
+		changeItem.setOrderItemNumber(orderItem.getNumber());
+	}
 
 }

+ 13 - 23
src/main/java/com/uas/platform/b2b/event/PurchaseOrderChangeSaveEvent.java

@@ -1,12 +1,9 @@
 package com.uas.platform.b2b.event;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import com.uas.platform.b2b.core.util.SearchKeyUtils;
-import com.uas.platform.b2b.model.PurchaseOrder;
 import com.uas.platform.b2b.model.PurchaseOrderChange;
 import com.uas.platform.b2b.model.PurchaseOrderChangeIndex;
 import com.uas.platform.b2b.model.PurchaseOrderChangeItem;
@@ -32,20 +29,20 @@ public class PurchaseOrderChangeSaveEvent extends SaveEvent<PurchaseOrderChangeI
 	@Override
 	public List<PurchaseOrderChangeIndex> split(PurchaseOrderChange saved) {
 		long key = saved.getId();
-		long enUU = saved.getOrder().getVendUU();
+		long enUU = saved.getVendUU();
 		List<PurchaseOrderChangeIndex> indexes = new ArrayList<PurchaseOrderChangeIndex>();
 		// 采购单号(匹配完整的编号)
 		indexes.add(new PurchaseOrderChangeIndex(enUU, key, saved.getCode()));
 		// 客户名称(匹配两个字以上的客户名称关键字)
 		indexes.addAll(PurchaseOrderChangeIndex.format(enUU, key,
-				SearchKeyUtils.splitToKeys(saved.getOrder().getEnterprise().getEnName(), false)));
+				SearchKeyUtils.splitToKeys(saved.getEnterprise().getEnName(), false)));
 		// 物料(匹配完整的物料编号、两个字以上的物料名称及规格关键字)
 		for (PurchaseOrderChangeItem item : saved.getOrderChangeItems()) {
-			indexes.add(new PurchaseOrderChangeIndex(enUU, key, item.getOrderItem().getProduct().getCode()));
+			indexes.add(new PurchaseOrderChangeIndex(enUU, key, item.getOldProduct().getCode()));
 			indexes.addAll(PurchaseOrderChangeIndex.format(enUU, key,
-					SearchKeyUtils.splitToKeys(item.getOrderItem().getProduct().getTitle(), false)));
+					SearchKeyUtils.splitToKeys(item.getOldProduct().getTitle(), false)));
 			indexes.addAll(PurchaseOrderChangeIndex.format(enUU, key,
-					SearchKeyUtils.splitToKeys(item.getOrderItem().getProduct().getSpec(), false)));
+					SearchKeyUtils.splitToKeys(item.getOldProduct().getSpec(), false)));
 			indexes.add(new PurchaseOrderChangeIndex(enUU, key, item.getNewProduct().getCode()));
 			indexes.addAll(PurchaseOrderChangeIndex.format(enUU, key,
 					SearchKeyUtils.splitToKeys(item.getNewProduct().getTitle(), false)));
@@ -57,22 +54,15 @@ public class PurchaseOrderChangeSaveEvent extends SaveEvent<PurchaseOrderChangeI
 
 	@Override
 	public void pusher(List<PurchaseOrderChange> savedList) {
-		Set<Long> orderId = new HashSet<Long>();
 		for (PurchaseOrderChange change : savedList) {
-			for (PurchaseOrderChangeItem orderItem : change.getOrderChangeItems()) {
-				if (!orderId.contains(orderItem.getOrderChange().getId())) {
-					PurchaseOrder order = orderItem.getOrderChange().getOrder();
-					if (order.getVendUserUU() != null) {
-						// Android
-						XingePusher.pushSingleAccountAndroid(order.getVendUserUU().toString(), "新增一条客户采购变更单-", "单号:"
-								+ orderItem.getOrderChange().getCode() + ",客户:" + order.getEnterprise().getEnName(),
-								"com.sas.mobile.activity.PurchaseChangeActivity");
-						// IOS
-						XingePusher.pushSingleAccountIOS(order.getVendUserUU().toString(), "新增一条客户采购变更单-" + "单号:"
-								+ orderItem.getOrderChange().getCode() + ",客户:" + order.getEnterprise().getEnName());
-					}
-					orderId.add(orderItem.getOrderChange().getId());
-				}
+			if (change.getVendUserUU() != null) {
+				// Android
+				XingePusher.pushSingleAccountAndroid(change.getVendUserUU().toString(), "新增一条客户采购变更单-", "单号:"
+						+ change.getOrderCode() + ",客户:" + change.getEnterprise().getEnName(),
+						"com.sas.mobile.activity.PurchaseChangeActivity");
+				// IOS
+				XingePusher.pushSingleAccountIOS(change.getVendUserUU().toString(), "新增一条客户采购变更单-" + "单号:"
+						+ change.getOrderCode() + ",客户:" + change.getEnterprise().getEnName());
 			}
 		}
 	}

+ 4 - 4
src/main/java/com/uas/platform/b2b/mobile/model/PurchaseChange.java

@@ -190,14 +190,14 @@ public class PurchaseChange {
 			this.pc_agreed = Status.AGREED.getPhrase();
 		this.pc_id = orderChange.getId();
 		this.pc_code = orderChange.getCode();
-		this.pc_currency = orderChange.getOrder().getCurrency();
+		this.pc_currency = orderChange.getOldCurrency();
 		this.pc_date = orderChange.getDate();
 		this.pc_newcurrency = orderChange.getNewCurrency();
 		this.pc_newpayments = orderChange.getNewPayments();
 		this.pc_newrate = orderChange.getNewRate();
-		this.pc_payments = orderChange.getOrder().getPayments();
-		this.pc_purccode = orderChange.getOrder().getCode();
-		this.pc_rate = orderChange.getOrder().getRate();
+		this.pc_payments = orderChange.getOldPayments();
+		this.pc_purccode = orderChange.getOrderCode();
+		this.pc_rate = orderChange.getOldRate();
 		this.pc_remark = orderChange.getRemark();
 		this.pc_total = 0.0;
 		if (!CollectionUtils.isEmpty(orderChange.getOrderChangeItems())) {

+ 111 - 29
src/main/java/com/uas/platform/b2b/model/PurchaseOrderChange.java

@@ -19,7 +19,6 @@ import javax.persistence.SequenceGenerator;
 import javax.persistence.Table;
 
 import org.codehaus.jackson.annotate.JsonIgnore;
-import org.springframework.util.StringUtils;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.uas.platform.core.model.Constant;
@@ -52,6 +51,31 @@ public class PurchaseOrderChange implements Serializable {
 	@Column(name = "pc_enuu")
 	private Long enUU;
 
+	/**
+	 * 采购企业
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "pc_enuu", insertable = false, updatable = false)
+	private Enterprise enterprise;
+
+	/**
+	 * 采购变更单买方用户UU(订单中的数据)
+	 */
+	@Column(name = "pc_useruu")
+	private Long userUU;
+	
+	/**
+	 * 采购变更单供应商UU
+	 */
+	@Column(name = "pc_venduu")
+	private Long vendUU;
+
+	/**
+	 * 采购变更单卖方用户UU(订单中的数据)
+	 */
+	@Column(name = "pc_venduseruu")
+	private Long vendUserUU;
+
 	/**
 	 * 采购变更单号
 	 */
@@ -129,28 +153,45 @@ public class PurchaseOrderChange implements Serializable {
 	 */
 	@Column(name = "pc_newpayments")
 	private String newPayments;
+	
+	/**
+	 * 原单据单据付款方式
+	 */
+	@Column(name = "pc_oldpayments")
+	private String oldPayments;
 
 	/**
 	 * 新付款币种
 	 */
 	@Column(name = "pc_newcurrency")
 	private String newCurrency;
+	
+	/**
+	 * 原单据付款币种
+	 */
+	@Column(name = "pc_oldcurrency")
+	private String oldCurrency;
 
 	/**
 	 * 新汇率
 	 */
 	@Column(name = "pc_newrate")
 	private Float newRate;
-
+	
 	/**
-	 * 采购订单
+	 * 原单据汇率
 	 */
-	@OneToOne(cascade = { CascadeType.REFRESH })
-	@JoinColumn(name = "pc_puid", insertable = false, updatable = false)
-	private PurchaseOrder order;
+	@Column(name = "pc_oldrate")
+	private Float oldRate;
 
 	@Column(name = "pc_puid")
 	private Long orderId;
+	
+	/**
+	 * 采购订单编号
+	 */
+	@Column(name = "pc_pucode")
+	private String orderCode;
 
 	/**
 	 * 采购变更单明细
@@ -248,14 +289,6 @@ public class PurchaseOrderChange implements Serializable {
 		this.newRate = newRate;
 	}
 
-	public PurchaseOrder getOrder() {
-		return order;
-	}
-
-	public void setOrder(PurchaseOrder order) {
-		this.order = order;
-	}
-
 	public Set<PurchaseOrderChangeItem> getOrderChangeItems() {
 		return orderChangeItems;
 	}
@@ -312,27 +345,76 @@ public class PurchaseOrderChange implements Serializable {
 		this.orderId = orderId;
 	}
 
+	public String getOldPayments() {
+		return oldPayments;
+	}
+
+	public void setOldPayments(String oldPayments) {
+		this.oldPayments = oldPayments;
+	}
+
+	public String getOldCurrency() {
+		return oldCurrency;
+	}
+
+	public void setOldCurrency(String oldCurrency) {
+		this.oldCurrency = oldCurrency;
+	}
+
+	public Float getOldRate() {
+		return oldRate;
+	}
+
+	public void setOldRate(Float oldRate) {
+		this.oldRate = oldRate;
+	}
+
+	public String getOrderCode() {
+		return orderCode;
+	}
+
+	public void setOrderCode(String orderCode) {
+		this.orderCode = orderCode;
+	}
+
+	public Enterprise getEnterprise() {
+		return enterprise;
+	}
+
+	public void setEnterprise(Enterprise enterprise) {
+		this.enterprise = enterprise;
+	}
+
+	public Long getVendUU() {
+		return vendUU;
+	}
+
+	public void setVendUU(Long vendUU) {
+		this.vendUU = vendUU;
+	}
+
+	public Long getUserUU() {
+		return userUU;
+	}
+
+	public void setUserUU(Long userUU) {
+		this.userUU = userUU;
+	}
+
+	public Long getVendUserUU() {
+		return vendUserUU;
+	}
+
+	public void setVendUserUU(Long vendUserUU) {
+		this.vendUserUU = vendUserUU;
+	}
+
 	@JsonIgnore
 	@JSONField(serialize = false)
 	public boolean isAgreed() {
 		return this.agreed != null && Constant.YES == this.agreed;
 	}
 
-	/**
-	 * 变更信息转入到采购订单
-	 * 
-	 * @return
-	 */
-	public PurchaseOrder convert() {
-		if (StringUtils.hasText(this.newPayments))
-			this.order.setPayments(this.newPayments);
-		if (StringUtils.hasText(this.newCurrency)) {
-			this.order.setCurrency(this.newCurrency);
-			this.order.setRate(this.newRate);
-		}
-		return this.order;
-	}
-
 	/**
 	 * 处理详情
 	 * 

+ 102 - 33
src/main/java/com/uas/platform/b2b/model/PurchaseOrderChangeItem.java

@@ -52,24 +52,42 @@ public class PurchaseOrderChangeItem {
 	private PurchaseOrderChange orderChange;
 
 	/**
-	 * 采购订单明细
+	 * 采购订单明细ID
 	 */
-	@OneToOne(cascade = { CascadeType.REFRESH })
-	@JoinColumn(name = "pcd_pdid", insertable = false, updatable = false)
-	private PurchaseOrderItem orderItem;
-
 	@Column(name = "pcd_pdid")
 	private Long orderItemId;
-
+	
+	/**
+	 * 采购订单明细序号
+	 */
+	@Column(name = "pcd_pdnumber")
+	private Short orderItemNumber;
+	
 	/**
 	 * 新产品
 	 */
 	@OneToOne(cascade = { CascadeType.REFRESH })
 	@JoinColumn(name = "pcd_newprid", insertable = false, updatable = false)
 	private Product newProduct;
+	
+	/**
+	 * 原产品
+	 */
+	@OneToOne(cascade = { CascadeType.REFRESH })
+	@JoinColumn(name = "pcd_oldprid", insertable = false, updatable = false)
+	private Product oldProduct;
 
+	/**
+	 * 新产品id
+	 */
 	@Column(name = "pcd_newprid")
 	private Long newProductId;
+	
+	/**
+	 * 原产品id
+	 */
+	@Column(name = "pcd_oldprid")
+	private Long oldProductId;
 
 	/**
 	 * 新数量
@@ -77,17 +95,35 @@ public class PurchaseOrderChangeItem {
 	@Column(name = "pcd_newqty")
 	private Double newQty;
 
+	/**
+	 * 原数量
+	 */
+	@Column(name = "pcd_oldqty")
+	private Double oldQty;
+
 	/**
 	 * 新含税单价
 	 */
 	@Column(name = "pcd_newprice")
 	private Double newPrice;
 
+	/**
+	 * 原含税单价
+	 */
+	@Column(name = "pcd_oldprice")
+	private Double oldPrice;
+
 	/**
 	 * 新税率
 	 */
 	@Column(name = "pcd_newtaxrate")
 	private Float newTaxrate;
+	
+	/**
+	 * 原税率
+	 */
+	@Column(name = "pcd_oldtaxrate")
+	private Float oldTaxrate;
 
 	/**
 	 * 新交货日期
@@ -95,6 +131,12 @@ public class PurchaseOrderChangeItem {
 	@Column(name = "pcd_newdelivery")
 	private Date newDelivery;
 
+	/**
+	 * 原交货日期
+	 */
+	@Column(name = "pcd_olddelivery")
+	private Date oldDelivery;
+
 	/**
 	 * 备注
 	 */
@@ -127,14 +169,6 @@ public class PurchaseOrderChangeItem {
 		this.orderChange = orderChange;
 	}
 
-	public PurchaseOrderItem getOrderItem() {
-		return orderItem;
-	}
-
-	public void setOrderItem(PurchaseOrderItem orderItem) {
-		this.orderItem = orderItem;
-	}
-
 	public Product getNewProduct() {
 		return newProduct;
 	}
@@ -199,25 +233,60 @@ public class PurchaseOrderChangeItem {
 		this.remark = remark;
 	}
 
-	/**
-	 * 变更明细转入到采购订单明细
-	 * 
-	 * @return
-	 */
-	public PurchaseOrderItem convert() {
-		if (this.newDelivery != null)
-			this.orderItem.setDelivery(this.newDelivery);
-		if (this.newPrice != null)
-			this.orderItem.setPrice(this.newPrice);
-		if (this.newQty != null && this.newQty > 0)
-			this.orderItem.setQty(this.newQty);
-		if (this.newTaxrate != null)
-			this.orderItem.setTaxrate(this.newTaxrate);
-		if (this.newProduct != null) {
-			this.orderItem.setProduct(this.newProduct);
-			this.orderItem.setProductId(this.newProductId);
-		}
-		return this.orderItem;
+	public Short getOrderItemNumber() {
+		return orderItemNumber;
+	}
+
+	public void setOrderItemNumber(Short orderItemNumber) {
+		this.orderItemNumber = orderItemNumber;
+	}
+
+	public Product getOldProduct() {
+		return oldProduct;
+	}
+
+	public void setOldProduct(Product oldProduct) {
+		this.oldProduct = oldProduct;
+	}
+
+	public Long getOldProductId() {
+		return oldProductId;
+	}
+
+	public void setOldProductId(Long oldProductId) {
+		this.oldProductId = oldProductId;
+	}
+
+	public Double getOldQty() {
+		return oldQty;
+	}
+
+	public void setOldQty(Double oldQty) {
+		this.oldQty = oldQty;
+	}
+
+	public Double getOldPrice() {
+		return oldPrice;
+	}
+
+	public void setOldPrice(Double oldPrice) {
+		this.oldPrice = oldPrice;
+	}
+
+	public Float getOldTaxrate() {
+		return oldTaxrate;
+	}
+
+	public void setOldTaxrate(Float oldTaxrate) {
+		this.oldTaxrate = oldTaxrate;
+	}
+
+	public Date getOldDelivery() {
+		return oldDelivery;
+	}
+
+	public void setOldDelivery(Date oldDelivery) {
+		this.oldDelivery = oldDelivery;
 	}
 
 	public static List<PurchaseOrderChange> distinct(List<PurchaseOrderChangeItem> items) {

+ 46 - 10
src/main/java/com/uas/platform/b2b/service/impl/PurchaseOrderChangeServiceImpl.java

@@ -28,6 +28,7 @@ import com.uas.platform.b2b.event.PurchaseOrderChangeSaveEvent;
 import com.uas.platform.b2b.model.PurchaseOrder;
 import com.uas.platform.b2b.model.PurchaseOrderChange;
 import com.uas.platform.b2b.model.PurchaseOrderChangeItem;
+import com.uas.platform.b2b.model.PurchaseOrderItem;
 import com.uas.platform.b2b.service.PurchaseOrderChangeService;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.XingePusher;
@@ -97,11 +98,47 @@ public class PurchaseOrderChangeServiceImpl implements PurchaseOrderChangeServic
 	 * @param change
 	 */
 	private void changeOrder(PurchaseOrderChange change) {
-		purchaseOrderDao.save(change.convert());
-		if (!CollectionUtils.isEmpty(change.getOrderChangeItems())) {
-			for (PurchaseOrderChangeItem changeItem : change.getOrderChangeItems())
-				purchaseOrderItemDao.save(changeItem.convert());
+		if(change.isAgreed()) {
+			purchaseOrderDao.save(convertOrder(change));
+			if (!CollectionUtils.isEmpty(change.getOrderChangeItems())) {
+				for (PurchaseOrderChangeItem changeItem : change.getOrderChangeItems())
+					purchaseOrderItemDao.save(convertOrderItem(changeItem));
+			}
+		}
+	}
+	
+	/**
+	 * 已同意的变更单反应到采购订单中
+	 * @param change
+	 * @return
+	 */
+	private PurchaseOrder convertOrder(PurchaseOrderChange change) {
+		PurchaseOrder order = purchaseOrderDao.findOne(change.getOrderId());
+		if(order != null) {
+			if (StringUtils.hasText(change.getNewPayments()))
+				order.setPayments(change.getNewPayments());
+			if (StringUtils.hasText(change.getNewCurrency())) {
+				order.setCurrency(change.getNewCurrency());
+				order.setRate(change.getNewRate());
+			}
+		}
+		return order;
+	}
+	
+	private PurchaseOrderItem convertOrderItem(PurchaseOrderChangeItem changItem) {
+		PurchaseOrderItem orderItem = purchaseOrderItemDao.findOne(changItem.getOrderItemId());
+		if (changItem.getNewDelivery() != null)
+			orderItem.setDelivery(changItem.getNewDelivery());
+		if (changItem.getNewPrice() != null)
+			orderItem.setPrice(changItem.getNewPrice());
+		if (changItem.getNewQty() != null && changItem.getNewQty() > 0)
+			orderItem.setQty(changItem.getNewQty());
+		if (changItem.getNewTaxrate() != null)
+			orderItem.setTaxrate(changItem.getNewTaxrate());
+		if (changItem.getNewProduct() != null) {
+			orderItem.setProductId(changItem.getNewProduct().getId());
 		}
+		return orderItem;
 	}
 
 	@Override
@@ -184,16 +221,15 @@ public class PurchaseOrderChangeServiceImpl implements PurchaseOrderChangeServic
 		if (isB2b)
 			orderChange.setReplySendStatus((short) Status.NOT_UPLOAD.value());
 		orderChange = purchaseOrderChangeDao.save(orderChange);
-		PurchaseOrder order = orderChange.getOrder();
 		// 将回复信息推送给采购企业采购员(或管理员)
-		if (order.getUserUU() != null) {
+		if (orderChange.getUserUU() != null) {
 			// Android
-			XingePusher.pushSingleAccountAndroid(order.getUserUU().toString(), "新增采购变更单回复", "单号:" + order.getCode()
-					+ ",供应商:" + enterpriseDao.findOne(order.getVendUU()).getEnName(),
+			XingePusher.pushSingleAccountAndroid(orderChange.getUserUU().toString(), (orderChange.isAgreed()? "同意了" : "不同意") + 
+					"您的采购变更", "供应商:" + enterpriseDao.findOne(orderChange.getVendUU()).getEnName(),
 					"com.sas.mobile.activity.PurchaseChangeActivity");
 			// IOS
-			XingePusher.pushSingleAccountIOS(order.getUserUU().toString(), "新增采购变更单回复" + "单号:" + order.getCode()
-					+ ",供应商:" + enterpriseDao.findOne(order.getVendUU()).getEnName());
+			XingePusher.pushSingleAccountIOS(orderChange.getUserUU().toString(), (orderChange.isAgreed()? "同意了" : "不同意") + 
+					"您的采购变更" + ",供应商:" + enterpriseDao.findOne(orderChange.getVendUU()).getEnName());
 		}
 		return orderChange;
 	}