Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

ZhouRuiTing 5 anni fa
parent
commit
9e89160323
20 ha cambiato i file con 446 aggiunte e 220 eliminazioni
  1. 41 83
      fhKeeper/.idea/workspace.xml
  2. 8 0
      fhKeeper/formulahousekeeper/.gitignore
  3. 3 3
      fhKeeper/formulahousekeeper/inva_4_tivo/index.html
  4. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TimeCalculationShowController.java
  5. 3 9
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Company.java
  6. 71 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeCalculationShow.java
  7. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserVO.java
  8. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TimeCalculationShowMapper.java
  9. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TimeCalculationShowService.java
  10. 140 77
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ScreenshotServiceImpl.java
  11. 16 12
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TimeCalculationServiceImpl.java
  12. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TimeCalculationShowServiceImpl.java
  13. 43 29
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  14. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/CodeGenerator.java
  15. 2 3
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CompanyMapper.xml
  16. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeCalculationShowMapper.xml
  17. 2 1
      fhKeeper/formulahousekeeper/mywork/home.cpp
  18. 4 0
      fhKeeper/formulahousekeeper/mywork/mainwindow.cpp
  19. 1 2
      fhKeeper/formulahousekeeper/mywork/mainwindow.h
  20. 13 0
      fhKeeper/formulahousekeeper/mywork/mainwindow.ui

+ 41 - 83
fhKeeper/.idea/workspace.xml

@@ -1,15 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ChangeListManager">
-    <list default="true" id="cb73d8d0-9c49-4c8b-8fdc-51c4a9bc4409" name="Default Changelist" comment="官网修改">
-      <change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Company.java" beforeDir="false" afterPath="$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Company.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/CodeGenerator.java" beforeDir="false" afterPath="$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/CodeGenerator.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/resources/mapper/CompanyMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/resources/mapper/CompanyMapper.xml" afterDir="false" />
-    </list>
+    <list default="true" id="cb73d8d0-9c49-4c8b-8fdc-51c4a9bc4409" name="Default Changelist" comment="" />
     <ignored path="$PROJECT_DIR$/formulahousekeeper/target/" />
     <ignored path="$PROJECT_DIR$/formulahousekeeper/management-platform/target/" />
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
@@ -29,8 +21,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="301">
-              <caret line="47" column="34" lean-forward="true" selection-start-line="47" selection-start-column="34" selection-end-line="47" selection-end-column="34" />
+            <state relative-caret-position="228">
+              <caret line="47" column="36" lean-forward="true" selection-start-line="47" selection-start-column="36" selection-end-line="47" selection-end-column="36" />
             </state>
           </provider>
         </entry>
@@ -38,7 +30,7 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="208">
+            <state relative-caret-position="195">
               <caret line="20" column="16" selection-start-line="20" selection-start-column="16" selection-end-line="20" selection-end-column="16" />
             </state>
           </provider>
@@ -47,8 +39,8 @@
       <file pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="1031">
-              <caret line="125" column="13" selection-start-line="125" selection-start-column="13" selection-end-line="125" selection-end-column="13" />
+            <state relative-caret-position="306">
+              <caret line="120" column="52" lean-forward="true" selection-start-line="120" selection-start-column="52" selection-end-line="120" selection-end-column="52" />
             </state>
           </provider>
         </entry>
@@ -187,7 +179,7 @@
       <select />
     </treeState>
   </component>
-  <component name="ProjectFrameBounds" extendedState="6">
+  <component name="ProjectFrameBounds" extendedState="7">
     <option name="x" value="200" />
     <option name="y" value="150" />
     <option name="width" value="1190" />
@@ -263,48 +255,6 @@
               <item name="platform" type="462c0819:PsiDirectoryNode" />
               <item name="controller" type="462c0819:PsiDirectoryNode" />
             </path>
-            <path>
-              <item name="fhKeeper" type="b2602c69:ProjectViewProjectNode" />
-              <item name="fhKeeper" type="462c0819:PsiDirectoryNode" />
-              <item name="formulahousekeeper" type="462c0819:PsiDirectoryNode" />
-              <item name="management-platform" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="main" type="462c0819:PsiDirectoryNode" />
-              <item name="java" type="462c0819:PsiDirectoryNode" />
-              <item name="platform" type="462c0819:PsiDirectoryNode" />
-              <item name="entity" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="fhKeeper" type="b2602c69:ProjectViewProjectNode" />
-              <item name="fhKeeper" type="462c0819:PsiDirectoryNode" />
-              <item name="formulahousekeeper" type="462c0819:PsiDirectoryNode" />
-              <item name="management-platform" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="main" type="462c0819:PsiDirectoryNode" />
-              <item name="java" type="462c0819:PsiDirectoryNode" />
-              <item name="platform" type="462c0819:PsiDirectoryNode" />
-              <item name="entity" type="462c0819:PsiDirectoryNode" />
-              <item name="vo" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="fhKeeper" type="b2602c69:ProjectViewProjectNode" />
-              <item name="fhKeeper" type="462c0819:PsiDirectoryNode" />
-              <item name="formulahousekeeper" type="462c0819:PsiDirectoryNode" />
-              <item name="management-platform" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="main" type="462c0819:PsiDirectoryNode" />
-              <item name="resources" type="462c0819:PsiDirectoryNode" />
-            </path>
-            <path>
-              <item name="fhKeeper" type="b2602c69:ProjectViewProjectNode" />
-              <item name="fhKeeper" type="462c0819:PsiDirectoryNode" />
-              <item name="formulahousekeeper" type="462c0819:PsiDirectoryNode" />
-              <item name="management-platform" type="462c0819:PsiDirectoryNode" />
-              <item name="src" type="462c0819:PsiDirectoryNode" />
-              <item name="main" type="462c0819:PsiDirectoryNode" />
-              <item name="resources" type="462c0819:PsiDirectoryNode" />
-              <item name="mapper" type="462c0819:PsiDirectoryNode" />
-            </path>
           </expand>
           <select />
         </subPane>
@@ -353,7 +303,7 @@
       </list>
     </option>
   </component>
-  <component name="RunManager" selected="Application.CodeGenerator">
+  <component name="RunManager" selected="Spring Boot.PlatformStartApplication">
     <configuration name="AuthService" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
       <option name="MAIN_CLASS_NAME" value="com.management.platform.util.AuthService" />
       <module name="management-platform" />
@@ -438,8 +388,8 @@
     </list>
     <recent_temporary>
       <list>
-        <item itemvalue="Application.CodeGenerator" />
         <item itemvalue="Spring Boot.PlatformStartApplication" />
+        <item itemvalue="Application.CodeGenerator" />
         <item itemvalue="JUnit.TestApplicationTests.contextLoads" />
         <item itemvalue="JUnit.TestApplicationTests" />
         <item itemvalue="Application.AuthService" />
@@ -466,7 +416,7 @@
       <workItem from="1580712530176" duration="1479000" />
       <workItem from="1580714920655" duration="1048000" />
       <workItem from="1580716496483" duration="548000" />
-      <workItem from="1580802425044" duration="3235000" />
+      <workItem from="1580802425044" duration="6364000" />
     </task>
     <task id="LOCAL-00001" summary="构建">
       <created>1577760711854</created>
@@ -559,7 +509,14 @@
       <option name="project" value="LOCAL" />
       <updated>1580714103728</updated>
     </task>
-    <option name="localTasksCounter" value="14" />
+    <task id="LOCAL-00014" summary="添加公司用户注册的时候,三天试用时间,修改登录逻辑,检测会员是否到期。修改数据库company的字段">
+      <created>1580805783046</created>
+      <option name="number" value="00014" />
+      <option name="presentableId" value="LOCAL-00014" />
+      <option name="project" value="LOCAL" />
+      <updated>1580805783046</updated>
+    </task>
+    <option name="localTasksCounter" value="15" />
     <servers />
   </component>
   <component name="TestHistory">
@@ -586,13 +543,13 @@
     </history-entry>
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="30344000" />
+    <option name="totallyTimeSpent" value="33473000" />
   </component>
   <component name="ToolWindowManager">
-    <frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
+    <frame x="-8" y="-8" width="1936" height="1056" extended-state="7" />
     <editor active="true" />
     <layout>
-      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.18923241" />
+      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.18923241" />
       <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
       <window_info id="Designer" order="2" />
       <window_info id="JRebel" order="3" side_tool="true" />
@@ -603,7 +560,7 @@
       <window_info id="Web" order="8" side_tool="true" />
       <window_info anchor="bottom" id="Message" order="0" />
       <window_info anchor="bottom" id="Find" order="1" weight="0.32890365" />
-      <window_info anchor="bottom" id="Run" order="2" sideWeight="0.49840087" weight="0.37635574" />
+      <window_info anchor="bottom" id="Run" order="2" sideWeight="0.4978678" weight="0.30585682" />
       <window_info anchor="bottom" id="Debug" order="3" weight="0.2978959" />
       <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
       <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
@@ -611,10 +568,10 @@
       <window_info anchor="bottom" id="Spring" order="7" />
       <window_info anchor="bottom" id="Terminal" order="8" />
       <window_info anchor="bottom" id="Docker" order="9" show_stripe_button="false" />
-      <window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.5021322" side_tool="true" visible="true" weight="0.2657267" />
+      <window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.5021322" side_tool="true" weight="0.37635574" />
       <window_info anchor="bottom" id="Java Enterprise" order="11" />
       <window_info anchor="bottom" id="Database Changes" order="12" />
-      <window_info anchor="bottom" id="Version Control" order="13" sideWeight="0.4978678" visible="true" weight="0.2657267" />
+      <window_info anchor="bottom" id="Version Control" order="13" sideWeight="0.4978678" weight="0.2657267" />
       <window_info anchor="bottom" id="JRebel Executor" order="14" sideWeight="0.8566058" weight="0.45071983" />
       <window_info anchor="bottom" id="JRebel Console" order="15" sideWeight="0.50107414" side_tool="true" weight="0.2580288" />
       <window_info anchor="bottom" id="Messages" order="16" sideWeight="0.49946696" weight="0.3286334" />
@@ -622,7 +579,7 @@
       <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
       <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
       <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
-      <window_info anchor="right" id="Maven" order="3" visible="true" weight="0.09328358" />
+      <window_info active="true" anchor="right" id="Maven" order="3" visible="true" weight="0.09328358" />
       <window_info anchor="right" id="Palette" order="4" />
       <window_info anchor="right" id="Capture Analysis" order="5" />
       <window_info anchor="right" id="Maven Projects" order="6" />
@@ -656,7 +613,8 @@
     <MESSAGE value="暂停定时任务" />
     <MESSAGE value="官网修改完成" />
     <MESSAGE value="官网修改" />
-    <option name="LAST_COMMIT_MESSAGE" value="官网修改" />
+    <MESSAGE value="添加公司用户注册的时候,三天试用时间,修改登录逻辑,检测会员是否到期。修改数据库company的字段" />
+    <option name="LAST_COMMIT_MESSAGE" value="添加公司用户注册的时候,三天试用时间,修改登录逻辑,检测会员是否到期。修改数据库company的字段" />
   </component>
   <component name="editorHistoryManager">
     <entry file="file://$PROJECT_DIR$/formulahousekeeper/formulahousekeeper.iml">
@@ -872,38 +830,38 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java">
+    <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ScreenshotVO.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="301">
-          <caret line="47" column="34" lean-forward="true" selection-start-line="47" selection-start-column="34" selection-end-line="47" selection-end-column="34" />
+        <state relative-caret-position="278">
+          <caret line="14" column="31" lean-forward="true" selection-start-line="14" selection-start-column="31" selection-end-line="14" selection-end-column="31" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java">
+    <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserVO.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="208">
-          <caret line="20" column="16" selection-start-line="20" selection-start-column="16" selection-end-line="20" selection-end-column="16" />
+        <state relative-caret-position="296">
+          <caret line="9" lean-forward="true" selection-start-line="9" selection-end-line="9" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ScreenshotVO.java">
+    <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="278">
-          <caret line="14" column="31" lean-forward="true" selection-start-line="14" selection-start-column="31" selection-end-line="14" selection-end-column="31" />
+        <state relative-caret-position="228">
+          <caret line="47" column="36" lean-forward="true" selection-start-line="47" selection-start-column="36" selection-end-line="47" selection-end-column="36" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserVO.java">
+    <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="296">
-          <caret line="9" lean-forward="true" selection-start-line="9" selection-end-line="9" />
+        <state relative-caret-position="195">
+          <caret line="20" column="16" selection-start-line="20" selection-start-column="16" selection-end-line="20" selection-end-column="16" />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1031">
-          <caret line="125" column="13" selection-start-line="125" selection-start-column="13" selection-end-line="125" selection-end-column="13" />
+        <state relative-caret-position="306">
+          <caret line="120" column="52" lean-forward="true" selection-start-line="120" selection-start-column="52" selection-end-line="120" selection-end-column="52" />
         </state>
       </provider>
     </entry>

+ 8 - 0
fhKeeper/formulahousekeeper/.gitignore

@@ -23,3 +23,11 @@ gen
 /.idea/modules.xml
 
 target/
+### Example user template template
+### Example user template
+
+# IntelliJ project files
+.idea
+*.iml
+out
+gen

+ 3 - 3
fhKeeper/formulahousekeeper/inva_4_tivo/index.html

@@ -71,7 +71,7 @@
                         <div class="text-container">
                             <h1>最贴心的工时管理工具</h1>
                             <p class="p-large">工时管家利用图像识别技术,精准判断员工桌面运行软件,可统计员工每天工时分配情况,如工作、娱乐等;领导可通过后台查看员工实时桌面,并对员工异常工作状态做出提醒。</p>
-                            <a class="btn-solid-lg page-scroll" href="./download/WorkTime.exe" download="工时管家">免费下载试用</a>
+                            <a class="btn-solid-lg page-scroll" href="http://worktime.ttkuaiban.com/#/login" download="工时管家">免费试用</a>
                         </div>
                     </div>
                     <div class="col-lg-6 col-xl-7">
@@ -97,7 +97,7 @@
                         <p>工时管家客户端会截取保存员工当前桌面, 通过图像分析, 精准判断员工正在操作的软件,
                             获知该员工当前的工作状态, 如编程、设计、查阅资料、处理文档、玩游戏、听音乐等; 员工通过客户端可查看自己每天的工作时间段,
                             填写工作日报。</p>
-                        <a class="btn-solid-reg page-scroll" href="./download/WorkTime.exe" download="工时管家">去下载</a>
+                        <a class="btn-solid-reg page-scroll" href="http://worktime.ttkuaiban.com/#/login" download="工时管家">免费试用</a>
                     </div>
                 </div>
                 <div class="col-lg-6">
@@ -122,7 +122,7 @@
                         <h3>工时管家管理后台</h3>
                         <p>领导通过后台可查看客户端所截取的员工电脑桌面图像, 通过图像识别技术可对员工异常工作状态进行提醒,如玩游戏、听音乐、看影视剧等;
                             并对每个员工的工时进行分类统计,支持导出报表;支持项目管理,领导可根据项目,查看每个员工在该项目花费的工时;领导可查看员工通过客户端所填写的工作日报及异常申请。</p>
-                        <a class="btn-solid-reg page-scroll" href="http://worktime.ttkuaiban.com/#/login" target="_blank">去登录</a>
+                        <a class="btn-solid-reg page-scroll" href="http://worktime.ttkuaiban.com/#/login" target="_blank">免费试用</a>
                     </div>
                 </div>
             </div>

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TimeCalculationShowController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-05
+ */
+@RestController
+@RequestMapping("/time-calculation-show")
+public class TimeCalculationShowController {
+
+}
+

+ 3 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Company.java

@@ -16,7 +16,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author 吴涛涛
- * @since 2020-02-04
+ * @since 2020-02-05
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -40,8 +40,8 @@ public class Company extends Model<Company> {
     /**
      * 公司规模
      */
-    @TableField("staff_count")
-    private Integer staffCount;
+    @TableField("staff_count_max")
+    private Integer staffCountMax;
 
     /**
      * 会员到期时间
@@ -49,12 +49,6 @@ public class Company extends Model<Company> {
     @TableField("expiration_date")
     private LocalDateTime expirationDate;
 
-    /**
-     * 试用到期时间
-     */
-    @TableField("trial_expiration_time")
-    private LocalDateTime trialExpirationTime;
-
     /**
      * 选择的套餐(单位:/年)
      */

+ 71 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeCalculationShow.java

@@ -0,0 +1,71 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class TimeCalculationShow extends Model<TimeCalculationShow> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 时间记录表主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户表主键
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 日期
+     */
+    @TableField("date")
+    private LocalDate date;
+
+    /**
+     * 开始时间
+     */
+    @TableField("start_time")
+    private LocalTime startTime;
+
+    /**
+     * 结束时间
+     */
+    @TableField("end_time")
+    private LocalTime endTime;
+
+    /**
+     * 持续时间 秒
+     */
+    @TableField("duration")
+    private Integer duration;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserVO.java

@@ -2,8 +2,13 @@ package com.management.platform.entity.vo;
 
 import com.management.platform.entity.User;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 
 @Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
 public class UserVO extends User {
     private String companyName;
+    private Long remainingTime;
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TimeCalculationShowMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.TimeCalculationShow;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-05
+ */
+public interface TimeCalculationShowMapper extends BaseMapper<TimeCalculationShow> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TimeCalculationShowService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.TimeCalculationShow;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-05
+ */
+public interface TimeCalculationShowService extends IService<TimeCalculationShow> {
+
+}

+ 140 - 77
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ScreenshotServiceImpl.java

@@ -1,22 +1,18 @@
 package com.management.platform.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.constant.Constant;
 import com.management.platform.constant.Parameter;
 import com.management.platform.entity.PicContentKeywords;
 import com.management.platform.entity.Screenshot;
 import com.management.platform.entity.TimeCalculation;
-import com.management.platform.entity.User;
+import com.management.platform.entity.TimeCalculationShow;
 import com.management.platform.entity.vo.ScreenshotVO;
 import com.management.platform.mapper.*;
 import com.management.platform.mapper.PicContentKeywordsMapper;
 import com.management.platform.service.ScreenshotService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.*;
-import net.sourceforge.tess4j.Word;
 import org.apache.log4j.Logger;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -68,15 +64,149 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
 
     @Resource
     private ScreenshotMapper screenshotMapper;
-
     @Resource
     private PicContentKeywordsMapper picContentKeywordsMapper;
-
     @Resource
     private TimeCalculationMapper timeCalculationMapper;
-
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private TimeCalculationShowMapper timeCalculationShowMapper;
+
+    //每次获取到截屏后计算并处理
+    private void calculateTime(Screenshot screenshot) {
+        try {
+            //首先拿去处理show表
+            calculateShowTime(screenshot);
+
+            //如果图片类型为空 则认为是 -1 - 其他
+            if (null == screenshot.getPicType()) {
+                screenshot.setPicType(-1);
+            }
+            //默认状态为不连续 如果下面判断是连续才会修改为true
+            Boolean isConsecutive = false,
+                    isSameType = false;
+            //获取本人当天结束时间为准的最后一条记录
+            TimeCalculation latestRecord = timeCalculationMapper.selectOne(new QueryWrapper<TimeCalculation>()
+                    .eq("user_id", screenshot.getUid())
+                    .eq("date", screenshot.getIndate().toLocalDate())
+                    .orderByDesc("end_time")
+                    .last("LIMIT 1"));
+            //截图时间
+            LocalTime currentTime = screenshot.getIndate().toLocalTime();
+            //如果有上一条记录
+            if (latestRecord != null) {
+                //前后两张是否相同类型
+                isSameType = latestRecord.getActionType().equals(screenshot.getPicType());
+                //前后两张时间是否连续 这个目前为600秒
+                LocalTime estimatedTime = latestRecord.getEndTime();
+                Integer durationSecond = ((currentTime.getHour() - estimatedTime.getHour()) * 3600
+                        + (currentTime.getMinute() - estimatedTime.getMinute()) * 60
+                        + (currentTime.getSecond() - estimatedTime.getSecond()));
+                //断层不大于一定时间的话  用来判断是否连续
+                isConsecutive = durationSecond <= DETECTION_INTERVAL;
+            }
+            if (isConsecutive && isSameType) {
+                //如果时间连续 且是同一类型的话 修改上一条记录的最后时间和持续时间
+                LocalTime startTime = latestRecord.getStartTime();
+                //计算新的间隔
+                Integer duration = ((currentTime.getHour() - startTime.getHour()) * 3600
+                        + (currentTime.getMinute() - startTime.getMinute()) * 60
+                        + (currentTime.getSecond() - startTime.getSecond()));
+                //设置新的结束时间和持续时间 保存记录
+                latestRecord.setEndTime(currentTime).setDuration(duration);
+                timeCalculationMapper.updateById(latestRecord);
+            } else {
+                //如果不是连续的话 新增一个记录
+                TimeCalculation timeCalculation = new TimeCalculation();
+                timeCalculation
+                        .setUserId(screenshot.getUid())
+                        //根据截图种类设置行为代号
+                        .setActionType(screenshot.getPicType())
+                        .setDate(screenshot.getIndate().toLocalDate())
+                        //设置开始时间和结束时间都为当前时间
+                        .setStartTime(currentTime)
+                        .setEndTime(currentTime)
+                        //第一次的持续时间默认为最少单位1秒
+                        .setDuration(1);
+                timeCalculationMapper.insert(timeCalculation);
+                if (isConsecutive) {
+                    //然后如果只是类型不同但是能连上的话
+                    LocalTime startTime = latestRecord.getStartTime();
+                    //计算新的间隔
+                    Integer duration = ((currentTime.getHour() - startTime.getHour()) * 3600
+                            + (currentTime.getMinute() - startTime.getMinute()) * 60
+                            + (currentTime.getSecond() - startTime.getSecond()));
+                    //设置新的结束时间和持续时间 保存记录
+                    latestRecord.setEndTime(currentTime).setDuration(duration);
+                    timeCalculationMapper.updateById(latestRecord);
+                }
+            }
+            /*之后可能还需要处理跨越一天的情况*/
+        } catch (NullPointerException e) {
+            //凡是有空指针说明缺少用户id或者时间数据
+            log.info("工作时长统计失败 缺少用户或时间数据");
+        }
+    }
+
+    //每次获取到截屏后计算并处理
+    private void calculateShowTime(Screenshot screenshot) {
+        try {
+            //如果图片类型为空 则认为是 -1 - 其他
+            if (null == screenshot.getPicType()) {
+                screenshot.setPicType(-1);
+            }
+            //默认状态为不连续 如果下面判断是连续才会修改为true
+            Boolean isConsecutive = false;
+            //获取本人当天结束时间为准的最后一条记录
+            TimeCalculationShow latestRecord = timeCalculationShowMapper.selectOne(
+                    new QueryWrapper<TimeCalculationShow>()
+                            .eq("user_id", screenshot.getUid())
+                            .eq("date", screenshot.getIndate().toLocalDate())
+                            .orderByDesc("end_time")
+                            .last("LIMIT 1"));
+            //截图时间
+            LocalTime currentTime = screenshot.getIndate().toLocalTime();
+            //如果有上一条记录
+            if (latestRecord != null) {
+                //前后两张时间是否连续 这个目前为600秒
+                LocalTime estimatedTime = latestRecord.getEndTime();
+                Integer durationSecond = ((currentTime.getHour() - estimatedTime.getHour()) * 3600
+                        + (currentTime.getMinute() - estimatedTime.getMinute()) * 60
+                        + (currentTime.getSecond() - estimatedTime.getSecond()));
+                //断层不大于一定时间的话  用来判断是否连续
+                isConsecutive = durationSecond <= DETECTION_INTERVAL;
+            }
+
+            if (isConsecutive) {
+                //如果是连续的话 修改上一条记录的最后时间和持续时间
+                LocalTime startTime = latestRecord.getStartTime();
+                //计算新的间隔
+                Integer duration = ((currentTime.getHour() - startTime.getHour()) * 3600
+                        + (currentTime.getMinute() - startTime.getMinute()) * 60
+                        + (currentTime.getSecond() - startTime.getSecond()));
+                //设置新的结束时间和持续时间 保存记录
+                latestRecord.setEndTime(currentTime).setDuration(duration);
+                timeCalculationShowMapper.updateById(latestRecord);
+            } else {
+                //如果不是连续的话 新增一个记录
+                TimeCalculationShow timeCalculationShow = new TimeCalculationShow();
+                timeCalculationShow
+                        .setUserId(screenshot.getUid())
+                        .setDate(screenshot.getIndate().toLocalDate())
+                        //设置开始时间和结束时间都为当前时间
+                        .setStartTime(currentTime)
+                        .setEndTime(currentTime)
+                        //第一次的持续时间默认为最少单位1秒
+                        .setDuration(1);
+                timeCalculationShowMapper.insert(timeCalculationShow);
+            }
+            /*之后可能还需要处理跨越一天的情况*/
+        } catch (NullPointerException e) {
+            //凡是有空指针说明缺少用户id或者时间数据
+            log.info("工作时长统计失败 缺少用户或时间数据");
+        }
+    }
 
     //获取所有人最新的截图
     @Override
@@ -249,7 +379,6 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
             return false;
         }
 
-
         //第二步,匹配小说常见词汇,超过5次,认为是小说
         try {
             //填充小说关键字到内存,减少重复读取
@@ -317,7 +446,6 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
         return !hasDifferent;
     }
 
-
     /**
      * 是否全是汉字<br>
      * 根据汉字编码范围进行判断<br>
@@ -334,71 +462,6 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
         return pattern.matcher(str).matches();
     }
 
-
-    //每次获取到截屏后计算并处理
-    private void calculateTime(Screenshot screenshot) {
-        try {
-            //如果图片类型为空 则认为是-1-其他
-            if(null == screenshot.getPicType()){
-                screenshot.setPicType(-1);
-            }
-            //默认状态为不连续 如果下面判断是连续才会修改为true
-            Boolean isConsecutive = false;
-            //获取本人当天结束时间为准的最后一条记录
-            TimeCalculation latestRecord = timeCalculationMapper.selectOne(new QueryWrapper<TimeCalculation>()
-                    .eq("user_id", screenshot.getUid())
-                    .eq("date", screenshot.getIndate().toLocalDate())
-                    .orderByDesc("end_time")
-                    .last("LIMIT 1"));
-            //单独记录当前的时间以便使用
-            LocalTime currentTime = screenshot.getIndate().toLocalTime();
-            if (latestRecord != null) {
-                //首先对比类型 同一种行为才有可能合并
-                if (latestRecord.getActionType().equals(screenshot.getPicType())) {
-                    //如果有记录的话 计算上次结束和新的开始的时间差
-                    LocalTime estimatedTime = latestRecord.getEndTime();
-                    Integer durationSecond = ((currentTime.getHour() - estimatedTime.getHour()) * 3600
-                            + (currentTime.getMinute() - estimatedTime.getMinute()) * 60
-                            + (currentTime.getSecond() - estimatedTime.getSecond()));
-                    //断层不大于一定时间的话 这个定义目前为600秒
-                    if (durationSecond <= DETECTION_INTERVAL) {
-                        //确认连续 将状态改为连续
-                        isConsecutive = true;
-                    }
-                }
-            }
-            if (isConsecutive) {
-                //如果是连续的话 修改上一条记录的最后时间和持续时间
-                LocalTime startTime = latestRecord.getStartTime();
-                //计算新的间隔
-                Integer duration = ((currentTime.getHour() - startTime.getHour()) * 3600
-                        + (currentTime.getMinute() - startTime.getMinute()) * 60
-                        + (currentTime.getSecond() - startTime.getSecond()));
-                //设置新的结束时间和持续时间 保存记录
-                latestRecord.setEndTime(currentTime).setDuration(duration);
-                timeCalculationMapper.updateById(latestRecord);
-            } else {
-                //如果不是连续的话 新增一个记录
-                TimeCalculation timeCalculation = new TimeCalculation();
-                timeCalculation
-                        .setUserId(screenshot.getUid())
-                        //根据截图种类设置行为代号
-                        .setActionType(screenshot.getPicType())
-                        .setDate(screenshot.getIndate().toLocalDate())
-                        //设置开始时间和结束时间都为当前时间
-                        .setStartTime(currentTime)
-                        .setEndTime(currentTime)
-                        //第一次的持续时间默认为最少单位1秒 不然我看一眼就成了0秒了
-                        .setDuration(1);
-                timeCalculationMapper.insert(timeCalculation);
-            }
-            /*之后可能还需要处理跨越一天的情况*/
-        } catch (NullPointerException e) {
-            //凡是有空指针说明缺少用户id或者时间数据
-            log.info("工作时长统计失败 缺少用户或时间数据");
-        }
-    }
-
     //判断是否是浏览器
     private String isBrowser(File pic) throws Exception {
 //        System.out.println("picrecongnizeFolder=="+browserFolder);
@@ -484,7 +547,7 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
             if (!pic.exists()) {
                 System.err.println("文件不存在" + pic.getAbsolutePath());
             } else {
-                System.out.println("找到文件"  + pic.getAbsolutePath());
+                System.out.println("找到文件" + pic.getAbsolutePath());
             }
             BufferedImage img = ImageIO.read(pic);
             int width = img.getWidth();

+ 16 - 12
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TimeCalculationServiceImpl.java

@@ -2,11 +2,13 @@ package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.TimeCalculation;
+import com.management.platform.entity.TimeCalculationShow;
 import com.management.platform.mapper.TimeCalculationMapper;
+import com.management.platform.mapper.TimeCalculationShowMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.TimeCalculationService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.stereotype.Service;
 
@@ -17,7 +19,10 @@ import java.time.LocalDate;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -32,9 +37,10 @@ public class TimeCalculationServiceImpl extends ServiceImpl<TimeCalculationMappe
 
     @Resource
     private UserMapper userMapper;
-
     @Resource
     private TimeCalculationMapper timeCalculationMapper;
+    @Resource
+    private TimeCalculationShowMapper timeCalculationShowMapper;
 
     //根据id获取用户名 日期 时间分布
     @Override
@@ -133,20 +139,18 @@ public class TimeCalculationServiceImpl extends ServiceImpl<TimeCalculationMappe
         return httpRespMsg;
     }
 
-    //根据日期段获取本人的工作时间段
+    //修改后的计算时长方法 使用TimeCalculationShow
     @Override
     public HttpRespMsg getDuration(String startDate, String endDate, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             LocalDate start = LocalDate.parse(startDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
             LocalDate end = LocalDate.parse(endDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-            //获取时间段内本人全部的工作记录 娱乐6 7 8不计入
-            Integer[] workType = {-1, 0, 1, 2, 3, 4, 5};
-            List<TimeCalculation> dataList = timeCalculationMapper.selectList(new QueryWrapper<TimeCalculation>()
-                    .eq("user_id", request.getHeader("Token"))
-                    .in("action_type", workType)
-                    .between("date", start, end)
-                    .orderByAsc("start_time"));
+            List<TimeCalculationShow> dataList = timeCalculationShowMapper.selectList(
+                    new QueryWrapper<TimeCalculationShow>()
+                            .eq("user_id", request.getHeader("Token"))
+                            .between("date", start, end)
+                            .orderByAsc("start_time"));
             //先把所有的日期搞到一个list里面
             ArrayList<String> dateList = new ArrayList<>();
             LocalDate currentDate = start;
@@ -164,7 +168,7 @@ public class TimeCalculationServiceImpl extends ServiceImpl<TimeCalculationMappe
                 dataMap.put("date", date);
                 List<Map<String, Object>> list = new ArrayList<>();
                 //遍历所有时间记录
-                for (TimeCalculation timeCalculation : dataList) {
+                for (TimeCalculationShow timeCalculation : dataList) {
                     //如果这一天就是我们需要的那天的话
                     if (timeCalculation.getDate().toString().equals(date)) {
                         Map<String, Object> map = new HashMap<>();

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TimeCalculationShowServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.TimeCalculationShow;
+import com.management.platform.mapper.TimeCalculationShowMapper;
+import com.management.platform.service.TimeCalculationShowService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 吴涛涛
+ * @since 2020-02-05
+ */
+@Service
+public class TimeCalculationShowServiceImpl extends ServiceImpl<TimeCalculationShowMapper, TimeCalculationShow> implements TimeCalculationShowService {
+
+}

+ 43 - 29
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -1,6 +1,7 @@
 package com.management.platform.service.impl;
-import	java.time.LocalDateTime;
-import	java.time.LocalDate;
+
+import java.time.LocalDateTime;
+import java.time.LocalDate;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.Company;
@@ -27,6 +28,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
+import java.time.ZoneOffset;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -64,27 +66,27 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //查看该公司非会员公司,只能允许试用三天,超时不可登录
             Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", userList.get(0).getCompanyId()));
             //公司未办理会员
-            if(null != company.getTrialExpirationTime()){
-                if(0 == company.getSetMeal()){
+            if (null != company.getExpirationDate()) {
+                if (0 == company.getSetMeal()) {
                     //未办理会员
-                    if(company.getTrialExpirationTime().isBefore(LocalDateTime.now())){
-                        httpRespMsg.setError("账号试用已到期,请联系公司负责人开通会员套餐");
+                    if (company.getExpirationDate().isBefore(LocalDateTime.now())) {
+                        httpRespMsg.setError("账号试用已到期,请联系客服。");
                         return httpRespMsg;
                     }
-                }else{
-                    if(company.getExpirationDate().isBefore(LocalDateTime.now())){
-                        if(company.getTrialExpirationTime().isBefore(LocalDateTime.now())) {
-                            httpRespMsg.setError("账号会员已到期,请联系公司负责人续费会员套餐");
-                            return httpRespMsg;
-                        }
+                } else {
+                    if (company.getExpirationDate().isBefore(LocalDateTime.now())) {
+                        httpRespMsg.setError("账号会员已到期,请联系客服。");
+                        return httpRespMsg;
                     }
                 }
             }
             //检测密码正确时
-            UserVO userVO = new UserVO();
+            UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
             BeanUtils.copyProperties(userList.get(0), userVO);
             //还要多返回一个公司名字
-            userVO.setCompanyName(companyMapper.selectById(userVO.getCompanyId()).getCompanyName());
+            userVO.setPassword("");
+            LocalDateTime remainingTime = company.getExpirationDate() == null ? LocalDateTime.now() : company.getExpirationDate();
+            userVO.setRemainingTime(remainingTime.toInstant(ZoneOffset.of("+8")).toEpochMilli() - LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli());
             httpRespMsg.data = userVO;
         } else {
             httpRespMsg.setError("密码错误");
@@ -108,24 +110,28 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //查看该公司非会员公司,只能允许试用三天,超时不可登录
             Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", userList.get(0).getCompanyId()));
             //公司未办理会员
-            if(null != company.getTrialExpirationTime()){
-                if(0 == company.getSetMeal()){
+            if (null != company.getExpirationDate()) {
+                if (0 == company.getSetMeal()) {
                     //未办理会员
-                    if(company.getTrialExpirationTime().isBefore(LocalDateTime.now())){
-                        httpRespMsg.setError("账号试用已到期,请联系公司负责人开通会员套餐");
+                    if (company.getExpirationDate().isBefore(LocalDateTime.now())) {
+                        httpRespMsg.setError("账号试用已到期,请联系客服。");
                         return httpRespMsg;
                     }
-                }else{
-                    if(company.getExpirationDate().isBefore(LocalDateTime.now())){
-                        if(company.getTrialExpirationTime().isBefore(LocalDateTime.now())) {
-                            httpRespMsg.setError("账号会员已到期,请联系公司负责人续费会员套餐");
-                            return httpRespMsg;
-                        }
+                } else {
+                    if (company.getExpirationDate().isBefore(LocalDateTime.now())) {
+                        httpRespMsg.setError("账号会员已到期,请联系客服。");
+                        return httpRespMsg;
                     }
                 }
             }
             //检测密码正确时
-            httpRespMsg.data = userList.get(0);
+            UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
+            BeanUtils.copyProperties(userList.get(0), userVO);
+            //还要多返回一个公司名字
+            LocalDateTime remainingTime = company.getExpirationDate() == null ? LocalDateTime.now() : company.getExpirationDate();
+            userVO.setRemainingTime(remainingTime.toInstant(ZoneOffset.of("+8")).toEpochMilli() - LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli());
+            userVO.setPassword("");
+            httpRespMsg.data = userVO;
         } else {
             httpRespMsg.setError("密码错误");
         }
@@ -220,8 +226,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         } else {
             //首先生成一个新公司,增加会员的试用天数
             Company company = new Company().setCompanyName(companyName)
-                    .setTrialExpirationTime(LocalDateTime.now().plusDays(3));
+                    .setExpirationDate(LocalDateTime.now().plusDays(3));
             companyMapper.insert(company);
+            if (userMapper.selectCount(new QueryWrapper<User>().eq("company_id", company.getId())) >= (companyMapper.selectById(company.getId()).getStaffCountMax())) {
+                httpRespMsg.setError("公司人员已达上限");
+                return httpRespMsg;
+            }
             //然后生成一个负责人
             Long id = SnowFlake.nextId();
             User user = new User()
@@ -265,6 +275,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                                 .setPhone(phone)
                                 .setRole(role)
                                 .setCompanyId(creator.getCompanyId());
+                        if (userMapper.selectCount(new QueryWrapper<User>().eq("company_id", creator.getCompanyId())) >= (companyMapper.selectById(creator.getCompanyId()).getStaffCountMax())) {
+                            httpRespMsg.setError("公司人员已达上限");
+                            return httpRespMsg;
+                        }
                         if (userMapper.insert(user) == 0) {
                             httpRespMsg.setError("操作失败");
                         }
@@ -322,7 +336,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 XSSFCell phoneCell = row.getCell(1);
                 nameCell.setCellType(CellType.STRING);
                 phoneCell.setCellType(CellType.STRING);
-                if("姓名".equals(nameCell.getStringCellValue()) && "手机号".equals(phoneCell.getStringCellValue()) && rowIndex==0){
+                if ("姓名".equals(nameCell.getStringCellValue()) && "手机号".equals(phoneCell.getStringCellValue()) && rowIndex == 0) {
                     continue;
                 }
                 String name = nameCell.getStringCellValue();
@@ -361,10 +375,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             e.printStackTrace();
             httpRespMsg.setError("发生其他错误");
             return httpRespMsg;
-        }finally {
+        } finally {
             //关闭流
             try {
-                if(outputStream != null && inputStream != null){
+                if (outputStream != null && inputStream != null) {
                     outputStream.close();
                     inputStream.close();
                     System.out.println("流已关闭");

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/CodeGenerator.java

@@ -204,7 +204,7 @@ public class CodeGenerator {
         //若想要生成的实体类继承某个Controller,则可打开下面注释。写上需要继承的Controller的位置即可
 //        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
         //此处user是表名,多个英文逗号分割
-        strategy.setInclude("company");
+        strategy.setInclude("time_calculation_show");
 //        strategy.setExclude();//数据库表全生成
 //        strategy.setInclude(scanner("user").split(","));//表名,多个英文逗号分割
         strategy.setControllerMappingHyphenStyle(true);

+ 2 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CompanyMapper.xml

@@ -6,15 +6,14 @@
     <resultMap id="BaseResultMap" type="com.management.platform.entity.Company">
         <id column="id" property="id" />
         <result column="company_name" property="companyName" />
-        <result column="staff_count" property="staffCount" />
+        <result column="staff_count_max" property="staffCountMax" />
         <result column="expiration_date" property="expirationDate" />
-        <result column="trial_expiration_time" property="trialExpirationTime" />
         <result column="set_meal" property="setMeal" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_name, staff_count, expiration_date, trial_expiration_time, set_meal
+        id, company_name, staff_count_max, expiration_date, set_meal
     </sql>
 
 </mapper>

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeCalculationShowMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.TimeCalculationShowMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.TimeCalculationShow">
+        <id column="id" property="id" />
+        <result column="user_id" property="userId" />
+        <result column="date" property="date" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="duration" property="duration" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, user_id, date, start_time, end_time, duration
+    </sql>
+
+</mapper>

+ 2 - 1
fhKeeper/formulahousekeeper/mywork/home.cpp

@@ -53,7 +53,8 @@ Home::Home(QWidget *parent) :
   qDebug() << "id=="<<id<<", phone="<<qs->value("name").toString();
   QString str = HOME_PAGE_URL + id;
   loadNavigate(str);
-
+  //首次登陆时立即截图
+    captureScreen();
 }
 
 

+ 4 - 0
fhKeeper/formulahousekeeper/mywork/mainwindow.cpp

@@ -16,6 +16,9 @@ MainWindow::MainWindow(QWidget *parent)
     m_setting = new QSettings("MyManager",QSettings::IniFormat,this);
     ui->setupUi(this);
     connect(ui->loginBtn,SIGNAL(clicked()),this,SLOT(login_in()));
+    ui->reg->setOpenExternalLinks(true);
+    ui->reg->setText("<a href=\"http://worktime.ttkuaiban.com\">暂无账号?快来点击注册企业账号");
+
 //    connect(ui->loginBtn, &QAction::triggered, this, &MainWindow::login_in);
     // 设置窗体标题
     setWindowTitle(tr("智能工时管家"));
@@ -73,6 +76,7 @@ void MainWindow::login_in(void){//登陆
 void MainWindow::login_out(void){//退出
 
 }
+
 MainWindow::~MainWindow()
 {
     delete ui;

+ 1 - 2
fhKeeper/formulahousekeeper/mywork/mainwindow.h

@@ -1,4 +1,4 @@
-#ifndef MAINWINDOW_H
+#ifndef MAINWINDOW_H
 #define MAINWINDOW_H
 #include "home.h"
 #include <QMainWindow>
@@ -19,7 +19,6 @@ public:
 public slots:                   //新增
     void login_in(void);	//新增
     void login_out(void);	//新增
-
 private:
     Ui::MainWindow *ui;
     QSettings *m_setting;

+ 13 - 0
fhKeeper/formulahousekeeper/mywork/mainwindow.ui

@@ -95,6 +95,19 @@
      <string>密码</string>
     </property>
    </widget>
+   <widget class="QLabel" name="reg">
+    <property name="geometry">
+     <rect>
+      <x>390</x>
+      <y>510</y>
+      <width>231</width>
+      <height>16</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>暂无账号?快来点击注册企业账号</string>
+    </property>
+   </widget>
   </widget>
   <widget class="QMenuBar" name="menubar">
    <property name="geometry">