yangzian преди 2 години
родител
ревизия
8a3dd9acc4
променени са 34 файла, в които са добавени 3255 реда и са изтрити 136 реда
  1. 25 10
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/entity/SysUser.java
  2. 113 11
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
  3. 3 5
      jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/mapper/xml/MaterialStareMapper.xml
  4. 39 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/controller/DesignerAchievementsController.java
  5. 23 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/mapper/DesignerMapper.java
  6. 31 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/mapper/xml/DesignerMapper.xml
  7. 17 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/service/IDesignerService.java
  8. 33 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/service/impl/DesignerServiceImpl.java
  9. 93 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/AccountCompensation.java
  10. 81 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/RoleChangeRecord.java
  11. 27 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/AccountCompensationMapper.java
  12. 17 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/RoleChangeRecordMapper.java
  13. 12 5
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/SysUserMapper.java
  14. 83 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/AccountCompensationMapper.xml
  15. 5 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/RoleChangeRecordMapper.xml
  16. 209 95
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/SysUserMapper.xml
  17. 26 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/IAccountCompensationService.java
  18. 19 7
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/ISysUserService.java
  19. 42 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/AccountCompensationServiceImpl.java
  20. 48 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/SysUserServiceImpl.java
  21. 7 2
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/UserAllocationServiceImpl.java
  22. 257 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/controller/KuaishouOperationReportController.java
  23. 107 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouOperationReport.java
  24. 40 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouOperationReportMapper.java
  25. 267 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouOperationReportMapper.xml
  26. 28 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouOperationReportService.java
  27. 1257 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouOperationReportServiceImpl.java
  28. 136 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysOperateRelController.java
  29. 7 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
  30. 69 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysOperateRel.java
  31. 28 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysOperateRelMapper.java
  32. 54 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysOperateRelMapper.xml
  33. 21 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysOperateRelService.java
  34. 31 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysOperateRelServiceImpl.java

+ 25 - 10
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/entity/SysUser.java

@@ -63,13 +63,13 @@ public class SysUser implements Serializable {
     /**
      * 头像
      */
-    @Excel(name = "头像", width = 15,type = 2)
+    @Excel(name = "头像", width = 15, type = 2)
     private String avatar;
 
     /**
      * 性别(1:男 2:女)
      */
-    @Excel(name = "性别", width = 15,dicCode="sex")
+    @Excel(name = "性别", width = 15, dicCode = "sex")
     @Dict(dicCode = "sex")
     private Integer sex;
 
@@ -90,20 +90,24 @@ public class SysUser implements Serializable {
      */
     private String orgCode;
 
-    /**部门名称*/
+    /**
+     * 部门名称
+     */
     private transient String orgCodeTxt;
 
     /**
      * 状态(1:正常  2:冻结 )
      */
-    @Excel(name = "状态", width = 15,dicCode="user_status")
+    @Excel(name = "状态", width = 15, dicCode = "user_status")
     @Dict(dicCode = "user_status")
     private Integer status;
+    //冻结时间
+    private String frozenTime;
 
     /**
      * 删除状态(0,正常,1已删除)
      */
-    @Excel(name = "删除状态", width = 15,dicCode="del_flag")
+    @Excel(name = "删除状态", width = 15, dicCode = "del_flag")
     @TableLogic
     private Integer delFlag;
 
@@ -117,7 +121,7 @@ public class SysUser implements Serializable {
      * 职务,关联职务表
      */
     @Excel(name = "职务", width = 15)
-    @Dict(dictTable ="sys_position",dicText = "name",dicCode = "code")
+    @Dict(dictTable = "sys_position", dicText = "name", dicCode = "code")
     private String post;
 
     /**
@@ -142,6 +146,15 @@ public class SysUser implements Serializable {
     private String updateBy;
 
     /**
+     * 绩效发放比例
+     */
+    private String paySalaryRatio;
+    /**
+     * 是否发放绩效(0否,1是)
+     */
+    private String paySalary;
+
+    /**
      * 更新时间
      */
     private Date updateTime;
@@ -153,14 +166,14 @@ public class SysUser implements Serializable {
     /**
      * 身份(0 普通成员 1 上级)
      */
-    @Excel(name="(1普通成员 2上级)",width = 15)
+    @Excel(name = "(1普通成员 2上级)", width = 15)
     private Integer userIdentity;
 
     /**
      * 负责部门
      */
-    @Excel(name="负责部门",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
-    @Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
+    @Excel(name = "负责部门", width = 15, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
+    @Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
     private String departIds;
 
     /**
@@ -168,7 +181,9 @@ public class SysUser implements Serializable {
      */
     private String relTenantIds;
 
-    /**设备id uniapp推送用*/
+    /**
+     * 设备id uniapp推送用
+     */
     private String clientId;
 
     /**

+ 113 - 11
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -1270,9 +1270,14 @@ public class DateUtils extends PropertyEditorSupport {
      * @return
      * @throws ParseException
      */
-    public static String getMonth(String format, String date) throws ParseException {
+    public static String getMonth(String format, String date) {
         SimpleDateFormat df = new SimpleDateFormat(format);
-        Date parse = df.parse(date);
+        Date parse = null;
+        try {
+            parse = df.parse(date);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
         return String.format("%tm", parse);
     }
 
@@ -1885,6 +1890,83 @@ public class DateUtils extends PropertyEditorSupport {
         return newDate;
     }
 
+    /**
+     * 获取某季度的第一天和最后一天
+     *
+     * @param num第几季度
+     */
+    public static Map<String, String> getCurrQuarter(int num) {
+        Map<String, String> map = new HashMap<>();
+        String str = "";
+        // 设置本年的季
+        Calendar quarterCalendar = null;
+        switch (num) {
+            case 1: // 本年到现在经过了一个季度,在加上前4个季度
+                quarterCalendar = Calendar.getInstance();
+                quarterCalendar.set(Calendar.MONTH, 3);
+                quarterCalendar.set(Calendar.DATE, 1);
+                quarterCalendar.add(Calendar.DATE, -1);
+                str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
+                map.put("startDate", str.substring(0, str.length() - 5) + "01-01");
+                map.put("endDate", str);
+                break;
+            case 2: // 本年到现在经过了二个季度,在加上前三个季度
+                quarterCalendar = Calendar.getInstance();
+                quarterCalendar.set(Calendar.MONTH, 6);
+                quarterCalendar.set(Calendar.DATE, 1);
+                quarterCalendar.add(Calendar.DATE, -1);
+                str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
+                map.put("startDate", str.substring(0, str.length() - 5) + "04-01");
+                map.put("endDate", str);
+                break;
+            case 3:// 本年到现在经过了三个季度,在加上前二个季度
+                quarterCalendar = Calendar.getInstance();
+                quarterCalendar.set(Calendar.MONTH, 9);
+                quarterCalendar.set(Calendar.DATE, 1);
+                quarterCalendar.add(Calendar.DATE, -1);
+                str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
+                map.put("startDate", str.substring(0, str.length() - 5) + "07-01");
+                map.put("endDate", str);
+                break;
+            case 4:// 本年到现在经过了四个季度,在加上前一个季度
+                quarterCalendar = Calendar.getInstance();
+                str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
+                map.put("startDate", str.substring(0, str.length() - 5) + "10-01");
+                map.put("endDate", str.substring(0, str.length() - 5) + "12-31");
+                break;
+        }
+        return map;
+    }
+
+    /**
+     * 获取指定年指定月的开始天数和结束天数
+     *
+     * @param year
+     * @param month
+     * @return
+     */
+    public static Map<String, String> getFirstDayAndLastDayOfTheSpecifiedMonth(int year, int month) {
+        // 获取当前分区的日历信息(这里可以使用参数指定时区)
+        Calendar calendar = Calendar.getInstance();
+        // 设置年
+        calendar.set(Calendar.YEAR, year);
+        // 设置月,月份从0开始
+        calendar.set(Calendar.MONTH, month - 1);
+        // 设置为指定月的第一天
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        // 获取指定月第一天的时间
+        Date start = calendar.getTime();
+        // 设置日历天数为当前月实际天数的最大值,即指定月份的最后一天
+        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
+        // 获取最后一天的时间
+        Date end = calendar.getTime();
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Map<String, String> dateMap = new HashMap<>();
+        dateMap.put("start", sdf.format(start));
+        dateMap.put("end", sdf.format(end));
+        return dateMap;
+    }
 
     /**
      * 获取 两个日期之间的所有 日期
@@ -1922,16 +2004,36 @@ public class DateUtils extends PropertyEditorSupport {
      * @return
      */
     public static List<String> getHoursListDifference(List<String> betweenDaysList) {
-        List<String> dateList = new ArrayList<String>(){{
-            add("00");add("01");add("02");add("03");add("04");add("05");
-            add("06");add("07");add("08");add("09");add("10");add("11");
-            add("12");add("13");add("14");add("15");add("16");add("17");
-            add("18");add("19");add("20");add("21");add("22");add("23");
+        List<String> dateList = new ArrayList<String>() {{
+            add("00");
+            add("01");
+            add("02");
+            add("03");
+            add("04");
+            add("05");
+            add("06");
+            add("07");
+            add("08");
+            add("09");
+            add("10");
+            add("11");
+            add("12");
+            add("13");
+            add("14");
+            add("15");
+            add("16");
+            add("17");
+            add("18");
+            add("19");
+            add("20");
+            add("21");
+            add("22");
+            add("23");
         }};
         List<String> resultList = new ArrayList<String>();
-        betweenDaysList.forEach(day ->{
-            dateList.forEach(hour ->{
-                resultList.add((day + hour).replace("-",""));
+        betweenDaysList.forEach(day -> {
+            dateList.forEach(hour -> {
+                resultList.add((day + hour).replace("-", ""));
             });
         });
         return resultList;
@@ -2054,7 +2156,7 @@ public class DateUtils extends PropertyEditorSupport {
         list.add("2022-09-04");
 
 
-        System.out.println(getHoursListDifference(list));;
+        System.out.println(getHoursListDifference(list));
 
     }
 

+ 3 - 5
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/mapper/xml/MaterialStareMapper.xml

@@ -290,14 +290,12 @@
         SELECT abi.account_id ,
         IFNULL(SUM(abi.new_effect_num),0) as newEffectNum,
         IFNULL(SUM(abi.new_campaign_num),0) as newCampaignNum,
-        IFNULL((SUM(abi.new_unit_num) - SUM(abi.trust_unit_num)),0) as newUnitNum,
+        IFNULL(SUM(abi.new_unit_num),0) as newUnitNum,
         IFNULL(SUM( abi.new_video_num ),0) AS newVideoNum,
         IFNULL(SUM( abi.new_hot_num ),0) AS newHotNum,
         IFNULL(SUM( abi.trust_unit_num ),0) AS trustUnitNum
-        from application.app_kuaishou_account_base_info_d abi,
-        `jeecg-boot`.ctop_user_allocation u
-        WHERE abi.account_id = u.account_id
-        and u.account_status = 0
+        from application.app_kuaishou_account_base_info_d abi
+        WHERE 1 =1
         <if test="startDate != null and startDate != '' ">
             and abi.stat_date &gt;= #{startDate}
         </if>

+ 39 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/controller/DesignerAchievementsController.java

@@ -0,0 +1,39 @@
+package cn.com.ctop.common.module.achievements.controller;
+
+import cn.com.ctop.common.module.achievements.service.IDesignerService;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+/**
+ * 设计人员绩效
+ *
+ * @author: zian Y
+ * @date: 2022-09-28
+ * @cersion: V1.0
+ */
+@Slf4j
+@Api(tags = "设计人员绩效")
+@RestController
+@RequestMapping("/designer/designerAchievementsController")
+public class DesignerAchievementsController {
+    @Autowired
+    private IDesignerService designerService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+    @GetMapping(value = "/getHotVideoData")
+    public Result getHotVideoData(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+
+        return designerService.getHotVideoData();
+
+    }
+
+}

+ 23 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/mapper/DesignerMapper.java

@@ -0,0 +1,23 @@
+package cn.com.ctop.common.module.achievements.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 设计人员绩效
+ *
+ * @author: zian Y
+ * @date: 2022-09-28
+ * @cersion: V1.0
+ */
+public interface DesignerMapper{
+
+    /**
+     * 查询设计人员基础信息
+     * @param userId 用户id
+     * @return
+     */
+    List<JSONObject> getDesignerUserInfo(@Param("userId") String userId);
+}

+ 31 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/mapper/xml/DesignerMapper.xml

@@ -0,0 +1,31 @@
+<?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="cn.com.ctop.common.module.achievements.mapper.DesignerMapper">
+
+
+    <!-- 查询设计人员基础信息 -->
+    <select id="getDesignerUserInfo" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            u.id AS userId,
+            u.realname AS userName,
+            u.sex AS userSex,
+            u.frozen_time AS frozenTime,
+            d.depart_name AS departName,
+            r.role_name AS roleName
+        FROM
+            `jeecg-boot`.sys_user u
+                LEFT JOIN `jeecg-boot`.sys_depart d ON u.org_code = d.org_code
+                LEFT JOIN `jeecg-boot`.sys_user_role ur ON ur.user_id = u.id
+                LEFT JOIN `jeecg-boot`.sys_role r ON r.id = ur.role_id
+        <where>
+            and d.depart_name LIKE '%设计%'
+            <if test="userId != null and userId != ''">
+                and u.id = #{userId}
+            </if>
+        </where>
+    </select>
+
+
+
+
+</mapper>

+ 17 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/service/IDesignerService.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.common.module.achievements.service;
+
+import org.jeecg.common.api.vo.Result;
+
+/**
+ * 设计人员绩效
+ *
+ * @author: zian Y
+ * @date: 2022-09-28
+ * @cersion: V1.0
+ */
+public interface IDesignerService{
+
+
+    Result getHotVideoData();
+
+}

+ 33 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/achievements/service/impl/DesignerServiceImpl.java

@@ -0,0 +1,33 @@
+package cn.com.ctop.common.module.achievements.service.impl;
+
+import cn.com.ctop.common.module.achievements.mapper.DesignerMapper;
+import cn.com.ctop.common.module.achievements.service.IDesignerService;
+import com.alibaba.fastjson.JSONObject;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 设计人员绩效
+ *
+ * @author: zian Y
+ * @date: 2022-09-28
+ * @cersion: V1.0
+ */
+@Service
+public class DesignerServiceImpl implements IDesignerService {
+    @Resource
+    private DesignerMapper designerMapper;
+
+
+    @Override
+    public Result getHotVideoData() {
+
+        List<JSONObject> list = designerMapper.getDesignerUserInfo(null);
+
+
+        return Result.successMsg("查询成功",list);
+    }
+}

+ 93 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/AccountCompensation.java

@@ -0,0 +1,93 @@
+package cn.com.ctop.common.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 账户赔付记录';
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2022-09-16
+ */
+@Data
+@TableName("ctop_account_compensation")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_account_compensation对象", description = "账户赔付记录'; ")
+public class AccountCompensation {
+
+    /**
+     * 运营ID
+     */
+    @Excel(name = "运营ID", width = 15)
+    @ApiModelProperty(value = "运营ID")
+    private String userId;
+    /**
+     * 开始日期
+     */
+    @Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "开始日期")
+    private String startDate;
+    /**
+     * 结束日期
+     */
+    @Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "结束日期")
+    private String endDate;
+    /**
+     * 项目id
+     */
+    @Excel(name = "项目id", width = 15)
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+    /**
+     * 账户id
+     */
+    @Excel(name = "账户id", width = 15)
+    @ApiModelProperty(value = "账户id")
+    private Long accountId;
+    /**
+     * 赔偿金
+     */
+    @Excel(name = "赔偿金", width = 15)
+    @ApiModelProperty(value = "赔偿金")
+    private java.math.BigDecimal compMoney;
+    /**
+     * 平台类型 1 头条 2快手
+     */
+    @Excel(name = "平台类型 1 头条 2快手", width = 15)
+    @ApiModelProperty(value = "平台类型 1 头条 2快手")
+    private String mediaId;
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 81 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/RoleChangeRecord.java

@@ -0,0 +1,81 @@
+package cn.com.ctop.common.module.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 角色变更记录
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2022-09-19
+ */
+@Data
+@TableName("sys_role_change_record")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "sys_role_change_record对象", description = "角色变更记录")
+public class RoleChangeRecord {
+
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+    /**
+     * userId
+     */
+    @Excel(name = "userId", width = 15)
+    @ApiModelProperty(value = "userId")
+    private String userId;
+    /**
+     * 现在角色名称
+     */
+    @Excel(name = "现在角色名称", width = 15)
+    @ApiModelProperty(value = "现在角色名称")
+    private String newRoleName;
+    /**
+     * 现在角色编码
+     */
+    @Excel(name = "现在角色编码", width = 15)
+    @ApiModelProperty(value = "现在角色编码")
+    private String newRoleCode;
+    /**
+     * 原来角色名称
+     */
+    @Excel(name = "原来角色名称", width = 15)
+    @ApiModelProperty(value = "原来角色名称")
+    private String oldRoleName;
+    /**
+     * 原来角色编码
+     */
+    @Excel(name = "原来角色编码", width = 15)
+    @ApiModelProperty(value = "原来角色编码")
+    private String oldRoleCode;
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+}

+ 27 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/AccountCompensationMapper.java

@@ -0,0 +1,27 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.AccountCompensation;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 账户赔付记录';
+ *
+ * @author jeecg-boot
+ * 2022-09-16
+ * @version V1.0
+ */
+public interface AccountCompensationMapper extends BaseMapper<AccountCompensation> {
+
+    List<JSONObject> getAllOperatorList(List<String> roleCode, String mediaId);
+
+    BigDecimal getCompMoney(@Param("userId") String userId, @Param("startDate") String startDate, @Param("endDate") String endDate);
+
+    JSONObject getAccountUser(@Param("accountId") Long accountId);
+
+    List<JSONObject> queryAccountCompensation(AccountCompensation accountCompensation);
+}

+ 17 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/RoleChangeRecordMapper.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.common.module.mapper;
+
+import java.util.List;
+
+import cn.com.ctop.common.module.entity.RoleChangeRecord;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 角色变更记录
+ * @author jeecg-boot
+ * 2022-09-19
+ * @version V1.0
+ */
+public interface RoleChangeRecordMapper extends BaseMapper<RoleChangeRecord> {
+
+}

+ 12 - 5
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/SysUserMapper.java

@@ -180,14 +180,21 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<JSONObject> getUserMapByMap(@Param("ids") Map<String, String> userIdMap);
 
     /**
-     *
-     * @param userId 用户id
+     * @param userId               用户id
      * @param designTeamLeaderName 设计组长姓名
      * @return
      */
-    Integer updUserDesignLeaderById(@Param("userId") String userId,@Param("designTeamLeaderName") String designTeamLeaderName);
+    Integer updUserDesignLeaderById(@Param("userId") String userId, @Param("designTeamLeaderName") String designTeamLeaderName);
+
+    List<String> getUserIdsByLeaderId(@Param("leaderId") String leaderId);
+
+    JSONObject getDepart(@Param("companyId") String companyId);
+
+
+    List<JSONObject> getQuarterlyChangeRoleOperators(@Param("roleCode") List<String> roleCode, @Param("userId") String userId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("mediaId") String mediaId);
+
+    List<JSONObject> getQuarterlyOnJobOperators(@Param("roleCode") List<String> roleCode, @Param("userId") String userId, @Param("status") int status, @Param("changeRoleUserIds") List<JSONObject> changeRoleUserIds, @Param("mediaId") String mediaId);
 
-    List<String> getUserIdsByLeaderId(@Param("leaderId")String leaderId);
+    List<JSONObject> getQuarterlyOffJobOperators(@Param("roleCode") List<String> roleCode, @Param("userId") String userId, @Param("status") int status, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("mediaId") String mediaId);
 
-    JSONObject getDepart(@Param("companyId")  String companyId);
 }

+ 83 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/AccountCompensationMapper.xml

@@ -0,0 +1,83 @@
+<?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="cn.com.ctop.common.module.mapper.AccountCompensationMapper">
+
+    <select id="getAllOperatorList" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t1.user_id as 'userId',
+        t2.realname as 'userName',
+        t.role_name as 'roleName',
+        t.role_code as 'roleCode',
+        t4.company_name as 'companyName'
+        FROM `sys_role` t
+        LEFT JOIN sys_user_role t1 ON t.id = t1.role_id
+        LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        LEFT JOIN ctop_user_allocation t3 ON t1.user_id = t3.user_id
+        LEFT JOIN user_company t4 on t4.user_id = t1.user_id
+        WHERE t.role_code in
+        <foreach collection="roleCode" item="roleCode" separator="," open="(" close=")">
+            #{roleCode}
+        </foreach>
+        AND t3.media_id = #{mediaId}
+        GROUP BY t1.user_id
+        UNION
+        SELECT
+        t1.user_id as 'userId',
+        t2.realname as 'userName',
+        t.role_name as 'roleName',
+        t.role_code as 'roleCode',
+        t4.company_name as 'companyName'
+        FROM `sys_role` t
+        LEFT JOIN sys_user_role t1 ON t.id = t1.role_id
+        LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        LEFT JOIN ctop_transfer_account t5 ON t1.user_id = t5.transferor
+        LEFT JOIN ctop_user_allocation t3 ON t3.account_id = t5.account_id
+        LEFT JOIN user_company t4 on t4.user_id = t1.user_id
+        WHERE  t.role_code in
+        <foreach collection="roleCode" item="roleCode" separator="," open="(" close=")">
+            #{roleCode}
+        </foreach>
+        AND t3.media_id = #{mediaId}
+        GROUP BY t1.user_id
+
+    </select>
+
+    <select id="getCompMoney" resultType="java.math.BigDecimal">
+        SELECT
+        comp_money
+        FROM ctop_account_compensation
+        WHERE user_id = #{userId}
+        <if test="startDate != null">
+            AND start_date >=#{startDate}
+        </if>
+        <if test="endDate != null">
+            AND end_date &lt;=#{endDate}
+        </if>
+    </select>
+
+    <select id="getAccountUser" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.user_id,realname
+        FROM ctop_user_allocation t1
+                 LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        WHERE t1.account_id = #{accountId}
+    </select>
+
+    <select id="queryAccountCompensation" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            t1.user_id as 'userId',
+            t1.start_date as 'startDate',
+            t1.end_date as 'endDate',
+            t1.account_id as 'accountId',
+            t1.project_id as 'projectId',
+            t1.comp_money as 'compMoney',
+            t1.media_id as 'mediaId',
+            t1.create_by as 'createBy',
+            t1.create_time as 'createTime',
+            t2.realname,
+            t3.auth_name
+        FROM `ctop_account_compensation` t1
+                 LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+                 LEFT JOIN ctop_user_allocation t3 ON t1.account_id = t3.account_id
+        ORDER BY t1.create_time desc
+    </select>
+</mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/RoleChangeRecordMapper.xml

@@ -0,0 +1,5 @@
+<?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="cn.com.ctop.common.module.mapper.RoleChangeRecordMapper">
+
+</mapper>

+ 209 - 95
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/SysUserMapper.xml

@@ -3,24 +3,22 @@
 <mapper namespace="cn.com.ctop.common.module.mapper.SysUserMapper">
 
     <select id="selectAllUser" resultType="org.jeecg.common.system.entity.SysUser">
-		select * from  sys_user
-	</select>
+        select *
+        from sys_user
+    </select>
 
     <!-- 根据用户名查询 -->
     <!-- 修改前的版本select * from  sys_user  where username = #{username} and del_flag = 0 -->
     <select id="getUserByName" resultType="org.jeecg.common.system.entity.SysUser">
 
-		SELECT
-            t2.*,
-            t4.role_name
-        FROM
-            sys_user t2
-        LEFT JOIN sys_user_role t3 ON t2.id = t3.user_id
-        LEFT JOIN sys_role t4 ON t3.role_id = t4.id
-        WHERE
-            t2.username = #{username}
-        AND t2.del_flag = 0
-	</select>
+        SELECT t2.*,
+               t4.role_name
+        FROM sys_user t2
+                 LEFT JOIN sys_user_role t3 ON t2.id = t3.user_id
+                 LEFT JOIN sys_role t4 ON t3.role_id = t4.id
+        WHERE t2.username = #{username}
+          AND t2.del_flag = 0
+    </select>
 
     <!-- 根据部门Id查询 -->
     <select id="getUserByDepId" resultType="org.jeecg.common.system.entity.SysUser">
@@ -64,41 +62,46 @@
 
     <!--  修改用户部门code -->
     <update id="updateUserDepart">
-		UPDATE sys_user SET org_code = #{orgCode} where username = #{username}
-	</update>
+        UPDATE sys_user
+        SET org_code = #{orgCode}
+        where username = #{username}
+    </update>
 
     <!-- 根据手机号查询 -->
     <select id="getUserByPhone" resultType="org.jeecg.common.system.entity.SysUser">
-		select * from  sys_user  where phone = #{phone} and del_flag = 0
-	</select>
+        select *
+        from sys_user
+        where phone = #{phone}
+          and del_flag = 0
+    </select>
 
     <!-- 根据realname查询 -->
     <select id="getUserByRealName" resultType="org.jeecg.common.system.entity.SysUser">
-        select * from  sys_user  where realname = #{realname} and del_flag = 0 limit 1
+        select *
+        from sys_user
+        where realname = #{realname}
+          and del_flag = 0 limit 1
     </select>
 
     <!-- 根据邮箱查询用户信息 -->
     <select id="getUserByEmail" resultType="org.jeecg.common.system.entity.SysUser">
-	select * from  sys_user  where email = #{email} and del_flag = 0
-	</select>
+        select *
+        from sys_user
+        where email = #{email}
+          and del_flag = 0
+    </select>
     <select id="queryRoleCode" parameterType="Object" resultType="java.util.Map">
-SELECT
-   role_code roleCode,
-   role_name roleName,
-   id roleId
-   FROM
-   sys_role
-   WHERE
-   id = (
-   SELECT
-   t2.role_id
-   FROM
-   sys_user t1
-   LEFT JOIN sys_user_role t2 ON t1.id = t2.user_id
-   WHERE
-   t1.id = #{userId,jdbcType=VARCHAR}
-   )
-</select>
+        SELECT role_code roleCode,
+               role_name roleName,
+               id        roleId
+        FROM sys_role
+        WHERE id = (
+            SELECT t2.role_id
+            FROM sys_user t1
+                     LEFT JOIN sys_user_role t2 ON t1.id = t2.user_id
+            WHERE t1.id = #{userId,jdbcType=VARCHAR}
+        )
+    </select>
     <select id="getAllUser" resultType="cn.com.ctop.common.module.vo.SysUserVo">
         SELECT
         t1.id userId,
@@ -152,34 +155,29 @@ SELECT
 
     </select>
     <select id="getAllSale" resultType="cn.com.ctop.common.module.vo.SysUserVo">
-       SELECT
-	t2.id userId,
-	t2.username userName,
-	t2.realname realName,
-   t4.role_name AS roleName
-    FROM
-	user_company t1
-    LEFT JOIN sys_user t2 ON t1.user_id = t2.id
-    LEFT JOIN sys_user_role t3 ON t2.id = t3.user_id
-    LEFT JOIN sys_role t4 ON t3.role_id = t4.id
-    WHERE
-	t4.role_name LIKE '%销售%';
+        SELECT t2.id           userId,
+               t2.username     userName,
+               t2.realname     realName,
+               t4.role_name AS roleName
+        FROM user_company t1
+                 LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+                 LEFT JOIN sys_user_role t3 ON t2.id = t3.user_id
+                 LEFT JOIN sys_role t4 ON t3.role_id = t4.id
+        WHERE t4.role_name LIKE '%销售%';
     </select>
 
 
     <select id="getAllSalesByCompanyId" resultType="cn.com.ctop.common.module.vo.SysUserVo">
-       SELECT
-	t2.id userId,
-	t2.username userName,
-	t2.realname realName,
-    t4.role_name AS roleName
-  FROM
-	user_company t1
-    LEFT JOIN sys_user t2 ON t1.user_id = t2.id
-    LEFT JOIN sys_user_role t3 ON t2.id = t3.user_id
-    LEFT JOIN sys_role t4 ON t3.role_id = t4.id
-    WHERE t1.company_id = #{companyId}
-	and t4.role_name LIKE '%销售%';
+        SELECT t2.id           userId,
+               t2.username     userName,
+               t2.realname     realName,
+               t4.role_name AS roleName
+        FROM user_company t1
+                 LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+                 LEFT JOIN sys_user_role t3 ON t2.id = t3.user_id
+                 LEFT JOIN sys_role t4 ON t3.role_id = t4.id
+        WHERE t1.company_id = #{companyId}
+          and t4.role_name LIKE '%销售%';
     </select>
     <!-- 根据 orgCode 查询用户,包括子部门下的用户 -->
     <select id="getUserByOrgCode" resultType="cn.com.ctop.common.module.model.SysUserSysDepartModel">
@@ -223,30 +221,34 @@ SELECT
 
     <!-- 查询被逻辑删除的用户 -->
     <select id="selectLogicDeleted" resultType="org.jeecg.common.system.entity.SysUser">
-		SELECT * FROM sys_user ${ew.customSqlSegment}
-	</select>
+        SELECT *
+        FROM sys_user ${ew.customSqlSegment}
+    </select>
 
     <!-- 更新被逻辑删除的用户 -->
     <update id="revertLogicDeleted">
-		UPDATE
-			sys_user
-		SET
-			del_flag = 0,
-			update_by = #{entity.updateBy},
-			update_time = #{entity.updateTime}
-		WHERE
-			del_flag = 1
-			AND id IN (${userIds})
-	</update>
+        UPDATE
+            sys_user
+        SET del_flag    = 0,
+            update_by   = #{entity.updateBy},
+            update_time = #{entity.updateTime}
+        WHERE del_flag = 1
+          AND id IN (${userIds})
+    </update>
 
     <!-- 彻底删除被逻辑删除的用户 -->
     <delete id="deleteLogicDeleted">
-		DELETE FROM sys_user WHERE del_flag = 1 AND id IN (${userIds})
-	</delete>
+        DELETE
+        FROM sys_user
+        WHERE del_flag = 1
+          AND id IN (${userIds})
+    </delete>
 
     <!-- 更新空字符串为null -->
     <update id="updateNullByEmptyString">
-        UPDATE sys_user SET ${fieldName} = NULL WHERE ${fieldName} = ''
+        UPDATE sys_user
+        SET ${fieldName} = NULL
+        WHERE ${fieldName} = ''
     </update>
 
     <!-- 通过多个部门IDS,查询部门下的用户信息 -->
@@ -266,26 +268,31 @@ SELECT
 
     <select id="selectUserByAccount" resultType="com.alibaba.fastjson.JSONObject">
         SELECT *
-        FROM  sys_user t1
-        INNER JOIN  ctop_user_allocation t2 ON t1.id = t2.user_id
+        FROM sys_user t1
+                 INNER JOIN ctop_user_allocation t2 ON t1.id = t2.user_id
         WHERE t2.account_id = #{accountId}
     </select>
     <select id="selectAllDesigner" resultType="org.jeecg.common.system.entity.SysUser">
-        select user.realname,user.id,role.role_name from sys_user_role userRole left join sys_user user on userRole.user_id = user.id
-        left join sys_role role on userRole.role_id = role.id
-            where role.role_code in ('plane','plan','shot','clip','designTeamLeader')
-            and user.status = 1
+        select user.realname, user.id, role.role_name
+        from sys_user_role userRole
+                 left join sys_user user
+        on userRole.user_id = user.id
+            left join sys_role role on userRole.role_id = role.id
+        where role.role_code in ('plane'
+            , 'plan'
+            , 'shot'
+            , 'clip'
+            , 'designTeamLeader')
+          and user.status = 1
     </select>
     <select id="getDesignerTeamLeaderBy" resultType="org.jeecg.common.system.entity.SysUser">
-        SELECT
-            user2.realname,user2.id
+        SELECT user2.realname,
+               user2.id
         FROM sys_user user2
-        LEFT JOIN sys_user_role userRole ON user2.id = userRole.user_id
-        LEFT JOIN sys_role role ON userRole.role_id = role.id
-        WHERE
-            user2.org_code = #{orgCode}
-        AND
-            role.role_code = 'designTeamLeader'
+                 LEFT JOIN sys_user_role userRole ON user2.id = userRole.user_id
+                 LEFT JOIN sys_role role ON userRole.role_id = role.id
+        WHERE user2.org_code = #{orgCode}
+          AND role.role_code = 'designTeamLeader'
     </select>
 
     <!-- 查询用户列表-->
@@ -341,21 +348,128 @@ SELECT
     </select>
 
 
-
-
     <!-- 修改用户 设计组长姓名 -->
     <update id="updUserDesignLeaderById">
-        UPDATE sys_user SET design_team_leader_name = #{designTeamLeaderName} WHERE id = #{userId}
+        UPDATE sys_user
+        SET design_team_leader_name = #{designTeamLeaderName}
+        WHERE id = #{userId}
     </update>
 
     <select id="getUserIdsByLeaderId" resultType="java.lang.String">
-        select id from sys_user
+        select id
+        from sys_user
         where leader_id = #{leaderId}
     </select>
 
     <select id="getDepart" resultType="com.alibaba.fastjson.JSONObject">
-        select * from sys_manager_company
+        select *
+        from sys_manager_company
         where id = #{companyId}
     </select>
 
+
+    <select id="getQuarterlyChangeRoleOperators" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t1.user_id as 'userId',
+        t2.realname,
+        t.role_name as 'roleName',
+        t.role_code as 'roleCode',
+        DATE_FORMAT(t3.create_time, '%Y-%m-%d %H:%i:%s') as 'upTime'
+        FROM `sys_role` t
+        LEFT JOIN sys_user_role t1 ON t.id = t1.role_id
+        LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        LEFT JOIN sys_role_change_record t3 ON t1.user_id = t3.user_id
+        LEFT JOIN ctop_user_allocation t4 ON t1.user_id = t4.user_id
+        WHERE t.role_code in
+        <foreach collection="roleCode" item="roleCode" separator="," open="(" close=")">
+            #{roleCode}
+        </foreach>
+        <if test="userId != null and userId != ''">
+            AND t1.user_id =#{userId}
+        </if>
+        AND t1.user_id is not null
+        AND t3.create_time >=#{startDate}
+        AND t3.create_time &lt;=#{endDate}
+        AND t4.media_id = #{mediaId}
+        GROUP BY t1.user_id
+    </select>
+
+    <select id="getQuarterlyOnJobOperators" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t1.user_id as 'userId',
+        t2.realname,
+        t.role_code as 'roleCode',
+        t.role_name as 'roleName'
+        FROM `sys_role` t
+        LEFT JOIN sys_user_role t1 ON t.id = t1.role_id
+        LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        LEFT JOIN ctop_user_allocation t3 ON t1.user_id = t3.user_id
+        WHERE t.role_code in
+        <foreach collection="roleCode" item="roleCode" separator="," open="(" close=")">
+            #{roleCode}
+        </foreach>
+        <if test="userId != null and userId != ''">
+            AND t1.user_id =#{userId}
+        </if>
+        AND t2.status=1
+        AND t1.user_id is not null
+        <if test="changeRoleUserIds != null and changeRoleUserIds.size() > 0">
+            AND t1.user_id not in
+            <foreach collection="changeRoleUserIds" item="user" separator="," open="(" close=")">
+                #{user.userId}
+            </foreach>
+        </if>
+        AND t3.media_id = #{mediaId}
+        GROUP BY t1.user_id
+    </select>
+
+    <select id="getQuarterlyOffJobOperators" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t1.user_id as 'userId',
+        t2.realname,
+        t.role_name as 'roleName',
+        t.role_code as 'roleCode',
+        frozen_time as 'quitTime'
+        FROM `sys_role` t
+        LEFT JOIN sys_user_role t1 ON t.id = t1.role_id
+        LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        LEFT JOIN ctop_user_allocation t3 ON t1.user_id = t3.user_id
+        WHERE t.role_code in
+        <foreach collection="roleCode" item="roleCode" separator="," open="(" close=")">
+            #{roleCode}
+        </foreach>
+        <if test="userId != null and userId != ''">
+            AND t1.user_id =#{userId}
+        </if>
+        AND t2.status= 2
+        AND frozen_time >=#{startDate}
+        AND frozen_time &lt;=#{endDate}
+        AND t3.media_id = #{mediaId}
+        GROUP BY t1.user_id
+        UNION
+        SELECT
+        t1.user_id as 'userId',
+        t2.realname,
+        t.role_name as 'roleName',
+        t.role_code as 'roleCode',
+        frozen_time as 'quitTime'
+        FROM `sys_role` t
+        LEFT JOIN sys_user_role t1 ON t.id = t1.role_id
+        LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        LEFT JOIN ctop_transfer_account t4 ON t1.user_id = t4.transferor
+        LEFT JOIN ctop_user_allocation t3 ON t4.account_id = t3.account_id
+        WHERE t.role_code in
+        <foreach collection="roleCode" item="roleCode" separator="," open="(" close=")">
+            #{roleCode}
+        </foreach>
+        <if test="userId != null and userId != ''">
+            AND t1.user_id =#{userId}
+        </if>
+        AND t2.status= 2
+        AND frozen_time >=#{startDate}
+        AND frozen_time &lt;=#{endDate}
+        AND t3.media_id = #{mediaId}
+        GROUP BY t1.user_id
+
+    </select>
 </mapper>

+ 26 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/IAccountCompensationService.java

@@ -0,0 +1,26 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.AccountCompensation;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 账户赔付记录';
+ *
+ * @author jeecg-boot
+ * 2022-09-16
+ * @version V1.0
+ */
+public interface IAccountCompensationService extends IService<AccountCompensation> {
+
+    List<JSONObject> getAllOperatorList(List<String> roleCode, String mediaId);
+
+    BigDecimal getCompMoney(String userId, String startDate, String endDate);
+
+    JSONObject getAccountUser(Long account);
+
+    List<JSONObject> queryAccountCompensation(AccountCompensation accountCompensation);
+}

+ 19 - 7
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/ISysUserService.java

@@ -2,6 +2,7 @@ package cn.com.ctop.common.module.service;
 
 import cn.com.ctop.common.module.model.SysUserSysDepartModel;
 import cn.com.ctop.common.module.vo.SysUserVo;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -273,27 +274,38 @@ public interface ISysUserService extends IService<SysUser> {
 
     String getRoleCodeByUserId(String userId);
 
-    Integer updUserDesignLeaderById(String userId,String userName,String roleId);
+    Integer updUserDesignLeaderById(String userId, String userName, String roleId);
+
     /**
      * 保存用户
-     * @param user 用户
-     * @param selectedRoles 选择的角色id,多个以逗号隔开
+     *
+     * @param user            用户
+     * @param selectedRoles   选择的角色id,多个以逗号隔开
      * @param selectedDeparts 选择的部门id,多个以逗号隔开
      */
     void saveUser(SysUser user, String selectedRoles, String selectedDeparts);
 
     /**
      * 编辑用户
-     * @param user 用户
-     * @param roles 选择的角色id,多个以逗号隔开
+     *
+     * @param user    用户
+     * @param roles   选择的角色id,多个以逗号隔开
      * @param departs 选择的部门id,多个以逗号隔开
      */
     void editUser(SysUser user, String roles, String departs);
 
-    /** userId转为username */
+    /**
+     * userId转为username
+     */
     List<String> userIdToUsername(Collection<String> userIdList);
 
     List<SysUser> queryAdminPageList(SysUser user);
 
-    void getItsPersonnelIds(List<String> rids,String userId);
+    void getItsPersonnelIds(List<String> rids, String userId);
+
+    List<JSONObject> getQuarterlyChangeRoleOperators(List<String> roleCode, String userId, String startDate, String endDate,String mediaId);
+
+    List<JSONObject> getQuarterlyOnJobOperators(List<String> roleCode, String userId, int status, List<JSONObject> changeRoleUserIds,String mediaId);
+
+    List<JSONObject> getQuarterlyOffJobOperators(List<String> roleCode, String userId, int status, String startDate, String endDate,String mediaId);
 }

+ 42 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/AccountCompensationServiceImpl.java

@@ -0,0 +1,42 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.AccountCompensation;
+import cn.com.ctop.common.module.mapper.AccountCompensationMapper;
+import cn.com.ctop.common.module.service.IAccountCompensationService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 账户赔付记录';
+ *
+ * @author jeecg-boot
+ * 2022-09-16
+ * @version V1.0
+ */
+@Service
+public class AccountCompensationServiceImpl extends ServiceImpl<AccountCompensationMapper, AccountCompensation> implements IAccountCompensationService {
+
+    @Override
+    public List<JSONObject> getAllOperatorList(List<String> roleCode, String mediaId) {
+        return baseMapper.getAllOperatorList(roleCode, mediaId);
+    }
+
+    @Override
+    public BigDecimal getCompMoney(String userId, String startDate, String endDate) {
+        return baseMapper.getCompMoney(userId, startDate, endDate);
+    }
+
+    @Override
+    public JSONObject getAccountUser(Long accountId) {
+        return baseMapper.getAccountUser(accountId);
+    }
+
+    @Override
+    public List<JSONObject> queryAccountCompensation(AccountCompensation accountCompensation) {
+        return baseMapper.queryAccountCompensation(accountCompensation);
+    }
+}

+ 48 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/SysUserServiceImpl.java

@@ -1,9 +1,11 @@
 package cn.com.ctop.common.module.service.impl;
 
+import cn.com.ctop.common.module.entity.RoleChangeRecord;
 import cn.com.ctop.common.module.entity.SysDepartRole;
 import cn.com.ctop.common.module.entity.SysDepartRoleUser;
 import cn.com.ctop.common.module.entity.SysRole;
 import cn.com.ctop.common.module.entity.SysUserDepart;
+import cn.com.ctop.common.module.mapper.RoleChangeRecordMapper;
 import cn.com.ctop.common.module.mapper.SysDepartMapper;
 import cn.com.ctop.common.module.mapper.SysDepartRoleMapper;
 import cn.com.ctop.common.module.mapper.SysDepartRoleUserMapper;
@@ -23,6 +25,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
@@ -83,6 +86,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Resource
     private SysRoleMapper sysRoleMapper;
     @Resource
+    private RoleChangeRecordMapper roleChangeRecordMapper;
+    @Resource
     private SysDepartRoleUserMapper departRoleUserMapper;
     @Resource
     private SysDepartRoleMapper sysDepartRoleMapper;
@@ -268,6 +273,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
     @Transactional
     public void editUserWithRole(SysUser user, String roles) {
+        insertRoleRecord(user, roles);
         this.updateById(user);
         //先删后加
         sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
@@ -280,6 +286,32 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }
     }
 
+    /**
+     * 角色变更记录
+     */
+    private void insertRoleRecord(SysUser user, String roles) {
+        try {
+            SysRole oldsysRole = sysRoleMapper.queryRoleByUserId(user.getId());
+            SysRole sysRole = sysRoleMapper.selectById(roles);
+            if (Check.isNull(sysRole) || Check.isNull(oldsysRole)) {
+                return;
+            }
+            if (sysRole.getRoleCode().equals(oldsysRole.getRoleCode())) {
+                return;
+            }
+            LoginUser createBy = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+            RoleChangeRecord record = new RoleChangeRecord();
+            record.setUserId(user.getId());
+            record.setNewRoleCode(sysRole.getRoleCode());
+            record.setNewRoleName(sysRole.getRoleName());
+            record.setOldRoleCode(oldsysRole.getRoleCode());
+            record.setOldRoleName(oldsysRole.getRoleName());
+            record.setCreateBy(createBy.getId());
+            roleChangeRecordMapper.insert(record);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
     @Override
     public List<String> getRole(String username) {
@@ -681,4 +713,20 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
         }
     }
+
+    @Override
+    public List<JSONObject> getQuarterlyChangeRoleOperators(List<String> roleCode, String userId, String startDate, String endDate,String mediaId) {
+        return userMapper.getQuarterlyChangeRoleOperators(roleCode, userId, startDate, endDate, mediaId);
+    }
+
+    @Override
+    public List<JSONObject> getQuarterlyOnJobOperators(List<String> roleCode, String userId, int status, List<JSONObject> changeRoleUserIds,String mediaId) {
+        return userMapper.getQuarterlyOnJobOperators(roleCode, userId, status, changeRoleUserIds, mediaId);
+    }
+
+    @Override
+    public List<JSONObject> getQuarterlyOffJobOperators(List<String> roleCode, String userId, int status, String startDate, String endDate,String mediaId) {
+        return userMapper.getQuarterlyOffJobOperators(roleCode, userId, status, startDate, endDate, mediaId);
+    }
+
 }

+ 7 - 2
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/UserAllocationServiceImpl.java

@@ -24,7 +24,11 @@ import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 用户分配
@@ -322,7 +326,8 @@ public class UserAllocationServiceImpl extends ServiceImpl<UserAllocationMapper,
             LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
             SysLog sysLog = new SysLog();
             sysLog.setLogType(2);
-            sysLog.setLogContent(String.valueOf(accountStatus));
+            String logContent = accountStatus == 0 ? "启动(0)" : "禁用(" + accountStatus + ")";
+            sysLog.setLogContent("账户状态更新为:" + logContent);
             sysLog.setRequestParam(userAllocationEntity.getAccountId().toString());
             sysLog.setOperateType(10001);
             sysLog.setUserid(user.getId());

+ 257 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/controller/KuaishouOperationReportController.java

@@ -0,0 +1,257 @@
+package cn.com.ctop.kuaishou.modules.report.controller;
+
+import cn.com.ctop.common.module.entity.AccountCompensation;
+import cn.com.ctop.common.module.service.IAccountCompensationService;
+import cn.com.ctop.common.module.service.ISysUserService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouOperationReport;
+import cn.com.ctop.kuaishou.modules.report.service.IKuaishouOperationReportService;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 运营绩效
+ */
+@Slf4j
+@Api(tags = "运营绩效")
+@RestController
+@RequestMapping("/kuaishou/operationReport")
+public class KuaishouOperationReportController {
+    @Autowired
+    private IKuaishouOperationReportService kuaishouOperationReportService;
+
+    @Autowired
+    private ISysRoleService roleService;
+
+    @Autowired
+    private IAccountCompensationService compensationService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    /**
+     * 查询季度消耗
+     * 条件:日期,岗位,人员
+     */
+    @ApiOperation(value = "运营绩效-分页列表查询", notes = "运营绩效-分页列表查询")
+    @GetMapping(value = "/queryMonthlyData")
+    public Result<Object> queryMonthlyData(String mediaId, Integer time, String role, String userId, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        try {
+            if (Check.isNull(mediaId) || Check.isNull(time)) {
+                return Result.error("请选择媒体或季度");
+            }
+            if (mediaId.equals("1")) {
+                return kuaishouOperationReportService.queryToutiaoMonthlyData(time, role, userId, pageNo, pageSize);
+            } else {
+                return kuaishouOperationReportService.queryKuaishouMonthlyData(time, role, userId, pageNo, pageSize);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Result.error("查询失败!");
+    }
+
+    /**
+     * 查询季度消耗
+     * 条件:日期,岗位,人员
+     */
+    @ApiOperation(value = "运营绩效-分页列表查询", notes = "运营绩效-分页列表查询")
+    @GetMapping(value = "/queryQuarterlyData")
+    public Result<Object> queryQuarterlyData(String mediaId, Integer time, String role, String userId, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                             @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        try {
+            if (Check.isNull(mediaId) || Check.isNull(time)) {
+                return Result.error("请选择媒体或季度");
+            }
+            if ("1".equals(mediaId)) {
+                return kuaishouOperationReportService.queryToutiaoQuarterlyCharge(time, role, userId, pageNo, pageSize);
+            } else {
+                return kuaishouOperationReportService.queryKuaishouQuarterlyCharge(time, role, userId, pageNo, pageSize);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Result.error("查询失败!");
+    }
+
+    /**
+     * 添加
+     *
+     * @param kuaishouOperationReport
+     * @return
+     */
+    @ApiOperation(value = "运营绩效-添加", notes = "运营绩效-添加")
+    @PostMapping(value = "/add")
+    public Result<KuaishouOperationReport> add(@RequestBody KuaishouOperationReport kuaishouOperationReport) {
+        Result<KuaishouOperationReport> result = new Result<>();
+        try {
+            kuaishouOperationReportService.save(kuaishouOperationReport);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "运营绩效-通过id删除", notes = "运营绩效-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id") String id) {
+        try {
+            kuaishouOperationReportService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "运营绩效-批量删除", notes = "运营绩效-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<KuaishouOperationReport> deleteBatch(@RequestParam(name = "ids") String ids) {
+        Result<KuaishouOperationReport> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouOperationReportService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "运营绩效-通过id查询", notes = "运营绩效-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<KuaishouOperationReport> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<KuaishouOperationReport> result = new Result<>();
+        KuaishouOperationReport kuaishouOperationReport = kuaishouOperationReportService.getById(id);
+        if (kuaishouOperationReport == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(kuaishouOperationReport);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    @ApiOperation(value = "赔付-添加", notes = "赔付-添加")
+    @PostMapping(value = "/addAccountCompensation")
+    public Result<AccountCompensation> addAccountCompensation(@RequestBody AccountCompensation account) {
+        Result<AccountCompensation> result = new Result<>();
+        try {
+            //运营赔付扣罚比例:运营、运营助理为50%,运营经理、运营总监显示“-”
+            //经理总监赔付比例:经理为30%,总监为20%,运营、运营助理显示“-”
+            String roleCode = roleService.getRoleCodeByUserId(account.getUserId());
+            if ("operationAssistant".equals(roleCode) || "operator".equals(roleCode)) {
+                account.setCompMoney(account.getCompMoney().multiply(new BigDecimal("0.5")));
+            } else if (roleCode.contains("Manager")) {
+                account.setCompMoney(account.getCompMoney().multiply(new BigDecimal("0.3")));
+            }
+            compensationService.save(account);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    @PostMapping(value = "/queryAccountCompensation")
+    public Result<Object> queryAccountCompensation(AccountCompensation accountCompensation,
+                                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        PageHelper.startPage(pageNo, pageSize);
+        List<JSONObject> pageList = compensationService.queryAccountCompensation(accountCompensation);
+        return Result.ok(new PageInfo<>(pageList));
+    }
+
+    @GetMapping(value = "/getAllOperatorList")
+    public Result<Object> getAllOperatorList(String mediaId) {
+        List<String> roleCode = new ArrayList<>();
+        //运营助理
+        roleCode.add("operationAssistant");
+        //运营专员
+        roleCode.add("operator");
+        if ("1".equals(mediaId)) {
+            //快手运营经理
+            roleCode.add("touTiaoOperationManager");
+        } else {
+            //快手运营经理
+            roleCode.add("kuaishouOperationManager");
+        }
+        return Result.OK(compensationService.getAllOperatorList(roleCode, mediaId));
+    }
+
+    @GetMapping(value = "/getAccountUser")
+    public Result<Object> getAccountUser(Long accountId) {
+        if (Check.isNull(accountId)) {
+            return Result.error("请选择账户");
+        }
+        return Result.OK(compensationService.getAccountUser(accountId));
+    }
+
+    /**
+     * 修改运营绩效发放系数
+     */
+    @GetMapping(value = "/updateUserSalary")
+    public Result<Object> updateUserSalaryRatio(String userId, String paySalaryRatio, String paySalary) {
+        try {
+            SysUser user = new SysUser();
+            user.setId(userId);
+            if (Check.isNull(userId)) {
+                Result.error("请选择人员");
+            }
+            if (!Check.isNull(paySalaryRatio)) {
+                user.setPaySalaryRatio(paySalaryRatio);
+            }
+            if (!Check.isNull(paySalary)) {
+                user.setPaySalary(paySalary);
+            }
+            sysUserService.updateById(user);
+            return Result.ok("success");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Result.error("修改失败");
+    }
+
+}

+ 107 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouOperationReport.java

@@ -0,0 +1,107 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * 运营绩效
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2022-09-20
+ */
+@Data
+@TableName("kuaishou_operation_performance_back_charge_base")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "kuaishou_operation_performance_back_charge_base对象", description = "运营绩效")
+public class KuaishouOperationReport {
+
+    /**
+     * 日期
+     */
+    @Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "日期")
+    private Integer statDate;
+    /**
+     * 公司id
+     */
+    @Excel(name = "公司id", width = 15)
+    @ApiModelProperty(value = "公司id")
+    private String companyId;
+    /**
+     * 公司名称
+     */
+    @Excel(name = "公司名称", width = 15)
+    @ApiModelProperty(value = "公司名称")
+    private String companyName;
+    /**
+     * 项目id
+     */
+    @Excel(name = "项目id", width = 15)
+    @ApiModelProperty(value = "项目id")
+    private Integer projectId;
+    /**
+     * 项目名称
+     */
+    @Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+    /**
+     * 运营id
+     */
+    @Excel(name = "运营id", width = 15)
+    @ApiModelProperty(value = "运营id")
+    private String userId;
+    /**
+     * 运营名称
+     */
+    @Excel(name = "运营名称", width = 15)
+    @ApiModelProperty(value = "运营名称")
+    private String userName;
+    /**
+     * 负责人id
+     */
+    @Excel(name = "负责人id", width = 15)
+    @ApiModelProperty(value = "负责人id")
+    private String leaderId;
+    /**
+     * 负责人名称
+     */
+    @Excel(name = "负责人名称", width = 15)
+    @ApiModelProperty(value = "负责人名称")
+    private String leaderName;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Integer accountId;
+    /**
+     * 运营状态
+     */
+    @Excel(name = "运营状态", width = 15)
+    @ApiModelProperty(value = "运营状态")
+    private String userStatus;
+    /**
+     * 框返消耗
+     */
+    @Excel(name = "框返消耗", width = 15)
+    @ApiModelProperty(value = "框返消耗")
+    private java.math.BigDecimal contractRebateRealChargedInYuan;
+    /**
+     * 激励消耗
+     */
+    @Excel(name = "激励消耗", width = 15)
+    @ApiModelProperty(value = "激励消耗")
+    private java.math.BigDecimal directRebateRealChargedInYuan;
+
+    @Excel(name = "消耗", width = 15)
+    @ApiModelProperty(value = "消耗")
+    private java.math.BigDecimal charge;
+}

+ 40 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouOperationReportMapper.java

@@ -0,0 +1,40 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouOperationReport;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 运营绩效
+ *
+ * @author jeecg-boot
+ * 2022-09-20
+ * @version V1.0
+ */
+public interface KuaishouOperationReportMapper extends BaseMapper<KuaishouOperationReport> {
+
+    List<JSONObject> getKsMonthlyOnJobOperatorsCharge(@Param("userIds") List<JSONObject> onJobUserIds,
+                                                      @Param("startDate1") Integer startDate1, @Param("endDate1") Integer endDate1,
+                                                      @Param("startDate2") Integer startDate2, @Param("endDate2") Integer endDate2,
+                                                      @Param("startDate3") Integer startDate3, @Param("endDate3") Integer endDate3);
+
+    List<JSONObject> getTtMonthlyOnJobOperatorsCharge(@Param("userIds") List<JSONObject> onJobUserIds,
+                                                      @Param("startDate1") Integer startDate1, @Param("endDate1") Integer endDate1,
+                                                      @Param("startDate2") Integer startDate2, @Param("endDate2") Integer endDate2,
+                                                      @Param("startDate3") Integer startDate3, @Param("endDate3") Integer endDate3);
+
+    Set<JSONObject> getKsQuarterlyOnJobOperatorsCharge(@Param("userIds") List<String> userIds, @Param("startDate") Integer startDate, @Param("endDate") Integer endDate);
+
+
+    BigDecimal getManageChargeCommission(@Param("userId") String userId, @Param("startDate") Integer startDate, @Param("endDate") Integer endDate);
+
+    Set<JSONObject> getTtQuarterlyOnJobOperatorsCharge(@Param("userIds") List<String> userIds, @Param("startDate") Integer startDate, @Param("endDate") Integer endDate);
+
+    BigDecimal getTtManageChargeCommission(@Param("userId") String userId, @Param("startDate") Integer startDate, @Param("endDate") Integer endDate);
+
+}

+ 267 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouOperationReportMapper.xml

@@ -0,0 +1,267 @@
+<?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="cn.com.ctop.kuaishou.modules.report.mapper.KuaishouOperationReportMapper">
+
+    <select id="getTtMonthlyOnJobOperatorsCharge" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t.id AS 'userId',
+        t.realname AS 'userName',
+        IFNULL(ROUND(t1.totalCharge,3),0.0) as '1totalCharge',
+        IFNULL(ROUND(t3.totalCharge,3),0.0) as '2totalCharge',
+        IFNULL(ROUND(t5.totalCharge,3),0.0) as '3totalCharge'
+        FROM (SELECT id,realname FROM sys_user WHERE id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        ) t
+        LEFT JOIN
+        (
+        SELECT user_id,user_name, SUM(cost) as 'totalCharge'
+        FROM application.bytedance_operation_performance_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate1}
+        AND stat_date &lt;= #{endDate1}
+        GROUP BY user_id
+        ) t1 ON t.id=t1.user_id
+        LEFT JOIN
+        (SELECT user_id, SUM(cost) as 'totalCharge'
+        FROM application.bytedance_operation_performance_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate2}
+        AND stat_date &lt;= #{endDate2}
+        GROUP BY user_id
+        ) t3 ON t.id = t3.user_id
+        LEFT JOIN
+        (SELECT user_id, SUM(cost) as 'totalCharge'
+        FROM application.bytedance_operation_performance_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate3}
+        AND stat_date &lt;= #{endDate3}
+        GROUP BY user_id
+        ) t5 ON t.id = t5.user_id
+    </select>
+
+    <select id="getKsMonthlyOnJobOperatorsCharge" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t.id AS 'userId',
+        t.realname AS 'userName',
+        IFNULL( ROUND(t1.totalCharge,3),0.0) as '1totalCharge',
+        IFNULL( ROUND(t1.totalCharge - t2.JLCharge - t2.KFCharge,3),0.0) as '1FWCharge',
+        IFNULL( ROUND(t2.JLCharge,3),0.0) as '1JLCharge',
+        IFNULL( ROUND(t2.KFCharge,3),0.0) as '1KFCharge',
+
+        IFNULL( ROUND(t3.totalCharge,3),0.0) as '2totalCharge',
+        IFNULL( ROUND(t3.totalCharge - t4.JLCharge - t4.KFCharge,3),0.0) as '2FWCharge',
+        IFNULL( ROUND(t4.JLCharge,3),0.0) as '2JLCharge',
+        IFNULL( ROUND(t4.KFCharge,3),0.0) as '2KFCharge',
+
+        IFNULL( ROUND(t5.totalCharge,3),0.0) as '3totalCharge',
+        IFNULL( ROUND(t5.totalCharge - t6.JLCharge - t6.KFCharge,3),0.0) as '3FWCharge',
+        IFNULL( ROUND(t6.JLCharge,3),0.0) as '3JLCharge',
+        IFNULL( ROUND(t6.KFCharge,3),0.0) as '3KFCharge'
+        FROM (SELECT id,realname FROM sys_user WHERE id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        ) t
+        LEFT JOIN
+        (
+        SELECT user_id,user_name, SUM(charge) as 'totalCharge'
+        FROM application.kuaishou_operation_performance_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate1}
+        AND stat_date &lt;= #{endDate1}
+        GROUP BY user_id
+        ) t1 ON t.id=t1.user_id
+        LEFT JOIN
+        (
+        SELECT user_id,
+        SUM(contract_rebate_real_charged_in_yuan) as 'KFCharge',
+        SUM(direct_rebate_real_charged_in_yuan) as 'JLCharge'
+        FROM application.kuaishou_operation_performance_back_charge_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate1}
+        AND stat_date &lt;= #{endDate1}
+        GROUP BY user_id
+        ) t2 ON t.id = t2.user_id
+        LEFT JOIN
+        (SELECT user_id, SUM(charge) as 'totalCharge'
+        FROM application.kuaishou_operation_performance_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate2}
+        AND stat_date &lt;= #{endDate2}
+        GROUP BY user_id
+        ) t3 ON t.id = t3.user_id
+        LEFT JOIN
+        (
+        SELECT user_id,
+        SUM(contract_rebate_real_charged_in_yuan) as 'KFCharge',
+        SUM(direct_rebate_real_charged_in_yuan) as 'JLCharge'
+        FROM application.kuaishou_operation_performance_back_charge_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate2}
+        AND stat_date &lt;= #{endDate2}
+        GROUP BY user_id
+        ) t4 ON t.id = t4.user_id
+        LEFT JOIN
+        (SELECT user_id, SUM(charge) as 'totalCharge'
+        FROM application.kuaishou_operation_performance_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate3}
+        AND stat_date &lt;= #{endDate3}
+        GROUP BY user_id
+        ) t5 ON t.id = t5.user_id
+        LEFT JOIN
+        (
+        SELECT user_id,
+        SUM(contract_rebate_real_charged_in_yuan) as 'KFCharge',
+        SUM(direct_rebate_real_charged_in_yuan) as 'JLCharge'
+        FROM application.kuaishou_operation_performance_back_charge_base
+        WHERE user_id in
+        <foreach collection="userIds" item="user" separator="," open="(" close=")">
+            #{user.userId}
+        </foreach>
+        AND stat_date >= #{startDate3}
+        AND stat_date &lt;= #{endDate3}
+        GROUP BY user_id
+        ) t6 ON t.id = t6.user_id
+    </select>
+
+
+    <select id="getKsQuarterlyOnJobOperatorsCharge" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t.id AS 'userId',
+        t.realname AS 'userName',
+        IFNULL(ROUND(t1.totalCharge,3),0.0) as 'totalCharge',
+        IFNULL(ROUND(t1.totalCharge - t2.JLCharge - t2.KFCharge,3),0.0) as 'FWCharge',
+        IFNULL(ROUND(t2.JLCharge,3),0.0) as 'JLCharge',
+        IFNULL(ROUND(t2.KFCharge,3),0.0) as 'KFCharge'
+        FROM (SELECT id,realname FROM sys_user WHERE id in
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+        ) t
+        LEFT JOIN
+        (
+        SELECT user_id,user_name, SUM(charge) as 'totalCharge'
+        FROM application.kuaishou_operation_performance_base
+        WHERE user_id in
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+        AND stat_date >= #{startDate}
+        AND stat_date &lt;= #{endDate}
+        GROUP BY user_id
+        ) t1 ON t.id=t1.user_id
+        LEFT JOIN
+        (
+        SELECT user_id,
+        SUM(contract_rebate_real_charged_in_yuan) as 'KFCharge',
+        SUM(direct_rebate_real_charged_in_yuan) as 'JLCharge'
+        FROM application.kuaishou_operation_performance_back_charge_base
+        WHERE user_id in
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+        AND stat_date >= #{startDate}
+        AND stat_date &lt;= #{endDate}
+        GROUP BY user_id
+        ) t2 ON t.id = t2.user_id
+    </select>
+
+    <select id="getTtQuarterlyOnJobOperatorsCharge" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t.id AS 'userId',
+        t.realname AS 'userName',
+        IFNULL(ROUND(t1.totalCharge,3),0.0) as 'totalCharge'
+        FROM (SELECT id,realname FROM sys_user WHERE id in
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+        ) t
+        LEFT JOIN
+        (
+        SELECT user_id,user_name, SUM(cost) as 'totalCharge'
+        FROM application.bytedance_operation_performance_base
+        WHERE user_id in
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+        AND stat_date >= #{startDate}
+        AND stat_date &lt;= #{endDate}
+        GROUP BY user_id
+        ) t1 ON t.id=t1.user_id
+    </select>
+
+    <select id="getManageChargeCommission" resultType="java.math.BigDecimal">
+        SELECT IFNULL(ROUND(t1.totalCharge - t2.JLCharge - t2.KFCharge, 3), 0.0)
+        FROM (
+                 SELECT SUM(charge) AS 'totalCharge'
+                 FROM application.kuaishou_operation_performance_base
+                 WHERE leader_id = #{userId}
+                   AND user_id NOT IN (
+                     SELECT assistant_id
+                     FROM sys_operate_rel
+                     WHERE operate_id = #{userId}
+                       AND stat_month >= DATE_FORMAT(#{startDate}, '%Y-%m')
+                       AND stat_month &lt;= DATE_FORMAT(#{endDate}, '%Y-%m')
+                 )
+                   AND stat_date >= #{startDate}
+                   AND stat_date &lt;= #{endDate}
+             ) t1
+                 LEFT JOIN (
+            SELECT SUM(contract_rebate_real_charged_in_yuan) as 'KFCharge', SUM(direct_rebate_real_charged_in_yuan) as
+        'JLCharge'
+            FROM application.kuaishou_operation_performance_back_charge_base
+            WHERE leader_id = #{userId}
+              AND user_id NOT IN (
+                SELECT assistant_id
+                FROM sys_operate_rel
+                WHERE operate_id = #{userId}
+                  AND stat_month >= DATE_FORMAT(#{startDate}, '%Y-%m')
+                  AND stat_month &lt;= DATE_FORMAT(#{endDate}, '%Y-%m')
+            )
+              AND stat_date >= #{startDate}
+              AND stat_date &lt;= #{endDate}
+        ) t2 ON 1 = 1
+    </select>
+
+    <select id="getTtManageChargeCommission" resultType="java.math.BigDecimal">
+        SELECT IFNULL(ROUND(SUM(cost), 3), 0.0)
+        FROM application.bytedance_operation_performance_base
+        WHERE leader_id = #{userId}
+          AND user_id NOT IN (
+            SELECT assistant_id
+            FROM sys_operate_rel
+            WHERE operate_id = #{userId}
+              AND stat_month >= DATE_FORMAT(#{startDate}, '%Y-%m')
+              AND stat_month &lt;= DATE_FORMAT(#{endDate}, '%Y-%m')
+        )
+          AND stat_date >= #{startDate}
+          AND stat_date &lt;= #{endDate}
+    </select>
+</mapper>

+ 28 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouOperationReportService.java

@@ -0,0 +1,28 @@
+package cn.com.ctop.kuaishou.modules.report.service;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouOperationReport;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+
+/**
+ * 运营绩效
+ *
+ * @author jeecg-boot
+ * 2022-09-20
+ * @version V1.0
+ */
+public interface IKuaishouOperationReportService extends IService<KuaishouOperationReport> {
+
+    Result<Object> queryToutiaoMonthlyData(Integer time, String role, String userId, Integer pageNo, Integer pageSize);
+
+    Result<Object> queryToutiaoQuarterlyCharge(Integer time, String role, String userId, Integer pageNo, Integer pageSize) throws Exception;
+
+
+    /*---------------------------------------------------------------------------------*/
+
+    Result<Object> queryKuaishouMonthlyData(Integer time, String role, String userId, Integer pageNo, Integer pageSize);
+
+    Result<Object> queryKuaishouQuarterlyCharge(Integer time, String role, String userId, Integer pageNo, Integer pageSize) throws Exception;
+
+
+}

Файловите разлики са ограничени, защото са твърде много
+ 1257 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouOperationReportServiceImpl.java


+ 136 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysOperateRelController.java

@@ -0,0 +1,136 @@
+package org.jeecg.modules.system.controller;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.system.entity.SysOperateRel;
+import org.jeecg.modules.system.service.ISysOperateRelService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 助理和运营关系记录表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2022-09-16
+ */
+@Slf4j
+@Api(tags = "助理和运营关系记录表")
+@RestController
+@RequestMapping("/sys/operateRel")
+public class SysOperateRelController {
+    @Autowired
+    private ISysOperateRelService sysOperateRelService;
+
+    /**
+     * 分页列表查询
+     */
+    @GetMapping(value = "/list")
+    public Result<Object> queryPageList(SysOperateRel sysOperateRel,
+                                        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                        HttpServletRequest req) {
+        try {
+            PageHelper.startPage(pageNo, pageSize);
+            return Result.ok(new PageInfo(sysOperateRelService.queryPageList(sysOperateRel)));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Result.error("success");
+    }
+
+    /**
+     * 添加
+     *
+     * @param sysOperateRel
+     * @return
+     */
+    @ApiOperation(value = "助理和运营关系记录表-添加", notes = "助理和运营关系记录表-添加")
+    @PostMapping(value = "/add")
+    public Result<SysOperateRel> add(@RequestBody SysOperateRel sysOperateRel) {
+        Result<SysOperateRel> result = new Result<>();
+        try {
+            sysOperateRelService.add(sysOperateRel);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/delete")
+    public Result<?> delete(String assistantId, String statMonth) {
+        try {
+            Map<String, Object> deleteMap = new HashMap<>();
+            deleteMap.put("assistant_id", assistantId);
+            deleteMap.put("stat_month", statMonth);
+            sysOperateRelService.removeByMap(deleteMap);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "助理和运营关系记录表-批量删除", notes = "助理和运营关系记录表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<SysOperateRel> deleteBatch(@RequestParam(name = "ids") String ids) {
+        Result<SysOperateRel> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.sysOperateRelService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "助理和运营关系记录表-通过id查询", notes = "助理和运营关系记录表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<SysOperateRel> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<SysOperateRel> result = new Result<>();
+        SysOperateRel sysOperateRel = sysOperateRelService.getById(id);
+        if (sysOperateRel == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(sysOperateRel);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+}

+ 7 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java

@@ -38,6 +38,7 @@ import org.jeecg.common.system.entity.SysUser;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.util.JwtUtil;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.common.util.ImportExcelUtil;
 import org.jeecg.common.util.PasswordUtil;
 import org.jeecg.common.util.RedisUtil;
@@ -151,7 +152,12 @@ public class SysUserController {
             String[] arr = ids.split(",");
             for (String id : arr) {
                 if (oConvertUtils.isNotEmpty(id)) {
-                    this.sysUserService.update(new SysUser().setStatus(Integer.parseInt(status)),
+                    SysUser sysUser = new SysUser();
+                    sysUser.setStatus(Integer.parseInt(status));
+                    if("2".equals(status)){
+                        sysUser.setFrozenTime(DateUtils.formatDate(new Date()));
+                    }
+                    this.sysUserService.update(sysUser,
                             new UpdateWrapper<SysUser>().lambda().eq(SysUser::getId, id));
                 }
             }

+ 69 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysOperateRel.java

@@ -0,0 +1,69 @@
+package org.jeecg.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 助理和运营关系记录表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2022-09-16
+ */
+@Data
+@TableName("sys_operate_rel")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "sys_operate_rel对象", description = "助理和运营关系记录表")
+public class SysOperateRel {
+
+    /**
+     * 助理ID
+     */
+    @Excel(name = "助理ID", width = 15)
+    @ApiModelProperty(value = "助理ID")
+    private String assistantId;
+    /**
+     * 运营ID
+     */
+    @Excel(name = "运营ID", width = 15)
+    @ApiModelProperty(value = "运营ID")
+    private String operateId;
+    /**
+     * 月份
+     */
+    @Excel(name = "月份", width = 15)
+    @ApiModelProperty(value = "月份")
+    private String statMonth;
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 28 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysOperateRelMapper.java

@@ -0,0 +1,28 @@
+package org.jeecg.modules.system.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.system.entity.SysOperateRel;
+
+import java.util.List;
+
+/**
+ * 助理和运营关系记录表
+ *
+ * @author jeecg-boot
+ * 2022-09-16
+ * @version V1.0
+ */
+public interface SysOperateRelMapper extends BaseMapper<SysOperateRel> {
+
+    void add(@Param("rel") SysOperateRel sysOperateRel);
+
+    SysOperateRel getOne(@Param("assistantId") String assistantId);
+
+    List<JSONObject> queryPageList(SysOperateRel sysOperateRel);
+
+    List<SysOperateRel> getMore(@Param("userId") String userId, @Param("startDate") Integer startDate, @Param("endDate") Integer endDate);
+
+    List<SysOperateRel> getMoreByOperatorId(@Param("userId") String userId, @Param("startDate") Integer startDate, @Param("endDate") Integer endDate);
+}

+ 54 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysOperateRelMapper.xml

@@ -0,0 +1,54 @@
+<?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="org.jeecg.modules.system.mapper.SysOperateRelMapper">
+
+    <insert id="add">
+        replace
+        into sys_operate_rel(
+        assistant_id,
+        operate_id,
+        stat_month,
+        create_by
+        )
+        values
+            (
+        #{rel.assistantId},
+        #{rel.operateId},
+        #{rel.statMonth},
+        #{rel.createBy}
+        )
+    </insert>
+
+    <select id="getOne" resultType="org.jeecg.modules.system.entity.SysOperateRel">
+        select assistant_id, operate_id, stat_month
+        from sys_operate_rel
+        where assistant_id = #{assistantId}
+        order by create_time desc limit 1
+    </select>
+
+    <select id="getMore" resultType="org.jeecg.modules.system.entity.SysOperateRel">
+        select assistant_id, operate_id, stat_month
+        from sys_operate_rel
+        where assistant_id = #{userId}
+          AND stat_month >= DATE_FORMAT(#{startDate}, '%Y-%m')
+          AND stat_month &lt;= DATE_FORMAT(#{endDate}, '%Y-%m')
+        order by stat_month
+    </select>
+
+    <select id="getMoreByOperatorId" resultType="org.jeecg.modules.system.entity.SysOperateRel">
+        select assistant_id, operate_id, stat_month
+        from sys_operate_rel
+        where operate_id = #{userId}
+          AND stat_month >= DATE_FORMAT(#{startDate}, '%Y-%m')
+          AND stat_month &lt;= DATE_FORMAT(#{endDate}, '%Y-%m')
+        order by stat_month
+    </select>
+
+    <select id="queryPageList" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.assistant_id as 'assistantId', t2.realname as 'assistantName', t1.operate_id as 'operateId', t3.realname as 'operateName', t1.stat_month as 'time', t1.create_by as 'createBy '
+        FROM `sys_operate_rel` t1
+                 LEFT JOIN sys_user t2 ON t1.assistant_id = t2.id
+                 LEFT JOIN sys_user t3 ON t1.operate_id = t3.id
+    </select>
+
+</mapper>

+ 21 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysOperateRelService.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.system.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.entity.SysOperateRel;
+
+import java.util.List;
+
+/**
+ * 助理和运营关系记录表
+ *
+ * @author jeecg-boot
+ * 2022-09-16
+ * @version V1.0
+ */
+public interface ISysOperateRelService extends IService<SysOperateRel> {
+
+    void add(SysOperateRel sysOperateRel);
+
+    List<JSONObject> queryPageList(SysOperateRel sysOperateRel);
+}

+ 31 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysOperateRelServiceImpl.java

@@ -0,0 +1,31 @@
+package org.jeecg.modules.system.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.system.entity.SysOperateRel;
+import org.jeecg.modules.system.mapper.SysOperateRelMapper;
+import org.jeecg.modules.system.service.ISysOperateRelService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 助理和运营关系记录表
+ *
+ * @author jeecg-boot
+ * 2022-09-16
+ * @version V1.0
+ */
+@Service
+public class SysOperateRelServiceImpl extends ServiceImpl<SysOperateRelMapper, SysOperateRel> implements ISysOperateRelService {
+
+    @Override
+    public void add(SysOperateRel sysOperateRel) {
+        baseMapper.add(sysOperateRel);
+    }
+
+    @Override
+    public List<JSONObject> queryPageList(SysOperateRel sysOperateRel) {
+        return baseMapper.queryPageList(sysOperateRel);
+    }
+}