Commit 8765e70f authored by fangxinjiang's avatar fangxinjiang

Merge remote-tracking branch 'origin/develop' into develop

parents 0039186d c5748bcd
......@@ -162,4 +162,18 @@ public class TCheckIdCardController {
public TCheckIdCard checkIdCardSingle(@RequestBody TCheckIdCard tCheckIdCard) {
return tCheckIdCardService.checkIdCardSingle(tCheckIdCard);
}
/**
* @param checkList
* @Description: 校验姓名身份证
* @Author: hgw
* @Date: 2022-6-27 16:23:37
* @return: com.yifu.cloud.v1.common.core.util.R
**/
@Operation(description = "校验薪资姓名身份证")
@SysLog("校验薪资姓名身份证")
@PostMapping("/checkSalaryIdCard")
public R<List<TCheckIdCard>> checkSalaryIdCard(@RequestBody List<TCheckIdCard> checkList) {
return tCheckIdCardService.checkSalaryIdCard(checkList);
}
}
......@@ -34,5 +34,22 @@ public interface TCheckIdCardMapper extends BaseMapper<TCheckIdCard> {
**/
List<TCheckIdCard> getAllList(@Param("tCheckIdCard") TCheckIdCard tCheckIdCard);
/**
* @param idCardList
* @Description: 获取身份证的缓存
* @Author: hgw
* @Date: 2022/7/7 16:00
* @return: java.util.List<com.yifu.cloud.v1.checks.api.entity.TCheckIdCard>
**/
List<TCheckIdCard> getAllListByList(@Param("idCardList") List<String> idCardList);
/**
* @param idCardList
* @Description: 获取正确的身份证的缓存
* @Author: hgw
* @Date: 2022/7/7 16:00
* @return: java.util.List<com.yifu.cloud.v1.checks.api.entity.TCheckIdCard>
**/
List<TCheckIdCard> getTrueListByList(@Param("idCardList") List<String> idCardList);
}
......@@ -3,6 +3,7 @@ package com.yifu.cloud.plus.v1.check.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.check.entity.TCheckLock;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -23,4 +24,6 @@ public interface TCheckLockMapper extends BaseMapper<TCheckLock> {
**/
List<TCheckLock> getAllList();
int getApiNumByMonth(@Param("nowMonth") String nowMonth);
}
......@@ -46,4 +46,6 @@ public interface TCheckIdCardService extends IService<TCheckIdCard> {
R<List<TCheckIdCard>> checkIdCard(List<TCheckIdCard> checkList);
TCheckIdCard checkIdCardSingle(TCheckIdCard tCheckIdCard);
R<List<TCheckIdCard>> checkSalaryIdCard(List<TCheckIdCard> checkList);
}
......@@ -18,4 +18,6 @@ public interface TCheckLockService extends IService<TCheckLock> {
*/
List<TCheckLock> getAllList();
int getApiNumByMonth(String nowMonth);
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.check.entity.TCanCheck;
import com.yifu.cloud.plus.v1.check.entity.TCheckApiNum;
import com.yifu.cloud.plus.v1.check.entity.TCheckIdCard;
import com.yifu.cloud.plus.v1.check.entity.TCheckLock;
......@@ -23,6 +24,7 @@ import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -283,4 +285,239 @@ public class TCheckIdCardServiceImpl extends ServiceImpl<TCheckIdCardMapper, TCh
}
}
private Map<String, TCheckIdCard> getAllMapByList(List<String> idCardList) {
Map<String, TCheckIdCard> returnMap = new HashMap<>();
if (idCardList != null && !idCardList.isEmpty()) {
List<TCheckIdCard> list = baseMapper.getAllListByList(idCardList);
if (list != null && !list.isEmpty()) {
for (TCheckIdCard c : list) {
returnMap.put(c.getIdCard() + CommonConstants.DOWN_LINE_STRING + c.getName(), c);
}
}
}
return returnMap;
}
private Map<String, TCheckIdCard> getTrueMap(TCheckIdCard tCheckIdCard) {
if (tCheckIdCard == null) {
tCheckIdCard = new TCheckIdCard();
}
tCheckIdCard.setIsTrue(CommonConstants.ONE_INT);
List<TCheckIdCard> list = baseMapper.getAllList(tCheckIdCard);
Map<String, TCheckIdCard> returnMap = new HashMap<>();
if (list != null && !list.isEmpty()) {
for (TCheckIdCard c : list) {
returnMap.put(c.getIdCard(), c);
}
}
return returnMap;
}
private Map<String, TCheckIdCard> getTrueMapByList(List<String> idCardList) {
Map<String, TCheckIdCard> returnMap = new HashMap<>();
if (idCardList != null && !idCardList.isEmpty()) {
List<TCheckIdCard> list = baseMapper.getTrueListByList(idCardList);
if (list != null && !list.isEmpty()) {
for (TCheckIdCard c : list) {
returnMap.put(c.getIdCard(), c);
}
}
}
return returnMap;
}
@Override
public R<List<TCheckIdCard>> checkSalaryIdCard(List<TCheckIdCard> checkList) {
TCanCheck tCanCheck= canCheckService.getById(1);
boolean canCheck = false;
if (tCanCheck != null && tCanCheck.getCanCheck() == 1) {
canCheck = true;
}
YifuUser user = SecurityUtils.getUser();
if (user == null || Common.isEmpty(user.getId())) {
return R.failed("请登录!");
}
String nowMonth = DateUtil.addMonth(0);
TCheckApiNum nowMonthNum = tCheckApiNumService.getById(nowMonth);
int nowApiNum = tCheckLockService.getApiNumByMonth(nowMonth);
if (nowMonthNum == null) {
TCheckApiNum lastMonth = tCheckApiNumService.getById(DateUtil.addMonth(-1));
int canApiNum = 10000;
if (lastMonth != null && lastMonth.getCanApiNum() != null) {
canApiNum = lastMonth.getCanApiNum();
}
nowMonthNum = new TCheckApiNum();
nowMonthNum.setId(nowMonth);
nowMonthNum.setCanApiNum(canApiNum);
nowMonthNum.setApiNum(0);
tCheckApiNumService.save(nowMonthNum);
} else if (nowApiNum >= nowMonthNum.getCanApiNum()) {
return R.failed("当月总条数:" + nowMonthNum.getCanApiNum() + "已到达上限!");
}
if (checkList != null && !checkList.isEmpty()) {
TCheckLock lock = new TCheckLock();
lock.setImportNum(checkList.size());
lock.setApiNum(0);
lock.setCreateMonth(nowMonth);
lock.setCreateTime(LocalDateTime.now());
lock.setCreateUser(user.getId());
lock.setDeleteFlag(0);
lock.setCreateUserName(user.getNickname());
tCheckLockService.save(lock);
int canApiNum = nowMonthNum.getCanApiNum();
List<String> idCardList = new ArrayList<>();
for (TCheckIdCard card: checkList) {
if (card.getIdCard() != null) {
idCardList.add(card.getIdCard());
}
}
// 全部(身份证_姓名)
Map<String, TCheckIdCard> returnMap = this.getAllMapByList(idCardList);
// 正确的身份证
Map<String, TCheckIdCard> trueMap = this.getTrueMapByList(idCardList);
TCheckIdCard nowIdCard;
TCheckIdCard lastCard;
Map<String, TCheckIdCard> idCardMap = new HashMap<>();
String userId = String.valueOf(user.getId());
TCheckLock lockUpdate;
int apiNum = 0;
// 有一个错误,就不传200给前端
boolean isTrue = true;
try {
for (TCheckIdCard c : checkList) {
if (Common.isNotNull(c.getIdCard()) && Common.isNotNull(c.getName())) {
lastCard = idCardMap.get(c.getIdCard());
if (lastCard != null) {
c.setIsTrue(lastCard.getIsTrue());
c.setReason(lastCard.getReason());
} else {
// 校验姓名身份证规则
if (!regIdCard(c.getIdCard())) {
c.setIsTrue(0);
c.setReason("身份证格式有误");
} else if (regEmpName(c.getName())) {
c.setIsTrue(0);
c.setReason("姓名含数字或空格,无法校验");
} else {
nowIdCard = returnMap.get(c.getIdCard() + CommonConstants.DOWN_LINE_STRING + c.getName());
if (nowIdCard != null) {
c.setIsTrue(nowIdCard.getIsTrue());
c.setReason(nowIdCard.getReason());
} else {
// 调用对的身份证信息
nowIdCard = trueMap.get(c.getIdCard());
if (nowIdCard != null) {
if (nowIdCard.getName().equals(c.getName())) {
c.setIsTrue(nowIdCard.getIsTrue());
c.setReason(nowIdCard.getReason());
} else {
c.setIsTrue(CommonConstants.ZERO_INT);
c.setReason("姓名错误!");
}
} else {
// 调用API校验
if (nowApiNum < canApiNum) {
nowApiNum++;
apiNum++;
// 安全调用:
this.doSafetyApi(c, canCheck, userId);
returnMap.put(c.getIdCard() + CommonConstants.DOWN_LINE_STRING + c.getName(), c);
} else {
c.setIsTrue(0);
c.setReason("调用花钱的Api的条数已达上限:" + canApiNum + ",请联系管理员处理!");
}
}
}
}
// 将同身份证的结果存储下来备用,防止撞库
idCardMap.put(c.getIdCard(), c);
}
} else {
c.setIsTrue(0);
c.setReason("姓名身份证不可为空");
}
if (isTrue && c.getIsTrue() == 0) {
isTrue = false;
}
}
} catch (Exception e) {
returnMap.clear();
trueMap.clear();
lockUpdate = new TCheckLock();
lockUpdate.setId(lock.getId());
lockUpdate.setDeleteFlag(CommonConstants.ONE_INT);
lockUpdate.setApiNum(apiNum);
tCheckLockService.updateById(lockUpdate);
throw new RuntimeException(e.getMessage() == null ? "校验身份证导入失败!" : "校验身份证导入失败:" + e.getMessage());
} finally {
returnMap.clear();
trueMap.clear();
lockUpdate = new TCheckLock();
lockUpdate.setId(lock.getId());
lockUpdate.setDeleteFlag(CommonConstants.ONE_INT);
lockUpdate.setDeleteFlag(CommonConstants.ONE_INT);
lockUpdate.setApiNum(apiNum);
tCheckLockService.updateById(lockUpdate);
}
if (isTrue) {
return R.ok();
} else {
return new R<>(CommonConstants.ONE_INT, "身份证姓名校验不通过!", checkList);
}
}
return R.failed("数据为空!");
}
/**
* @Description: 多线程调用api,每次调用前查询一下数据库:
* @Author: hgw
* @Date: 2022/6/27 17:09
* @return: void
**/
private void doSafetyApi(TCheckIdCard c, boolean canCheck, String userId) {
TCheckIdCard check = new TCheckIdCard();
check.setIdCard(c.getIdCard());
Map<String, TCheckIdCard> checkMap = this.getAllMap(check);
if (checkMap == null || checkMap.isEmpty()) {
// 调用对的身份证信息
Map<String, TCheckIdCard> trueMap = this.getTrueMap(check);
check = trueMap.get(c.getIdCard());
if (check != null) {
if (check.getName().equals(c.getName())) {
c.setIsTrue(check.getIsTrue());
c.setReason(check.getReason());
} else {
c.setIsTrue(CommonConstants.ZERO_INT);
c.setReason("姓名错误!");
}
} else {
// 调用花钱的
this.moneyCheck(c, canCheck, userId);
}
} else {
check = checkMap.get(c.getIdCard() + CommonConstants.DOWN_LINE_STRING + c.getName());
if (check != null) {
c.setIsTrue(check.getIsTrue());
c.setReason(check.getReason());
} else {
// 调用花钱的
this.moneyCheck(c, canCheck, userId);
}
}
}
// 调用花钱的
private void moneyCheck(TCheckIdCard c, boolean canCheck, String userId) {
// 调用花钱的
ChecksUtil.checkIdCard(c, canCheck);
c.setCreateUser(userId);
c.setCreateTime(LocalDateTime.now());
c.setType(CommonConstants.ONE_INT);
this.save(c);
}
}
......@@ -22,4 +22,9 @@ public class TCheckLockServiceImpl extends ServiceImpl<TCheckLockMapper, TCheckL
return baseMapper.getAllList();
}
@Override
public int getApiNumByMonth(String nowMonth) {
return baseMapper.getApiNumByMonth(nowMonth);
}
}
......@@ -60,4 +60,26 @@
order by a.CREATE_TIME desc
</select>
<select id="getAllListByList" resultMap="tCheckIdCardMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_check_id_card a
where a.id_card in
<foreach item="item" index="index" collection="idCardList" open="(" separator="," close=")">
#{item}
</foreach>
order by a.CREATE_TIME desc
</select>
<select id="getTrueListByList" resultMap="tCheckIdCardMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_check_id_card a
where a.is_true = 1 and a.id_card in
<foreach item="item" index="index" collection="idCardList" open="(" separator="," close=")">
#{item}
</foreach>
order by a.CREATE_TIME desc
</select>
</mapper>
......@@ -30,4 +30,9 @@
where a.DELETE_FLAG = 0
</select>
<!--获取所有数据-->
<select id="getApiNumByMonth" resultType="java.lang.Integer">
select ifnull(sum(c.API_NUM),0) apiNum from t_check_lock c where c.CREATE_MONTH = #{nowMonth}
</select>
</mapper>
......@@ -300,6 +300,7 @@ public interface CommonConstants {
public static final String ZIP_TYPE = "zip";
int BATCH_COUNT = 100;
int BATCH_COUNT1 = 1000;
String IMPORT_DATA_ANALYSIS_ERROR = "数据导入解析异常,请检查表数据格式(1.日期格式:yyyy-MM-dd,2.比例为整数且不含%)";
String CREATE_TIME = "CREATE_TIME";
String ID = "ID";
......
......@@ -74,13 +74,7 @@ public class TConfigSalary extends Model<TConfigSalary> implements Serializable
@ExcelAttribute(name = "工资月份", isNotEmpty = true,errorInfo = "工资月份不能为空" )
@ExcelProperty(value="工资月份")
private Integer salaryMonth;
/**
* 结算月份
*/
@NotNull(message = "结算月份不能为空")
@ExcelAttribute(name = "结算月份", isNotEmpty = true,errorInfo = "结算月份不能为空" )
@ExcelProperty(value="结算月份")
private Integer settleMonth;
/**
* 社保月份
*/
......@@ -116,12 +110,5 @@ public class TConfigSalary extends Model<TConfigSalary> implements Serializable
@ExcelAttribute(name = "发放方式", isNotEmpty = true,errorInfo = "发放方式不能为空" )
@ExcelProperty(value="发放方式(0:现金;1:转账)")
private Integer grantType;
/**
* 年终奖扣税方案
*/
@NotNull(message = "年终奖扣税方案不能为空")
@ExcelAttribute(name = "年终奖扣税方案", errorInfo = "年终奖扣税方案不能为空" )
@ExcelProperty(value="年终奖扣税方案(0:合并;1:单独;2:自动计算)")
private Integer annualBonusType;
}
......@@ -23,10 +23,9 @@ import javax.validation.constraints.NotNull;
* @date 2021-10-08 14:36:56
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("t_salary_standard_set_detail")
@Tag(name = "薪资工资条配置明细表")
public class TSalaryStandardSetDetail extends BaseEntity {
public class TSalaryStandardSetDetail{
private static final long serialVersionUID = 1L;
/**
*
......
......@@ -21,62 +21,43 @@ import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* 统计-全年一次性奖金
* 全年一次性奖金申报表
*
* @author hgw
* @date 2022-08-05 11:40:15
* @author huyc
* @date 2022-08-14 21:31:15
*/
@Data
@TableName("t_statistics_annual_bonus")
@Schema(description = "统计-全年一次性奖金")
public class TStatisticsAnnualBonus {
@TableName("t_statistics_bonus")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "全年一次性奖金申报表")
public class TStatisticsBonus extends BaseEntity {
/**
* id
* ID
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("id")
@ExcelProperty("ID")
@Schema(description = "ID")
private String id;
/**
* 税务主体(封面抬头)
* 申报单位
*/
@ExcelAttribute(name = "税务主体(封面抬头)", maxLength = 50)
@Length(max = 50, message = "税务主体(封面抬头)不能超过50个字符")
@ExcelProperty("税务主体(封面抬头)")
private String invoiceTitle;
/**
* 结算部门id
*/
@ExcelAttribute(name = "结算部门id", isNotEmpty = true, errorInfo = "结算部门id不能为空", maxLength = 32)
@NotBlank(message = "结算部门id不能为空")
@Length(max = 32, message = "结算部门id不能超过32个字符")
@ExcelProperty("结算部门id")
private String settleDepartId;
/**
* 结算部门no
*/
@ExcelAttribute(name = "结算部门no", isNotEmpty = true, errorInfo = "结算部门no不能为空", maxLength = 50)
@NotBlank(message = "结算部门no不能为空")
@Length(max = 50, message = "结算部门no不能超过50个字符")
@ExcelProperty("结算部门no")
private String settleDepartNo;
/**
* 结算部门name
*/
@ExcelAttribute(name = "结算部门name", isNotEmpty = true, errorInfo = "结算部门name不能为空", maxLength = 50)
@NotBlank(message = "结算部门name不能为空")
@Length(max = 50, message = "结算部门name不能超过50个字符")
@ExcelProperty("结算部门name")
private String settleDepartName;
@ExcelAttribute(name = "申报单位", maxLength = 32)
@Length(max = 32, message = "申报单位不能超过32个字符")
@ExcelProperty("申报单位")
@Schema(description = "申报单位")
private String declareUnit;
/**
* 申报月份(YYYYMM)
*/
......@@ -84,60 +65,62 @@ public class TStatisticsAnnualBonus {
@NotBlank(message = "申报月份(YYYYMM)不能为空")
@Length(max = 6, message = "申报月份(YYYYMM)不能超过6个字符")
@ExcelProperty("申报月份(YYYYMM)")
@Schema(description = "申报月份(YYYYMM)")
private String declareMonth;
/**
* 员工 ID
*/
@ExcelAttribute(name = "员工 ID", maxLength = 32)
@Length(max = 32, message = "员工 ID不能超过32个字符")
@ExcelProperty("员工 ID")
private String empId;
/**
* 员工姓名
*/
@ExcelAttribute(name = "员工姓名", maxLength = 50)
@Length(max = 50, message = "员工姓名不能超过50个字符")
@ExcelAttribute(name = "员工姓名", maxLength = 32)
@Length(max = 32, message = "员工姓名不能超过32个字符")
@ExcelProperty("员工姓名")
@Schema(description = "员工姓名")
private String empName;
/**
* 员工身份证号
* 身份证号
*/
@ExcelAttribute(name = "员工身份证号", maxLength = 25)
@Length(max = 25, message = "员工身份证号不能超过25个字符")
@ExcelProperty("员工身份证号")
@ExcelAttribute(name = "身份证号", maxLength = 32)
@Length(max = 32, message = "身份证号不能超过32个字符")
@ExcelProperty("身份证号")
@Schema(description = "身份证号")
private String empIdcard;
/**
* 年终奖
*/
@ExcelAttribute(name = "年终奖")
@ExcelProperty("年终奖")
@Schema(description = "年终奖(元)")
private BigDecimal annualBonus;
/**
* 年终奖单独税
* 年终奖单独扣税应缴税额
*/
@ExcelAttribute(name = "年终奖单独扣税应缴税额")
@ExcelProperty("年终奖单独扣税应缴税额")
@Schema(description = "年终奖单独扣税应缴税额")
private BigDecimal bonusTax;
/**
* 项目id
*/
@Schema(description = "项目id")
private String deptId;
/**
* 项目编码
*/
@ExcelAttribute(name = "年终奖单独税")
@ExcelProperty("年终奖单独税")
private BigDecimal tax;
@Schema(description = "项目编码")
private String deptNo;
/**
* 项目名称
*/
@Schema(description = "项目名称")
private String deptName;
/**
* 单位id
*/
@ExcelAttribute(name = "单位id", maxLength = 32)
@Length(max = 32, message = "单位id不能超过32个字符")
@ExcelProperty("单位id")
@Schema(description = "单位id")
private String unitId;
/**
* 单位no
* 单位编码
*/
@ExcelAttribute(name = "单位no", maxLength = 50)
@Length(max = 50, message = "单位no不能超过50个字符")
@ExcelProperty("单位no")
@Schema(description = "单位编码")
private String unitNo;
/**
* 单位name
*/
@ExcelAttribute(name = "单位name", maxLength = 50)
@Length(max = 50, message = "单位name不能超过50个字符")
@ExcelProperty("单位name")
private String unitName;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.salary.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.RowIndex;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 统计-全年一次性奖金
*
* @author huyc
* @date 2022-08-05 11:40:15
*/
@Data
public class TStatisticsAnnualBonusImportVo extends RowIndex implements Serializable {
/**
* 员工姓名
*/
@Length(max = 50, message = "员工姓名 不能超过50 个字符")
@NotNull(message = "员工姓名不可为空")
@ExcelAttribute(name = "员工姓名", maxLength = 50, isNotEmpty = true)
@Schema(description = "员工姓名")
@ExcelProperty("员工姓名")
private String empName;
/**
* 员工身份证号
*/
@Length(max = 25, message = "身份证号不能超过25个字符")
@NotNull(message = "身份证号不可为空")
@ExcelAttribute(name = "身份证号", maxLength = 25, isNotEmpty = true)
@Schema(description = "身份证号")
@ExcelProperty("身份证号")
private String empIdcard;
/**
* 年终奖
*/
@ExcelAttribute(name = "待发年终奖", isNotEmpty = true)
@NotNull(message = "待发年终奖不可为空")
@Schema(description = "待发年终奖")
@ExcelProperty("待发年终奖")
private BigDecimal preAnnualBonus;
/**
* 年终奖单独税
*/
@ExcelAttribute(name = "待发12月工资", isNotEmpty = true)
@NotNull(message = "待发12月工资不可为空")
@Schema(description = "待发12月工资")
@ExcelProperty("待发12月工资")
private BigDecimal preDecSalary;
/**
* 年终奖单独扣税12月税费
*/
@ExcelAttribute(name = "年终奖单独扣税12月税费")
@Schema(description = "年终奖单独扣税12月税费")
@ExcelProperty("年终奖单独扣税12月税费")
private BigDecimal onlyTax;
/**
* 年终奖合并扣税12月税费
*/
@ExcelAttribute(name = "年终奖合并扣税12月税费")
@Schema(description = "年终奖合并扣税12月税费")
@ExcelProperty("年终奖合并扣税12月税费")
private BigDecimal sumTax;
/**
* 最优方案-年终奖
*/
@ExcelAttribute(name = "最优方案-年终奖")
@Schema(description = "最优方案-年终奖")
@ExcelProperty("最优方案-年终奖")
private BigDecimal bestSolutionTax;
/**
* 最优方案-12月扣税
*/
@ExcelAttribute(name = "最优方案-12月扣税")
@Schema(description = "最优方案-12月扣税")
@ExcelProperty("最优方案-12月扣税")
private BigDecimal bestSolutionDecTax;
}
......@@ -16,20 +16,20 @@
*/
package com.yifu.cloud.plus.v1.yifu.salary.vo;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsAnnualBonus;
import io.swagger.v3.oas.annotations.media.Schema;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsBonus;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 统计-全年一次性奖金
* 全年一次性奖金申报表
*
* @author hgw
* @date 2022-08-05 11:40:15
* @author huyc
* @date 2022-08-14 21:31:15
*/
@Data
public class TStatisticsAnnualBonusSearchVo extends TStatisticsAnnualBonus {
public class TStatisticsBonusSearchVo extends TStatisticsBonus {
/**
* 多选导出或删除等操作
......
......@@ -19,10 +19,13 @@ package com.yifu.cloud.plus.v1.yifu.salary.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.RowIndex;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
......@@ -30,49 +33,32 @@ import java.io.Serializable;
import java.math.BigDecimal;
/**
* 统计-全年一次性奖金
* 全年一次性奖金申报表
*
* @author hgw
* @date 2022-08-05 11:40:15
* @author huyc
* @date 2022-08-14 21:31:15
*/
@Data
public class TStatisticsAnnualBonusVo extends RowIndex implements Serializable {
public class TStatisticsBonusVo extends RowIndex implements Serializable {
/**
* 税务主体(封面抬头)
*/
@Length(max = 50, message = "税务主体(封面抬头) 不能超过50 个字符")
@ExcelAttribute(name = "税务主体(封面抬头)", maxLength = 50)
@Schema(description = "税务主体(封面抬头)")
@ExcelProperty("税务主体(封面抬头)")
private String invoiceTitle;
/**
* 结算部门id
* ID
*/
@NotBlank(message = "结算部门id 不能为空")
@Length(max = 32, message = "结算部门id 不能超过32 个字符")
@ExcelAttribute(name = "结算部门id", isNotEmpty = true, errorInfo = "结算部门id 不能为空", maxLength = 32)
@Schema(description = "结算部门id")
@ExcelProperty("结算部门id")
private String settleDepartId;
@TableId(type = IdType.ASSIGN_ID)
@NotBlank(message = "ID 不能为空")
@Length(max = 32, message = "ID 不能超过32 个字符")
@ExcelAttribute(name = "ID", isNotEmpty = true, errorInfo = "ID 不能为空", maxLength = 32)
@Schema(description = "ID")
@ExcelProperty("ID")
private String id;
/**
* 结算部门no
* 申报单位
*/
@NotBlank(message = "结算部门no 不能为空")
@Length(max = 50, message = "结算部门no 不能超过50 个字符")
@ExcelAttribute(name = "结算部门no", isNotEmpty = true, errorInfo = "结算部门no 不能为空", maxLength = 50)
@Schema(description = "结算部门no")
@ExcelProperty("结算部门no")
private String settleDepartNo;
/**
* 结算部门name
*/
@NotBlank(message = "结算部门name 不能为空")
@Length(max = 50, message = "结算部门name 不能超过50 个字符")
@ExcelAttribute(name = "结算部门name", isNotEmpty = true, errorInfo = "结算部门name 不能为空", maxLength = 50)
@Schema(description = "结算部门name")
@ExcelProperty("结算部门name")
private String settleDepartName;
@Length(max = 32, message = "申报单位 不能超过32 个字符")
@ExcelAttribute(name = "申报单位", maxLength = 32)
@Schema(description = "申报单位")
@ExcelProperty("申报单位")
private String declareUnit;
/**
* 申报月份(YYYYMM)
*/
......@@ -82,29 +68,21 @@ public class TStatisticsAnnualBonusVo extends RowIndex implements Serializable {
@Schema(description = "申报月份(YYYYMM)")
@ExcelProperty("申报月份(YYYYMM)")
private String declareMonth;
/**
* 员工 ID
*/
@Length(max = 32, message = "员工 ID 不能超过32 个字符")
@ExcelAttribute(name = "员工 ID", maxLength = 32)
@Schema(description = "员工 ID")
@ExcelProperty("员工 ID")
private String empId;
/**
* 员工姓名
*/
@Length(max = 50, message = "员工姓名 不能超过50 个字符")
@ExcelAttribute(name = "员工姓名", maxLength = 50)
@Length(max = 32, message = "员工姓名 不能超过32 个字符")
@ExcelAttribute(name = "员工姓名", maxLength = 32)
@Schema(description = "员工姓名")
@ExcelProperty("员工姓名")
private String empName;
/**
* 员工身份证号
* 身份证号
*/
@Length(max = 25, message = "员工身份证号 不能超过25 个字符")
@ExcelAttribute(name = "员工身份证号", maxLength = 25)
@Schema(description = "员工身份证号")
@ExcelProperty("员工身份证号")
@Length(max = 32, message = "身份证号 不能超过32 个字符")
@ExcelAttribute(name = "身份证号", maxLength = 32)
@Schema(description = "身份证号")
@ExcelProperty("身份证号")
private String empIdcard;
/**
* 年终奖
......@@ -114,12 +92,36 @@ public class TStatisticsAnnualBonusVo extends RowIndex implements Serializable {
@ExcelProperty("年终奖")
private BigDecimal annualBonus;
/**
* 年终奖单独
* 年终奖单独扣税应缴税额
*/
@ExcelAttribute(name = "年终奖单独税")
@Schema(description = "年终奖单独税")
@ExcelProperty("年终奖单独税")
private BigDecimal tax;
@ExcelAttribute(name = "年终奖单独扣税应缴税额")
@Schema(description = "年终奖单独扣税应缴税额")
@ExcelProperty("年终奖单独扣税应缴税额")
private BigDecimal bonusTax;
/**
* 项目id
*/
@Length(max = 32, message = "项目id 不能超过32 个字符")
@ExcelAttribute(name = "项目id", maxLength = 32)
@Schema(description = "项目id")
@ExcelProperty("项目id")
private String deptId;
/**
* 项目编码
*/
@Length(max = 50, message = "项目编码 不能超过50 个字符")
@ExcelAttribute(name = "项目编码", maxLength = 50)
@Schema(description = "项目编码")
@ExcelProperty("项目编码")
private String deptNo;
/**
* 项目名称
*/
@Length(max = 50, message = "项目名称 不能超过50 个字符")
@ExcelAttribute(name = "项目名称", maxLength = 50)
@Schema(description = "项目名称")
@ExcelProperty("项目名称")
private String deptName;
/**
* 单位id
*/
......@@ -129,20 +131,12 @@ public class TStatisticsAnnualBonusVo extends RowIndex implements Serializable {
@ExcelProperty("单位id")
private String unitId;
/**
* 单位no
* 单位编码
*/
@Length(max = 50, message = "单位no 不能超过50 个字符")
@ExcelAttribute(name = "单位no", maxLength = 50)
@Schema(description = "单位no")
@ExcelProperty("单位no")
@Length(max = 50, message = "单位编码 不能超过50 个字符")
@ExcelAttribute(name = "单位编码", maxLength = 50)
@Schema(description = "单位编码")
@ExcelProperty("单位编码")
private String unitNo;
/**
* 单位name
*/
@Length(max = 50, message = "单位name 不能超过50 个字符")
@ExcelAttribute(name = "单位name", maxLength = 50)
@Schema(description = "单位name")
@ExcelProperty("单位name")
private String unitName;
}
......@@ -17,15 +17,11 @@
package com.yifu.cloud.plus.v1.yifu.salary.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.RowIndex;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
......
......@@ -19,9 +19,16 @@ package com.yifu.cloud.plus.v1.yifu.salary.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TApprovalRecord;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TSalaryStandard;
import com.yifu.cloud.plus.v1.yifu.salary.service.TApprovalRecordService;
import com.yifu.cloud.plus.v1.yifu.salary.service.TSalaryStandardService;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TSalaryStandardSearchVo;
import io.swagger.v3.oas.annotations.Operation;
......@@ -31,6 +38,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.Date;
/**
......@@ -47,6 +56,7 @@ public class TSalaryStandardController {
private final TSalaryStandardService tSalaryStandardService;
private final TApprovalRecordService auditLogService;
/**
* 简单分页查询
......@@ -141,4 +151,34 @@ public class TSalaryStandardController {
@RequestParam String id) {
return tSalaryStandardService.salaryStandardAudit(auditFlag, AuditRemark, id);
}
/**
* 保存并提交
* @return
*/
@Operation(description = "保存并提交")
@PostMapping("/doSubmit")
public R salaryStandardAudit(@RequestBody TSalaryStandard tSalaryStandard) {
if (tSalaryStandard != null && Common.isNotNull(tSalaryStandard.getId())) {
YifuUser user = SecurityUtils.getUser();
if (user != null) {
TApprovalRecord tApprovalRecord = new TApprovalRecord();
tApprovalRecord.setApprovalResult(CommonConstants.TWO_STRING);
tApprovalRecord.setApprovalOpinion("提交审核");
tApprovalRecord.setSalaryId(tSalaryStandard.getId());
tApprovalRecord.setNodeId("提交审核");
tApprovalRecord.setApprovalMan(user.getId());
tApprovalRecord.setApprovalManName(user.getNickname());
tApprovalRecord.setApprovalTime(DateUtil.getCurrentDateTime());
auditLogService.save(tApprovalRecord);
tSalaryStandard.setSubmitTime(new Date());
tSalaryStandardService.updateById(tSalaryStandard);
return R.ok("提交成功!");
} else {
return R.failed("请登录!");
}
} else {
return R.failed("请传参!");
}
}
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.salary.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsAnnualBonus;
import com.yifu.cloud.plus.v1.yifu.salary.service.TStatisticsAnnualBonusService;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsAnnualBonusSearchVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* 统计-全年一次性奖金
*
* @author hgw
* @date 2022-08-05 11:40:15
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/tstatisticsannualbonus")
@Tag(name = "统计-全年一次性奖金管理")
@Slf4j
public class TStatisticsAnnualBonusController {
private final TStatisticsAnnualBonusService tStatisticsAnnualBonusService;
/**
* 简单分页查询
*
* @param page 分页对象
* @param tStatisticsAnnualBonus 统计-全年一次性奖金
* @return
*/
@Operation(description = "简单分页查询")
@GetMapping("/page")
public R<IPage<TStatisticsAnnualBonus>> getTStatisticsAnnualBonusPage(Page<TStatisticsAnnualBonus> page, TStatisticsAnnualBonusSearchVo tStatisticsAnnualBonus) {
return new R<>(tStatisticsAnnualBonusService.getTStatisticsAnnualBonusPage(page, tStatisticsAnnualBonus));
}
/**
* 不分页查询
*
* @param tStatisticsAnnualBonus 统计-全年一次性奖金
* @return
*/
@Operation(summary = "不分页查询", description = "不分页查询")
@PostMapping("/noPage")
public R<List<TStatisticsAnnualBonus>> getTStatisticsAnnualBonusNoPage(@RequestBody TStatisticsAnnualBonusSearchVo tStatisticsAnnualBonus) {
return R.ok(tStatisticsAnnualBonusService.noPageDiy(tStatisticsAnnualBonus));
}
/**
* 通过id查询统计-全年一次性奖金
*
* @param id id
* @return R
*/
@Operation(summary = "通过id查询", description = "通过id查询")
@GetMapping("/{id}")
public R<TStatisticsAnnualBonus> getById(@PathVariable("id") String id) {
return R.ok(tStatisticsAnnualBonusService.getById(id));
}
/**
* 新增统计-全年一次性奖金
*
* @param tStatisticsAnnualBonus 统计-全年一次性奖金
* @return R
*/
@Operation(summary = "新增统计-全年一次性奖金", description = "新增统计-全年一次性奖金:hasPermission('salary_tstatisticsannualbonus_add')")
@SysLog("新增统计-全年一次性奖金")
@PostMapping
@PreAuthorize("@pms.hasPermission('salary_tstatisticsannualbonus_add')")
public R<Boolean> save(@RequestBody TStatisticsAnnualBonus tStatisticsAnnualBonus) {
return R.ok(tStatisticsAnnualBonusService.save(tStatisticsAnnualBonus));
}
/**
* 通过id删除统计-全年一次性奖金
*
* @param id id
* @return R
*/
@Operation(summary = "通过id删除统计-全年一次性奖金", description = "通过id删除统计-全年一次性奖金:hasPermission('salary_tstatisticsannualbonus_del')")
@SysLog("通过id删除统计-全年一次性奖金")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('salary_tstatisticsannualbonus_del')")
public R<Boolean> removeById(@PathVariable String id) {
return R.ok(tStatisticsAnnualBonusService.removeById(id));
}
/**
* 统计-全年一次性奖金 批量导出
*
* @author hgw
* @date 2022-08-05 11:40:15
**/
@Operation(description = "导出统计-全年一次性奖金 hasPermission('salary_tstatisticsannualbonus-export')")
@PostMapping("/export")
@PreAuthorize("@pms.hasPermission('salary_tstatisticsannualbonus-export')")
public void export(HttpServletResponse response, @RequestBody TStatisticsAnnualBonusSearchVo searchVo) {
tStatisticsAnnualBonusService.listExport(response, searchVo);
}
/**
* 年终奖分配方案导入导出
*
* @author huyc
* @date 2022-08-08
**/
@Operation(description = "年终奖分配方案导入导出 hasPermission('salary_tstatisticsannualbonus_import')")
@PostMapping("/bestSolutionExport")
@PreAuthorize("@pms.hasPermission('salary_tstatisticsannualbonus_import')")
public R<List<ErrorMessage>> bestSolutionExport(@RequestBody MultipartFile file
, HttpServletResponse response, List<String> exportFields) throws IOException {
return tStatisticsAnnualBonusService.bestSendExport(file.getInputStream(), response, exportFields);
}
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.salary.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsBonus;
import com.yifu.cloud.plus.v1.yifu.salary.service.TStatisticsBonusService;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsBonusSearchVo;
import lombok.SneakyThrows;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 全年一次性奖金申报表
*
* @author huyc
* @date 2022-08-14 21:31:15
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/tstatisticsbonus" )
@Tag(name = "全年一次性奖金申报表管理")
public class TStatisticsBonusController {
private final TStatisticsBonusService tStatisticsBonusService;
/**
* 简单分页查询
* @param page 分页对象
* @param tStatisticsBonus 全年一次性奖金申报表
* @return
*/
@Operation(description = "简单分页查询")
@GetMapping("/page")
public R<IPage<TStatisticsBonus>> getTStatisticsBonusPage(Page<TStatisticsBonus> page, TStatisticsBonusSearchVo tStatisticsBonus) {
return new R<>(tStatisticsBonusService.getTStatisticsBonusPage(page,tStatisticsBonus));
}
/**
* 不分页查询
* @param tStatisticsBonus 全年一次性奖金申报表
* @return
*/
@Operation(summary = "不分页查询", description = "不分页查询")
@PostMapping("/noPage" )
public R<List<TStatisticsBonus>> getTStatisticsBonusNoPage(@RequestBody TStatisticsBonusSearchVo tStatisticsBonus) {
return R.ok(tStatisticsBonusService.noPageDiy(tStatisticsBonus));
}
/**
* 新增全年一次性奖金申报表
* @param tStatisticsBonus 全年一次性奖金申报表
* @return R
*/
@Operation(summary = "新增全年一次性奖金申报表", description = "新增全年一次性奖金申报表:hasPermission('salary_tstatisticsbonus_add')")
@SysLog("新增全年一次性奖金申报表" )
@PostMapping
@PreAuthorize("@pms.hasPermission('salary_tstatisticsbonus_add')" )
public R<Boolean> save(@RequestBody TStatisticsBonus tStatisticsBonus) {
return R.ok(tStatisticsBonusService.save(tStatisticsBonus));
}
/**
* 通过id删除全年一次性奖金申报表
* @param id id
* @return R
*/
@Operation(summary = "通过id删除全年一次性奖金申报表", description = "通过id删除全年一次性奖金申报表:hasPermission('salary_tstatisticsbonus_del')")
@SysLog("通过id删除全年一次性奖金申报表" )
@DeleteMapping("/{id}" )
@PreAuthorize("@pms.hasPermission('salary_tstatisticsbonus_del')" )
public R<Boolean> removeById(@PathVariable String id) {
return R.ok(tStatisticsBonusService.removeById(id));
}
/**
* 全年一次性奖金申报表 批量导入
*
* @author huyc
* @date 2022-08-14 21:31:15
**/
@SneakyThrows
@Operation(description = "批量新增全年一次性奖金申报表 hasPermission('salary_tstatisticsbonus-batch-import')")
@SysLog("批量新增全年一次性奖金申报表")
@PostMapping("/importListAdd")
@PreAuthorize("@pms.hasPermission('salary_tstatisticsbonus-batch-import')")
public R<List<ErrorMessage>> importListAdd(@RequestBody MultipartFile file){
return tStatisticsBonusService.importDiy(file.getInputStream());
}
/**
* 全年一次性奖金申报表 批量导出
* @author huyc
* @date 2022-08-14 21:31:15
**/
@Operation(description = "导出全年一次性奖金申报表 hasPermission('salary_tstatisticsbonus-export')")
@PostMapping("/export")
@PreAuthorize("@pms.hasPermission('salary_tstatisticsbonus-export')")
public void export(HttpServletResponse response, @RequestBody TStatisticsBonusSearchVo searchVo) {
tStatisticsBonusService.listExport(response,searchVo);
}
/**
* 全年一次性奖金申报表 批量删除
*
* @author huyc
* @date 2022-08-14 21:31:15
**/
@Operation(description = "批量删除全年一次性奖金申报表 hasPermission('salary_tstatisticsbonus_del')")
@SysLog("批量删除全年一次性奖金申报表")
@PostMapping("/batchDelete")
@PreAuthorize("@pms.hasPermission('salary_tstatisticsbonus_del')")
public R batchDelete(@RequestBody String declareMonth){
return tStatisticsBonusService.batchDelete(declareMonth);
}
}
......@@ -147,7 +147,7 @@ public class TStatisticsDeclarerController {
**/
@Operation(description = "导出申报对象表 hasPermission('salary_tstatisticsdeclarer-export')")
@PostMapping("/export")
@PreAuthorize("@pms.hasPermission('salary_tstatisticsdeclarer-export')")
// @PreAuthorize("@pms.hasPermission('salary_tstatisticsdeclarer-export')")
public void export(HttpServletResponse response, @RequestBody TStatisticsDeclarerSearchVo searchVo) {
tStatisticsDeclarerService.listExport(response,searchVo);
}
......
......@@ -18,23 +18,24 @@
package com.yifu.cloud.plus.v1.yifu.salary.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsAnnualBonus;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsBonus;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 统计-全年一次性奖金
* 全年一次性奖金申报表
*
* @author hgw
* @date 2022-08-05 11:40:15
* @author huyc
* @date 2022-08-14 21:31:15
*/
@Mapper
public interface TStatisticsAnnualBonusMapper extends BaseMapper<TStatisticsAnnualBonus> {
public interface TStatisticsBonusMapper extends BaseMapper<TStatisticsBonus> {
/**
* 统计-全年一次性奖金简单分页查询
* @param tStatisticsAnnualBonus 统计-全年一次性奖金
* 全年一次性奖金申报表简单分页查询
* @param tStatisticsBonus 全年一次性奖金申报表
* @return
*/
IPage<TStatisticsAnnualBonus> getTStatisticsAnnualBonusPage(Page<TStatisticsAnnualBonus> page, @Param("tStatisticsAnnualBonus") TStatisticsAnnualBonus tStatisticsAnnualBonus);
IPage<TStatisticsBonus> getTStatisticsBonusPage(Page<TStatisticsBonus> page, @Param("tStatisticsBonus") TStatisticsBonus tStatisticsBonus);
}
......@@ -17,43 +17,41 @@
package com.yifu.cloud.plus.v1.yifu.salary.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsBonus;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsAnnualBonus;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsAnnualBonusSearchVo;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsBonusSearchVo;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
/**
* 统计-全年一次性奖金
* 全年一次性奖金申报表
*
* @author hgw
* @date 2022-08-05 11:40:15
* @author huyc
* @date 2022-08-14 21:31:15
*/
public interface TStatisticsAnnualBonusService extends IService<TStatisticsAnnualBonus> {
public interface TStatisticsBonusService extends IService<TStatisticsBonus> {
/**
* 统计-全年一次性奖金简单分页查询
* @param tStatisticsAnnualBonus 统计-全年一次性奖金
* 全年一次性奖金申报表简单分页查询
* @param tStatisticsBonus 全年一次性奖金申报表
* @return
*/
IPage<TStatisticsAnnualBonus> getTStatisticsAnnualBonusPage(Page<TStatisticsAnnualBonus> page,
TStatisticsAnnualBonusSearchVo tStatisticsAnnualBonus);
IPage<TStatisticsBonus> getTStatisticsBonusPage(Page<TStatisticsBonus> page, TStatisticsBonusSearchVo tStatisticsBonus);
R<List<ErrorMessage>> importDiy(InputStream inputStream);
void listExport(HttpServletResponse response, TStatisticsAnnualBonusSearchVo searchVo);
void listExport(HttpServletResponse response, TStatisticsBonusSearchVo searchVo);
List<TStatisticsAnnualBonus> noPageDiy(TStatisticsAnnualBonusSearchVo searchVo);
List<TStatisticsBonus> noPageDiy(TStatisticsBonusSearchVo searchVo);
/**
* 年终奖分配方案导入导出
* @param inputStream
* 批量删除全年一次性奖金申报表
* @param declareMonth 申报月份
* @return
*/
R<List<ErrorMessage>> bestSendExport(InputStream inputStream, HttpServletResponse response,List<String> exportFields);
R batchDelete(String declareMonth);
}
......@@ -159,7 +159,7 @@ public class SalaryUploadServiceImpl extends ServiceImpl<TSalaryStandardMapper,
Map<String, Integer> ownEmployeeMap = tOwnDeptService.getOwnEmpMap();
// 2.6.6:校验导入数据重复的Map格式:#身份证号_工资月份_报表类型_应发金额
Map<String, Integer> checkMap = tSalaryAccountService.getAccountCheckMap(dept.getId(), DateUtil.addMonth(configSalary.getSettleMonth()));
Map<String, Integer> checkMap = tSalaryAccountService.getAccountCheckMap(dept.getId(), DateUtil.addMonth(configSalary.getSalaryMonth()));
util1.getJsonStringToList(user, jsonString,
dept, configSalary, salaryConfigMap, isMustMap, empIdCardMap, empNameMap, isDuplicateName
, salaryType, invoiceTitle, employeeService, checkMap, repeatFlag, ownEmployeeMap, ownDeptMap, tSalaryAccountService);
......@@ -173,7 +173,8 @@ public class SalaryUploadServiceImpl extends ServiceImpl<TSalaryStandardMapper,
return R.failed(returnVo);
} else {
if (null != saList && !saList.isEmpty()) {
return R.ok(saList);
// return R.ok(saList)
return this.saveAndSubmit(saList);
} else {
return R.failed("导入数据不可为空");
}
......
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.salary.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.archives.vo.EmployeeProjectExportVO;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsAnnualBonus;
import com.yifu.cloud.plus.v1.yifu.salary.mapper.TStatisticsAnnualBonusMapper;
import com.yifu.cloud.plus.v1.yifu.salary.service.TStatisticsAnnualBonusService;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsAnnualBonusImportVo;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsAnnualBonusSearchVo;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsAnnualBonusVo;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* 统计-全年一次性奖金
*
* @author hgw
* @date 2022-08-05 11:40:15
*/
@Log4j2
@Service
public class TStatisticsAnnualBonusServiceImpl extends ServiceImpl<TStatisticsAnnualBonusMapper, TStatisticsAnnualBonus> implements TStatisticsAnnualBonusService {
/**
* 统计-全年一次性奖金简单分页查询
*
* @param tStatisticsAnnualBonus 统计-全年一次性奖金
* @return
*/
@Override
public IPage<TStatisticsAnnualBonus> getTStatisticsAnnualBonusPage(Page<TStatisticsAnnualBonus> page, TStatisticsAnnualBonusSearchVo tStatisticsAnnualBonus) {
return baseMapper.getTStatisticsAnnualBonusPage(page, tStatisticsAnnualBonus);
}
/**
* 统计-全年一次性奖金批量导出
*
* @return
*/
@Override
public void listExport(HttpServletResponse response, TStatisticsAnnualBonusSearchVo searchVo) {
String fileName = "不良记录批量导出" + DateUtil.getThisTime() + ".xlsx";
//获取要导出的列表
List<TStatisticsAnnualBonus> list = new ArrayList<>();
long count = noPageCountDiy(searchVo);
ServletOutputStream out = null;
try {
out = response.getOutputStream();
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,然后文件流会自动关闭
//EasyExcel.write(out, TEmpBadRecord.class).sheet("不良记录").doWrite(list);
ExcelWriter excelWriter = EasyExcel.write(out, TStatisticsAnnualBonus.class).build();
int index = 0;
if (count > CommonConstants.ZERO_INT) {
for (int i = 0; i <= count; ) {
// 获取实际记录
searchVo.setLimitStart(i);
searchVo.setLimitEnd(CommonConstants.EXCEL_EXPORT_LIMIT);
list = noPageDiy(searchVo);
if (Common.isNotNull(list)) {
ExcelUtil<TStatisticsAnnualBonus> util = new ExcelUtil<>(TStatisticsAnnualBonus.class);
for (TStatisticsAnnualBonus vo : list) {
util.convertEntity(vo, null, null, null);
}
}
if (Common.isNotNull(list)) {
WriteSheet writeSheet = EasyExcel.writerSheet("统计-全年一次性奖金" + index).build();
excelWriter.write(list, writeSheet);
index++;
}
i = i + CommonConstants.EXCEL_EXPORT_LIMIT;
if (Common.isNotNull(list)) {
list.clear();
}
}
} else {
WriteSheet writeSheet = EasyExcel.writerSheet("统计-全年一次性奖金" + index).build();
excelWriter.write(list, writeSheet);
}
if (Common.isNotNull(list)) {
list.clear();
}
out.flush();
excelWriter.finish();
} catch (Exception e) {
log.error("执行异常", e);
} finally {
try {
if (null != out) {
out.close();
}
} catch (IOException e) {
log.error("执行异常", e);
}
}
}
@Override
public List<TStatisticsAnnualBonus> noPageDiy(TStatisticsAnnualBonusSearchVo searchVo) {
LambdaQueryWrapper<TStatisticsAnnualBonus> wrapper = buildQueryWrapper(searchVo);
List<String> idList = Common.getList(searchVo.getIds());
if (Common.isNotNull(idList)) {
wrapper.in(TStatisticsAnnualBonus::getId, idList);
}
if (searchVo.getLimitStart() >= 0 && searchVo.getLimitEnd() > 0) {
wrapper.last(" limit " + searchVo.getLimitStart() + "," + searchVo.getLimitEnd());
}
return baseMapper.selectList(wrapper);
}
@Override
public R<List<ErrorMessage>> bestSendExport(InputStream inputStream, HttpServletResponse response,
List<String> exportFields) {
YifuUser user = SecurityUtils.getUser();
List<ErrorMessage> errorMessageList = new ArrayList<>();
ExcelUtil<TStatisticsAnnualBonusImportVo> util1 = new ExcelUtil<>(TStatisticsAnnualBonusImportVo.class);
;
// 写法2:
// 匿名内部类 不用额外写一个DemoDataListener
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
try {
EasyExcel.read(inputStream, TStatisticsAnnualBonusImportVo.class, new ReadListener<TStatisticsAnnualBonusImportVo>() {
/**
* 单次缓存的数据量
*/
public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT;
/**
*临时存储
*/
private List<TStatisticsAnnualBonusImportVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
@Override
public void invoke(TStatisticsAnnualBonusImportVo data, AnalysisContext context) {
ReadRowHolder readRowHolder = context.readRowHolder();
Integer rowIndex = readRowHolder.getRowIndex();
data.setRowIndex(rowIndex + 1);
ErrorMessage errorMessage = util1.checkEntity(data, data.getRowIndex());
if (Common.isNotNull(errorMessage)) {
errorMessageList.add(errorMessage);
} else {
cachedDataList.add(data);
}
if (cachedDataList.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理 list
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
}
/**
* 加上存储数据库
*/
private void saveData() {
log.info("{}条数据,开始存储数据库!", cachedDataList.size());
importBestSendTax(cachedDataList, errorMessageList, user, response, exportFields);
log.info("存储数据库成功!");
}
}).sheet().doRead();
} catch (Exception e) {
log.error(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR, e);
return R.failed(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR);
}
return R.ok(errorMessageList);
}
private void importBestSendTax(List<TStatisticsAnnualBonusImportVo> list, List<ErrorMessage> errorMessageList,
YifuUser user, HttpServletResponse response, List<String> exportFields) {
if (errorMessageList.size() == CommonConstants.ZERO_INT) {
String fileName = "年终奖测算导出" + DateUtil.getThisTime() + ".xlsx";
ServletOutputStream out = null;
for (TStatisticsAnnualBonusImportVo infoVo : list) {
//todo
}
try {
out = response.getOutputStream();
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,然后文件流会自动关闭
EasyExcel.write(out, TStatisticsAnnualBonusImportVo.class).includeColumnFiledNames(exportFields).sheet("年终奖测算")
.doWrite(list);
out.flush();
} catch (Exception e) {
log.error("执行异常", e);
} finally {
try {
if (null != out) {
out.close();
}
} catch (IOException e) {
log.error("执行异常", e);
}
}
}
}
private Long noPageCountDiy(TStatisticsAnnualBonusSearchVo searchVo) {
LambdaQueryWrapper<TStatisticsAnnualBonus> wrapper = buildQueryWrapper(searchVo);
List<String> idList = Common.getList(searchVo.getIds());
if (Common.isNotNull(idList)) {
wrapper.in(TStatisticsAnnualBonus::getId, idList);
}
return baseMapper.selectCount(wrapper);
}
private LambdaQueryWrapper buildQueryWrapper(TStatisticsAnnualBonusSearchVo entity) {
LambdaQueryWrapper<TStatisticsAnnualBonus> wrapper = Wrappers.lambdaQuery();
return wrapper;
}
@Override
public R<List<ErrorMessage>> importDiy(InputStream inputStream) {
List<ErrorMessage> errorMessageList = new ArrayList<>();
ExcelUtil<TStatisticsAnnualBonusVo> util1 = new ExcelUtil<>(TStatisticsAnnualBonusVo.class);
;
// 写法2:
// 匿名内部类 不用额外写一个DemoDataListener
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
try {
EasyExcel.read(inputStream, TStatisticsAnnualBonusVo.class, new ReadListener<TStatisticsAnnualBonusVo>() {
/**
* 单次缓存的数据量
*/
public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT;
/**
*临时存储
*/
private List<TStatisticsAnnualBonusVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
@Override
public void invoke(TStatisticsAnnualBonusVo data, AnalysisContext context) {
ReadRowHolder readRowHolder = context.readRowHolder();
Integer rowIndex = readRowHolder.getRowIndex();
data.setRowIndex(rowIndex + 1);
ErrorMessage errorMessage = util1.checkEntity(data, data.getRowIndex());
if (Common.isNotNull(errorMessage)) {
errorMessageList.add(errorMessage);
} else {
cachedDataList.add(data);
}
if (cachedDataList.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理 list
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
}
/**
* 加上存储数据库
*/
private void saveData() {
log.info("{}条数据,开始存储数据库!", cachedDataList.size());
importTStatisticsAnnualBonus(cachedDataList, errorMessageList);
log.info("存储数据库成功!");
}
}).sheet().doRead();
} catch (Exception e) {
log.error(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR, e);
return R.failed(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR);
}
return R.ok(errorMessageList);
}
private void importTStatisticsAnnualBonus(List<TStatisticsAnnualBonusVo> excelVOList, List<ErrorMessage> errorMessageList) {
// 个性化校验逻辑
ErrorMessage errorMsg;
// 执行数据插入操作 组装
for (int i = 0; i < excelVOList.size(); i++) {
TStatisticsAnnualBonusVo excel = excelVOList.get(i);
// 数据合法情况 TODO
// 插入
insertExcel(excel);
errorMessageList.add(new ErrorMessage(excel.getRowIndex(), CommonConstants.SAVE_SUCCESS));
}
}
/**
* 插入excel bad record
*/
private void insertExcel(TStatisticsAnnualBonusVo excel) {
TStatisticsAnnualBonus insert = new TStatisticsAnnualBonus();
BeanUtil.copyProperties(excel, insert);
this.save(insert);
}
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.salary.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsuranceDetail;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsBonus;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsDeclarer;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsBonusVo;
import com.yifu.cloud.plus.v1.yifu.salary.mapper.TStatisticsBonusMapper;
import com.yifu.cloud.plus.v1.yifu.salary.service.TStatisticsBonusService;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsBonusSearchVo;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ArrayUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 全年一次性奖金申报表
*
* @author huyc
* @date 2022-08-14 21:31:15
*/
@Log4j2
@Service
@RequiredArgsConstructor
public class TStatisticsBonusServiceImpl extends ServiceImpl<TStatisticsBonusMapper, TStatisticsBonus> implements TStatisticsBonusService {
/**
* 全年一次性奖金申报表简单分页查询
* @param tStatisticsBonus 全年一次性奖金申报表
* @return
*/
@Override
public IPage<TStatisticsBonus> getTStatisticsBonusPage(Page<TStatisticsBonus> page, TStatisticsBonusSearchVo tStatisticsBonus){
return baseMapper.getTStatisticsBonusPage(page,tStatisticsBonus);
}
/**
* 全年一次性奖金申报表批量导出
* @param searchVo 全年一次性奖金申报表
* @return
*/
@Override
public void listExport(HttpServletResponse response, TStatisticsBonusSearchVo searchVo){
String fileName = "全年一次性奖金申报表批量导出" + DateUtil.getThisTime() + ".xlsx";
//获取要导出的列表
List<TStatisticsBonus> list = new ArrayList<>();
long count = noPageCountDiy(searchVo);
ServletOutputStream out = null;
try {
out = response.getOutputStream();
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName , "UTF-8"));
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,然后文件流会自动关闭
ExcelWriter excelWriter = EasyExcel.write(out, TStatisticsBonus.class).build();
int index = 0;
if (count > CommonConstants.ZERO_INT){
for (int i = 0; i <= count; ) {
// 获取实际记录
searchVo.setLimitStart(i);
searchVo.setLimitEnd(CommonConstants.EXCEL_EXPORT_LIMIT);
list = noPageDiy(searchVo);
if (Common.isNotNull(list)){
ExcelUtil<TStatisticsBonus> util = new ExcelUtil<>(TStatisticsBonus.class);
for (TStatisticsBonus vo:list){
util.convertEntity(vo,null,null,null);
}
}
if (Common.isNotNull(list)){
WriteSheet writeSheet = EasyExcel.writerSheet("全年一次性奖金申报表"+index).build();
excelWriter.write(list,writeSheet);
index++;
}
i = i + CommonConstants.EXCEL_EXPORT_LIMIT;
if (Common.isNotNull(list)){
list.clear();
}
}
}else {
WriteSheet writeSheet = EasyExcel.writerSheet("全年一次性奖金申报表"+index).build();
excelWriter.write(list,writeSheet);
}
if (Common.isNotNull(list)){
list.clear();
}
out.flush();
excelWriter.finish();
}catch (Exception e){
log.error("执行异常" ,e);
}finally {
try {
if (null != out) {
out.close();
}
} catch (IOException e) {
log.error("执行异常", e);
}
}
}
@Override
public List<TStatisticsBonus> noPageDiy(TStatisticsBonusSearchVo searchVo) {
LambdaQueryWrapper<TStatisticsBonus> wrapper = buildQueryWrapper(searchVo);
List<String> idList = Common.getList(searchVo.getIds());
if (Common.isNotNull(idList)){
wrapper.in(TStatisticsBonus::getId,idList);
}
if (searchVo.getLimitStart() >= 0 && searchVo.getLimitEnd() > 0){
wrapper.last(" limit "+ searchVo.getLimitStart() +","+ searchVo.getLimitEnd());
}
wrapper.orderByDesc(BaseEntity::getCreateTime);
return baseMapper.selectList(wrapper);
}
@Override
public R batchDelete(String declareMonth) {
if (Common.isNotNull(declareMonth)) {
List<TStatisticsBonus> deleteList = baseMapper.selectList(Wrappers.<TStatisticsBonus>query().lambda()
.in(TStatisticsBonus::getDeclareMonth, declareMonth));
if (Common.isNotNull(deleteList)) {
List<String> idList = deleteList.stream().map(TStatisticsBonus::getId).collect(Collectors.toList());
baseMapper.deleteBatchIds(idList);
return R.ok();
}
return R.failed(CommonConstants.NO_DATA_TO_HANDLE);
}
return null;
}
private Long noPageCountDiy(TStatisticsBonusSearchVo searchVo) {
LambdaQueryWrapper<TStatisticsBonus> wrapper = buildQueryWrapper(searchVo);
List<String> idList = Common.getList(searchVo.getIds());
if (Common.isNotNull(idList)){
wrapper.in(TStatisticsBonus::getId,idList);
}
return baseMapper.selectCount(wrapper);
}
private LambdaQueryWrapper buildQueryWrapper(TStatisticsBonusSearchVo entity){
LambdaQueryWrapper<TStatisticsBonus> wrapper = Wrappers.lambdaQuery();
if (Common.isNotNull(entity.getDeclareMonth())) {
wrapper.eq(TStatisticsBonus::getDeclareMonth,entity.getDeclareMonth());
}
if (Common.isNotNull(entity.getDeclareUnit())) {
wrapper.eq(TStatisticsBonus::getDeclareUnit,entity.getDeclareUnit());
}
return wrapper;
}
@Override
public R<List<ErrorMessage>> importDiy(InputStream inputStream) {
List<ErrorMessage> errorMessageList = new ArrayList<>();
ExcelUtil<TStatisticsBonusVo> util1 = new ExcelUtil<>(TStatisticsBonusVo.class);;
// 写法2:
// 匿名内部类 不用额外写一个DemoDataListener
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
try {
EasyExcel.read(inputStream, TStatisticsBonusVo.class, new ReadListener<TStatisticsBonusVo>() {
/**
* 单次缓存的数据量
*/
public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT;
/**
*临时存储
*/
private List<TStatisticsBonusVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
@Override
public void invoke(TStatisticsBonusVo data, AnalysisContext context) {
ReadRowHolder readRowHolder = context.readRowHolder();
Integer rowIndex = readRowHolder.getRowIndex();
data.setRowIndex(rowIndex+1);
ErrorMessage errorMessage = util1.checkEntity(data, data.getRowIndex());
if (Common.isNotNull(errorMessage)){
errorMessageList.add(errorMessage);
}else {
cachedDataList.add(data);
}
if (cachedDataList.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理 list
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
}
/**
* 加上存储数据库
*/
private void saveData() {
log.info("{}条数据,开始存储数据库!", cachedDataList.size());
importTStatisticsBonus(cachedDataList,errorMessageList);
log.info("存储数据库成功!");
}
}).sheet().doRead();
}catch (Exception e){
log.error(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR,e);
return R.failed(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR);
}
return R.ok(errorMessageList);
}
private void importTStatisticsBonus(List<TStatisticsBonusVo> excelVOList, List<ErrorMessage> errorMessageList) {
// 个性化校验逻辑
ErrorMessage errorMsg;
// 执行数据插入操作 组装
for (int i = 0; i < excelVOList.size(); i++) {
TStatisticsBonusVo excel = excelVOList.get(i);
// 插入
insertExcel(excel);
errorMessageList.add(new ErrorMessage(excel.getRowIndex(),CommonConstants.SAVE_SUCCESS));
}
}
/**
* 插入excel bad record
*/
private void insertExcel(TStatisticsBonusVo excel) {
TStatisticsBonus insert = new TStatisticsBonus();
BeanUtil.copyProperties(excel, insert);
this.save(insert);
}
}
......@@ -140,6 +140,7 @@ public class SalaryAccountUtil implements Serializable {
salaryStyle = SalaryConstants.SALARY_STYLE_BANK;
relaySalary = null;
actualSalarySum = null;
entity.setAnnualBonusType(SalaryConstants.ANNUAL_BONUS_TAX_TYPE_VALUE[0]);
for (Map.Entry<String, TSalaryConfigStandard> entry : salaryConfigMap.entrySet()) {
cellValueObj = getFieldValueByName(entry.getKey(), temp);
scs = entry.getValue();
......@@ -154,6 +155,9 @@ public class SalaryAccountUtil implements Serializable {
if (isMustMap.get(dbFiedName) != null && Boolean.TRUE.equals(isMustMap.get(dbFiedName))) {
isMustMap.put(dbFiedName, false);
}
if (SalaryConstants.ANNUAL_BONUS_TAX_TYPE.equals(scs.getJavaFiedName()) && SalaryConstants.ANNUAL_BONUS_ALONE.equals(cellValueStr)) {
entity.setAnnualBonusType(SalaryConstants.ANNUAL_BONUS_TAX_TYPE_VALUE[1]);
}
if (SalaryConstants.RELAY_SALARY_JAVA.equals(scs.getJavaFiedName())) {
try {
relaySalary = new BigDecimal(cellValueStr);
......
......@@ -479,12 +479,10 @@ public class SalaryCommonUtil implements Serializable {
public static void setConfigSalary(TConfigSalary configSalary, TSalaryAccountVo entity) {
if (configSalary != null && configSalary.getId() != null) {
entity.setSalaryMonth(DateUtil.addMonth(configSalary.getSalaryMonth()));
entity.setSettlementMonth(DateUtil.addMonth(configSalary.getSettleMonth()));
entity.setDeduSocialMonth(DateUtil.addMonth(configSalary.getSocialMonth()));
entity.setDeduProvidentMonth(DateUtil.addMonth(configSalary.getFundMonth()));
entity.setSocialPriority(String.valueOf(configSalary.getSocialPriority()));
entity.setFundPriority(String.valueOf(configSalary.getFundPriority()));
entity.setAnnualBonusType(String.valueOf(configSalary.getAnnualBonusType()));
}
}
......
......@@ -172,6 +172,13 @@ public class SalaryConstants {
public static final String CURRENT_SUPPLY_JAVA = "currentSupply";
//年终奖
public static final String ANNUAL_BONUS_JAVA = "annualBonus";
// 年终奖扣税方式:0合并/1单独
public static final String ANNUAL_BONUS_TAX_TYPE = "annualBonusTaxType";
// 年终奖扣税方式:单独
public static final String ANNUAL_BONUS_ALONE = "单独";
// 年终奖扣税方式的值:0合并/1单独
public static final String[] ANNUAL_BONUS_TAX_TYPE_VALUE = {"0","1"};
public static final String PRE_CURRENT_SUPPLY = "前次个人待补足";
//前次个人待补足
public static final String PRE_CURRENT_SUPPLY_JAVA = "preCurrentSupply";
......
......@@ -11,13 +11,11 @@
<result property="departNo" column="DEPART_NO"/>
<result property="departName" column="DEPART_NAME"/>
<result property="salaryMonth" column="SALARY_MONTH"/>
<result property="settleMonth" column="SETTLE_MONTH"/>
<result property="socialMonth" column="SOCIAL_MONTH"/>
<result property="fundMonth" column="FUND_MONTH"/>
<result property="socialPriority" column="SOCIAL_PRIORITY"/>
<result property="fundPriority" column="FUND_PRIORITY"/>
<result property="grantType" column="GRANT_TYPE"/>
<result property="annualBonusType" column="ANNUAL_BONUS_TYPE"/>
</resultMap>
<!--tConfigSalary简单分页查询-->
......@@ -29,13 +27,11 @@
DEPART_NO,
DEPART_NAME,
SALARY_MONTH,
SETTLE_MONTH,
SOCIAL_MONTH,
FUND_MONTH,
SOCIAL_PRIORITY,
FUND_PRIORITY,
GRANT_TYPE,
ANNUAL_BONUS_TYPE
GRANT_TYPE
FROM t_config_salary
<where>
1=1
......@@ -57,9 +53,6 @@
<if test="tConfigSalary.salaryMonth != null ">
AND SALARY_MONTH = #{tConfigSalary.salaryMonth}
</if>
<if test="tConfigSalary.settleMonth != null ">
AND SETTLE_MONTH = #{tConfigSalary.settleMonth}
</if>
<if test="tConfigSalary.socialMonth != null ">
AND SOCIAL_MONTH = #{tConfigSalary.socialMonth}
</if>
......@@ -75,9 +68,6 @@
<if test="tConfigSalary.grantType != null ">
AND GRANT_TYPE = #{tConfigSalary.grantType}
</if>
<if test="tConfigSalary.annualBonusType != null ">
AND ANNUAL_BONUS_TYPE = #{tConfigSalary.annualBonusType}
</if>
<!--数据权限判断-->
<if test="depatIds != null and depatIds.size() > 0">
and DEPART_ID in
......
......@@ -21,94 +21,84 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.yifu.salary.mapper.TStatisticsAnnualBonusMapper">
<mapper namespace="com.yifu.cloud.plus.v1.yifu.salary.mapper.TStatisticsBonusMapper">
<resultMap id="tStatisticsAnnualBonusMap" type="com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsAnnualBonus">
<id property="id" column="id"/>
<result property="invoiceTitle" column="INVOICE_TITLE"/>
<result property="settleDepartId" column="SETTLE_DEPART_ID"/>
<result property="settleDepartNo" column="SETTLE_DEPART_NO"/>
<result property="settleDepartName" column="SETTLE_DEPART_NAME"/>
<result property="declareMonth" column="declare_MONTH"/>
<result property="empId" column="EMP_ID"/>
<resultMap id="tStatisticsBonusMap" type="com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsBonus">
<id property="id" column="ID"/>
<result property="declareUnit" column="DECLARE_UNIT"/>
<result property="declareMonth" column="DECLARE_MONTH"/>
<result property="empName" column="EMP_NAME"/>
<result property="empIdcard" column="EMP_IDCARD"/>
<result property="annualBonus" column="annual_bonus"/>
<result property="tax" column="tax"/>
<result property="annualBonus" column="ANNUAL_BONUS"/>
<result property="bonusTax" column="BONUS_TAX"/>
<result property="deptId" column="DEPT_ID"/>
<result property="deptNo" column="DEPT_NO"/>
<result property="deptName" column="DEPT_NAME"/>
<result property="unitId" column="UNIT_ID"/>
<result property="unitNo" column="UNIT_NO"/>
<result property="unitName" column="UNIT_NAME"/>
</resultMap>
<sql id="Base_Column_List">
a.id,
a.INVOICE_TITLE,
a.SETTLE_DEPART_ID,
a.SETTLE_DEPART_NO,
a.SETTLE_DEPART_NAME,
a.declare_MONTH,
a.EMP_ID,
a.ID,
a.DECLARE_UNIT,
a.DECLARE_MONTH,
a.EMP_NAME,
a.EMP_IDCARD,
a.annual_bonus,
a.tax,
a.ANNUAL_BONUS,
a.BONUS_TAX,
a.DEPT_ID,
a.DEPT_NO,
a.DEPT_NAME,
a.UNIT_ID,
a.UNIT_NO,
a.UNIT_NAME
a.UNIT_NO
</sql>
<sql id="tStatisticsAnnualBonus_where">
<if test="tStatisticsAnnualBonus != null">
<if test="tStatisticsAnnualBonus.id != null and tStatisticsAnnualBonus.id.trim() != ''">
AND a.id = #{tStatisticsAnnualBonus.id}
<sql id="tStatisticsBonus_where">
<if test="tStatisticsBonus != null">
<if test="tStatisticsBonus.id != null and tStatisticsBonus.id.trim() != ''">
AND a.ID = #{tStatisticsBonus.id}
</if>
<if test="tStatisticsAnnualBonus.invoiceTitle != null and tStatisticsAnnualBonus.invoiceTitle.trim() != ''">
AND a.INVOICE_TITLE = #{tStatisticsAnnualBonus.invoiceTitle}
<if test="tStatisticsBonus.declareUnit != null and tStatisticsBonus.declareUnit.trim() != ''">
AND a.DECLARE_UNIT = #{tStatisticsBonus.declareUnit}
</if>
<if test="tStatisticsAnnualBonus.settleDepartId != null and tStatisticsAnnualBonus.settleDepartId.trim() != ''">
AND a.SETTLE_DEPART_ID = #{tStatisticsAnnualBonus.settleDepartId}
<if test="tStatisticsBonus.declareMonth != null and tStatisticsBonus.declareMonth.trim() != ''">
AND a.DECLARE_MONTH = #{tStatisticsBonus.declareMonth}
</if>
<if test="tStatisticsAnnualBonus.settleDepartNo != null and tStatisticsAnnualBonus.settleDepartNo.trim() != ''">
AND a.SETTLE_DEPART_NO = #{tStatisticsAnnualBonus.settleDepartNo}
<if test="tStatisticsBonus.empName != null and tStatisticsBonus.empName.trim() != ''">
AND a.EMP_NAME = #{tStatisticsBonus.empName}
</if>
<if test="tStatisticsAnnualBonus.settleDepartName != null and tStatisticsAnnualBonus.settleDepartName.trim() != ''">
AND a.SETTLE_DEPART_NAME = #{tStatisticsAnnualBonus.settleDepartName}
<if test="tStatisticsBonus.empIdcard != null and tStatisticsBonus.empIdcard.trim() != ''">
AND a.EMP_IDCARD = #{tStatisticsBonus.empIdcard}
</if>
<if test="tStatisticsAnnualBonus.declareMonth != null and tStatisticsAnnualBonus.declareMonth.trim() != ''">
AND a.declare_MONTH = #{tStatisticsAnnualBonus.declareMonth}
<if test="tStatisticsBonus.annualBonus != null">
AND a.ANNUAL_BONUS = #{tStatisticsBonus.annualBonus}
</if>
<if test="tStatisticsAnnualBonus.empId != null and tStatisticsAnnualBonus.empId.trim() != ''">
AND a.EMP_ID = #{tStatisticsAnnualBonus.empId}
<if test="tStatisticsBonus.bonusTax != null">
AND a.BONUS_TAX = #{tStatisticsBonus.bonusTax}
</if>
<if test="tStatisticsAnnualBonus.empName != null and tStatisticsAnnualBonus.empName.trim() != ''">
AND a.EMP_NAME = #{tStatisticsAnnualBonus.empName}
<if test="tStatisticsBonus.deptId != null and tStatisticsBonus.deptId.trim() != ''">
AND a.DEPT_ID = #{tStatisticsBonus.deptId}
</if>
<if test="tStatisticsAnnualBonus.empIdcard != null and tStatisticsAnnualBonus.empIdcard.trim() != ''">
AND a.EMP_IDCARD = #{tStatisticsAnnualBonus.empIdcard}
<if test="tStatisticsBonus.deptNo != null and tStatisticsBonus.deptNo.trim() != ''">
AND a.DEPT_NO = #{tStatisticsBonus.deptNo}
</if>
<if test="tStatisticsAnnualBonus.annualBonus != null">
AND a.annual_bonus = #{tStatisticsAnnualBonus.annualBonus}
<if test="tStatisticsBonus.deptName != null and tStatisticsBonus.deptName.trim() != ''">
AND a.DEPT_NAME = #{tStatisticsBonus.deptName}
</if>
<if test="tStatisticsAnnualBonus.tax != null">
AND a.tax = #{tStatisticsAnnualBonus.tax}
<if test="tStatisticsBonus.unitId != null and tStatisticsBonus.unitId.trim() != ''">
AND a.UNIT_ID = #{tStatisticsBonus.unitId}
</if>
<if test="tStatisticsAnnualBonus.unitId != null and tStatisticsAnnualBonus.unitId.trim() != ''">
AND a.UNIT_ID = #{tStatisticsAnnualBonus.unitId}
</if>
<if test="tStatisticsAnnualBonus.unitNo != null and tStatisticsAnnualBonus.unitNo.trim() != ''">
AND a.UNIT_NO = #{tStatisticsAnnualBonus.unitNo}
</if>
<if test="tStatisticsAnnualBonus.unitName != null and tStatisticsAnnualBonus.unitName.trim() != ''">
AND a.UNIT_NAME = #{tStatisticsAnnualBonus.unitName}
<if test="tStatisticsBonus.unitNo != null and tStatisticsBonus.unitNo.trim() != ''">
AND a.UNIT_NO = #{tStatisticsBonus.unitNo}
</if>
</if>
</sql>
<!--tStatisticsAnnualBonus简单分页查询-->
<select id="getTStatisticsAnnualBonusPage" resultMap="tStatisticsAnnualBonusMap">
<!--tStatisticsBonus简单分页查询-->
<select id="getTStatisticsBonusPage" resultMap="tStatisticsBonusMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_statistics_annual_bonus a
FROM t_statistics_bonus a
<where>
1=1
<include refid="tStatisticsAnnualBonus_where"/>
<include refid="tStatisticsBonus_where"/>
</where>
</select>
</mapper>
......@@ -22,7 +22,7 @@ public class TPaymentHeFeiVo extends RowIndex implements Serializable {
* 员工姓名
*/
@Length(max = 20, message = "员工姓名不能超过20个字符")
@ExcelAttribute(name = "员工姓名", maxLength = 20)
@ExcelAttribute(name = "员工姓名", maxLength = 20,isNotEmpty = true)
@Schema(description = "员工姓名")
@ExcelProperty("员工姓名")
private String empName;
......
......@@ -51,7 +51,7 @@ public class TPaymentInfoVo extends RowIndex implements Serializable {
* 员工姓名
*/
@Length(max = 20, message = "员工姓名 不能超过20 个字符")
@ExcelAttribute(name = "员工姓名", maxLength = 20)
@ExcelAttribute(name = "员工姓名", maxLength = 20,isNotEmpty = true)
@Schema(description = "员工姓名")
@ExcelProperty("员工姓名")
private String empName;
......
......@@ -44,10 +44,8 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -226,8 +224,10 @@ public class TPreDispatchInfoController {
@SysLog("预派单批量新增派增")
@PostMapping("/analysisJsonStringImportAdd")
@PreAuthorize("@pms.hasPermission('social_tpredispatchinfo_importAddList')")
public R analysisJsonStringImportAdd(@RequestBody String jsonString, @RequestParam(value = "socialHouse",required = false) String socialHouse,
@RequestParam(value = "fundHouse",required = false) String fundHouse, @RequestParam String departId) {
public R analysisJsonStringImportAdd(@RequestBody String jsonString,
@RequestParam(value = "socialHouse",required = false) String socialHouse,
@RequestParam(value = "fundHouse",required = false) String fundHouse
, @RequestParam String departId) {
YifuUser user = SecurityUtils.getUser();
if (null == user || null == user.getId()) {
return R.failed(CommonConstants.USER_FAIL);
......@@ -241,15 +241,19 @@ public class TPreDispatchInfoController {
//用于返回错误信息
List<ErrorMessage> errorInfo = new ArrayList<>();
if (null != util1.getErrorInfo() && !util1.getErrorInfo().isEmpty()) {
return R.failed(util1.getErrorInfo(),PreDispatchConstants.DATA_CHECK);
} else {
for (ErrorMessage errorMessage: util1.getErrorInfo()) {
errorInfo.add(errorMessage);
}
}
if (null != listInfo && !listInfo.isEmpty()) {
errorInfo = tPreDispatchInfoService.batchSavePreDisPatchAdd(listInfo, user,socialHouse,fundHouse,departId);
errorInfo = tPreDispatchInfoService.batchSavePreDisPatchAdd(listInfo, user,socialHouse,fundHouse,
departId,errorInfo);
} else {
errorInfo.add(new ErrorMessage(null, CommonConstants.DATA_CAN_NOT_EMPTY));
}
return R.ok(errorInfo);
}
List<ErrorMessage> newErrorList = errorInfo.stream().sorted(Comparator.comparing(ErrorMessage::getLineNum))
.collect(Collectors.toList());
return R.ok(newErrorList);
} catch (Exception e) {
e.printStackTrace();
return R.failed(PreDispatchConstants.DATA_IMPORT_ANALYSIS_ERROR);
......@@ -281,15 +285,18 @@ public class TPreDispatchInfoController {
//用于返回错误信息
List<ErrorMessage> errorInfo = new ArrayList<>();
if (null != util1.getErrorInfo() && !util1.getErrorInfo().isEmpty()) {
return R.failed(util1.getErrorInfo());
} else {
for (ErrorMessage errorMessage: util1.getErrorInfo()) {
errorInfo.add(errorMessage);
}
}
if (null != listInfo && !listInfo.isEmpty()) {
errorInfo = tPreDispatchInfoService.batchSavePreDisPatchReduce(listInfo, user);
tPreDispatchInfoService.batchSavePreDisPatchReduce(listInfo, user, errorInfo);
} else {
errorInfo.add(new ErrorMessage(null, CommonConstants.DATA_CAN_NOT_EMPTY));
}
return R.ok(errorInfo);
}
List<ErrorMessage> newErrorList = errorInfo.stream().sorted(Comparator.comparing(ErrorMessage::getLineNum))
.collect(Collectors.toList());
return R.ok(newErrorList);
} catch (Exception e) {
log.error("预派单批量导入派减",e);
return R.failed(PreDispatchConstants.DATA_IMPORT_ANALYSIS_ERROR);
......@@ -332,15 +339,18 @@ public class TPreDispatchInfoController {
//用于返回错误信息
List<ErrorMessage> errorInfo = new ArrayList<>();
if (null != util1.getErrorInfo() && !util1.getErrorInfo().isEmpty()) {
return R.failed(util1.getErrorInfo(),PreDispatchConstants.DATA_CHECK);
} else {
for (ErrorMessage errorMessage: util1.getErrorInfo()) {
errorInfo.add(errorMessage);
}
}
if (null != listInfo && !listInfo.isEmpty()) {
errorInfo = tPreDispatchInfoService.batchUpdatePreDisPatch(listInfo, user);
tPreDispatchInfoService.batchUpdatePreDisPatch(listInfo, user, errorInfo);
} else {
errorInfo.add(new ErrorMessage(null, CommonConstants.DATA_CAN_NOT_EMPTY));
}
return R.ok(errorInfo);
}
List<ErrorMessage> newErrorList = errorInfo.stream().sorted(Comparator.comparing(ErrorMessage::getLineNum))
.collect(Collectors.toList());
return R.ok(newErrorList);
} catch (Exception e) {
log.error("预派单批量更新",e);
return R.failed(PreDispatchConstants.DATA_IMPORT_ANALYSIS_ERROR);
......
......@@ -89,7 +89,7 @@ public interface TForecastLibraryService extends IService<TForecastLibrary> {
R<String> updateForecastLibaryByDispatchReduce(TSocialFundInfo socialFundInfo, int forecastFlag);
/**
* @Description: 基数变更,同步社保公积金查询、预估库
* @Description: 户调基-基数变更,同步社保公积金查询、预估库
* @Author: hgw
* @Date: 2022/7/26 19:09
* @return: void
......
......@@ -109,7 +109,8 @@ public interface TPreDispatchInfoService extends IService<TPreDispatchInfo> {
* @param departId
* @return
**/
List<ErrorMessage> batchSavePreDisPatchAdd(List<TPreDispatchInfo> listInfo, YifuUser user, String socialHouse, String fundHouse, String departId);
List<ErrorMessage> batchSavePreDisPatchAdd(List<TPreDispatchInfo> listInfo, YifuUser user, String socialHouse,
String fundHouse, String departId, List<ErrorMessage> errorInfo);
/**
* 预派单批量新增派减
......@@ -119,7 +120,8 @@ public interface TPreDispatchInfoService extends IService<TPreDispatchInfo> {
* @param user
* @return
**/
List<ErrorMessage> batchSavePreDisPatchReduce(List<TPreDispatchReduceVo> listInfo, YifuUser user);
List<ErrorMessage> batchSavePreDisPatchReduce(List<TPreDispatchReduceVo> listInfo, YifuUser user,
List<ErrorMessage> errorInfo);
/**
* 预派单批量更新
......@@ -129,7 +131,8 @@ public interface TPreDispatchInfoService extends IService<TPreDispatchInfo> {
* @param user
* @return
**/
List<ErrorMessage> batchUpdatePreDisPatch(List<TPreDispatchUpdateVo> listInfo, YifuUser user);
List<ErrorMessage> batchUpdatePreDisPatch(List<TPreDispatchUpdateVo> listInfo, YifuUser user,
List<ErrorMessage> messageList);
/**
* 预派单导出
......
......@@ -536,18 +536,10 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
TAgentConfig configUnit = getAgentConfig(agentConfigMap, socialInfo, library.getSocialPayMonth(), CommonConstants.ZERO_STRING);
TAgentConfig configPersonal = getAgentConfig(agentConfigMap, socialInfo, library.getSocialPayMonth(), CommonConstants.ONE_STRING);
// 基数配置
SysBaseSetInfo sysBaseSetInfo;
if (isOnly) {
sysBaseSetInfo = socialInfo.getSocialSetInfo();
} else {
sysBaseSetInfo = this.getSysBaseSetInfo(CommonConstants.ZERO_STRING, socialInfo.getSocialHousehold()
, library.getSocialPayMonth(), socialInfo.getSocialProvince(), socialInfo.getSocialCity(), socialInfo.getSocialTown());
}
// 初始化大病:
this.initLibraryBigMoneyBySocial(library, socialInfo, sysBaseSetInfo);
this.initLibraryBigMoneyBySocial(library, socialInfo);
initUnitAndPersonalLibrary(library, socialInfo, sysBaseSetInfo, historyLibrary, isOnly);
initUnitAndPersonalLibrary(library, socialInfo, historyLibrary, isOnly);
if (null != configAll || null != configUnit || null != configPersonal) {
if (null != configPersonal) {
initPersonalLibByConfig(library, configPersonal);
......@@ -681,85 +673,29 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
return null;
}
/**
* @param baseType 0.社保 1.公积金
* @param household (社保、公积金)户
* @param payMonth
* @param province
* @param city
* @param town
* @Description: 查找基数配置
* @Author: hgw
* @Date: 2021/1/4 15:58
* @return: com.yifu.cloud.v1.hrms.api.entity.SysBaseSetInfo
**/
private SysBaseSetInfo getSysBaseSetInfo(String baseType, String household, String payMonth, String province, String city, String town) {
// 基数配置
SysBaseSetInfo sysBaseSetInfo = new SysBaseSetInfo();
sysBaseSetInfo.setBaseType(baseType);
sysBaseSetInfo.setDeleteFlag(CommonConstants.ZERO_STRING);
sysBaseSetInfo.setStatus(CommonConstants.ZERO_INT);
sysBaseSetInfo.setDepartId(household);
if (Common.isNotNull(payMonth)
&& payMonth.length() > 5) {
// 社保缴纳月
String payMonthStr = payMonth.substring(0, 4).concat("-").concat(payMonth.substring(4, 6)).concat("-01 00:00:00");
sysBaseSetInfo.setApplyStartDate(DateUtil.stringToDateByPatten(payMonthStr, DateUtil.DATETIME_PATTERN_SECOND));
} else {
sysBaseSetInfo.setApplyStartDate(new Date());
}
sysBaseSetInfo.setProvince(Integer.parseInt(province));
if (city != null) {
sysBaseSetInfo.setCity(Integer.parseInt(city));
} else {
sysBaseSetInfo.setCity(-1);
}
if (town != null) {
sysBaseSetInfo.setTown(Integer.parseInt(town));
} else {
sysBaseSetInfo.setTown(-1);
}
// 查询符合条件的基数列表
List<SysBaseSetInfo> sysBaseSetInfoList = sysBaseSetInfoMapper.getSysBaseSetInfoNoPage(sysBaseSetInfo);
if (sysBaseSetInfoList != null && !sysBaseSetInfoList.isEmpty()) {
sysBaseSetInfo = sysBaseSetInfoList.get(0);
} else {
// 如果没找到配置,取最新的一条:
sysBaseSetInfo.setApplyStartDate(null);
sysBaseSetInfoList = sysBaseSetInfoMapper.getSysBaseSetInfoNoPage(sysBaseSetInfo);
if (sysBaseSetInfoList != null && !sysBaseSetInfoList.isEmpty()) {
sysBaseSetInfo = sysBaseSetInfoList.get(0);
}
}
return sysBaseSetInfo;
}
/**
* @param library 预估库
* @param socialInfo 社保
* @param sysBaseSetInfo 基数配置
* @Description: 从社保获取大病
* @Author: hgw
* @Date: 2020/11/25 15:51
* @return: void
**/
private void initLibraryBigMoneyBySocial(TForecastLibrary library, TSocialFundInfo socialInfo
, SysBaseSetInfo sysBaseSetInfo) {
) {
if (CommonConstants.ONE_STRING.equals(socialInfo.getPaymentType())) {
// 自定义类型大病随基数配置变化:0不随配置 1随配置 2.单位大病随配置 3个人大病随配置
// 2022-7-20 11:46:32 与房工沟通,派单没这个逻辑,所以都是随配置直接计算
// 直接计算单位大病
this.setBigMoneyBySelfForUnit(library, socialInfo, sysBaseSetInfo);
// 直接计算个人大病
this.setBigMoneyBySelfForPerson(library, socialInfo, sysBaseSetInfo);
library.setUnitBitailmentFee(socialInfo.getUnitBigailmentMoney());
library.setPersonalBigailmentFee(socialInfo.getPersonalBigailmentMoney());
// 非自定义,从社保基数配置取信息
} else {
// 大病处理: 0 收取 按派单的社保里的基数和比例来
if (CommonConstants.ZERO_STRING.equals(sysBaseSetInfo.getIsIllness())) {
if (CommonConstants.ZERO_STRING.equals(socialInfo.getIsIllness())) {
// 大病收取方式 0.按年 判断当前月份是否收取大病 按年收大病起缴月份收取一次,非当年的 大病 按实际收取月份收取大病金额
this.setBigMoney(library, socialInfo, sysBaseSetInfo, socialInfo.getPaymentType());
this.setBigMoney(library, socialInfo, socialInfo.getPaymentType());
// 大病处理: 1 不收取
} else {
library.setUnitBitailmentFee(BigDecimal.ZERO);
......@@ -778,13 +714,13 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
* @Date 2020-08-03
**/
private void initUnitAndPersonalLibrary(TForecastLibrary library, TSocialFundInfo socialInfo
, SysBaseSetInfo sysBaseSetInfo, TForecastLibrary historyLibrary, boolean isOnly) {
initLibrayOfPersonal(library, socialInfo, sysBaseSetInfo, historyLibrary, isOnly);
initLibraryOfUnit(library, socialInfo, sysBaseSetInfo, historyLibrary, isOnly);
, TForecastLibrary historyLibrary, boolean isOnly) {
initLibrayOfPersonal(library, socialInfo, historyLibrary, isOnly);
initLibraryOfUnit(library, socialInfo, historyLibrary, isOnly);
}
private void initLibrayOfPersonal(TForecastLibrary library, TSocialFundInfo socialInfo
, SysBaseSetInfo sysBaseSetInfo, TForecastLibrary historyLibrary, boolean isOnly) {
, TForecastLibrary historyLibrary, boolean isOnly) {
// 个人养老基数
BigDecimal personalPersionBase;
// 个人医疗基数
......@@ -808,9 +744,9 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
if (socialInfo != null) {
if (Common.isNotNull(socialInfo.getPaymentType()) && !CommonConstants.ONE_STRING.equals(socialInfo.getPaymentType())) {
if (CommonConstants.ZERO_STRING.equals(socialInfo.getPaymentType())) {
baseLimit = sysBaseSetInfo.getLowerLimit();
baseLimit = socialInfo.getLowerLimit();
} else {
baseLimit = sysBaseSetInfo.getUpperLimit();
baseLimit = socialInfo.getUpperLimit();
}
personalPersionBase = baseLimit;
personalMedicalBase = baseLimit;
......@@ -872,7 +808,7 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
}
private void initLibraryOfUnit(TForecastLibrary library, TSocialFundInfo socialInfo
, SysBaseSetInfo sysBaseSetInfo, TForecastLibrary historyLibrary, boolean isOnly) {
, TForecastLibrary historyLibrary, boolean isOnly) {
// 单位养老基数
BigDecimal unitPersionBase;
// 单位医疗基数
......@@ -912,9 +848,9 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
// 需要从基数配置取数据:
if (Common.isNotNull(socialInfo.getPaymentType()) && !CommonConstants.ONE_STRING.equals(socialInfo.getPaymentType())) {
if (CommonConstants.ZERO_STRING.equals(socialInfo.getPaymentType())) {
baseLimit = sysBaseSetInfo.getLowerLimit();
baseLimit = socialInfo.getLowerLimit();
} else {
baseLimit = sysBaseSetInfo.getUpperLimit();
baseLimit = socialInfo.getUpperLimit();
}
unitPersionBase = baseLimit;
unitMedicalBase = baseLimit;
......@@ -1084,66 +1020,25 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
}
}
/**
* @param library 预估主表
* @param socialInfo 社保
* @param sysBaseSetInfo 基数配置
* @Description: 直接计算单位大病
* @Author: hgw
* @Date: 2020/12/2 14:31
* @return: void
**/
private void setBigMoneyBySelfForUnit(TForecastLibrary library, TSocialFundInfo socialInfo, SysBaseSetInfo sysBaseSetInfo) {
if (socialInfo.getUnitBigailmentMoney() != null) {
library.setUnitBitailmentFee(socialInfo.getUnitBigailmentMoney());
} else if (socialInfo.getUnitBigailmentCardinal() != null && sysBaseSetInfo.getPayCompanyPro() != null) {
library.setUnitBitailmentFee(BigDecimalUtils.safeMultiply(
socialInfo.getUnitBigailmentCardinal(),
sysBaseSetInfo.getPayCompanyPro(),
CommonConstants.ONE_OF_PERCENT));
}
}
/**
* @param library 预估主表
* @param socialInfo 社保
* @param sysBaseSetInfo 基数配置
* @Description: 直接计算个人大病
* @Author: hgw
* @Date: 2020/12/2 14:31
* @return: void
**/
private void setBigMoneyBySelfForPerson(TForecastLibrary library, TSocialFundInfo socialInfo, SysBaseSetInfo sysBaseSetInfo) {
if (socialInfo.getPersonalBigailmentMoney() != null) {
library.setPersonalBigailmentFee(socialInfo.getPersonalBigailmentMoney());
} else if (socialInfo.getPersonalBigailmentCardinal() != null && sysBaseSetInfo.getPayPersonalPro() != null) {
library.setPersonalBigailmentFee(BigDecimalUtils.safeMultiply(
socialInfo.getPersonalBigailmentCardinal(),
sysBaseSetInfo.getPayPersonalPro(),
CommonConstants.ONE_OF_PERCENT));
}
}
/**
* @param library 预估库
* @param socialInfo 社保
* @param sysBaseSetInfo 基数配置
* @param paymentType 0最低缴纳、1自定义、2最高缴纳
* @Description: 塞大病金额
* @Author: hgw
* @Date: 2020/11/25 15:51
* @return: void
**/
private void setBigMoney(TForecastLibrary library, TSocialFundInfo socialInfo, SysBaseSetInfo sysBaseSetInfo
private void setBigMoney(TForecastLibrary library, TSocialFundInfo socialInfo
, String paymentType) {
if (CommonConstants.ZERO_STRING.equals(sysBaseSetInfo.getCollectType())) {
if ((null != sysBaseSetInfo.getCollectMoth()
&& Integer.parseInt(library.getSocialPayMonth().substring(4, 6)) == sysBaseSetInfo.getCollectMoth()
if (CommonConstants.ZERO_STRING.equals(socialInfo.getCollectType())) {
if ((null != socialInfo.getCollectMoth()
&& Integer.parseInt(library.getSocialPayMonth().substring(4, 6)) == socialInfo.getCollectMoth()
&& Integer.parseInt(library.getSocialPayMonth().substring(0, 4)) != socialInfo.getBigailmentStart().getYear())
|| library.getSocialPayMonth().equals(DateUtil.formatDatePatten(socialInfo.getBigailmentStart(), null))) {
// 大病取值方式:0按定值
library.setUnitBitailmentFee(BigDecimalUtils.isNullToZero(sysBaseSetInfo.getPayCompany()));
library.setPersonalBigailmentFee(BigDecimalUtils.isNullToZero(sysBaseSetInfo.getPayPersonal()));
library.setUnitBitailmentFee(socialInfo.getUnitBigailmentMoney());
library.setPersonalBigailmentFee(socialInfo.getPersonalBigailmentMoney());
//第一次收取费用逻辑:新员工入职是否收费处理逻辑:先按第一次不收取费用 (只针对按年收)
if (library.getSocialPayMonth().equals(DateUtil.formatDatePatten(socialInfo.getBigailmentStart(), null))
&& CommonConstants.ONE_STRING.equals(socialInfo.getIsChargePersonal())) {
......@@ -1152,36 +1047,33 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
}
}
//大病收取方式 : 1.按月
} else if (CommonConstants.ONE_STRING.equals(sysBaseSetInfo.getCollectType())) {
} else if (CommonConstants.ONE_STRING.equals(socialInfo.getCollectType())) {
// 存储基数(最低或最高)
BigDecimal baseLimit = sysBaseSetInfo.getLowerLimit();
BigDecimal baseLimit = socialInfo.getLowerLimit();
if (CommonConstants.TWO_STRING.equals(paymentType)) {
baseLimit = sysBaseSetInfo.getUpperLimit();
baseLimit = socialInfo.getUpperLimit();
}
// 大病取值方式:1 按比例 按派单的基数和比例来
if (CommonConstants.ONE_STRING.equals(sysBaseSetInfo.getValueType())) {
if (CommonConstants.ONE_STRING.equals(socialInfo.getValueType())) {
library.setUnitBigailmentBase(baseLimit);
library.setUnitBigailmentPro(sysBaseSetInfo.getPayCompanyPro());
library.setUnitBigailmentPro(socialInfo.getUnitBigailmentPer());
library.setPersonalBigailmentBase(baseLimit);
library.setPersonalBigailmentPro(sysBaseSetInfo.getPayPersonalPro());
library.setPersonalBigailmentFee(BigDecimalUtils.safeMultiply(
baseLimit,
sysBaseSetInfo.getPayPersonalPro(),
CommonConstants.ONE_OF_PERCENT));
library.setUnitBitailmentFee(BigDecimalUtils.safeMultiply(
baseLimit,
sysBaseSetInfo.getPayCompanyPro(),
CommonConstants.ONE_OF_PERCENT));
library.setPersonalBigailmentPro(socialInfo.getPersonalBigailmentPer());
library.setPersonalBigailmentFee(socialInfo.getPersonalBigailmentMoney());
library.setUnitBitailmentFee(socialInfo.getUnitBigailmentMoney());
} else {
// 大病取值方式:0按定值
library.setUnitBitailmentFee(BigDecimalUtils.isNullToZero(sysBaseSetInfo.getPayCompany()));
library.setPersonalBigailmentFee(BigDecimalUtils.isNullToZero(sysBaseSetInfo.getPayPersonal()));
library.setUnitBitailmentFee(socialInfo.getUnitBigailmentMoney());
library.setPersonalBigailmentFee(socialInfo.getPersonalBigailmentMoney());
}
}
}
private void changeFundInfoByBase(TSocialFundInfo socialFund, SysBaseSetInfo socialSet) {
if (Common.isNotNull(socialSet) && socialFund.getUnitFundSum() != null) {
socialFund.setLowerLimitFund(socialSet.getLowerLimit());
socialFund.setUpperLimitFund(socialSet.getUpperLimit());
socialFund.setFundPayPoint(String.valueOf(socialSet.getFundPayPoint()));
if (socialFund.getUnitProvidengCardinal().compareTo(socialSet.getLowerLimit()) < CommonConstants.ZERO_INT) {
socialFund.setUnitProvidengCardinal(socialSet.getLowerLimit());
socialFund.setPersonalProvidentCardinal(socialSet.getLowerLimit());
......@@ -1215,6 +1107,8 @@ public class TForecastLibraryServiceImpl extends ServiceImpl<TForecastLibraryMap
social.setIsIllness(socialSet.getIsIllness());
social.setOverpayNumber(socialSet.getOverpayNumber());
social.setValueType(socialSet.getValueType());
social.setLowerLimit(socialSet.getLowerLimit());
social.setUpperLimit(socialSet.getUpperLimit());
// 比例初始化
// 按最低
if (CommonConstants.ZERO_STRING.equals(social.getPaymentType())) {
......
......@@ -35,9 +35,11 @@ import com.yifu.cloud.plus.v1.yifu.salary.vo.TPaymentVo;
import com.yifu.cloud.plus.v1.yifu.social.concurrent.threadpool.YFSocialImportThreadPoolExecutor;
import com.yifu.cloud.plus.v1.yifu.social.constants.PaymentConstants;
import com.yifu.cloud.plus.v1.yifu.social.constants.SocialConstants;
import com.yifu.cloud.plus.v1.yifu.social.entity.SysHouseHoldInfo;
import com.yifu.cloud.plus.v1.yifu.social.entity.TPaymentInfo;
import com.yifu.cloud.plus.v1.yifu.social.entity.TProvidentFund;
import com.yifu.cloud.plus.v1.yifu.social.entity.TSocialInfo;
import com.yifu.cloud.plus.v1.yifu.social.mapper.SysHouseHoldInfoMapper;
import com.yifu.cloud.plus.v1.yifu.social.mapper.TPaymentInfoMapper;
import com.yifu.cloud.plus.v1.yifu.social.mapper.TProvidentFundMapper;
import com.yifu.cloud.plus.v1.yifu.social.mapper.TSocialInfoMapper;
......@@ -56,7 +58,6 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.*;
......@@ -113,6 +114,9 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
@Autowired
private ArchivesDaprUtil archivesDaprUtil;
@Autowired
private SysHouseHoldInfoMapper sysHouseHoldInfoMapper;
/**
* 缴费库简单分页查询
*
......@@ -217,9 +221,9 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
for (String id : idList) {
paymentInfo = baseMapper.selectById(id);
if (null != paymentInfo && Common.isNotNull(paymentInfo.getId())) {
if ((!user.getId().equals(paymentInfo.getCreateBy()) ||
CommonConstants.ZERO_STRING.equals(paymentInfo.getPushStatus()))
&& !CommonConstants.ONE_STRING.equals(user.getId())) {
if ((!user.getId().equals(paymentInfo.getCreateBy()) &&
!CommonConstants.ONE_STRING.equals(user.getId())) ||
CommonConstants.ZERO_STRING.equals(paymentInfo.getPushStatus())) {
return R.failed("存在不符合条件的数据(已推送至结算平台或非本人创建),禁止删除!");
}
baseMapper.deleteById(id);
......@@ -227,7 +231,6 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
}
return R.ok();
}
/**
* 通过ID获取缴费库 及社保、公积金明细
*
......@@ -246,31 +249,18 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
String socialCreateMonth, String socialPayMonth) {
YifuUser user = SecurityUtils.getUser();
LambdaQueryWrapper<TPaymentInfo> wrapper = Wrappers.lambdaQuery();
if (Common.isNotNull(empIdCard)) {
wrapper.eq(TPaymentInfo::getEmpIdcard, empIdCard);
}
if (Common.isNotNull(socialHouseId)) {
wrapper.eq(TPaymentInfo::getSocialHousehold, socialHouseId);
}
if (Common.isNotNull(fundHouseId)) {
wrapper.eq(TPaymentInfo::getProvidentHousehold, fundHouseId);
}
if (Common.isNotNull(socialCreateMonth)) {
wrapper.eq(TPaymentInfo::getSocialCreateMonth, socialCreateMonth);
}
if (Common.isNotNull(socialPayMonth)) {
wrapper.eq(TPaymentInfo::getSocialPayMonth, socialPayMonth);
}
LambdaQueryWrapper<TPaymentInfo> wrapper = buildQueryWrapper(empIdCard,socialHouseId,fundHouseId,
socialCreateMonth,socialPayMonth);
List<TPaymentInfo> list = baseMapper.selectList(wrapper);
List<String> idList = new ArrayList<>();
Boolean delFlag = false;
if (Common.isNotNull(list)) {
for (TPaymentInfo paymentInfo : list) {
if ((!user.getId().equals(paymentInfo.getCreateBy()) ||
CommonConstants.ZERO_STRING.equals(paymentInfo.getPushStatus()))
&& !CommonConstants.ONE_STRING.equals(user.getId())) {
return R.failed("存在不符合条件的数据(已推送至结算平台或非本人创建),禁止删除!");
if ((!user.getId().equals(paymentInfo.getCreateBy()) &&
!CommonConstants.ONE_STRING.equals(user.getId())) ||
CommonConstants.ZERO_STRING.equals(paymentInfo.getPushStatus())) {
delFlag = true;
} else {
idList.add(paymentInfo.getId());
}
......@@ -278,8 +268,42 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
} else {
return R.failed(CommonConstants.NO_DATA_TO_HANDLE);
}
if (Common.isNotNull(idList)) {
baseMapper.deleteBatchIds(idList);
return R.ok();
}
if (delFlag) {
return R.ok(null,"存在不符合条件的数据(已推送至结算平台或非本人创建),禁止删除!");
}
return R.ok(null,"批量删除成功");
}
private LambdaQueryWrapper buildQueryWrapper(String empIdCard, String socialHouseId, String fundHouseId,
String socialCreateMonth, String socialPayMonth){
LambdaQueryWrapper<TPaymentInfo> wrapper = Wrappers.lambdaQuery();
if (Common.isNotNull(empIdCard)) {
wrapper.eq(TPaymentInfo::getEmpIdcard, empIdCard);
}
if (Common.isNotNull(socialHouseId)) {
SysHouseHoldInfo info = sysHouseHoldInfoMapper.selectById(socialHouseId);
if (Common.isNotNull(info)) {
wrapper.eq(TPaymentInfo::getSocialHousehold, info.getName());
}
}
if (Common.isNotNull(fundHouseId)) {
SysHouseHoldInfo infoFund = sysHouseHoldInfoMapper.selectById(fundHouseId);
if (Common.isNotNull(infoFund)) {
wrapper.eq(TPaymentInfo::getProvidentHousehold, infoFund.getName());
}
}
if (Common.isNotNull(socialCreateMonth)) {
wrapper.eq(TPaymentInfo::getSocialCreateMonth, socialCreateMonth).or()
.eq(TPaymentInfo::getProvidentCreateMonth, socialCreateMonth);
}
if (Common.isNotNull(socialPayMonth)) {
wrapper.eq(TPaymentInfo::getSocialPayMonth, socialPayMonth).or()
.eq(TPaymentInfo::getProvidentPayMonth, socialPayMonth);;
}
return wrapper;
}
@Override
......@@ -296,7 +320,7 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
/**
* 单次缓存的数据量
*/
public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT;
public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT1;
/**
*临时存储
*/
......@@ -480,17 +504,26 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
// -----------------------------线程池处理list,批量保存社保信息开始--------------------------------
List<TPaymentInfoVo> tempList = new ArrayList<>();
String importSuccessKey = user.getId() + CommonConstants.DOWN_LINE_STRING + CommonConstants.PAYMENT_SOCIAL_WAIT_EXPORT;
AtomicInteger atomicLine = new AtomicInteger(CommonConstants.ZERO_INT);
List<CompletableFuture<List<ErrorMessage>>> completableFutureList = new ArrayList<>();
try {
// 1.list.size()不足partSize,直接执行
if (list.size() < partSize) {
CompletableFuture<List<ErrorMessage>> listCompletableFuture = CompletableFuture.supplyAsync(() ->
executeImportSocialList(user, atomicLine, random, list, areaMap, areaMap2,
executeImportSocialList(user, atomicLine, list, areaMap, areaMap2,
paymentInfoPensionMap, paymentInfoBigMap, paymentInfoBirMap,
paymentInfoMedicalMap, paymentInfoUnEmpMap, paymentInfoInjuryMap,
CommonConstants.ONE_INT, errorMessageList), yfSocialImportThreadPoolExecutor);
completableFutureList.add(listCompletableFuture);
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String maerialRatio = numberFormat.format((float)atomicLine.get()/(float)list.size()*100);
redisUtil.set(importSuccessKey, maerialRatio, 180L);
}
// 2.list.size()大于partSize,循环分批执行
......@@ -499,7 +532,7 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
// 处理第一个0位元素
final List<TPaymentInfoVo> finalList = list.subList(0, 1);
CompletableFuture<List<ErrorMessage>> listCompletableFuture = CompletableFuture.supplyAsync(() ->
executeImportSocialList(user, atomicLine, random, finalList, areaMap, areaMap2,
executeImportSocialList(user, atomicLine, finalList, areaMap, areaMap2,
paymentInfoPensionMap, paymentInfoBigMap, paymentInfoBirMap,
paymentInfoMedicalMap, paymentInfoUnEmpMap, paymentInfoInjuryMap,
CommonConstants.ONE_INT, errorMessageList), yfSocialImportThreadPoolExecutor);
......@@ -514,13 +547,19 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
List<TPaymentInfoVo> finalTempList = tempList;
final int idx = i - partSize + 2;
CompletableFuture.supplyAsync(() ->
executeImportSocialList(user, atomicLine, random, finalTempList, areaMap, areaMap2,
executeImportSocialList(user, atomicLine, finalTempList, areaMap, areaMap2,
paymentInfoPensionMap, paymentInfoBigMap, paymentInfoBirMap,
paymentInfoMedicalMap, paymentInfoUnEmpMap, paymentInfoInjuryMap,
idx, errorMessageList), yfSocialImportThreadPoolExecutor);
tempList = new ArrayList<>();
}
}
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String maerialRatio = numberFormat.format((float)atomicLine.get()/(float)list.size()*100);
redisUtil.set(importSuccessKey, maerialRatio, 180L);
}
// 3.第2种方式执行完后,有余数的情况下,执行3
......@@ -540,11 +579,17 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
List<TPaymentInfoVo> finalTempList = tempList;
int finalLastIdx = lastIdx + 1;
CompletableFuture<List<ErrorMessage>> listCompletableFuture = CompletableFuture.supplyAsync(() ->
executeImportSocialList(user, atomicLine, random, finalTempList, areaMap, areaMap2,
executeImportSocialList(user, atomicLine, finalTempList, areaMap, areaMap2,
paymentInfoPensionMap, paymentInfoBigMap, paymentInfoBirMap,
paymentInfoMedicalMap, paymentInfoUnEmpMap, paymentInfoInjuryMap,
finalLastIdx, errorMessageList), yfSocialImportThreadPoolExecutor);
completableFutureList.add(listCompletableFuture);
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String maerialRatio = numberFormat.format((float)atomicLine.get()/(float)list.size()*100);
redisUtil.set(importSuccessKey, maerialRatio, 180L);
}
// 阻塞当前线程,等待所有的线程执行完毕
......@@ -558,15 +603,6 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
}
} while (computeFlag);
String importSuccessKey = user.getId() + CommonConstants.DOWN_LINE_STRING + CommonConstants.PAYMENT_SOCIAL_WAIT_EXPORT;
// 创建一个数值格式化对象
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String maerialRatio = numberFormat.format((float)atomicLine.get()/(float)list.size()*100);
redisUtil.set(importSuccessKey, maerialRatio, 1800L);
} catch (Exception e) {
log.error("社保缴费库数据批量导入异常:" + e);
redisUtil.remove(key);
......@@ -631,7 +667,6 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
*/
private List<ErrorMessage> executeImportSocialList(YifuUser user,
AtomicInteger atomicLine,
String random,
List<TPaymentInfoVo> list,
HashMap<String, String> areaMap,
HashMap<String, String> areaMap2,
......@@ -961,8 +996,6 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
paymentInfo.setSocialHousehold(socialInfo.getSocialHouseholdName());
paymentInfo.setSocialPayMonth(infoVo.getSocialPayMonth());
// 同时设置公积金缴纳日期方便导入处理
paymentInfo.setProvidentPayMonth(infoVo.getSocialPayMonth());
if (null != paymentInfo.getSocialProvince()) {
temp = areaMap.get(paymentInfo.getSocialProvince());
......@@ -1480,8 +1513,6 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
paymentInfo.setTelecomNumber(fund.getTelecomNumber());
}
paymentInfo.setProvidentPayMonth(infoVo.getProvidentPayMonth());
//同时设置社保缴纳日期方便导入处理
paymentInfo.setSocialPayMonth(infoVo.getProvidentPayMonth());
paymentInfo.setFundProvince(fund.getFundProvince());
paymentInfo.setFundCity(fund.getFundCity());
paymentInfo.setFundTown(fund.getFundTown());
......@@ -1656,6 +1687,19 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
+ PaymentConstants.MEDICAL
, info);
}
if (BigDecimalUtils.safeAdd(BigDecimalUtils.isNullToZero(info.getPersonalBigmailmentMoney()),
BigDecimalUtils.isNullToZero(info.getUnitBigmailmentMoney())).compareTo(BigDecimal.ZERO) != 0) {
paymentInfoBigMap.put(info.getSocialPayAddr()
+ CommonConstants.DOWN_LINE_STRING
+ info.getEmpIdcard()
+ CommonConstants.DOWN_LINE_STRING
+ info.getSocialPayMonth()
+ CommonConstants.DOWN_LINE_STRING
+ info.getSocialCreateMonth()
+ CommonConstants.DOWN_LINE_STRING
+ SocialConstants.DB
, info);
}
}
}
// -----------------------------生成paymentInfoMap本段结束--------------------------------
......@@ -1675,7 +1719,8 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
CompletableFuture<List<ErrorMessage>> listCompletableFuture = CompletableFuture.supplyAsync(()
-> executeImportSocialListThree(user, atomicLine, random, list, areaMap, areaMap2,
paymentInfoPensionMap, paymentInfoMedicalMap, paymentInfoUnEmpMap, paymentInfoInjuryMap,
CommonConstants.ONE_INT, type, errorMessageList), yfSocialImportThreadPoolExecutor);
paymentInfoBigMap,CommonConstants.ONE_INT, type, errorMessageList),
yfSocialImportThreadPoolExecutor);
completableFutureList.add(listCompletableFuture);
}
......@@ -1687,8 +1732,8 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
CompletableFuture<List<ErrorMessage>> oneCompletableFuture = CompletableFuture.supplyAsync(()
-> executeImportSocialListThree(user, atomicLine, random, finalList, areaMap,
areaMap2, paymentInfoPensionMap, paymentInfoMedicalMap, paymentInfoUnEmpMap,
paymentInfoInjuryMap, CommonConstants.ONE_INT, type, errorMessageList)
, yfSocialImportThreadPoolExecutor);
paymentInfoInjuryMap, paymentInfoBigMap,CommonConstants.ONE_INT, type,
errorMessageList), yfSocialImportThreadPoolExecutor);
completableFutureList.add(oneCompletableFuture);
lastIdx = 1;
for (int i = 1; i < list.size(); i++) {
......@@ -1701,8 +1746,8 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
CompletableFuture<List<ErrorMessage>> listCompletableFuture = CompletableFuture.supplyAsync(()
-> executeImportSocialListThree(user, atomicLine, random, finalTempList1
, areaMap, areaMap2, paymentInfoPensionMap, paymentInfoMedicalMap,
paymentInfoUnEmpMap, paymentInfoInjuryMap, idx, type, errorMessageList)
, yfSocialImportThreadPoolExecutor);
paymentInfoUnEmpMap, paymentInfoInjuryMap, paymentInfoBigMap,idx, type,
errorMessageList), yfSocialImportThreadPoolExecutor);
completableFutureList.add(listCompletableFuture);
tempList = new ArrayList<>();
}
......@@ -1728,7 +1773,7 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
CompletableFuture<List<ErrorMessage>> listCompletableFuture = CompletableFuture.supplyAsync(()
-> executeImportSocialListThree(user, atomicLine, random, finalTempList, areaMap,
areaMap2, paymentInfoPensionMap, paymentInfoMedicalMap, paymentInfoUnEmpMap,
paymentInfoInjuryMap, finalLastIdx, type, errorMessageList)
paymentInfoInjuryMap, paymentInfoBigMap,finalLastIdx, type, errorMessageList)
, yfSocialImportThreadPoolExecutor);
completableFutureList.add(listCompletableFuture);
}
......@@ -1777,6 +1822,7 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
ConcurrentHashMap<String, TPaymentInfo> paymentInfoMedicalMap,
ConcurrentHashMap<String, TPaymentInfo> paymentInfoUnEmpMap,
ConcurrentHashMap<String, TPaymentInfo> paymentInfoInjuryMap,
ConcurrentHashMap<String, TPaymentInfo> paymentInfoBigMap,
int idx, String type,List<ErrorMessage> errorMessageList) {
int i = idx;
if (Common.isNotNull(list)) {
......@@ -1929,7 +1975,7 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
//存在社保缴费数据
if (null != payExists && BigDecimalUtils.safeMultiply(BigDecimalUtils.safeAdd(
BigDecimalUtils.isNullToZero(infoVo.getPersonalMoney()),
BigDecimalUtils.isNullToZero(infoVo.getUnitSet())), BigDecimalUtils.safeAdd(
BigDecimalUtils.isNullToZero(infoVo.getUnitMoney())), BigDecimalUtils.safeAdd(
BigDecimalUtils.isNullToZero(payExists.getUnitPensionMoney()),
BigDecimalUtils.isNullToZero(payExists.getPersonalPensionMoney()))).compareTo(BigDecimal.ZERO) > 0) {
errorMessageList.add(new ErrorMessage(infoVo.getRowIndex(), "已存在对应员工身份证" + infoVo.getEmpIdcard()
......@@ -1954,7 +2000,7 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
//存在社保缴费数据
if (null != payExists && BigDecimalUtils.safeMultiply(BigDecimalUtils.safeAdd(
BigDecimalUtils.isNullToZero(infoVo.getPersonalMoney()),
BigDecimalUtils.isNullToZero(infoVo.getUnitSet())), BigDecimalUtils.safeAdd(
BigDecimalUtils.isNullToZero(infoVo.getUnitMoney())), BigDecimalUtils.safeAdd(
BigDecimalUtils.isNullToZero(payExists.getUnitUnemploymentMoney()),
BigDecimalUtils.isNullToZero(payExists.getPersonalUnemploymentMoney()))).compareTo(BigDecimal.ZERO) > 0) {
errorMessageList.add(new ErrorMessage(infoVo.getRowIndex(), "已存在对应员工身份证" + infoVo.getEmpIdcard()
......@@ -2016,6 +2062,32 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
}
}
//判断是否存在医疗救助金缴费数据
if (CommonConstants.ONE_STRING.equals(type)) {
payExists = paymentInfoBigMap.get(infoVo.getSocialPayAddr()
+ CommonConstants.DOWN_LINE_STRING
+ infoVo.getEmpIdcard().trim()
+ CommonConstants.DOWN_LINE_STRING
+ infoVo.getSocialPayMonth().trim()
+ CommonConstants.DOWN_LINE_STRING
+ infoVo.getSocialCreateMonth().trim()
+ CommonConstants.DOWN_LINE_STRING
+ SocialConstants.DB);
//存在社保缴费数据
if (null != payExists && BigDecimalUtils.safeMultiply(BigDecimalUtils.safeAdd(
BigDecimalUtils.isNullToZero(infoVo.getUnitBigailmentMoney()),
BigDecimalUtils.isNullToZero(infoVo.getPersonalBigailmentMoney())), BigDecimalUtils.safeAdd(
BigDecimalUtils.isNullToZero(payExists.getUnitBigmailmentMoney()),
BigDecimalUtils.isNullToZero(payExists.getPersonalBigmailmentMoney()))).compareTo(BigDecimal.ZERO) > 0) {
errorMessageList.add(new ErrorMessage(infoVo.getRowIndex(), "已存在对应员工身份证" + infoVo.getEmpIdcard()
+ "的医疗救助金缴费数据,请勿重复导入!"));
continue;
} else {
payExists = null;
}
}
if (null == payExists) {
payExists = new TPaymentInfo();
payExists.setLockStatus(CommonConstants.ZERO_STRING);
......@@ -2036,8 +2108,6 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
payExists.setSocialHousehold(socialInfo.getSocialHouseholdName());
payExists.setSocialPayMonth(infoVo.getSocialPayMonth());
// 同时设置公积金缴纳日期方便导入处理
payExists.setProvidentPayMonth(infoVo.getSocialPayMonth());
if (null != payExists.getSocialProvince()) {
temp = areaMap.get(payExists.getSocialProvince());
......@@ -2061,9 +2131,7 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
payExists.setSocialCreateMonth(infoVo.getSocialCreateMonth());
if (PaymentConstants.PENSION_RISK.equals(infoVo.getRiskType())) {
payExists.setUnitPensionMoney(infoVo.getUnitMoney());
payExists.setPersonalPensionMoney(infoVo.getPersonalMoney());
payExists.setUnitPensionSet(infoVo.getUnitSet());
payExists.setUnitPensionMoney(infoVo.getUnitMoney());
payExists.setPersonalPensionMoney(infoVo.getPersonalMoney());
payExists.setUnitSocialSum(BigDecimalUtils.safeAdd(payExists.getUnitPensionMoney()
, payExists.getUnitSocialSum()));
......@@ -2071,9 +2139,6 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
, payExists.getSocialSecurityPersonalSum()));
}
if (PaymentConstants.UNEMPLOYEEMENT_RISK.equals(infoVo.getRiskType())) {
payExists.setUnitUnemploymentMoney(infoVo.getUnitMoney());
payExists.setPersonalUnemploymentMoney(infoVo.getPersonalMoney());
payExists.setUnitUnemploymentSet(infoVo.getUnitSet());
payExists.setUnitUnemploymentMoney(infoVo.getUnitMoney());
payExists.setPersonalUnemploymentMoney(infoVo.getPersonalMoney());
payExists.setUnitUnemploymentSet(infoVo.getUnitSet());
......@@ -2083,8 +2148,6 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
, payExists.getSocialSecurityPersonalSum()));
}
if (PaymentConstants.INJURY_RISK.equals(infoVo.getRiskType())) {
payExists.setUnitInjuryMoney(infoVo.getUnitMoney());
payExists.setUnitInjurySet(infoVo.getUnitSet());
payExists.setUnitInjuryMoney(infoVo.getUnitMoney());
payExists.setUnitInjurySet(infoVo.getUnitSet());
payExists.setUnitSocialSum(BigDecimalUtils.safeAdd(payExists.getUnitInjuryMoney()
......@@ -2092,15 +2155,10 @@ public class TPaymentInfoServiceImpl extends ServiceImpl<TPaymentInfoMapper, TPa
}
if (CommonConstants.ONE_STRING.equals(type)) {
payExists.setUnitMedicalMoney(infoVo.getUnitMedicalMoney());
payExists.setUnitMedicalSet(infoVo.getMedicalSet());
payExists.setPersonalMedicalMoney(infoVo.getPersonalMedicalMoney());
payExists.setPersonalBigmailmentMoney(infoVo.getPersonalBigailmentMoney());
payExists.setUnitBigmailmentMoney(infoVo.getUnitBigailmentMoney());
payExists.setUnitMedicalMoney(infoVo.getUnitMedicalMoney());
payExists.setUnitMedicalSet(infoVo.getMedicalSet());
payExists.setPersonalMedicalMoney(infoVo.getPersonalMedicalMoney());
payExists.setPersonalBigmailmentMoney(infoVo.getPersonalBigailmentMoney());
payExists.setUnitBigmailmentMoney(infoVo.getUnitBigailmentMoney());
payExists.setSocialSecurityNo(infoVo.getSocialSecurityNo());
payExists.setUnitSocialSum(BigDecimalUtils.safeAdd(payExists.getUnitMedicalMoney()
......
......@@ -641,17 +641,17 @@ public class TPreDispatchInfoServiceImpl extends ServiceImpl<TPreDispatchInfoMap
@Override
public List<ErrorMessage> batchSavePreDisPatchAdd(List<TPreDispatchInfo> listInfo, YifuUser user, String socialHouse
, String fundHouse, String departId) {
List<ErrorMessage> errorList = new ArrayList<>();
, String fundHouse, String departId, List<ErrorMessage> errList) {
R<TSettleDomainSelectVo> domainR = archivesDaprUtil.getSettleDomainSelectVoById(departId);
// 获取区域数据MAP
HashMap<String, SysArea> areaHashMap = new HashMap<>(CommonConstants.SIXTEEN_INT);
HashMap<String, SysArea> areaIdMap = new HashMap<>(CommonConstants.SIXTEEN_INT);
if (dataCheck(listInfo, errorList, areaHashMap, areaIdMap)) {
return errorList;
if (dataCheck(listInfo, errList, areaHashMap, areaIdMap)) {
return errList;
}
if (dataCheckDepart(errorList, domainR)) {
return errorList;
if (dataCheckDepart(errList, domainR)) {
return errList;
}
TSettleDomainSelectVo selectVo = domainR.getData();
// 获取基数配置信息
......@@ -671,11 +671,11 @@ public class TPreDispatchInfoServiceImpl extends ServiceImpl<TPreDispatchInfoMap
i++;
if (Common.isNotNull(info.getTelNotice()) && (!CommonConstants.IS_TRUE.equals(info.getTelNotice()) &&
!CommonConstants.IS_FALSE.equals(info.getTelNotice()))) {
errorList.add(new ErrorMessage(i,"是否电话通知不允许导入【是】和【否】之外的内容"));
errList.add(new ErrorMessage(i,"是否电话通知不允许导入【是】和【否】之外的内容"));
continue;
}
// 1.验重
if (checkAddRepeat(errorList, existsMap, i, info)) {
if (checkAddRepeat(errList, existsMap, i, info)) {
continue;
}
// 基础封装 其他
......@@ -698,11 +698,22 @@ public class TPreDispatchInfoServiceImpl extends ServiceImpl<TPreDispatchInfoMap
if (!Common.isEmpty(info.getExceptionContent())) {
info.setPreStatus(CommonConstants.ONE_STRING);
}
int finalI = i;
if (!errList.stream().anyMatch(e-> hasError(e, finalI))) {
baseMapper.insert(info);
}
return errorList;
}
return errList;
}
public Boolean hasError(ErrorMessage errorMessage, int i) {
if (Common.isNotNull(errorMessage.getMessage()) && errorMessage.getLineNum() == i) {
return true;
}
return false;
}
/**
* 预派单批量新增派减
* @param list
......@@ -713,9 +724,8 @@ public class TPreDispatchInfoServiceImpl extends ServiceImpl<TPreDispatchInfoMap
**/
@Transactional
@Override
public List<ErrorMessage> batchSavePreDisPatchReduce(List<TPreDispatchReduceVo> list, YifuUser user) {
List<ErrorMessage> errorList = new ArrayList<>();
public List<ErrorMessage> batchSavePreDisPatchReduce(List<TPreDispatchReduceVo> list, YifuUser user,
List<ErrorMessage> errorList) {
// 获取区域数据MAP
HashMap<String, SysArea> areaIdMap = new HashMap<>(CommonConstants.SIXTEEN_INT);
HashMap<String, SysArea> areaHashMap = new HashMap<>(CommonConstants.SIXTEEN_INT);
......@@ -768,8 +778,11 @@ public class TPreDispatchInfoServiceImpl extends ServiceImpl<TPreDispatchInfoMap
if (!Common.isEmpty(info.getExceptionContent())) {
info.setPreStatus(CommonConstants.ONE_STRING);
}
int finalI = i;
if (!errorList.stream().anyMatch(e-> hasError(e, finalI))) {
baseMapper.insert(info);
}
}
return errorList;
}
......@@ -782,8 +795,8 @@ public class TPreDispatchInfoServiceImpl extends ServiceImpl<TPreDispatchInfoMap
* @return
**/
@Override
public List<ErrorMessage> batchUpdatePreDisPatch(List<TPreDispatchUpdateVo> list, YifuUser user) {
List<ErrorMessage> errorList = new ArrayList<>();
public List<ErrorMessage> batchUpdatePreDisPatch(List<TPreDispatchUpdateVo> list, YifuUser user,
List<ErrorMessage> errorList) {
// 获取区域数据MAP
HashMap<String, SysArea> areaHashMap = new HashMap<>(CommonConstants.SIXTEEN_INT);
HashMap<String,SysArea> areaIdMap = new HashMap<>(CommonConstants.SIXTEEN_INT);
......@@ -808,41 +821,44 @@ public class TPreDispatchInfoServiceImpl extends ServiceImpl<TPreDispatchInfoMap
TPreDispatchInfo repeat = null;
int i=1;
String str = null;
for (TPreDispatchInfo info:listInfo){
for (TPreDispatchInfo info:listInfo) {
i++;
if (Common.isNotNull(info.getTelNotice()) && (!CommonConstants.IS_TRUE.equals(info.getTelNotice()) &&
!CommonConstants.IS_FALSE.equals(info.getTelNotice()))) {
errorList.add(new ErrorMessage(i,"是否电话通知不允许导入【是】和【否】之外的内容"));
errorList.add(new ErrorMessage(i, "是否电话通知不允许导入【是】和【否】之外的内容"));
continue;
}
// 重置异常状态
info.setExceptionContent("");
info.setPreStatus(CommonConstants.ZERO_STRING);
temp = existsMap.get(info.getId());
repeat = repeatMap.get(info.getEmpIdcard()+CommonConstants.DOWN_LINE_STRING+info.getPayAddress());
repeat = repeatMap.get(info.getEmpIdcard() + CommonConstants.DOWN_LINE_STRING + info.getPayAddress());
// 判重 及身份证不可更新
if (checkRepeatOrIdcard(errorList, temp, i+1, info,repeat)) {
if (checkRepeatOrIdcard(errorList, temp, i + 1, info, repeat)) {
continue;
}
// 验证派单类型
checkDispatchType(info);
// 1.先校验已有数据
str = checkBatchSave(info,info.getType());
str = checkBatchSave(info, info.getType());
if (null != str) {
info.setPreStatus(CommonConstants.ONE_STRING);
info.setExceptionContent(str);
}
// 2.封装 社保缴纳地 公积金缴纳地
initBatchUpdateArea(areaHashMap, areaIdMap, info);
if (Common.isEmpty(info.getExceptionContent())){
if (Common.isEmpty(info.getExceptionContent())) {
// 3.验证补缴时间是否异常 派增验证 派减日期不处理
checkStartTime(baseSocialSetMap, baseFundSetMap, temp, info);
}
// 4.如果派增缴纳地有变更重新变更派单限制日期
initDayLimitForUpdate(dayConfMap, temp, info);
// 5.更新
int finalI = i;
if (!errorList.stream().anyMatch(e-> hasError(e, finalI))) {
updateInfoByIdSub(errorList, temp, i, info);
}
}
return errorList;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment