wangxiaoming 5 år sedan
förälder
incheckning
51af30270b

+ 36 - 30
iamberry-wechat-service/src/main/java/com/iamberry/wechat/service/mq/EfastOrderServiceImpl.java

@@ -160,7 +160,7 @@ public class EfastOrderServiceImpl implements EfastOrderService {
 
 
 	@Override
-	public boolean addOrderInfoToEfast(MQMessage message) throws Exception {
+	public boolean addOrderInfoToEfast(MQMessage message) {
 		logger.info("推送订单开始,订单号:"+message.getServiceToMessage());
 		
 		// orderInfo
@@ -176,24 +176,28 @@ public class EfastOrderServiceImpl implements EfastOrderService {
 		
 		// set Requeset Data
 		Map<String, String> requestData = new HashMap<String, String>();
-		
-		int money = order.getSalesYetAmount();
-		
-		if (order.getCouponId() != null && !"".equals(order.getCouponId())) {
-			CouponItem couponItem = new CouponItem();
-			couponItem.setCouponItemId(order.getCouponId());
-			couponItem.setCouponItemUseropenid(order.getSalesOpenid());
-			CouponType couponType = cartService.getCouponReduceByItemId(couponItem);
-			if (null != couponType) {
-				switch (couponType.getCouponType()) {
-				case 1:
-					money += couponType.getCouponReduce();
-					break;
-				case 2:
-					money += order.getSalesAmount() * couponType.getCouponReduce()/100;
-					break;
-				}
+
+		//总优惠
+		Double couponMoney =  Double.valueOf(order.getSalesAmount() - order.getSalesYetAmount());
+
+		//计算分摊优惠
+		//R(X1) =  X1 / X1+X2+…X(n)  * reduce   订单项分摊优惠
+		Integer allcouponMoney = order.getSalesAmount() - order.getSalesYetAmount();
+		Integer  salesYetAmount = order.getSalesYetAmount();
+		double yetAmount = order.getSalesAmount();
+		for (int k=0;k<items.size();k++) {
+			Double itemTotal = Double.valueOf(items.get(k).getItemTotal());
+			Double itemPayMonry = itemTotal / yetAmount * couponMoney;	//在第K项使用的优惠
+
+			Integer newItemTotal = items.get(k).getItemTotal();
+			if((k+1) == items.size()){
+				newItemTotal -= allcouponMoney;
+			}else{
+				Integer newPayMonry = (itemPayMonry.intValue()/100)*100;
+				allcouponMoney = allcouponMoney - newPayMonry;	//总优惠减去 第K项使用的优惠
+				newItemTotal -= newPayMonry;
 			}
+			items.get(k).setItemTotal(newItemTotal);
 		}
 		
 		requestData.put("app_act", "rst.trade.new.add");
@@ -233,21 +237,21 @@ public class EfastOrderServiceImpl implements EfastOrderService {
 		orderData.put("goods_amount", order.getSalesAmount());					// 产品总价
 		orderData.put("goods_count", items.size());										// 产品数量
 		orderData.put("mobile", order.getSalesAddressTel());							// 手机号码
-		orderData.put("money_paid", money);					// 已付款
 		orderData.put("oid", order.getSalesOrderid());									// 订单号
-		orderData.put("order_amount", order.getSalesAmount());					// 订单金额
-		
+
 		/**
 		 * 产品信息
 		 */
 		List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
 		for (OrderItem item : items) {
 			Map<String, Object> orders1 = new HashMap<String, Object>();
-			orders1.put("goods_name", item.getItemProductName());							// 产品名称
-			orders1.put("goods_number", item.getItemNum());									// 产品数量
-			orders1.put("goods_price", item.getItemProductPrice());					// 产品原价
-			orders1.put("outer_sku", item.getProduectRemark());										// 产品SKU
-			orders1.put("payment_ft", item.getItemProductDiscount());												// 产品分摊价
+			orders1.put("goods_name", item.getItemProductName());                            // 产品名称
+			orders1.put("goods_number", item.getItemNum());                                    // 产品数量
+			orders1.put("goods_price", (item.getItemProductPrice()));                    // 产品原价
+			orders1.put("goods_discount", (item.getItemProductDiscount()));                    // 产品售价
+			orders1.put("goods_total", (item.getItemTotal()));                    // 产品售价
+			orders1.put("outer_sku", item.getProduectRemark());                                // 产品SKU
+//			orders1.put("payment_ft", item.getItemProductDiscount());												// 产品分摊价
 			maps.add(orders1);
 		}
 		
@@ -265,9 +269,11 @@ public class EfastOrderServiceImpl implements EfastOrderService {
 		orderData.put("shipping_name", "yto");											// 快递公司代码
 		orderData.put("tel", order.getSalesAddressTel());											// 我司电话
 		orderData.put("to_buyer", "");													// 商家备注
-		orderData.put("total_amount", order.getSalesAmount());					// 商家备注
 		orderData.put("user_name", order.getSalesOpenid());							// 买家账户   百胜根据user_name来判断是否有重复,传openId是为了防止重复
-		orderData.put("zipcode", order.getSalesAddressPostnum());						// 邮编
+		orderData.put("zipcode", order.getSalesAddressPostnum());                        // 邮编
+		orderData.put("total_amount", (order.getSalesAmount()));                    // 订单总额
+		orderData.put("money_paid", order.getSalesYetAmount());                     // 已付款
+		orderData.put("order_amount", order.getSalesYetAmount());                   // 应付款,应付款金额要与已付款金额相同
 		
 		
 		com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();
@@ -297,10 +303,10 @@ public class EfastOrderServiceImpl implements EfastOrderService {
 				}
 			}
 			logger.error(this, "add-推送订单失败,订单号为:" + order.getSalesOrderid() + "的订单,RST返回信息:" + result);
-			throw new Exception(jsonObject.getString("msg"));
+			return true;
 		} catch (Exception e) {
 			e.printStackTrace();
-			throw e;
+			return false;
 		}
 	}
 	

+ 36 - 0
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/pay/ResponseWechatPayHandler.java

@@ -12,6 +12,7 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.iamberry.wechat.core.entity.ResultMsg;
 import com.iamberry.wechat.core.entity.order.OrderItem;
 import com.iamberry.wechat.tools.ResultInfo;
 import com.iamberry.wechat.tools.SendMessageUtil;
@@ -21,6 +22,8 @@ import org.jdom.input.SAXBuilder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.xml.sax.InputSource;
 
 import com.iamberry.app.tool.log.RatFWLogger;
@@ -434,4 +437,37 @@ public class ResponseWechatPayHandler {
 		return ruleMoney.getRuleNum() == null ? 0 : ruleMoney.getRuleNum().intValue();
 	*/
 	}
+
+
+	/**
+	 * 测试订单推送
+	 * @param orderId
+	 * @return
+	 */
+	@ResponseBody
+	@RequestMapping(value = "/test_order")
+	public ResultMsg checkOrderPaySuccess(
+			@RequestParam(value = "orderId") String orderId) {
+		ResultMsg msg = new ResultMsg();
+
+		// 给rst推送订单
+		try {
+			MQMessage message = new MQMessage();
+			message.setServiceToMessage(orderId);
+			message.setServiceOtherMessage("efast.trade.new.add");
+			message.setServiceIsSend(2);			// 没有推送的信息
+			message.setServiceStatus(1); 			// 推送成功
+			message.setServiceType(1); 				// 添加订单信息
+			message.setServiceHandlerObjectName("efastOrderServiceImpl");
+			message.setServiceHandlerMethodName("addOrderInfoToEfast");
+			mQservice.insertMQMessage(message);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+
+		return msg;
+	}
+
+
 }