|
@@ -8,6 +8,7 @@ import cn.hutool.json.JSONUtil;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
|
|
|
|
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
|
|
import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
|
|
@@ -28,6 +29,7 @@ import com.qunzhixinxi.hnqz.admin.mapper.SysUserSubMapper;
|
|
import com.qunzhixinxi.hnqz.admin.mapper.WmPayOffMapper;
|
|
import com.qunzhixinxi.hnqz.admin.mapper.WmPayOffMapper;
|
|
import com.qunzhixinxi.hnqz.admin.service.*;
|
|
import com.qunzhixinxi.hnqz.admin.service.*;
|
|
import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
|
|
import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
|
|
|
|
+import com.qunzhixinxi.hnqz.common.core.exception.BizException;
|
|
import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
import com.qunzhixinxi.hnqz.common.ding.config.DingConfig;
|
|
import com.qunzhixinxi.hnqz.common.ding.config.DingConfig;
|
|
import com.qunzhixinxi.hnqz.common.ding.entity.*;
|
|
import com.qunzhixinxi.hnqz.common.ding.entity.*;
|
|
@@ -64,6 +66,7 @@ import java.util.*;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.function.Function;
|
|
import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 结算表
|
|
* 结算表
|
|
@@ -754,6 +757,9 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
|
|
note.setSettleDeptSubId(sysDeptSub.getSubId());
|
|
note.setSettleDeptSubId(sysDeptSub.getSubId());
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ // 校验是否财务复核并更新
|
|
|
|
+ this.checkAndUpdateFinancialReviewForSettle(input, operator, sysDept);
|
|
|
|
+
|
|
// 人力家
|
|
// 人力家
|
|
if (SubjectTypeEnum.TYPE_RENLIJIA.getCode().equals(subType)) {
|
|
if (SubjectTypeEnum.TYPE_RENLIJIA.getCode().equals(subType)) {
|
|
return settleByRenLiJia(input, sysDeptSub, operator);
|
|
return settleByRenLiJia(input, sysDeptSub, operator);
|
|
@@ -802,6 +808,77 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 财务复核(通过则直接发起结算)
|
|
|
|
+ *
|
|
|
|
+ * @param input 参数
|
|
|
|
+ * @return {@link R}<{@link ?}>
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public R<?> financialReview(WmScorePackageSettleInput input) {
|
|
|
|
+ HnqzUser operator = SecurityUtils.getUser();
|
|
|
|
+ this.checkAndUpdateFinancialReviewForReview(input, operator);
|
|
|
|
+
|
|
|
|
+ return this.settleIssueBySubType(input);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 校验是否财务复核并更新
|
|
|
|
+ *
|
|
|
|
+ * @param input 结算入参
|
|
|
|
+ * @param operator 操作人
|
|
|
|
+ */
|
|
|
|
+ private void checkAndUpdateFinancialReviewForReview(WmScorePackageSettleInput input, HnqzUser operator) {
|
|
|
|
+ // 1.财务复核员操作通过,则直接发起结算
|
|
|
|
+ // 2.财务复核员操作不通过则改为复核不通过状态,结算状态也改为复核不通过
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
+ Set<Integer> noteIds = input.getNotes().stream().map(WmScorePackageSettleNote::getId).collect(Collectors.toSet());
|
|
|
|
+ List<WmScorePackageSettleNote> settleNotes = noteService.listByIds(noteIds);
|
|
|
|
+ Set<WmScorePackageSettleNote> updateNotes = settleNotes.stream().map(note -> {
|
|
|
|
+ WmScorePackageSettleNote updateNote = new WmScorePackageSettleNote();
|
|
|
|
+ updateNote.setId(note.getId());
|
|
|
|
+ updateNote.setReviewStatus(input.getReviewStatus());
|
|
|
|
+ updateNote.setReviewUser(operator.getId());
|
|
|
|
+ updateNote.setReviewTime(now);
|
|
|
|
+ return updateNote;
|
|
|
|
+ }).collect(Collectors.toSet());
|
|
|
|
+ noteService.updateBatchById(updateNotes);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 校验是否财务复核并更新
|
|
|
|
+ *
|
|
|
|
+ * @param input 结算入参
|
|
|
|
+ * @param operator 操作人
|
|
|
|
+ * @param sysDept 企业信息
|
|
|
|
+ */
|
|
|
|
+ private void checkAndUpdateFinancialReviewForSettle(WmScorePackageSettleInput input, HnqzUser operator, SysDept sysDept) {
|
|
|
|
+ // 校验企业是否配置了财务复核, 有则到财务复核
|
|
|
|
+ if (UpmsType.FinancialReviewType.AUTO.equals(sysDept.getFinancialReviewType())) {
|
|
|
|
+ // 企业配置为自动的,则跳过复核,直接发起结算
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
+ Set<WmScorePackageSettleNote> updateNotes = input.getNotes().stream().map(note -> {
|
|
|
|
+ WmScorePackageSettleNote updateNote = new WmScorePackageSettleNote();
|
|
|
|
+ updateNote.setId(note.getId());
|
|
|
|
+ updateNote.setReviewStatus(UpmsState.SettleFinancialReviewStatus.AUTO);
|
|
|
|
+ updateNote.setReviewUser(operator.getId());
|
|
|
|
+ updateNote.setReviewTime(now);
|
|
|
|
+ return updateNote;
|
|
|
|
+ }).collect(Collectors.toSet());
|
|
|
|
+ noteService.updateBatchById(updateNotes);
|
|
|
|
+ } else {
|
|
|
|
+ // 企业配置为手动的,则判断是否复核通过,
|
|
|
|
+ // 判断如果当前是复核通过,则直接发起结算,如果是不通过则不能发起
|
|
|
|
+ Set<Integer> noteIds = input.getNotes().stream().map(WmScorePackageSettleNote::getId).collect(Collectors.toSet());
|
|
|
|
+ List<WmScorePackageSettleNote> settleNotes = noteService.listByIds(noteIds);
|
|
|
|
+ boolean allMatch = settleNotes.stream()
|
|
|
|
+ .allMatch(note -> UpmsState.SettleFinancialReviewStatus.PASSED.equals(note.getReviewStatus()));
|
|
|
|
+ if (!allMatch) {
|
|
|
|
+ throw new BizException("未复核或复核不通过,不能发起结算");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 福建企赋结算操作
|
|
* 福建企赋结算操作
|
|
*
|
|
*
|