|
@@ -13,11 +13,13 @@ import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
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;
|
|
@@ -54,42 +56,25 @@ import com.iamberry.wechat.tools.StaticInfo;
|
|
|
@RequestMapping("/callback")
|
|
|
public class ResponseWechatPayHandler {
|
|
|
|
|
|
+ private final Object lock = new Object();
|
|
|
@Autowired
|
|
|
private RatFWLogger ratFWLogger;
|
|
|
-
|
|
|
- private Object lock = new Object();
|
|
|
-
|
|
|
@Autowired
|
|
|
private CartService cartService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private PlaceOrderService placeOrderService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private PlaceInfoService placeInfoService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private MemberService memberService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private SendMessageUtil sendMessageUtil;
|
|
|
-
|
|
|
@Autowired
|
|
|
private AdminOrderService adminOrderService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private MQServiceProxy mQservice;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private RebackServices rebackServices;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private QrcodeService qrcodeService;
|
|
|
-
|
|
|
@Autowired
|
|
|
CashLogService cashLogService;
|
|
|
@Autowired
|
|
|
CouponItemService couponItemService;
|
|
|
+ @Autowired
|
|
|
+ private WelfareService welfareService;
|
|
|
|
|
|
|
|
|
* 销售订单支付回调方法
|
|
@@ -100,150 +85,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 {
|
|
|
|
|
|
while ((inputLine = request.getReader().readLine()) != null) {
|
|
|
- notityXml += inputLine;
|
|
|
+ notityXml.append(inputLine);
|
|
|
}
|
|
|
request.getReader().close();
|
|
|
-
|
|
|
- Map m = parseXmlToList2(notityXml);
|
|
|
+
|
|
|
+ Map m = parseXmlToList2(notityXml.toString());
|
|
|
WxPayResult wpr = new WxPayResult();
|
|
|
- wpr=setWxPayResultObj(wpr,m);
|
|
|
-
|
|
|
- if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
|
|
|
-
|
|
|
- resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
|
|
|
- String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
|
|
|
-
|
|
|
-
|
|
|
- if (orderIdMD5.equals(wpr.getOutTradeNo())) {
|
|
|
- Date nowDate = new Date();
|
|
|
-
|
|
|
- Order order = new Order();
|
|
|
- order.setSalesOrderid(orderIdMD5);
|
|
|
- order.setSalesStatus(2);
|
|
|
- order.setSalesTransactionId(wpr.getTransactionId());
|
|
|
- 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);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- order=cartService.selectOrderInfoById(order);
|
|
|
-
|
|
|
-
|
|
|
- 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>";
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- 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) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- 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 {
|
|
|
-
|
|
|
-
|
|
|
- } 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);
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ 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);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -319,10 +244,9 @@ public class ResponseWechatPayHandler {
|
|
|
sb.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
|
|
sb.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
|
|
sb.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
|
|
-
|
|
|
|
|
|
Document doc = (Document) sb.build(source);
|
|
|
- Element root = doc.getRootElement();
|
|
|
+ Element root = doc.getRootElement();
|
|
|
List<Element> es = root.getChildren();
|
|
|
if (es != null && es.size() != 0) {
|
|
|
for (Element element : es) {
|
|
@@ -357,81 +281,4 @@ public class ResponseWechatPayHandler {
|
|
|
wpr.setTransactionId(m.get("transaction_id").toString());
|
|
|
return wpr;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- * 奖励提醒 下线成功购买后 提示直接上线
|
|
|
- * create date 2016年5月14日
|
|
|
- * @author 穆再兴
|
|
|
- * @return
|
|
|
- */
|
|
|
- private boolean rewardsMessage(Member member,String orderid){
|
|
|
- boolean result = false;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 获取 返给父节点的 金额
|
|
|
- * create date 2016年5月14日
|
|
|
- * @author 穆再兴
|
|
|
- * @param fatherplace 父节点
|
|
|
- * @return
|
|
|
- */
|
|
|
- private int getRewardsMoneyOfFather(PlaceInfo fatherplace){
|
|
|
- if(fatherplace == null ){return 0;}
|
|
|
- return 0;
|
|
|
-
|
|
|
- switch(fatherplace.getType()){
|
|
|
- case 2:
|
|
|
- if(fatherplace.getPlaceRole() == 7){
|
|
|
- ruleMoney = this.adminOrderService.getReluByRid(97);
|
|
|
- break;
|
|
|
- }else if(fatherplace.getPlaceRole() == 4){
|
|
|
- ruleMoney = this.adminOrderService.getReluByRid(98);
|
|
|
- break;
|
|
|
- }
|
|
|
- case 3:
|
|
|
- if(fatherplace.getPlaceRole() == 5){
|
|
|
- ruleMoney = this.adminOrderService.getReluByRid(96);
|
|
|
- break;
|
|
|
- }else if(fatherplace.getPlaceRole() == 6){
|
|
|
- ruleMoney = this.adminOrderService.getReluByRid(97);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if(ruleMoney == null){return 0;}
|
|
|
- return ruleMoney.getRuleNum() == null ? 0 : ruleMoney.getRuleNum().intValue();
|
|
|
- */
|
|
|
- }
|
|
|
}
|