Quellcode durchsuchen

微信支付修改,数据库表修改,消息修改,直播修改

ytf vor 2 Jahren
Ursprung
Commit
9dda0165c2
24 geänderte Dateien mit 562 neuen und 106 gelöschten Zeilen
  1. 3 3
      b2b2c/b2b2c-config-starter/pay-slodon-starter/src/main/java/com/slodon/b2b2c/starter/pay/SlodonPay.java
  2. BIN
      b2b2c/b2b2c-config-starter/pay-slodon-starter/src/main/resources/wx_cert/apiclient_cert.p12
  3. 20 20
      b2b2c/b2b2c-config-starter/pay-slodon-starter/src/main/resources/wx_cert/apiclient_cert.pem
  4. 26 26
      b2b2c/b2b2c-config-starter/pay-slodon-starter/src/main/resources/wx_cert/apiclient_key.pem
  5. 2 0
      b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/enums/WxLiveGoodsEnum.java
  6. 22 0
      b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/errors/WxCodeError.java
  7. 9 4
      b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/live/dto/LiveGoodsInfoDto.java
  8. 2 1
      b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/live/pojo/LiveBroadcast.java
  9. 4 0
      b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/live/vo/LivesVO.java
  10. 2 2
      b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/msg/pojo/SmsCode.java
  11. 15 0
      b2b2c/b2b2c-web/pom.xml
  12. 39 1
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/job/ScheduleTaskController.java
  13. 68 5
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/live/LiveBroadController.java
  14. 197 33
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/live/LiveGoodsController.java
  15. 1 1
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/msg/seller/SellerVerifyController.java
  16. 25 0
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/write/live/LiveBroadWriteMapper.java
  17. 9 0
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/model/live/LiveBroadModel.java
  18. 12 2
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/sms/TencentSmsSender.java
  19. 3 0
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/sms/YunPianSmsSender.java
  20. 5 0
      b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/sms/base/SmsSender.java
  21. 1 1
      b2b2c/b2b2c-web/src/main/resources/application.yml
  22. 20 0
      b2b2c/b2b2c-web/src/main/resources/mapper/write/Live/LiveBroadWriteMapper.xml
  23. 24 1
      b2b2c/sql/建表语句.sql
  24. 53 6
      b2b2c/sql/项目修改语句.sql

+ 3 - 3
b2b2c/b2b2c-config-starter/pay-slodon-starter/src/main/java/com/slodon/b2b2c/starter/pay/SlodonPay.java

@@ -71,8 +71,8 @@ public class SlodonPay {
71 71
      * @throws Exception
72 72
      */
73 73
     public static void main(String[] args) throws Exception {
74
-        WxPayProperties wxPayProperties = new WxPayProperties("wx43aba958092afe0c","1489871402",
75
-                "acAcsnklknskfnslalcn134643sljlda","classpath:wx_cert/apiclient_cert.p12");
74
+        WxPayProperties wxPayProperties = new WxPayProperties("wxa9bd66952a99ea71","1629060104",
75
+                "12378987568fWnkflqafsnkJBKBKFEKB","classpath:wx_cert/apiclient_cert.p12");
76 76
         SlodonPay slodonPay = new SlodonPay();
77 77
         SlodonPayRequest payRequest = new SlodonPayRequest();
78 78
         payRequest.setPayMethod(PayConst.METHOD_WX);
@@ -86,7 +86,7 @@ public class SlodonPay {
86 86
         /*ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
87 87
         HttpServletRequest request = requestAttributes.getRequest();*/
88 88
         payRequest.setIp("110.178.52.91");
89
-        payRequest.setOpenId("oErsf0ZrpmLkLscDslQICS1QIEfs");
89
+        payRequest.setOpenId("ofWtR464z9QqDvrc0QIdcMldt4ms");
90 90
         SlodonPayResponse slodonPayResponse = slodonPay.unitePay(payRequest);
91 91
         System.out.println(slodonPayResponse);
92 92
     }

BIN
b2b2c/b2b2c-config-starter/pay-slodon-starter/src/main/resources/wx_cert/apiclient_cert.p12


+ 20 - 20
b2b2c/b2b2c-config-starter/pay-slodon-starter/src/main/resources/wx_cert/apiclient_cert.pem

@@ -1,24 +1,24 @@
1 1
 -----BEGIN CERTIFICATE-----
2
-MIID8zCCAtugAwIBAgIUINijgdgIN2dSPxI7BAB2Zgwtb4gwDQYJKoZIhvcNAQEL
2
+MIIEDjCCAvagAwIBAgIUX4+4udgGmC4+hT71/5+Suh93JOEwDQYJKoZIhvcNAQEL
3 3
 BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
4 4
 FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
5
-Q0EwHhcNMjIwNTE3MDI0MzA1WhcNMjcwNTE2MDI0MzA1WjCBhDETMBEGA1UEAwwK
6
-MTQ4OTg3MTQwMjEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
7
-DCflsbHopb/kupHlvpfniannvZHnu5znp5HmioDmnInpmZDlhazlj7gxCzAJBgNV
8
-BAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
9
-ADCCAQoCggEBAKWHyjcjtxj+6k2TMwrIq71sfmZPrqJmTqivFQ3QOQ5tXeqhvdy3
10
-ElhSQ2qmJwO5ouR0INWxhkxqcjGTVuW3UazFMQwnrg9Q3f7ZOuyCYo2m//83JezQ
11
-SAAlv1FhWQAMhjb46lZAVhOYeddq+8dN262MEx1OxPEI7w/8WxF7YVkE7TpMGd9U
12
-/jthyb7VnFZH2j9dKE6IXcs8psMhPkDATsQifRaDr63hwXZ33PexFWh/Pwwc8zs7
13
-nDSD0DOgh80KGTxE1vpvGLJX2DmfZm7eOu8ePjePrvE7FQxpsX6O/rzDilcK5OHn
14
-+AxNidm4rUeTuF+MwxPQbENERvi8tGNhskkCAwEAAaOBgTB/MAkGA1UdEwQCMAAw
15
-CwYDVR0PBAQDAgTwMGUGA1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVz
16
-LmNvbS5jbi9wdWJsaWMvaXRydXNjcmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQz
17
-OTc1NDk4NDZDMDFDM0U4RUJEMjANBgkqhkiG9w0BAQsFAAOCAQEAc/Boyxf2gtmN
18
-eG6TjmilNTWoxY5KwKyAMTCanhwSYOFK70vl+zZcy1jlEFAaU84E3HUqcMmlmpl1
19
-STlq/Ej2hTe9p0/v0VtQuorSJKb7PLU6sfx3nN7IUwWJT2WDncN+ftHPwGxDbDm2
20
-o+dFTq2/EZnh7lRQHwQFS/wpczo2yuQoCkaFga4RAqIaEK+95pa/ztiAD3dzcgbt
21
-ZQTfBEE+pXc4MbN2WOa9RAwHp+XkIFZCwG2iphEjq3g/WsfEO3eDMSkNwuia93XF
22
-zsVamQj10HRIWwJCUlzcBU0xY+B083rwViZjDnGCFvwPhxrcgU9jwr9HwzyWmkfI
23
-jaaOsRrZMg==
5
+Q0EwHhcNMjIwNzI1MDEzNzIyWhcNMjcwNzI0MDEzNzIyWjCBnzETMBEGA1UEAwwK
6
+MTYyOTA2MDEwNDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMUswSQYDVQQL
7
+DELljY7pmLPmlrDmnZDmlpnnp5HmioDpm4blm6LmnInpmZDlhazlj7jlhpzkuJrk
8
+uqfkuJrlvIDlj5HliIblhazlj7gxCzAJBgNVBAYMAkNOMREwDwYDVQQHDAhTaGVu
9
+WmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANknkCP8mdPOA6Q3
10
+ghbjHrgI8phsiM2EtAw5DM1yuTMhWwWzV/fGTio0F7xcGBBS1zLlkMXb0SV/iYDL
11
+X4dKG34deNIDNfg0cKEZkark00FnCzZlLQsS3MSrWK0UzNJzL3yKCGcHi0QJwqxw
12
+kCePEsOzfob4Djk7PsmirY5/98EXTIlfAzmQq2ONQXhUeGU/ab22R3EDMf10D6tE
13
+UOpzQa1IGJ4h/rwIZMJ1r9wEh+3viyUFFNR4b/Xu04WaG9UkllL72o2M7i6kYD09
14
+Lw1Dl7P+iMZtfsSDovFElruSV1pUnqm+b/6+UpJ9RmA44H9coQLCm5KnmEmfmRG0
15
+r6TDUWUCAwEAAaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgTwMGUGA1UdHwRe
16
+MFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVzLmNvbS5jbi9wdWJsaWMvaXRydXNj
17
+cmw/Q0E9MUJENDIyMEU1MERCQzA0QjA2QUQzOTc1NDk4NDZDMDFDM0U4RUJEMjAN
18
+BgkqhkiG9w0BAQsFAAOCAQEAAh4FyHAsdpWLhuVkXvfwu5C7KZSAGbqPHKROTS8N
19
+I7/8Kh+1PzqmHiAZXYXliT4Z/gKYWzLXcXtstT0KBk9CJ4Gl8tHLttcNkvHYVWkh
20
+Pdy7s9WBaxh8R87godpVlNjwHp+WLF5qx0ZWdQICWAH1R2ZjD3gd3eXUigdRfiZt
21
+hSzqrSt4bXj9StTB5+6C5GzZdWjcKLdmFBZ8o36V9Hz42DggMm4M1U5j0vNwZDt2
22
+LfPtfdfFUefEktfUM+/3YrYInLScjK1IIpD5foz/RxB4Z2vZ/I6Z6RVaxKbkG0MR
23
+OoAfXWsZkGjB6DCsKDLkLMSfqOklCT4uLRIKWenCuKquUQ==
24 24
 -----END CERTIFICATE-----

+ 26 - 26
b2b2c/b2b2c-config-starter/pay-slodon-starter/src/main/resources/wx_cert/apiclient_key.pem

@@ -1,28 +1,28 @@
1 1
 -----BEGIN PRIVATE KEY-----
2
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClh8o3I7cY/upN
3
-kzMKyKu9bH5mT66iZk6orxUN0DkObV3qob3ctxJYUkNqpicDuaLkdCDVsYZManIx
4
-k1blt1GsxTEMJ64PUN3+2TrsgmKNpv//NyXs0EgAJb9RYVkADIY2+OpWQFYTmHnX
5
-avvHTdutjBMdTsTxCO8P/FsRe2FZBO06TBnfVP47Ycm+1ZxWR9o/XShOiF3LPKbD
6
-IT5AwE7EIn0Wg6+t4cF2d9z3sRVofz8MHPM7O5w0g9AzoIfNChk8RNb6bxiyV9g5
7
-n2Zu3jrvHj43j67xOxUMabF+jv68w4pXCuTh5/gMTYnZuK1Hk7hfjMMT0GxDREb4
8
-vLRjYbJJAgMBAAECggEAJVfiDdh32SLBNykLLdahsAVG6sv1KNwNyM5e4JPmG1Qf
9
-COzeSWnfsJ82aFv9l0CM+B8evTbkhl7JTlfgFcjqmyCNdSGKihgDTRgyy+KKW0ye
10
-mjQV0TwX0jix1akxi+pHaSV0sGqpQJh4fFm9XXQ6KAfe1BDOK1aJoECdRu9fwdYW
11
-ykTJsXQcZdH9YCSwpGGyM7qPzhMFCGXbiKplEaoqc494FxhazzAJbWiTb6/NeXJ9
12
-XbPQWFSWlfBtC0ogh6T9OY8ldl2Y279cH4/9yTFDXV8rAmsE7QBajCC1o9GnmQIy
13
-1P/WQSYKaUN+PyrIa3XF+PwoZDhm+o2TCexZF9tmlQKBgQDS0QalqpF/WzKmCRQo
14
-z98OCc+THJaBmo8k1ARiZmimNVa8f72P6WGVvEzkNAdeV4lPPpQIP2WZ7I2M22F0
15
-8if99xMUOylecxm2tGNxw/mhxMo4yIOua8nMD3oXVJkngNivUnqDkMN3V9Qx9139
16
-B3KJ1xqVL0Bsqwy7YEjfq8L4XwKBgQDJAge6J2ZlcP+xhCoxRvY/+AmZjCQN0xfJ
17
-igenF/HPfH7Yho882N2XUF/Ec5y+VYugdoHetHuOv1AgnbXol+rwec7J6BmJQeNZ
18
-99tDe0a6rQdcnwacdVopCKdVhMn1LWBfyN49mMBuOYpNkge5Dz8YJiopCcIjhg+6
19
-bG5yGwz2VwKBgQDBpGp8pa4702M0i8ZOrpHubSiTsoC0z2mIpI7aa8LYWMoxHwza
20
-Mb8HMQ1X2EqkZ7eiaJLE+Ka0ukpTBfgA2aXOa7LEtIsNTKBj6FIn36Fe7Enr2pLK
21
-FgwoOlclMvnzBTED6bjLPJ+u8afhtZxJnRuibUjnm52Ls5pgStLlUPon9QKBgChn
22
-5hG/lc/SdTPD849QSnP1ckiRaTX2NxPmUT9/irZAumbgNa7vkSu3lmixLNL980Fg
23
-UR7pfOTnBD5qNYT59No+QhlINMnomsEdF9Bq2X7xBUfTF8sfs+4HtUt1k/tbEcJv
24
-aG1NZXFC09BgCHlk3TQHh/YT5hip/ENnRJRfZ62lAoGAQs73XsLdYwegyNPcHOPs
25
-s4G9jj90e+aJKCtAGUThVJE5yZSVYT2k2eGT8CNasUF+4b93SSDQmirE/c7pqzdX
26
-V3mM6EmzWSNQG8cJI91r84JCuewfc4oOz+V7oCoX9b/gyV7DOPK88Dzf7JD8jZFm
27
-3La5ftfKjk7W9C7J5HB1S9A=
2
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDZJ5Aj/JnTzgOk
3
+N4IW4x64CPKYbIjNhLQMOQzNcrkzIVsFs1f3xk4qNBe8XBgQUtcy5ZDF29Elf4mA
4
+y1+HSht+HXjSAzX4NHChGZGq5NNBZws2ZS0LEtzEq1itFMzScy98ighnB4tECcKs
5
+cJAnjxLDs36G+A45Oz7Joq2Of/fBF0yJXwM5kKtjjUF4VHhlP2m9tkdxAzH9dA+r
6
+RFDqc0GtSBieIf68CGTCda/cBIft74slBRTUeG/17tOFmhvVJJZS+9qNjO4upGA9
7
+PS8NQ5ez/ojGbX7Eg6LxRJa7kldaVJ6pvm/+vlKSfUZgOOB/XKECwpuSp5hJn5kR
8
+tK+kw1FlAgMBAAECggEBAMJgtpZv2qYL55iME0c3X9zuLXEg3cfRPHUgcARK59oL
9
+xnUw1tI0UO1YGdMCQIwECxtFADULkYfWRJfj84ufW0KlUOvz8dBN6G9b+tcU4sDN
10
+Yuz63bnm1XS5x7OORdUvQ9dfmyvWRePONNK0I2U1nV9OATkBO4IhNQ+6LU6732KX
11
+OORWk+VWajOLjtz4VFr6jPHf7KYT/AJt9QFhnW0y41Ua7kevwtvUCBxEAtdGFCkA
12
+aWsK76PH0mCzgz2FQmQtvqRgS+3IbidmhowsN8QeTlF1iV7rmtEpGelr2TNx+1a3
13
+YmjNENy3J/FkBqeAM62DmLhrZnQ+EyBgqEIIYEMamyECgYEA9qLfGk4WcMOH8qrH
14
+rq5s+DdJSarJV4iL5aL4gpy6CNOwxJCVZwMZauZ7YkT5srmkDkScnk3dD/X3S27A
15
+Gz3UIbT0y3WYUiPZoKLcjN2L2LTZkr4vVv0byp2blOv7vAaVXoHoSk1PsNefzkyN
16
+ZFCdmIRGhhHKc1/2WTWkcXM7oH0CgYEA4WYmkiTUubPJMpMqFErBLh9nNPOagB4Z
17
+o+o3pB5WvUpPS8R9Cqtn5nOhvLGi5mtneMJq8E+HLHxq2AJ/Aadpgm/wyv+wy29Y
18
+uV5KtaOlClun0ElovnGkYGHp6/+w3YZLofVvhurmgEhVntAd/2XaO365ZKK9EnyA
19
+1R/GhIz58QkCgYBpaBhjnKX4kYiDjLuEi2Vk+/PleQlN0LzBatI8uBDF/vsYNxaz
20
+DN8LEe//gq0Y1kAoHOi2u15UGPIUmgOeYOFNepH4doyf5lR3U8NgrLq85iXqkj+X
21
+NNtwz8UTc3uF02Z5GpoVT09UrALPX2Y6Tj3cVgPx/p6Aiq21WLisB+ye3QKBgQCZ
22
+h1r+cNf1JeEF8ffXmpO7Nui1yLiUS+xrGj6MK54pkVQx58TEX7yF3H1uahDronz4
23
+ZHUy+vi39IdSW2DnX4Eet+DsZP2nlFB68x8wWicwxv2nglk2X3H3tLoBZkiym6co
24
+ymUNITOgbaTkaB4GuPnNTKQ7SB5BWUzn3pz57IzTAQKBgQDAgkTnIkm1rwNleStw
25
+rat0SRQl/IHdPxW6ygWFgv8H/1TaTjKCzrVMf+QoLqAHwa/Q9vWilTeAtqqjt4Ex
26
+HH8/Buv2cdgJIpX/XfPSkJtV8M+sERub4yOi96ZNwhL8Z1xr7koOLRQKXXuDoC3G
27
+sDpfA1L94rM40jj7/ae7ibwfOg==
28 28
 -----END PRIVATE KEY-----

+ 2 - 0
b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/enums/WxLiveGoodsEnum.java

@@ -2,6 +2,8 @@ package com.slodon.b2b2c.enums;
2 2
 
3 3
 public enum WxLiveGoodsEnum {
4 4
     ADD("商品添加并提审","https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token="),
5
+    DEL("删除商品","https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token="),
6
+    GET_GOODS_WARE_HOUSE("获取商品状态","https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token="),
5 7
     ;
6 8
 
7 9
     private String explain;

+ 22 - 0
b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/errors/WxCodeError.java

@@ -6,9 +6,31 @@ import java.util.Map;
6 6
 public class WxCodeError {
7 7
     public static Map<String,String> WX_CODE = new HashMap<>();
8 8
 
9
+    static {
10
+        new WxCodeError();
11
+    }
12
+
9 13
     public WxCodeError() {
10 14
         initWxCode();
11 15
         initWxLiveCode();//直播错误码添加
16
+        initWxLiveGoodsCode();//直播商品错误码添加
17
+    }
18
+
19
+    private void initWxLiveGoodsCode() {
20
+        WX_CODE.put("300003", "价格输入不合规(如: 现价比原价大、传入价格非数字等)");
21
+        WX_CODE.put("300004", "商品名称存在违规违法内容");
22
+        WX_CODE.put("300005", "商品图片存在违规违法内容");
23
+        WX_CODE.put("300007", "线上小程序版本不存在该链接");
24
+        WX_CODE.put("300008", "添加商品失败");
25
+        WX_CODE.put("300009", "商品审核撤回失败");
26
+        WX_CODE.put("300010", "商品审核状态不对(如: 商品审核中)");
27
+        WX_CODE.put("300011", "操作非法(API不允许操作非 API 创建的商品)");
28
+        WX_CODE.put("300012", "没有提审额度(每天500次提审额度)");
29
+        WX_CODE.put("300013", "提审失败");
30
+        WX_CODE.put("300014", "审核中,无法删除(非零代表失败)");
31
+        WX_CODE.put("300017", "商品未提审");
32
+        WX_CODE.put("300018", "商品图片尺寸过大");
33
+        WX_CODE.put("300021", "商品添加成功,审核失败");
12 34
     }
13 35
 
14 36
     private void initWxLiveCode() {

+ 9 - 4
b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/live/dto/LiveGoodsInfoDto.java

@@ -12,16 +12,21 @@ public class LiveGoodsInfoDto implements Serializable {
12 12
     @ApiModelProperty(value = "商品名称,最长14个汉字,1个汉字相当于2个字符",required = true)
13 13
     private String name;
14 14
     @ApiModelProperty(value = "价格类型,1:一口价(只需要传入price,price2不传) 2:价格区间(price字段为左边界,price2字段为右边界,price和price2必传) 3:显示折扣价(price字段为原价,price2字段为现价, price和price2必传)",required = true)
15
-    private Number priceType;
15
+    private Integer priceType = 1;
16 16
     @ApiModelProperty(value = "数字,最多保留两位小数,单位元",required = true)
17
-    private Number price;
17
+    private String price;
18 18
     @ApiModelProperty("数字,最多保留两位小数,单位元")
19
-    private Number price2;
19
+    private String price2;
20 20
     @ApiModelProperty(value = "商品详情页的小程序路径,路径参数存在 url 的,该参数的值需要进行 encode 处理再填入",required = true)
21 21
     private String url;
22 22
     @ApiModelProperty("当商品为第三方小程序的商品则填写为对应第三方小程序的appid,自身小程序商品则为")
23 23
     private String thirdPartyAppid;
24
-
24
+    @ApiModelProperty("商户ID")
25
+    private String vendorId;
26
+    @ApiModelProperty("本地goods表商品ID")
27
+    private String localGoodsId;
28
+    @ApiModelProperty("商品间状态。0:未审核,1:审核中,2:审核通过,3审核失败")
29
+    private Integer auditStatus;
25 30
 
26 31
     //==========================微信接口需要装换的参数==============================
27 32
     @ApiModelProperty("商品ID")

+ 2 - 1
b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/live/pojo/LiveBroadcast.java

@@ -53,6 +53,7 @@ public class LiveBroadcast implements Serializable {
53 53
     private Integer closeShare = 0;
54 54
     @ApiModelProperty("是否关闭客服 【0:开启,1:关闭】 默认关闭客服(直播开始后允许开启)")
55 55
     private Integer closeKf = 1;
56
-
56
+    @ApiModelProperty("直播间状态。101:直播中,102:未开始,103已结束,104禁播,105:暂停,106:异常,107:已过期")
57
+    private Integer liveStatus = 102;
57 58
 
58 59
 }

+ 4 - 0
b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/live/vo/LivesVO.java

@@ -61,4 +61,8 @@ public class LivesVO {
61 61
     private Integer closeShare = 0;
62 62
     @ApiModelProperty("是否关闭客服 【0:开启,1:关闭】 默认关闭客服(直播开始后允许开启)")
63 63
     private Integer closeKf = 1;
64
+    @ApiModelProperty("直播间状态。101:直播中,102:未开始,103已结束,104禁播,105:暂停,106:异常,107:已过期")
65
+    private Integer liveStatus = 102;
66
+    @ApiModelProperty("直播间状态。101:直播中,102:未开始,103已结束,104禁播,105:暂停,106:异常,107:已过期")
67
+    private String liveStatusName = "未开始";
64 68
 }

+ 2 - 2
b2b2c/b2b2c-entity/src/main/java/com/slodon/b2b2c/msg/pojo/SmsCode.java

@@ -27,8 +27,8 @@ public class SmsCode implements Serializable {
27 27
     @ApiModelProperty("手机验证码")
28 28
     private String verifyCode;
29 29
 
30
-    @ApiModelProperty("短信类型:1.注册,2.登录,3.找回密码,4.其它")
31
-    private Integer smsType;
30
+    @ApiModelProperty("短信类型:1.注册,2.登录,3.找回密码,4.其它 默认为0")
31
+    private Integer smsType = 0;
32 32
 
33 33
     @ApiModelProperty("请求ip")
34 34
     private String requestIp;

+ 15 - 0
b2b2c/b2b2c-web/pom.xml

@@ -171,6 +171,21 @@
171 171
             <artifactId>yunpian-java-sdk</artifactId>
172 172
             <version>1.2.7</version>
173 173
         </dependency>
174
+
175
+        <!--图片大小-->
176
+        <dependency>
177
+            <groupId>net.coobird</groupId>
178
+            <artifactId>thumbnailator</artifactId>
179
+            <version>0.4.11</version>
180
+        </dependency>
181
+
182
+        <dependency>
183
+            <groupId>redis.clients</groupId>
184
+            <artifactId>jedis</artifactId>
185
+            <version>4.0.1</version>
186
+        </dependency>
187
+
188
+
174 189
     </dependencies>
175 190
 
176 191
     <build>

+ 39 - 1
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/job/ScheduleTaskController.java

@@ -3,6 +3,8 @@ package com.slodon.b2b2c.controller.job;
3 3
 import com.slodon.b2b2c.business.example.OrderAfterServiceExample;
4 4
 import com.slodon.b2b2c.business.pojo.OrderAfterService;
5 5
 import com.slodon.b2b2c.business.pojo.OrderReturn;
6
+import com.slodon.b2b2c.controller.live.LiveBroadController;
7
+import com.slodon.b2b2c.controller.live.LiveGoodsController;
6 8
 import com.slodon.b2b2c.core.config.DomainUrlUtil;
7 9
 import com.slodon.b2b2c.core.constant.MemberTplConst;
8 10
 import com.slodon.b2b2c.core.constant.StoreTplConst;
@@ -16,6 +18,7 @@ import com.slodon.b2b2c.model.business.OrderReplacementModel;
16 18
 import com.slodon.b2b2c.model.goods.ESGoodsModel;
17 19
 import com.slodon.b2b2c.model.goods.GoodsPromotionModel;
18 20
 import com.slodon.b2b2c.model.goods.ProductModel;
21
+import com.slodon.b2b2c.model.live.LiveJobModel;
19 22
 import com.slodon.b2b2c.model.promotion.CouponMemberModel;
20 23
 import com.slodon.b2b2c.model.promotion.LadderGroupModel;
21 24
 import com.slodon.b2b2c.model.promotion.SeckillStageProductModel;
@@ -81,7 +84,10 @@ public class ScheduleTaskController {
81 84
     private LadderGroupModel ladderGroupModel;
82 85
     @Resource
83 86
     private RabbitTemplate rabbitTemplate;
84
-
87
+    @Resource
88
+    private LiveBroadController liveBroadController;
89
+    @Resource
90
+    private LiveGoodsController liveGoodsController;
85 91
     /**
86 92
      * 商家结算账单生成定时任务
87 93
      * 查询所有商家,每个商家每个结算周期生成一条结算账单
@@ -660,4 +666,36 @@ public class ScheduleTaskController {
660 666
         }
661 667
         log.info("jobUpdateLadderGroup() end");
662 668
     }
669
+
670
+    /**
671
+     * 系统自动更新直播状态
672
+     * 每天3点更新
673
+     */
674
+    @Scheduled(cron = "0 0 3 * * ?")
675
+    public void jobUpdateLiveType() {
676
+        log.info("jobUpdateLiveType() start");
677
+        try {
678
+            boolean jobResult = liveBroadController.jobUpdateLiveInfoList();
679
+            AssertUtil.isTrue(!jobResult, "[jobUpdateLiveType] 系统自动更新直播状态时失败");
680
+        } catch (Exception e) {
681
+            log.error("jobUpdateLiveType()", e);
682
+        }
683
+        log.info("jobUpdateLiveType() end");
684
+    }
685
+
686
+    /**
687
+     * 系统自动更新直播商品状态
688
+     * 每天4点更新
689
+     */
690
+    @Scheduled(cron = "0 0 4 * * ?")
691
+    public void jobUpdateLiveGoodsType() {
692
+        log.info("jobUpdateLiveGoodsType() start");
693
+        try {
694
+            boolean jobResult = liveGoodsController.jobUpdateLiveGoodsType();
695
+            AssertUtil.isTrue(!jobResult, "[jobUpdateLiveGoodsType] 系统自动更新直播商品状态时失败");
696
+        } catch (Exception e) {
697
+            log.error("jobUpdateLiveGoodsType()", e);
698
+        }
699
+        log.info("jobUpdateLiveGoodsType() end");
700
+    }
663 701
 }

+ 68 - 5
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/live/LiveBroadController.java

@@ -2,6 +2,7 @@ package com.slodon.b2b2c.controller.live;
2 2
 
3 3
 
4 4
 import com.alibaba.fastjson.JSON;
5
+import com.alibaba.fastjson.JSONArray;
5 6
 import com.alibaba.fastjson.JSONObject;
6 7
 import com.slodon.b2b2c.controller.common.UploadController;
7 8
 import com.slodon.b2b2c.core.constant.ResponseConst;
@@ -15,9 +16,12 @@ import com.slodon.b2b2c.enums.WxLiveUrlEnum;
15 16
 import com.slodon.b2b2c.errors.WxCodeError;
16 17
 import com.slodon.b2b2c.live.dto.LiveBroadcastDto;
17 18
 import com.slodon.b2b2c.live.example.LiveBroadcastExample;
19
+import com.slodon.b2b2c.live.example.LiveGoodsExample;
18 20
 import com.slodon.b2b2c.live.pojo.LiveBroadcast;
21
+import com.slodon.b2b2c.live.pojo.LiveGoods;
19 22
 import com.slodon.b2b2c.live.vo.LivesVO;
20 23
 import com.slodon.b2b2c.model.live.LiveBroadModel;
24
+import com.slodon.b2b2c.model.live.LiveJobModel;
21 25
 import com.slodon.b2b2c.seller.pojo.Vendor;
22 26
 import io.swagger.annotations.Api;
23 27
 import io.swagger.annotations.ApiImplicitParam;
@@ -40,6 +44,7 @@ import java.io.File;
40 44
 import java.text.ParseException;
41 45
 import java.text.SimpleDateFormat;
42 46
 import java.util.*;
47
+import java.util.stream.Collectors;
43 48
 
44 49
 @Api(tags = "admin-微信直播管理")
45 50
 @RestController
@@ -249,6 +254,7 @@ public class LiveBroadController extends BaseController {
249 254
                     vo.setCoverImgUrl(FileUrlUtil.getFileUrl(vo.getCoverImgPath(), null));
250 255
                     vo.setFeedsImgUrl(FileUrlUtil.getFileUrl(vo.getFeedsImgPath(), null));
251 256
                     vo.setShareImgUrl(FileUrlUtil.getFileUrl(vo.getShareImgPath(), null));
257
+                    vo.setLiveStatusName(getLiveStatusName(vo.getLiveStatus()));
252 258
                 } catch (Exception e) {
253 259
                     e.printStackTrace();
254 260
                 }
@@ -257,6 +263,18 @@ public class LiveBroadController extends BaseController {
257 263
         }
258 264
         return SldResponse.success(new PageVO<>(livesVOS, pager));
259 265
     }
266
+    private String getLiveStatusName(Integer liveStatus){
267
+        switch (liveStatus){
268
+            case 101: return "直播中";
269
+            case 102: return "未开始";
270
+            case 103: return "已结束";
271
+            case 104: return "禁播";
272
+            case 105: return "暂停";
273
+            case 106: return "异常";
274
+            case 107: return "已过期";
275
+            default:return "状态异常";
276
+        }
277
+    };
260 278
 
261 279
     @ApiOperation("获取直播间列表及直播间信息")
262 280
     @ApiImplicitParams({
@@ -331,6 +349,8 @@ public class LiveBroadController extends BaseController {
331 349
             if (!"0".equals(errCode)){
332 350
                 return SldResponse.fail(WxCodeError.WX_CODE.get(errCode));
333 351
             }
352
+            //添加到关联关系表
353
+            liveBroadModel.addLiveGoodsRelation(Arrays.asList(ids),roomId);
334 354
         } catch (Exception e) {
335 355
             e.printStackTrace();
336 356
         }
@@ -547,11 +567,54 @@ public class LiveBroadController extends BaseController {
547 567
         return SldResponse.success("成功");
548 568
     }
549 569
 
550
-    public static void main(String[] args) throws Exception {
551
-        String a = "s";
552
-        System.out.println(a.length());
553
-        String b = "是";
554
-        System.out.println(b.length());
570
+    //---------------------------------定时处理-------------------------------------
571
+
572
+    @Resource
573
+    private LiveJobModel liveJobModel;
574
+
575
+    public boolean jobUpdateLiveInfoList() {
576
+        //获取需要修改的最小roomId
577
+        Integer roomId = liveJobModel.getLiveRoomId();
578
+        if (roomId == null || roomId == 0) {
579
+            return true;
580
+        }
581
+        //需要查询更新的数量
582
+        Integer livesNum = liveJobModel.getLivesNum(roomId);
583
+
584
+        try {
585
+            String access_token = getToken();
586
+            //循环修改
587
+            for (int i = 0; i < livesNum; i += 50) {
588
+                forUpdateLive(i, access_token);
589
+            }
590
+        } catch (Exception e) {
591
+            e.printStackTrace();
592
+            return false;
593
+        }
594
+        return true;
555 595
     }
556 596
 
597
+    private void forUpdateLive(Integer startIndex, String access_token) throws Exception {
598
+        String url = WxLiveUrlEnum.GET_LIVE_LIST.getUrl()+ access_token;
599
+        Map map = new HashMap();
600
+        map.put("start", startIndex);
601
+        map.put("limit",50);
602
+        String reStr = HttpClientUtil.sendJsonPostNew(url,JSON.toJSONString(map));
603
+        JSONObject jsonObject = JSONObject.parseObject(reStr);
604
+        String errCode = jsonObject.getString("errcode");
605
+        if (!"0".equals(errCode)){
606
+            log.warn("获取直播间列表及直播间信息:"+reStr);
607
+            return ;
608
+        }
609
+        JSONArray roomInfos = jsonObject.getJSONArray("room_info");
610
+        List<LivesVO> livesVOS = new ArrayList<>();
611
+        for (int i = 0; i < roomInfos.size(); i++) {
612
+            JSONObject infosJSONObject = roomInfos.getJSONObject(i);
613
+            LivesVO livesVO = new LivesVO();
614
+            livesVO.setRoomId(String.valueOf(infosJSONObject.get("roomid")));
615
+            livesVO.setLiveStatus(infosJSONObject.getInteger("live_status"));
616
+            livesVOS.add(livesVO);
617
+        }
618
+        liveJobModel.updateLivesType(livesVOS);
619
+    }
557 620
 }

+ 197 - 33
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/live/LiveGoodsController.java

@@ -2,45 +2,50 @@ package com.slodon.b2b2c.controller.live;
2 2
 
3 3
 
4 4
 import com.alibaba.fastjson.JSON;
5
+import com.alibaba.fastjson.JSONArray;
5 6
 import com.alibaba.fastjson.JSONObject;
6
-import com.slodon.b2b2c.controller.common.UploadController;
7
-import com.slodon.b2b2c.core.constant.ResponseConst;
8 7
 import com.slodon.b2b2c.core.controller.BaseController;
8
+import com.slodon.b2b2c.core.exception.MallException;
9 9
 import com.slodon.b2b2c.core.response.JsonResult;
10 10
 import com.slodon.b2b2c.core.response.PageVO;
11 11
 import com.slodon.b2b2c.core.response.PagerInfo;
12 12
 import com.slodon.b2b2c.core.response.SldResponse;
13 13
 import com.slodon.b2b2c.core.util.*;
14
+import com.slodon.b2b2c.dao.read.goods.GoodsReadMapper;
14 15
 import com.slodon.b2b2c.enums.WxLiveGoodsEnum;
15 16
 import com.slodon.b2b2c.enums.WxLiveUrlEnum;
16 17
 import com.slodon.b2b2c.errors.WxCodeError;
17
-import com.slodon.b2b2c.live.dto.LiveBroadcastDto;
18
-import com.slodon.b2b2c.live.example.LiveBroadcastExample;
19
-import com.slodon.b2b2c.live.pojo.LiveBroadcast;
18
+import com.slodon.b2b2c.goods.example.GoodsExample;
19
+import com.slodon.b2b2c.goods.pojo.Goods;
20
+import com.slodon.b2b2c.live.dto.LiveGoodsInfoDto;
21
+import com.slodon.b2b2c.live.example.LiveGoodsExample;
22
+import com.slodon.b2b2c.live.pojo.LiveGoods;
20 23
 import com.slodon.b2b2c.live.vo.LivesVO;
21
-import com.slodon.b2b2c.model.live.LiveBroadModel;
24
+import com.slodon.b2b2c.model.live.LiveGoodsModel;
22 25
 import com.slodon.b2b2c.seller.pojo.Vendor;
26
+import com.slodon.b2b2c.util.ThumbnailsUtils;
23 27
 import io.swagger.annotations.Api;
24 28
 import io.swagger.annotations.ApiImplicitParam;
25 29
 import io.swagger.annotations.ApiImplicitParams;
26 30
 import io.swagger.annotations.ApiOperation;
27 31
 import lombok.extern.slf4j.Slf4j;
28
-import org.apache.commons.beanutils.PropertyUtils;
29 32
 import org.springframework.data.redis.core.StringRedisTemplate;
30
-import org.springframework.util.CollectionUtils;
31
-import org.springframework.util.StringUtils;
32 33
 import org.springframework.web.bind.annotation.GetMapping;
33 34
 import org.springframework.web.bind.annotation.PostMapping;
34 35
 import org.springframework.web.bind.annotation.RequestMapping;
35 36
 import org.springframework.web.bind.annotation.RestController;
36
-import org.springframework.web.multipart.MultipartFile;
37 37
 
38 38
 import javax.annotation.Resource;
39
+import javax.imageio.ImageIO;
39 40
 import javax.servlet.http.HttpServletRequest;
41
+import java.awt.image.BufferedImage;
40 42
 import java.io.File;
41
-import java.text.ParseException;
42 43
 import java.text.SimpleDateFormat;
43
-import java.util.*;
44
+import java.util.ArrayList;
45
+import java.util.HashMap;
46
+import java.util.List;
47
+import java.util.Map;
48
+import java.util.stream.Collectors;
44 49
 
45 50
 @Api(tags = "admin-微信商品管理")
46 51
 @RestController
@@ -53,9 +58,9 @@ public class LiveGoodsController extends BaseController {
53 58
     @Resource
54 59
     private StringRedisTemplate stringRedisTemplate;
55 60
     @Resource
56
-    private LiveBroadModel liveBroadModel;
61
+    private LiveGoodsModel liveGoodsModel;
57 62
     @Resource
58
-    private UploadController uploadController;
63
+    private GoodsReadMapper goodsReadMapper;
59 64
 
60 65
     private String getToken() throws Exception {
61 66
         String appId = stringRedisTemplate.opsForValue().get("login_wx_mini_appid");
@@ -68,36 +73,195 @@ public class LiveGoodsController extends BaseController {
68 73
     }
69 74
 
70 75
     @ApiOperation("商品添加并提审")
76
+    @ApiImplicitParams({
77
+            @ApiImplicitParam(name = "goodsIds", value = "商品Id集合,用逗号隔开", required = true, paramType = "query")
78
+    })
71 79
     @PostMapping("/add")
72
-    public JsonResult wxBroadcastRoomCreate(HttpServletRequest request,LiveBroadcastDto liveBroadcastDto) {
80
+    public JsonResult addGoodsCreate(HttpServletRequest request, String goodsIds) throws Exception {
73 81
         HashMap<String, String> resultMap = new HashMap<>();
82
+        //获取token
83
+        String access_token = getToken();
84
+        Vendor vendor = UserUtil.getUser(request, Vendor.class);
85
+        if (vendor == null || vendor.getVendorId() == null){
86
+            return SldResponse.fail("获取商户id失败");
87
+        }
88
+        AssertUtil.notEmpty(goodsIds, "添加商品ID不能为空,请重试");
89
+        GoodsExample goodsExample = new GoodsExample();
90
+        goodsExample.setGoodsIdIn(goodsIds);
91
+        List<Goods> goods = goodsReadMapper.listByExample(goodsExample);
92
+        for (Goods good:goods) {
93
+            addLiveGood(access_token, vendor, good);
94
+        }
95
+        return SldResponse.success(resultMap);
96
+    }
97
+
98
+    private void addLiveGood(String access_token, Vendor vendor, Goods good) throws Exception {
99
+        LiveGoodsInfoDto liveGoodsInfoDto = new LiveGoodsInfoDto();
100
+        liveGoodsInfoDto.setVendorId(String.valueOf(vendor.getVendorId()));
101
+        String url = WxLiveUrlEnum.TEMP_UPLOAD.getUrl();
102
+        url = url.replace("ACCESS_TOKEN", access_token).replace("TYPE","image");
103
+        String mainImage = good.getMainImage();
104
+        BufferedImage image = ImageIO.read(new File(mainImage));
105
+//        BufferedImage image = ImageIO.read(new File("D:\\ytf\\coverImg.jpg"));
106
+        BufferedImage bufferedImage = ThumbnailsUtils.resizeImageOne(image, 300, 300);
107
+        String goodName = good.getGoodsName().length()>14?good.getGoodsName().substring(0,13):good.getGoodsName();
108
+        File file = File.createTempFile(goodName, ".jpg");
109
+        ImageIO.write(bufferedImage, "jpg", file);
110
+        String result = FileUploadUtil.postUploadSSL(url, file, file.getName());
111
+        JSONObject jsonObject = JSONObject.parseObject(result);
112
+        liveGoodsInfoDto.setCoverImgUrl(jsonObject.getString("media_id"));
113
+        liveGoodsInfoDto.setLocalGoodsId(String.valueOf(good.getGoodsId()));
114
+        liveGoodsInfoDto.setName(goodName);
115
+        liveGoodsInfoDto.setPrice(String.valueOf(good.getGoodsPrice()));
116
+        liveGoodsInfoDto.setUrl("pages/index/index");
117
+        Map map = new HashMap();
118
+        map.put("goodsInfo",liveGoodsInfoDto);
119
+        url = WxLiveGoodsEnum.ADD.getUrl()+ access_token;
120
+        log.info("json: "+JSON.toJSONString(map));
121
+        String reStr = null;
122
+        reStr = HttpClientUtil.sendJsonPostNew(url, JSON.toJSONString(map));
123
+        jsonObject = JSONObject.parseObject(reStr);
124
+        String errCode = jsonObject.getString("errcode");
125
+        if (!"0".equals(errCode)){
126
+            log.warn("直播间商品添加失败原因:"+reStr);
127
+            throw new MallException("商品名称:"+good.getGoodsName()+", 失败原因:"+WxCodeError.WX_CODE.get(errCode));
128
+        }
129
+        liveGoodsInfoDto.setGoodsId(jsonObject.getInteger("goodsId"));
130
+        liveGoodsInfoDto.setAuditId(jsonObject.getInteger("auditId"));
131
+
132
+        liveGoodsModel.addGoodsCreate(liveGoodsInfoDto);
133
+    }
134
+
135
+    @ApiOperation("获取直播商品列表")
136
+    @ApiImplicitParams({
137
+            @ApiImplicitParam(name = "name", value = "直播商品名称", paramType = "query"),
138
+            @ApiImplicitParam(name = "auditStatus", value = "直播商品状态", paramType = "query"),
139
+            @ApiImplicitParam(name = "pageSize", value = "分页大小", defaultValue = "20", paramType = "query"),
140
+            @ApiImplicitParam(name = "current", value = "当前页面位置", defaultValue = "1", paramType = "query")
141
+    })
142
+    @GetMapping("/list")
143
+    public JsonResult<PageVO<LiveGoods>> getList(HttpServletRequest request, String name,Integer auditStatus) {
144
+        Vendor vendor = UserUtil.getUser(request, Vendor.class);
145
+        PagerInfo pager = WebUtil.handlerPagerInfo(request);
146
+        LiveGoodsExample example = new LiveGoodsExample();
147
+        example.setName(name);
148
+        //获取审核通过商品
149
+        if (auditStatus != null && auditStatus == 2){
150
+            example.setAuditStatus(2);
151
+        }
152
+        if (vendor != null && vendor.getVendorId() != null){
153
+            example.setVendorId(String.valueOf(vendor.getVendorId()));
154
+        }
155
+        List<LiveGoods> livesList = liveGoodsModel.getLivesList(example, pager);
156
+        livesList.stream().map(item->{
157
+            item.setAuditStatusName(getLiveGoodsStatusName(item.getAuditStatus()));
158
+            return item;
159
+        }).collect(Collectors.toList());
160
+
161
+        return SldResponse.success(new PageVO<>(livesList, pager));
162
+    }
163
+
164
+    @ApiOperation("获取绑定直播商品列表")
165
+    @ApiImplicitParams({
166
+            @ApiImplicitParam(name = "name", value = "直播商品名称", paramType = "query"),
167
+            @ApiImplicitParam(name = "roomId", value = "直播间id", paramType = "query")
168
+    })
169
+    @GetMapping("/list/relation")
170
+    public JsonResult<PageVO<LiveGoods>> getListRelation(HttpServletRequest request, String name, Integer roomId) {
171
+        PagerInfo pager = WebUtil.handlerPagerInfo(request);
172
+        if (roomId == null || roomId == 0){
173
+            return SldResponse.fail("直播间获取失败");
174
+        }
175
+        List<LiveGoods> livesList = liveGoodsModel.getListRelation(name,roomId);
176
+
177
+        return SldResponse.success(new PageVO<>(livesList, pager));
178
+    }
179
+    private String getLiveGoodsStatusName(Integer liveStatus){
180
+        switch (liveStatus){
181
+            case 0: return "未审核";
182
+            case 1: return "审核中";
183
+            case 2: return "审核通过";
184
+            case 3: return "审核失败";
185
+            default:return "状态异常";
186
+        }
187
+    };
188
+
189
+    @ApiOperation("删除直播间商品")
190
+    @ApiImplicitParams({
191
+            @ApiImplicitParam(name = "goodsId", value = "商品ID", paramType = "query"),
192
+    })
193
+    @GetMapping("/wxDelLive")
194
+    public JsonResult wxDelLiveGood(HttpServletRequest request,Integer goodsId) {
74 195
         try {
75
-            Vendor vendor = UserUtil.getUser(request, Vendor.class);
76
-            if (vendor == null || vendor.getVendorId() == null){
77
-                return SldResponse.fail("获取商户id失败");
78
-            }
79
-            liveBroadcastDto.setVendorId(String.valueOf(vendor.getVendorId()));
80
-            if (String.valueOf(ResponseConst.STATE_FAIL).equals(resultMap.get("state").toString())){
81
-                return SldResponse.fail(resultMap.get("msg"));
82
-            }
83
-            //获取token
84 196
             String access_token = getToken();
85
-            String url = WxLiveGoodsEnum.ADD.getUrl()+access_token;
86
-            String reStr = HttpClientUtil.sendJsonPostNew(url,JSON.toJSONString(liveBroadcastDto));
197
+            //校验
198
+            String url = WxLiveGoodsEnum.DEL.getUrl()+access_token;
199
+            String reStr = HttpClientUtil.sendJsonPostNew(url,JSON.toJSONString(new HashMap<>().put("goodsId",goodsId)));
87 200
             JSONObject jsonObject = JSONObject.parseObject(reStr);
88 201
             String errCode = jsonObject.getString("errcode");
89 202
             if (!"0".equals(errCode)){
90
-                log.warn("直播间添加失败原因:"+reStr);
91
-                return jsonObject.getString("qrcode_url") != null
92
-                        ? SldResponse.fail("qrcode_url")
93
-                        : SldResponse.fail( WxCodeError.WX_CODE.get(errCode));
203
+                return SldResponse.fail(WxCodeError.WX_CODE.get(errCode));
94 204
             }
95
-            liveBroadcastDto.setRoomId(String.valueOf(jsonObject.get("roomId")));
96
-            liveBroadModel.broadcastRoomCreate(liveBroadcastDto);
205
+            liveGoodsModel.wxDelLiveGood(goodsId);
206
+            return SldResponse.success("删除成功");
97 207
         } catch (Exception e) {
98 208
             e.printStackTrace();
99 209
         }
100
-        return SldResponse.success(resultMap);
210
+        return SldResponse.success("删除失败");
101 211
     }
102 212
 
213
+    /**
214
+     * 获取直播商品状态进行更新
215
+     * @return
216
+     */
217
+    public boolean jobUpdateLiveGoodsType() {
218
+        //获取需要修改的ids
219
+        List<Integer> ids = liveGoodsModel.getLivesGoodsIds();
220
+        //每次最多20个所以需要拆分
221
+        List<List<Integer>> lists = new ArrayList<>();
222
+        List<Integer> updateIds = new ArrayList<>();
223
+        for (int i = 0; i <ids.size() ; i++) {
224
+            updateIds.add(ids.get(i));
225
+            //20个插入一组 或 最后一组不满20也插入
226
+            if((i+1)%20==0 || i == ids.size()-1){
227
+                lists.add(updateIds);
228
+                updateIds = new ArrayList<>();
229
+            }
230
+        }
231
+
232
+        try {
233
+            String access_token = getToken();
234
+            //校验
235
+            String url = WxLiveGoodsEnum.GET_GOODS_WARE_HOUSE.getUrl()+access_token;
236
+            for (List<Integer> i:lists) {
237
+                Map m = new HashMap<>();
238
+                m.put("goods_ids",i);
239
+                String reStr = HttpClientUtil.sendJsonPostNew(url,JSON.toJSONString(m));
240
+                JSONObject jsonObject = JSONObject.parseObject(reStr);
241
+                String errCode = jsonObject.getString("errcode");
242
+                if (!"0".equals(errCode)){
243
+                    log.warn("直播商品状态更新错误日志:"+WxCodeError.WX_CODE.get(errCode));
244
+                    continue;
245
+                }
246
+                //修改商品状态
247
+                updateGoodsType(jsonObject);
248
+            }
249
+        } catch (Exception e) {
250
+            e.printStackTrace();
251
+        }
252
+        return true;
253
+    }
254
+
255
+    private void updateGoodsType(JSONObject jsonObject) {
256
+        JSONArray roomInfos = jsonObject.getJSONArray("goods");
257
+        List<LiveGoods> liveGoodsList = new ArrayList<>();
258
+        for (int i = 0; i < roomInfos.size(); i++) {
259
+            JSONObject infosJSONObject = roomInfos.getJSONObject(i);
260
+            LiveGoods liveGoods = new LiveGoods();
261
+            liveGoods.setGoodsId(infosJSONObject.getInteger("goods_id"));
262
+            liveGoods.setAuditStatus(infosJSONObject.getInteger("audit_status"));
263
+            liveGoodsList.add(liveGoods);
264
+        }
265
+        liveGoodsModel.updateLivesGoodsType(liveGoodsList);
266
+    }
103 267
 }

+ 1 - 1
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/controller/msg/seller/SellerVerifyController.java

@@ -122,7 +122,7 @@ public class SellerVerifyController extends BaseController {
122 122
             default:
123 123
                 throw new MallException("发送短信失败");
124 124
         }
125
-        SmsResponse smsResponse = smsSender.sendSms(smsRequest);
125
+        SmsResponse smsResponse = smsSender.sendSms(smsRequest,code.getSmsType());
126 126
 
127 127
         code.setVerifyCode(smsResponse.getVerifyCode());
128 128
         smsCodeModel.saveSmsCode(code);

+ 25 - 0
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/dao/write/live/LiveBroadWriteMapper.java

@@ -3,6 +3,31 @@ package com.slodon.b2b2c.dao.write.live;
3 3
 import com.slodon.b2b2c.core.database.BaseWriteMapper;
4 4
 import com.slodon.b2b2c.live.example.LiveBroadcastExample;
5 5
 import com.slodon.b2b2c.live.pojo.LiveBroadcast;
6
+import com.slodon.b2b2c.live.vo.LivesVO;
7
+import org.apache.ibatis.annotations.Param;
8
+
9
+import java.util.List;
6 10
 
7 11
 public interface LiveBroadWriteMapper extends BaseWriteMapper<LiveBroadcast, LiveBroadcastExample> {
12
+
13
+    /**
14
+     * 查找需要更新状态的直播间起始id
15
+     * @return
16
+     */
17
+    int getLivesNum(@Param("roomId") Integer roomId );
18
+
19
+    /**
20
+     * 批量修改直播间状态
21
+     * @param livesVOS
22
+     */
23
+    void updateLivesType(@Param("livesVOS") List<LivesVO> livesVOS);
24
+
25
+    Integer getLiveRoomId();
26
+
27
+    /**
28
+     * 直播间和商品关联关系绑定
29
+     * @param asList
30
+     * @param roomId
31
+     */
32
+    void addLiveGoodsRelation(@Param("asList")  List<Integer> asList, @Param("roomId") Integer roomId);
8 33
 }

+ 9 - 0
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/model/live/LiveBroadModel.java

@@ -59,4 +59,13 @@ public class LiveBroadModel {
59 59
     public LiveBroadcast getLiveInfo(String roomId) {
60 60
         return liveBroadWriteMapper.getByPrimaryKey(roomId);
61 61
     }
62
+
63
+    /**
64
+     * 直播间和商品关联关系绑定
65
+     * @param asList
66
+     * @param roomId
67
+     */
68
+    public void addLiveGoodsRelation(List<Integer> asList, Integer roomId) {
69
+        liveBroadWriteMapper.addLiveGoodsRelation(asList,roomId);
70
+    }
62 71
 }

+ 12 - 2
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/sms/TencentSmsSender.java

@@ -35,6 +35,16 @@ public class TencentSmsSender extends SmsSender {
35 35
      * @return
36 36
      */
37 37
     public SmsResponse sendSms(SmsRequest smsRequest) {
38
+        return sendSms(smsRequest,0);
39
+    }
40
+
41
+    /**
42
+     * 腾讯云发送短信方法
43
+     * 2022.7.22 加个类型
44
+     * @param smsRequest
45
+     * @return
46
+     */
47
+    public SmsResponse sendSms(SmsRequest smsRequest,Integer smsType) {
38 48
         //获取腾讯云配置信息
39 49
         String secretId = stringRedisTemplate.opsForValue().get("notification_sms_secret");
40 50
         String secretKey = stringRedisTemplate.opsForValue().get("notification_sms_secret_key");
@@ -46,7 +56,8 @@ public class TencentSmsSender extends SmsSender {
46 56
         //验证码类短信
47 57
         if (smsRequest.getSmsType() == SMSConst.VERIFY_SMS) {
48 58
             //获取验证码模板id
49
-            String smsTplid = stringRedisTemplate.opsForValue().get("notification_sms_tplid");
59
+            String ssmKeyId = null == smsType || smsType == 0? "notification_sms_tplid":"notification_sms_tplid"+smsType;
60
+            String smsTplid = stringRedisTemplate.opsForValue().get(ssmKeyId);
50 61
             smsRequest.setTemplateId(smsTplid);
51 62
             verifyCode = RandomUtil.randomNumber(6);
52 63
             String[] templateParam = {verifyCode};
@@ -85,5 +96,4 @@ public class TencentSmsSender extends SmsSender {
85 96
             throw new MallException("发送短信失败:" + e.getMessage());
86 97
         }
87 98
     }
88
-
89 99
 }

+ 3 - 0
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/sms/YunPianSmsSender.java

@@ -75,4 +75,7 @@ public class YunPianSmsSender extends SmsSender {
75 75
         return new SmsResponse(result.getCode().toString(), result.getMsg(), verifyCode);
76 76
     }
77 77
 
78
+    public SmsResponse sendSms(SmsRequest smsRequest,Integer type) {
79
+        return sendSms(smsRequest);
80
+    }
78 81
 }

+ 5 - 0
b2b2c/b2b2c-web/src/main/java/com/slodon/b2b2c/sms/base/SmsSender.java

@@ -23,4 +23,9 @@ public abstract class SmsSender {
23 23
      */
24 24
     public abstract SmsResponse sendSms(SmsRequest smsRequest);
25 25
 
26
+    /**
27
+     * 发送短信
28
+     */
29
+    public abstract SmsResponse sendSms(SmsRequest smsRequest,Integer smsType);
30
+
26 31
 }

+ 1 - 1
b2b2c/b2b2c-web/src/main/resources/application.yml

@@ -22,7 +22,7 @@ slodon:
22 22
   b2b2c:
23 23
     datasource:
24 24
       write:
25
-        url: jdbc:mysql://sld-mysql:3306/b2b2c?useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
25
+        url: jdbc:mysql://sld-mysql:3306/b2b2c?useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
26 26
       read:
27 27
         url: jdbc:mysql://sld-mysql:3306/b2b2c?useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
28 28
 

+ 20 - 0
b2b2c/b2b2c-web/src/main/resources/mapper/write/Live/LiveBroadWriteMapper.xml

@@ -287,6 +287,12 @@
287 287
     </choose>
288 288
     <include refid="limit" />
289 289
   </select>
290
+    <select id="getLivesNum" resultType="java.lang.Integer">
291
+      select count(1) from live_broadcast where roomId >= #{roomId}
292
+    </select>
293
+  <select id="getLiveRoomId" resultType="java.lang.Integer">
294
+    select roomId from live_broadcast where liveStatus &lt; 103 limit 1
295
+  </select>
290 296
   <!--根据条件删除记录,可多条删除-->
291 297
   <delete id="deleteByExample">
292 298
     DELETE FROM live_broadcast
@@ -377,6 +383,12 @@
377 383
     </trim>
378 384
     )
379 385
   </insert>
386
+  <insert id="addLiveGoodsRelation">
387
+    insert into live_goods_relation (roomId,goodsId) values
388
+    <foreach collection="asList" item="item" index="index" separator=",">
389
+      (#{roomId},#{item})
390
+    </foreach>
391
+  </insert>
380 392
   <!--按条件更新记录中不为空的字段-->
381 393
   <update id="updateByExampleSelective">
382 394
     UPDATE live_broadcast
@@ -524,4 +536,12 @@
524 536
     </trim>
525 537
     WHERE roomId = #{roomId}
526 538
   </update>
539
+
540
+  <update id="updateLivesType" parameterType="list">
541
+    <foreach collection="livesVOS" item="item" index="index">
542
+      update live_broadcast set
543
+      liveStatus=#{item.liveStatus}
544
+      where roomId = #{item.roomId};
545
+    </foreach>
546
+  </update>
527 547
 </mapper>

+ 24 - 1
b2b2c/sql/建表语句.sql

@@ -23,6 +23,29 @@ CREATE TABLE live_broadcast  (
23 23
   closeReplay int(11) NOT NULL DEFAULT 1 COMMENT '是否关闭回放 【0:开启,1:关闭】默认关闭回放(直播开始后允许开启)',
24 24
   closeShare  int(11) NOT NULL DEFAULT 0 COMMENT '是否关闭分享 【0:开启,1:关闭】默认开启分享(直播开始后不允许修改)',
25 25
   closeKf int(11) NOT NULL DEFAULT 1 COMMENT '是否关闭客服 【0:开启,1:关闭】 默认关闭客服(直播开始后允许开启)',
26
-  liveStatus int(11) NOT NULL DEFAULT 0 COMMENT '直播间状态。101:直播中,102:未开始,103已结束,104禁播,105:暂停,106:异常,107:已过期',
26
+  liveStatus int(11) NOT NULL DEFAULT 102 COMMENT '直播间状态。101:直播中,102:未开始,103已结束,104禁播,105:暂停,106:异常,107:已过期',
27 27
   PRIMARY KEY (roomId) USING BTREE
28 28
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '直播信息表' ROW_FORMAT = Dynamic;
29
+
30
+DROP TABLE IF EXISTS live_goods;
31
+CREATE TABLE live_goods  (
32
+  goodsId varchar(50) NOT NULL COMMENT '微信返回商品ID' ,
33
+  auditId varchar(50) NOT NULL COMMENT '审核单ID' ,
34
+  name varchar(50) NOT NULL COMMENT '商品名称,最长14个汉字,1个汉字相当于2个字符',
35
+  coverImgUrl varchar(300) NOT NULL COMMENT '填入mediaID(mediaID获取后,三天内有效);图片 mediaID 的获取,请参考以下文档: https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/New_temporary_materials.html;图片规则:图片尺寸最大300像素*300像素;',
36
+  priceType int(11) NOT NULL DEFAULT 1  COMMENT '价格类型,1:一口价(只需要传入price,price2不传) 2:价格区间(price字段为左边界,price2字段为右边界,price和price2必传) 3:显示折扣价(price字段为原价,price2字段为现价, price和price2必传)',
37
+  price varchar(50) NOT NULL COMMENT '数字,最多保留两位小数,单位元',
38
+  price2 varchar(50) COMMENT '数字,最多保留两位小数,单位元',
39
+  url varchar(300) NOT NULL COMMENT '商品详情页的小程序路径,路径参数存在 url 的,该参数的值需要进行 encode 处理再填入',
40
+  thirdPartyAppid varchar(50)  COMMENT '当商品为第三方小程序的商品则填写为对应第三方小程序的appid',
41
+  auditStatus int(11) NOT NULL DEFAULT 1 COMMENT '商品间状态。0:未审核,1:审核中,2:审核通过,3审核失败',
42
+  localGoodsId varchar(50) NOT NULL COMMENT '本地goods表商品ID' ,
43
+  vendorId varchar(50) NOT NULL COMMENT '商户ID' ,
44
+  PRIMARY KEY (goodsId) USING BTREE
45
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '直播商品信息表' ROW_FORMAT = Dynamic;
46
+
47
+DROP TABLE IF EXISTS live_goods_relation;
48
+CREATE TABLE live_goods_relation  (
49
+  roomId varchar(50) NOT NULL COMMENT '房间ID' ,
50
+  goodsId varchar(50) NOT NULL COMMENT '微信返回商品ID'
51
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '直播商品关联表' ROW_FORMAT = Dynamic;

+ 53 - 6
b2b2c/sql/项目修改语句.sql

@@ -1,3 +1,6 @@
1
+-- 登入appi替换
2
+UPDATE sys_setting SET value = 'wxa9bd66952a99ea71' WHERE name = 'login_wx_mini_appid';
3
+
1 4
 -- 快递鸟编辑
2 5
 update sys_setting set value = '939bfad3-6fff-4cdb-973c-0200fc8d06a2' where name = 'express_apikey'; -- 快递鸟key
3 6
 update sys_setting set value = '1755434' where name = 'express_ebusinessid'; -- 快递鸟id
@@ -15,24 +18,63 @@ update sys_setting set value = 'wx43aba958092afe0c' where name = 'login_wx_mini_
15 18
 update sys_setting set value = '647d35cc24fc7996003168d44ea91a43' where name = 'login_wx_mini_appsecret';
16 19
 
17 20
 -- 微信支付
18
-update sys_setting set value='acAcsnklknskfnslalcn134643sljlda' where title='微信apikey';
19
-update sys_setting set value='wx43aba958092afe0c' where title='微信appid';
20
-update sys_setting set value='647d35cc24fc7996003168d44ea91a43' where title='微信appSecret';
21
-update sys_setting set value='1489871402' where title='微信商户号';
21
+UPDATE sys_setting SET value = '1629060104' WHERE title = '微信商户号';
22
+UPDATE sys_setting SET value = 'wxa9bd66952a99ea71' WHERE title='微信appid';
23
+UPDATE sys_setting SET value = '611efc8171b8a9f3d679f3f45ae45280' WHERE title='微信apikey';
24
+update sys_setting set value='12378987568fWnkflqafsnkJBKBKFEKB' where title='微信appSecret';
25
+-- update sys_setting set value='acAcsnklknskfnslalcn134643sljlda' where title='微信apikey';
26
+-- update sys_setting set value='wx43aba958092afe0c' where title='微信appid';
27
+-- update sys_setting set value='647d35cc24fc7996003168d44ea91a43' where title='微信appSecret';
28
+-- update sys_setting set value='1489871402' where title='微信商户号';
22 29
 
23 30
 --添加直播
24 31
 update vendor_resources set state = 2 where resources_id in(471,472,473);
25 32
 INSERT INTO `vendor_resources`
26 33
 select max(resources_id)+1 resources_id,0, '/', '直播', '2020-12-30 17:31:52', 1, 1, '/' from vendor_resources;
27 34
 INSERT INTO `vendor_resources`
28
-select max(resources_id)+1 resources_id,max(resources_id), '/', '直播', '2020-12-30 17:32:45', 1, 2, '/live' from vendor_resources;
35
+select max(resources_id)+1 resources_id,680, '/', '直播', '2020-12-30 17:32:45', 1, 2, '/live' from vendor_resources;
36
+INSERT INTO `vendor_resources`
37
+select max(resources_id)+1 resources_id,681, '/', '直播列表', '2020-12-30 17:33:30', 1, 3, '/live/decorate_live' from vendor_resources;
29 38
 INSERT INTO `vendor_resources`
30
-select max(resources_id)+1 resources_id,max(resources_id), '/', '直播列表', '2020-12-30 17:33:30', 1, 3, '/live/decorate_live' from vendor_resources;
39
+select max(resources_id)+1 resources_id,681, '/', '直播商品', '2020-12-30 17:33:30', 1, 3, '/live/goods_live' from vendor_resources;
40
+
41
+-- 暂时不用
42
+-- select max(resources_id)+1 resources_id,681, '/', '直播商品添加', '2020-12-30 17:33:30', 1, 3, '/live/goods_live_edit' from vendor_resources;
43
+-- INSERT INTO `vendor_resources`
44
+-- select max(resources_id)+1 resources_id,681, '/', '直播间商品添加', '2020-12-30 17:33:30', 1, 3, '/live/live_room_goods_edit' from vendor_resources;
31 45
 
32 46
 -- 根据vendor_resources 配置
47
+INSERT INTO `b2b2c`.`vendor_resources_roles`
48
+select max(resources_roles_id)+1 resources_roles_id,680, 2,'2021-04-22 15:25:28' from vendor_resources_roles ;
49
+INSERT INTO `b2b2c`.`vendor_resources_roles`
50
+select max(resources_roles_id)+1 resources_roles_id,681, 2,'2021-04-22 15:25:28' from vendor_resources_roles ;
51
+INSERT INTO `b2b2c`.`vendor_resources_roles`
52
+select max(resources_roles_id)+1 resources_roles_id,682, 2,'2021-04-22 15:25:28' from vendor_resources_roles ;
53
+INSERT INTO `b2b2c`.`vendor_resources_roles`
54
+select max(resources_roles_id)+1 resources_roles_id,683, 2,'2021-04-22 15:25:28' from vendor_resources_roles ;
55
+
56
+-- 暂时不用
57
+-- select max(resources_roles_id)+1 resources_roles_id,684, 2,'2021-04-22 15:25:28' from vendor_resources_roles ;
33 58
 -- INSERT INTO `b2b2c`.`vendor_resources_roles`
59
+-- select max(resources_roles_id)+1 resources_roles_id,685, 2,'2021-04-22 15:25:28' from vendor_resources_roles ;
60
+
61
+-- 腾讯云短信配置
62
+update sys_setting set value = '1400711079' where name = 'notification_sms_app_id';
63
+update sys_setting set value = '华阳生态' where name = 'notification_sms_content_signature';
64
+update sys_setting set value = '1482995' where name = 'notification_sms_tplid';
65
+update sys_setting set value = 'AKIDVpui4e8MJzRcXTGp9E7k9H9l7BzZv1qP' where name = 'notification_sms_secret';
66
+update sys_setting set value = 'OWOzJM9gz2oLeomWzDCwQfeMo0vazHI4' where name = 'notification_sms_secret_key';
67
+INSERT INTO `sys_setting` VALUES ('notification_sms_tplid1', '注册短信模板ID', '1482995', NULL, 1);
68
+INSERT INTO `sys_setting` VALUES ('notification_sms_tplid2', '登入短信模板ID', '1482995', NULL, 1);
69
+INSERT INTO `sys_setting` VALUES ('notification_sms_tplid3', '找回密码短信模板ID', '1483619', NULL, 1);
70
+
71
+-- 关闭测试金额
72
+UPDATE sys_setting SET  value = '0' WHERE name = 'alipay_test_enable_h5';
73
+UPDATE sys_setting SET value = '0' WHERE name = 'wxpay_test_enable_h5';
74
+
75
+-- 修改店铺佣金
76
+update store_grade set price = '0.01';
77
+
78
+-- 直播不显示
79
+-- update sys_system_resource set state = 0 where front_path like '%/bussset_live%'
80
+delete from sys_system_resource where front_path like '%/bussset_live%'