Your Name 3 anos atrás
pai
commit
b9518cee5d

+ 8
- 0
src/main/java/com/yunzhi/marketing/common/CommConstant.java Ver arquivo

@@ -494,6 +494,12 @@ public class CommConstant {
494 494
      */
495 495
     public static final String MESSAGE_CONTENT_OF_HOUSE = "house";
496 496
 
497
+    /**
498
+     * 活动开启通知
499
+     * 必须存在表   td_miniapp_template_type 中
500
+     */
501
+    public static final String MESSAGE_ACTIVITY = "activity";
502
+
497 503
     /**
498 504
      * 合同签订通知
499 505
      * 必须存在表   td_miniapp_template_type 中
@@ -679,6 +685,8 @@ public class CommConstant {
679 685
 
680 686
     public static final String RAISE_DETAIL_PATH = "/onlineSelling/pages/raiseProfile/index?id=%s";
681 687
 
688
+    public static final String ACTIVITY_DETAIL_PATH = "/pages/index/activityDetail/index?id=%s";
689
+
682 690
     /**
683 691
      * 已锁定
684 692
      */

+ 9
- 2
src/main/java/com/yunzhi/marketing/controller/TaBuildingDynamicController.java Ver arquivo

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
12 12
 import com.yunzhi.marketing.base.BaseController;
13 13
 import com.yunzhi.marketing.base.ResponseBean;
14 14
 import com.yunzhi.marketing.common.CommConstant;
15
+import com.yunzhi.marketing.common.StringUtils;
15 16
 import com.yunzhi.marketing.event.EventBus;
16 17
 import com.yunzhi.marketing.excel.HelpInitiateRecordSucceed;
17 18
 import com.yunzhi.marketing.excel.TaActivityDynamicEnlistExport;
@@ -587,7 +588,7 @@ public class TaBuildingDynamicController extends BaseController {
587 588
         // 如果是看房团发布,检验只能发布一次
588 589
         if (dynamic.getType().equals("look")) {
589 590
             LambdaQueryWrapper<TaBuildingDynamic> lambdaQueryWrapper = new LambdaQueryWrapper<>();
590
-            lambdaQueryWrapper.eq(TaBuildingDynamic::getStatus,1);
591
+            lambdaQueryWrapper.eq(TaBuildingDynamic::getStatus,CommConstant.IS_PUBLISH);
591 592
             lambdaQueryWrapper.eq(TaBuildingDynamic::getType,"look");
592 593
             lambdaQueryWrapper.eq(TaBuildingDynamic::getBuildingId,dynamic.getBuildingId());
593 594
             List<TaBuildingDynamic> list = iBuildingDynamicService.list(lambdaQueryWrapper);
@@ -596,10 +597,16 @@ public class TaBuildingDynamicController extends BaseController {
596 597
                 return responseBean;
597 598
             }
598 599
         }
599
-        dynamic.setStatus(1);
600
+        dynamic.setStatus(CommConstant.IS_PUBLISH);
600 601
         dynamic.setPublishDate(LocalDateTime.now());
601 602
         dynamic.setOrgId(getOrgId(request));
602 603
         iBuildingDynamicService.update(dynamic, dynamicQueryWrapper);
604
+
605
+        // 发送消息
606
+        if (CommConstant.IS_PUBLISH.equals(dynamic.getStatus()) && !StringUtils.isEmpty(dynamic.getBuildingId())) {
607
+            iBuildingDynamicService.sendMessageToSubscribers(dynamic);
608
+        }
609
+
603 610
         return responseBean;
604 611
     }
605 612
     

+ 3
- 0
src/main/java/com/yunzhi/marketing/mapper/TaMiniappMessagePersonMapper.java Ver arquivo

@@ -4,6 +4,8 @@ import com.yunzhi.marketing.entity.TaMiniappMessagePerson;
4 4
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 5
 import org.apache.ibatis.annotations.Mapper;
6 6
 
7
+import java.util.List;
8
+
7 9
 /**
8 10
  * <p>
9 11
  * 消息订阅人员 Mapper 接口
@@ -15,4 +17,5 @@ import org.apache.ibatis.annotations.Mapper;
15 17
 @Mapper
16 18
 public interface TaMiniappMessagePersonMapper extends BaseMapper<TaMiniappMessagePerson> {
17 19
 
20
+    List<TaMiniappMessagePerson> getPersonBy(Integer orgId, String buildingId, String messageType);
18 21
 }

+ 2
- 0
src/main/java/com/yunzhi/marketing/service/IMiniAppService.java Ver arquivo

@@ -31,6 +31,8 @@ public interface IMiniAppService {
31 31
 
32 32
     void sendCheckMessage(TaPerson toUser, String link, String name, String result, String programName, String failReason, String remark, LocalDateTime dt, Boolean isSuccess);
33 33
 
34
+    void sendActivityMessage(TaPerson toUser, String link, String activityName, String address, LocalDateTime dt);
35
+
34 36
     ResponseBean getQrCode(String paramsStr, String appid);
35 37
 
36 38
     String createQrCode(WxMaService service, String path) throws Exception;

+ 2
- 0
src/main/java/com/yunzhi/marketing/service/ITaBuildingDynamicService.java Ver arquivo

@@ -140,4 +140,6 @@ public interface ITaBuildingDynamicService extends IService<TaBuildingDynamic> {
140 140
      * @return
141 141
      */
142 142
     ResponseBean iBuildingDynamicSelectedList(Integer pageNum, Integer pageSize, String name, String buildingId, Integer cityId, String isEnlist, LocalDateTime time, String title, Integer orgId, String activityStatus,List<TaPersonBuilding> personBuildingList);
143
+
144
+    void sendMessageToSubscribers(TaBuildingDynamic dynamic);
143 145
 }

+ 22
- 0
src/main/java/com/yunzhi/marketing/service/impl/MiniAppServiceImpl.java Ver arquivo

@@ -309,6 +309,28 @@ public class MiniAppServiceImpl implements IMiniAppService {
309 309
         iTaPersonMessageRuleService.saveOrUpdateByPersonAndMessage(toUser.getPersonId(), messageType, contentType, toUser.getOrgId());
310 310
     }
311 311
 
312
+    @Override
313
+    public void sendActivityMessage(TaPerson toUser, String link, String activityName, String address, LocalDateTime dt) {
314
+        TaMiniapp miniapp = taMiniappMapper.selectById(toUser.getMiniappId());
315
+        if (null == miniapp) {
316
+            log.error("小程序 {} 不存在", toUser.getMiniappId());
317
+            return;
318
+        }
319
+
320
+        // 消息内容类型
321
+        String contentType = CommConstant.MESSAGE_ACTIVITY;
322
+        TaMiniappTemplate tpl = getTplByType(contentType, toUser.getMiniappId());
323
+        if (tpl == null) {
324
+            log.error("小程序 {} 无通知消息模板 {}", toUser.getMiniappId(), contentType);
325
+            return;
326
+        }
327
+
328
+        String[] data = new String[]{activityName, DateUtils.cutSecond(dt), address, "点击下方【查看详情】, 查看活动参与方式"};
329
+
330
+        ResponseBean res = sendSubscribeMessage(tpl, toUser, link, data);
331
+        iTaPersonMessageRuleService.saveOrUpdateByPersonAndMessage(toUser.getPersonId(), CommConstant.MESSAGE_TYPE_OF_MINIAPP_SUBSCRIBE, contentType, toUser.getOrgId());
332
+    }
333
+
312 334
 
313 335
     @Override
314 336
     public ResponseBean getQrCode(String paramsStr, String appid) {

+ 57
- 12
src/main/java/com/yunzhi/marketing/service/impl/TaBuildingDynamicServiceImpl.java Ver arquivo

@@ -2,6 +2,7 @@ package com.yunzhi.marketing.service.impl;
2 2
 
3 3
 
4 4
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
5 6
 import com.baomidou.mybatisplus.core.metadata.IPage;
6 7
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7 8
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -9,17 +10,14 @@ import com.yunzhi.marketing.base.ResponseBean;
9 10
 import com.yunzhi.marketing.common.CommConstant;
10 11
 import com.yunzhi.marketing.common.StringUtils;
11 12
 import com.yunzhi.marketing.excel.HelpInitiateRecordSucceed;
12
-import com.yunzhi.marketing.mapper.TaActivityDynamicEnlistMapper;
13
-import com.yunzhi.marketing.mapper.TaBuildingDynamicMapper;
14
-import com.yunzhi.marketing.mapper.TaBuildingMapper;
15
-import com.yunzhi.marketing.mapper.TaPersonMapper;
16
-import com.yunzhi.marketing.service.ITaBuildingDynamicService;
17
-import com.yunzhi.marketing.service.ITaSaveService;
18
-import com.yunzhi.marketing.service.TaPosterService;
19
-import com.yunzhi.marketing.service.TaShareContentService;
13
+import com.yunzhi.marketing.mapper.*;
14
+import com.yunzhi.marketing.service.*;
20 15
 import com.yunzhi.marketing.entity.*;
16
+import lombok.extern.log4j.Log4j;
17
+import lombok.extern.slf4j.Slf4j;
21 18
 import org.springframework.beans.factory.annotation.Autowired;
22 19
 import org.springframework.beans.propertyeditors.CustomDateEditor;
20
+import org.springframework.scheduling.annotation.Async;
23 21
 import org.springframework.stereotype.Service;
24 22
 import org.springframework.web.bind.ServletRequestDataBinder;
25 23
 
@@ -43,6 +41,7 @@ import java.util.List;
43 41
  * @author jobob
44 42
  * @since 2019-03-21
45 43
  */
44
+@Slf4j
46 45
 @Service
47 46
 public class TaBuildingDynamicServiceImpl extends ServiceImpl<TaBuildingDynamicMapper, TaBuildingDynamic> implements ITaBuildingDynamicService {
48 47
 
@@ -67,6 +66,12 @@ public class TaBuildingDynamicServiceImpl extends ServiceImpl<TaBuildingDynamicM
67 66
     @Autowired
68 67
     private TaShareContentService taShareContentService;
69 68
 
69
+    @Autowired
70
+    private TaMiniappMessagePersonMapper taMiniappMessagePersonMapper;
71
+
72
+    @Autowired
73
+    private IMiniAppService iMiniAppService;
74
+
70 75
     protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
71 76
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
72 77
         CustomDateEditor editor = new CustomDateEditor(df, true);//true表示允许为空,false反之
@@ -244,8 +249,10 @@ public class TaBuildingDynamicServiceImpl extends ServiceImpl<TaBuildingDynamicM
244 249
 
245 250
         // 当报名人数已满时,活动为已结束
246 251
         if ((enlistCount + taActivityDynamicEnlist.getAttendNum()) > buildingDynamic.getPersonNum()) {
247
-            //taBuildingDynamic.setIsEnlist(2);
248
-            buildingDynamicMapper.updateById(taBuildingDynamic);
252
+//            UpdateWrapper<TaBuildingDynamic> updateWrapper = new UpdateWrapper<>();
253
+//            updateWrapper.set("is_enlist", 2);
254
+//            updateWrapper.eq("dynamic_id", taBuildingDynamic.getDynamicId());
255
+//            buildingDynamicMapper.update(taBuildingDynamic, updateWrapper);
249 256
             responseBean.addError("当前报名人数已满");
250 257
             return responseBean;
251 258
         }
@@ -273,8 +280,11 @@ public class TaBuildingDynamicServiceImpl extends ServiceImpl<TaBuildingDynamicM
273 280
                 .setBuildingId(taBuildingDynamic.getBuildingId());
274 281
         int state = taActivityDynamicEnlistMapper.insert(taActivityDynamicEnlist);
275 282
         int joinNum = taBuildingDynamic.getEnlistNum() == null ? taActivityDynamicEnlist.getAttendNum():taBuildingDynamic.getEnlistNum()+taActivityDynamicEnlist.getAttendNum();
276
-        taBuildingDynamic.setEnlistNum(joinNum);
277
-        buildingDynamicMapper.updateById(taBuildingDynamic);
283
+
284
+        UpdateWrapper<TaBuildingDynamic> updateWrapper = new UpdateWrapper<>();
285
+        updateWrapper.set("enlist_num", joinNum);
286
+        updateWrapper.eq("dynamic_id", taBuildingDynamic.getDynamicId());
287
+        buildingDynamicMapper.update(taBuildingDynamic, updateWrapper);
278 288
         return ResponseBean.success(state);
279 289
     }
280 290
 
@@ -406,6 +416,41 @@ public class TaBuildingDynamicServiceImpl extends ServiceImpl<TaBuildingDynamicM
406 416
         return ResponseBean.success(hashMap);
407 417
     }
408 418
 
419
+    @Async
420
+    @Override
421
+    public void sendMessageToSubscribers(TaBuildingDynamic dynamic) {
422
+        try {
423
+            String buildingId = dynamic.getBuildingId();
424
+            String dynamicId = dynamic.getDynamicId();
425
+            String title = dynamic.getTitle();
426
+            String address = dynamic.getAddress();
427
+            LocalDateTime startDate = dynamic.getStartDate();
428
+
429
+            List<TaMiniappMessagePerson> personList = taMiniappMessagePersonMapper.getPersonBy(dynamic.getOrgId(), buildingId, CommConstant.MESSAGE_ACTIVITY);
430
+
431
+            for (TaMiniappMessagePerson item : personList) {
432
+                String personId = item.getPersonId();
433
+                TaPerson taPerson = taPersonMapper.getById(personId);
434
+
435
+                try {
436
+                    log.info("================ 发送活动 【{}】 开始信息给 {}({})", title, taPerson.getNickname(), personId);
437
+                    iMiniAppService.sendActivityMessage(taPerson,
438
+                            String.format(CommConstant.ACTIVITY_DETAIL_PATH, dynamicId),
439
+                            title,
440
+                            address,
441
+                            startDate);
442
+                } catch (Exception e) {
443
+                    e.printStackTrace();
444
+                }
445
+
446
+                // 每间隔1秒发送一次
447
+                Thread.sleep(1000);
448
+            }
449
+        } catch (Exception e) {
450
+            e.printStackTrace();
451
+        }
452
+    }
453
+
409 454
     @Override
410 455
     public IPage<TaBuildingDynamic> getJoinedActivity(int pageNumber, int pageSize,String building,TaPerson person,Integer orgId){
411 456
         QueryWrapper<TaActivityDynamicEnlist> activityDynamicEnlistQueryWrapper = new QueryWrapper<>();

+ 1
- 1
src/main/resources/application-prod.yml Ver arquivo

@@ -6,7 +6,7 @@ spring:
6 6
   datasource:
7 7
     username: marketing
8 8
     password: u@cSFJ5*kS9hGP7a
9
-    url: jdbc:mysql://localhost:3306/marketing-cloud?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&zeroDateTimeBehavior=convertToNull
9
+    url: jdbc:mysql://210.13.107.60:3306/marketing-cloud?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&zeroDateTimeBehavior=convertToNull
10 10
     driver-class-name: com.mysql.cj.jdbc.Driver
11 11
     initial-size: 10 # 初始化连接数
12 12
     max-active: 20 # 最大连接数

+ 5
- 0
src/main/resources/mapper/TaMiniappMessagePersonMapper.xml Ver arquivo

@@ -2,4 +2,9 @@
2 2
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 3
 <mapper namespace="com.yunzhi.marketing.mapper.TaMiniappMessagePersonMapper">
4 4
 
5
+    <select id="getPersonBy" resultType="com.yunzhi.marketing.entity.TaMiniappMessagePerson">
6
+        select * from ta_miniapp_message_person
7
+        where org_id = #{orgId} and message_type = #{messageType} and building_id = #{buildingId}
8
+        order by create_date asc
9
+    </select>
5 10
 </mapper>