瀏覽代碼

'活动-话费充值'

Althars123 3 年之前
父節點
當前提交
c93cf41752

+ 1 - 1
zzjs-admin/src/main/java/com/miaxis/app/controller/fulu/FuluNotifyController.java

@@ -160,7 +160,7 @@ public class FuluNotifyController {
 
         wxSend.setLang("zh_CN");
         String result = wxSendService.sendMessage(xcxMessageToken,wxSend);
-        log.info("小程序推送请求数据返回值,订单号"+result);
+        log.info("小程序推送请求数据返回值,订单号:"+wxOrder.getOutTradeNo()+result);
     }
 
 

+ 23 - 0
zzjs-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java

@@ -91,6 +91,29 @@ public class WxController extends BaseController {
         return toResponsePageInfo(list);
     }
 
+    /**
+     * 微信支付获取预订单id
+     */
+    @PostMapping(value = "/prepareOrderForPhoneBill")
+    @ApiOperation("微信支付活动话费下单")
+    public Response<JSONObject> getPrepareOrderIdForFulu(@RequestBody WxOrderCreatePhoneBillDTO wxOrderCreatePhoneBillDTO) throws Exception{
+
+        //创建本地微信订单
+        WxOrder order = new WxOrder();
+        UserInfo student = SecurityUtils.getLoginUser().getStudent();
+        String orderCode = getOrderCode(student.getId());
+        order.setOutTradeNo(orderCode);
+        order.setOpenid(student.getOpenid());
+        order.setGoodsType("3");
+        order.setGoodsPictureUrl(wxOrderCreatePhoneBillDTO.getGoodsPictureUrl());
+        //保存电影下单数据
+        wxOrderService.createPhoneBillOrder(order,wxOrderCreatePhoneBillDTO);
+        wxOrderService.save(order);
+        return Response.success(placeWxOrder(order, "视频会员"));
+
+
+    }
+
     /**
      * 微信支付获取预订单id
      */

+ 5 - 0
zzjs-admin/src/main/java/com/miaxis/app/controller/wx/WxNotifyController.java

@@ -224,6 +224,11 @@ public class WxNotifyController {
             wxOrderService.buyFuluOrder(wxOrder);
         }
 
+        //购买活动-话费充值
+        else if ( "3".equals(wxOrder.getGoodsType())){
+            wxOrderService.buyPhoneBillOrder(wxOrder);
+        }
+
 
 
 

+ 84 - 0
zzjs-admin/src/main/java/com/miaxis/pc/controller/wx/PcWxController.java

@@ -0,0 +1,84 @@
+package com.miaxis.pc.controller.wx;
+
+import com.miaxis.common.annotation.Log;
+import com.miaxis.common.core.controller.BaseController;
+import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.core.page.ResponsePageInfo;
+import com.miaxis.common.enums.BusinessTypeEnum;
+import com.miaxis.common.enums.OrderStatusEnum;
+import com.miaxis.common.exception.CustomException;
+import com.miaxis.common.utils.StringUtils;
+import com.miaxis.wx.domain.WxOrder;
+import com.miaxis.wx.dto.PcWxOrderListDTO;
+import com.miaxis.wx.service.IWxOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/activities/wx")
+@Api(tags = {"【pc-活动】"})
+@Slf4j
+class PcWxController extends BaseController {
+
+
+
+    @Autowired
+    private IWxOrderService wxOrderService;
+
+
+    @GetMapping("/order/list")
+    @ApiOperation("查询订单列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum",value = "当前页码" ,dataType = "int", paramType = "query", required = false),
+            @ApiImplicitParam(name = "pageSize",value = "每页数据量" , dataType = "int", paramType = "query", required = false),
+    })
+    @PreAuthorize("@ss.hasPermi('activities:phoneBill:list')")
+    public ResponsePageInfo<WxOrder> list(@ModelAttribute PcWxOrderListDTO pcWxOrderListDTO){
+        startPage();
+        List<WxOrder> list = wxOrderService.selectPcOrderList(pcWxOrderListDTO);
+        return toResponsePageInfo(list);
+    }
+
+
+
+    /**
+     * 修改订单
+     */
+    @PreAuthorize("@ss.hasPermi('activities:phoneBill:edit')")
+    @Log(title = "修改订单", businessType = BusinessTypeEnum.UPDATE)
+    @PutMapping
+    @ApiOperation("完成订单")
+    public Response edit(String outTradeNo){
+        if (!StringUtils.isEmpty(outTradeNo)){
+            throw new CustomException("订单号必传");
+        }
+        WxOrder wxOrder = wxOrderService.getByOutTradeNo(outTradeNo);
+        wxOrder.setOrderStatus(OrderStatusEnum.SUCCESS.getCode());
+        return toResponse(wxOrderService.updateById(wxOrder) ? 1 : 0);
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 30 - 14
zzjs-admin/src/main/java/com/miaxis/system/controller/common/CommonController.java

@@ -20,6 +20,9 @@ import com.qcloud.cos.auth.COSCredentials;
 import com.qcloud.cos.model.PutObjectRequest;
 import com.qcloud.cos.model.PutObjectResult;
 import com.qcloud.cos.region.Region;
+import com.qcloud.vod.VodUploadClient;
+import com.qcloud.vod.model.VodUploadRequest;
+import com.qcloud.vod.model.VodUploadResponse;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -33,6 +36,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
@@ -50,12 +54,12 @@ public class CommonController
 {
     private static final Logger log = LoggerFactory.getLogger(CommonController.class);
 
-    @Autowired
-    private ServerConfig serverConfig;
-
     @Autowired
     private IFileInfoService fileInfoService;
 
+    @Resource
+    private VodUploadClient vodUploadClient;
+
     @Value("${cos.bucketName}")
     private String bucketName;
     @Value("${cos.path}")
@@ -76,8 +80,9 @@ public class CommonController
     @ApiOperation("通用上传请求")
     public Response<FileInfo> updateload(MultipartFile file,
                                          @ApiParam(name = "remark", value = "备注,非必传") @RequestParam("remark") String remark,
-                                         @ApiParam(name = "fileType", value = "业务类型:98-音视频文件、1-商户logo、99-其他")
-        @RequestParam("fileType") Integer fileType) throws IOException {
+                                         @ApiParam(name = "fileType", value = "业务类型:1-商户logo、2-汽车品牌logo、3-学车视频、" +
+                                                 "98-音视频文件、99-其他")
+        @RequestParam("fileType") Integer fileType) throws Exception {
         FileUploadTypeEnum fileUploadTypeEnum = getPathByType(fileType);
         String originalFilename = file.getOriginalFilename();
         //获取最后一个.的位置
@@ -108,16 +113,27 @@ public class CommonController
         }else{
             key = "/"+this.preffix+"/"+fileUploadTypeEnum.getFileType()+"/"+storagefileName;
         }
-
-        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
-        PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
-        String fileUrl=this.path + putObjectRequest.getKey();
-
         FileInfo fileInfo = new FileInfo();
-        fileInfo.setFileType(fileUploadTypeEnum.getFileType());
-        fileInfo.setFilePath(key);
-        fileInfo.setFileUrl(fileUrl);
-        //fileInfo.setRemark(remark);
+
+        //如果是学车视频 ,则调用vod上传
+        if (fileUploadTypeEnum.equals(FileUploadTypeEnum.STUDY_MOVIE) ){
+            VodUploadRequest request = new VodUploadRequest();
+            request.setMediaFilePath(localFile.getAbsolutePath());
+            VodUploadResponse response = vodUploadClient.upload("ap-guangzhou", request);
+            fileInfo.setFileType(fileUploadTypeEnum.getFileType());
+            fileInfo.setFilePath(response.getFileId());
+            fileInfo.setFileUrl(response.getMediaUrl());
+        }else{
+            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
+            cosClient.putObject(putObjectRequest);
+            String fileUrl=this.path + putObjectRequest.getKey();
+            fileInfo.setFileType(fileUploadTypeEnum.getFileType());
+            fileInfo.setFilePath(key);
+            fileInfo.setFileUrl(fileUrl);
+        }
+        if (!StringUtils.isEmpty(remark)){
+            fileInfo.setRemark(remark);
+        }
         fileInfoService.save(fileInfo);
         return Response.success(fileInfo);
     }

+ 40 - 0
zzjs-admin/src/test/java/com/miaxis/test/CvmTest.java

@@ -0,0 +1,40 @@
+package com.miaxis.test;
+
+import com.alibaba.fastjson.JSONObject;
+import com.miaxis.ZzjsApplication;
+import com.qcloud.vod.VodUploadClient;
+import com.qcloud.vod.model.VodUploadRequest;
+import com.qcloud.vod.model.VodUploadResponse;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+
+@SpringBootTest(classes = ZzjsApplication.class)
+@RunWith(SpringRunner.class)
+public class CvmTest {
+
+    @Resource
+    private VodUploadClient vodUploadClient;
+
+
+    /**
+     * 获取微信小程序token
+     */
+    @Test
+    public void upload() throws Exception {
+        VodUploadRequest request = new VodUploadRequest();
+        request.setMediaFilePath("E:\\111.mp4");
+        request.setProcedure("LongVideoPreset");
+        VodUploadResponse response = vodUploadClient.upload("ap-guangzhou", request);
+        System.out.println(JSONObject.toJSON(response));
+
+    }
+
+
+
+
+
+}

+ 14 - 0
zzjs-common/pom.xml

@@ -152,6 +152,20 @@
             <version>5.6.38</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.qcloud</groupId>
+            <artifactId>vod_api</artifactId>
+            <version>2.1.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.tencentcloudapi</groupId>
+            <artifactId>tencentcloud-sdk-java</artifactId>
+            <!-- go to https://search.maven.org/search?q=tencentcloud-sdk-java and get the latest version. -->
+            <!-- 请到https://search.maven.org/search?q=tencentcloud-sdk-java查询所有版本,最新版本如下 -->
+            <version>3.1.296</version>
+        </dependency>
+
 
         <!-- swagger2-->
         <dependency>

+ 19 - 1
zzjs-common/src/main/java/com/miaxis/common/config/BeanConfig.java

@@ -7,6 +7,12 @@ import com.qcloud.cos.auth.BasicCOSCredentials;
 import com.qcloud.cos.auth.COSCredentials;
 import com.qcloud.cos.http.HttpProtocol;
 import com.qcloud.cos.region.Region;
+import com.qcloud.vod.VodUploadClient;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
+import com.tencentcloudapi.common.profile.Language;
+import com.tencentcloudapi.cvm.v20170312.CvmClient;
 import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
 import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier;
 import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
@@ -48,7 +54,7 @@ public class BeanConfig {
      */
 
     @Bean
-    public COSClient  configBean() {
+    public COSClient  COSClientconfigBean() {
         // 1 初始化用户身份信息(secretId, secretKey)。
         String secretId = this.secretId;
         String secretKey = this.secretKey;
@@ -65,6 +71,18 @@ public class BeanConfig {
     }
 
 
+    /**
+     * 腾讯云 CvmClient
+     * @return
+     */
+
+    @Bean
+    public VodUploadClient vodUploadClienConfigBean() {
+        VodUploadClient client = new VodUploadClient(secretId, secretKey);
+        return client;
+    }
+
+
     /**
      * 微信支付 httpclient 对象
      * @return

+ 1 - 0
zzjs-common/src/main/java/com/miaxis/common/enums/FileUploadTypeEnum.java

@@ -11,6 +11,7 @@ public enum FileUploadTypeEnum
     MEDIA_EXTENSION(98, "media", MimeTypeUtils.MEDIA_EXTENSION, "音视频文件"),
     CUSTOMER_TYPE(1, "customer", MimeTypeUtils.IMAGE_EXTENSION, "商户logo"),
     CAR_BRAND(2, "car", MimeTypeUtils.IMAGE_EXTENSION, "汽车品牌logo"),
+    STUDY_MOVIE(3, "study", MimeTypeUtils.MEDIA_EXTENSION, "学车视频"),
     OTHERS(99, "others", MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, "其他文件");
 
     private final Integer code;

+ 45 - 0
zzjs-service/src/main/java/com/miaxis/wx/dto/PcWxOrderListDTO.java

@@ -0,0 +1,45 @@
+package com.miaxis.wx.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PcWxOrderListDTO {
+    private static final long serialVersionUID = 1L;
+
+
+    @ApiModelProperty(value = "开始时间,格式yyyyMMdd")
+//    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+    private String startTime;
+
+
+    @ApiModelProperty(value = "结束时间,格式yyyyMMdd")
+//    @JsonFormat(pattern="yyyyMMdd",timezone = "GMT+8")
+    private String endTime;
+
+
+    @ApiModelProperty(value = "商品类型",hidden = true)
+    private String  goodsType;
+
+
+//
+//    @ApiModelProperty(value = "支付状态: 交易状态,枚举值:\n" +
+//            "SUCCESS:支付成功\n" +
+//            "REFUND:转入退款\n" +
+//            "NOTPAY:未支付\n" +
+//            "CLOSED:已关闭\n" +
+//            "REVOKED:已撤销(付款码支付)\n" +
+//            "USERPAYING:用户支付中(付款码支付)\n" +
+//            "PAYERROR:支付失败(其他原因,如银行返回失败)\n" +
+//            "ACCEPT:已接收,等待扣款")
+    private String  tradeState;
+
+    @ApiModelProperty(value = "订单状态: 1 -进行中 2-购买成功 3-购买失败")
+    private String  orderStatus;
+
+
+
+}

+ 28 - 0
zzjs-service/src/main/java/com/miaxis/wx/dto/WxOrderCreatePhoneBillDTO.java

@@ -0,0 +1,28 @@
+package com.miaxis.wx.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class WxOrderCreatePhoneBillDTO {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "天猫订单号")
+    private String tmall_no;
+
+    @ApiModelProperty(value = "充值号码")
+    private Integer recharge_phone_no;
+
+    @ApiModelProperty(value = "运营商:1-移动 2-联通 3-电信")
+    private Integer operators;
+
+
+    @ApiModelProperty(value = "商品图片地址")
+    private String goodsPictureUrl;
+
+
+
+
+
+
+}

+ 3 - 0
zzjs-service/src/main/java/com/miaxis/wx/dto/WxOrderListDTO.java

@@ -14,6 +14,9 @@ public class WxOrderListDTO {
     @ApiModelProperty(value = "openid",hidden = true)
     private String  openid;
 
+    @ApiModelProperty(value = "商品类型",hidden = true)
+    private String  goodsType;
+
 
     @ApiModelProperty(value = "订单状态: 1 -进行中 2-购买成功 3-购买失败")
     private String  orderStatus;

+ 3 - 0
zzjs-service/src/main/java/com/miaxis/wx/mapper/WxOrderMapper.java

@@ -3,6 +3,7 @@ package com.miaxis.wx.mapper;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.miaxis.wx.domain.WxOrder;
+import com.miaxis.wx.dto.PcWxOrderListDTO;
 import com.miaxis.wx.dto.WxOrderListDTO;
 
 /**
@@ -23,4 +24,6 @@ public interface WxOrderMapper extends BaseMapper<WxOrder> {
     WxOrder getByOutTradeNo(String outTradeNo);
 
     List<WxOrder> selectOrderList(WxOrderListDTO wxOrderListDTO);
+
+    List<WxOrder> selectPcOrderList(PcWxOrderListDTO pcWxOrderListDTO);
 }

+ 7 - 4
zzjs-service/src/main/java/com/miaxis/wx/service/IWxOrderService.java

@@ -7,10 +7,7 @@ import com.miaxis.feign.dto.fulu.FuluCommonApiDTO;
 import com.miaxis.feign.dto.fulu.FuluDTO;
 import com.miaxis.wx.domain.WxOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.miaxis.wx.dto.FilmWxOrderJsonData;
-import com.miaxis.wx.dto.WxOrderCreateDTO;
-import com.miaxis.wx.dto.WxOrderCreateFuluDTO;
-import com.miaxis.wx.dto.WxOrderListDTO;
+import com.miaxis.wx.dto.*;
 
 /**
  * 电影订单Service接口
@@ -45,4 +42,10 @@ public interface IWxOrderService extends IService<WxOrder>{
     void buyFilmOrder(WxOrder orderDataJson);
 
     void buyFuluOrder(WxOrder wxOrder);
+
+    void createPhoneBillOrder(WxOrder order, WxOrderCreatePhoneBillDTO wxOrderCreatePhoneBillDTO);
+
+    void buyPhoneBillOrder(WxOrder wxOrder);
+
+    List<WxOrder> selectPcOrderList(PcWxOrderListDTO pcWxOrderListDTO);
 }

+ 17 - 0
zzjs-service/src/main/java/com/miaxis/wx/service/impl/WxOrderServiceImpl.java

@@ -385,4 +385,21 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
         }
 
     }
+
+    @Override
+    public void createPhoneBillOrder(WxOrder wxOrder, WxOrderCreatePhoneBillDTO wxOrderCreatePhoneBillDTO) {
+        wxOrder.setOrderStatus(OrderStatusEnum.PROCESSING.getCode());
+        wxOrder.setOrderDataJson(JSONObject.toJSONString(wxOrderCreatePhoneBillDTO));
+    }
+
+    @Override
+    public void buyPhoneBillOrder(WxOrder wxOrder) {
+//        wxOrder.setOrderStatus(OrderStatusEnum.SUCCESS.getCode());
+        updateById(wxOrder);
+    }
+
+    @Override
+    public List<WxOrder> selectPcOrderList(PcWxOrderListDTO pcWxOrderListDTO) {
+        return wxOrderMapper.selectPcOrderList(pcWxOrderListDTO);
+    }
 }

+ 19 - 0
zzjs-service/src/main/resources/mapper/wx/WxOrderMapper.xml

@@ -90,4 +90,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          order by create_time desc
     </select>
 
+
+    <select id="selectPcOrderList" resultType="com.miaxis.wx.domain.WxOrder">
+        select * from wx_order
+        where trade_state ='SUCCESS'
+        <if test="orderStatus != null  and orderStatus != ''">
+            and  order_status = #{orderStatus}
+        </if>
+        <if test="goodsType != null  and goodsType != ''">
+            and  goods_type = #{goodsType}
+        </if>
+        <if test="startTime != null">
+            and DATE_FORMAT(create_time,'%Y-%m-%d')<![CDATA[ >= ]]> #{startTime}
+        </if>
+        <if test="endTime != null">
+            and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ < ]]> #{endTime}
+        </if>
+        order by create_time desc
+    </select>
+
 </mapper>