Bladeren bron

Merge remote-tracking branch 'origin/feature/dev' into feature/dev

wangxx 1 maand geleden
bovenliggende
commit
c16c975ded

+ 2 - 1
airport-common/src/main/java/com/sundot/airport/common/enums/BasePerformanceIndicatorLeaveTypeEnum.java

@@ -11,7 +11,8 @@ import lombok.Getter;
11 11
 public enum BasePerformanceIndicatorLeaveTypeEnum {
12 12
 
13 13
     PERSONAL_LEAVE("PERSONAL_LEAVE", "事假"),
14
-    SICK_LEAVE("SICK_LEAVE", "病假");
14
+    SICK_LEAVE("SICK_LEAVE", "病假"),
15
+    PERSONAL_SICK_LEAVE("PERSONAL_SICK_LEAVE", "事/病假");
15 16
 
16 17
     private final String code;
17 18
     private final String desc;

+ 16 - 0
airport-personnel/src/main/java/com/sundot/airport/personnel/domain/PersonnelMonthlyAssessmentIndicatorDetail.java

@@ -59,6 +59,13 @@ public class PersonnelMonthlyAssessmentIndicatorDetail extends BaseEntity {
59 59
     @Excel(name = "单位")
60 60
     private String unit;
61 61
 
62
+    /** 事/病假 */
63
+    @Excel(name = "事/病假",
64
+            readConverterExp = "PERSONAL_LEAVE=事假," +
65
+                    "SICK_LEAVE=病假,",
66
+            combo = "事假,病假")
67
+    private String leaveType;
68
+
62 69
     /** 奖罚类型 */
63 70
     @Excel(name = "奖罚类型")
64 71
     private String rewardPunishmentType;
@@ -162,6 +169,14 @@ public class PersonnelMonthlyAssessmentIndicatorDetail extends BaseEntity {
162 169
         return unit;
163 170
     }
164 171
 
172
+    public String getLeaveType() {
173
+        return leaveType;
174
+    }
175
+
176
+    public void setLeaveType(String leaveType) {
177
+        this.leaveType = leaveType;
178
+    }
179
+
165 180
     public void setRewardPunishmentType(String rewardPunishmentType) {
166 181
         this.rewardPunishmentType = rewardPunishmentType;
167 182
     }
@@ -228,6 +243,7 @@ public class PersonnelMonthlyAssessmentIndicatorDetail extends BaseEntity {
228 243
                 .append("indicatorName", getIndicatorName())
229 244
                 .append("score", getScore())
230 245
                 .append("unit", getUnit())
246
+                .append("leaveType", getLeaveType())
231 247
                 .append("rewardPunishmentType", getRewardPunishmentType())
232 248
                 .append("qcDeptType", getQcDeptType())
233 249
                 .append("occurCount", getOccurCount())

+ 52 - 2
airport-personnel/src/main/java/com/sundot/airport/personnel/domain/PersonnelNonCadreMonthlyAssessment.java

@@ -160,8 +160,8 @@ public class PersonnelNonCadreMonthlyAssessment extends BaseEntity {
160 160
     @Excel(name = "应用方式备注")
161 161
     private String applicationMethodRemark;
162 162
 
163
-    /** 是否豁免(N=否;Y=是) */
164
-    @Excel(name = "是否豁免(N=否;Y=是)")
163
+    /** 是否豁免 */
164
+    @Excel(name = "是否豁免")
165 165
     private String exemption;
166 166
 
167 167
     /** 豁免原因备注 */
@@ -200,6 +200,22 @@ public class PersonnelNonCadreMonthlyAssessment extends BaseEntity {
200 200
     @TableField(exist = false)
201 201
     private List<PersonnelMonthlyAssessmentIndicatorDetail> socStationQcInvolvedCoreSafetyAccordList;
202 202
 
203
+    /** 奖励明细 */
204
+    @TableField(exist = false)
205
+    private List<PersonnelMonthlyAssessmentIndicatorDetail> rewardAccordList;
206
+
207
+    /** 惩罚明细 */
208
+    @TableField(exist = false)
209
+    private List<PersonnelMonthlyAssessmentIndicatorDetail> punishmentAccordList;
210
+
211
+    /** 查询开始考核月份(格式:YYYYMM) */
212
+    @TableField(exist = false)
213
+    private String assessmentMonthStart;
214
+
215
+    /** 查询结束考核月份(格式:YYYYMM) */
216
+    @TableField(exist = false)
217
+    private String assessmentMonthEnd;
218
+
203 219
     public void setTenantId(String tenantId) {
204 220
         this.tenantId = tenantId;
205 221
     }
@@ -560,6 +576,38 @@ public class PersonnelNonCadreMonthlyAssessment extends BaseEntity {
560 576
         this.socStationQcInvolvedCoreSafetyAccordList = socStationQcInvolvedCoreSafetyAccordList;
561 577
     }
562 578
 
579
+    public List<PersonnelMonthlyAssessmentIndicatorDetail> getRewardAccordList() {
580
+        return rewardAccordList;
581
+    }
582
+
583
+    public void setRewardAccordList(List<PersonnelMonthlyAssessmentIndicatorDetail> rewardAccordList) {
584
+        this.rewardAccordList = rewardAccordList;
585
+    }
586
+
587
+    public List<PersonnelMonthlyAssessmentIndicatorDetail> getPunishmentAccordList() {
588
+        return punishmentAccordList;
589
+    }
590
+
591
+    public void setPunishmentAccordList(List<PersonnelMonthlyAssessmentIndicatorDetail> punishmentAccordList) {
592
+        this.punishmentAccordList = punishmentAccordList;
593
+    }
594
+
595
+    public String getAssessmentMonthStart() {
596
+        return assessmentMonthStart;
597
+    }
598
+
599
+    public void setAssessmentMonthStart(String assessmentMonthStart) {
600
+        this.assessmentMonthStart = assessmentMonthStart;
601
+    }
602
+
603
+    public String getAssessmentMonthEnd() {
604
+        return assessmentMonthEnd;
605
+    }
606
+
607
+    public void setAssessmentMonthEnd(String assessmentMonthEnd) {
608
+        this.assessmentMonthEnd = assessmentMonthEnd;
609
+    }
610
+
563 611
     @Override
564 612
     public String toString() {
565 613
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
@@ -613,6 +661,8 @@ public class PersonnelNonCadreMonthlyAssessment extends BaseEntity {
613 661
                 .append("otherIndexSafetyScoreWithoutSocStationQcAccordList", getOtherIndexSafetyScoreWithoutSocStationQcAccordList())
614 662
                 .append("otherIndexNonSafetyAccordList", getOtherIndexNonSafetyAccordList())
615 663
                 .append("socStationQcInvolvedCoreSafetyAccordList", getSocStationQcInvolvedCoreSafetyAccordList())
664
+                .append("rewardAccordList", getRewardAccordList())
665
+                .append("punishmentAccordList", getPunishmentAccordList())
616 666
                 .toString();
617 667
     }
618 668
 }

+ 58 - 1
airport-personnel/src/main/java/com/sundot/airport/personnel/service/impl/PersonnelNonCadreMonthlyAssessmentServiceImpl.java

@@ -1,10 +1,10 @@
1 1
 package com.sundot.airport.personnel.service.impl;
2 2
 
3 3
 import java.math.BigDecimal;
4
+import java.math.RoundingMode;
4 5
 import java.util.ArrayList;
5 6
 import java.util.List;
6 7
 import java.util.Map;
7
-import java.util.Optional;
8 8
 import java.util.stream.Collectors;
9 9
 
10 10
 import cn.hutool.core.collection.CollUtil;
@@ -14,6 +14,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
14 14
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
15 15
 import com.sundot.airport.common.enums.BasePerformanceIndicatorQcDeptTypeEnum;
16 16
 import com.sundot.airport.common.enums.BasePerformanceIndicatorRewardPunishmentTypeTypeEnum;
17
+import com.sundot.airport.common.enums.RoleTypeEnum;
18
+import com.sundot.airport.common.exception.ServiceException;
17 19
 import com.sundot.airport.common.utils.DateUtils;
18 20
 import com.sundot.airport.personnel.domain.PersonnelMonthlyAssessmentIndicatorDetail;
19 21
 import com.sundot.airport.personnel.domain.PersonnelMonthlyAssessmentIndicatorRewardPunishmentDetail;
@@ -36,6 +38,11 @@ import org.springframework.transaction.annotation.Transactional;
36 38
  */
37 39
 @Service
38 40
 public class PersonnelNonCadreMonthlyAssessmentServiceImpl extends ServiceImpl<PersonnelNonCadreMonthlyAssessmentMapper, PersonnelNonCadreMonthlyAssessment> implements IPersonnelNonCadreMonthlyAssessmentService {
41
+    // 基础分
42
+    private static final BigDecimal BASE_SCORE = new BigDecimal(80);
43
+    // 红线分
44
+    private static final BigDecimal RED_LINE_SCORE = new BigDecimal(69);
45
+
39 46
     @Autowired
40 47
     private PersonnelNonCadreMonthlyAssessmentMapper personnelNonCadreMonthlyAssessmentMapper;
41 48
     @Autowired
@@ -148,6 +155,49 @@ public class PersonnelNonCadreMonthlyAssessmentServiceImpl extends ServiceImpl<P
148 155
         BigDecimal socStationQcInvolvedCoreSafetyDeduction = socStationQcInvolvedCoreSafetyAccordList.stream().map(PersonnelMonthlyAssessmentIndicatorDetail::getScoreResult).filter(ObjUtil::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add);
149 156
         result.setSocStationQcInvolvedCoreSafetyDeduction(socStationQcInvolvedCoreSafetyDeduction);
150 157
         result.setSocStationQcInvolvedCoreSafetyAccordList(socStationQcInvolvedCoreSafetyAccordList);
158
+        // 分管员工数量+扣分平均值
159
+        if (StrUtil.equals(RoleTypeEnum.kezhang.getCode(), result.getRoleKey())) {
160
+            PersonnelNonCadreMonthlyAssessment queryKeZhang = new PersonnelNonCadreMonthlyAssessment();
161
+            queryKeZhang.setAssessmentMonth(result.getAssessmentMonth());
162
+            queryKeZhang.setDeputySupervisorId(result.getUserId());
163
+            List<PersonnelNonCadreMonthlyAssessment> personnelNonCadreMonthlyAssessmentKeZhangList = personnelNonCadreMonthlyAssessmentMapper.selectPersonnelNonCadreMonthlyAssessmentList(queryKeZhang);
164
+            result.setInChargeEmployeeCount(personnelNonCadreMonthlyAssessmentKeZhangList.size());
165
+            result.setDeductionAverage(CollUtil.isEmpty(personnelNonCadreMonthlyAssessmentKeZhangList) ? BigDecimal.ZERO : result.getSocStationQcInvolvedCoreSafetyDeduction().divide(BigDecimal.valueOf(personnelNonCadreMonthlyAssessmentKeZhangList.size()), 2, RoundingMode.HALF_UP));
166
+        }
167
+        // 总分
168
+        BigDecimal totalScore = BASE_SCORE.add(result.getCoreIndexScore()).add(result.getOtherIndexScore());
169
+        if (result.getRedLineIndexTriggerCount() > 0) {
170
+            totalScore = RED_LINE_SCORE;
171
+        }
172
+        result.setTotalScore(totalScore);
173
+        // 奖励明细+惩罚明细
174
+        List<String> coreAndOtherCategoryCodeList = new ArrayList<>();
175
+        coreAndOtherCategoryCodeList.addAll(coreIndexCategoryCodeList);
176
+        coreAndOtherCategoryCodeList.addAll(otherIndexCategoryCodeList);
177
+        List<PersonnelMonthlyAssessmentIndicatorDetail> rewardAccordList = result.getPersonnelMonthlyAssessmentIndicatorDetailList().stream()
178
+                .filter(item -> coreAndOtherCategoryCodeList.contains(item.getIndicatorCode()))
179
+                .filter(item -> StrUtil.equals(BasePerformanceIndicatorRewardPunishmentTypeTypeEnum.REWARD.getCode(), item.getRewardPunishmentType()))
180
+                .collect(Collectors.toList());
181
+        result.setRewardAccordList(rewardAccordList);
182
+        List<PersonnelMonthlyAssessmentIndicatorDetail> punishmentAccordList = result.getPersonnelMonthlyAssessmentIndicatorDetailList().stream()
183
+                .filter(item -> coreAndOtherCategoryCodeList.contains(item.getIndicatorCode()))
184
+                .filter(item -> StrUtil.equals(BasePerformanceIndicatorRewardPunishmentTypeTypeEnum.PUNISHMENT.getCode(), item.getRewardPunishmentType()))
185
+                .collect(Collectors.toList());
186
+        punishmentAccordList.addAll(result.getRedLineIndexAccordList());
187
+        result.setPunishmentAccordList(punishmentAccordList);
188
+        // 奖励金额+惩罚金额
189
+        BigDecimal rewardAmount = result.getPersonnelMonthlyAssessmentIndicatorDetailList().stream()
190
+                .filter(item -> StrUtil.equals(BasePerformanceIndicatorRewardPunishmentTypeTypeEnum.REWARD.getCode(), item.getRewardPunishmentType()))
191
+                .map(PersonnelMonthlyAssessmentIndicatorDetail::getAmountResult)
192
+                .filter(ObjUtil::isNotNull)
193
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
194
+        result.setRewardAmount(rewardAmount);
195
+        BigDecimal punishmentAmount = result.getPersonnelMonthlyAssessmentIndicatorDetailList().stream()
196
+                .filter(item -> StrUtil.equals(BasePerformanceIndicatorRewardPunishmentTypeTypeEnum.PUNISHMENT.getCode(), item.getRewardPunishmentType()))
197
+                .map(PersonnelMonthlyAssessmentIndicatorDetail::getAmountResult)
198
+                .filter(ObjUtil::isNotNull)
199
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
200
+        result.setPunishmentAmount(punishmentAmount);
151 201
         return result;
152 202
     }
153 203
 
@@ -171,6 +221,13 @@ public class PersonnelNonCadreMonthlyAssessmentServiceImpl extends ServiceImpl<P
171 221
     @Transactional(rollbackFor = Exception.class)
172 222
     @Override
173 223
     public int insertPersonnelNonCadreMonthlyAssessment(PersonnelNonCadreMonthlyAssessment personnelNonCadreMonthlyAssessment) {
224
+        PersonnelNonCadreMonthlyAssessment temp = new PersonnelNonCadreMonthlyAssessment();
225
+        temp.setAssessmentMonth(personnelNonCadreMonthlyAssessment.getAssessmentMonth());
226
+        temp.setUserId(personnelNonCadreMonthlyAssessment.getUserId());
227
+        List<PersonnelNonCadreMonthlyAssessment> tempList = personnelNonCadreMonthlyAssessmentMapper.selectPersonnelNonCadreMonthlyAssessmentList(temp);
228
+        if (CollUtil.isNotEmpty(tempList)) {
229
+            throw new ServiceException("该用户已存在该考核月份的考核记录");
230
+        }
174 231
         personnelNonCadreMonthlyAssessment.setCreateTime(DateUtils.getNowDate());
175 232
         int result = personnelNonCadreMonthlyAssessmentMapper.insertPersonnelNonCadreMonthlyAssessment(personnelNonCadreMonthlyAssessment);
176 233
         if (CollUtil.isNotEmpty(personnelNonCadreMonthlyAssessment.getPersonnelMonthlyAssessmentIndicatorDetailList())) {

+ 7 - 0
airport-personnel/src/main/resources/mapper/personnel/PersonnelMonthlyAssessmentIndicatorDetailMapper.xml

@@ -20,6 +20,7 @@
20 20
         <result property="indicatorName" column="indicator_name"/>
21 21
         <result property="score" column="score"/>
22 22
         <result property="unit" column="unit"/>
23
+        <result property="leaveType" column="leave_type"/>
23 24
         <result property="rewardPunishmentType" column="reward_punishment_type"/>
24 25
         <result property="qcDeptType" column="qc_dept_type"/>
25 26
         <result property="occurCount" column="occur_count"/>
@@ -43,6 +44,7 @@
43 44
                indicator_name,
44 45
                score,
45 46
                unit,
47
+               leave_type,
46 48
                reward_punishment_type,
47 49
                qc_dept_type,
48 50
                occur_count,
@@ -67,6 +69,7 @@
67 69
             </if>
68 70
             <if test="score != null ">and score = #{score}</if>
69 71
             <if test="unit != null  and unit != ''">and unit = #{unit}</if>
72
+            <if test="leaveType != null  and leaveType != ''">and leave_type = #{leaveType}</if>
70 73
             <if test="rewardPunishmentType != null  and rewardPunishmentType != ''">and reward_punishment_type =
71 74
                 #{rewardPunishmentType}
72 75
             </if>
@@ -75,6 +78,7 @@
75 78
             <if test="scoreResult != null ">and score_result = #{scoreResult}</if>
76 79
             <if test="amountResult != null ">and amount_result = #{amountResult}</if>
77 80
         </where>
81
+        order by create_time desc
78 82
     </select>
79 83
 
80 84
     <select id="selectPersonnelMonthlyAssessmentIndicatorDetailById" parameterType="Long"
@@ -101,6 +105,7 @@
101 105
             <if test="indicatorName != null and indicatorName != ''">indicator_name,</if>
102 106
             <if test="score != null">score,</if>
103 107
             <if test="unit != null">unit,</if>
108
+            <if test="leaveType != null">leave_type,</if>
104 109
             <if test="rewardPunishmentType != null and rewardPunishmentType != ''">reward_punishment_type,</if>
105 110
             <if test="qcDeptType != null and qcDeptType != ''">qc_dept_type,</if>
106 111
             <if test="occurCount != null">occur_count,</if>
@@ -122,6 +127,7 @@
122 127
             <if test="indicatorName != null and indicatorName != ''">#{indicatorName},</if>
123 128
             <if test="score != null">#{score},</if>
124 129
             <if test="unit != null">#{unit},</if>
130
+            <if test="leaveType != null">#{leaveType},</if>
125 131
             <if test="rewardPunishmentType != null and rewardPunishmentType != ''">#{rewardPunishmentType},</if>
126 132
             <if test="qcDeptType != null and qcDeptType != ''">#{qcDeptType},</if>
127 133
             <if test="occurCount != null">#{occurCount},</if>
@@ -148,6 +154,7 @@
148 154
             <if test="indicatorName != null and indicatorName != ''">indicator_name = #{indicatorName},</if>
149 155
             <if test="score != null">score = #{score},</if>
150 156
             <if test="unit != null">unit = #{unit},</if>
157
+            <if test="leaveType != null">leave_type = #{leaveType},</if>
151 158
             <if test="rewardPunishmentType != null and rewardPunishmentType != ''">reward_punishment_type =
152 159
                 #{rewardPunishmentType},
153 160
             </if>

+ 1 - 0
airport-personnel/src/main/resources/mapper/personnel/PersonnelMonthlyAssessmentIndicatorRewardPunishmentDetailMapper.xml

@@ -55,6 +55,7 @@
55 55
             </if>
56 56
             <if test="amount != null ">and amount = #{amount}</if>
57 57
         </where>
58
+        order by create_time desc
58 59
     </select>
59 60
 
60 61
     <select id="selectPersonnelMonthlyAssessmentIndicatorRewardPunishmentDetailById" parameterType="Long"

+ 5 - 0
airport-personnel/src/main/resources/mapper/personnel/PersonnelNonCadreMonthlyAssessmentMapper.xml

@@ -168,7 +168,12 @@
168 168
             <if test="exemptionReasonRemark != null  and exemptionReasonRemark != ''">and exemption_reason_remark =
169 169
                 #{exemptionReasonRemark}
170 170
             </if>
171
+            <if test="assessmentMonthStart != null and assessmentMonthEnd != null">
172
+                and (assessment_month >= #{assessmentMonthStart}
173
+                and assessment_month <![CDATA[ <= ]]> #{assessmentMonthEnd})
174
+            </if>
171 175
         </where>
176
+        order by create_time desc
172 177
     </select>
173 178
 
174 179
     <select id="selectPersonnelNonCadreMonthlyAssessmentById" parameterType="Long"