浏览代码

设计绩效修改提成比例

yangzian 2 年之前
父节点
当前提交
dc51a478fc

+ 202 - 29
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -2,6 +2,8 @@ package org.jeecg.common.util;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import io.swagger.models.auth.In;
+import jdk.nashorn.internal.ir.LiteralNode;
 import net.sf.saxon.type.StringConverter;
 import org.hibernate.annotations.Check;
 import org.slf4j.Logger;
@@ -13,6 +15,10 @@ import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.Month;
 import java.util.*;
 
 /**
@@ -1285,9 +1291,14 @@ public class DateUtils extends PropertyEditorSupport {
      * @return
      * @throws ParseException
      */
-    public static String getDay(String format, String date) throws ParseException {
+    public static String getDay(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("%td", parse);
     }
 
@@ -2147,19 +2158,19 @@ public class DateUtils extends PropertyEditorSupport {
 
         //System.out.println(getSubtractTime(new Date(),6));;
 
-        List<String> list = new ArrayList<String>();
-        list.add("2022-09-01");
-        list.add("2022-09-04");
+//        List<String> list = new ArrayList<String>();
+//        list.add("2022-09-01");
+//        list.add("2022-09-04");
 
 
         //System.out.println(getHoursListDifference(list));
         //System.out.println(getCurrentQuarterMonths());
-        System.out.println(isThisQuarter("2022-08-02 12:23:23"));
+//        System.out.println(isThisQuarter("2022-08-02 12:23:23"));
 
 
         //离职时间不为空
-        String frozenTime = "";
-        String createTime = "2022-11-02 12:23:23";
+//        String frozenTime = "";
+//        String createTime = "2022-11-02 12:23:23";
 
 //        //绩效 = 在职月份 * 80w 额度
 //        int cost = 80;
@@ -2199,44 +2210,70 @@ public class DateUtils extends PropertyEditorSupport {
 //        }
 //
 
-        //System.out.println(getQuarterEndDay("2022-01-01"));
+//        System.out.println(getQuarterEndDay("2022-10-05"));
         //System.out.println(getMonth("yyyy-MM-dd","2022-01-01"));
 
 
-        System.out.println(quarterStartEndDate(2022,4));
+//        System.out.println(quarterStartEndDate(2022,4));
+
+
+//        List list = new ArrayList();
+//        Map<String,Object> timeMap = DateUtils.getCurrentQuarterMonths(3);
+//        String[] quarterStr = (String[])timeMap.get("quarter");
+//        for (String month : quarterStr ){
+//            Map<String,Integer> map = new HashMap<>();
+//            map.put("startTime",getFirstDayOfMonth(Integer.valueOf(month)));
+//            map.put("endTime",getLastDayOfMonth(Integer.valueOf(month)));
+//            list.add(map);
+//        }
+//        System.out.println(list);
+
 
+        System.out.println(getMaterialCost(null,"2022-09-01",4));
 
     }
 
+
     /**
-     * 获取当前时间的季度的月份
+     * 获取季度所在的3个月份的 开始和结束时间
+     * @param quarterTime
      * @return
      */
-    public static Map<String,Object> getCurrentQuarterMonths(String dateStr){
+    public static List<Map<String,Integer>> getQuarStartAndEndTime(int quarterTime){
+        List<Map<String,Integer>> list = new ArrayList();
+        Map<String,Object> timeMap = DateUtils.getCurrentQuarterMonths(quarterTime);
+        String[] quarterStr = (String[])timeMap.get("quarter");
+        for (String month : quarterStr ){
+            Map<String,Integer> map = new HashMap<>();
+            map.put("startTime",getFirstDayOfMonth(Integer.valueOf(month)));
+            map.put("endTime",getLastDayOfMonth(Integer.valueOf(month)));
+            list.add(map);
+        }
+        return list;
+    }
+
 
-        Date date = parseDate(dateStr,"yyyy-MM-dd");
+    /**
+     * 获取当前时间的季度的月份
+     * @return
+     */
+    public static Map<String,Object> getCurrentQuarterMonths(int quarterTime){
 
         Map<String,Object> map = new HashMap<>();
         String quarter[] = new String[]{};
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        int yearTime = calendar.get(Calendar.YEAR);
-        int monthTime = calendar.get(Calendar.MONTH)+1;
-        int quarterTime = monthTime % 3 == 0 ? monthTime / 3 : monthTime / 3 + 1;
+
         if (quarterTime == 1){
-             quarter = new String[]{"1","2","3"};
+             quarter = new String[]{"01","02","03"};
         }
         if (quarterTime == 2){
-             quarter = new String[]{"4","5","6"};
+             quarter = new String[]{"04","05","06"};
         }
         if (quarterTime == 3){
-             quarter = new String[]{"7","8","9"};
+             quarter = new String[]{"07","08","09"};
         }
         if (quarterTime == 4){
              quarter = new String[]{"10","11","12"};
         }
-        map.put("yearTime",yearTime);
-        map.put("monthTime",monthTime);
         map.put("quarterTime",quarterTime);
         map.put("quarter",quarter);
         return map;
@@ -2296,18 +2333,154 @@ public class DateUtils extends PropertyEditorSupport {
      * @return
      */
     public static String getQuarterEndDay(String time) {
-        Date date = parseDate(time, "yyyy-MM-dd");
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(date);
-        cal.add(Calendar.MONTH, 3);
-        cal.add(Calendar.DATE, -1);
-        return dateToStringTime(cal.getTime());
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date dEnd = null;
+        try {
+            dEnd = sdf.parse(time);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(dEnd);
+        int remainder = (calendar.get(Calendar.MONTH) + 1) % 3;
+        int month = remainder != 0 ? calendar.get(Calendar.MONTH) + (3 - remainder) : calendar.get(Calendar.MONTH);
+        calendar.set(Calendar.MONTH, month);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+        calendar.setTime(calendar.getTime());
+        return sdf.format(calendar.getTime());
     }
 
 
 
+    /**
+     * 获取当前月第一天
+     * @param month
+     * @return
+     */
+    public static Integer getFirstDayOfMonth(int month) {
+        Calendar calendar = Calendar.getInstance();
+        // 设置月份
+        calendar.set(Calendar.MONTH, month - 1);
+        // 获取某月最小天数
+        int firstDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
+        // 设置日历中月份的最小天数
+        calendar.set(Calendar.DAY_OF_MONTH, firstDay);
+        // 格式化日期
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String firstDayDate = sdf.format(calendar.getTime());
+        return getDateInteger(firstDayDate);
+    }
+
+    /**
+     * 获取当前月最后一天
+     * @param month
+     * @return
+     */
+    public static Integer getLastDayOfMonth(int month) {
+        Calendar calendar = Calendar.getInstance();
+        // 设置月份
+        calendar.set(Calendar.MONTH, month - 1);
+        // 获取某月最大天数
+        int lastDay=0;
+        //2月的平年瑞年天数
+        if(month==2) {
+            // 这个api在计算2020年2月的过程中有问题
+            lastDay = calendar.getLeastMaximum(Calendar.DAY_OF_MONTH);
+        }else {
+            lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        }
+        // 设置日历中月份的最大天数
+        calendar.set(Calendar.DAY_OF_MONTH, lastDay);
+        // 格式化日期
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String lastDayDate = sdf.format(calendar.getTime());
+        return getDateInteger(lastDayDate);
+    }
+
+
+
+
+
 
 
+    public static Double getMaterialCost(String frozenTime, String createTime,int monthTime){
+
+        //String frozenTime = "";
+        //String createTime = "2022-11-02 12:23:23";
+
+        //绩效 = 在职月份 * 80w 额度
+        Double cost = new Double("800000");
+        int i = 3;
+
+        /**
+         * 人员离职
+         */
+        if (frozenTime != null){
+
+            Date  date = DateUtils.str2Date(frozenTime,new SimpleDateFormat("yyyy-MM-dd"));
+            // 判断时间所在的季度
+            int quarterTime = DateUtils.getQuarter(date);
+
+            //季度查询时间 超过 离职时间 则比例为0 绩效 无
+            if (quarterTime < monthTime){
+                i = 0;
+                log.info("离职-----离职时间是:{},查询季度{} 绩效按照0计算。当前时间是:{},",frozenTime,monthTime,new Date());
+
+            }
+
+            if (quarterTime > monthTime){
+                log.info("离职-----离职时间是:{},查询季度{},绩效按照240计算。当前时间是:{},",frozenTime,monthTime,new Date());
+
+            }
+
+            //离职时间 是否是当前季度
+            if (quarterTime == monthTime){
+                Map<String,Object> map = DateUtils.getCurrentQuarterMonths(monthTime);
+                //离职时间所在 月份
+                String month = DateUtils.getMonth("yyyy-MM-dd",frozenTime);
+                //离职时间所在的季度 的全部 月份
+                String[]  quarter =(String[]) map.get("quarter");
+                //判断当前离职所在的月份 与当前季度中的月份集合 并获取下标  下标+1 则是 在职月份i
+                int j = Collections.indexOfSubList(Arrays.asList(quarter),Arrays.asList(month));
+                i = j + 1;
+                log.info("离职-----离职时间是:{}在查询季度{}范围内!系数为{}个月的绩效数据--->{}",frozenTime,monthTime,i,i*cost);
+
+            }
+            //return i * cost;
+
+        }else {
+            Date  date = DateUtils.str2Date(createTime,new SimpleDateFormat("yyyy-MM-dd"));
+            // 判断时间所在的季度
+            int quarterTime = DateUtils.getQuarter(date);
+            //查询入职前的 比例
+            //季度查询时间 超过 入职时间  绩效0
+            if (quarterTime < monthTime){
+                log.info("在职-----入职时间是:{},查询季度{} 绩效按照240计算。当前时间是:{},",createTime,monthTime,new Date());
+            }
+            //查询入职后的 比例
+            if (quarterTime > monthTime){
+                i = 0;
+                log.info("在职-----入职时间是:{},查询季度{},绩效按照0计算。当前时间是:{},",createTime,monthTime,new Date());
+            }
+
+            //入职时间 在当前季度
+            if (quarterTime == monthTime){
+                Map<String,Object> map = DateUtils.getCurrentQuarterMonths(monthTime);
+                //月份
+                //入职时间所在 月份
+                String month = DateUtils.getMonth("yyyy-MM-dd",createTime);
+                //季度
+                String[]  quarter =(String[]) map.get("quarter");
+                //判断当前离职所在的月份 与当前季度中的月份集合 并获取下标  下标+1 则是 在职月份i
+                int j = Collections.indexOfSubList(Arrays.asList(quarter),Arrays.asList(month));
+                i = j + 1;
+                log.info("在职-----入职时间是:{}在查询季度{}内!系数为{}个月的绩效数据--->{}",createTime,monthTime,i,i*cost);
+                return i * cost;
+            };
+        }
+        return i * cost;
+    }
+
 
 
 }

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

@@ -30,32 +30,32 @@ public interface DesignerMapper{
      * @param userId
      * @param roleName  角色名称
      * @param mediaType 1-头条 2-快手
-     * @param yearTime 当前年份
-     * @param monthTime 当前月份
+     * @param startTime 当前年份
+     * @param endTime 当前月份
      * @return
      */
     JSONObject  getHotVideoData(@Param("userId")String userId,
                                      @Param("roleName") String roleName,
                                      @Param("mediaType") Integer mediaType,
-                                     @Param("yearTime") Integer yearTime,
-                                     @Param("monthTime") Integer monthTime);
+                                @Param("startTime") Integer startTime,
+                                @Param("endTime") Integer endTime);
 
 
     /**
      *  设计人员绩效-头条
      * @param userId
-     * @param yearTime
-     * @param monthTime
+     * @param startTime
+     * @param endTime
      * @return
      */
     List<JSONObject>  getDesignerAchievementsBytedance(@Param("userId")String userId,
-                                     @Param("yearTime") Integer yearTime,
-                                     @Param("monthTime") Integer monthTime);
+                                     @Param("startTime") Integer startTime,
+                                     @Param("endTime") Integer endTime);
 
 
      List<JSONObject>  getDesignerAchievementsKuaishou(@Param("userId")String userId,
-                                     @Param("yearTime") Integer yearTime,
-                                     @Param("monthTime") Integer monthTime);
+                                     @Param("startTime") Integer startTime,
+                                     @Param("endTime") Integer endTime);
 
 
 
@@ -65,18 +65,18 @@ public interface DesignerMapper{
      * @param userId
      * @return
      */
-    List<JSONObject>  getDesignerBytedanceAndKuaishouQuaterCost(@Param("userId")String userId,@Param("yearTime") Integer yearTime,
-                                                                @Param("monthTime") Integer monthTime);
+    List<JSONObject>  getDesignerBytedanceAndKuaishouQuaterCost(@Param("userId")String userId,@Param("startTime") Integer startTime,
+                                                                @Param("endTime") Integer endTime);
 
     /**
      * 管理消耗
      * @param userId
-     * @param yearTime
-     * @param monthTime
+     * @param startTime
+     * @param endTime
      * @return
      */
-    JSONObject  getDesignerManagerLeaderCost(@Param("userId")String userId,@Param("yearTime") Integer yearTime,
-                                                                @Param("monthTime") Integer monthTime);
+    List<JSONObject>  getDesignerManagerLeaderCost(@Param("userId")String userId,@Param("startTime") Integer startTime,
+                                             @Param("endTime") Integer endTime);
 
     /**
      * 查询人员离职时间
@@ -90,8 +90,8 @@ public interface DesignerMapper{
      * @param userId
      * @return
      */
-    JSONObject  getUserHotMaterialQuarter(@Param("userId")String userId,@Param("yearTime") Integer yearTime,
-                                          @Param("monthTime") Integer monthTime);
+    JSONObject  getUserHotMaterialQuarter(@Param("userId")String userId,@Param("startTime") Integer startTime,
+                                          @Param("endTime") Integer endTime);
 
     /**
      * 绩效- 用户信息修改

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

@@ -46,8 +46,8 @@
         LEFT JOIN `jeecg-boot`.ctop_material_ascription v ON v.material_id = h.signature
         where
          h.media_id = #{mediaType}
-        AND DATE_FORMAT( h.hot_date, '%Y' ) = #{yearTime}
-        AND DATE_FORMAT( h.hot_date, '%m' ) = #{monthTime}
+        AND h.hot_date &gt;= #{startTime}
+        AND  h.hot_date &lt;= #{endTime}
         <if test="roleName == 'clip'.toString()">
             AND clip_id = #{userId}
         </if>
@@ -83,10 +83,10 @@
             application.bytedance_material_cost_daily d
         WHERE
             clip_id = #{userId}
-          AND DATE_FORMAT( d.stat_date, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.stat_date, '%m' ) = #{monthTime}
-          AND DATE_FORMAT( d.first_cost_day, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.first_cost_day, '%m' ) = #{monthTime}
+          AND d.stat_date &gt;= #{startTime}
+          AND d.stat_date &lt;= #{endTime}
+          AND  d.first_cost_day &gt;= #{startTime}
+          AND  d.first_cost_day &lt;= #{endTime}
         UNION ALL
         SELECT
             QUARTER	( d.first_cost_day ) quaterTime,
@@ -100,10 +100,10 @@
             application.bytedance_material_cost_daily d
         WHERE
             shot_id = #{userId}
-          AND DATE_FORMAT( d.stat_date, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.stat_date, '%m' ) = #{monthTime}
-          AND DATE_FORMAT( d.first_cost_day, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.first_cost_day, '%m' ) = #{monthTime}
+          AND d.stat_date &gt;= #{startTime}
+          AND d.stat_date &lt;= #{endTime}
+          AND  d.first_cost_day &gt;= #{startTime}
+          AND  d.first_cost_day &lt;= #{endTime}
         UNION ALL
         SELECT
             QUARTER	( d.first_cost_day ) quaterTime,
@@ -117,10 +117,10 @@
             application.bytedance_material_cost_daily d
         WHERE
             plan_id = #{userId}
-          AND DATE_FORMAT( d.stat_date, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.stat_date, '%m' ) = #{monthTime}
-          AND DATE_FORMAT( d.first_cost_day, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.first_cost_day, '%m' ) = #{monthTime}
+          AND d.stat_date &gt;= #{startTime}
+          AND d.stat_date &lt;= #{endTime}
+          AND  d.first_cost_day &gt;= #{startTime}
+          AND  d.first_cost_day &lt;= #{endTime}
     </select>
 
 
@@ -138,10 +138,10 @@
             application.kuaishou_material_cost_daily d
         WHERE
             clip_id = #{userId}
-          AND DATE_FORMAT( d.stat_date, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.stat_date, '%m' ) = #{monthTime}
-          AND DATE_FORMAT( d.first_cost_day, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.first_cost_day, '%m' ) = #{monthTime}
+          AND d.stat_date &gt;= #{startTime}
+          AND d.stat_date &lt;= #{endTime}
+          AND  d.first_cost_day &gt;= #{startTime}
+          AND  d.first_cost_day &lt;= #{endTime}
         UNION ALL
         SELECT
             QUARTER	( d.first_cost_day ) quaterTime,
@@ -155,10 +155,10 @@
             application.kuaishou_material_cost_daily d
         WHERE
             shot_id = #{userId}
-          AND DATE_FORMAT( d.stat_date, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.stat_date, '%m' ) = #{monthTime}
-          AND DATE_FORMAT( d.first_cost_day, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.first_cost_day, '%m' ) = #{monthTime}
+          AND d.stat_date &gt;= #{startTime}
+          AND d.stat_date &lt;= #{endTime}
+          AND  d.first_cost_day &gt;= #{startTime}
+          AND  d.first_cost_day &lt;= #{endTime}
         UNION ALL
         SELECT
             QUARTER( d.first_cost_day ) quaterTime,
@@ -172,10 +172,10 @@
             application.kuaishou_material_cost_daily d
         WHERE
             plan_id = #{userId}
-          AND DATE_FORMAT( d.stat_date, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.stat_date, '%m' ) = #{monthTime}
-          AND DATE_FORMAT( d.first_cost_day, '%Y' ) = #{yearTime}
-          AND DATE_FORMAT( d.first_cost_day, '%m' ) = #{monthTime}
+          AND d.stat_date &gt;= #{startTime}
+          AND d.stat_date &lt;= #{endTime}
+          AND  d.first_cost_day &gt;= #{startTime}
+          AND  d.first_cost_day &lt;= #{endTime}
     </select>
 
     <!-- 查询设计 本季度 头条和快手季度消耗汇总-->
@@ -192,10 +192,10 @@
             d.clip_id = #{userId} OR d.shot_id = #{userId} OR d.plan_id = #{userId}
             )
 
-          AND DATE_FORMAT( stat_date, '%Y' ) = #{yearTime}
-          AND QUARTER( stat_date ) = #{monthTime}
-          AND DATE_FORMAT( d.first_cost_day, '%Y' ) = #{yearTime}
-          AND QUARTER( d.first_cost_day) = #{monthTime}
+          AND stat_date &gt;= #{startTime}
+          AND  stat_date &lt;= #{endTime}
+          AND  d.first_cost_day &gt;= #{startTime}
+          AND  d.first_cost_day &lt;= #{endTime}
         UNION ALL
         SELECT
             QUARTER( d.first_cost_day ) quaterTime,
@@ -209,33 +209,33 @@
             (
             d.clip_id = #{userId} OR d.shot_id = #{userId} OR d.plan_id = #{userId}
             )
-          AND DATE_FORMAT( stat_date, '%Y' ) = #{yearTime}
-          AND QUARTER( stat_date ) = #{monthTime}
-          AND DATE_FORMAT( d.first_cost_day, '%Y' ) = #{yearTime}
-          AND QUARTER( d.first_cost_day) = #{monthTime}
+          AND stat_date &gt;= #{startTime}
+          AND  stat_date &lt;= #{endTime}
+          AND  d.first_cost_day &gt;= #{startTime}
+          AND  d.first_cost_day &lt;= #{endTime}
     </select>
 
    <!-- 管理消耗-->
     <select id="getDesignerManagerLeaderCost" resultType="com.alibaba.fastjson.JSONObject">
-        SELECT IFNULL(SUM(cost),0) as cost FROM
+        SELECT * FROM
             (
-                SELECT SUM(cost) cost,leader_id FROM
+                SELECT IFNULL(SUM(cost),0) cost,leader_id,'bytedance' as type ,1 as sort FROM
                     application.bytedance_material_cost_daily
                 WHERE leader_id = #{userId}
-                  AND DATE_FORMAT( stat_date, '%Y' ) = #{yearTime}
-                  and QUARTER( stat_date ) = #{monthTime}
-                  AND DATE_FORMAT( first_cost_day, '%Y' ) = #{yearTime}
-                  AND QUARTER( first_cost_day ) = #{monthTime}
-
+                  AND  stat_date &gt;= #{startTime}
+                  AND stat_date &lt;= #{endTime}
+                  AND first_cost_day &gt;= #{startTime}
+                  AND first_cost_day &lt;= #{endTime}
                 UNION
-                SELECT SUM(charge) cost,leader_id FROM
+                SELECT IFNULL(SUM(charge),0) cost,leader_id,'kuaishou' as type,2 as sort FROM
                     application.kuaishou_material_cost_daily
                 WHERE leader_id = #{userId}
-                  AND DATE_FORMAT( stat_date, '%Y' ) = #{yearTime}
-                  and QUARTER( stat_date ) = #{monthTime}
-                  AND DATE_FORMAT( first_cost_day, '%Y' ) = #{yearTime}
-                  AND QUARTER( first_cost_day ) = #{monthTime}
+                  AND  stat_date &gt;= #{startTime}
+                  AND stat_date &lt;= #{endTime}
+                  AND first_cost_day &gt;= #{startTime}
+                  AND first_cost_day &lt;= #{endTime}
             )  t
+        ORDER BY t.sort
     </select>
 
 
@@ -271,8 +271,8 @@
                     or v.shot_id =#{userId}
                     or v.leader_id = #{userId}
                     )
-          AND DATE_FORMAT( h.hot_date, '%Y' ) = #{yearTime}
-          AND QUARTER( h.hot_date) = #{monthTime}
+          AND  h.hot_date &gt;= #{startTime}
+          AND  h.hot_date &lt;= #{endTime}
 
     </select>
 

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

@@ -90,24 +90,24 @@ public class DesignerServiceImpl implements IDesignerService {
             roleName = "all";
         }
 
-        //获取季度的开始和截止时间
-        Map<String,String> map = DateUtils.quarterStartEndDate(Integer.valueOf(yearTime),Integer.valueOf(monthTime));
-        //取时间的季度的月份
-        Map<String,Object> timeMap = DateUtils.getCurrentQuarterMonths(map.get("endDate"));
-        String[] quarterStr = (String[])timeMap.get("quarter");
+
+        //取当前时间的季度的月份
+        List<Map<String,Integer>> timeMap = DateUtils.getQuarStartAndEndTime(Integer.valueOf(monthTime));
+
+
         List<Map<String,Object>> resultList = new ArrayList<>();
         List<Map<String,Object>> byteDanceList = new ArrayList<>();
         Map<String,Object> bytedanceMap = new HashMap<>();
         List<Map<String,Object>> kuaishouList = new ArrayList<>();
         Map<String,Object> kuaishouMap = new HashMap<>();
-        for (String month : quarterStr ){
+        for (Map<String,Integer> month : timeMap ){
             //头条
-            JSONObject bytedanceJson = designerMapper.getHotVideoData(userId,roleName,1,Integer.valueOf(yearTime),Integer.valueOf(month));
+            JSONObject bytedanceJson = designerMapper.getHotVideoData(userId,roleName,1,month.get("startTime"),month.get("endTime"));
             bytedanceJson.put("monthTime",month);
             byteDanceList.add(bytedanceJson);
             bytedanceMap.put("byteDance",byteDanceList);
             //快手
-            JSONObject kuaishouJson = designerMapper.getHotVideoData(userId,roleName,2,Integer.valueOf(yearTime),Integer.valueOf(month));
+            JSONObject kuaishouJson = designerMapper.getHotVideoData(userId,roleName,2,month.get("startTime"),month.get("endTime"));
             kuaishouJson.put("monthTime",month);
             kuaishouList.add(kuaishouJson);
             kuaishouMap.put("kuaishou",kuaishouList);
@@ -120,28 +120,27 @@ public class DesignerServiceImpl implements IDesignerService {
 
    @Override
     public Map<String,Object> getDesignerAchievements(String userId,String yearTime,String monthTime) {
-       //获取季度的开始和截止时间
-       Map<String,String> map = DateUtils.quarterStartEndDate(Integer.valueOf(yearTime),Integer.valueOf(monthTime));
+
        //取当前时间的季度的月份
-       Map<String,Object> timeMap = DateUtils.getCurrentQuarterMonths(map.get("endDate"));
-        String[] quarterStr = (String[])timeMap.get("quarter");
+       List<Map<String,Integer>> timeMap = DateUtils.getQuarStartAndEndTime(Integer.valueOf(monthTime));
+
        Map<String,Object> resultMap = new HashMap<>();
        List<Map<String,Object>> byteDanceList = new ArrayList<>();
        List<Map<String,Object>> kuaishouList = new ArrayList<>();
 
-        for (String month : quarterStr ){
+        for (Map<String,Integer> month : timeMap ){
             Map<String,Object> bytedanceMap = new HashMap<>();
             Map<String,Object> kuaishouMap = new HashMap<>();
             //头条
-            List<JSONObject> bytedanceJson = designerMapper.getDesignerAchievementsBytedance(userId,Integer.valueOf(yearTime),Integer.valueOf(month));
+            List<JSONObject> bytedanceJson = designerMapper.getDesignerAchievementsBytedance(userId,month.get("startTime"),month.get("endTime"));
             bytedanceMap.put("monthTime",month );
-            bytedanceMap.put("yearTime",timeMap.get("yearTime")+"" );
+            bytedanceMap.put("yearTime",yearTime);
             bytedanceMap.put("byteDance",bytedanceJson);
             byteDanceList.add(bytedanceMap);
             //快手
-            List<JSONObject> kuaishouJson = designerMapper.getDesignerAchievementsKuaishou(userId,Integer.valueOf(yearTime),Integer.valueOf(month));
+            List<JSONObject> kuaishouJson = designerMapper.getDesignerAchievementsKuaishou(userId,month.get("startTime"),month.get("endTime"));
             kuaishouMap.put("monthTime",month );
-            bytedanceMap.put("yearTime",timeMap.get("yearTime")+"" );
+            bytedanceMap.put("yearTime",yearTime);
             kuaishouMap.put("kuaiShou",kuaishouJson);
             kuaishouList.add(kuaishouMap);
         }
@@ -160,9 +159,9 @@ public class DesignerServiceImpl implements IDesignerService {
      * createTime 员工入职时间
      * @return
      */
-    public Double getMaterialCost(String frozenTime, String createTime){
+    public Double getMaterialCost(String frozenTime, String createTime,int monthTime){
 
-        //String frozenTime = "";
+//String frozenTime = "";
         //String createTime = "2022-11-02 12:23:23";
 
         //绩效 = 在职月份 * 80w 额度
@@ -172,36 +171,68 @@ public class DesignerServiceImpl implements IDesignerService {
         /**
          * 人员离职
          */
-        if (!Check.isNull(frozenTime)){
-            //离职时间 是否在当前季度
-            if (DateUtils.isThisQuarter(frozenTime)){
-                Map<String,Object> map = DateUtils.getCurrentQuarterMonths(frozenTime);
-                //月份
-                String monthTime = map.get("monthTime")+"" ;
-                //季度
+        if (frozenTime != null){
+
+            Date  date = DateUtils.str2Date(frozenTime,new SimpleDateFormat("yyyy-MM-dd"));
+            // 判断时间所在的季度
+            int quarterTime = DateUtils.getQuarter(date);
+
+            //季度查询时间 超过 离职时间 则比例为0 绩效 无
+            if (quarterTime < monthTime){
+                i = 0;
+                log.info("离职-----离职时间是:{},查询季度{} 绩效按照0计算。当前时间是:{},",frozenTime,monthTime,new Date());
+
+            }
+
+            if (quarterTime > monthTime){
+                log.info("离职-----离职时间是:{},查询季度{},绩效按照240计算。当前时间是:{},",frozenTime,monthTime,new Date());
+
+            }
+
+            //离职时间 是否是当前季度
+            if (quarterTime == monthTime){
+                Map<String,Object> map = DateUtils.getCurrentQuarterMonths(monthTime);
+                //离职时间所在 月份
+                String month = DateUtils.getMonth("yyyy-MM-dd",frozenTime);
+                //离职时间所在的季度 的全部 月份
                 String[]  quarter =(String[]) map.get("quarter");
                 //判断当前离职所在的月份 与当前季度中的月份集合 并获取下标  下标+1 则是 在职月份i
-                int j = Collections.indexOfSubList(Arrays.asList(quarter),Arrays.asList(monthTime));
+                int j = Collections.indexOfSubList(Arrays.asList(quarter),Arrays.asList(month));
                 i = j + 1;
-                log.info("离职-----离职时间是:{}在本季度范围内!系数为{}个月的绩效数据--->{}",frozenTime,i,i*cost);
-                return i * cost;
-            };
-            log.info("离职-----离职时间是:{}不在本季度范围内!绩效按照240计算。当前时间是:{},",frozenTime,new Date());
+                log.info("离职-----离职时间是:{}在查询季度{}范围内!系数为{}个月的绩效数据--->{}",frozenTime,monthTime,i,i*cost);
+
+            }
+            //return i * cost;
+
         }else {
-            //入职时间 是否在当前季度
-            if (DateUtils.isThisQuarter(createTime)){
-                Map<String,Object> map = DateUtils.getCurrentQuarterMonths(createTime);
+            Date  date = DateUtils.str2Date(createTime,new SimpleDateFormat("yyyy-MM-dd"));
+            // 判断时间所在的季度
+            int quarterTime = DateUtils.getQuarter(date);
+            //查询入职前的 比例
+            //季度查询时间 超过 入职时间  绩效0
+            if (quarterTime < monthTime){
+                log.info("在职-----入职时间是:{},查询季度{} 绩效按照240计算。当前时间是:{},",createTime,monthTime,new Date());
+            }
+            //查询入职后的 比例
+            if (quarterTime > monthTime){
+                i = 0;
+                log.info("在职-----入职时间是:{},查询季度{},绩效按照0计算。当前时间是:{},",createTime,monthTime,new Date());
+            }
+
+            //入职时间 在当前季度
+            if (quarterTime == monthTime){
+                Map<String,Object> map = DateUtils.getCurrentQuarterMonths(monthTime);
                 //月份
-                String monthTime = map.get("monthTime")+"" ;
+                //入职时间所在 月份
+                String month = DateUtils.getMonth("yyyy-MM-dd",createTime);
                 //季度
                 String[]  quarter =(String[]) map.get("quarter");
                 //判断当前离职所在的月份 与当前季度中的月份集合 并获取下标  下标+1 则是 在职月份i
-                int j = Collections.indexOfSubList(Arrays.asList(quarter),Arrays.asList(monthTime));
-                i = 3 - j;
-                log.info("在职-----入职时间是:{}在本季度范围内!系数为{}个月的绩效数据--->{}",createTime,i,i*cost);
+                int j = Collections.indexOfSubList(Arrays.asList(quarter),Arrays.asList(month));
+                i = j + 1;
+                log.info("在职-----入职时间是:{}在查询季度{}内!系数为{}个月的绩效数据--->{}",createTime,monthTime,i,i*cost);
                 return i * cost;
             };
-            log.info("在职-----入职时间是:{}不在本季度范围内!绩效按照240计算。当前时间是:{},",createTime,new Date());
         }
         return i * cost;
     }
@@ -212,26 +243,39 @@ public class DesignerServiceImpl implements IDesignerService {
      * frozenTime 离职时间
      * @return
      */
-    public Double userHappyProbability(String frozenTime){
+    public Double userHappyProbability(String frozenTime,int monthTime){
 
         //离职发放比例
         Double userHappyProbability = new Double("1");
         if (!Check.isNull(frozenTime)){
-            //离职时间所在季度的最后一天
-            String endDay = DateUtils.getQuarterEndDay(frozenTime);
-            //离职月份
+            //根据时间获取季度
+            //离职时间所在的季度 是否和 查询季度相同 相同则判断 不同 则比例为1
+
+            //当前季度的 月份
+            Map<String,Object> map = DateUtils.getCurrentQuarterMonths(monthTime);
+            //季度
+            String[]  quarter =(String[]) map.get("quarter");
             String month = DateUtils.getMonth("yyyy-MM-dd",frozenTime);
+            if (Arrays.binarySearch(quarter,month) < 0){
+                return userHappyProbability;
+            }
+
+
+            //离职  获取 天
+            String day = DateUtils.getDay("yyyy-MM-dd",frozenTime);
 
             //15日之前离职 不发
-            if (Integer.valueOf(month) < 15){
+            if (Integer.valueOf(day) < 15){
                 userHappyProbability = new Double("0");
             }
 
             // 15号之后离职,发50%
-            if (Integer.valueOf(month) >= 15){
+            if (Integer.valueOf(day) >= 15){
                 userHappyProbability = new Double("0.5");
             }
 
+            //离职时间所在季度的最后一天
+            String endDay = DateUtils.getQuarterEndDay(frozenTime);
             //最后一天离职 发放比例为1
             // 离职时间 > = 最后一天
             if (DateUtils.str2Date(frozenTime,new SimpleDateFormat("yyyy-MM-dd")).getTime() >=
@@ -253,16 +297,14 @@ public class DesignerServiceImpl implements IDesignerService {
 
    @Override
     public JSONObject getDesignerCommission(String userId,String yearTime,String monthTime) {
-       //获取季度的开始和截止时间
-       Map<String,String> map = DateUtils.quarterStartEndDate(Integer.valueOf(yearTime),Integer.valueOf(monthTime));
+
        //取当前时间的季度的月份
-       Map<String,Object> timeMap = DateUtils.getCurrentQuarterMonths(map.get("endDate"));
-        String[] quarterStr = (String[])timeMap.get("quarter");
+       List<Map<String,Integer>> timeMap = DateUtils.getQuarStartAndEndTime(Integer.valueOf(monthTime));
        //人员离职信息
        JSONObject userFrozen = designerMapper.getUserFrozenInfo(userId);
 
        //季度 分媒体 素材消耗
-       List<JSONObject> quarterCost = designerMapper.getDesignerBytedanceAndKuaishouQuaterCost(userId,Integer.valueOf(yearTime),Integer.valueOf(monthTime));
+       List<JSONObject> quarterCost = designerMapper.getDesignerBytedanceAndKuaishouQuaterCost(userId,timeMap.get(0).get("startTime"),timeMap.get(2).get("endTime"));
        userFrozen.put("quarterCostList",quarterCost);
 
        //季度素材 总消耗
@@ -270,8 +312,8 @@ public class DesignerServiceImpl implements IDesignerService {
        userFrozen.put("tatolQuarterCost",tatolCost);
 
        //管理消耗
-       JSONObject leaderCost = designerMapper.getDesignerManagerLeaderCost(userId,Integer.valueOf(yearTime),Integer.valueOf(monthTime));
-       userFrozen.put("leaderCost",leaderCost.getString("cost"));
+       List<JSONObject> leaderCost = designerMapper.getDesignerManagerLeaderCost(userId,timeMap.get(0).get("startTime"),timeMap.get(2).get("endTime"));
+       userFrozen.put("leaderCost",leaderCost.get(0).getString("cost")+leaderCost.get(1).getString("cost"));
 
        //离职时间
        String frozenTime = userFrozen.getString("frozenTime");
@@ -279,12 +321,12 @@ public class DesignerServiceImpl implements IDesignerService {
        String createTime = userFrozen.getString("createTime");
 
        //判断素材消耗是否达标
-       Double i = getMaterialCost(frozenTime,createTime);
+       Double i = getMaterialCost(frozenTime,createTime,Integer.valueOf(monthTime));
        String materialCostQualifiedFlag = tatolCost >= i ? "是" : "否";
        userFrozen.put("materialCostQualifiedFlag",materialCostQualifiedFlag);
 
        //爆款素材数量
-       JSONObject hotVideoNum = designerMapper.getUserHotMaterialQuarter(userId,Integer.valueOf(yearTime),Integer.valueOf(monthTime));
+       JSONObject hotVideoNum = designerMapper.getUserHotMaterialQuarter(userId,timeMap.get(0).get("startTime"),timeMap.get(2).get("endTime"));
        int hotVideoN = Check.isNull(hotVideoNum) ? 0 : hotVideoNum.getInteger("hotVideoNum");
        userFrozen.put("hotVideoNum",hotVideoN);
 
@@ -317,18 +359,18 @@ public class DesignerServiceImpl implements IDesignerService {
 
        //提成 分月份
        List<JSONObject> commissionList = new ArrayList<>();
-       for (String month : quarterStr ) {
+       for (Map<String,Integer> month : timeMap ) {
            JSONObject commissionJson = new JSONObject();
            //头条提成
-           List<JSONObject> bytedanceJson = designerMapper.getDesignerAchievementsBytedance(userId, Integer.valueOf(timeMap.get("yearTime") + ""), Integer.valueOf(month));
+           List<JSONObject> bytedanceJson = designerMapper.getDesignerAchievementsBytedance(userId, month.get("startTime"),month.get("endTime"));
            Double bytedanceCommission = bytedanceJson.stream().mapToDouble(json -> json.getDouble("commission")).reduce(Double::sum).orElse(new Double("0"));
 
            //快手提成
-           List<JSONObject> kuaishouJson = designerMapper.getDesignerAchievementsKuaishou(userId, Integer.valueOf(timeMap.get("yearTime") + ""), Integer.valueOf(month));
+           List<JSONObject> kuaishouJson = designerMapper.getDesignerAchievementsKuaishou(userId, month.get("startTime"),month.get("endTime"));
            Double kuaishouCommission = kuaishouJson.stream().mapToDouble(json -> json.getDouble("commission")).reduce(Double::sum).orElse(new Double("0"));
 
            commissionJson.put("monthTime", month);
-           commissionJson.put("yearTime", timeMap.get("yearTime") + "");
+           commissionJson.put("yearTime", yearTime);
            commissionJson.put("commission", bytedanceCommission+kuaishouCommission);
            commissionList.add(commissionJson);
        }
@@ -343,12 +385,12 @@ public class DesignerServiceImpl implements IDesignerService {
        Double designerLeaderCommission = new Double("0");
        String roleCode = roleService.getRoleCodeByUserId(userId);
        if (roleCode.equalsIgnoreCase("designTeamLeader")){
-
-           designerLeaderCommission = new Double(leaderCost.getString("cost")) * 0.003 * 0.2;
+           Double designerLeaderCommissionBytedance = new Double(leaderCost.get(0).getString("cost")) * 0.002 * 0.2;
+           Double designerLeaderCommissionKuaishou = new Double(leaderCost.get(1).getString("cost")) * 0.003 * 0.2;
+           designerLeaderCommission = designerLeaderCommissionBytedance + designerLeaderCommissionKuaishou;
        }
        userFrozen.put("designerLeaderCommission",designerLeaderCommission);
 
-
        //提成汇总 = 季度汇总 + 负责人提成
        totalCommission+=designerLeaderCommission;
        userFrozen.put("totalCommission",totalCommission);
@@ -356,7 +398,9 @@ public class DesignerServiceImpl implements IDesignerService {
 
 
        //离职发放比例
-       Double userHappyProbability = userHappyProbability(frozenTime);
+       Double userHappyProbability = userHappyProbability(frozenTime,Integer.valueOf(monthTime));
+       userFrozen.put("userHappyProbability",userHappyProbability);
+
 
        //提成发放金额 = 总提成* 发放系数 * 离职发放比例
        Double userHappyGetMoney = totalCommission * coefficient * userHappyProbability;