Kaynağa Gözat

开班上班班次

duhongyu 1 hafta önce
ebeveyn
işleme
2e9c08ac24

+ 9 - 0
smart-steward-api/src/main/java/com/smartSteward/web/controller/schedule/ScheduleClassOpeningController.java

@@ -89,6 +89,15 @@ public class ScheduleClassOpeningController extends BaseController
89 89
     @PutMapping
90 90
     public AjaxResult edit(@RequestBody ScheduleClassOpening scheduleClassOpening)
91 91
     {
92
+        if (scheduleClassOpening.getId() == null)
93
+        {
94
+            return AjaxResult.error("请选择开班记录");
95
+        }
96
+        ScheduleClassOpening opening = scheduleClassOpeningService.selectScheduleClassOpeningById(scheduleClassOpening.getId());
97
+        if (opening == null)
98
+        {
99
+            return AjaxResult.error("开班记录不存在");
100
+        }
92 101
         // 校验参数
93 102
         scheduleClassOpeningService.validateScheduleClassOpening(scheduleClassOpening);
94 103
         return toAjax(scheduleClassOpeningService.updateScheduleClassOpening(scheduleClassOpening));

+ 2 - 1
smart-steward-entity/src/main/java/com/smartSteward/entity/database/flow/FlowCategory.java

@@ -8,6 +8,7 @@ import com.smartSteward.common.annotation.Excel;
8 8
 import com.smartSteward.common.core.BaseEntity;
9 9
 
10 10
 import javax.validation.constraints.NotNull;
11
+import java.util.ArrayList;
11 12
 import java.util.List;
12 13
 
13 14
 /**
@@ -58,6 +59,6 @@ public class FlowCategory extends BaseEntity
58 59
 
59 60
     /** 子分类 */
60 61
     @ApiModelProperty("子分类")
61
-    private List<FlowCategory> children;
62
+    private List<FlowCategory> children = new ArrayList<>();
62 63
 
63 64
 }

+ 6 - 5
smart-steward-entity/src/main/java/com/smartSteward/entity/database/schedule/ScheduleWorkRecord.java

@@ -1,5 +1,6 @@
1 1
 package com.smartSteward.entity.database.schedule;
2 2
 
3
+import java.math.BigDecimal;
3 4
 import java.util.Date;
4 5
 import com.fasterxml.jackson.annotation.JsonFormat;
5 6
 import io.swagger.annotations.ApiModel;
@@ -80,10 +81,10 @@ public class ScheduleWorkRecord extends BaseEntity
80 81
    @ApiModelProperty("下班时间")
81 82
    private Date endTime;
82 83
 
83
-   /** 上班时长(分钟) */
84
-   @Excel(name = "上班时长(分钟)")
85
-   @ApiModelProperty("上班时长(分钟)")
86
-   private Long duration;
84
+   /** 上班时长(小时) */
85
+   @Excel(name = "上班时长(小时)")
86
+   @ApiModelProperty("上班时长(小时)")
87
+   private BigDecimal duration;
87 88
 
88 89
    /** 上班内容 */
89 90
    @Excel(name = "上班内容")
@@ -104,7 +105,7 @@ public class ScheduleWorkRecord extends BaseEntity
104 105
    /** 状态: 0-未确认, 1-已确认 */
105 106
    @Excel(name = "状态: 0-未确认, 1-已确认")
106 107
    @ApiModelProperty("状态: 0-未确认, 1-已确认")
107
-   private String status;
108
+   private Long status;
108 109
 
109 110
 
110 111
 }

+ 4 - 3
smart-steward-entity/src/main/java/com/smartSteward/entity/view/TreeSelect.java

@@ -1,6 +1,7 @@
1 1
 package com.smartSteward.entity.view;
2 2
 
3 3
 import java.io.Serializable;
4
+import java.util.Collections;
4 5
 import java.util.List;
5 6
 import java.util.stream.Collectors;
6 7
 import com.fasterxml.jackson.annotation.JsonInclude;
@@ -42,14 +43,14 @@ public class TreeSelect implements Serializable
42 43
         this.id = dept.getDeptId();
43 44
         this.label = dept.getDeptName();
44 45
         this.disabled = StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus());
45
-        this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
46
+        this.children = dept.getChildren() != null ? dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()) : Collections.emptyList();
46 47
     }
47 48
 
48 49
     public TreeSelect(SysMenu menu)
49 50
     {
50 51
         this.id = menu.getMenuId();
51 52
         this.label = menu.getMenuName();
52
-        this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
53
+        this.children = menu.getChildren() != null ? menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()) : Collections.emptyList();
53 54
     }
54 55
 
55 56
 
@@ -57,7 +58,7 @@ public class TreeSelect implements Serializable
57 58
     {
58 59
         this.id = category.getCategoryId();
59 60
         this.label = category.getCategoryName();
60
-        this.children = category.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
61
+        this.children = category.getChildren() != null ? category.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()) : Collections.emptyList();
61 62
     }
62 63
 
63 64
 

+ 5 - 0
smart-steward-entity/src/main/java/com/smartSteward/entity/view/system/SysUserStationResult.java

@@ -21,6 +21,11 @@ public class SysUserStationResult {
21 21
      */
22 22
     @ApiModelProperty(value = "站点ID")
23 23
     private Long stationId;
24
+    /**
25
+     * 站点名称
26
+     */
27
+    @ApiModelProperty(value = "站点名称")
28
+    private String stationName;
24 29
 
25 30
     /**
26 31
      * 用户ID

+ 7 - 0
smart-steward-mapper/src/main/java/com/smartSteward/mapper/schedule/ScheduleClassOpeningMapper.java

@@ -58,4 +58,11 @@ public interface ScheduleClassOpeningMapper
58 58
      * @return 结果
59 59
      */
60 60
     public int deleteScheduleClassOpeningByIds(Long[] ids);
61
+     /**
62
+     * 删除班级的上班记录
63
+     *
64
+     * @param classId 班级id
65
+     * @return 结果
66
+     */
67
+    public int deleteScheduleWorkRecordByClassId(Long classId);
61 68
 }

+ 2 - 7
smart-steward-mapper/src/main/java/com/smartSteward/mapper/schedule/ScheduleWorkRecordMapper.java

@@ -58,11 +58,6 @@ public interface ScheduleWorkRecordMapper
58 58
      */
59 59
     public int deleteScheduleWorkRecordById(Long id);
60 60
 
61
-    /**
62
-     * 批量删除上班记录
63
-     * 
64
-     * @param ids 需要删除的数据主键集合
65
-     * @return 结果
66
-     */
67
-    public int deleteScheduleWorkRecordByIds(Long[] ids);
61
+
62
+    public int deleteScheduleWorkRecordByClassId(Long id);
68 63
 }

+ 4 - 1
smart-steward-mapper/src/main/resources/mapper/schedule/ScheduleWorkRecordMapper.xml

@@ -46,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
46 46
             <if test="workContent != null  and workContent != ''"> and work_content = #{workContent}</if>
47 47
             <if test="stationId != null "> and station_id = #{stationId}</if>
48 48
             <if test="stationName != null  and stationName != ''"> and station_name like concat('%', #{stationName}, '%')</if>
49
-            <if test="status != null  and status != ''"> and status = #{status}</if>
49
+            <if test="status != null "> and status = #{status}</if>
50 50
             <if test="createTime != null "> and create_time = #{createTime}</if>
51 51
             <if test="updateTime != null "> and update_time = #{updateTime}</if>
52 52
             <!-- 如果有station_id字段,则增加站点集合查询条件 -->
@@ -184,4 +184,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
184 184
             #{id}
185 185
         </foreach>
186 186
     </delete>
187
+        <delete id="deleteScheduleWorkRecordByClassId" parameterType="Long">
188
+            delete from schedule_work_record where class_id = #{classId}
189
+        </delete>
187 190
 </mapper>

+ 1 - 1
smart-steward-mapper/src/main/resources/mapper/system/SysUserMapper.xml

@@ -330,7 +330,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
330 330
 	<select id="selectUserStation" resultType="com.smartSteward.entity.view.system.SysUserStationResult">
331 331
 		select s.area_id as areaId,su.station_id as stationId,
332 332
 		u.user_id as userId,u.post_id as postId,u.nick_name as nickName
333
-		,u.user_name as userName from sys_user u
333
+		,u.user_name as userName,s.station_name as stationName from sys_user u
334 334
 		inner join sys_user_station su on u.user_id=su.user_id
335 335
 		left join sys_station s on s.id=su.station_id
336 336
 		where u.del_flag='0'

+ 47 - 13
smart-steward-service/src/main/java/com/smartSteward/service/schedule/impl/ScheduleClassOpeningServiceImpl.java

@@ -1,12 +1,15 @@
1 1
 package com.smartSteward.service.schedule.impl;
2
+import java.util.ArrayList;
2 3
 import java.util.Date;
3 4
 import java.util.List;
5
+import java.util.function.Function;
4 6
 import java.util.stream.Collectors;
5 7
 
6 8
 import com.smartSteward.common.core.SecurityUtils;
7 9
 import com.smartSteward.common.exception.ParameterException;
8 10
 import com.smartSteward.common.utils.CollUtil;
9 11
 import com.smartSteward.common.utils.DateUtils;
12
+import com.smartSteward.common.utils.bean.BeanUtils;
10 13
 import com.smartSteward.entity.database.schedule.ScheduleClassUser;
11 14
 import com.smartSteward.entity.database.schedule.ScheduleShiftManagement;
12 15
 import com.smartSteward.entity.database.schedule.ScheduleWorkRecord;
@@ -118,6 +121,9 @@ public class ScheduleClassOpeningServiceImpl implements IScheduleClassOpeningSer
118 121
             //新增班级用户关联
119 122
            List<ScheduleClassUser> scheduleClassUsers = getScheduleClassUsers(scheduleClassOpening);
120 123
            scheduleClassUserMapper.insertBatchScheduleClassUser(scheduleClassUsers);
124
+           //新增上班记录
125
+            List<ScheduleWorkRecord> scheduleWorkRecords = getScheduleWorkRecords(scheduleClassOpening);
126
+            scheduleWorkRecordMapper.insertBatchScheduleWorkRecord(scheduleWorkRecords);
121 127
         }
122 128
         return result;
123 129
     }
@@ -141,6 +147,11 @@ public class ScheduleClassOpeningServiceImpl implements IScheduleClassOpeningSer
141 147
         scheduleClassUserMapper.insertBatchScheduleClassUser(scheduleClassUsers);
142 148
         scheduleClassOpening.setUpdateBy(SecurityUtils.getUsername());
143 149
         scheduleClassOpening.setUpdateTime(DateUtils.getNowDate());
150
+        //删除原上班记录
151
+        scheduleWorkRecordMapper.deleteScheduleWorkRecordByClassId(scheduleClassOpening.getId());
152
+        //新增上班记录
153
+        List<ScheduleWorkRecord> scheduleWorkRecords = getScheduleWorkRecords(scheduleClassOpening);
154
+        scheduleWorkRecordMapper.insertBatchScheduleWorkRecord(scheduleWorkRecords);
144 155
         return scheduleClassOpeningMapper.updateScheduleClassOpening(scheduleClassOpening);
145 156
     }
146 157
 
@@ -163,28 +174,51 @@ public class ScheduleClassOpeningServiceImpl implements IScheduleClassOpeningSer
163 174
         //从用户表获取用户信息
164 175
         List<SysUserStationResult> sysUserStationResults =
165 176
                 sysUserMapper.selectUserStation(null,
166
-                        null, scheduleClassOpening.getUserIds().toArray(new Long[0]));
177
+                        scheduleClassOpening.getStationId(), scheduleClassOpening.getUserIds().toArray(new Long[0]));
167 178
         ScheduleShiftManagement scheduleShiftManagement =
168 179
                 scheduleShiftManagementMapper.selectScheduleShiftManagementById(scheduleClassOpening.getShiftId());
169 180
         if (scheduleShiftManagement == null) {
170 181
             throw new ParameterException("班次不存在");
171 182
         }
172
-        return sysUserStationResults.stream().map(userId -> {
173
-
183
+        //根据用户id去重
184
+        sysUserStationResults= new ArrayList<>(sysUserStationResults.stream().
185
+                collect(Collectors.toMap(SysUserStationResult::getUserId, Function.identity(), (oldValue, newValue) -> oldValue))
186
+                .values());
187
+        List<ScheduleWorkRecord> scheduleWorkRecords = new ArrayList<>();
188
+        for(SysUserStationResult sysUserStationResult : sysUserStationResults) {
174 189
             ScheduleWorkRecord scheduleWorkRecord = new ScheduleWorkRecord();
175
-            scheduleWorkRecord.setEmployeeId(userId.getUserId());
176
-            scheduleWorkRecord.setEmployeeName(userId.getNickName());
177
-            scheduleWorkRecord.setEmployeeNo(userId.getUserName());
190
+            scheduleWorkRecord.setEmployeeId(sysUserStationResult.getUserId());
191
+            scheduleWorkRecord.setEmployeeName(sysUserStationResult.getNickName());
192
+            scheduleWorkRecord.setEmployeeNo(sysUserStationResult.getUserName());
178 193
             scheduleWorkRecord.setShiftId(scheduleShiftManagement.getId());
179 194
             scheduleWorkRecord.setShiftName(scheduleShiftManagement.getShiftName());
180
-            scheduleWorkRecord.setPosition(userId.getPostId());
181
-
195
+            scheduleWorkRecord.setPosition(sysUserStationResult.getPostId());
182 196
             scheduleWorkRecord.setWorkDate(scheduleClassOpening.getWorkDate());
183
-//            scheduleWorkRecord.setStartTime(scheduleShiftManagement.getStartTime());
184
-//            scheduleWorkRecord.setEndTime(scheduleShiftManagement.getEndTime());
185
-//            scheduleWorkRecord.setDuration(scheduleShiftManagement.getDuration());
186
-            return scheduleWorkRecord;
187
-        }).collect(Collectors.toList());
197
+            scheduleWorkRecord.setStationId(sysUserStationResult.getStationId());
198
+            scheduleWorkRecord.setStationName(sysUserStationResult.getStationName());
199
+            if (scheduleShiftManagement.getFirstStartTime()!=null&&scheduleShiftManagement.getFirstEndTime()!=null) {
200
+                //复制公共字段生成新对象
201
+                ScheduleWorkRecord newScheduleWorkRecord = new ScheduleWorkRecord();
202
+                BeanUtils.copyProperties(scheduleWorkRecord, newScheduleWorkRecord);
203
+                newScheduleWorkRecord.setStatus(0L);
204
+                newScheduleWorkRecord.setStartTime(scheduleShiftManagement.getFirstStartTime());
205
+                newScheduleWorkRecord.setEndTime(scheduleShiftManagement.getFirstEndTime());
206
+                newScheduleWorkRecord.setDuration(scheduleShiftManagement.getFirstDuration());
207
+                scheduleWorkRecords.add(newScheduleWorkRecord);
208
+            }
209
+            if(scheduleShiftManagement.getSecondStartTime()!=null&&scheduleShiftManagement.getSecondEndTime()!=null) {
210
+                //复制公共字段生成新对象
211
+                ScheduleWorkRecord newScheduleWorkRecord = new ScheduleWorkRecord();
212
+                BeanUtils.copyProperties(scheduleWorkRecord, newScheduleWorkRecord);
213
+                newScheduleWorkRecord.setStatus(0L);
214
+                newScheduleWorkRecord.setStartTime(scheduleShiftManagement.getSecondStartTime());
215
+                newScheduleWorkRecord.setEndTime(scheduleShiftManagement.getSecondEndTime());
216
+                newScheduleWorkRecord.setDuration(scheduleShiftManagement.getSecondDuration());
217
+                scheduleWorkRecords.add(newScheduleWorkRecord);
218
+            }
219
+
220
+        }
221
+        return scheduleWorkRecords;
188 222
     }
189 223
 
190 224