Jelajahi Sumber

视频会员购买

gongfuzhu 9 bulan lalu
induk
melakukan
291bddc0a5

+ 20 - 0
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/controller/SycController.java

@@ -2,6 +2,7 @@ package com.zswl.cloud.springBtach.server.core.controller;
 
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.eeext.openapi.entity.NotifyOrderReq;
 import com.xiaoju.open.oil.commons.OilRequest;
 import com.xiaoju.open.oil.core.executor.ResponseDTO;
 import com.zhongshu.payment.client.model.order.v2.UpdateGoodsModel;
@@ -13,6 +14,7 @@ import com.zswl.cloud.springBtach.server.core.api.ypp.request.SyncOrderRequest;
 import com.zswl.cloud.springBtach.server.core.dao.ApiLogDao;
 import com.zswl.cloud.springBtach.server.core.domain.ApiLog;
 import com.zswl.cloud.springBtach.server.core.service.YppService;
+import com.zswl.cloud.springBtach.server.core.service.impl.Video2ServiceImpl;
 import com.zswl.cloud.springBtach.server.core.service.impl.XiaoJuServiceImpl;
 import com.zswl.cloud.springBtach.server.core.service.impl.DfyHotelServiceImpl;
 import com.zswl.cloud.springBtach.server.core.service.impl.DfyTicketServiceImpl;
@@ -48,6 +50,10 @@ public class SycController {
     YppService yppService;
 
 
+    @Autowired
+    private Video2ServiceImpl video2ServiceImpl;
+
+
     @ApiOperation("推送-同步订单信息")
     @RequestMapping(value = "xiaoju/notifyOrderInfo", method = RequestMethod.POST)
     public ResponseDTO notifyOrderInfo(@RequestBody OilRequest oilRequest) {
@@ -81,6 +87,20 @@ public class SycController {
         return "ok";
     }
 
+    @ApiOperation("同步视频会员2支付状态")
+    @RequestMapping(value = "video2/orderState", method = RequestMethod.POST)
+    public String receivingGasStation2(@RequestBody NotifyOrderReq notifyOrderReq) {
+        video2ServiceImpl.notifyOrder(notifyOrderReq);
+
+        ApiLog apiLog = new ApiLog();
+        apiLog.setSystem("video");
+        apiLog.setRequest(JSONUtil.toJsonStr(notifyOrderReq));
+        apiLog.setService("syncOrderState");
+        apiLog.setResponse("ok");
+        apiLogDao.save(apiLog);
+        return "success";
+    }
+
 
     @ApiOperation("dfy订单同步")
     @RequestMapping(value = "dfy/orderState", method = RequestMethod.POST)

+ 14 - 4
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/controller/Video2Controller.java

@@ -1,15 +1,17 @@
 package com.zswl.cloud.springBtach.server.core.controller;
 
+import com.eeext.openapi.entity.RechargeOrderReq;
 import com.eeext.openapi.entity.RechargeProductResp;
 import com.github.microservice.auth.client.constant.AuthConstant;
 import com.github.microservice.auth.client.content.ResultContent;
 import com.github.microservice.auth.security.annotations.ResourceAuth;
 import com.github.microservice.auth.security.type.AuthType;
-import com.zswl.cloud.springBtach.server.core.api.video2.Video2Api;
+import com.zhongshu.payment.client.model.order.v2.CreatOrderResultModel;
+import com.zswl.cloud.springBtach.server.core.service.impl.Video2ServiceImpl;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
@@ -19,13 +21,21 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("video2")
 public class Video2Controller {
 
+
     @Autowired
-    Video2Api video2Api;
+    private Video2ServiceImpl video2Service;
 
     @ApiOperation("获取商品列表接口")
     @ResourceAuth(value = AuthConstant.User, type = AuthType.User)
     @RequestMapping(value = "rechargeProduct", method = RequestMethod.GET)
     ResultContent<RechargeProductResp> rechargeProduct() {
-        return ResultContent.buildContent(video2Api.rechargeProduct());
+        return video2Service.rechargeProduct();
+    }
+
+    @ApiOperation("创建视频会员订单")
+    @ResourceAuth(value = AuthConstant.User, type = AuthType.User)
+    @RequestMapping(value = "creatOrder", method = RequestMethod.POST)
+    ResultContent<CreatOrderResultModel> rechargeProduct(@RequestBody RechargeOrderReq rechargeOrderReq) {
+        return video2Service.creatOrder(rechargeOrderReq);
     }
 }

+ 84 - 0
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/job/video2/Video2DeliveryJob.java

@@ -0,0 +1,84 @@
+package com.zswl.cloud.springBtach.server.core.job.video2;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.eeext.openapi.entity.RechargeOrderReq;
+import com.github.microservice.auth.client.content.ResultContent;
+import com.github.microservice.auth.client.content.ResultState;
+import com.zhongshu.payment.client.model.order.v2.GoodsResultModel;
+import com.zhongshu.payment.client.service.v2.OrderService2;
+import com.zhongshu.payment.client.service.v2.PaymentService2;
+import com.zswl.cloud.shop.client.service.GoodsService;
+import com.zswl.cloud.shop.client.service.ShopService;
+import com.zswl.cloud.springBtach.server.core.api.video2.Video2Api;
+import com.zswl.cloud.springBtach.server.core.job.standard.StandarDeliveryJob;
+import lombok.Data;
+import lombok.experimental.Delegate;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.Step;
+import org.springframework.batch.core.launch.support.RunIdIncrementer;
+import org.springframework.batch.repeat.RepeatStatus;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Data
+@Log4j2
+@Configuration
+public class Video2DeliveryJob {
+
+    @Autowired
+    @Delegate
+    StandarDeliveryJob standarDeliveryJob;
+
+    @Autowired
+    GoodsService goodsService;
+
+    @Autowired
+    OrderService2 orderService2;
+
+    @Autowired
+    PaymentService2 paymentService2;
+
+    @Autowired
+    ShopService shopService;
+
+    @Autowired
+    Video2Api video2Api;
+
+    @Value("${video2.notifyUrl}")
+    private String notifyUrl;
+
+
+    public Step video2DeliveryStep() {
+        return getStepBuilderFactory().get("video2DeliveryStep")
+                .tasklet((contribution, chunkContext) -> {
+                    GoodsResultModel goodsResultModel = getParameter().get();
+
+
+                    JSONObject goodsInfo = goodsResultModel.getGoodsInfo();
+                    RechargeOrderReq rechargeOrderReq = JSONUtil.toBean(goodsInfo, RechargeOrderReq.class);
+                    rechargeOrderReq.setOutTradeNo(goodsResultModel.getOrderNo());
+                    rechargeOrderReq.setNotifyUrl(notifyUrl);
+                    video2Api.rechargeOrder(rechargeOrderReq);
+
+                    getResultContent().set(ResultContent.build(ResultState.Success));
+                    return RepeatStatus.FINISHED;
+
+                })
+                .build();
+    }
+
+    @Bean
+    public Job video2Delivery() {
+        return getJobBuilderFactory()
+                .get("video2Delivery")
+                .start(video2DeliveryStep())
+                .incrementer(new RunIdIncrementer())
+                .build();
+    }
+
+}
+

+ 154 - 0
SpringBatchServiceServer/src/main/java/com/zswl/cloud/springBtach/server/core/service/impl/Video2ServiceImpl.java

@@ -0,0 +1,154 @@
+package com.zswl.cloud.springBtach.server.core.service.impl;
+
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.eeext.openapi.entity.NotifyOrderReq;
+import com.eeext.openapi.entity.ProductItemResp;
+import com.eeext.openapi.entity.RechargeOrderReq;
+import com.eeext.openapi.entity.RechargeProductResp;
+import com.github.microservice.auth.client.content.ResultContent;
+import com.github.microservice.auth.client.content.ResultState;
+import com.github.microservice.auth.security.helper.AuthHelper;
+import com.zhongshu.payment.client.model.order.v2.*;
+import com.zhongshu.payment.client.service.v2.OrderService2;
+import com.zhongshu.payment.client.service.v2.PaymentService2;
+import com.zhongshu.payment.client.type.*;
+import com.zswl.cloud.shop.client.service.ShopService;
+import com.zswl.cloud.shop.client.vo.life.AccountDetailVo;
+import com.zswl.cloud.shop.client.vo.life.SharePlatformVo;
+import com.zswl.cloud.springBtach.server.core.api.video2.Video2Api;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+@Log4j2
+public class Video2ServiceImpl {
+
+    @Autowired
+    private Video2Api video2Api;
+
+    @Autowired
+    ShopService shopService;
+
+    @Autowired
+    Snowflake snowflake;
+
+    @Autowired
+    AuthHelper authHelper;
+
+    @Autowired
+    OrderService2 orderService2;
+    @Autowired
+    private PaymentService2 paymentService2;
+
+    /**
+     * 商品列表
+     *
+     * @return
+     */
+    public ResultContent<RechargeProductResp> rechargeProduct() {
+
+        return ResultContent.buildContent(video2Api.rechargeProduct());
+    }
+
+    public ResultContent<CreatOrderResultModel> creatOrder(RechargeOrderReq rechargeOrderReq) {
+
+        RechargeProductResp rechargeProductResp = video2Api.rechargeProduct();
+        List<ProductItemResp> collect = rechargeProductResp.getProducts().stream().filter(productItemResp -> productItemResp.getProductId().equals(rechargeOrderReq.getProductId())).collect(Collectors.toList());
+        ProductItemResp productItemResp = collect.get(0);
+        String channelPrice = productItemResp.getChannelPrice();
+        BigDecimal totalPrice = new BigDecimal(channelPrice);
+        com.zswl.cloud.shop.client.ret.ResultContent<AccountDetailVo> shopSetting = shopService.shopSetting("视频会员");
+        if (!shopSetting.getState().equals(com.zswl.cloud.shop.client.ret.ResultState.Success)) {
+            return ResultContent.build(ResultState.Fail, "视频会员信息未配置");
+        }
+        AccountDetailVo accountDetailVo = shopSetting.getContent();
+
+
+        String orderNo = snowflake.nextIdStr();
+
+
+// 平台订单
+
+        String shopId = accountDetailVo.getAccountId();
+        String authAccount = accountDetailVo.getAuthAccount();
+        SharePlatformVo sharePlatformVo = accountDetailVo.getSharePlatformVo();
+
+        // 平台订单
+        CreateOrder2Model createOrder2Model = new CreateOrder2Model();
+        createOrder2Model.setOrderNo(orderNo);
+        createOrder2Model.setUserId(authHelper.getCurrentUser().getUserId());
+        createOrder2Model.setShopId(shopId);
+        JSONObject shopInfo = JSONUtil.parseObj(shopSetting);
+//        shopInfo.set("hotelIdPic", addOrderRequest.getHotelIdPic());
+//        shopInfo.set("shopName", shopSetting.getContent().getContactName());
+        createOrder2Model.setShopInfo(shopInfo);
+        createOrder2Model.setTotalAmount(totalPrice);
+        createOrder2Model.setDiscountAmount(BigDecimal.ZERO);
+        createOrder2Model.setPayAmount(totalPrice);
+        createOrder2Model.setAccesserUserId(authAccount);
+        createOrder2Model.setChannel(Channel.ZhongShu);
+        JSONObject goodsInfo = JSONUtil.parseObj(rechargeOrderReq);
+        goodsInfo.set("goodsName", productItemResp.getItemName());
+//        goodsInfo.set("goodsPath", addOrderRequest.getRoomPic());
+
+        CreateOrder2Model.Goods goods = new CreateOrder2Model.Goods();
+        goods.setGoodsId(productItemResp.getProductId().toString());
+        goods.setJobFlowMap(JobFlowMap.video2);
+        goods.setGoodsInfo(goodsInfo);
+        goods.setPayAmount(totalPrice);
+        goods.setValidDay(90);
+        goods.setTransferType(sharePlatformVo.getShareType().equals(1) ? TransferType.RATIO : TransferType.FIXED);
+
+        List<CreateOrder2Model.Owner> ownerList = new ArrayList<>();
+
+        CreateOrder2Model.Owner platfor = new CreateOrder2Model.Owner();
+        platfor.setOwner(TransferOwner.PLATFORM);
+        platfor.setValue(sharePlatformVo.getPlatformRate());
+
+        CreateOrder2Model.Owner buy = new CreateOrder2Model.Owner();
+        buy.setOwner(TransferOwner.BUY_SHOP);
+        buy.setValue(sharePlatformVo.getBuyShopRate());
+        buy.setShopId(shopId);
+
+        CreateOrder2Model.Owner use = new CreateOrder2Model.Owner();
+        use.setOwner(TransferOwner.USE_SHOP);
+        use.setValue(sharePlatformVo.getCheckShopRate());
+
+        ownerList.add(platfor);
+        ownerList.add(buy);
+        ownerList.add(use);
+        goods.setTransferRrule(ownerList);
+        createOrder2Model.setGoodsList(List.of(goods));
+        return orderService2.creat(createOrder2Model);
+
+    }
+
+    public void notifyOrder(NotifyOrderReq notifyOrderReq) {
+        ResultContent<List<GoodsResultModel>> listResultContent = orderService2.goodsDetail(notifyOrderReq.getOutTradeNo());
+        GoodsResultModel goodsResultModel = listResultContent.getContent().get(0);
+        UpdateGoodsModel updateGoodsModel = new UpdateGoodsModel();
+        updateGoodsModel.setId(goodsResultModel.getId());
+        if (notifyOrderReq.getStatus().equals("1")) {
+            updateGoodsModel.setGoodsState(OrderType.USED);
+        } else if (notifyOrderReq.getStatus().equals("3")) {
+            ApplicantRefundParam2Model applicantRefundParam2Model = new ApplicantRefundParam2Model();
+            applicantRefundParam2Model.setId(goodsResultModel.getId());
+            applicantRefundParam2Model.setRemark("充值失败退款");
+            applicantRefundParam2Model.setUserId(goodsResultModel.getUserId());
+            paymentService2.refund(applicantRefundParam2Model);
+
+        }
+        updateGoodsModel.setExtend(JSONUtil.parseObj(notifyOrderReq));
+        orderService2.updateGoods(updateGoodsModel);
+
+
+    }
+}

+ 3 - 2
SpringBatchServiceServer/src/main/resources/application-dev.yml

@@ -68,9 +68,10 @@ yqd:
 
 # 视频会员
 video2:
-  merchantId: merchantId
-  secretKey: secretKey
+  merchantId: 25537
+  secretKey: 8db16e8cc8363ed4eb4c14f9520bcc32
   isProd: false
+  notifyUrl: https://api.dev.zonelife.cn/springbatchservice/sync/video2/orderState
 
 qxdj:
   url: http://test.qxtech.top/api/customer