shenhao 4 tahun lalu
induk
melakukan
f242bf5f37

+ 116 - 3
src/main/java/com/ssj/api/controller/ApiManagerTeacherController.java

@@ -1,5 +1,9 @@
 package com.ssj.api.controller;
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
+import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
 import com.alibaba.fastjson.JSONObject;
 import com.ssj.api.domain.vo.statistics.HomeworkReq;
 import com.ssj.api.domain.vo.statistics.ListReq;
@@ -14,17 +18,26 @@ import com.ssj.framework.core.util.Constant;
 import com.ssj.framework.core.util.PasswordUtil;
 import com.ssj.framework.core.util.ResponseConstant;
 import com.ssj.framework.core.util.ResponseEntity;
+import com.ssj.framework.weixin.util.DateUtil;
 import com.ssj.service.sys.homework.service.HomeworkPictureService;
 import com.ssj.service.sys.imlibuser.service.TbClassTeacherTempService;
 import com.ssj.service.weixin.library.service.IBookManagerService;
 import com.ssj.service.weixin.user.service.UserService;
 import com.ssj.statistics.service.IStatisticsService;
+import com.ssj.statistics.service.ITeacherPayService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 @Api(value = "平台批改老师相关", tags = "平台批改老师相关")
@@ -44,6 +57,9 @@ public class ApiManagerTeacherController extends BaseController {
     @Autowired
     private IStatisticsService statisticsService;
 
+    @Autowired
+    private ITeacherPayService teacherPayService;
+
 
 	@RequestMapping(value = "/list", method = RequestMethod.POST)
     @ApiOperation(value = "获取平台批改老师列表接口",  notes = "获取平台批改老师列表接口")
@@ -252,13 +268,110 @@ public class ApiManagerTeacherController extends BaseController {
     @ApiOperation(value = "作业批改痕迹",  notes = "作业批改痕迹")
     public ResponseEntity pictureDetail(@RequestParam(name = "accessToken") String accessToken,@RequestBody HomeworkReq req) {
         ResponseEntity responseEntity = new ResponseEntity();
-        Map<String,Object> params=new HashMap<>(4);
         try {
-
+            Map<String,Object> data=new HashMap<>(2);
+            data.put("list",null);
         } catch (Exception e) {
-            logger.error("数据统计列表异常", e);
+            logger.error("作业批改痕迹异常", e);
+            responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
+        }
+        return responseEntity;
+    }
+    @RequestMapping(value = "/salaryList", method = RequestMethod.POST)
+    @ApiOperation(value = "薪酬列表",  notes = "薪酬列表")
+    public ResponseEntity salaryList(@RequestParam(name = "accessToken") String accessToken,@RequestBody TeacherDelReq req) {
+        ResponseEntity responseEntity = new ResponseEntity();
+        try {
+            Map<String,Object> data=new HashMap<>(2);
+            TbLibManager manager = managerService.getById(req.getId());
+            if(Objects.isNull(manager)){
+                return responseEntity.failure(ResponseConstant.CODE_000, "请检查传参id是否正确!");
+            }
+            List<Map<String,Object>> list = getSalaryList(manager.getUserId());
+            data.put("list",list);
+        } catch (Exception e) {
+            logger.error("薪酬列表异常", e);
             responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
         }
         return responseEntity;
     }
+    @RequestMapping(value = "/exportSalaryList", method = RequestMethod.POST)
+    @ApiOperation(value = "导出薪酬列表",  notes = "导出薪酬列表")
+    @ResponseBody
+    public void exportSalaryList(@RequestParam(name = "accessToken") String accessToken,@RequestBody TeacherDelReq req) {
+        ServletOutputStream os = null;
+        try {
+            String libName="老师薪酬统计";
+            //获得输出流
+            os = response.getOutputStream();
+            //清空输出流
+            response.reset();
+            TbLibManager manager = managerService.getById(req.getId());
+            List<Map<String,Object>> list = getSalaryList(manager.getUserId());
+            /**
+             * workDate	string	list	日期
+             * correctNums	int	list	批注总张数
+             * overtimeNums	int	list	超时批注总张数
+             * perkNums	int	list	高峰时段批注张数
+             * perkEfficiency	String	list	高峰时段平均批注时间
+             * errorNums	int	list	报错张数
+             * accuracy	string	list	正确率
+             * perkSalary	String	list	高峰时段薪资
+             * otherSalary	String	list	其他时段薪资
+             * salary	String	list	总薪资
+             */
+            StringBuilder head =  new StringBuilder();
+            head.append("日期|workDate;批注总张数(张)|correctNums;超时批注总张数(张)|overtimeNums;高峰时段(18:00-20:00)批注张数(张)|perkNums;");
+            head.append("高峰时段(18:00-20:00)平均批注时间(min/张)|perkEfficiency;报错张数(张)|errorNums;正确率|accuracy;");
+            head.append("高峰时段薪资(元)|perkSalary;其他时段薪资(元)|otherSalary;总薪资(元)|salary;");
+            List<ExcelExportEntity> entity = addEntity(head.toString());
+            //把我们构造好的bean对象放到params就可以了
+            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(libName, libName, ExcelType.XSSF), entity,
+                    list);
+            workbook.write(os);
+        }catch (IOException e) {
+            logger.error("异常", e);
+        } catch (Exception e) {
+            logger.error("作业批改痕迹异常", e);
+        }finally {
+            if(os != null){
+                try {
+                    os.flush();
+                    os.close();
+                } catch (IOException e) {
+                    logger.error("异常", e);
+                }
+            }
+         }
+    }
+
+    private List<Map<String,Object>> getSalaryList(String userId){
+        //计算今天日期
+        LocalDate date = LocalDate.now();
+        int day = date.getDayOfMonth();
+        LocalTime time = LocalTime.now();
+        boolean lastMonth = day< 4 || (day==4 && time.getHour()<12);
+        LocalDate localDate = lastMonth?date.minusMonths(2):date.minusMonths(1);
+        int month = localDate.getMonthValue();
+        int year = localDate.getYear();
+        return teacherPayService.salaryList(userId,month,year);
+    }
+
+    private List<ExcelExportEntity> addEntity(String exportHead){
+        List<ExcelExportEntity> entity = new ArrayList<>();
+        String[] headArr = exportHead.split(";");
+        for (String str:headArr){
+            int index = str.indexOf("|");
+            entity.add(new ExcelExportEntity(str.substring(0,index), str.substring(index+1)));
+        }
+        return  entity;
+    }
+
+    private void exportExcelHead(HttpServletResponse response, String fileName) throws Exception{
+        String lastFileName = new String(fileName.getBytes("gb2312"), "ISO8859-1") +".xlsx";
+        //设定输出文件头
+        response.setHeader("Content-disposition", "attachment; filename="+ lastFileName);
+        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+        response.setCharacterEncoding("utf-8");
+    }
 }

+ 2 - 13
src/main/java/com/ssj/bean/statistics/PlatTeacherStatistics.java

@@ -2,6 +2,7 @@ package com.ssj.bean.statistics;
 
 import com.ssj.bean.common.framework.core.domain.BaseEntity;
 
+import javax.persistence.Entity;
 import javax.persistence.Table;
 
 /**
@@ -11,11 +12,9 @@ import javax.persistence.Table;
  * @date 2021/2/27
  */
 @Table(name="plat_teacher_statistics")
+@Entity
 public class PlatTeacherStatistics extends BaseEntity {
     private String teacherId;
-    //private String teacherName;
-    private String subject;
-    //private String allSubject;
     private String accuracy;
     private Integer  correctNums;
     private Integer  overtimeNums;
@@ -33,16 +32,6 @@ public class PlatTeacherStatistics extends BaseEntity {
         this.teacherId = teacherId;
     }
 
-
-    public String getSubject() {
-        return subject;
-    }
-
-    public void setSubject(String subject) {
-        this.subject = subject;
-    }
-
-
     public String getAccuracy() {
         return accuracy;
     }

+ 1 - 1
src/main/java/com/ssj/statistics/dao/IStatisticsDao.java

@@ -7,7 +7,7 @@ import org.springframework.stereotype.Repository;
 /**
  * @author sh
  * @className IStatisticsDao
- * @description TODO
+ * @description
  * @date 2021/2/27
  */
 @Repository

+ 2 - 0
src/main/java/com/ssj/statistics/dao/IStatisticsQueryDao.java

@@ -22,4 +22,6 @@ public interface IStatisticsQueryDao {
     Map<String, Object> findTotalData(Map<String, Object> params);
 
     List<Map<String, Object>> checkDetailList(String homeworkId);
+
+    List<Map<String, Object>> salaryList(String userId, int month, int year);
 }

+ 15 - 0
src/main/java/com/ssj/statistics/dao/ITeacherPayDao.java

@@ -0,0 +1,15 @@
+package com.ssj.statistics.dao;
+
+import com.ssj.statistics.entity.TeacherPay;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author sh
+ * @className ITeacherPayDao
+ * @description Repository
+ * @date 2021/3/2
+ */
+@Repository
+public interface ITeacherPayDao extends JpaRepository<TeacherPay,String> {
+}

+ 95 - 4
src/main/java/com/ssj/statistics/dao/impl/StatisticsQueryImpl.java

@@ -28,15 +28,44 @@ public class StatisticsQueryImpl implements IStatisticsQueryDao {
     @Override
     public Page<Map<String, Object>> statisticsList(Map<String, Object> params, Pageable initPage) {
         StringBuffer sql = new StringBuffer();
+        List<Object> queryParams = new ArrayList<>();
         /**
-         *
+         *teacherId	string	list	老师id
+         * teacherName	string	list	老师姓名
+         * subject	string	list	科目
+         * allSubject	string	list	老师拥有的科目,多科目英文逗号隔开,
+         * correctNums	int	list	批注页数
+         * overtimeNums	int	list	超时批注页数
+         * notCorrectNums	int	list	未批注页数
+         * notCommentNums	int	list	不批注页数
+         * repeatNums	int	list	重复页数
+         * accuracy	string	list	正确率
+         * errorNums	int	list	报错页数
          */
-        sql.append("select t.teacher_id,t11.name as teacherName,t.subject,t11.course_name as allSubject, \n");
+
+        listInfo(params,queryParams,sql);
+        return dao.findPage(sql.toString(),queryParams.toArray(),initPage);
+    }
+
+    private void listInfo(Map<String, Object> params,List<Object> queryParams,StringBuffer sql){
+        sql.append("select t.teacher_id,t11.name as teacherName,t11.course_name as subject,t11.course_name as allSubject, \n");
+        sql.append(" t.correct_nums as correctNums,t.overtime_nums as overtimeNums,t.not_correct_nums as notCorrectNums, \n");
+        sql.append(" t.not_comment_nums as notCommentNums,t.repeat_nums as repeatNums,t.accuracy,t.error_nums as errorNums \n");
         sql.append(" from plat_teacher_statistics t \n");
         sql.append(" left join tb_lib_manager t11 on t.teacher_id = t11.user_id \n");
         sql.append(" where t11.type = 30 \n");
-
-        return null;
+        if(Objects.nonNull(params.get("beginDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"beginDate"))){
+            sql.append(" and   t.calculate_date >= ? ");
+            queryParams.add(params.get("beginDate"));
+        }
+        if(Objects.nonNull(params.get("endDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"endDate"))){
+            sql.append(" and    t.calculate_date <= ? ");
+            queryParams.add(params.get("endDate"));
+        }
+        if(Objects.nonNull(params.get("teacherName")) && StringUtils.isNotBlank(MapUtils.getString(params,"teacherName"))){
+            sql.append(" and   t11.name like concat('%',?,'%') ");
+            queryParams.add(params.get("teacherName"));
+        }
     }
 
     @Override
@@ -81,6 +110,7 @@ public class StatisticsQueryImpl implements IStatisticsQueryDao {
         return dao.findMap(sql.toString(),queryParams.toArray());
     }
 
+
     @Override
     public Map<String, Object> findTotalData(Map<String, Object> params) {
         StringBuffer sql = new StringBuffer();
@@ -112,6 +142,37 @@ public class StatisticsQueryImpl implements IStatisticsQueryDao {
         return dao.findMap(sql.toString(),queryParams.toArray()).get(0);
     }
 
+
+    public Map<String, Object> findTotalData2(Map<String, Object> params) {
+        StringBuffer sql = new StringBuffer();
+        List<Object> queryParams = new ArrayList<>();
+        sql.append("SELECT a.teacher_id,a.teacherName,a.`subject`,a.allSubject,a.correctNums,a.overtimeNums,a.notCorrectNums,a.notCommentNums,a.repeatNums,a.errorNums,\n");
+        sql.append("floor(100*(a.total- a.errorNums-a.notCorrectNums)/a.total) as accuracy\n");
+        sql.append("from (\n");
+        sql.append("SELECT t12.name as teacherName,t.teacher_id,t.`subject`,t12.course_name as allSubject,count(if(t.is_mark in (0,2) and t.is_feedback=1,true,NULL)) as correctNums, \n");
+        sql.append("0 as overtimeNums,\n");
+        sql.append("count(1) as total,\n");
+        sql.append("count(if(t11.start_time is null,true,null)) as notCorrectNums,\n");
+        sql.append("count(if(t.is_mark=10,true,null)) as notCommentNums,\n");
+        sql.append("count(if(t.is_mark=15,true,null)) as repeatNums\n");
+        sql.append("count(if(t11.is_check_error=1,true,null)) as errorNums,\n");
+        sql.append("from scon_homework_picture t \n");
+        sql.append("left join scon_homework_picture_correct t11 on t.id = t11.homework_picture_id and t11.type = 8\n");
+        sql.append("left join tb_lib_manager t12 on t.teacher_id = t12.user_id\n");
+        sql.append("where t12.type = 30 \n");
+        if(Objects.nonNull(params.get("beginDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"beginDate"))){
+            sql.append(" and  to_days(t11.end_time) >=to_days(?)  ");
+            queryParams.add(params.get("beginDate"));
+        }
+        if(Objects.nonNull(params.get("endDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"endDate"))){
+            sql.append(" and  to_days(t11.end_time) <=to_days(?)  ");
+            queryParams.add(params.get("endDate"));
+        }
+        sql.append("GROUP BY t.teacher_id\n");
+        sql.append(")a");
+        return dao.findMap(sql.toString(),queryParams.toArray()).get(0);
+    }
+
     @Override
     public List<Map<String, Object>> checkDetailList(String homeworkId) {
         StringBuffer sql = new StringBuffer();
@@ -123,4 +184,34 @@ public class StatisticsQueryImpl implements IStatisticsQueryDao {
         queryParams.add(homeworkId);
         return dao.findMap(sql.toString(),queryParams.toArray());
     }
+
+    @Override
+    public List<Map<String, Object>> salaryList(String userId, int month, int year) {
+        /**
+         * tb_teacher_salary
+         *workDate	string	list	日期
+         * correctNums	int	list	批注总张数
+         * overtimeNums	int	list	超时批注总张数
+         * perkNums	int	list	高峰时段批注张数
+         * perkEfficiency	String	list	高峰时段平均批注时间
+         * errorNums	int	list	报错张数
+         * accuracy	string	list	正确率
+         * perkSalary	String	list	高峰时段薪资
+         * otherSalary	String	list	其他时段薪资
+         * salary	String	list	总薪资
+         */
+        StringBuffer sql = new StringBuffer();
+        List<Object> queryParams = new ArrayList<>();
+        sql.append("select t.work_date as workDate,t.correct_nums as  correctNums,  \n");
+        sql.append("t.overtime_nums as overtimeNums,t.correct_nums as  perkNums,  \n");
+        sql.append(" t.perk_efficiency as perkEfficiency,t.error_nums as  errorNums,  \n");
+        sql.append(" t.accuracy,t.perk_salary as  perkSalary,  \n");
+        sql.append(" t.other_salary as otherSalary,t.salary as  salary  \n");
+        sql.append("from tb_teacher_salary t \n");
+        sql.append("where t.teacher_id = ? and t.month=? and t.year=?");
+        queryParams.add(userId);
+        queryParams.add(month);
+        queryParams.add(year);
+        return dao.findMap(sql.toString(),queryParams.toArray());
+    }
 }

+ 148 - 0
src/main/java/com/ssj/statistics/entity/TeacherPay.java

@@ -0,0 +1,148 @@
+package com.ssj.statistics.entity;
+
+import com.ssj.bean.common.framework.core.domain.BaseEntity;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.math.BigDecimal;
+
+/**
+ * @author sh
+ * @className TeacherPay
+ * @description entity
+ * @date 2021/3/2
+ */
+@Table(name = "tb_teacher_salary")
+@Entity
+public class TeacherPay extends BaseEntity {
+    /**
+     * tb_teacher_salary
+     *workDate	string	list	日期
+     * correctNums	int	list	批注总张数
+     * overtimeNums	int	list	超时批注总张数
+     * perkNums	int	list	高峰时段批注张数
+     * perkEfficiency	String	list	高峰时段平均批注时间
+     * errorNums	int	list	报错张数
+     * accuracy	string	list	正确率
+     * perkSalary	String	list	高峰时段薪资
+     * otherSalary	String	list	其他时段薪资
+     * salary	String	list	总薪资
+     */
+    private Integer correctNums;
+    private Integer overtimeNums;
+    private Integer perkNums;
+    private Integer errorNums;
+    private String workDate;
+    private int month;
+    private int year;
+    private String perkEfficiency;
+    private String accuracy;
+    private String perkSalary;
+    private String otherSalary;
+    private BigDecimal salary;
+    private String teacherId;
+
+    public Integer getCorrectNums() {
+        return correctNums;
+    }
+
+    public void setCorrectNums(Integer correctNums) {
+        this.correctNums = correctNums;
+    }
+
+    public Integer getOvertimeNums() {
+        return overtimeNums;
+    }
+
+    public void setOvertimeNums(Integer overtimeNums) {
+        this.overtimeNums = overtimeNums;
+    }
+
+    public Integer getPerkNums() {
+        return perkNums;
+    }
+
+    public void setPerkNums(Integer perkNums) {
+        this.perkNums = perkNums;
+    }
+
+    public Integer getErrorNums() {
+        return errorNums;
+    }
+
+    public void setErrorNums(Integer errorNums) {
+        this.errorNums = errorNums;
+    }
+
+    public String getWorkDate() {
+        return workDate;
+    }
+
+    public void setWorkDate(String workDate) {
+        this.workDate = workDate;
+    }
+
+    public String getPerkEfficiency() {
+        return perkEfficiency;
+    }
+
+    public void setPerkEfficiency(String perkEfficiency) {
+        this.perkEfficiency = perkEfficiency;
+    }
+
+    public String getAccuracy() {
+        return accuracy;
+    }
+
+    public void setAccuracy(String accuracy) {
+        this.accuracy = accuracy;
+    }
+
+    public String getPerkSalary() {
+        return perkSalary;
+    }
+
+    public void setPerkSalary(String perkSalary) {
+        this.perkSalary = perkSalary;
+    }
+
+    public String getOtherSalary() {
+        return otherSalary;
+    }
+
+    public void setOtherSalary(String otherSalary) {
+        this.otherSalary = otherSalary;
+    }
+
+    public BigDecimal getSalary() {
+        return salary;
+    }
+
+    public void setSalary(BigDecimal salary) {
+        this.salary = salary;
+    }
+
+    public int getMonth() {
+        return month;
+    }
+
+    public void setMonth(int month) {
+        this.month = month;
+    }
+
+    public int getYear() {
+        return year;
+    }
+
+    public void setYear(int year) {
+        this.year = year;
+    }
+
+    public String getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(String teacherId) {
+        this.teacherId = teacherId;
+    }
+}

+ 18 - 0
src/main/java/com/ssj/statistics/service/ITeacherPayService.java

@@ -0,0 +1,18 @@
+package com.ssj.statistics.service;
+
+import com.ssj.framework.core.common.service.BaseService;
+import com.ssj.statistics.entity.TeacherPay;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author sh
+ * @className ITeacherPay
+ * @description interface
+ * @date 2021/3/2
+ */
+public interface ITeacherPayService extends BaseService<TeacherPay,String> {
+
+    List<Map<String, Object>> salaryList(String userId, int month, int year);
+}

+ 39 - 0
src/main/java/com/ssj/statistics/service/impl/TeacherPayServiceImpl.java

@@ -0,0 +1,39 @@
+package com.ssj.statistics.service.impl;
+
+import com.ssj.framework.core.common.service.BaseServiceImpl;
+import com.ssj.statistics.dao.IStatisticsQueryDao;
+import com.ssj.statistics.dao.ITeacherPayDao;
+import com.ssj.statistics.entity.TeacherPay;
+import com.ssj.statistics.service.ITeacherPayService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author sh
+ * @className TeacherPayServiceImpl
+ * @description TODO
+ * @date 2021/3/2
+ */
+@Service
+public class TeacherPayServiceImpl  extends BaseServiceImpl<TeacherPay,String> implements ITeacherPayService{
+
+    @Autowired
+    private ITeacherPayDao dao;
+
+    @Autowired
+    private IStatisticsQueryDao queryDao;
+
+    @Override
+    public PagingAndSortingRepository<TeacherPay, String> getDao() {
+        return dao;
+    }
+
+    @Override
+    public List<Map<String, Object>> salaryList(String userId, int month, int year) {
+        return queryDao.salaryList(userId,month,year);
+    }
+}