Parcourir la source

Merge branch 'master' of http://218.85.55.253:3000/miaxis/zzjs

小么熊🐻 il y a 4 ans
Parent
commit
5dc9d213ce
22 fichiers modifiés avec 583 ajouts et 208 suppressions
  1. 23 18
      zzjs-admin/src/main/java/com/miaxis/app/controller/film/FilmController.java
  2. 104 49
      zzjs-admin/src/main/java/com/miaxis/app/controller/film/NotifyController.java
  3. 24 0
      zzjs-admin/src/main/java/com/miaxis/pc/controller/car/CarController.java
  4. 1 1
      zzjs-admin/src/main/java/com/miaxis/system/controller/common/CommonController.java
  5. 21 2
      zzjs-admin/src/test/java/com/miaxis/test/NormalTest.java
  6. 128 0
      zzjs-admin/src/test/java/com/miaxis/test/UpdateCarTest.java
  7. 14 16
      zzjs-common/src/main/java/com/miaxis/common/config/BeanConfig.java
  8. 47 0
      zzjs-common/src/main/java/com/miaxis/common/config/WxVerifierConfig.java
  9. 1 0
      zzjs-common/src/main/java/com/miaxis/common/enums/FileUploadTypeEnum.java
  10. 0 35
      zzjs-common/src/main/java/com/miaxis/common/enums/HomePageDataType.java
  11. 44 0
      zzjs-service/src/main/java/com/miaxis/car/domain/CarBrandInfo.java
  12. 12 0
      zzjs-service/src/main/java/com/miaxis/car/mapper/CarBrandInfoMapper.java
  13. 12 0
      zzjs-service/src/main/java/com/miaxis/car/service/ICarBrandInfoService.java
  14. 16 0
      zzjs-service/src/main/java/com/miaxis/car/service/impl/CarBrandInfoServiceImpl.java
  15. 44 85
      zzjs-service/src/main/java/com/miaxis/carousel/service/impl/HomePageDataInfoServiceImpl.java
  16. 17 0
      zzjs-service/src/main/java/com/miaxis/feign/dto/FilmMcpData.java
  17. 16 0
      zzjs-service/src/main/java/com/miaxis/feign/dto/FilmXdResult.java
  18. 33 0
      zzjs-service/src/main/java/com/miaxis/feign/service/ICarService.java
  19. 19 0
      zzjs-service/src/main/java/com/miaxis/feign/service/fallback/CarFallBackService.java
  20. 3 0
      zzjs-service/src/main/java/com/miaxis/film/dto/FilmOrderCreateDTO.java
  21. 3 1
      zzjs-service/src/main/java/com/miaxis/film/dto/FilmOrderJsonData.java
  22. 1 1
      zzjs-service/src/main/java/com/miaxis/film/service/impl/RefundRecordServiceImpl.java

+ 23 - 18
zzjs-admin/src/main/java/com/miaxis/app/controller/film/FilmController.java

@@ -15,27 +15,25 @@ import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.common.utils.uuid.CommonUtils;
 import com.miaxis.feign.dto.FilmDTO;
 import com.miaxis.film.domain.FilmOrder;
-import com.miaxis.film.dto.*;
+import com.miaxis.film.dto.CinemaData;
+import com.miaxis.film.dto.FilmOrderCreateDTO;
+import com.miaxis.film.dto.FilmOrderJsonData;
+import com.miaxis.film.dto.FilmOrderListDTO;
 import com.miaxis.film.service.IFilmOrderService;
-import com.miaxis.question.domain.QuestionInfo;
 import com.miaxis.system.service.ISysConfigService;
 import com.miaxis.system.service.ISysDictDataService;
 import io.swagger.annotations.*;
-import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.RandomStringUtils;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.util.EntityUtils;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.ClassPathResource;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.ByteArrayOutputStream;
@@ -117,7 +115,6 @@ public class FilmController extends BaseController {
         HttpPost httpPost = new HttpPost(wxpayConfig.getV3url());
         httpPost.addHeader("Accept", "application/json");
         httpPost.addHeader("Content-type","application/json; charset=utf-8");
-
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         ObjectMapper objectMapper = new ObjectMapper();
         UserInfo student = SecurityUtils.getLoginUser().getStudent();
@@ -135,7 +132,7 @@ public class FilmController extends BaseController {
         filmOrderCreateDTO.setThirdOrderId(orderCode);
         filmOrderJsonData.setFilmOrderCreateDTO(filmOrderCreateDTO);
         //通过影院api 获取单票价格
-        Integer price = getPrice(filmOrderCreateDTO.getCinemaId(),filmOrderCreateDTO.getShowId(),filmOrderJsonData);
+        Integer price = getPrice(filmOrderCreateDTO.getCinemaId(),filmOrderCreateDTO.getShowId(),filmOrderCreateDTO.getTicketType(),filmOrderJsonData);
         int number = filmOrderCreateDTO.getSeat().split(",").length;
         order.setOrderDataJson(JSONObject.toJSONString(filmOrderJsonData));
         order.setTotal(price*number);
@@ -155,7 +152,7 @@ public class FilmController extends BaseController {
         rootNode.putObject("payer")
                 .put("openid", student.getOpenid());
         objectMapper.writeValue(bos, rootNode);
-        httpPost.setEntity(new StringEntity(bos.toString("UTF-8")));
+        httpPost.setEntity(new StringEntity(rootNode.toString(), "utf-8"));
         HttpResponse response = httpClient.execute(httpPost);
         String bodyAsString = EntityUtils.toString(response.getEntity());
         System.out.println(bodyAsString);
@@ -197,7 +194,7 @@ public class FilmController extends BaseController {
 
 
 
-    private Integer getPrice(String cinemaId, String showId, FilmOrderJsonData filmOrderJsonData) {
+    private Integer getPrice(String cinemaId, String showId, int ticketType, FilmOrderJsonData filmOrderJsonData) {
 
         FilmDTO filmDTO = new FilmDTO();
         filmDTO.setUrl("movieapi/movie-info/get-schedule-list");
@@ -215,14 +212,22 @@ public class FilmController extends BaseController {
         CinemaData realCinemaData = listdata.get(0);
         filmOrderJsonData.setCinemaData(realCinemaData);
         Integer netPrice = realCinemaData.getNetPrice();
-        Double upDiscountRate = discountRule.getDouble("upDiscountRate");
-        Double downDiscountRate = discountRule.getDouble("downDiscountRate");
-        String film_discount = configService.selectConfigByKey("film_discount");
-        Double  chosenDiscount = netPrice >3900 ? upDiscountRate:downDiscountRate;
-        Double aDouble = Double.valueOf(film_discount);
-        Double v = netPrice * chosenDiscount * aDouble;
-
-        return v.intValue();
+        Integer realValue =0;
+        if (ticketType == 1){
+            Double upDiscountRate = discountRule.getDouble("upDiscountRate");
+            Double downDiscountRate = discountRule.getDouble("downDiscountRate");
+            String film_discount = configService.selectConfigByKey("film_discount");
+            Double  chosenDiscount = netPrice >3900 ? upDiscountRate:downDiscountRate;
+            Double aDouble = Double.valueOf(film_discount);
+            Double dDouble = netPrice * chosenDiscount * aDouble;
+            realValue = dDouble.intValue();
+        }else if (ticketType == 2){
+            realValue = netPrice;
+        }
+
+
+
+        return realValue;
 
 
     }

+ 104 - 49
zzjs-admin/src/main/java/com/miaxis/app/controller/film/NotifyController.java

@@ -1,18 +1,23 @@
 package com.miaxis.app.controller.film;
 
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.miaxis.common.config.WxpayConfig;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.domain.Response;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.AesUtil;
+import com.miaxis.common.utils.uuid.CommonUtils;
 import com.miaxis.feign.dto.FilmDTO;
+import com.miaxis.feign.dto.FilmMcpData;
+import com.miaxis.feign.dto.FilmXdResult;
 import com.miaxis.film.domain.FilmOrder;
 import com.miaxis.film.domain.RefundRecord;
 import com.miaxis.film.dto.*;
 import com.miaxis.film.service.IFilmOrderService;
 import com.miaxis.film.service.IRefundRecordService;
+import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.Data;
@@ -21,8 +26,10 @@ import lombok.extern.slf4j.Slf4j;
 import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Base64Utils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -30,8 +37,12 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.IOException;
-import java.security.GeneralSecurityException;
+import java.nio.charset.StandardCharsets;
+import java.security.*;
+import java.security.cert.X509Certificate;
+import java.util.Base64;
 
 import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
 
@@ -56,6 +67,9 @@ public class NotifyController {
     @Autowired
     private  IRefundRecordService  refundRecordService;
 
+    @Autowired
+    private AutoUpdateCertificatesVerifier verifier;
+
 
     @Value("${film.notifyUrl}")
     private  String notifyUrl ;
@@ -65,11 +79,14 @@ public class NotifyController {
      */
     @PostMapping(value = "/wxpay")
     @ApiOperation("微信支付回调")
-    public WxNotifyReturnDTO wxpayNotify(@RequestBody FilmWxpayDTO filmWxpayDTO, HttpServletRequest request, BufferedReader br) throws GeneralSecurityException, IOException {
-        String bodyString = getBodyString(br);
-        System.out.println(bodyString);
-        Boolean pass =  validate(request);
+    public WxNotifyReturnDTO wxpayNotify(@RequestBody FilmWxpayDTO filmWxpayDTO, HttpServletRequest request) throws GeneralSecurityException, IOException {
 
+        String bodyString = getBodyString(request);
+        System.out.println(bodyString);
+        Boolean pass =  validate(request,bodyString);
+        if (!pass){
+            throw new CustomException("签名失败");
+        }
         String resourceString = getSourString(filmWxpayDTO);
         log.info(resourceString);
         JSONObject jsonObject = JSONObject.parseObject(resourceString);
@@ -82,48 +99,60 @@ public class NotifyController {
         return wxNotifyReturnDTO;
     }
 
-    private String getBodyString(BufferedReader br) {
-        String inputLine;
-
-        String str = "";
-
-        try {
-            while ((inputLine = br.readLine()) != null) {
-                str += inputLine;
-
+    private String getBodyString(HttpServletRequest request) {
+            BufferedReader br = null;
+            StringBuilder sb = new StringBuilder("");
+            try
+            {
+                br = request.getReader();
+                String str;
+                while ((str = br.readLine()) != null)
+                {
+                    sb.append(str);
+                }
+                br.close();
             }
+            catch (IOException e)
+            {
+                e.printStackTrace();
+            }
+            finally
+            {
+                if (null != br)
+                {
+                    try
+                    {
+                        br.close();
+                    }
+                    catch (IOException e)
+                    {
+                        e.printStackTrace();
+                    }
+                }
+            }
+            return sb.toString();
 
-            br.close();
-
-        } catch (IOException e) {
-            System.out.println("IOException: " + e);
-
-        }
-        return str;
     }
 
-    private Boolean validate(HttpServletRequest request) {
+    private Boolean validate(HttpServletRequest request, String bodyString) throws IOException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {
         String sign = request.getHeader("Wechatpay-Signature");
         String timestamp = request.getHeader("Wechatpay-Timestamp");
         String nonce = request.getHeader("Wechatpay-Nonce");
 
-
         StringBuffer sb = new StringBuffer();
         sb.append(timestamp + "\n");
         sb.append(nonce + "\n");
-        System.out.println(sb);
-        return true;
-
-//        File file = new ClassPathResource("wechatpay/apiclient_key.pem").getFile();
-//        String realPath =file.getAbsolutePath();
-//        PrivateKey privateKey = CommonUtils.getPrivateKey(realPath);
-//        // 进行签名服务
-//        Signature signature = Signature.getInstance("SHA256withRSA");
-//        signature.initSign(privateKey);
-//        signature.update(sb.toString().getBytes("UTF-8"));
-//        byte[] signedData = signature.sign();
-//        String base64Str =  Base64.getEncoder().encodeToString(signedData);
-
+        sb.append(bodyString + "\n");
+        X509Certificate validCertificate = verifier.getValidCertificate();
+        // 进行签名服务
+        Signature signature = Signature.getInstance("SHA256withRSA");
+        // 用微信平台公钥对签名器进行初始化
+        signature.initVerify(validCertificate);
+        // 把我们构造的验签名串更新到签名器中
+        signature.update(sb.toString().getBytes(StandardCharsets.UTF_8));
+        Boolean result = signature.verify(Base64Utils.decodeFromString(sign));
+        log.info("微信支付回调验签:"+result.toString());
+        return result;
 
     }
 
@@ -285,34 +314,60 @@ public class NotifyController {
             threadPoolTaskExecutor.execute(new Runnable() {
                 @Override
                 public void run() {
+                    FilmOrderCreateDTO filmOrderCreateDTO = filmOrderJsonData.getFilmOrderCreateDTO();
                     FilmDTO filmDTO = new FilmDTO();
-                    filmDTO.setUrl("api/order/create");
+                    if (filmOrderCreateDTO.getTicketType() ==1){
+                        filmDTO.setUrl("api/order/create");
+                    }else if (filmOrderCreateDTO.getTicketType() ==2){
+                        filmDTO.setUrl("api/order/create-soon-order");
+                    }
+
                     StringBuffer paramData =  new StringBuffer();
-                    FilmOrderCreateDTO filmOrder = filmOrderJsonData.getFilmOrderCreateDTO();
-                    paramData.append("showId="+filmOrder.getShowId()+"&");
-                    paramData.append("seat="+filmOrder.getSeat()+"&");
-                    if (filmOrder.getReservedPhone() != null){
-                        paramData.append("reservedPhone="+filmOrder.getReservedPhone()+"&");
+                    paramData.append("showId="+filmOrderCreateDTO.getShowId()+"&");
+                    paramData.append("seat="+filmOrderCreateDTO.getSeat()+"&");
+                    if (filmOrderCreateDTO.getReservedPhone() != null){
+                        paramData.append("reservedPhone="+filmOrderCreateDTO.getReservedPhone()+"&");
                     }
-                    paramData.append("thirdOrderId="+filmOrder.getThirdOrderId()+"&");
+                    paramData.append("thirdOrderId="+filmOrderCreateDTO.getThirdOrderId()+"&");
                     paramData.append("notifyUrl="+notifyUrl+"&");
-                    if (filmOrder.getSeatId() != null){
-                        paramData.append("seatId="+filmOrder.getSeatId()+"&");
+                    if (filmOrderCreateDTO.getSeatId() != null){
+                        paramData.append("seatId="+filmOrderCreateDTO.getSeatId()+"&");
                     }
-                    if (filmOrder.getSeatNo() != null){
-                        paramData.append("seatNo="+filmOrder.getSeatNo()+"&");
+                    if (filmOrderCreateDTO.getSeatNo() != null){
+                        paramData.append("seatNo="+filmOrderCreateDTO.getSeatNo()+"&");
                     }
-                    paramData.append("acceptChangeSeat="+filmOrder.getAcceptChangeSeat());
+                    paramData.append("acceptChangeSeat="+filmOrderCreateDTO.getAcceptChangeSeat());
                     filmDTO.setParamData(paramData.toString());
 
                     String s = filmOrderService.excuteFilmApi(filmDTO);
                     log.info("电影下单返回值:"+s);
+                    FilmXdResult filmXdResult = JSONObject.parseObject(s, FilmXdResult.class);
+                    //如果返回值不是200 ,则调用退款流程
+                    if (filmXdResult.getCode()!=200){
+                        String refundCode = getOrderCode(null);
+                        filmOrder.setOutRefundNo(refundCode);
+                        try {
+                            refundRecordService.refund(filmOrder,refundCode);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }else {
+                        if (filmXdResult.getData()!= null){
+                            FilmMcpData filmMcpData = filmXdResult.getData();
+                            filmOrderJsonData.setFilmMcpData(filmMcpData);
+                            filmOrder.setOrderDataJson(JSONObject.toJSONString(filmOrderJsonData));
+
+                        }
+                    }
+
+
+                    filmOrderService.updateById(filmOrder);
 
                 }
             });
         }
 
-        filmOrderService.updateById(filmOrder);
+
     }
 
     private String getSourString(FilmWxpayDTO filmWxpayDTO) throws GeneralSecurityException, IOException {

+ 24 - 0
zzjs-admin/src/main/java/com/miaxis/pc/controller/car/CarController.java

@@ -0,0 +1,24 @@
+package com.miaxis.pc.controller.car;
+
+import com.miaxis.car.service.ICarBrandInfoService;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author wwl
+ * @version 1.0
+ * @date 2021/5/21 10:05
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/pc/car")
+@Api(tags={"【pc-汽车品牌】"})
+public class CarController {
+
+    private final ICarBrandInfoService carBrandInfoService;
+
+
+
+}

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

@@ -115,7 +115,7 @@ public class CommonController
 
         FileInfo fileInfo = new FileInfo();
         fileInfo.setFileType(fileUploadTypeEnum.getFileType());
-        fileInfo.setFilePath(key+storagefileName);
+        fileInfo.setFilePath(key);
         fileInfo.setFileUrl(fileUrl);
         //fileInfo.setRemark(remark);
         fileInfoService.save(fileInfo);

+ 21 - 2
zzjs-admin/src/test/java/com/miaxis/test/NormalTest.java

@@ -4,12 +4,16 @@ import com.miaxis.ZzjsApplication;
 import com.miaxis.film.domain.FilmOrder;
 import com.miaxis.film.service.IFilmOrderService;
 import com.miaxis.film.service.IRefundRecordService;
+import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.math.BigInteger;
+import java.security.cert.X509Certificate;
+
 @SpringBootTest(classes = ZzjsApplication.class)
 @RunWith(SpringRunner.class)
 public class NormalTest {
@@ -18,10 +22,25 @@ public class NormalTest {
 
     @Autowired
     private IRefundRecordService refundRecordService;
+
+    @Autowired
+    private AutoUpdateCertificatesVerifier verifier;
     @Test
     public void test1() throws Exception {
-        FilmOrder filmOrder = filmOrderService.getByOutTradeNo("12021051815555556348172644409486");
-        refundRecordService.refund(filmOrder,"12021051815333778448136985596487");
+        FilmOrder filmOrder = filmOrderService.getByOutTradeNo("12021052416003523348114349059153");
+        refundRecordService.refund(filmOrder,"12021051815333778448136985596488");
+        FilmOrder filmOrder1 = filmOrderService.getByOutTradeNo("12021052415260767148145493655617");
+        refundRecordService.refund(filmOrder1,"12021051815333778448136985596489");
+    }
+
+
+    @Test
+    public void test2() throws Exception {
+        X509Certificate validCertificate = verifier.getValidCertificate();
+        BigInteger serialNumber = validCertificate.getSerialNumber();
+        System.out.println(serialNumber);
+
+
     }
 
 

+ 128 - 0
zzjs-admin/src/test/java/com/miaxis/test/UpdateCarTest.java

@@ -0,0 +1,128 @@
+package com.miaxis.test;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.miaxis.ZzjsApplication;
+import com.miaxis.car.domain.CarBrandInfo;
+import com.miaxis.car.service.ICarBrandInfoService;
+import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.enums.FileUploadTypeEnum;
+import com.miaxis.feign.service.ICarService;
+import com.qcloud.cos.COSClient;
+import com.qcloud.cos.model.ObjectMetadata;
+import com.qcloud.cos.model.PutObjectRequest;
+import com.qcloud.cos.model.PutObjectResult;
+import io.swagger.annotations.ApiOperation;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author wwl
+ * @version 1.0
+ * @date 2021/5/21 11:51
+ */
+@SpringBootTest(classes = ZzjsApplication.class)
+@RunWith(SpringRunner.class)
+public class UpdateCarTest {
+
+    @Autowired
+    private ICarService carService;
+
+    @Autowired
+    private ICarBrandInfoService carBrandInfoService;
+
+    @Autowired
+    private COSClient cosClient;
+
+    private static String bucketName="t1-1305573081";
+    private static String path="https://t1-1305573081.file.myqcloud.com";
+    private static String preffix="t1";
+
+    /**
+     * 获取第三方汽车品牌接口
+     * @return
+     */
+    @Test
+    public void carBrand(){
+        String result = carService.car("brand","0,1,2,3","300");
+        JSONObject jsonString = JSONObject.parseObject(result);
+        List<Map> info = (List<Map>)jsonString.get("info");
+        ArrayList<CarBrandInfo> carBrandInfos = new ArrayList<>();
+        for (Map map : info) {
+            carBrandInfos.add(JSON.parseObject(JSON.toJSONString(map), CarBrandInfo.class));
+        }
+//        carBrandInfoService.saveBatch(carBrandInfos);
+        System.out.println(carBrandInfos);
+    }
+
+
+    @Test
+    public void test1() throws Exception {
+
+        List<CarBrandInfo> list = carBrandInfoService.list(new QueryWrapper<CarBrandInfo>().like("img", "car"));
+
+        for (CarBrandInfo carBrandInfo : list) {
+            URL httpUrl = new URL(carBrandInfo.getImg());
+            HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
+            conn.setRequestMethod("GET");
+            conn.setConnectTimeout(5 * 1000);
+            //通过输入流获取图片数据
+            InputStream inStream = conn.getInputStream();
+            //从输入流中获取得到图片的二进制数据
+            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+            byte[] buffer = new byte[1024];
+            int len = 0;
+            while( (len=inStream.read(buffer)) != -1 ){
+                outStream.write(buffer, 0, len);
+            }
+            byte[] btImg = outStream.toByteArray();
+            InputStream byteArrayInputStream = new ByteArrayInputStream(btImg);
+            int length = btImg.length;
+            ObjectMetadata objectMetadata = new ObjectMetadata();
+            // 从输入流上传必须制定content length, 否则http客户端可能会缓存所有数据,存在内存OOM的情况
+            objectMetadata.setContentLength(length);
+            // bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
+            String bucketName = this.bucketName;
+
+            Calendar cal = Calendar.getInstance();
+            int year = cal.get(Calendar.YEAR);
+            int month=cal.get(Calendar.MONTH)+ 1;
+            int day=cal.get(Calendar.DATE);
+
+            //存储的文件名
+            String storagefileName = System.currentTimeMillis() + ".png";
+            // 指定要上传到 COS 上的路径
+            String key = "/"+this.preffix+"/"+FileUploadTypeEnum.CAR_BRAND.getFileType()+"/"+year+"/"+month+"/"+day+"/"+storagefileName;
+            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, byteArrayInputStream,objectMetadata);
+            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
+            String fileUrl=this.path + putObjectRequest.getKey();
+            inStream.close();
+            System.out.println("--------------"+fileUrl);
+            System.out.println("--------------"+key);
+
+            //更新汽车品牌logo
+            carBrandInfo.setImg(fileUrl);
+            carBrandInfo.setImgPath(key);
+            carBrandInfoService.updateById(carBrandInfo);
+        }
+
+    }
+
+
+
+}

+ 14 - 16
zzjs-common/src/main/java/com/miaxis/common/config/BeanConfig.java

@@ -9,8 +9,6 @@ import com.qcloud.cos.http.HttpProtocol;
 import com.qcloud.cos.region.Region;
 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.PrivateKeySigner;
-import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
 import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
 import org.apache.http.client.HttpClient;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,15 +18,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.core.io.ClassPathResource;
 
 import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
 import java.security.PrivateKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.util.Base64;
 
 
 @Configuration
@@ -49,7 +39,13 @@ public class BeanConfig {
 
     @Autowired
     private  WxpayConfig wxpayConfig;
+    @Autowired
+    private AutoUpdateCertificatesVerifier verifier;
 
+    /**
+     * 腾讯云 COS
+     * @return
+     */
 
     @Bean
     public COSClient  configBean() {
@@ -69,17 +65,16 @@ public class BeanConfig {
     }
 
 
+    /**
+     * 微信支付 httpclient 对象
+     * @return
+     * @throws Exception
+     */
     @Bean
     public HttpClient wxpayConfigBean() throws Exception{
         File file = new ClassPathResource("wechatpay/apiclient_key.pem").getFile();
         String realPath =file.getAbsolutePath();
         PrivateKey privateKey = CommonUtils.getPrivateKey(realPath);
-        // 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)
-        AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
-                new WechatPay2Credentials(wxpayConfig.getMerchantId(),
-                        new PrivateKeySigner(wxpayConfig.getSerialNumber(), privateKey)),
-                wxpayConfig.getV3key().getBytes("utf-8"));
-
         // 初始化httpClient
         HttpClient httpClient = WechatPayHttpClientBuilder.create()
                 .withMerchant(wxpayConfig.getMerchantId(), wxpayConfig.getSerialNumber(), privateKey)
@@ -88,4 +83,7 @@ public class BeanConfig {
 
     }
 
+
+
+
 }

+ 47 - 0
zzjs-common/src/main/java/com/miaxis/common/config/WxVerifierConfig.java

@@ -0,0 +1,47 @@
+package com.miaxis.common.config;
+
+import com.miaxis.common.utils.uuid.CommonUtils;
+import com.qcloud.cos.COSClient;
+import com.qcloud.cos.ClientConfig;
+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.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
+import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier;
+import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
+import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
+import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
+import org.apache.http.client.HttpClient;
+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;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.File;
+import java.security.PrivateKey;
+
+
+@Configuration
+public class WxVerifierConfig {
+
+
+    @Autowired
+    private  WxpayConfig wxpayConfig;
+
+    @Bean
+    public AutoUpdateCertificatesVerifier getVerifier() throws Exception{
+        File file = new ClassPathResource("wechatpay/apiclient_key.pem").getFile();
+        String realPath =file.getAbsolutePath();
+        PrivateKey privateKey = CommonUtils.getPrivateKey(realPath);
+        // 加载平台证书(mchId:商户号,mchSerialNo:商户证书序列号,apiV3Key:V3密钥)
+        AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
+                new WechatPay2Credentials(wxpayConfig.getMerchantId(),
+                        new PrivateKeySigner(wxpayConfig.getSerialNumber(), privateKey)),
+                wxpayConfig.getV3key().getBytes("utf-8"));
+        return verifier;
+
+    }
+
+}

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

@@ -10,6 +10,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"),
     OTHERS(99, "others", MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, "其他文件");
 
     private final Integer code;

+ 0 - 35
zzjs-common/src/main/java/com/miaxis/common/enums/HomePageDataType.java

@@ -1,35 +0,0 @@
-package com.miaxis.common.enums;
-
-/**
- * @author wwl
- * @version 1.0
- * @date 2021/4/27 15:18
- */
-public enum HomePageDataType {
-
-    CAROUSElCHART(1, "carouselChart", "轮播图"),
-    COUPON(2, "coupon", "优惠劵"),
-    MENU(3, "menu", "首页菜单");
-
-    private final Integer code;
-    private final String dataType;//文件类型
-    private final String info;
-
-    HomePageDataType(Integer code, String dataType, String info)
-    {
-        this.code = code;
-        this.dataType = dataType;
-        this.info = info;
-    }
-
-    public Integer getCode() {
-        return code;
-    }
-
-    public String getDataType() {
-        return dataType;
-    }
-
-    public String getInfo() {
-        return info;
-    }}

+ 44 - 0
zzjs-service/src/main/java/com/miaxis/car/domain/CarBrandInfo.java

@@ -0,0 +1,44 @@
+package com.miaxis.car.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.miaxis.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 汽车品牌表
+ * @author wwl
+ * @version 1.0
+ * @date 2021/5/21 10:36
+ */
+@Data
+@TableName("car_brand_info")
+@ApiModel(value = "CarBrandInfo", description = "汽车品牌表 car_brand_info")
+public class CarBrandInfo {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id")
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @TableField("name")
+    @ApiModelProperty(value = "汽车品牌")
+    private String name;
+
+    @TableField("img")
+    @ApiModelProperty(value = "品牌logo")
+    private String img;
+
+    @TableField("first_Letter")
+    @ApiModelProperty(value = "品牌首字母")
+    private String firstletter;
+
+    @TableField("img_path")
+    @ApiModelProperty(value = "品牌logo文件路径")
+    private String imgPath;
+
+
+}

+ 12 - 0
zzjs-service/src/main/java/com/miaxis/car/mapper/CarBrandInfoMapper.java

@@ -0,0 +1,12 @@
+package com.miaxis.car.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.miaxis.car.domain.CarBrandInfo;
+
+/**
+ * @author wwl
+ * @version 1.0
+ * @date 2021/5/21 10:46
+ */
+public interface CarBrandInfoMapper extends BaseMapper<CarBrandInfo> {
+}

+ 12 - 0
zzjs-service/src/main/java/com/miaxis/car/service/ICarBrandInfoService.java

@@ -0,0 +1,12 @@
+package com.miaxis.car.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.miaxis.car.domain.CarBrandInfo;
+
+/**
+ * @author wwl
+ * @version 1.0
+ * @date 2021/5/21 10:41
+ */
+public interface ICarBrandInfoService extends IService<CarBrandInfo> {
+}

+ 16 - 0
zzjs-service/src/main/java/com/miaxis/car/service/impl/CarBrandInfoServiceImpl.java

@@ -0,0 +1,16 @@
+package com.miaxis.car.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.miaxis.car.domain.CarBrandInfo;
+import com.miaxis.car.mapper.CarBrandInfoMapper;
+import com.miaxis.car.service.ICarBrandInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author wwl
+ * @version 1.0
+ * @date 2021/5/21 10:42
+ */
+@Service
+public class CarBrandInfoServiceImpl extends ServiceImpl<CarBrandInfoMapper, CarBrandInfo> implements ICarBrandInfoService {
+}

+ 44 - 85
zzjs-service/src/main/java/com/miaxis/carousel/service/impl/HomePageDataInfoServiceImpl.java

@@ -9,11 +9,12 @@ import com.miaxis.carousel.service.IHomePageDataInfoService;
 import com.miaxis.carousel.vo.HomePageDataInfoVo;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.domain.Response;
-import com.miaxis.common.enums.HomePageDataType;
+import com.miaxis.common.core.domain.entity.SysDictData;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.bean.BeanUtils;
 import com.miaxis.file.domain.FileInfo;
 import com.miaxis.file.service.IFileInfoService;
+import com.miaxis.system.mapper.SysDictDataMapper;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -39,6 +40,8 @@ public class HomePageDataInfoServiceImpl extends ServiceImpl<HomePageDataInfoMap
 
     private final IFileInfoService fileInfoService;
 
+    private final SysDictDataMapper dictDataMapper;
+
     /**
      * 查询首页数据列表
      *
@@ -119,18 +122,19 @@ public class HomePageDataInfoServiceImpl extends ServiceImpl<HomePageDataInfoMap
     @Transactional(rollbackFor = Exception.class)
     public Response removeCarouselByIds(Long[] ids) {
 
+        //首页字典类型
+        List<SysDictData> sysDictData = dictDataMapper.selectDictDataByType("wx_menu_type");
+        //删除数据
         for (Long id : ids) {
             this.update(new UpdateWrapper<HomePageDataInfo>().set("status","1").eq("id",id));
-
-            //判断类型 删除缓存
-            if (redisTemplate.hasKey(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.CAROUSElCHART.getDataType()+":"+id)){
-                redisTemplate.delete(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.CAROUSElCHART.getDataType() + ":" + id);
-            }
-            if (redisTemplate.hasKey(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.COUPON.getDataType()+":"+id)){
-                redisTemplate.delete(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.COUPON.getDataType() + ":" + id);
-            }
-            if (redisTemplate.hasKey(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.MENU.getDataType()+":"+id)){
-                redisTemplate.delete(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.MENU.getDataType() + ":" + id);
+        }
+        //根据字典类型 更新缓存
+        for (SysDictData dictData : sysDictData) {
+            for (Long id : ids) {
+                //判断类型 删除缓存
+                if (redisTemplate.hasKey(Constants.HOME_PAGE_DATA_KEY  + dictData.getDictValue()+":"+id)){
+                    redisTemplate.delete(Constants.HOME_PAGE_DATA_KEY  + dictData.getDictValue() + ":" + id);
+                }
             }
         }
         return Response.success();
@@ -144,76 +148,33 @@ public class HomePageDataInfoServiceImpl extends ServiceImpl<HomePageDataInfoMap
      */
     @Override
     public Response getHomePageDataList() {
-
         Map<String, List<HomePageDataInfoVo>> map = new HashMap<>();
 
-        List<HomePageDataInfoVo> carouselChartInfoVos = new ArrayList<>(); //轮播图list
-        List<HomePageDataInfoVo> couponInfos = new ArrayList<>(); //优惠劵list
-        List<HomePageDataInfoVo> menuInfos = new ArrayList<>(); //首页菜单list
-
-        //-------------------从缓存获取轮播图-------------------
-        Set carouselChartkeys = redisTemplate.keys(Constants.HOME_PAGE_DATA_KEY + HomePageDataType.CAROUSElCHART.getDataType()+":*");
-        if (!carouselChartkeys.isEmpty()){
-            for (Object key : carouselChartkeys) {
-                String jsonStr = (String) redisTemplate.opsForValue().get(key);
-                HomePageDataInfoVo homePageDataInfoVo = JSONObject.parseObject(jsonStr).toJavaObject(HomePageDataInfoVo.class);
-                carouselChartInfoVos.add(homePageDataInfoVo);
-            }
-        }else {
-            //数据库获取(此处可不做查询!)
-            HomePageDataInfo homePageDataInfo = new HomePageDataInfo();
-            homePageDataInfo.setDataType(HomePageDataType.CAROUSElCHART.getDataType());
-            homePageDataInfo.setStatus("0");//启用状态
-            carouselChartInfoVos = homePageDataInfoMapper.selectHomePageDataInfoList(homePageDataInfo);
-        }
-        //排序
-        List<HomePageDataInfoVo> chartInfoVos = carouselChartInfoVos.stream()
-                .sorted(Comparator.comparing(HomePageDataInfoVo::getWeight).reversed())
-                .collect(Collectors.toList());
-
-        //-------------------从缓存获取优惠劵-------------------
-        Set couponKeys = redisTemplate.keys(Constants.HOME_PAGE_DATA_KEY + HomePageDataType.COUPON.getDataType()+":*");
-        if (!couponKeys.isEmpty()){
-            for (Object key : couponKeys) {
-                String jsonStr = (String) redisTemplate.opsForValue().get(key);
-                HomePageDataInfoVo homePageDataInfoVo = JSONObject.parseObject(jsonStr).toJavaObject(HomePageDataInfoVo.class);
-                couponInfos.add(homePageDataInfoVo);
+        //首页字典类型
+        List<SysDictData> sysDictData = dictDataMapper.selectDictDataByType("wx_menu_type");
+        for (SysDictData dictData : sysDictData) {
+            List<HomePageDataInfoVo> newInfos = new ArrayList<>();
+            Set carouselChartkeys = redisTemplate.keys(Constants.HOME_PAGE_DATA_KEY + dictData.getDictValue()+":*");
+            if (!carouselChartkeys.isEmpty()){
+                for (Object key : carouselChartkeys) {
+                    String jsonStr = (String) redisTemplate.opsForValue().get(key);
+                    HomePageDataInfoVo homePageDataInfoVo = JSONObject.parseObject(jsonStr).toJavaObject(HomePageDataInfoVo.class);
+                    newInfos.add(homePageDataInfoVo);
+                }
+            }else {
+                //数据库获取(此处可不做查询!)
+                HomePageDataInfo homePageDataInfo = new HomePageDataInfo();
+                homePageDataInfo.setDataType(dictData.getDictValue());
+                homePageDataInfo.setStatus("0");//启用状态
+                newInfos = homePageDataInfoMapper.selectHomePageDataInfoList(homePageDataInfo);
             }
-        }else {
-            //数据库获取(此处可不做查询!)
-            HomePageDataInfo homePageDataInfo = new HomePageDataInfo();
-            homePageDataInfo.setDataType(HomePageDataType.COUPON.getDataType());
-            homePageDataInfo.setStatus("0");//启用状态
-            couponInfos = homePageDataInfoMapper.selectHomePageDataInfoList(homePageDataInfo);
-        }
-        //排序
-        List<HomePageDataInfoVo> couponInfoVos = couponInfos.stream()
-                .sorted(Comparator.comparing(HomePageDataInfoVo::getWeight).reversed())
-                .collect(Collectors.toList());
+            //排序
+            List<HomePageDataInfoVo> infoVos = newInfos.stream()
+                    .sorted(Comparator.comparing(HomePageDataInfoVo::getWeight).reversed())
+                    .collect(Collectors.toList());
 
-        //----------------从缓存获取首页菜单-------------------
-        Set menuKeys = redisTemplate.keys(Constants.HOME_PAGE_DATA_KEY + HomePageDataType.MENU.getDataType()+":*");
-        if (!menuKeys.isEmpty()){
-            for (Object key : menuKeys) {
-                String jsonStr = (String) redisTemplate.opsForValue().get(key);
-                HomePageDataInfoVo homePageDataInfoVo = JSONObject.parseObject(jsonStr).toJavaObject(HomePageDataInfoVo.class);
-                menuInfos.add(homePageDataInfoVo);
-            }
-        }else {
-            //数据库获取(此处可不做查询!)
-            HomePageDataInfo homePageDataInfo = new HomePageDataInfo();
-            homePageDataInfo.setDataType(HomePageDataType.MENU.getDataType());
-            homePageDataInfo.setStatus("0");//启用状态
-            menuInfos = homePageDataInfoMapper.selectHomePageDataInfoList(homePageDataInfo);
+            map.put(dictData.getDictValue(),infoVos);
         }
-        //排序
-        List<HomePageDataInfoVo> menuInfoVos = menuInfos.stream()
-                .sorted(Comparator.comparing(HomePageDataInfoVo::getWeight).reversed())
-                .collect(Collectors.toList());
-
-        map.put(HomePageDataType.CAROUSElCHART.getDataType(),chartInfoVos);
-        map.put(HomePageDataType.COUPON.getDataType(),couponInfoVos);
-        map.put(HomePageDataType.MENU.getDataType(),menuInfoVos);
 
         return Response.success(map);
     }
@@ -248,15 +209,13 @@ public class HomePageDataInfoServiceImpl extends ServiceImpl<HomePageDataInfoMap
         JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(homePageDataInfo));
         jsonObject.put("fileUrl",fileInfo.getFileUrl());
 
-        //判断类型 删除缓存
-        if (redisTemplate.hasKey(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.CAROUSElCHART.getDataType()+":"+homePageDataInfo.getId())){
-            redisTemplate.delete(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.CAROUSElCHART.getDataType() + ":" + homePageDataInfo.getId());
-        }
-        if (redisTemplate.hasKey(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.COUPON.getDataType()+":"+homePageDataInfo.getId())){
-            redisTemplate.delete(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.COUPON.getDataType() + ":" + homePageDataInfo.getId());
-        }
-        if (redisTemplate.hasKey(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.MENU.getDataType()+":"+homePageDataInfo.getId())){
-            redisTemplate.delete(Constants.HOME_PAGE_DATA_KEY  + HomePageDataType.MENU.getDataType() + ":" + homePageDataInfo.getId());
+        //首页字典类型
+        List<SysDictData> sysDictData = dictDataMapper.selectDictDataByType("wx_menu_type");
+        //根据字典类型 删除缓存
+        for (SysDictData dictData : sysDictData) {
+            if (redisTemplate.hasKey(Constants.HOME_PAGE_DATA_KEY  + dictData.getDictValue()+":"+homePageDataInfo.getId())){
+                redisTemplate.delete(Constants.HOME_PAGE_DATA_KEY  + dictData.getDictValue() + ":" + homePageDataInfo.getId());
+            }
         }
 
         //同时更新缓存(根据type拼接)

+ 17 - 0
zzjs-service/src/main/java/com/miaxis/feign/dto/FilmMcpData.java

@@ -0,0 +1,17 @@
+package com.miaxis.feign.dto;
+
+
+import lombok.Data;
+
+/**
+ * 电影秒出票数据类型
+ */
+
+@Data
+public class FilmMcpData {
+    String third_order_id;
+    String ticket;
+    Integer ticketStatus;
+    String order_id;
+
+}

+ 16 - 0
zzjs-service/src/main/java/com/miaxis/feign/dto/FilmXdResult.java

@@ -0,0 +1,16 @@
+package com.miaxis.feign.dto;
+
+
+import lombok.Data;
+
+/**
+ * 电影下单返回类型
+ */
+
+@Data
+public class FilmXdResult {
+    Boolean success;
+    String message;
+    int code;
+    FilmMcpData data;
+}

+ 33 - 0
zzjs-service/src/main/java/com/miaxis/feign/service/ICarService.java

@@ -0,0 +1,33 @@
+package com.miaxis.feign.service;
+
+import com.miaxis.common.config.FeignConfig;
+import com.miaxis.feign.service.fallback.CarFallBackService;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author wwl
+ * @version 1.0
+ * @date 2021/5/21 10:13
+ */
+@FeignClient(name="carService",
+        url = "http://tool.bitefu.net",
+        fallbackFactory = CarFallBackService.class,configuration = FeignConfig.class)
+@Component
+public interface ICarService {
+
+    /**
+     *
+     * @param type brand
+     * @param from 数据源
+     * @param pagesize  数据源的量不一样 300调取所有
+     * @return
+     */
+    @GetMapping(value = "/car")
+    String car(@RequestParam("type") String type,
+               @RequestParam("from") String from,
+               @RequestParam("pagesize") String pagesize);
+
+}

+ 19 - 0
zzjs-service/src/main/java/com/miaxis/feign/service/fallback/CarFallBackService.java

@@ -0,0 +1,19 @@
+package com.miaxis.feign.service.fallback;
+
+import com.miaxis.feign.service.ICarService;
+import org.springframework.stereotype.Component;
+
+/**
+ *  调用服务端接口(异常、超时、宕机) 降级处理
+ * @author wwl
+ * @version 1.0
+ * @date 2021/5/21 10:20
+ */
+@Component
+public class CarFallBackService implements ICarService {
+
+    @Override
+    public String car(String type, String from, String pagesize) {
+        return "接口请求异常";
+    }
+}

+ 3 - 0
zzjs-service/src/main/java/com/miaxis/film/dto/FilmOrderCreateDTO.java

@@ -9,6 +9,9 @@ import lombok.Data;
 public class FilmOrderCreateDTO {
     private static final long serialVersionUID = 1L;
 
+    @ApiModelProperty(value = "购票类型: 1-竞价购票 2-秒出票" ,required=true,allowableValues ="1,2")
+    private int ticketType;
+
     @ApiModelProperty(value = "总金额, 单位分")
     private int total;
 

+ 3 - 1
zzjs-service/src/main/java/com/miaxis/film/dto/FilmOrderJsonData.java

@@ -1,5 +1,6 @@
 package com.miaxis.film.dto;
 
+import com.miaxis.feign.dto.FilmMcpData;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -16,7 +17,8 @@ public class FilmOrderJsonData {
     private CinemaData cinemaData;
     //电影订单回调信息
     private FilmOrderNotifyDTO filmOrderNotifyDTO ;
-
+    //快速出票
+    private FilmMcpData filmMcpData;
 
 
 

+ 1 - 1
zzjs-service/src/main/java/com/miaxis/film/service/impl/RefundRecordServiceImpl.java

@@ -72,7 +72,7 @@ public class RefundRecordServiceImpl extends ServiceImpl<RefundRecordMapper, Ref
         System.out.println(rootNode.toString());
 //        ByteArrayOutputStream bos = new ByteArrayOutputStream();
 //        objectMapper.writeValue(bos, rootNode);
-        httpPost.setEntity(new StringEntity(rootNode.toString()));
+        httpPost.setEntity(new StringEntity(rootNode.toString(), "utf-8"));
         HttpResponse response = httpClient.execute(httpPost);
         // 返回数据:
         String bodyAsString = EntityUtils.toString(response.getEntity());