Przeglądaj źródła

Merge branch 'master' of http://git.mokasz.com/marketing/moka-private

leon 4 lat temu
rodzic
commit
a113cbbfcd

+ 150 - 12
src/main/java/com/mokamrp/privates/controller/pangu/FosterwxMobileController.java

@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -59,6 +60,15 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
     @Autowired
     private CorpService corpService;
 
+    @Autowired
+    private FosterwxMobileTaskTimeListService fosterwxMobileTaskTimeListService;
+
+    @Autowired
+    private FosterwxTaskTemplateService fosterwxTaskTemplateService;
+
+    @Autowired
+    private FosterwxTaskListService fosterwxTaskListService;
+
     /*
      * @fast
      * 默认生成的控制器所继承的父类中有index/add/edit/del四个基础方法,均为post json请求
@@ -74,19 +84,19 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
         if (getForsterwxMobileHandle.getWxFriendName() != null && !getForsterwxMobileHandle.getWxFriendName().isEmpty()) {
             //.当查询条件包含微信好友名称时
             List<FosterwxMobileWxfriend> hasWxfriendList = fosterwxMobileWxfriendService.list(new QueryWrapper<FosterwxMobileWxfriend>()
-                    .like("wx_name","%"+getForsterwxMobileHandle.getWxFriendName()+"%"));
-            List<Integer> mobileIds = hasWxfriendList.stream().map(FosterwxMobileWxfriend::getMobileId).collect(Collectors.toList());
-            if(hasWxfriendList == null || hasWxfriendList.size() <= 0){
+                    .like("wx_name", "%" + getForsterwxMobileHandle.getWxFriendName() + "%"));
+            List<Integer> mobileIds = hasWxfriendList.stream().map(FosterwxMobileWxfriend::getId).collect(Collectors.toList());
+            if (hasWxfriendList == null || hasWxfriendList.size() <= 0) {
                 return AjaxResult.success(res);
             }
-            if (getForsterwxMobileHandle.getId() == null){
+            if (getForsterwxMobileHandle.getId() == null) {
                 getForsterwxMobileHandle.setIds(mobileIds);
             }
             res = fosterwxMobileService.getList(getForsterwxMobileHandle);
             List<FosterwxMobileVo> list = fosterwxMobileService.setWxFriend(res.getList());
             res.setList(list);
 
-        }else{
+        } else {
             //.正常查询
             res = fosterwxMobileService.getList(getForsterwxMobileHandle);
             List<FosterwxMobileVo> list = fosterwxMobileService.setWxFriend(res.getList());
@@ -102,12 +112,26 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
             return AjaxResult.error("ids null");
         }
         FosterwxMobile res = service.getOne(new QueryWrapper<FosterwxMobile>().eq("id", ids));
+
+        // 获取默认模板号
+        FosterwxStation fosterwxStation = fosterwxStationService.getById(res.getStationId());
+        if (null == fosterwxStation) return AjaxResult.error("无法获取站点");
+        res.setTemplateId(fosterwxStation.getTaskTemplateId());
+
         Corp corp = corpService.getById(res.getWorkWxCorpId());
         if (null != corp) {
             res.setWxAppid(corp.getWxCorpid());
         }
         List<FosterwxMobileWxfriend> friendList = fosterwxMobileWxfriendService.list(new QueryWrapper<FosterwxMobileWxfriend>().eq("mobile_id", res.getId()).orderByAsc("seq"));
         res.setFriend(friendList);
+
+        // 获取账号任务时间list
+        List<FosterwxMobileTaskTimeList> fosterwxMobileTaskTimeLists = fosterwxMobileTaskTimeListService.list(new LambdaQueryWrapper<FosterwxMobileTaskTimeList>().eq(FosterwxMobileTaskTimeList::getMobileUnioCode, res.getMobileUnioCode()).orderByAsc(FosterwxMobileTaskTimeList::getId));
+
+        if (!fosterwxMobileTaskTimeLists.isEmpty()) {
+            res.setTaskTimeLists(fosterwxMobileTaskTimeLists);
+        }
+
         return AjaxResult.success(Constants.SUCCESS, res);
     }
 
@@ -130,8 +154,9 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
         fosterwxMobileService.save(addHandle.getRaw());
         // 判断开始做任务时间是否设置了
         AjaxResult ajaxResult = null;
-        if (null != addHandle.getRaw().getTaskStartAt()) {
-            ajaxResult = fosterwxTaskScheduleService.insertByTaskDate(addHandle.getRaw(), authUser, false);
+        if (null != addHandle.getRaw().getTaskTimeLists().get(0).getTaskStartAt()) {
+            fosterwxMobileTaskTimeListService.insertByMobile(addHandle.getRaw(), addHandle.getRaw().getTaskTimeLists().get(0));
+            ajaxResult = fosterwxTaskScheduleService.insertByTaskDate(addHandle.getRaw(), addHandle.getRaw().getTaskTimeLists().get(0), authUser, false);
         }
 
         if (null == ajaxResult) return AjaxResult.success(HttpMsg.success, addHandle.getRaw().getId());
@@ -140,14 +165,17 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
     }
 
     @PostMapping("/editPro")
+    @Transactional(rollbackFor = Exception.class)
     public Object editPro(@Valid @RequestBody EditHandle<FosterwxMobile> editHandle, @AuthUser User authUser) {
         String[] ids = editHandle.getIds().split(",");
         for (String id : ids) {
             this.onUpdate(editHandle);
             FosterwxMobile fosterwxMobile = editHandle.getRaw();
             FosterwxMobile oldVO = fosterwxMobileService.getById(id);
+            List<FosterwxMobileTaskTimeList> oldTimeList = fosterwxMobileTaskTimeListService.list(new LambdaQueryWrapper<FosterwxMobileTaskTimeList>().eq(FosterwxMobileTaskTimeList::getMobileUnioCode, oldVO.getMobileUnioCode()).orderByAsc(FosterwxMobileTaskTimeList::getId));
             // 新增账号
             fosterwxMobileService.update(fosterwxMobile, new QueryWrapper<FosterwxMobile>().eq("id", id));
+
             fosterwxMobile = fosterwxMobileService.getById(id);
             // 更新个微池个微二维码及企微appid
             FosterwxMobile finalFosterwxMobile = fosterwxMobile;
@@ -161,10 +189,48 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
                 }}, new QueryWrapper<FosterwxMobilePool>().eq("pool_index", fosterwxMobile.getMobileUnioCode()));
             }
             // 判断开始做任务时间是否设置了
+            // 获取最新的一条时间任务
+            FosterwxMobileTaskTimeList fosterwxMobileTaskTimeList = new FosterwxMobileTaskTimeList();
+
+            if (!editHandle.getRaw().getTaskTimeLists().isEmpty()) {
+                FosterwxMobileTaskTimeList sample = editHandle.getRaw().getTaskTimeLists().get(editHandle.getRaw().getTaskTimeLists().size() - 1);
+                fosterwxMobileTaskTimeList.setTaskStartAt(sample.getTaskStartAt());
+                fosterwxMobileTaskTimeList.setTaskEndAt(sample.getTaskEndAt());
+                fosterwxMobileTaskTimeList.setTemplateId(sample.getTemplateId());
+            }
+
             AjaxResult ajaxResult = null;
-            if (null != fosterwxMobile.getTaskStartAt() && oldVO.getTaskStartAt() == null) {
-                if (fosterwxMobile.getWxStatus() != 2) {
-                    ajaxResult = fosterwxTaskScheduleService.insertByTaskDate(fosterwxMobile, authUser, false);
+            // 全新增加任务的场合
+            // 批量操作的时候传过来的件数不能跟数据库件数比较 因此独立判断
+            if (editHandle.getRaw().getTaskTimeLists().size() > oldTimeList.size() || (editHandle.getRaw().getType() != null && editHandle.getRaw().getTaskTimeLists().size() == 2)) {
+                if (null != fosterwxMobileTaskTimeList.getTaskStartAt()) {
+                    if (null != fosterwxMobileTaskTimeList.getTaskEndAt()) {
+                        LocalDate startDate = fosterwxMobileTaskTimeList.getTaskStartAt().toLocalDate();
+                        LocalDate endDate = fosterwxMobileTaskTimeList.getTaskEndAt().toLocalDate();
+
+                        long dayLong = endDate.toEpochDay() - startDate.toEpochDay() + 1;
+
+                        LambdaQueryWrapper<FosterwxTaskList> fosterTaskListLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                        fosterTaskListLambdaQueryWrapper.eq(FosterwxTaskList::getTemplateId, fosterwxMobileTaskTimeList.getTemplateId());
+                        if (dayLong > fosterwxTaskListService.count(fosterTaskListLambdaQueryWrapper))
+                            return AjaxResult.error(fosterwxMobile.getMobileUnioCode() + "设置的持续时间超过模板的长度");
+                    }
+
+                    fosterwxMobileTaskTimeListService.insertByMobile(fosterwxMobile, fosterwxMobileTaskTimeList);
+                    ajaxResult = fosterwxTaskScheduleService.insertByTaskDate(fosterwxMobile, fosterwxMobileTaskTimeList, authUser, false);
+                }
+            } else {
+                // 原有任务
+                if (null != fosterwxMobileTaskTimeList.getTaskStartAt() && oldTimeList.get(oldTimeList.size() - 1).getTaskStartAt() == null) {
+                    if (fosterwxMobile.getWxStatus() != 2) {
+                        ajaxResult = fosterwxTaskScheduleService.insertByTaskDate(fosterwxMobile, fosterwxMobileTaskTimeList, authUser, false);
+                    }
+                } else if (null != fosterwxMobileTaskTimeList.getTaskEndAt() && oldTimeList.get(oldTimeList.size() - 1).getTaskEndAt() == null) {
+                    fosterwxMobileTaskTimeListService.update(new FosterwxMobileTaskTimeList() {{
+                        setTaskEndAt(fosterwxMobileTaskTimeList.getTaskEndAt());
+                    }}, new LambdaQueryWrapper<FosterwxMobileTaskTimeList>().eq(FosterwxMobileTaskTimeList::getMobileUnioCode, fosterwxMobile.getMobileUnioCode()));
+                    // 删除后面的任务
+                    fosterwxTaskScheduleService.remove(new LambdaQueryWrapper<FosterwxTaskSchedule>().eq(FosterwxTaskSchedule::getStationId, oldVO.getStationId()).eq(FosterwxTaskSchedule::getMobileCode, oldVO.getMobileCode()).gt(FosterwxTaskSchedule::getSendDate, fosterwxMobileTaskTimeList.getTaskEndAt()));
                 }
             }
             // 判断微信状态是否更新为封禁
@@ -173,7 +239,7 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
             }
             // 判断微信状态是否更新为正常
             if (fosterwxMobile.getWxStatus() == 1 && oldVO.getWxStatus() == 2) {
-                ajaxResult = fosterwxTaskScheduleService.insertByTaskDate(fosterwxMobile, authUser, true);
+                ajaxResult = fosterwxTaskScheduleService.insertByTaskDate(fosterwxMobile, fosterwxMobileTaskTimeList, authUser, true);
             }
             if (ajaxResult != null) {
                 return AjaxResult.error(id + "账号批量操作中出现错误");
@@ -260,7 +326,16 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
         for (int i = 1; i <= dayOfMonth; i++) {
             String date = getForsterwxMobileHandle.getYear() + "-" + String.format("%02d", Integer.valueOf(getForsterwxMobileHandle.getMonth())) + "-" + String.format("%02d", i);
 
-            res.put(date, fosterwxTaskScheduleService.getTaskListByMobileCode(stationId, mobileCode, date));
+            List<FosterwxTaskSchedule> fosterwxTaskScheduleList = fosterwxTaskScheduleService.getTaskListByMobileCode(stationId, mobileCode, date);
+
+            fosterwxTaskScheduleList.forEach(fosterwxTaskSchedule -> {
+                FosterwxTaskTemplate fosterwxTaskTemplate = fosterwxTaskTemplateService.getById(fosterwxTaskSchedule.getTemplateId());
+                if (null != fosterwxTaskTemplate) {
+                    fosterwxTaskSchedule.setTemplateName(fosterwxTaskTemplate.getTemplateName());
+                }
+            });
+
+            res.put(date, fosterwxTaskScheduleList);
         }
 
 
@@ -501,5 +576,68 @@ public class FosterwxMobileController extends BaseController<FosterwxMobile> {
 
         return AjaxResult.success(HttpMsg.importSuccess);
     }
+
+    /**
+     * 检查任务时间状态是否一致
+     * @param editHandle
+     * @return
+     */
+    @PostMapping("/checkTaskTime")
+    public Object checkTaskTime(@Valid @RequestBody EditHandle<FosterwxMobile> editHandle) {
+        List<String> idList = Arrays.asList(editHandle.getIds().split(","));
+        // 作为判断标准
+        List<FosterwxMobileTaskTimeList> baseList = new ArrayList<>();
+        FosterwxMobile fosterwxMobile = fosterwxMobileService.getById(idList.get(0));
+        if (fosterwxMobile == null) return AjaxResult.error("无法获取账号");
+
+        baseList = fosterwxMobileTaskTimeListService.list(new LambdaQueryWrapper<FosterwxMobileTaskTimeList>().eq(FosterwxMobileTaskTimeList::getMobileUnioCode, fosterwxMobile.getMobileUnioCode()));
+        FosterwxMobileTaskTimeList baseVO = null;
+
+        if (!baseList.isEmpty()) {
+            baseVO = baseList.get(baseList.size() - 1);
+        }
+
+        for (int i = 1; i < idList.size(); i++) {
+            List<FosterwxMobileTaskTimeList> compareList = new ArrayList<>();
+            fosterwxMobile = fosterwxMobileService.getById(idList.get(i));
+            if (fosterwxMobile == null) return AjaxResult.error("无法获取账号");
+
+            compareList = fosterwxMobileTaskTimeListService.list(new LambdaQueryWrapper<FosterwxMobileTaskTimeList>().eq(FosterwxMobileTaskTimeList::getMobileUnioCode, fosterwxMobile.getMobileUnioCode()));
+
+            // 进行判断
+            if ((baseList.isEmpty() && !compareList.isEmpty()) || (!baseList.isEmpty() && compareList.isEmpty()))
+                return AjaxResult.error("第" + (i + 1) + "条任务详情不一致,存在从没开始设置任务的情况");
+
+            FosterwxMobileTaskTimeList compareVO = null;
+            if (!compareList.isEmpty()) {
+                compareVO = compareList.get(compareList.size() - 1);
+            }
+
+            if (null == baseVO || null == compareVO) continue;
+
+            if (baseVO.getTaskEndAt() == null) {
+                if (compareVO.getTaskEndAt() != null)
+                    return AjaxResult.error("第" + (i + 1) + "条任务结束详情不一致");
+            } else {
+                if (compareVO.getTaskEndAt() == null)
+                    return AjaxResult.error("第" + (i + 1) + "条任务结束详情不一致");
+            }
+
+            // 开始编辑返回的数据
+            if (null == baseVO.getTaskEndAt()) {
+                // 设置最后面的开始时间
+                if (baseVO.getTaskStartAt().isBefore(compareVO.getTaskStartAt())) {
+                    baseVO.setTaskStartAt(compareVO.getTaskStartAt());
+                }
+            } else {
+                // 设置最后面的结束时间
+                if (baseVO.getTaskEndAt().isBefore(compareVO.getTaskEndAt())) {
+                    baseVO.setTaskEndAt(compareVO.getTaskEndAt());
+                }
+            }
+        }
+
+        return AjaxResult.success(baseVO);
+    }
 }
 

+ 4 - 3
src/main/java/com/mokamrp/privates/controller/pangu/FosterwxTaskListController.java

@@ -13,6 +13,7 @@ import com.mokamrp.privates.help.AjaxResult;
 import com.mokamrp.privates.help.Analysis;
 import com.mokamrp.privates.interceptor.AuthUser;
 import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobile;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobileTaskTimeList;
 import com.mokamrp.privates.mapper.pangu.pojo.FosterwxTaskList;
 import com.mokamrp.privates.mapper.pangu.pojo.FosterwxTaskSchedule;
 import com.mokamrp.privates.mapper.pojo.User;
@@ -121,7 +122,7 @@ public class FosterwxTaskListController extends BaseController<FosterwxTaskList>
             // 封禁的状态下不新增任务
             if (2 == fosterwxMobile.getWxStatus()) continue;
 
-            fosterwxTaskScheduleService.insertByTaskDate(fosterwxMobile, authUser, true);
+            fosterwxTaskScheduleService.insertByTaskDate(fosterwxMobile, new FosterwxMobileTaskTimeList(), authUser, true);
         }
 
         if (res) {
@@ -144,8 +145,8 @@ public class FosterwxTaskListController extends BaseController<FosterwxTaskList>
         Map<Integer, String> field = new HashMap<>(1);
         field.put(0, "taskContent");
         List<Map<String, String>> row;
-        VoltaHandle<ArrayList<Map<String,String>>> voltaRes = Analysis.analysis(file, field);
-        if (voltaRes.getErr() != null){
+        VoltaHandle<ArrayList<Map<String, String>>> voltaRes = Analysis.analysis(file, field);
+        if (voltaRes.getErr() != null) {
             return AjaxResult.error(voltaRes.getErr());
         }
         row = voltaRes.getData();

+ 21 - 0
src/main/java/com/mokamrp/privates/mapper/pangu/FosterwxMobileTaskTimeListMapper.java

@@ -0,0 +1,21 @@
+package com.mokamrp.privates.mapper.pangu;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobileTaskTimeList;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 盘古个微养号账号任务时间 Mapper 接口
+ * </p>
+ *
+ * @author leon
+ * @since 2021-08-26
+ */
+@Component
+public interface FosterwxMobileTaskTimeListMapper extends BaseMapper<FosterwxMobileTaskTimeList> {
+    public List<FosterwxMobileTaskTimeList> getList(Page<FosterwxMobileTaskTimeList> pageObj);
+}

+ 27 - 0
src/main/java/com/mokamrp/privates/mapper/pangu/FosterwxMobileTaskTimeListMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mokamrp.privates.mapper.pangu.FosterwxMobileTaskTimeListMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobileTaskTimeList">
+        <id column="id" property="id"/>
+        <result column="station_id" property="stationId"/>
+        <result column="mobile_code" property="mobileCode"/>
+        <result column="mobile_unio_code" property="mobileUnioCode"/>
+        <result column="template_id" property="templateId"/>
+        <result column="task_start_at" property="taskStartAt"/>
+        <result column="task_end_at" property="taskEndAt"/>
+        <result column="create_at" property="createAt"/>
+        <result column="update_at" property="updateAt"/>
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id
+        , station_id, mobile_code, mobile_unio_code, template_id, task_start_at, task_end_at, create_at, update_at
+    </sql>
+    <select id="getList" resultType="com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobileTaskTimeList">
+        SELECT *
+        FROM pan_fosterwx_mobile_task_time_list
+    </select>
+</mapper>

+ 9 - 0
src/main/java/com/mokamrp/privates/mapper/pangu/pojo/FosterwxMobile.java

@@ -181,6 +181,15 @@ public class FosterwxMobile extends Model<FosterwxMobile> {
      */
     private LocalDateTime updateAt;
 
+    @TableField(exist = false)
+    private List<FosterwxMobileTaskTimeList> taskTimeLists;
+
+    @TableField(exist = false)
+    private Integer templateId;
+
+    @TableField(exist = false)
+    private String type;
+
 
     public Integer getId() {
         return id;

+ 164 - 0
src/main/java/com/mokamrp/privates/mapper/pangu/pojo/FosterwxMobileTaskTimeList.java

@@ -0,0 +1,164 @@
+package com.mokamrp.privates.mapper.pangu.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 盘古个微养号账号任务时间
+ * </p>
+ *
+ * @author leon
+ * @since 2021-08-26
+ */
+@Data
+@TableName("pan_fosterwx_mobile_task_time_list")
+public class FosterwxMobileTaskTimeList extends Model<FosterwxMobileTaskTimeList> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 站点id(pan_fosterwx_station.id)
+     */
+    private Integer stationId;
+
+    /**
+     * 手机编号
+     */
+    private String mobileCode;
+
+    /**
+     * 手机唯一编码(station_id+mobile_code)
+     */
+    private String mobileUnioCode;
+
+    /**
+     * 模板id
+     */
+    private Integer templateId;
+
+    /**
+     * 任务开始时间
+     */
+    private LocalDateTime taskStartAt;
+
+    /**
+     * 任务结束时间
+     */
+    private LocalDateTime taskEndAt;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createAt;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateAt;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getStationId() {
+        return stationId;
+    }
+
+    public void setStationId(Integer stationId) {
+        this.stationId = stationId;
+    }
+
+    public String getMobileCode() {
+        return mobileCode;
+    }
+
+    public void setMobileCode(String mobileCode) {
+        this.mobileCode = mobileCode;
+    }
+
+    public String getMobileUnioCode() {
+        return mobileUnioCode;
+    }
+
+    public void setMobileUnioCode(String mobileUnioCode) {
+        this.mobileUnioCode = mobileUnioCode;
+    }
+
+    public Integer getTemplateId() {
+        return templateId;
+    }
+
+    public void setTemplateId(Integer templateId) {
+        this.templateId = templateId;
+    }
+
+    public LocalDateTime getTaskStartAt() {
+        return taskStartAt;
+    }
+
+    public void setTaskStartAt(LocalDateTime taskStartAt) {
+        this.taskStartAt = taskStartAt;
+    }
+
+    public LocalDateTime getTaskEndAt() {
+        return taskEndAt;
+    }
+
+    public void setTaskEndAt(LocalDateTime taskEndAt) {
+        this.taskEndAt = taskEndAt;
+    }
+
+    public LocalDateTime getCreateAt() {
+        return createAt;
+    }
+
+    public void setCreateAt(LocalDateTime createAt) {
+        this.createAt = createAt;
+    }
+
+    public LocalDateTime getUpdateAt() {
+        return updateAt;
+    }
+
+    public void setUpdateAt(LocalDateTime updateAt) {
+        this.updateAt = updateAt;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "PanFosterwxMobileTaskTimeList{" +
+                "id=" + id +
+                ", stationId=" + stationId +
+                ", mobileCode=" + mobileCode +
+                ", mobileUnioCode=" + mobileUnioCode +
+                ", templateId=" + templateId +
+                ", taskStartAt=" + taskStartAt +
+                ", taskEndAt=" + taskEndAt +
+                ", createAt=" + createAt +
+                ", updateAt=" + updateAt +
+                "}";
+    }
+}

+ 6 - 0
src/main/java/com/mokamrp/privates/mapper/pangu/pojo/FosterwxMobileVo.java

@@ -193,6 +193,12 @@ public class FosterwxMobileVo extends Model<FosterwxMobileVo> {
      */
     private LocalDateTime updateAt;
 
+    @TableField(exist = false)
+    private List<FosterwxMobileTaskTimeList> taskTimeLists;
+
+    @TableField(exist = false)
+    private Integer templateId;
+
 
     public Integer getId() {
         return id;

+ 3 - 0
src/main/java/com/mokamrp/privates/mapper/pangu/pojo/FosterwxTaskSchedule.java

@@ -130,6 +130,9 @@ public class FosterwxTaskSchedule extends Model<FosterwxTaskSchedule> {
     @TableField(exist = false)
     private String comment;
 
+    @TableField(exist = false)
+    private String templateName;
+
 
     public Integer getId() {
         return id;

+ 29 - 0
src/main/java/com/mokamrp/privates/service/pangu/FosterwxMobileTaskTimeListService.java

@@ -0,0 +1,29 @@
+package com.mokamrp.privates.service.pangu;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mokamrp.privates.entity.PostBasePageHandle;
+import com.mokamrp.privates.entity.ResHandle;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobile;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobileTaskTimeList;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 盘古个微养号账号任务时间 服务类
+ * </p>
+ *
+ * @author leon
+ * @since 2021-08-26
+ */
+public interface FosterwxMobileTaskTimeListService extends IService<FosterwxMobileTaskTimeList> {
+    //.@leon 获取数据列表
+    public ResHandle<List<FosterwxMobileTaskTimeList>> getList(PostBasePageHandle handle);
+
+    /**
+     * 根据账号新增任务时间数据
+     * @param raw
+     * @param fosterwxMobileTaskTimeList
+     */
+    void insertByMobile(FosterwxMobile raw, FosterwxMobileTaskTimeList fosterwxMobileTaskTimeList);
+}

+ 3 - 1
src/main/java/com/mokamrp/privates/service/pangu/FosterwxTaskScheduleService.java

@@ -5,6 +5,7 @@ import com.mokamrp.privates.entity.ResHandle;
 import com.mokamrp.privates.entity.pangu.FosterwxTaskScheduleHandle;
 import com.mokamrp.privates.help.AjaxResult;
 import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobile;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobileTaskTimeList;
 import com.mokamrp.privates.mapper.pangu.pojo.FosterwxTaskSchedule;
 import com.mokamrp.privates.mapper.pojo.User;
 
@@ -25,10 +26,11 @@ public interface FosterwxTaskScheduleService extends IService<FosterwxTaskSchedu
     /**
      * 根据任务开始时间创建排期/微信状态更新重新生成为执行部分任务
      * @param fosterwxMobile
+     * @param fosterwxMobileTaskTimeList
      * @param authUser
      * @param isChange
      */
-    public AjaxResult insertByTaskDate(FosterwxMobile fosterwxMobile, User authUser, boolean isChange);
+    public AjaxResult insertByTaskDate(FosterwxMobile fosterwxMobile, FosterwxMobileTaskTimeList fosterwxMobileTaskTimeList, User authUser, boolean isChange);
 
     /**
      * 根据当天时间删除后续的任务

+ 13 - 10
src/main/java/com/mokamrp/privates/service/pangu/impl/FosterwxMobileServiceImpl.java

@@ -4,20 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.mokamrp.privates.constant.HttpMsg;
 import com.mokamrp.privates.entity.ResHandle;
 import com.mokamrp.privates.entity.VoltaHandle;
 import com.mokamrp.privates.entity.pangu.GetForsterwxMobileHandle;
-import com.mokamrp.privates.help.AjaxResult;
 import com.mokamrp.privates.mapper.pangu.FosterwxMobileMapper;
 import com.mokamrp.privates.mapper.pangu.pojo.*;
 import com.mokamrp.privates.mapper.pojo.Corp;
 import com.mokamrp.privates.mapper.pojo.User;
 import com.mokamrp.privates.service.CorpService;
-import com.mokamrp.privates.service.pangu.FosterwxMobilePoolService;
-import com.mokamrp.privates.service.pangu.FosterwxMobileService;
-import com.mokamrp.privates.service.pangu.FosterwxMobileWxfriendService;
-import com.mokamrp.privates.service.pangu.FosterwxStationService;
+import com.mokamrp.privates.service.pangu.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -59,23 +54,33 @@ public class FosterwxMobileServiceImpl extends ServiceImpl<FosterwxMobileMapper,
     @Autowired
     public FosterwxMobilePoolService fosterwxMobilePoolService;
 
+    @Autowired
+    public FosterwxMobileTaskTimeListService fosterwxMobileTaskTimeListService;
+
     /**
      * 获取数据列表 支持分页
-     *
      * @param handle
      * @return
      */
     public ResHandle<List<FosterwxMobileVo>> getList(GetForsterwxMobileHandle handle) {
         Integer pagesize = handle.getPagesize();
         Integer page = handle.getPage();
-        Page<FosterwxMobileVo> pageObj = new Page<FosterwxMobileVo>(page, pagesize);
+        Page<FosterwxMobileVo> pageObj = new Page<>(page, pagesize);
         List<FosterwxMobileVo> list = fosterwxMobileMapper.getList(pageObj, handle);
         list.forEach(fosterwxMobile -> {
+            // 获取企微主体信息
             Corp corp = corpService.getById(fosterwxMobile.getWorkWxCorpId());
             if (null != corp) {
                 fosterwxMobile.setWorkWxCorp(corp.getName());
                 fosterwxMobile.setWxAppid(corp.getWxCorpid());
             }
+
+            // 获取账号任务时间list
+            List<FosterwxMobileTaskTimeList> fosterwxMobileTaskTimeLists = fosterwxMobileTaskTimeListService.list(new LambdaQueryWrapper<FosterwxMobileTaskTimeList>().eq(FosterwxMobileTaskTimeList::getMobileUnioCode, fosterwxMobile.getMobileUnioCode()).orderByAsc(FosterwxMobileTaskTimeList::getId));
+
+            if (!fosterwxMobileTaskTimeLists.isEmpty()) {
+                fosterwxMobile.setTaskTimeLists(fosterwxMobileTaskTimeLists);
+            }
         });
         ResHandle<List<FosterwxMobileVo>> resHandle = new ResHandle<>();
         resHandle.setList(list);
@@ -85,7 +90,6 @@ public class FosterwxMobileServiceImpl extends ServiceImpl<FosterwxMobileMapper,
 
     /**
      * 获取指定站点下账号列表
-     *
      * @param getForsterwxMobileHandle
      * @param stationId
      * @return
@@ -101,7 +105,6 @@ public class FosterwxMobileServiceImpl extends ServiceImpl<FosterwxMobileMapper,
 
     /**
      * 导入数据
-     *
      * @param row
      * @return
      */

+ 66 - 0
src/main/java/com/mokamrp/privates/service/pangu/impl/FosterwxMobileTaskTimeListServiceImpl.java

@@ -0,0 +1,66 @@
+package com.mokamrp.privates.service.pangu.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mokamrp.privates.entity.PostBasePageHandle;
+import com.mokamrp.privates.entity.ResHandle;
+import com.mokamrp.privates.mapper.pangu.FosterwxMobileTaskTimeListMapper;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobile;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobileTaskTimeList;
+import com.mokamrp.privates.service.pangu.FosterwxMobileTaskTimeListService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 盘古个微养号账号任务时间 服务实现类
+ * </p>
+ *
+ * @author leon
+ * @since 2021-08-26
+ */
+@Service
+public class FosterwxMobileTaskTimeListServiceImpl extends ServiceImpl<FosterwxMobileTaskTimeListMapper, FosterwxMobileTaskTimeList> implements FosterwxMobileTaskTimeListService {
+
+    @Autowired
+    public FosterwxMobileTaskTimeListMapper fosterwxMobileTaskTimeListMapper;
+
+    /**
+     * 获取数据列表 支持分页
+     * @param handle
+     * @return
+     */
+    public ResHandle<List<FosterwxMobileTaskTimeList>> getList(PostBasePageHandle handle) {
+        Integer pagesize = handle.getPagesize();
+        Integer page = handle.getPage();
+        Page<FosterwxMobileTaskTimeList> pageObj = new Page<FosterwxMobileTaskTimeList>(page, pagesize);
+        List<FosterwxMobileTaskTimeList> list = fosterwxMobileTaskTimeListMapper.getList(pageObj);
+        ResHandle<List<FosterwxMobileTaskTimeList>> resHandle = new ResHandle<>();
+        resHandle.setList(list);
+        resHandle.setTotal(pageObj.getTotal());
+        return resHandle;
+    }
+
+    /**
+     * 根据账号新增任务时间数据
+     * @param raw
+     * @param fosterwxMobileTaskTimeList
+     */
+    @Override
+    public void insertByMobile(FosterwxMobile raw, FosterwxMobileTaskTimeList fosterwxMobileTaskTimeList) {
+        FosterwxMobileTaskTimeList insertVO = new FosterwxMobileTaskTimeList();
+        insertVO.setStationId(raw.getStationId());
+        insertVO.setMobileCode(raw.getMobileCode());
+        insertVO.setMobileUnioCode(raw.getMobileUnioCode());
+        insertVO.setTemplateId(fosterwxMobileTaskTimeList.getTemplateId());
+        insertVO.setTaskStartAt(fosterwxMobileTaskTimeList.getTaskStartAt());
+        insertVO.setTaskEndAt(fosterwxMobileTaskTimeList.getTaskEndAt());
+        insertVO.setCreateAt(LocalDateTime.now());
+        insertVO.setUpdateAt(LocalDateTime.now());
+
+        fosterwxMobileTaskTimeListMapper.insert(insertVO);
+    }
+}

+ 20 - 10
src/main/java/com/mokamrp/privates/service/pangu/impl/FosterwxTaskScheduleServiceImpl.java

@@ -10,10 +10,7 @@ import com.mokamrp.privates.help.AjaxResult;
 import com.mokamrp.privates.mapper.pangu.FosterwxStationMapper;
 import com.mokamrp.privates.mapper.pangu.FosterwxTaskListMapper;
 import com.mokamrp.privates.mapper.pangu.FosterwxTaskScheduleMapper;
-import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobile;
-import com.mokamrp.privates.mapper.pangu.pojo.FosterwxStation;
-import com.mokamrp.privates.mapper.pangu.pojo.FosterwxTaskList;
-import com.mokamrp.privates.mapper.pangu.pojo.FosterwxTaskSchedule;
+import com.mokamrp.privates.mapper.pangu.pojo.*;
 import com.mokamrp.privates.mapper.pojo.User;
 import com.mokamrp.privates.service.pangu.FosterwxTaskScheduleService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -84,23 +81,26 @@ public class FosterwxTaskScheduleServiceImpl extends ServiceImpl<FosterwxTaskSch
     /**
      * 根据开始任务时间生成排期/根据任务开始时间创建排期/微信状态更新重新生成为执行部分任务
      * @param fosterwxMobile
+     * @param fosterwxMobileTaskTimeList
      * @param authUser
      * @param isChange
      */
     @Override
-    public AjaxResult insertByTaskDate(FosterwxMobile fosterwxMobile, User authUser, boolean isChange) {
+    public AjaxResult insertByTaskDate(FosterwxMobile fosterwxMobile, FosterwxMobileTaskTimeList fosterwxMobileTaskTimeList, User authUser, boolean isChange) {
         // 获取站点信息
         FosterwxStation fosterwxStation = fosterwxStationMapper.selectById(fosterwxMobile.getStationId());
 
         if (fosterwxStation == null) return AjaxResult.error(fosterwxMobile.getStationId() + "站点不存在!");
 
-        LocalDate startDate = fosterwxMobile.getTaskStartAt().toLocalDate();
+        // 存在复数任务
+        LocalDate startDate = fosterwxMobileTaskTimeList.getTaskStartAt().toLocalDate();
+        LocalDate endDate = null == fosterwxMobileTaskTimeList.getTaskEndAt() ? null : fosterwxMobileTaskTimeList.getTaskEndAt().toLocalDate();
 
         // 根据站点绑定的任务模板获取模板列表
         List<FosterwxTaskList> fosterwxTaskLists = null;
         if (!isChange) {
             LambdaQueryWrapper<FosterwxTaskList> fosterTaskListLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            fosterTaskListLambdaQueryWrapper.eq(FosterwxTaskList::getTemplateId, fosterwxStation.getTaskTemplateId());
+            fosterTaskListLambdaQueryWrapper.eq(FosterwxTaskList::getTemplateId, fosterwxMobileTaskTimeList.getTemplateId());
             fosterwxTaskLists = fosterwxTaskListMapper.selectList(fosterTaskListLambdaQueryWrapper);
         } else {
             // 查询该账号进行到第几个任务了
@@ -113,19 +113,28 @@ public class FosterwxTaskScheduleServiceImpl extends ServiceImpl<FosterwxTaskSch
             FosterwxTaskSchedule lastTask = fosterwxTaskScheduleMapper.selectOne(fosterwxTaskScheduleLambdaQueryWrapper);
 
             LambdaQueryWrapper<FosterwxTaskList> fosterTaskListLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            fosterTaskListLambdaQueryWrapper.eq(FosterwxTaskList::getTemplateId, fosterwxStation.getTaskTemplateId());
+            fosterTaskListLambdaQueryWrapper.eq(FosterwxTaskList::getTemplateId, fosterwxMobileTaskTimeList.getTemplateId());
             fosterTaskListLambdaQueryWrapper.gt(FosterwxTaskList::getId, lastTask.getTaskId());
             fosterwxTaskLists = fosterwxTaskListMapper.selectList(fosterTaskListLambdaQueryWrapper);
         }
 
         if (fosterwxTaskLists.isEmpty()) return AjaxResult.error("没有可以使用的任务列表!");
 
-        for (FosterwxTaskList fosterwxTaskList : fosterwxTaskLists) {
+        long dayLong = 0;
+        if (null != endDate) {
+            dayLong = endDate.toEpochDay() - startDate.toEpochDay() + 1;
+        } else {
+            dayLong = fosterwxTaskLists.size();
+        }
+
+        // 如果有结束时间的话,只做到结束时间位置
+        for (int i = 0; i < dayLong; i++) {
+            FosterwxTaskList fosterwxTaskList = fosterwxTaskLists.get(i);
             FosterwxTaskSchedule fosterwxTaskSchedule = new FosterwxTaskSchedule();
             fosterwxTaskSchedule.setStationId(fosterwxStation.getId());
             fosterwxTaskSchedule.setStationName(fosterwxStation.getStationName());
             fosterwxTaskSchedule.setMobileCode(fosterwxMobile.getMobileCode());
-            fosterwxTaskSchedule.setTemplateId(fosterwxStation.getTaskTemplateId());
+            fosterwxTaskSchedule.setTemplateId(fosterwxMobileTaskTimeList.getTemplateId());
             fosterwxTaskSchedule.setTaskId(fosterwxTaskList.getId());
             fosterwxTaskSchedule.setTaskName(fosterwxTaskList.getTaskName());
             fosterwxTaskSchedule.setTaskContent(fosterwxTaskList.getTaskContent());
@@ -149,6 +158,7 @@ public class FosterwxTaskScheduleServiceImpl extends ServiceImpl<FosterwxTaskSch
 
             startDate = startDate.plusDays(1);
         }
+
         return null;
     }
 

+ 1 - 1
src/test/java/com/mokamrp/AutoMP.java

@@ -47,7 +47,7 @@ public class AutoMP {
 				.setColumnNaming(NamingStrategy.underline_to_camel)
 				.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略,下划线转驼峰命名
 				.setTablePrefix("private_") //表名前缀
-				.setInclude("private_work_employee_friendcircle");  // 生成的表
+				.setInclude("pan_fosterwx_mobile_task_time_list");  // 生成的表
 		
 		//4. 包名策略配置 
 		PackageConfig pkConfig = new PackageConfig();

+ 33 - 0
src/test/java/com/mokamrp/Tests.java

@@ -1,5 +1,7 @@
 package com.mokamrp;
 
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobile;
+import org.apache.commons.collections4.ListUtils;
 import org.junit.Test;
 
 import java.math.BigDecimal;
@@ -7,6 +9,8 @@ import java.math.RoundingMode;
 import java.text.NumberFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
 
 public class Tests {
 
@@ -32,4 +36,33 @@ public class Tests {
         LocalDate localDate = localDateTime.toLocalDate();
         System.out.println(localDate);
     }
+
+    @Test
+    public void test3() {
+        LocalDate start = LocalDate.of(2021, 8, 25);
+        LocalDate end = LocalDate.now();
+
+        System.out.println(end.toEpochDay() - start.toEpochDay());
+    }
+
+    @Test
+    public void test4() {
+        List<FosterwxMobile> baseList = new ArrayList();
+        List<FosterwxMobile> compareList = new ArrayList<>();
+
+        FosterwxMobile fosterwxMobile = new FosterwxMobile();
+        fosterwxMobile.setId(1);
+        fosterwxMobile.setStationId(0);
+
+        baseList.add(fosterwxMobile);
+        fosterwxMobile.setId(2);
+        compareList.add(fosterwxMobile);
+
+        System.out.println(baseList);
+        System.out.println(compareList);
+
+        System.out.println(ListUtils.isEqualList(baseList, compareList));
+
+
+    }
 }

+ 45 - 1
src/test/java/com/mokamrp/WebTest.java

@@ -1,12 +1,16 @@
 package com.mokamrp;
 
-
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.mokamrp.privates.PrivateServerStart;
 import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobilePool;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxMobileTaskTimeList;
+import com.mokamrp.privates.mapper.pangu.pojo.FosterwxTaskSchedule;
 import com.mokamrp.privates.service.CorpService;
 import com.mokamrp.privates.service.pangu.FosterwxMobilePoolService;
 import com.mokamrp.privates.service.pangu.FosterwxMobileService;
+import com.mokamrp.privates.service.pangu.FosterwxMobileTaskTimeListService;
+import com.mokamrp.privates.service.pangu.FosterwxTaskScheduleService;
+import com.mokamrp.privates.task.pangu.SyncFosterwxMobilePool;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -14,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.time.LocalDateTime;
+
 @Slf4j
 @SpringBootTest(classes = PrivateServerStart.class)
 @RunWith(SpringRunner.class)
@@ -27,6 +33,15 @@ public class WebTest {
     @Autowired
     private FosterwxMobilePoolService fosterwxMobilePoolService;
 
+    @Autowired
+    private SyncFosterwxMobilePool syncFosterwxMobilePool;
+
+    @Autowired
+    private FosterwxMobileTaskTimeListService fosterwxMobileTaskTimeListService;
+
+    @Autowired
+    private FosterwxTaskScheduleService fosterwxTaskScheduleService;
+
     @Test
     public void test1() {
         // 清洗数据
@@ -49,4 +64,33 @@ public class WebTest {
             }}, new LambdaQueryWrapper<FosterwxMobilePool>().eq(FosterwxMobilePool::getPoolIndex, fosterwxMobile.getMobileUnioCode()));
         });
     }
+
+    @Test
+    public void test2() {
+        syncFosterwxMobilePool.execute();
+    }
+
+    /**
+     * 清洗任务开始时间到新的数据表中
+     */
+    @Test
+    public void test3() {
+        fosterwxMobileService.list().forEach(fosterwxMobile -> {
+            if (null != fosterwxMobile.getTaskStartAt()) {
+                FosterwxMobileTaskTimeList fosterwxMobileTaskTimeList = new FosterwxMobileTaskTimeList();
+                fosterwxMobileTaskTimeList.setStationId(fosterwxMobile.getStationId());
+                fosterwxMobileTaskTimeList.setMobileCode(fosterwxMobile.getMobileCode());
+                fosterwxMobileTaskTimeList.setMobileUnioCode(fosterwxMobile.getMobileUnioCode());
+                FosterwxTaskSchedule fosterwxTaskSchedule = fosterwxTaskScheduleService.getOne(new LambdaQueryWrapper<FosterwxTaskSchedule>().eq(FosterwxTaskSchedule::getStationId, fosterwxMobile.getStationId()).eq(FosterwxTaskSchedule::getMobileCode, fosterwxMobile.getMobileCode()).last("limit 1"));
+                if (null != fosterwxTaskSchedule)
+                    fosterwxMobileTaskTimeList.setTemplateId(fosterwxTaskSchedule.getTemplateId());
+
+                fosterwxMobileTaskTimeList.setTaskStartAt(fosterwxMobile.getTaskStartAt());
+                fosterwxMobileTaskTimeList.setTaskEndAt(null);
+                fosterwxMobileTaskTimeList.setCreateAt(LocalDateTime.now());
+                fosterwxMobileTaskTimeList.setUpdateAt(LocalDateTime.now());
+                fosterwxMobileTaskTimeListService.save(fosterwxMobileTaskTimeList);
+            }
+        });
+    }
 }