فهرست منبع

sync room config

wangyunpeng 1 ماه پیش
والد
کامیت
636c0825aa

+ 1 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/wecom/thirdpart/ext/ThirdPartWeComRoomMapperExt.java

@@ -14,4 +14,5 @@ public interface ThirdPartWeComRoomMapperExt {
                                          @Param("pushAccountId") Long pushAccountId,
                                          @Param("offset") int offset, @Param("pageSize") Integer pageSize);
 
+    List<ThirdPartWeComRoom> getNoConfigRoomList(@Param("staffId") Long id);
 }

+ 24 - 0
api-module/src/main/java/com/tzld/piaoquan/api/job/wecom/thirdpart/WeComUserDetailJob.java

@@ -10,8 +10,12 @@ import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomUserMa
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffUserMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ext.ThirdPartWeComMapperExt;
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ext.ThirdPartWeComRoomMapperExt;
 import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.*;
+import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyAccountConfigVO;
+import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyAccountService;
+import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyRoomService;
 import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyService;
 import com.tzld.piaoquan.growth.common.utils.RedisUtils;
 import com.xxl.job.core.biz.model.ReturnT;
@@ -33,6 +37,10 @@ public class WeComUserDetailJob {
     @Autowired
     WeComThirdPartyService thirdPartyService;
     @Autowired
+    WeComThirdPartyAccountService thirdPartyAccountService;
+    @Autowired
+    WeComThirdPartyRoomService thirdPartyRoomService;
+    @Autowired
     WeComThirdPartyApiClient apiClient;
     @Autowired
     ThirdPartWeComStaffMapper staffMapper;
@@ -44,6 +52,8 @@ public class WeComUserDetailJob {
     ThirdPartWeComRoomUserMapper roomUserMapper;
     @Autowired
     ThirdPartWeComMapperExt thirdPartWeComMapperExt;
+    @Autowired
+    ThirdPartWeComRoomMapperExt thirdPartWeComRoomMapperExt;
 
     @Autowired
     private RedisUtils redisUtils;
@@ -278,6 +288,7 @@ public class WeComUserDetailJob {
             for (List<ThirdPartWeComRoom> partition : partitionList) {
                 thirdPartWeComMapperExt.batchInsertThirdPartWeComRoom(partition);
             }
+            new Thread(() -> batchSaveRoomConfig(staff)).start();
         }
         if (CollectionUtils.isNotEmpty(updateList)) {
             List<List<ThirdPartWeComRoom>> partitionList = Lists.partition(updateList, 200);
@@ -299,6 +310,19 @@ public class WeComUserDetailJob {
         }
     }
 
+    private void batchSaveRoomConfig(ThirdPartWeComStaff staff) {
+        ThirdPartyAccountConfigVO accountConfig = thirdPartyAccountService.getAccountConfig(new ThirdPartyConfigGetParam(staff.getId()));
+        if (Objects.isNull(accountConfig)) {
+            return;
+        }
+        List<ThirdPartWeComRoom> noConfigRoomList = thirdPartWeComRoomMapperExt.getNoConfigRoomList(staff.getId());
+        if (CollectionUtils.isNotEmpty(noConfigRoomList)) {
+            for (ThirdPartWeComRoom room : noConfigRoomList) {
+                thirdPartyRoomService.saveRoomConfig(room, accountConfig.getId(), accountConfig);
+            }
+        }
+    }
+
     public void syncRoomUserList(String uuid, String thirdRoomId) {
         GetRoomUserListRequest request = new GetRoomUserListRequest(uuid, Long.valueOf(thirdRoomId));
         List<GetRoomUserListResponse.Member> userList = thirdPartyService.getRoomUserList(request);

+ 4 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/param/wecom/thirdpart/ThirdPartyConfigGetParam.java

@@ -1,9 +1,13 @@
 package com.tzld.piaoquan.api.model.param.wecom.thirdpart;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class ThirdPartyConfigGetParam {
     @ApiModelProperty(value = "id")
     private Long id;

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/wecom/thirdpart/ThirdPartyAccountConfigTaskContentVO.java

@@ -6,6 +6,8 @@ import lombok.Data;
 @Data
 public class ThirdPartyAccountConfigTaskContentVO {
 
+    @ApiModelProperty(value = "id")
+    private String id;
     @ApiModelProperty(value = "类型 0-文案 1-小程序")
     private Integer type;
     @ApiModelProperty(value = "文案内容")

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/wecom/thirdpart/ThirdPartyAccountConfigTaskVO.java

@@ -8,6 +8,8 @@ import java.util.List;
 @Data
 public class ThirdPartyAccountConfigTaskVO {
 
+    @ApiModelProperty(value = "id")
+    private String id;
     @ApiModelProperty(value = "投放场景")
     private Integer switchFlag;
     @ApiModelProperty(value = "发送时间")

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/wecom/thirdpart/ThirdPartyAccountConfigVO.java

@@ -8,6 +8,8 @@ import java.util.List;
 @Data
 public class ThirdPartyAccountConfigVO {
 
+    @ApiModelProperty(value = "id")
+    private String id;
     @ApiModelProperty(value = "投放场景")
     private String putScene;
     @ApiModelProperty(value = "渠道")

+ 3 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/WeComThirdPartyRoomService.java

@@ -9,6 +9,7 @@ import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomConfig;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomConfigTask;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoomConfigTaskContent;
 import com.tzld.piaoquan.api.model.vo.IdNameVO;
+import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyAccountConfigVO;
 import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomConfigVO;
 import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomVO;
 import com.tzld.piaoquan.growth.common.utils.page.Page;
@@ -31,5 +32,7 @@ public interface WeComThirdPartyRoomService {
 
     void saveRoomConfig(ThirdPartWeComRoom room, String accountConfigId, ThirdPartyAccountConfigParam param);
 
+    void saveRoomConfig(ThirdPartWeComRoom room, String accountConfigId, ThirdPartyAccountConfigVO configVO);
+
     List<ThirdPartWeComRoomConfig> getRoomConfigListByRoomIds(List<Long> roomIds);
 }

+ 9 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/impl/WeComThirdPartyAccountServiceImpl.java

@@ -14,6 +14,7 @@ import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffConfi
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffConfigTaskContentMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffConfigTaskMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffMapper;
+import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ext.ThirdPartWeComRoomMapperExt;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ext.ThirdPartWeComStaffMapperExt;
 import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.*;
@@ -59,6 +60,8 @@ public class WeComThirdPartyAccountServiceImpl implements WeComThirdPartyAccount
     private ThirdPartWeComStaffConfigTaskContentMapper staffConfigTaskContentMapper;
     @Autowired
     private ThirdPartWeComStaffMapperExt staffMapperExt;
+    @Autowired
+    private ThirdPartWeComRoomMapperExt roomMapperExt;
 
     @Autowired
     private RedisUtils redisUtils;
@@ -184,6 +187,7 @@ public class WeComThirdPartyAccountServiceImpl implements WeComThirdPartyAccount
         Map<String, List<ThirdPartWeComStaffConfigTaskContent>> taskContentMap = contentList.stream()
                 .collect(Collectors.groupingBy(ThirdPartWeComStaffConfigTaskContent::getTaskId));
         ThirdPartyAccountConfigVO result = new ThirdPartyAccountConfigVO();
+        result.setId(config.getId());
         result.setPutScene(config.getPutScene());
         result.setChannel(config.getChannel());
         result.setSwitchFlag(config.getSwitchFlag());
@@ -198,6 +202,7 @@ public class WeComThirdPartyAccountServiceImpl implements WeComThirdPartyAccount
         }
         result.setTaskList(taskList.stream().map(task -> {
             ThirdPartyAccountConfigTaskVO vo = new ThirdPartyAccountConfigTaskVO();
+            vo.setId(task.getId());
             vo.setSwitchFlag(task.getSwitchFlag());
             vo.setSendTime(JSONObject.parseArray(task.getSendTime(), String.class));
             vo.setRandomMin(task.getRandomMin());
@@ -205,6 +210,7 @@ public class WeComThirdPartyAccountServiceImpl implements WeComThirdPartyAccount
             List<ThirdPartWeComStaffConfigTaskContent> contents = taskContentMap.get(task.getId());
             vo.setContentList(contents.stream().map(content -> {
                 ThirdPartyAccountConfigTaskContentVO contentVO = new ThirdPartyAccountConfigTaskContentVO();
+                contentVO.setId(content.getId());
                 contentVO.setType(content.getType());
                 contentVO.setContent(content.getContent());
                 contentVO.setSource(content.getSource());
@@ -315,6 +321,9 @@ public class WeComThirdPartyAccountServiceImpl implements WeComThirdPartyAccount
         } else {
             roomList = new ArrayList<>();
         }
+        // 未配置群生效
+        List<ThirdPartWeComRoom> noConfigRoomList = roomMapperExt.getNoConfigRoomList(param.getAccountId());
+        roomList.addAll(noConfigRoomList);
         syncConfig(param, accountConfigId, roomList);
     }
 

+ 42 - 4
api-module/src/main/java/com/tzld/piaoquan/api/service/wecom/thirdparty/impl/WeComThirdPartyRoomServiceImpl.java

@@ -13,10 +13,7 @@ import com.tzld.piaoquan.api.job.wecom.thirdpart.WeComSendMsgJob;
 import com.tzld.piaoquan.api.model.param.wecom.thirdpart.*;
 import com.tzld.piaoquan.api.model.po.wecom.thirdpart.*;
 import com.tzld.piaoquan.api.model.vo.IdNameVO;
-import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomConfigTaskContentVO;
-import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomConfigTaskVO;
-import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomConfigVO;
-import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.ThirdPartyRoomVO;
+import com.tzld.piaoquan.api.model.vo.wecom.thirdpart.*;
 import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyRoomService;
 import com.tzld.piaoquan.api.service.wecom.thirdparty.WeComThirdPartyService;
 import com.tzld.piaoquan.growth.common.utils.DateUtil;
@@ -350,6 +347,47 @@ public class WeComThirdPartyRoomServiceImpl implements WeComThirdPartyRoomServic
         return roomConfigParam;
     }
 
+    @Override
+    public void saveRoomConfig(ThirdPartWeComRoom room, String accountConfigId, ThirdPartyAccountConfigVO configVO) {
+        ThirdPartyRoomConfigParam roomConfigParam = buildRoomConfigParam(room, configVO);
+        saveRoomConfig(roomConfigParam, accountConfigId);
+    }
+
+    private ThirdPartyRoomConfigParam buildRoomConfigParam(ThirdPartWeComRoom room, ThirdPartyAccountConfigVO configVO) {
+        ThirdPartyRoomConfigParam roomConfigParam = new ThirdPartyRoomConfigParam();
+        roomConfigParam.setRoomId(room.getId());
+        roomConfigParam.setPutScene(configVO.getPutScene());
+        roomConfigParam.setChannel(configVO.getChannel());
+        roomConfigParam.setSwitchFlag(configVO.getSwitchFlag());
+        roomConfigParam.setOpenRoomSendSwitchNum(configVO.getOpenRoomSendSwitchNum());
+        roomConfigParam.setPrimaryThirdStaffId(configVO.getPrimaryThirdStaffId());
+        roomConfigParam.setPrimaryThirdStaffName(configVO.getPrimaryThirdStaffName());
+        roomConfigParam.setSecondThirdStaffId(configVO.getSecondThirdStaffId());
+        roomConfigParam.setSecondThirdStaffName(configVO.getSecondThirdStaffName());
+        List<ThirdPartyRoomConfigTaskParam> taskList = new ArrayList<>();
+        for (ThirdPartyAccountConfigTaskVO taskVO : configVO.getTaskList()) {
+            ThirdPartyRoomConfigTaskParam task = new ThirdPartyRoomConfigTaskParam();
+            task.setSwitchFlag(taskVO.getSwitchFlag());
+            task.setSendTime(taskVO.getSendTime());
+            task.setRandomMin(taskVO.getRandomMin());
+            task.setSeq(taskVO.getSeq());
+            List<ThirdPartyRoomConfigTaskContentParam> contentList = new ArrayList<>();
+            for (ThirdPartyAccountConfigTaskContentVO taskContentVO : taskVO.getContentList()) {
+                ThirdPartyRoomConfigTaskContentParam content = new ThirdPartyRoomConfigTaskContentParam();
+                content.setType(taskContentVO.getType());
+                content.setContent(taskContentVO.getContent());
+                content.setSource(taskContentVO.getSource());
+                content.setSourceContent(taskContentVO.getSourceContent());
+                content.setSeq(taskContentVO.getSeq());
+                contentList.add(content);
+            }
+            task.setContentList(contentList);
+            taskList.add(task);
+        }
+        roomConfigParam.setTaskList(taskList);
+        return roomConfigParam;
+    }
+
     @Override
     public List<ThirdPartWeComRoomConfig> getRoomConfigListByRoomIds(List<Long> roomIds) {
         ThirdPartWeComRoomConfigExample example = new ThirdPartWeComRoomConfigExample();

+ 9 - 0
api-module/src/main/resources/mapper/wecom/thirdpart/ext/ThirdPartWeComRoomMapperExt.xml

@@ -46,4 +46,13 @@
         limit #{offset}, #{pageSize}
     </select>
 
+    <select id="getNoConfigRoomList"
+            resultType="com.tzld.piaoquan.api.model.po.wecom.thirdpart.ThirdPartWeComRoom">
+        select room.*
+        from third_part_we_com_room room
+        join third_part_we_com_staff staff on room.staff_id = staff.id
+        left join third_part_we_com_room_config room_config on room.id = room_config.room_id and room_config.status = 1
+        where room.is_delete = 0 and staff.id = #{staffId} and room_config.id is null
+    </select>
+
 </mapper>