zhangbin 1 ano atrás
pai
commit
534273f79f

+ 39 - 3
nbjk-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java

@@ -3,6 +3,8 @@ package com.miaxis.app.controller.wx;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.miaxis.birthday.domain.BirthdayLog;
+import com.miaxis.birthday.service.IBirthdayLogService;
 import com.miaxis.common.config.WxpayConfig;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.controller.BaseController;
@@ -16,6 +18,7 @@ import com.miaxis.common.utils.ip.IpUtils;
 import com.miaxis.common.utils.uuid.CommonUtils;
 import com.miaxis.exam.domain.ExamInfo;
 import com.miaxis.exam.service.IExamInfoService;
+import com.miaxis.system.service.ISysConfigService;
 import com.miaxis.system.service.ISysDictDataService;
 import com.miaxis.vip.service.IVipUserExamService;
 import com.miaxis.wx.domain.WxOrder;
@@ -73,9 +76,17 @@ public class WxController extends BaseController {
     @Autowired
     private ISysDictDataService dictDataService;
 
+    @Autowired
+    private ISysConfigService configService;
+
+
     @Autowired
     private IExamInfoService examInfoService;
 
+    @Autowired
+    private IBirthdayLogService birthdayLogService;
+
+
     @Autowired
     private IVipUserExamService vipUserExamService;
 
@@ -231,9 +242,9 @@ public class WxController extends BaseController {
      */
     @PostMapping(value = "/xcxPrepareOrder")
     @ApiOperation("微信小程序支付下单")
-    public Response<JSONObject> xcxPrepareOrder(@RequestBody WxOrderDTO wxOrderDTO) throws Exception{
+    public Response<JSONObject> xcxPrepareOrder(@RequestBody WxOrderDTO wxOrderDTO) throws Exception {
         UserInfo userInfo = SecurityUtils.getLoginUser().getStudent();
-        if(wxOrderDTO.getGoodsType()==1) {
+        if (wxOrderDTO.getGoodsType() == 1) {
             int count = vipUserExamService.getUserExamByUnionIdAndGoodsId(userInfo.getUnionId(), wxOrderDTO.getGoodsId());
             if (count > 0) {
                 throw new CustomException("您已购买过该考场,退回上个页面,重新进入。");
@@ -257,8 +268,32 @@ public class WxController extends BaseController {
             order.setOrderStatus(OrderStatusEnum.PROCESSING.getCode());
             wxOrderService.save(order);
             return Response.success(placeXcxWxOrder(order, examInfo.getName()));
-        } else if (wxOrderDTO.getGoodsType()==2) {
+        } else if (wxOrderDTO.getGoodsType() == 2) {
             throw new CustomException("请正确传入GoodsType,GoodsType=2未开发");
+        } else if (wxOrderDTO.getGoodsType() == 3) {
+            String baziPriceStr = configService.selectConfigByKey("bazi_price");
+            BirthdayLog birthdayLog = birthdayLogService.getById(wxOrderDTO.getGoodsId()); //记录ID
+            if(birthdayLog!=null && (birthdayLog.getIsPay()==1 || birthdayLog.getIsPay()==2)) {
+                throw new CustomException("您已支付此订单,退回上个页面,重新进入。");
+            }
+            //创建本地微信订单
+            WxOrder order = new WxOrder();
+            String orderCode = getOrderCode(userInfo.getId());
+            order.setGoodsId(birthdayLog.getId()); //八字记录ID
+            order.setGoodsName("八字排盘");
+            order.setGoodsType(3);
+            order.setOutTradeNo(orderCode);
+            order.setUserId(userInfo.getId());
+            order.setXcxOpenid(userInfo.getXcxOpenid());
+            order.setAppOpenid(userInfo.getAppOpenid());
+            order.setGzhOpenid(userInfo.getGzhOpenid());
+            order.setUnionId(userInfo.getUnionId());
+            order.setPhoneType(wxOrderDTO.getPhoneType()); //手机类型 1:苹果 2:安卓
+            order.setForeType(wxOrderDTO.getForeType()); //前端类型 1:app 2:小程序 3:公众号
+            order.setTotal(Integer.parseInt(baziPriceStr));
+            order.setOrderStatus(OrderStatusEnum.PROCESSING.getCode());
+            wxOrderService.save(order);
+            return Response.success(placeXcxWxOrder(order, "八字排盘"));
         } else {
             throw new CustomException("请正确传入GoodsType。");
         }
@@ -284,6 +319,7 @@ public class WxController extends BaseController {
                 .put("out_trade_no", order.getOutTradeNo());
         rootNode.putObject("amount").put("total", order.getTotal());
         rootNode.putObject("payer").put("openid", order.getXcxOpenid());
+        rootNode.putObject("settle_info").put("profit_sharing",true);
         objectMapper.writeValue(bos, rootNode);
         httpPost.setEntity(new StringEntity(rootNode.toString(), "utf-8"));
         HttpResponse response = httpClient.execute(httpPost);

+ 12 - 0
nbjk-service/src/main/java/com/miaxis/order/service/impl/OrderInfoServiceImpl.java

@@ -1,6 +1,8 @@
 package com.miaxis.order.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.birthday.domain.BirthdayLog;
+import com.miaxis.birthday.service.IBirthdayLogService;
 import com.miaxis.exam.domain.ExamInfo;
 import com.miaxis.exam.service.IExamInfoService;
 import com.miaxis.order.domain.OrderInfo;
@@ -40,6 +42,10 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
 
     @Autowired
     private IVipExamVideoService vipExamVideoService;
+
+    @Autowired
+    private IBirthdayLogService birthdayLogService;
+
     /**
      * 查询ad列表
      *
@@ -92,6 +98,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
             this.save(orderInfo);
         } else if(order.getGoodsType()==2) { //商品
             //添加会员信息
+        } else if(order.getGoodsType()==3) { //八字
+            //添加八字信息
+            BirthdayLog birthdayLog = birthdayLogService.getById(order.getGoodsId());
+            birthdayLog.setIsPay(1l);
+            birthdayLogService.saveOrUpdate(birthdayLog);
+            this.save(orderInfo);
         }
 
     }

+ 1 - 1
nbjk-service/src/main/java/com/miaxis/wx/dto/WxOrderDTO.java

@@ -12,7 +12,7 @@ public class WxOrderDTO {
     @ApiModelProperty(value = "商品ID(考场ID)",required = true)
     private Long goodsId;
 
-    @ApiModelProperty(value = "商品类型 1:考场 2:实物",required = true)
+    @ApiModelProperty(value = "商品类型 1:考场 2:实物 3:八字排盘",required = true)
     private Long goodsType;
 
     @ApiModelProperty(value = "手机类型 1苹果 2安卓",required = true)

+ 4 - 0
nbjk-service/src/main/java/com/miaxis/wx/service/IWxOrderService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.miaxis.common.core.domain.entity.SysDictData;
 import com.miaxis.wx.domain.WxOrder;
 import com.miaxis.wx.dto.*;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -18,4 +19,7 @@ public interface IWxOrderService extends IService<WxOrder>{
     String wxwithdrawal(Integer amount) throws Exception;
 
     String wxwithbankdrawal(WxExtractBankDTO amount) throws Exception;
+
+    @Transactional
+    String wxfenZhang(Integer amount) throws Exception;
 }

+ 55 - 0
nbjk-service/src/main/java/com/miaxis/wx/service/impl/WxOrderServiceImpl.java

@@ -2,6 +2,8 @@ package com.miaxis.wx.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.github.wxpay.sdk.WXPay;
 import com.github.wxpay.sdk.WXPayConfig;
 import com.github.wxpay.sdk.WXPayConstants;
@@ -29,6 +31,10 @@ import com.miaxis.wx.service.IWxExtractService;
 import com.miaxis.wx.service.IWxOrderService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -36,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.io.ByteArrayOutputStream;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -51,6 +58,10 @@ import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
 @Service
 @Slf4j
 public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> implements IWxOrderService {
+
+    @Autowired
+    private HttpClient httpClient;
+
     @Resource
     private WxOrderMapper wxOrderMapper;
 
@@ -74,6 +85,9 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
     @Value("${gzh.appid}")
     private String appid;
 
+    @Value("${xcx.appid}")
+    private String xcxAppid;
+
 
 
     @Override
@@ -194,4 +208,45 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
     }
 
 
+    @Override
+    @Transactional
+    public String wxfenZhang(Integer amount) throws Exception {
+        HttpPost httpPost = initHttpPost("https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver");
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectMapper objectMapper = new ObjectMapper();
+
+        ObjectNode rootNode = objectMapper.createObjectNode();
+        String nonceStr = RandomStringUtils.randomAlphanumeric(32);
+        rootNode.put("mchid",wxpayConfig.getMerchantId());
+        rootNode.put("appid",xcxAppid);
+        rootNode.put("nonce_str", nonceStr);
+
+        //用于签名
+        Map<String,String> sortMap = new TreeMap<String,String>();
+        sortMap.put("mchid",wxpayConfig.getMerchantId());
+        sortMap.put("appid",xcxAppid);
+        sortMap.put("nonce_str",nonceStr);
+
+        WXPayConfig config = new WxPayConfigImpl();
+        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.HMACSHA256);
+        rootNode.put("sign", sign);
+        rootNode.put("sign_type", "HMAC-SHA256");
+
+        String url = "https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver";
+        httpPost.setEntity(new StringEntity(rootNode.toString(), "utf-8"));
+        HttpResponse response = httpClient.execute(httpPost);
+
+
+
+
+        return null;
+    }
+
+    private HttpPost initHttpPost(String url) {
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.addHeader("Accept", "application/json");
+        httpPost.addHeader("Content-type","application/json; charset=utf-8");
+        return httpPost;
+    }
+
 }