瀏覽代碼

福利卡返利功能开发完成。

xian 5 年之前
父節點
當前提交
3f989f959e

+ 75 - 142
iamberry-wechat-web/src/main/java/com/iamberry/wechat/handles/pay/ResponseWechatPayHandler.java

@@ -14,11 +14,13 @@ import javax.servlet.http.HttpServletResponse;
 
 import com.iamberry.wechat.core.entity.ResultMsg;
 import com.iamberry.wechat.core.entity.order.OrderItem;
+import com.iamberry.wechat.face.coupon.WelfareService;
 import com.iamberry.wechat.tools.ResultInfo;
 import com.iamberry.wechat.tools.SendMessageUtil;
 import org.jdom.Document;
 import org.jdom.Element;
 import org.jdom.input.SAXBuilder;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -60,19 +62,13 @@ public class ResponseWechatPayHandler {
 	@Autowired
 	private RatFWLogger ratFWLogger;
 	
-	private Object lock = new Object();
+	private final Object lock = new Object();
 	
 	@Autowired
 	private CartService cartService;
 	
 	@Autowired
 	private PlaceOrderService placeOrderService;
-	
-	@Autowired
-	private PlaceInfoService placeInfoService;
-	
-	@Autowired
-	private MemberService memberService;
 
 	@Autowired
 	private SendMessageUtil sendMessageUtil;
@@ -84,10 +80,7 @@ public class ResponseWechatPayHandler {
 	private MQServiceProxy mQservice;
 	
 	@Autowired
-	private RebackServices rebackServices;
-	
-	@Autowired
-	private QrcodeService qrcodeService;			//二维码处理
+	private WelfareService welfareService;
 	
 	@Autowired
 	CashLogService cashLogService;
@@ -103,150 +96,90 @@ public class ResponseWechatPayHandler {
 			HttpServletResponse response) throws IOException {
 		synchronized (lock) {
 			String inputLine;
-			String notityXml = "";
+			StringBuilder notityXml = new StringBuilder();
 			String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
 			try {
 				//获取XML参数
 				while ((inputLine = request.getReader().readLine()) != null) {
-					notityXml += inputLine;
+					notityXml.append(inputLine);
 				}
 				request.getReader().close();
-				//解析XML格式的数据
-				Map m = parseXmlToList2(notityXml);
+				// 解析XML格式的数据
+				Map m = parseXmlToList2(notityXml.toString());
 				WxPayResult wpr = new WxPayResult();
-				wpr=setWxPayResultObj(wpr,m);
-				//判断
-				if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
-					//resXml:返回给微信服务器的数据
-					resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
-					String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
-//System.out.println("===========pay 117==============");
-					
-					if (orderIdMD5.equals(wpr.getOutTradeNo())) {
-						Date nowDate = new Date();
-						// 组装数据
-						Order order = new Order();
-						order.setSalesOrderid(orderIdMD5);
-						order.setSalesStatus(2); // 已支付
-						order.setSalesTransactionId(wpr.getTransactionId()); // 微信支付ID
-						order.setSalesTransactionDate(new Date()); // 微信支付时间
-						order.setSalesOpenid(wpr.getOpenid());
-
-						Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
-						if(or.getSalesStatus() != 1){
-							return;
-						}
-
-						List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
-						
-						// 修改订单状态
-						int count = cartService.updateOrderStatus(order);
-						
-//System.out.println("===========pay 132 修改订单状态==============");
-						//修改优惠券状态
-						order=cartService.selectOrderInfoById(order);
-						
-//System.out.println("===========pay 136 修改订单状态=============="+order.getSalesOrderid());
-						String couponId=order.getCouponId();
-						
-						if(couponId!=null && !couponId.equals("")){
-							CouponItem couponItem=new CouponItem();
-							couponItem.setCouponItemId(couponId);
-							couponItem.setCouponUseStatus(2);
-							couponItem.setCouponUseDate(new Date());
-							couponItemService.updateCouponItemById(couponItem);
-						}
-						//更新账户余额
-						int balancePayAmount=order.getBalancePayAmount();
-						if(balancePayAmount>0){
-							Member member=new Member();
-							member.setUserOpenid(order.getSalesOpenid());
-							member.setUserIncome(-balancePayAmount);
-							memberService.updateUserIncomeByOpenId(member);
-							
-							//现金使用记录
-							CashLog log=new CashLog();
-							log.setCashLogsIntroduction("订单支出");
-							log.setCashLogsNum(balancePayAmount);
-							log.setCashLogsOpenid(member.getUserOpenid());
-							log.setCashLogsType(2);
-							log.setCashLogsResType(3);
-							log.setCashLogsOrderid(order.getSalesOrderid());
-							log.setCashLogsCreateDate(nowDate);
-							count=cashLogService.addCashLog(log);
-						}
-						if (count < 1) {
-							resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
-						}
-//System.out.println("===========pay 168 快速插入=============="+count);
-						// 给订单的回调修改状态
-						try {
-							MQMessage message = new MQMessage();
-							message.setServiceToMessage(orderIdMD5);
-							message.setServiceOtherMessage(wpr.getTransactionId());
-							message.setServiceIsSend(2);			// 没有推送的信息
-							message.setServiceStatus(1); 			// 推送成功
-							message.setServiceHandlerObjectName("cartServiceImpl");
-							message.setServiceHandlerMethodName("supdateStateByOrderId");
-							message.setServiceType(1);
-							mQservice.insertMQMessage(message);
-						} catch (Exception e) {
-							// TODO: handle exception
-						}
-//System.out.println("===========pay 182  插入返利到mq=============="+count);
-						//rebackServices.loadSingleOrderReward(order);
-						
-						//添加到返利表
-						//rebackServices.loadSingleOrderReward(order);
-						// 给百胜推送信息
-						try {
-								MQMessage message = new MQMessage();
-								message.setServiceToMessage(orderIdMD5);
-								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) {
-						}
-
-						//推送消息到微信
-						DecimalFormat df=new DecimalFormat("0.00");
-						String payMoney = df.format((float)or.getSalesYetAmount()/100) + "元";
-						try {
-							sendMessageUtil.probationPaySuccess(
-									ResultInfo.PAYSUCCESS,
-									orderItemList.get(0).getItemProductName()+"...",
-									or.getSalesOrderid(),
-									payMoney,
-									ResultInfo.sendRemark1,
-									order.getSalesOpenid(),
-									ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
-						} catch (Exception e) {
-							System.out.println("推送支付成功消息失败!");
-						}
-
-						try {
-							//给父节点推送返利消息
-//							rewardsMessage(member,orderIdMD5);
-						} catch (Exception e) {
-							e.printStackTrace();
-						}
-					} else {
-						resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
-						ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
-					}
-				}else{
-					resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
+				wpr = setWxPayResultObj(wpr,m);
+				// 判断微信返回的内容是否为SUCCESS
+				assert "SUCCESS".equalsIgnoreCase(wpr.getResultCode());
+				// 验证数据
+				String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
+				assert orderIdMD5.equals(wpr.getOutTradeNo());
+				// 组装数据
+				Date nowDate = new Date();
+				Order order = new Order();
+				order.setSalesOrderid(orderIdMD5);
+				order.setSalesStatus(2);
+				order.setSalesTransactionId(wpr.getTransactionId());
+				order.setSalesTransactionDate(nowDate);
+				order.setSalesOpenid(wpr.getOpenid());
+				Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
+				assert or.getSalesStatus() == 1;
+				List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
+				// 修改订单状态
+				int count = cartService.updateOrderStatus(order);
+				// 修改优惠券状态
+				order=cartService.selectOrderInfoById(order);
+				String couponId=order.getCouponId();
+				if (couponId!=null && !"".equals(couponId)) {
+					welfareService.useCoupon(wpr.getOpenid(), orderIdMD5, couponId);
+				}
+				assert count >= 1;
+				// 给订单的回调修改状态
+				{
+					MQMessage message = new MQMessage();
+					message.setServiceToMessage(orderIdMD5);
+					message.setServiceOtherMessage(wpr.getTransactionId());
+					message.setServiceIsSend(2);
+					message.setServiceStatus(1);
+					message.setServiceHandlerObjectName("cartServiceImpl");
+					message.setServiceHandlerMethodName("supdateStateByOrderId");
+					message.setServiceType(1);
+					mQservice.insertMQMessage(message);
+				}
+				// 给RST推送信息
+				{
+					MQMessage message = new MQMessage();
+					message.setServiceToMessage(orderIdMD5);
+					message.setServiceOtherMessage("efast.trade.new.add");
+					message.setServiceIsSend(2);
+					message.setServiceStatus(1);
+					message.setServiceType(1);
+					message.setServiceHandlerObjectName("efastOrderServiceImpl");
+					message.setServiceHandlerMethodName("addOrderInfoToEfast");
+					mQservice.insertMQMessage(message);
+				}
+				//推送消息到微信
+				{
+					DecimalFormat df=new DecimalFormat("0.00");
+					String payMoney = df.format((float)or.getSalesYetAmount()/100) + "元";
+					sendMessageUtil.probationPaySuccess(
+							ResultInfo.PAYSUCCESS,
+							orderItemList.get(0).getItemProductName()+"...",
+							or.getSalesOrderid(),
+							payMoney,
+							ResultInfo.sendRemark1,
+							order.getSalesOpenid(),
+							ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
 				}
 				BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
 				out.write(resXml.getBytes());
 				out.flush();
 				out.close();
 			} catch (Exception e) {
-				e.printStackTrace();
+				BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
+				out.write("<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>".getBytes());
+				out.flush();
+				out.close();
+				LoggerFactory.getLogger(this.getClass()).error("", e);
 			}
 		}
 	}