夏文涛 2 lat temu
rodzic
commit
14bbeb0be1

+ 1 - 1
src/main/java/com/template/api/SmartAttendanceControllerAPI.java

@@ -50,7 +50,7 @@ public interface SmartAttendanceControllerAPI {
      */
      */
     @GetMapping(value = "/queryAttendanceList")
     @GetMapping(value = "/queryAttendanceList")
     @ApiOperation(value = "首页班级考勤数据", notes = "首页班级考勤数据", httpMethod = "GET")
     @ApiOperation(value = "首页班级考勤数据", notes = "首页班级考勤数据", httpMethod = "GET")
-    CommonResult queryAttendanceList();
+    CommonResult queryAttendanceList(@RequestParam String date, @RequestParam int classId);
 
 
 
 
     /**
     /**

+ 6 - 5
src/main/java/com/template/controller/DriverStockController.java

@@ -21,6 +21,7 @@ import com.template.services.SmartWarningService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
 
 
+import java.math.BigDecimal;
 import java.sql.Time;
 import java.sql.Time;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -46,15 +47,15 @@ public class DriverStockController implements DriverStockControllerAPI {
     public CommonResult getClassTj() {
     public CommonResult getClassTj() {
 
 
         List<Tj> list = driverStockService.getClassTj();
         List<Tj> list = driverStockService.getClassTj();
-        Integer num = 0;
+        BigDecimal num = new BigDecimal(0.0);
         for (Tj teacherData:list) {
         for (Tj teacherData:list) {
             if (teacherData.getName().contains("老师")) {
             if (teacherData.getName().contains("老师")) {
-                num = num + teacherData.getNum();
+                num = num.add(new BigDecimal(teacherData.getNum()));
             }
             }
         }
         }
         Tj teacher = new Tj();
         Tj teacher = new Tj();
         teacher.setName("教师");
         teacher.setName("教师");
-        teacher.setNum(num);
+        teacher.setNum(num.doubleValue());
         list = list.stream().filter(e -> !e.name.contains("老师") && !e.name.contains("家长")).collect(Collectors.toList());
         list = list.stream().filter(e -> !e.name.contains("老师") && !e.name.contains("家长")).collect(Collectors.toList());
         list.add(teacher);
         list.add(teacher);
         return CommonResult.ok(list);
         return CommonResult.ok(list);
@@ -71,11 +72,11 @@ public class DriverStockController implements DriverStockControllerAPI {
         ArrayList<Tj> tjs = new ArrayList<>();
         ArrayList<Tj> tjs = new ArrayList<>();
         Tj tj2 = new Tj();
         Tj tj2 = new Tj();
         tj2.setName("家长");
         tj2.setName("家长");
-        tj2.setNum(0);
+        tj2.setNum(0.0);
         tjs.add(tj2);
         tjs.add(tj2);
         Tj tj3 = new Tj();
         Tj tj3 = new Tj();
         tj3.setName("其他");
         tj3.setName("其他");
-        tj3.setNum(0);
+        tj3.setNum(0.0);
         tjs.add(tj3);
         tjs.add(tj3);
         for (int i = 0; i < 12; i++) {
         for (int i = 0; i < 12; i++) {
             VisitorTjVo visitorTjVo = new VisitorTjVo();
             VisitorTjVo visitorTjVo = new VisitorTjVo();

+ 87 - 23
src/main/java/com/template/controller/SmartAttendanceController.java

@@ -25,9 +25,7 @@ import com.template.model.pojo.*;
 import com.template.model.request.askForLeaveRequest;
 import com.template.model.request.askForLeaveRequest;
 import com.template.model.result.CommonResult;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
 import com.template.model.result.PageUtils;
-import com.template.model.seewo.PersonalLeaveListSchoolPeriodRecordsParam;
-import com.template.model.seewo.PersonalLeaveListSchoolPeriodRecordsRequest;
-import com.template.model.seewo.PersonalLeaveListSchoolPeriodRecordsResult;
+import com.template.model.seewo.*;
 import com.template.model.vo.*;
 import com.template.model.vo.*;
 import com.template.services.*;
 import com.template.services.*;
 import com.tencentcloudapi.tci.v20190318.models.Person;
 import com.tencentcloudapi.tci.v20190318.models.Person;
@@ -138,7 +136,7 @@ public class SmartAttendanceController implements SmartAttendanceControllerAPI {
     public CommonResult queryLeaveRecords() {
     public CommonResult queryLeaveRecords() {
         int findPageSize = 20;
         int findPageSize = 20;
 
 
-        PersonalLeaveListSchoolPeriodRecordsResult result = getXwAttendance(TimeExchange.getDate(),TimeExchange.getDate(), 1, findPageSize);
+        PersonalLeaveListSchoolPeriodRecordsResult result = getXwAttendance(TimeExchange.getDate(), TimeExchange.getDate(), 1, findPageSize);
 //        PersonalLeaveListSchoolPeriodRecordsResult result = getXwAttendance("2024-05-23","2024-06-14", 1, findPageSize);
 //        PersonalLeaveListSchoolPeriodRecordsResult result = getXwAttendance("2024-05-23","2024-06-14", 1, findPageSize);
         if (result == null) {
         if (result == null) {
             return CommonResult.fail("当天不存在请假数据!");
             return CommonResult.fail("当天不存在请假数据!");
@@ -261,30 +259,96 @@ public class SmartAttendanceController implements SmartAttendanceControllerAPI {
 
 
     @Override
     @Override
     @DESRespondSecret(validated = true)
     @DESRespondSecret(validated = true)
-    public CommonResult queryAttendanceList() {
+    public CommonResult queryAttendanceList(String date, int classId) {
+        if (date == null || date == "") {
+            date = TimeExchange.getDate();
+        }
+
         List<HomePageAttendanceVo> result = new ArrayList<>();
         List<HomePageAttendanceVo> result = new ArrayList<>();
-        Date startMonth = TimeExchange.getToMonthBeginDate(TimeExchange.DateToString(new Date()));
-        Date endMonth = TimeExchange.getToMonthEndDate(TimeExchange.DateToString(new Date()));
 
 
-        List<SmartAttendance> datas = smartAttendanceService.queryAttendanceList(startMonth, endMonth);
+        SmartClass classData = smartClassService.getSmartClassById(classId);
+        if (classData != null) {
+            //初始化客户端
+            SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
+            AttendanceServiceListEventRecordsByClazzParam param = new AttendanceServiceListEventRecordsByClazzParam();
+            //响应体,MimeType为 application/json
+            AttendanceServiceListEventRecordsByClazzParam.RequestBody requestBody = AttendanceServiceListEventRecordsByClazzParam.RequestBody.builder()
+                    .build();
+            param.setRequestBody(requestBody);
+            //query
+            AttendanceServiceListEventRecordsByClazzParam.Query query = AttendanceServiceListEventRecordsByClazzParam.Query.builder()
+                    .appId(seewoConfig.getAppId())
+                    .schoolUid(seewoConfig.getSchoolId())
+                    .attendDate(date)
+                    .classUid(classData.getClassUid())
+                    .build();
+            requestBody.setQuery(query);
+            AttendanceServiceListEventRecordsByClazzRequest request = new AttendanceServiceListEventRecordsByClazzRequest(param);
+            // 该接口需要数据权限,请将授权资源id替换至下方,请妥善保管好授权资源id,避免泄露
+            // permissionId位置: 控制台 -> 应用详情 -> 我申请的 -> 已通过的接口 -> 调用范围 -> 审批信息 中查看授权资源的「学校id」或「区域id」
+            //request.setPermissionId("");
+            System.out.println("入参:" + request);
+            //执行请求,如果想获取到com.seewo.open.sdk.HttpResponse对象,请调用 seewoClient.execute 方法
+            AttendanceServiceListEventRecordsByClazzResult xwResult = seewoClient.invoke(request);
+            System.out.println("出参:" + xwResult);
+
+            if (xwResult == null) {
+                return CommonResult.fail("当天不存在请假数据!");
+            }
 
 
-        if (datas == null) {
-            return CommonResult.ok(result);
-        }
+            if (!xwResult.getResponseBody().getCode().equals("000000")) {
+                return CommonResult.fail(xwResult.getResponseBody().getMessage());
+            }
+
+            Integer totalNum = 0;//考勤总人数
+            Integer presentNum = 0;//考勤准时人数
+            Integer lateNum = 0;//考勤迟到人数
+            Integer leaveNum = 0;//考勤请假人数
+            Integer absenceNum = 0;//考勤缺卡人数
+            Integer timeoutNum = 0;//超时打卡人数
+            if (xwResult.getResponseBody().getData() != null
+                    && xwResult.getResponseBody().getData().getAttendStatistic() != null
+                    && xwResult.getResponseBody().getData().getAttendStatistic().size() > 0) {
+                for (AttendanceServiceListEventRecordsByClazzResult.AttendStatistic statistic : xwResult.getResponseBody().getData().getAttendStatistic()) {
+                    totalNum = totalNum + statistic.getTotalNum();
+                    presentNum = presentNum + statistic.getPresentNum();
+                    lateNum = lateNum + statistic.getLateNum();
+                    leaveNum = leaveNum + statistic.getLeaveNum();
+                    absenceNum = absenceNum + statistic.getAbsenceNum();
+                }
+            }
+            timeoutNum = totalNum - (presentNum + lateNum + leaveNum + absenceNum);
+
+            List<Integer> status = eAttendanceStatu.attendanceStatus();
+            for (int statu : status) {
+                double restData = 0.0;
+
+                HomePageAttendanceVo data = new HomePageAttendanceVo();
+                data.setName(eAttendanceStatu.stringOf(statu));
+
+                switch (data.getName()) {
+                    case "准时":
+                        restData = totalNum == 0 ? 0 : (double) presentNum / totalNum * 100;
+                        break;
+                    case "迟到":
+                        restData = totalNum == 0 ? 0 : (double) lateNum / totalNum * 100;
+                        break;
+                    case "缺卡":
+                        restData = totalNum == 0 ? 0 : (double) absenceNum / totalNum * 100;
+                        break;
+                    case "请假":
+                        restData = totalNum == 0 ? 0 : (double) leaveNum / totalNum * 100;
+                        break;
+                    case "超时打卡":
+                        restData = totalNum == 0 ? 0 : (double) timeoutNum / totalNum * 100;
+                        break;
+                    default:
+                        break;
+                }
 
 
-        List<Integer> status = eAttendanceStatu.attendanceStatus();
-        for (int statu : status) {
-            HomePageAttendanceVo data = new HomePageAttendanceVo();
-            data.setName(eAttendanceStatu.stringOf(statu));
-            //百分比
-            long count = datas.stream().filter(e -> e.getStatus().intValue() == statu).count();
-            if (count == 0) {
-                data.setProportion(0.0);
-            } else {
-                double restData = (double) count / datas.size() * 100;
                 data.setProportion(restData);
                 data.setProportion(restData);
+                result.add(data);
             }
             }
-            result.add(data);
         }
         }
 
 
         return CommonResult.ok(result);
         return CommonResult.ok(result);
@@ -603,7 +667,7 @@ public class SmartAttendanceController implements SmartAttendanceControllerAPI {
                 }
                 }
             }
             }
 //        请假的单独弄
 //        请假的单独弄
-            Integer count = smartAttendanceService.getClassAckHistoricalAttendance(6, startTime, endTime,record.getId());
+            Integer count = smartAttendanceService.getClassAckHistoricalAttendance(6, startTime, endTime, record.getId());
             historicalAttendanceVo.setAskForLeave(count);
             historicalAttendanceVo.setAskForLeave(count);
             vos.add(historicalAttendanceVo);
             vos.add(historicalAttendanceVo);
         }
         }

+ 25 - 19
src/main/java/com/template/mapper/WechatScanLoginMapper.java

@@ -13,54 +13,60 @@ import java.util.List;
 public interface WechatScanLoginMapper extends BaseMapper<SmartUser> {
 public interface WechatScanLoginMapper extends BaseMapper<SmartUser> {
 
 
     // 用户类别统计
     // 用户类别统计
-    public List<Tj> getUserIdTj();
+    List<Tj> getUserIdTj();
 
 
     // 用户总数
     // 用户总数
-    public All getUserIdTjt();
+    All getUserIdTjt();
 
 
     // 水表总计
     // 水表总计
-    public DAll getWaterTj();
+    DAll getWaterTj();
 
 
     // 电表总计
     // 电表总计
-    public DAll getElcTj();
+    DAll getElcTj();
 
 
     // 每个月各水表数据统计
     // 每个月各水表数据统计
-    public List<EnergyTj> getWaterTjByMonAndBuild(String month);
+    List<EnergyTj> getWaterTjByMonAndBuild(String month);
 
 
     // 每个月各电表数据统计
     // 每个月各电表数据统计
-    public List<EnergyTj> getElcTjByMonAndBuild(String month);
+    List<EnergyTj> getElcTjByMonAndBuild(String month);
 
 
     // 每个月每个楼栋查询
     // 每个月每个楼栋查询
-    public EnergyTj getTjByMon(String name,String meterName,String month,String type);
+    EnergyTj getTjByMon(String name, String meterName, String month, String type);
 
 
-    public void insertMonthMeter(EnergyTj energyTj);
+    void insertMonthMeter(EnergyTj energyTj);
 
 
-    public void updateMonthMeter(@Param("energyTj")EnergyTj energyTj);
+    void updateMonthMeter(@Param("energyTj") EnergyTj energyTj);
 
 
     // 每天各水表数据统计
     // 每天各水表数据统计
-    public List<EnergyTj> getWaterTjByDayAndBuild(String day);
+    List<EnergyTj> getWaterTjByDayAndBuild(String day);
 
 
     // 每天各电表数据统计
     // 每天各电表数据统计
-    public List<EnergyTj> getElcTjByDayAndBuild(String day);
+    List<EnergyTj> getElcTjByDayAndBuild(String day);
 
 
-    public EnergyTj getTjByDay(String name,String meterName,String day,String type);
+    EnergyTj getTjByDay(String name, String meterName, String day, String type);
 
 
-    public void insertDayMeter(EnergyTj energyTj);
+    void insertDayMeter(EnergyTj energyTj);
 
 
-    public void updateDayMeter(@Param("energyTj")EnergyTj energyTj);
+    void updateDayMeter(@Param("energyTj") EnergyTj energyTj);
 
 
     // 每个月各水表数据
     // 每个月各水表数据
-    public List<Tj> getMonWater(@Param("month")String month);
+    List<Tj> getMonWater(@Param("month") String month);
 
 
     // 每个月各电表数据
     // 每个月各电表数据
-    public List<Tj> getMonElc(@Param("month")String month);
+    List<Tj> getMonElc(@Param("month") String month);
+
+    // 每个月各水表数据
+    List<Tj> getMonWaters(@Param("startMonth") String startMonth, @Param("endMonth") String endMonth);
+
+    // 每个月各电表数据
+    List<Tj> getMonElcs(@Param("startMonth") String startMonth, @Param("endMonth") String endMonth);
 
 
     // 区域能耗统计
     // 区域能耗统计
-    public List<MeterMonthData> getMeterMonthPage(@Param("meterMonthData")MeterMonthData meterMonthData);
+    List<MeterMonthData> getMeterMonthPage(@Param("meterMonthData") MeterMonthData meterMonthData);
 
 
-    List<MonthMeterDetail> getMeterMonthPageDatas(@Param("meterMonthData")MeterMonthData meterMonthData);
+    List<MonthMeterDetail> getMeterMonthPageDatas(@Param("meterMonthData") MeterMonthData meterMonthData);
 
 
     // 实时抄表
     // 实时抄表
-    public List<MeterMonthDataVo> getMeterDayPage(@Param("meterMonthData")MeterMonthData meterMonthData);
+    List<MeterMonthDataVo> getMeterDayPage(@Param("meterMonthData") MeterMonthData meterMonthData);
 
 
 }
 }

+ 2 - 2
src/main/java/com/template/model/pojo/SmartOperationUser.java

@@ -16,7 +16,7 @@ import lombok.experimental.Accessors;
 
 
 /**
 /**
  * <p>
  * <p>
- * 
+ *
  * </p>
  * </p>
  *
  *
  * @author ceshi
  * @author ceshi
@@ -36,7 +36,7 @@ public class SmartOperationUser implements Serializable {
     @ApiModelProperty(value = "操作id")
     @ApiModelProperty(value = "操作id")
     private Integer operationId;
     private Integer operationId;
 
 
-    @ApiModelProperty(value = "操作方式  "add","update","delete"")
+    @ApiModelProperty(value = "操作方式  add,update,delete")
     private String operationMode;
     private String operationMode;
 
 
     @ApiModelProperty(value = "1:未操作,2:已操作")
     @ApiModelProperty(value = "1:未操作,2:已操作")

+ 222 - 0
src/main/java/com/template/model/seewo/AttendanceServiceListEventRecordsByClazzParam.java

@@ -0,0 +1,222 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.ParameterPosition;
+
+/**
+ * seewo-open API: 【事件|课程】根据班级查询指定日期的考勤统计数据
+ * 此接口用于查询某个班级某天某个考勤的统计数据
+ *
+ * @author auto create
+ * @since 2.0.1 2024-6-18
+ */
+public class AttendanceServiceListEventRecordsByClazzParam extends OpenApiParam {
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private RequestBody requestBody;
+
+
+    public RequestBody getRequestBody() {
+        return this.requestBody;
+    }
+
+    public void setRequestBody(RequestBody requestBody) {
+        this.requestBody = requestBody;
+    }
+
+    public static AttendanceServiceListEventRecordsByClazzParamBuilder builder(){
+        return new AttendanceServiceListEventRecordsByClazzParamBuilder();
+    }
+
+    public static class AttendanceServiceListEventRecordsByClazzParamBuilder{
+        private RequestBody requestBody;
+
+        public AttendanceServiceListEventRecordsByClazzParamBuilder requestBody(RequestBody requestBody){
+            this.requestBody = requestBody;
+            return this;
+        }
+
+        public AttendanceServiceListEventRecordsByClazzParam build(){
+            AttendanceServiceListEventRecordsByClazzParam param = new AttendanceServiceListEventRecordsByClazzParam();
+            param.setRequestBody(requestBody);
+            return param;
+        }
+    }
+
+    public static class RequestBody {
+        /**
+         * query
+         */
+        private Query query;
+
+        public Query getQuery() {
+            return this.query;
+        }
+
+        public void setQuery(Query query) {
+            this.query = query;
+        }
+
+
+        public static RequestBodyBuilder builder(){
+            return new RequestBodyBuilder();
+        }
+
+        public static class RequestBodyBuilder{
+            private Query query;
+
+            public RequestBodyBuilder query(Query query){
+                this.query = query;
+                return this;
+            }
+
+            public RequestBody build(){
+                RequestBody param = new RequestBody();
+                param.setQuery(query);
+                return param;
+            }
+        }
+    }
+
+    public static class Query {
+        /**
+         * appId
+         */
+        private String appId;
+        /**
+         * schoolUid
+         */
+        private String schoolUid;
+        /**
+         * attendDate
+         */
+        private String attendDate;
+        /**
+         * 班级uid
+与clazz+grade二选一
+即班级通过classUid或grade + clazz唯一确定,二者必须传一个
+都传以classUid为准
+         */
+        private String classUid;
+        /**
+         * 班级序号
+1-12 小学1年级~高三年级,30 幼儿园。 99 其他自定义
+与classUid二选一
+即班级通过classUid或grade + clazz唯一确定,二者必须传一个
+都传以classUid为准
+         */
+        private Integer grade;
+        /**
+         * 年级序号
+与classUid二选一
+即班级通过classUid或grade + clazz唯一确定,二者必须传一个
+都传以classUid为准
+         */
+        private Integer clazz;
+
+        public String getAppId() {
+            return this.appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getSchoolUid() {
+            return this.schoolUid;
+        }
+
+        public void setSchoolUid(String schoolUid) {
+            this.schoolUid = schoolUid;
+        }
+
+        public String getAttendDate() {
+            return this.attendDate;
+        }
+
+        public void setAttendDate(String attendDate) {
+            this.attendDate = attendDate;
+        }
+
+        public String getClassUid() {
+            return this.classUid;
+        }
+
+        public void setClassUid(String classUid) {
+            this.classUid = classUid;
+        }
+
+        public Integer getGrade() {
+            return this.grade;
+        }
+
+        public void setGrade(Integer grade) {
+            this.grade = grade;
+        }
+
+        public Integer getClazz() {
+            return this.clazz;
+        }
+
+        public void setClazz(Integer clazz) {
+            this.clazz = clazz;
+        }
+
+
+        public static QueryBuilder builder(){
+            return new QueryBuilder();
+        }
+
+        public static class QueryBuilder{
+            private String appId;
+            private String schoolUid;
+            private String attendDate;
+            private String classUid;
+            private Integer grade;
+            private Integer clazz;
+
+            public QueryBuilder appId(String appId){
+                this.appId = appId;
+                return this;
+            }
+            public QueryBuilder schoolUid(String schoolUid){
+                this.schoolUid = schoolUid;
+                return this;
+            }
+            public QueryBuilder attendDate(String attendDate){
+                this.attendDate = attendDate;
+                return this;
+            }
+            public QueryBuilder classUid(String classUid){
+                this.classUid = classUid;
+                return this;
+            }
+            public QueryBuilder grade(Integer grade){
+                this.grade = grade;
+                return this;
+            }
+            public QueryBuilder clazz(Integer clazz){
+                this.clazz = clazz;
+                return this;
+            }
+
+            public Query build(){
+                Query param = new Query();
+                param.setAppId(appId);
+                param.setSchoolUid(schoolUid);
+                param.setAttendDate(attendDate);
+                param.setClassUid(classUid);
+                param.setGrade(grade);
+                param.setClazz(clazz);
+                return param;
+            }
+        }
+    }
+
+
+}

+ 37 - 0
src/main/java/com/template/model/seewo/AttendanceServiceListEventRecordsByClazzRequest.java

@@ -0,0 +1,37 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiParam;
+import com.seewo.open.sdk.OpenApiRequest;
+
+/**
+ * seewo-open API: 【事件|课程】根据班级查询指定日期的考勤统计数据
+ * 此接口用于查询某个班级某天某个考勤的统计数据
+ *
+ * @author auto create
+ * @since 2.0.1 2024-6-18
+ */
+public class AttendanceServiceListEventRecordsByClazzRequest extends OpenApiRequest<AttendanceServiceListEventRecordsByClazzParam, AttendanceServiceListEventRecordsByClazzResult> {
+
+    public AttendanceServiceListEventRecordsByClazzRequest(AttendanceServiceListEventRecordsByClazzParam param) {
+        this();
+        setBizModel(param);
+    }
+
+    public AttendanceServiceListEventRecordsByClazzRequest() {
+        setServerUrl("https://openapi.seewo.com");
+        setPath("/seewo-yunban-api/attendance-service/list-event-records-by-clazz");
+        setHttpMethod("POST");
+        // replace with your permissionId
+        setPermissionId("");
+    }
+
+    public Class<AttendanceServiceListEventRecordsByClazzResult> getResponseClass() {
+        return AttendanceServiceListEventRecordsByClazzResult.class;
+    }
+
+    public Class<AttendanceServiceListEventRecordsByClazzParam> getDomainClass() {
+        return AttendanceServiceListEventRecordsByClazzParam.class;
+    }
+}
+

+ 266 - 0
src/main/java/com/template/model/seewo/AttendanceServiceListEventRecordsByClazzResult.java

@@ -0,0 +1,266 @@
+package com.template.model.seewo;
+
+import java.util.*;
+import com.seewo.open.sdk.OpenApiResult;
+import com.seewo.open.sdk.HttpResponse;
+
+/**
+ * seewo-open API: 【事件|课程】根据班级查询指定日期的考勤统计数据
+ * 此接口用于查询某个班级某天某个考勤的统计数据
+ *
+ * @author auto create
+ * @since 2.0.1 2024-6-18
+ */
+public class AttendanceServiceListEventRecordsByClazzResult extends OpenApiResult {
+
+    public AttendanceServiceListEventRecordsByClazzResult(HttpResponse response) {
+        super(response);
+    }
+
+
+    /**
+     * 响应体,MimeType为 application/json
+     */
+
+    private ResponseBody responseBody;
+
+
+    public ResponseBody getResponseBody() {
+        return this.responseBody;
+    }
+
+    public void setResponseBody(ResponseBody responseBody) {
+        this.responseBody = responseBody;
+    }
+
+    public static class ResponseBody {
+        /**
+         * code
+         */
+        private String code;
+        /**
+         * message
+         */
+        private String message;
+        /**
+         * data
+         */
+        private Data data;
+
+        public String getCode() {
+            return this.code;
+        }
+
+        public void setCode(String code) {
+            this.code = code;
+        }
+
+        public String getMessage() {
+            return this.message;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+        public Data getData() {
+            return this.data;
+        }
+
+        public void setData(Data data) {
+            this.data = data;
+        }
+
+    }
+
+    public static class Data {
+        /**
+         * 班级uid
+         */
+        private String classUid;
+        /**
+         * 班级名称
+         */
+        private String className;
+        /**
+         * 班级类型
+         */
+        private Integer classType;
+        /**
+         * 考勤汇总信息
+         */
+        private List<AttendStatistic> attendStatistic;
+
+        public String getClassUid() {
+            return this.classUid;
+        }
+
+        public void setClassUid(String classUid) {
+            this.classUid = classUid;
+        }
+
+        public String getClassName() {
+            return this.className;
+        }
+
+        public void setClassName(String className) {
+            this.className = className;
+        }
+
+        public Integer getClassType() {
+            return this.classType;
+        }
+
+        public void setClassType(Integer classType) {
+            this.classType = classType;
+        }
+
+        public List<AttendStatistic> getAttendStatistic() {
+            return this.attendStatistic;
+        }
+
+        public void setAttendStatistic(List<AttendStatistic> attendStatistic) {
+            this.attendStatistic = attendStatistic;
+        }
+
+    }
+
+    public static class AttendStatistic {
+        /**
+         * 考勤规则id
+         */
+        private String ruleId;
+        /**
+         * 考勤名称
+         */
+        private String name;
+        /**
+         * 考勤类型 1 - 事件考勤  2 - 课程考勤
+         */
+        private Integer attendType;
+        /**
+         * 考勤开始时间
+         */
+        private String attendStartTime;
+        /**
+         * 考勤迟到时间
+         */
+        private String attendLateTime;
+        /**
+         * 考勤结束时间
+         */
+        private String attendEndTime;
+        /**
+         * 考勤总人数
+         */
+        private Integer totalNum;
+        /**
+         * 考勤准时人数
+         */
+        private Integer presentNum;
+        /**
+         * 考勤迟到人数
+         */
+        private Integer lateNum;
+        /**
+         * 考勤请假人数
+         */
+        private Integer leaveNum;
+        /**
+         * 考勤缺卡人数
+         */
+        private Integer absenceNum;
+
+        public String getRuleId() {
+            return this.ruleId;
+        }
+
+        public void setRuleId(String ruleId) {
+            this.ruleId = ruleId;
+        }
+
+        public String getName() {
+            return this.name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public Integer getAttendType() {
+            return this.attendType;
+        }
+
+        public void setAttendType(Integer attendType) {
+            this.attendType = attendType;
+        }
+
+        public String getAttendStartTime() {
+            return this.attendStartTime;
+        }
+
+        public void setAttendStartTime(String attendStartTime) {
+            this.attendStartTime = attendStartTime;
+        }
+
+        public String getAttendLateTime() {
+            return this.attendLateTime;
+        }
+
+        public void setAttendLateTime(String attendLateTime) {
+            this.attendLateTime = attendLateTime;
+        }
+
+        public String getAttendEndTime() {
+            return this.attendEndTime;
+        }
+
+        public void setAttendEndTime(String attendEndTime) {
+            this.attendEndTime = attendEndTime;
+        }
+
+        public Integer getTotalNum() {
+            return this.totalNum;
+        }
+
+        public void setTotalNum(Integer totalNum) {
+            this.totalNum = totalNum;
+        }
+
+        public Integer getPresentNum() {
+            return this.presentNum;
+        }
+
+        public void setPresentNum(Integer presentNum) {
+            this.presentNum = presentNum;
+        }
+
+        public Integer getLateNum() {
+            return this.lateNum;
+        }
+
+        public void setLateNum(Integer lateNum) {
+            this.lateNum = lateNum;
+        }
+
+        public Integer getLeaveNum() {
+            return this.leaveNum;
+        }
+
+        public void setLeaveNum(Integer leaveNum) {
+            this.leaveNum = leaveNum;
+        }
+
+        public Integer getAbsenceNum() {
+            return this.absenceNum;
+        }
+
+        public void setAbsenceNum(Integer absenceNum) {
+            this.absenceNum = absenceNum;
+        }
+
+    }
+
+
+}
+

+ 11 - 3
src/main/java/com/template/model/tongji/Tj.java

@@ -3,7 +3,8 @@ package com.template.model.tongji;
 public class Tj {
 public class Tj {
 
 
     public String name;
     public String name;
-    public Integer num;
+    public Double num;
+    public String date;
 
 
     public String getName() {
     public String getName() {
         return name;
         return name;
@@ -13,12 +14,19 @@ public class Tj {
         this.name = name;
         this.name = name;
     }
     }
 
 
-    public Integer getNum() {
+    public Double getNum() {
         return num;
         return num;
     }
     }
 
 
-    public void setNum(Integer num) {
+    public void setNum(Double num) {
         this.num = num;
         this.num = num;
     }
     }
 
 
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
 }
 }

+ 12 - 10
src/main/java/com/template/services/WechatScanLoginService.java

@@ -39,32 +39,34 @@ public interface WechatScanLoginService {
 	int updateSmartUser(SmartUser sa);
 	int updateSmartUser(SmartUser sa);
 
 
 	// 用户类别统计
 	// 用户类别统计
-	public List<Tj> getUserIdTj();
+	 List<Tj> getUserIdTj();
 
 
 	// 用户总数
 	// 用户总数
-	public All getUserIdTjt();
+	 All getUserIdTjt();
 
 
 	// 水表总计
 	// 水表总计
-	public DAll getWaterTj();
+	 DAll getWaterTj();
 
 
 	// 电表总计
 	// 电表总计
-	public DAll getElcTj();
+	 DAll getElcTj();
 
 
-	public void insertMonthMeter(String month);
+	 void insertMonthMeter(String month);
 
 
-	public void insertDayMeter(String day);
+	 void insertDayMeter(String day);
 
 
 	// 每个月各水表数据
 	// 每个月各水表数据
-	public List<MonthMeterDetail> getMonWater() throws ParseException;
+	 List<MonthMeterDetail> getMonWater() throws ParseException;
 
 
 	// 每个月各电表数据
 	// 每个月各电表数据
-	public List<MonthMeterDetail> getMonElc() throws ParseException;
+	 List<MonthMeterDetail> getMonElc() throws ParseException;
+
+
 
 
 	// 区域能耗统计
 	// 区域能耗统计
-	public PageInfo<MeterMonthData> getMeterMonthPage(@Param("meterMonthData")MeterMonthData meterMonthData);
+	 PageInfo<MeterMonthData> getMeterMonthPage(@Param("meterMonthData")MeterMonthData meterMonthData);
 
 
 	// 实时抄表
 	// 实时抄表
-	public PageInfo<MeterMonthDataVo> getMeterDayPage(@Param("meterMonthData")MeterMonthData meterMonthData);
+	 PageInfo<MeterMonthDataVo> getMeterDayPage(@Param("meterMonthData")MeterMonthData meterMonthData);
 
 
 	PageInfo<com.template.model.pojo.MonthMeterDetail> getMeterMonthPageDatas(@Param("meterMonthData")MeterMonthData meterMonthData);
 	PageInfo<com.template.model.pojo.MonthMeterDetail> getMeterMonthPageDatas(@Param("meterMonthData")MeterMonthData meterMonthData);
 }
 }

+ 315 - 269
src/main/java/com/template/services/impl/WechatScanLoginServiceImpl.java

@@ -20,310 +20,356 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.io.UnsupportedEncodingException;
 import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.net.URLEncoder;
 import java.text.ParseException;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>Title: WechatScanLoginServiceImpl</p>
  * <p>Title: WechatScanLoginServiceImpl</p>
  * <p>Description: 业务接口实现 </p>
  * <p>Description: 业务接口实现 </p>
+ *
  * @author fengyong
  * @author fengyong
  * @date 2018年9月7日
  * @date 2018年9月7日
  */
  */
 @Service
 @Service
 public class WechatScanLoginServiceImpl implements WechatScanLoginService {
 public class WechatScanLoginServiceImpl implements WechatScanLoginService {
 
 
-	@Autowired
-	public SmartUserMapper smartUserMapper;
+    @Autowired
+    public SmartUserMapper smartUserMapper;
 
 
-	@Autowired
-	public WechatScanLoginMapper wechatScanLoginMapper;
+    @Autowired
+    public WechatScanLoginMapper wechatScanLoginMapper;
 
 
-	/**
-	 * <p>Title: wechatLoginUrl</p>
-	 * <p>Description: 网页授权回调地址处理</p>
-	 * @return
-	 * @throws UnsupportedEncodingException
-	 */
-	@Override
-	public Map<String, String> wechatLoginUrl() {
-		String content = Constanst.PWD_MD5+DateUtils.getYYYYMMdd();
-		byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16);
-		String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt);
-		Map<String,String> map = new HashMap<String,String>();
-		String url = HttpParame.AUTHORIZATION_URL;
-		url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
-		try {
-			url = url.replaceAll("REDIRECT_URI", URLEncoder.encode(
-					PropertiesUtil.getValue(HttpParame.REDIRECT_URI),"UTF-8"));
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		url = url.replaceAll("SCOPE", "snsapi_login");
-		url = url.replace("STATE", parseByte2HexStr);	//加密state进行验证 回调地址当天有效 防止恶意攻击
-		map.put("url", url);
-		return map;
-	}
+    /**
+     * <p>Title: wechatLoginUrl</p>
+     * <p>Description: 网页授权回调地址处理</p>
+     *
+     * @return
+     * @throws UnsupportedEncodingException
+     */
+    @Override
+    public Map<String, String> wechatLoginUrl() {
+        String content = Constanst.PWD_MD5 + DateUtils.getYYYYMMdd();
+        byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16);
+        String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt);
+        Map<String, String> map = new HashMap<String, String>();
+        String url = HttpParame.AUTHORIZATION_URL;
+        url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
+        try {
+            url = url.replaceAll("REDIRECT_URI", URLEncoder.encode(
+                    PropertiesUtil.getValue(HttpParame.REDIRECT_URI), "UTF-8"));
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        url = url.replaceAll("SCOPE", "snsapi_login");
+        url = url.replace("STATE", parseByte2HexStr);    //加密state进行验证 回调地址当天有效 防止恶意攻击
+        map.put("url", url);
+        return map;
+    }
 
 
-	@Override
-	public Map<String, String> wechatBindUrl(String phone,String messageCode) {
-		String content = Constanst.PWD_MD5+ DateUtils.getYYYYMMdd();
-		byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16);
-		String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt);
-		Map<String,String> map = new HashMap<String,String>();
-		String url = HttpParame.BIND_URL;
-		url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
-		try {
-			url = url.replaceAll("REDIRECT_URI", URLEncoder.encode(
-					PropertiesUtil.getValue(HttpParame.BIND_URI)+"?phone="+phone+"&messageCode="+messageCode,"UTF-8"));
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		//url = url.replaceAll("SCOPE", "snsapi_login");
-		url = url.replaceAll("SCOPE", "snsapi_login");
-		url = url.replace("STATE", parseByte2HexStr);	//加密state进行验证 回调地址当天有效 防止恶意攻击
-		map.put("url", url);
-		return map;
-	}
+    @Override
+    public Map<String, String> wechatBindUrl(String phone, String messageCode) {
+        String content = Constanst.PWD_MD5 + DateUtils.getYYYYMMdd();
+        byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16);
+        String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt);
+        Map<String, String> map = new HashMap<String, String>();
+        String url = HttpParame.BIND_URL;
+        url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
+        try {
+            url = url.replaceAll("REDIRECT_URI", URLEncoder.encode(
+                    PropertiesUtil.getValue(HttpParame.BIND_URI) + "?phone=" + phone + "&messageCode=" + messageCode, "UTF-8"));
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        //url = url.replaceAll("SCOPE", "snsapi_login");
+        url = url.replaceAll("SCOPE", "snsapi_login");
+        url = url.replace("STATE", parseByte2HexStr);    //加密state进行验证 回调地址当天有效 防止恶意攻击
+        map.put("url", url);
+        return map;
+    }
 
 
-	/**
-	 * <p>Title: getAccessToken</p>
-	 * <p>Description: 用户授权后获取用户唯一标识 </p>
-	 * @param code
-	 * @return
-	 */
-	@Override
-	public AccessToken getAccessToken(String code) {
-		String accessTokenUrl = HttpParame.ACCESS_TOKEN_URL;
-		accessTokenUrl = accessTokenUrl.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
-		accessTokenUrl = accessTokenUrl.replaceAll("SECRET", PropertiesUtil.getValue(HttpParame.SECRET));
-		accessTokenUrl = accessTokenUrl.replaceAll("CODE", code);
-		String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl);
-		if (responseContent == null || responseContent == "") {
-			return null;
-		}
-		JSONObject parseObject = JSONObject.parseObject(responseContent);
-		AccessToken accessToken = JSONObject.toJavaObject(parseObject, AccessToken.class);
-		return accessToken;
-	}
+    /**
+     * <p>Title: getAccessToken</p>
+     * <p>Description: 用户授权后获取用户唯一标识 </p>
+     *
+     * @param code
+     * @return
+     */
+    @Override
+    public AccessToken getAccessToken(String code) {
+        String accessTokenUrl = HttpParame.ACCESS_TOKEN_URL;
+        accessTokenUrl = accessTokenUrl.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
+        accessTokenUrl = accessTokenUrl.replaceAll("SECRET", PropertiesUtil.getValue(HttpParame.SECRET));
+        accessTokenUrl = accessTokenUrl.replaceAll("CODE", code);
+        String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl);
+        if (responseContent == null || responseContent == "") {
+            return null;
+        }
+        JSONObject parseObject = JSONObject.parseObject(responseContent);
+        AccessToken accessToken = JSONObject.toJavaObject(parseObject, AccessToken.class);
+        return accessToken;
+    }
 
 
-	/**
-	 * <p>Title: getAccessToken</p>
-	 * <p>Description: 用户授权后获取用户唯一标识 </p>
-	 * @return
-	 */
-	@Override
-	public PhoneAccessToken getPhoneAccessToken() {
-		String accessTokenUrl = HttpParame.PHONE_TOKEN_URL;
-		accessTokenUrl = accessTokenUrl.replaceAll("XAPPID", PropertiesUtil.getValue(HttpParame.APPIDX));
-		accessTokenUrl = accessTokenUrl.replaceAll("XSECRET", PropertiesUtil.getValue(HttpParame.SECRETX));
-		String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl);
-		if (responseContent == null || responseContent == "") {
-			return null;
-		}
-		JSONObject parseObject = JSONObject.parseObject(responseContent);
-		PhoneAccessToken accessToken = JSONObject.toJavaObject(parseObject, PhoneAccessToken.class);
-		return accessToken;
-	}
+    /**
+     * <p>Title: getAccessToken</p>
+     * <p>Description: 用户授权后获取用户唯一标识 </p>
+     *
+     * @return
+     */
+    @Override
+    public PhoneAccessToken getPhoneAccessToken() {
+        String accessTokenUrl = HttpParame.PHONE_TOKEN_URL;
+        accessTokenUrl = accessTokenUrl.replaceAll("XAPPID", PropertiesUtil.getValue(HttpParame.APPIDX));
+        accessTokenUrl = accessTokenUrl.replaceAll("XSECRET", PropertiesUtil.getValue(HttpParame.SECRETX));
+        String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl);
+        if (responseContent == null || responseContent == "") {
+            return null;
+        }
+        JSONObject parseObject = JSONObject.parseObject(responseContent);
+        PhoneAccessToken accessToken = JSONObject.toJavaObject(parseObject, PhoneAccessToken.class);
+        return accessToken;
+    }
 
 
-	/**
-	 * <p>Title: getUserUnionID</p>
-	 * <p>Description: 获取用户统一标识。针对一个微信开放平台帐号下的应用,
-	 * 同一用户的unionid在多个应用中是唯一的。
-	 * 此方法不牵扯到多个应用时候可以不用。
-	 *
-	 * 此处用到只是为了获取微信扫码用户的省份城市(此信息获取的只是微信用户所填的城市省份,
-	 * 并不是用户的实时位置信息,如果用户未填写是获取不到的。)
-	 * </p>
-	 * @return
-	 */
-	@Override
-	public WechatUserUnionID getUserUnionID() {
-		String unionIDUrl = HttpParame.GET_UNIONID_URL;
-		unionIDUrl = unionIDUrl.replace("ACCESS_TOKEN", PropertiesUtil.getValue(HttpParame.ACCESS_TOKEN));
-		unionIDUrl = unionIDUrl.replace("OPENID", PropertiesUtil.getValue(HttpParame.OPENID));
-		String responseContent = HttpClientUtils.getInstance().sendHttpGet(unionIDUrl);
-		if (responseContent == null || responseContent == "") {
-			return null;
-		}
-		JSONObject parseObject = JSONObject.parseObject(responseContent);
-		WechatUserUnionID userUnionID = JSONObject.toJavaObject(parseObject, WechatUserUnionID.class);
-		return userUnionID;
-	}
+    /**
+     * <p>Title: getUserUnionID</p>
+     * <p>Description: 获取用户统一标识。针对一个微信开放平台帐号下的应用,
+     * 同一用户的unionid在多个应用中是唯一的。
+     * 此方法不牵扯到多个应用时候可以不用。
+     * <p>
+     * 此处用到只是为了获取微信扫码用户的省份城市(此信息获取的只是微信用户所填的城市省份,
+     * 并不是用户的实时位置信息,如果用户未填写是获取不到的。)
+     * </p>
+     *
+     * @return
+     */
+    @Override
+    public WechatUserUnionID getUserUnionID() {
+        String unionIDUrl = HttpParame.GET_UNIONID_URL;
+        unionIDUrl = unionIDUrl.replace("ACCESS_TOKEN", PropertiesUtil.getValue(HttpParame.ACCESS_TOKEN));
+        unionIDUrl = unionIDUrl.replace("OPENID", PropertiesUtil.getValue(HttpParame.OPENID));
+        String responseContent = HttpClientUtils.getInstance().sendHttpGet(unionIDUrl);
+        if (responseContent == null || responseContent == "") {
+            return null;
+        }
+        JSONObject parseObject = JSONObject.parseObject(responseContent);
+        WechatUserUnionID userUnionID = JSONObject.toJavaObject(parseObject, WechatUserUnionID.class);
+        return userUnionID;
+    }
 
 
-	@Override
-	public SmartUser selectByOpenid(String openid){
-		QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
-		queryWrapper.eq( "open_id", openid);
-		List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
-		if (users==null || users.size()<=0){
-			return null;
-		}
-		return users.get(0);
-	}
+    @Override
+    public SmartUser selectByOpenid(String openid) {
+        QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("open_id", openid);
+        List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
+        if (users == null || users.size() <= 0) {
+            return null;
+        }
+        return users.get(0);
+    }
 
 
-	@Override
-	public SmartUser selectTeacherByOpenid(String openid){
-		QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
-		queryWrapper.eq( "open_id", openid);
-		queryWrapper.eq( "identity_id", eIdentityStatu.Teacher.getValue());
-		List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
-		if (users==null || users.size()<=0){
-			return null;
-		}
-		return users.get(0);
-	}
+    @Override
+    public SmartUser selectTeacherByOpenid(String openid) {
+        QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("open_id", openid);
+        queryWrapper.eq("identity_id", eIdentityStatu.Teacher.getValue());
+        List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
+        if (users == null || users.size() <= 0) {
+            return null;
+        }
+        return users.get(0);
+    }
 
 
-	@Override
-	public SmartUser selectByCardNo(String CardNo){
-		QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
-		queryWrapper.eq( "card_no", CardNo);
-		List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
-		if (users==null || users.size()<=0){
-			return null;
-		}
-		return users.get(0);
-	}
+    @Override
+    public SmartUser selectByCardNo(String CardNo) {
+        QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("card_no", CardNo);
+        List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
+        if (users == null || users.size() <= 0) {
+            return null;
+        }
+        return users.get(0);
+    }
 
 
-	@Override
-	public int updateSmartUser(SmartUser sa) {
-		int result = smartUserMapper.updateById(sa);
-		return result;
-	}
+    @Override
+    public int updateSmartUser(SmartUser sa) {
+        int result = smartUserMapper.updateById(sa);
+        return result;
+    }
 
 
-	// 用户类别统计
-	@Override
-	public List<Tj> getUserIdTj(){
-		return wechatScanLoginMapper.getUserIdTj();
-	}
+    // 用户类别统计
+    @Override
+    public List<Tj> getUserIdTj() {
+        return wechatScanLoginMapper.getUserIdTj();
+    }
 
 
-	// 用户总数
-	@Override
-	public All getUserIdTjt(){
-		return wechatScanLoginMapper.getUserIdTjt();
-	}
+    // 用户总数
+    @Override
+    public All getUserIdTjt() {
+        return wechatScanLoginMapper.getUserIdTjt();
+    }
 
 
-	// 水表总计
-	@Override
-	public DAll getWaterTj(){
-		return wechatScanLoginMapper.getWaterTj();
-	}
+    // 水表总计
+    @Override
+    public DAll getWaterTj() {
+        return wechatScanLoginMapper.getWaterTj();
+    }
 
 
-	// 电表总计
-	@Override
-	public DAll getElcTj(){
-		return wechatScanLoginMapper.getElcTj();
-	}
+    // 电表总计
+    @Override
+    public DAll getElcTj() {
+        return wechatScanLoginMapper.getElcTj();
+    }
 
 
-	@Override
-	public void insertMonthMeter(String month){
-		List<EnergyTj> waterl = wechatScanLoginMapper.getWaterTjByMonAndBuild(month);
-		List<EnergyTj> elcl = wechatScanLoginMapper.getElcTjByMonAndBuild(month);
-		for (int i = 0; i < waterl.size(); i++) {
-			EnergyTj e = wechatScanLoginMapper.getTjByMon(waterl.get(i).getName(),waterl.get(i).getMeterName(),month,"0");
-			if (e==null){
-				waterl.get(i).setType(0);
-				waterl.get(i).setDate(month);
-				wechatScanLoginMapper.insertMonthMeter(waterl.get(i));
-			} else {
-				waterl.get(i).setId(e.getId());
-				wechatScanLoginMapper.updateMonthMeter(waterl.get(i));
-			}
-		}
-		for (int j = 0; j < elcl.size(); j++) {
-			EnergyTj w = wechatScanLoginMapper.getTjByMon(elcl.get(j).getName(),elcl.get(j).getMeterName(),month,"1");
-			if (w==null){
-				elcl.get(j).setType(1);
-				elcl.get(j).setDate(month);
-				wechatScanLoginMapper.insertMonthMeter(elcl.get(j));
-			} else {
-				elcl.get(j).setId(w.getId());
-				wechatScanLoginMapper.updateMonthMeter(elcl.get(j));
-			}
-		}
-	}
+    @Override
+    public void insertMonthMeter(String month) {
+        List<EnergyTj> waterl = wechatScanLoginMapper.getWaterTjByMonAndBuild(month);
+        List<EnergyTj> elcl = wechatScanLoginMapper.getElcTjByMonAndBuild(month);
+        for (int i = 0; i < waterl.size(); i++) {
+            EnergyTj e = wechatScanLoginMapper.getTjByMon(waterl.get(i).getName(), waterl.get(i).getMeterName(), month, "0");
+            if (e == null) {
+                waterl.get(i).setType(0);
+                waterl.get(i).setDate(month);
+                wechatScanLoginMapper.insertMonthMeter(waterl.get(i));
+            } else {
+                waterl.get(i).setId(e.getId());
+                wechatScanLoginMapper.updateMonthMeter(waterl.get(i));
+            }
+        }
+        for (int j = 0; j < elcl.size(); j++) {
+            EnergyTj w = wechatScanLoginMapper.getTjByMon(elcl.get(j).getName(), elcl.get(j).getMeterName(), month, "1");
+            if (w == null) {
+                elcl.get(j).setType(1);
+                elcl.get(j).setDate(month);
+                wechatScanLoginMapper.insertMonthMeter(elcl.get(j));
+            } else {
+                elcl.get(j).setId(w.getId());
+                wechatScanLoginMapper.updateMonthMeter(elcl.get(j));
+            }
+        }
+    }
 
 
-	@Override
-	public void insertDayMeter(String day){
-		List<EnergyTj> waterl = wechatScanLoginMapper.getWaterTjByDayAndBuild(day);
-		List<EnergyTj> elcl = wechatScanLoginMapper.getElcTjByDayAndBuild(day);
-		for (int i = 0; i < waterl.size(); i++) {
-			EnergyTj w = wechatScanLoginMapper.getTjByDay(waterl.get(i).getName(),waterl.get(i).getMeterName(),day,"0");
-			if (w==null){
-				waterl.get(i).setType(0);
-				waterl.get(i).setDate(day);
-				wechatScanLoginMapper.insertDayMeter(waterl.get(i));
-			} else {
-				waterl.get(i).setId(w.getId());
-				wechatScanLoginMapper.updateDayMeter(waterl.get(i));
-			}
-		}
-		for (int j = 0; j < elcl.size(); j++) {
-			EnergyTj e = wechatScanLoginMapper.getTjByDay(elcl.get(j).getName(),elcl.get(j).getMeterName(),day,"1");
-			if (e==null){
-				elcl.get(j).setType(1);
-				elcl.get(j).setDate(day);
-				wechatScanLoginMapper.insertDayMeter(elcl.get(j));
-			} else {
-				elcl.get(j).setId(e.getId());
-				wechatScanLoginMapper.updateDayMeter(elcl.get(j));
-			}
-		}
-	}
+    @Override
+    public void insertDayMeter(String day) {
+        List<EnergyTj> waterl = wechatScanLoginMapper.getWaterTjByDayAndBuild(day);
+        List<EnergyTj> elcl = wechatScanLoginMapper.getElcTjByDayAndBuild(day);
+        for (int i = 0; i < waterl.size(); i++) {
+            EnergyTj w = wechatScanLoginMapper.getTjByDay(waterl.get(i).getName(), waterl.get(i).getMeterName(), day, "0");
+            if (w == null) {
+                waterl.get(i).setType(0);
+                waterl.get(i).setDate(day);
+                wechatScanLoginMapper.insertDayMeter(waterl.get(i));
+            } else {
+                waterl.get(i).setId(w.getId());
+                wechatScanLoginMapper.updateDayMeter(waterl.get(i));
+            }
+        }
+        for (int j = 0; j < elcl.size(); j++) {
+            EnergyTj e = wechatScanLoginMapper.getTjByDay(elcl.get(j).getName(), elcl.get(j).getMeterName(), day, "1");
+            if (e == null) {
+                elcl.get(j).setType(1);
+                elcl.get(j).setDate(day);
+                wechatScanLoginMapper.insertDayMeter(elcl.get(j));
+            } else {
+                elcl.get(j).setId(e.getId());
+                wechatScanLoginMapper.updateDayMeter(elcl.get(j));
+            }
+        }
+    }
 
 
-	// 每个月各水表数据
-	@Override
-	public List<MonthMeterDetail> getMonWater() throws ParseException {
-		List<String> dates = TimeExchange2.getLastSevenMonth();
-		List<MonthMeterDetail> lm = new ArrayList<>();
-		for (int i = 0; i < dates.size(); i++) {
-			MonthMeterDetail mm = new MonthMeterDetail();
-			List<Tj> list = wechatScanLoginMapper.getMonWater(dates.get(i));
-			mm.setDate(TimeExchange2.ToSimpleMonth(TimeExchange2.StringToDate(dates.get(i),"yyyy-MM"))+"月");
-			mm.setLt(list);
-			lm.add(mm);
-		}
-		return lm;
-	}
+    // 每个月各水表数据
+    @Override
+    public List<MonthMeterDetail> getMonWater() throws ParseException {
+        List<String> dates = TimeExchange2.getLastSevenMonth();
+        List<MonthMeterDetail> lm = new ArrayList<>();
+        List<Tj> list = wechatScanLoginMapper.getMonWaters(dates.get(0), dates.get(dates.size() - 1));
+        for (int i = 0; i < dates.size(); i++) {
+            String date = dates.get(i);
+            MonthMeterDetail mm = new MonthMeterDetail();
+            mm.setDate(TimeExchange2.ToSimpleMonth(TimeExchange2.StringToDate(date, "yyyy-MM")) + "月");
+            List<Tj> ownerList = list.stream().filter(e -> e.getDate().equals(date)).collect(Collectors.toList());
+            if (ownerList != null && ownerList.size() > 0) {
+                List<String> names = ownerList.stream().map(Tj::getName).distinct().collect(Collectors.toList());
+                List<Tj> tjs = new ArrayList<>();
+                for (String name : names) {
+                    Tj data = new Tj();
+                    data.setName(name);
+                    BigDecimal ownerNum = new BigDecimal(0.0);
+                    for (Tj ol : ownerList) {
+                        if (ol.getName().equals(name)) {
+                            ownerNum = ownerNum.add(new BigDecimal(ol.getNum()));
+                        }
+                    }
+                    data.setNum(ownerNum.doubleValue());
+                    tjs.add(data);
+                }
+                mm.setLt(tjs);
+                lm.add(mm);
+            }
 
 
-	// 每个月各电表数据
-	@Override
-	public List<MonthMeterDetail> getMonElc() throws ParseException {
-		List<String> dates = TimeExchange2.getLastSevenMonth();
-		List<MonthMeterDetail> lm = new ArrayList<>();
-		for (int i = 0; i < dates.size(); i++) {
-			MonthMeterDetail mm = new MonthMeterDetail();
-			List<Tj> list = wechatScanLoginMapper.getMonElc(dates.get(i));
-			mm.setDate(TimeExchange2.ToSimpleMonth(TimeExchange2.StringToDate(dates.get(i),"yyyy-MM"))+"月");
-			mm.setLt(list);
-			lm.add(mm);
-		}
-		return lm;
-	}
+        }
+        return lm;
+    }
 
 
-	// 区域能耗统计
-	@Override
-	public PageInfo<MeterMonthData> getMeterMonthPage(@Param("meterMonthData")MeterMonthData meterMonthData){
-		List<MeterMonthData> list = wechatScanLoginMapper.getMeterMonthPage(meterMonthData);
-		PageInfo<MeterMonthData> meterPageInfo = new PageInfo<>(list);
-		return meterPageInfo;
-	}
+    // 每个月各电表数据
+    @Override
+    public List<MonthMeterDetail> getMonElc() throws ParseException {
+        List<String> dates = TimeExchange2.getLastSevenMonth();
+        List<MonthMeterDetail> lm = new ArrayList<>();
+        List<Tj> list = wechatScanLoginMapper.getMonElcs(dates.get(0), dates.get(dates.size() - 1));
 
 
-	// 实时抄表
-	@Override
-	public PageInfo<MeterMonthDataVo> getMeterDayPage(@Param("meterMonthData")MeterMonthData meterMonthData){
-		List<MeterMonthDataVo> list = wechatScanLoginMapper.getMeterDayPage(meterMonthData);
-		PageInfo<MeterMonthDataVo> meterPageInfo = new PageInfo<>(list);
-		return meterPageInfo;
-	}
+        for (int i = 0; i < dates.size(); i++) {
+            String date = dates.get(i);
+            MonthMeterDetail mm = new MonthMeterDetail();
+            mm.setDate(TimeExchange2.ToSimpleMonth(TimeExchange2.StringToDate(date, "yyyy-MM")) + "月");
+            List<Tj> ownerList = list.stream().filter(e -> e.getDate().equals(date)).collect(Collectors.toList());
+            if (ownerList != null && ownerList.size() > 0) {
+                List<String> names = ownerList.stream().map(Tj::getName).distinct().collect(Collectors.toList());
+                List<Tj> tjs = new ArrayList<>();
+                for (String name : names) {
+                    Tj data = new Tj();
+                    data.setName(name);
+                    BigDecimal ownerNum = new BigDecimal(0.0);
+                    for (Tj ol : ownerList) {
+                        if (ol.getName().equals(name)) {
+                            ownerNum = ownerNum.add(new BigDecimal(ol.getNum()));
+                        }
+                    }
+                    data.setNum(ownerNum.doubleValue());
+                    tjs.add(data);
+                }
+                mm.setLt(tjs);
+                lm.add(mm);
+            }
 
 
-	@Override
-	public PageInfo<com.template.model.pojo.MonthMeterDetail> getMeterMonthPageDatas(MeterMonthData meterMonthData) {
-		List<com.template.model.pojo.MonthMeterDetail> list = wechatScanLoginMapper.getMeterMonthPageDatas(meterMonthData);
-		PageInfo<com.template.model.pojo.MonthMeterDetail> meterPageInfo = new PageInfo<>(list);
-		return meterPageInfo;
-	}
+        }
+        return lm;
+    }
+
+    // 区域能耗统计
+    @Override
+    public PageInfo<MeterMonthData> getMeterMonthPage(@Param("meterMonthData") MeterMonthData meterMonthData) {
+        List<MeterMonthData> list = wechatScanLoginMapper.getMeterMonthPage(meterMonthData);
+        PageInfo<MeterMonthData> meterPageInfo = new PageInfo<>(list);
+        return meterPageInfo;
+    }
+
+    // 实时抄表
+    @Override
+    public PageInfo<MeterMonthDataVo> getMeterDayPage(@Param("meterMonthData") MeterMonthData meterMonthData) {
+        List<MeterMonthDataVo> list = wechatScanLoginMapper.getMeterDayPage(meterMonthData);
+        PageInfo<MeterMonthDataVo> meterPageInfo = new PageInfo<>(list);
+        return meterPageInfo;
+    }
+
+    @Override
+    public PageInfo<com.template.model.pojo.MonthMeterDetail> getMeterMonthPageDatas(MeterMonthData meterMonthData) {
+        List<com.template.model.pojo.MonthMeterDetail> list = wechatScanLoginMapper.getMeterMonthPageDatas(meterMonthData);
+        PageInfo<com.template.model.pojo.MonthMeterDetail> meterPageInfo = new PageInfo<>(list);
+        return meterPageInfo;
+    }
 }
 }

+ 11 - 0
src/main/resources/mapper/template/WechatScanLoginMapper.xml

@@ -5,6 +5,7 @@
     <resultMap id="Tj" type="com.template.model.tongji.Tj">
     <resultMap id="Tj" type="com.template.model.tongji.Tj">
         <result property="name" column="name"/>
         <result property="name" column="name"/>
         <result property="num" column="num"/>
         <result property="num" column="num"/>
+        <result property="date" column="date"/>
     </resultMap>
     </resultMap>
 
 
     <resultMap id="Tjt" type="com.template.model.tongji.All">
     <resultMap id="Tjt" type="com.template.model.tongji.All">
@@ -204,6 +205,16 @@
         select * from `month_meter_detail` where type=0 and `date`=#{month}
         select * from `month_meter_detail` where type=0 and `date`=#{month}
     </select>
     </select>
 
 
+    <!--每个月水费数据-->
+    <select id="getMonWaters" parameterType="String" resultMap="Tj">
+        select * from `month_meter_detail` where type=0 and `date` &gt;= #{startMonth} and `date` &lt;= #{endMonth}
+    </select>
+
+    <!--每个月电费数据-->
+    <select id="getMonElcs" parameterType="String" resultMap="Tj">
+        select * from `month_meter_detail` where type=1 and `date` &gt;= #{startMonth} and `date` &lt;= #{endMonth}
+    </select>
+
     <!--每个月电费数据-->
     <!--每个月电费数据-->
     <select id="getMonElc" parameterType="String" resultMap="Tj">
     <select id="getMonElc" parameterType="String" resultMap="Tj">
         select * from `month_meter_detail` where type=1 and `date`=#{month}
         select * from `month_meter_detail` where type=1 and `date`=#{month}