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.
228 lines
12 KiB
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);
|
|
}
|
|
}
|
|
|
|
}
|
|
|