Procházet zdrojové kódy

watero推送订单

wangxiaoming před 5 roky
rodič
revize
57de85ecca

+ 26 - 40
watero-wechat-service/src/main/java/com/iamberry/wechat/service/mq/EfastOrderServiceImpl.java

@@ -167,42 +167,29 @@ public class EfastOrderServiceImpl implements EfastOrderService {
 			// set Requeset Data
 			Map<String, String> requestData = new HashMap<String, String>();
 
-			int money = order.getSalesYetAmount();
-
-			double couponMoney = 0;
-			double avgPercentage = 0.0;  //均摊比例
-			//将优惠券抵消金额加入实付金额中
-			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:
-							couponMoney = couponType.getCouponReduce();
-							break;
-						case 2:
-							couponMoney = order.getSalesAmount() * couponType.getCouponReduce();
-							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);
 			}
 
-			//只计算用户用微信支付的金额,不包含余额支付
-			if (order.getBalancePayAmount() != null && !"".equals(order.getBalancePayAmount().toString())) {
-				money = money - order.getBalancePayAmount().intValue();
-				couponMoney += order.getBalancePayAmount().intValue();
-			}
-			//计算分摊金额比例
-			if (items != null && items.size() > 0) {
-				double avgMoney = 0;
-				for (OrderItem item : items) {
-					avgMoney += item.getItemNum().intValue() * item.getItemProductDiscount();
-				}
-				//计算均摊比例
-				avgPercentage = 1 - couponMoney / avgMoney;
-			}
 
 			requestData.put("app_act", "rst.trade.new.add");
 
@@ -244,10 +231,7 @@ 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", money);                                    // 应付款,应付款金额要与已付款金额相同
-
 
 			/**
 			 * 产品信息
@@ -258,11 +242,12 @@ public class EfastOrderServiceImpl implements EfastOrderService {
 				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() * avgPercentage * item.getItemNum()));                // 产品分摊价
+//				orders1.put("payment_ft", (item.getItemProductDiscount() * avgPercentage * item.getItemNum()));                // 产品分摊价
 				maps.add(orders1);
 			}
-
 			orderData.put("orders", maps);                                                    // 订单产品
 			orderData.put("pay_name", "weixinpay");                                            // 支付方式
 			orderData.put("pay_time", DateTimeUtil.format(order.getSalesTransactionDate()));// 支付时间
@@ -273,10 +258,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()/100.0));					// 订单总额
-			orderData.put("total_amount", (order.getSalesAmount()));                    // 订单总额
 			orderData.put("user_name", order.getSalesOpenid());                            // 买家账户   百胜根据user_name来判断是否有重复,传openId是为了防止重复
 			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();

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

@@ -15,6 +15,7 @@ import java.util.UUID;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.iamberry.wechat.core.entity.ResultMsg;
 import com.iamberry.wechat.core.entity.rent.ReserveOrder;
 import com.iamberry.wechat.face.reserve.ReserveService;
 import org.apache.commons.lang3.StringUtils;
@@ -24,6 +25,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;
@@ -876,4 +879,35 @@ public class ResponseWechatPayHandler {
 
 		}
 	}
+
+	/**
+	 * 测试订单推送
+	 * @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;
+//	}
+
 }