|
@@ -51,6 +51,7 @@ import com.google.gson.Gson;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import me.chanjar.weixin.common.error.WxErrorException;
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -203,6 +204,99 @@ public class StoreOrderController extends AppBaseController {
|
|
|
return R.ok().put("order",order).put("productPackage",productPackage).put("payLimitTime",payLimitTime);
|
|
|
}
|
|
|
|
|
|
+ @Login
|
|
|
+ @ApiOperation("获取订单-轮询获取信息")
|
|
|
+ @GetMapping("/getStoreOrderByOrderIdTz")
|
|
|
+ public R getStoreOrderByIdRemote(@RequestParam(value = "orderId",required = false) Long orderId,
|
|
|
+ @RequestParam(value = "payCode",required = false) String payCode, HttpServletRequest request){
|
|
|
+ // 根据订单查询payment
|
|
|
+ if(ObjectUtil.isNull(orderId)&&ObjectUtil.isNull(payCode)){
|
|
|
+ return R.error("参数错误");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<FsStorePayment> fsStorePayments;
|
|
|
+ if(ObjectUtil.isNotNull(orderId)){
|
|
|
+ fsStorePayments = fsStorePaymentMapper.selectFsStorePaymentByOrder(orderId);
|
|
|
+ } else{
|
|
|
+ fsStorePayments = fsStorePaymentMapper.selectFsStorePaymentByPayCode(payCode);
|
|
|
+ }
|
|
|
+ // 如果已经有支付成功的记录
|
|
|
+ if(CollectionUtils.isNotEmpty(fsStorePayments)){
|
|
|
+ for (FsStorePayment fsStorePayment : fsStorePayments) {
|
|
|
+ // 如果状态为已支付或者已经退款
|
|
|
+ if(ObjectUtil.equal(fsStorePayment.getStatus(),1) || ObjectUtil.equal(fsStorePayment.getStatus(), -1)){
|
|
|
+ return R.ok().put("orderId", orderId)
|
|
|
+ .put("payCode", payCode)
|
|
|
+ .put("status", fsStorePayment.getStatus());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果没找到,查看付款信息是否有未支付的 且 类型为tzbank 且 trade_no 不为空的数据
|
|
|
+ // 调用台州银行接口查询订单信息
|
|
|
+ List<FsStorePayment> fsStorePayments1;
|
|
|
+ if(ObjectUtil.isNotNull(orderId)){
|
|
|
+ fsStorePayments1 = fsStorePaymentMapper.selectFsStorePaymentTzUnpayByOrder(orderId);
|
|
|
+ } else {
|
|
|
+ fsStorePayments1 = fsStorePaymentMapper.selectFsStorePaymentTzUnpayByPayCode(payCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(fsStorePayments1)){
|
|
|
+ FsStorePayment fsStorePayment = fsStorePayments1.get(0);
|
|
|
+
|
|
|
+ RequestDTO<QueryOrderRestDTO> requestDTO = new RequestDTO<>();
|
|
|
+
|
|
|
+ QueryOrderRestDTO queryOrderRestDTO = new QueryOrderRestDTO();
|
|
|
+
|
|
|
+ queryOrderRestDTO.setOrderFlowNo(fsStorePayment.getTradeNo());
|
|
|
+ TzConfigInfoDTO tzConfigInfoDTO = TzConfigUtils.getConfig();
|
|
|
+
|
|
|
+ queryOrderRestDTO.setPlatMerCstNo(tzConfigInfoDTO.getPlatMerCstNo());
|
|
|
+
|
|
|
+ requestDTO.setReqBody(queryOrderRestDTO);
|
|
|
+ requestDTO.setReqHeader(TzReqHeaderDTO.getInstance(fsStorePayment.getPayCode()));
|
|
|
+
|
|
|
+ TzReqResultDTO<QueryOrderInfoDTO> resultDTO = null;
|
|
|
+ try {
|
|
|
+ resultDTO = tzBankService.payQueryOrder(requestDTO);
|
|
|
+ String retCode = resultDTO.getRetCode();
|
|
|
+ // 如果查询支付成功
|
|
|
+ if(retCode.equals("00000000")){
|
|
|
+ QueryOrderInfoDTO body = resultDTO.getBody();
|
|
|
+ String status = body.getStatus();
|
|
|
+ if("90".equals(status)){
|
|
|
+ // 如果查询支付成功 更新订单状态
|
|
|
+ orderService.payConfirm(1,orderId,fsStorePayment.getPayCode(),
|
|
|
+ fsStorePayment.getTradeNo(),body.getChlTrxId(),fsStorePayment.getTradeNo());
|
|
|
+ return R.ok().put("orderId", orderId)
|
|
|
+ .put("payCode", payCode)
|
|
|
+ .put("status", 1);
|
|
|
+ } else if("70".equals(status)) {
|
|
|
+ return R.ok().put("orderId", orderId)
|
|
|
+ .put("payCode", payCode)
|
|
|
+ .put("status", -1);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("台州银行支付回调查询失败:",e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ FsStoreOrder order=orderService.selectFsStoreOrderById(orderId);
|
|
|
+
|
|
|
+ if(ObjectUtil.isNotNull(order)){
|
|
|
+ return R.ok().put("orderId",orderId)
|
|
|
+ .put("payCode", payCode)
|
|
|
+ .put("status", order.getStatus());
|
|
|
+ } else {
|
|
|
+ // 如果没有订单信息可能是从微信收款而来
|
|
|
+ return R.ok().put("orderId", orderId)
|
|
|
+ .put("payCode", payCode)
|
|
|
+ .put("status", 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("确认订单")
|
|
@@ -342,8 +436,7 @@ public class StoreOrderController extends AppBaseController {
|
|
|
reqBodyDTO.setPayNotifyUrl(tzConfigInfoDTO.getPayNotifyUrl());
|
|
|
reqBodyDTO.setPayerName(user.getUsername());
|
|
|
reqBodyDTO.setPayerMobileNo(user.getPhone());
|
|
|
- //TODO 商品信息必须获取
|
|
|
- reqBodyDTO.setGoodsInfo("测试");
|
|
|
+ reqBodyDTO.setGoodsInfo("商城订单支付");
|
|
|
// 不需要分账
|
|
|
reqBodyDTO.setNeedLedger("00");
|
|
|
reqBodyDTO.setClientIp(IPUtils.getIpAddr(ServletUtils.getRequest()));
|
|
@@ -380,7 +473,9 @@ public class StoreOrderController extends AppBaseController {
|
|
|
mt.setTradeNo(miniProgramCode.getBody().getOrderNo());
|
|
|
fsStorePaymentMapper.updateFsStorePayment(mt);
|
|
|
redisCache.setCacheObject("isPaying:"+order.getId(),order.getId().toString(),1, TimeUnit.MINUTES);
|
|
|
- return R.ok().put("payType",param.getPayType()).put("result",miniProgramCode.getBody());
|
|
|
+ TzMiniProgramCodeRespDTO result = miniProgramCode.getBody();
|
|
|
+ result.setPayCode(payCode);
|
|
|
+ return R.ok().put("payType",param.getPayType()).put("result",result);
|
|
|
} else {
|
|
|
return R.error(miniProgramCode.getRetMsg());
|
|
|
}
|
|
@@ -557,6 +652,9 @@ public class StoreOrderController extends AppBaseController {
|
|
|
List<FsStorePayment> payments=fsStorePaymentMapper.selectFsStorePaymentByOrder(order.getId());
|
|
|
if(payments.size()>0){
|
|
|
for(FsStorePayment payment : payments){
|
|
|
+ if(StringUtils.isEmpty(payment.getTradeNo())){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
OrderQueryDTO orderQueryDTO = new OrderQueryDTO();
|
|
|
orderQueryDTO.setLowOrderId("store-"+payment.getPayCode());
|
|
|
RequestDTO<QueryOrderRestDTO> requestDTO = new RequestDTO<>();
|
|
@@ -576,6 +674,13 @@ public class StoreOrderController extends AppBaseController {
|
|
|
QueryOrderInfoDTO body = resultDTO.getBody();
|
|
|
if(ObjectUtil.isNotNull(body)){
|
|
|
if("80".equals(body.getStatus()) || "90".equals(body.getStatus())){
|
|
|
+ // 更新订单状态和支付状态
|
|
|
+ payment.setStatus(1);
|
|
|
+ fsStorePaymentMapper.updateFsStorePayment(payment);
|
|
|
+ orderService.payConfirm(1, order.getId(), payment.getPayCode(),
|
|
|
+ payment.getTradeNo(),
|
|
|
+ body.getChlTrxId(),
|
|
|
+ payment.getTradeNo());
|
|
|
return R.error("订单已支付");
|
|
|
}
|
|
|
}
|
|
@@ -895,6 +1000,68 @@ public class StoreOrderController extends AppBaseController {
|
|
|
else{
|
|
|
return R.error(wxOrder.getMessage());
|
|
|
}
|
|
|
+ } else if(fsPayConfig.getType().equals("tzbk")){
|
|
|
+ TzConfigInfoDTO tzConfigInfoDTO = JSON.parseObject(json, TzConfigInfoDTO.class);
|
|
|
+
|
|
|
+ TzPayCreateOrderReqBodyDTO reqBodyDTO = new TzPayCreateOrderReqBodyDTO();
|
|
|
+ RequestDTO<TzPayCreateOrderReqBodyDTO> requestDTO = new RequestDTO<>();
|
|
|
+ reqBodyDTO.setOrderNo("store"+order.getOrderCode());
|
|
|
+ reqBodyDTO.setOrderSource("02");
|
|
|
+ reqBodyDTO.setTrxAmt(storePayment.getPayMoney());
|
|
|
+ reqBodyDTO.setCurrency("CNY");
|
|
|
+ reqBodyDTO.setTransType("2001");
|
|
|
+ reqBodyDTO.setTradeMerCstNo(tzConfigInfoDTO.getPlatMerCstNo());
|
|
|
+ reqBodyDTO.setPlatMerCstNo(tzConfigInfoDTO.getPlatMerCstNo());
|
|
|
+ reqBodyDTO.setBusinessCstNo(user.getUserId().toString());
|
|
|
+ reqBodyDTO.setPayNotifyUrl(tzConfigInfoDTO.getPayNotifyUrl());
|
|
|
+ reqBodyDTO.setPayerName(user.getUsername());
|
|
|
+ reqBodyDTO.setPayerMobileNo(user.getPhone());
|
|
|
+ reqBodyDTO.setGoodsInfo("商城订单支付");
|
|
|
+ // 不需要分账
|
|
|
+ reqBodyDTO.setNeedLedger("00");
|
|
|
+ reqBodyDTO.setClientIp(IPUtils.getIpAddr(ServletUtils.getRequest()));
|
|
|
+ // 获取订单到期时间
|
|
|
+ String redisKey = String.valueOf(StrUtil.format("{}{}",
|
|
|
+ StoreConstants.REDIS_ORDER_OUTTIME_UNPAY, order.getId()));
|
|
|
+ Long expire = redisCache.getExpire(redisKey);
|
|
|
+ Long currentTimeMillis = System.currentTimeMillis();
|
|
|
+
|
|
|
+ reqBodyDTO.setExpiredTime(String.valueOf(currentTimeMillis+expire));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ requestDTO.setReqHeader(TzReqHeaderDTO.getInstance(payCode));
|
|
|
+ requestDTO.setReqBody(reqBodyDTO);
|
|
|
+ try {
|
|
|
+ // 创建订单
|
|
|
+ TzReqResultDTO<TzPayCreateOrderRspDTO> payCreateOrder = tzBankService.payCreateOrder(requestDTO);
|
|
|
+ // 获得小程序请求码
|
|
|
+ if("00000000".equals(payCreateOrder.getRetCode())){
|
|
|
+ TzPayCreateOrderRspDTO body = payCreateOrder.getBody();
|
|
|
+
|
|
|
+ RequestDTO<TzMiniProgramCodeReqDTO> reqDTORequestDTO = new RequestDTO<>();
|
|
|
+ TzMiniProgramCodeReqDTO tzMiniProgramCodeReqDTO = new TzMiniProgramCodeReqDTO();
|
|
|
+ tzMiniProgramCodeReqDTO.setOrderNo(body.getOrderFlowNo());
|
|
|
+ tzMiniProgramCodeReqDTO.setPlatMerCstNo(tzConfigInfoDTO.getPlatMerCstNo());
|
|
|
+ tzMiniProgramCodeReqDTO.setBusinessCstNo(user.getUserId().toString());
|
|
|
+ reqDTORequestDTO.setReqHeader(TzReqHeaderDTO.getInstance(payCode));
|
|
|
+ reqDTORequestDTO.setReqBody(tzMiniProgramCodeReqDTO);
|
|
|
+ TzReqResultDTO<TzMiniProgramCodeRespDTO> miniProgramCode = tzBankService.miniProgramCode(reqDTORequestDTO);
|
|
|
+ if("00000000".equals(miniProgramCode.getRetCode())){
|
|
|
+ FsStorePayment mt=new FsStorePayment();
|
|
|
+ mt.setPaymentId(storePayment.getPaymentId());
|
|
|
+ mt.setTradeNo(miniProgramCode.getBody().getOrderNo());
|
|
|
+ fsStorePaymentMapper.updateFsStorePayment(mt);
|
|
|
+ redisCache.setCacheObject("isPaying:"+order.getId(),order.getId().toString(),1, TimeUnit.MINUTES);
|
|
|
+ return R.ok().put("result",miniProgramCode.getBody());
|
|
|
+ } else {
|
|
|
+ return R.error(miniProgramCode.getRetMsg());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("系统异常",e);
|
|
|
+ return R.error("系统异常,请联系管理员!");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|