嗨森逛服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hai-server/hai-cweb/src/main/java/com/cweb/controller/pay/TuanYouController.java

228 lines
12 KiB

package com.cweb.controller.pay;
import com.alibaba.fastjson.JSONObject;
import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode;
import com.hai.common.security.AESEncodeUtil;
import com.hai.common.utils.DateUtil;
import com.hai.common.utils.ResponseMsgUtil;
import com.hai.config.CommonSysConst;
import com.hai.config.HuiLianTongUnionCardConfig;
import com.hai.config.UnionPayConfig;
import com.hai.config.WxOrderConfig;
import com.hai.dao.HighGasOrderRefundMapper;
import com.hai.entity.HighChildOrder;
import com.hai.entity.HighGasOrderRefund;
import com.hai.entity.HighOrder;
import com.hai.enum_type.OrderPayTypeEnum;
import com.hai.model.OrderRefundModel;
import com.hai.model.ResponseData;
import com.hai.service.HighOilCardService;
import com.hai.service.HighOrderService;
import com.hai.service.HighUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.security.*;
import java.text.SimpleDateFormat;
import java.util.*;
@Controller
@RequestMapping(value = "/tuanyou")
@Api(value = "团油回调")
public class TuanYouController {
private static Logger log = LoggerFactory.getLogger(TuanYouController.class);
@Resource
private HighOrderService highOrderService;
@Resource
private HighGasOrderRefundMapper highGasOrderRefundMapper;
@Resource
private HighUserService highUserService;
@Resource
private HighOilCardService oilCardService;
@RequestMapping(value = "/orderPaymentNotify", method = RequestMethod.POST)
@ApiOperation(value = "订单支付回调")
public void orderPaymentNotify(HttpServletRequest request, HttpServletResponse response) {
try {
} catch (Exception e) {
log.error("WechatPayController --> wechatNotify() error!", e);
}
}
@RequestMapping(value = "/orderRefundNotify", method = RequestMethod.POST)
@ApiOperation(value = "订单退款回调")
@ResponseBody
public void orderRefundNotify(@RequestBody String reqBodyStr,HttpServletRequest request, HttpServletResponse response) {
try {
log.info(reqBodyStr);
HighGasOrderRefund highGasOrderRefund = new HighGasOrderRefund();
highGasOrderRefund.setCreateTime(new Date());
highGasOrderRefund.setReturnContent(reqBodyStr);
highGasOrderRefundMapper.insert(highGasOrderRefund);
JSONObject dataObject = JSONObject.parseObject(reqBodyStr, JSONObject.class);
String dataStr = AESEncodeUtil.aesDecryptByBytes(AESEncodeUtil.base64Decode(dataObject.getString("data")), CommonSysConst.getSysConfig().getTuanYouAppSecret());
JSONObject object = JSONObject.parseObject(dataStr);
// 查询订单
HighOrder order = highOrderService.getOrderByOrderNo(object.getString("thirdOrderNo"));
// 订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消 6.退款中 7.拒绝退款
if (order != null) {
if (order.getOrderStatus() == 2 || order.getOrderStatus() == 3 || order.getOrderStatus() == 6 || order.getOrderStatus() == 7) {
// 退单结果 true:成功 false:失败
if (object.getBoolean("refundResult") == true && order != null) {
if (order.getPayType() == 2) {
OrderRefundModel orderRefundModel = WxOrderConfig.orderToRefund(order.getPaySerialNo(), order.getPayRealPrice(), order.getPayRealPrice());
if(orderRefundModel.getResult_code().equals("SUCCESS")) {
order.setOrderStatus(4);
//order.setRefundTime(new Date());
//order.setRefundPrice(order.getPayRealPrice());
highOrderService.updateOrderDetail(order);
}
} else if (order.getPayType() == 3){
String remark = "订单" + order.getOrderNo() + "退款,退还积分:" + order.getPayGold();
// 积分退款
highUserService.goldHandle(order.getMemId(), order.getPayGold(),1, 3, order.getId() , remark);
order.setOrderStatus(4);
//order.setRefundTime(new Date());
//order.setRefundPrice(order.getPayRealPrice());
highOrderService.updateOrderDetail(order);
} else if (order.getPayType() == 4) {
String refundOrderNo = String.valueOf(System.currentTimeMillis());
JSONObject refund = HuiLianTongUnionCardConfig.refund(refundOrderNo, order.getPaySerialNo());
if(!refund.getString("respCode").equals("0000")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR,refund.getString("respMessage"));
}
JSONObject consumptionResult = HuiLianTongUnionCardConfig.resolveResponse(refund.getString("data"));
if (consumptionResult.getBoolean("success") != true) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "交易失败!"+consumptionResult.getString("message"));
}
order.setOrderStatus(4);
//order.setRefundTime(new Date());
//order.setRefundPrice(order.getPayRealPrice());
highOrderService.updateOrderDetail(order);
} else if (order.getPayType() == 5) {
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, 00);
startTime.set(Calendar.MINUTE, 00);
startTime.set(Calendar.SECOND, 00);
Calendar endTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, 23);
startTime.set(Calendar.MINUTE, 59);
startTime.set(Calendar.SECOND, 59);
// 订单是否处于当日的订单
if (DateUtil.isEffectiveDate(order.getPayTime(), startTime.getTime(), endTime.getTime())) {
// 订单撤销
JSONObject refund = UnionPayConfig.cancel(UnionPayConfig.MER_ID3, UnionPayConfig.TERM_ID3, order.getOrderNo(), order.getPaySerialNo());
System.out.println(refund.toJSONString());
if (!refund.getString("resultcode").equals("00") || !refund.getString("resultcode").equals("W6")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, refund.getString("returnmsg"));
}
order.setOrderStatus(4);
//order.setRefundTime(new Date());
//order.setRefundPrice(order.getPayRealPrice());
highOrderService.updateOrderDetail(order);
} else {
// 订单退款
JSONObject refund = UnionPayConfig.zwrefund(UnionPayConfig.MER_ID3, UnionPayConfig.TERM_ID3, order.getOrderNo(), order.getPaySerialNo(), order.getPayRealPrice().multiply(new BigDecimal("100")).longValue());
System.out.println(refund.toJSONString());
if (!refund.getString("resultcode").equals("00") || !refund.getString("resultcode").equals("W6")) {
JSONObject refund2 = UnionPayConfig.zwrefund(UnionPayConfig.MER_ID1, UnionPayConfig.TERM_ID1, order.getOrderNo(), order.getPaySerialNo(), order.getPayRealPrice().multiply(new BigDecimal("100")).longValue());
if (!refund2.getString("resultcode").equals("00") || !refund.getString("resultcode").equals("W6")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, refund2.getString("returnmsg"));
}
}
order.setOrderStatus(4);
//order.setRefundTime(new Date());
//order.setRefundPrice(order.getPayRealPrice());
highOrderService.updateOrderDetail(order);
}
} else if (order.getPayType().equals(OrderPayTypeEnum.type7.getType())) {
// 油卡退款
oilCardService.refund(order.getOrderNo());
}
} else if (!object.getBoolean("refundResult") == true && order != null) {
order.setOrderStatus(7);
//order.setRefusalRefundContent(object.getString("refundFailReason"));
highOrderService.updateOrderDetail(order);
}
}
}
} catch (Exception e) {
log.error("WechatPayController --> wechatNotify() error!", e);
} finally {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter writer= null;
try {
writer = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
writer.write("success");
}
}
@RequestMapping(value = "/abnormalOrderRefund", method = RequestMethod.POST)
@ApiOperation(value = "异常订单退款")
@ResponseBody
public ResponseData abnormalOrderRefund(@RequestBody JSONObject body) {
try {
if (StringUtils.isNotBlank(body.getString("orderNo"))) {
// 查询订单
HighOrder order = highOrderService.getOrderByOrderNo(body.getString("orderNo"));
// 订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消 6.退款中 7.拒绝退款
if (order != null && order.getOrderStatus() == 2) {
OrderRefundModel orderRefundModel = WxOrderConfig.orderToRefund(order.getPaySerialNo(), order.getPayRealPrice(), order.getPayRealPrice());
if(orderRefundModel.getResult_code().equals("SUCCESS")) {
for (HighChildOrder childOrder : order.getHighChildOrderList()) {
childOrder.setChildOrderStatus(4);
}
order.setOrderStatus(4);
//order.setRefundTime(new Date());
//order.setRefundPrice(order.getPayRealPrice());
highOrderService.updateOrder(order);
return ResponseMsgUtil.success("退款成功");
}
}
}
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败");
} catch (Exception e) {
return ResponseMsgUtil.exception(e);
}
}
}