EmployeeSalarySummary 放到月末处理
This commit is contained in:
@ -113,15 +113,5 @@ public class EmployeeSalarySummary extends BaseEntity {
|
|||||||
private String deleted;
|
private String deleted;
|
||||||
|
|
||||||
private String description;
|
private String description;
|
||||||
/**
|
|
||||||
* 计提工资凭证编码
|
|
||||||
*/
|
|
||||||
@TableField(updateStrategy = FieldStrategy.ALWAYS)
|
|
||||||
private String accrualVoucherId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 发放工资凭证编码
|
|
||||||
*/
|
|
||||||
@TableField(updateStrategy = FieldStrategy.ALWAYS)
|
|
||||||
private String salaryVoucherId;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,6 @@ import com.jinbooks.entity.Message;
|
|||||||
import com.jinbooks.entity.hr.EmployeeSalarySummary;
|
import com.jinbooks.entity.hr.EmployeeSalarySummary;
|
||||||
import com.jinbooks.entity.hr.dto.SalaryDetailPageDto;
|
import com.jinbooks.entity.hr.dto.SalaryDetailPageDto;
|
||||||
import com.jinbooks.entity.hr.dto.SalarySummaryChangeDto;
|
import com.jinbooks.entity.hr.dto.SalarySummaryChangeDto;
|
||||||
import com.jinbooks.entity.voucher.dto.GenerateVoucherDto;
|
|
||||||
|
|
||||||
public interface EmployeeSalarySummaryService extends IService<EmployeeSalarySummary> {
|
public interface EmployeeSalarySummaryService extends IService<EmployeeSalarySummary> {
|
||||||
|
|
||||||
@ -34,7 +33,5 @@ public interface EmployeeSalarySummaryService extends IService<EmployeeSalarySum
|
|||||||
|
|
||||||
Message<Page<EmployeeSalarySummary>> pageList(SalaryDetailPageDto dto);
|
Message<Page<EmployeeSalarySummary>> pageList(SalaryDetailPageDto dto);
|
||||||
|
|
||||||
Message<String> generateVoucher(GenerateVoucherDto dto);
|
|
||||||
|
|
||||||
EmployeeSalarySummary selectSalarySummary(@Param("Dto") SalarySummaryChangeDto dto);
|
EmployeeSalarySummary selectSalarySummary(@Param("Dto") SalarySummaryChangeDto dto);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -130,173 +130,11 @@ public class EmployeeSalarySummaryServiceImpl extends ServiceImpl<EmployeeSalary
|
|||||||
return Message.ok(page);
|
return Message.ok(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional
|
|
||||||
public Message<String> generateVoucher(GenerateVoucherDto dto) {
|
|
||||||
String bookId = dto.getBookId();
|
|
||||||
Book book = bookMapper.selectById(bookId);
|
|
||||||
Integer voucherType = dto.getVoucherType();
|
|
||||||
EmployeeSalarySummary summary = super.getById(dto.getId());
|
|
||||||
|
|
||||||
if (voucherType == 0 && StringUtils.isNotBlank(summary.getAccrualVoucherId())) {
|
|
||||||
return Message.ok("计提凭证已生成");
|
|
||||||
} else if (voucherType == 1 && StringUtils.isNotBlank(summary.getSalaryVoucherId())) {
|
|
||||||
return Message.ok("发放凭证已生成");
|
|
||||||
} else if (voucherType == 2 && StringUtils.isNotBlank(summary.getAccrualVoucherId())) {
|
|
||||||
return Message.ok("收票(兼职)凭证已生成");
|
|
||||||
} else if (voucherType == 3 && StringUtils.isNotBlank(summary.getSalaryVoucherId())) {
|
|
||||||
return Message.ok("发放(兼职)凭证已生成");
|
|
||||||
}
|
|
||||||
|
|
||||||
YearMonth currentTerm = YearMonth.parse(configSysService.getCurrentTerm(dto.getBookId()));
|
|
||||||
|
|
||||||
Date currentTermLastDate = configSysService.getCurrentTermLastDate(dto.getBookId());
|
|
||||||
|
|
||||||
List<EmployeeSalaryVoucherRule> rules = getSalaryVoucherRules(bookId, voucherType);
|
|
||||||
BigDecimal debitAmount = BigDecimal.ZERO;
|
|
||||||
BigDecimal creditAmount = BigDecimal.ZERO;
|
|
||||||
|
|
||||||
List<VoucherItemChangeDto> voucherItems = new ArrayList<>();
|
|
||||||
|
|
||||||
for (EmployeeSalaryVoucherRule rule : rules) {
|
|
||||||
rule.setSummary(generateVoucherItemSummary(rule.getSummary(), currentTerm.getYear(), currentTerm.getMonthValue()));
|
|
||||||
|
|
||||||
String selectedValue = rule.getSelectedValue();
|
|
||||||
SalaryVoucherTemplateEnum matchedEnum = SalaryVoucherTemplateEnum.fromValue(selectedValue);
|
|
||||||
if (matchedEnum == null) {
|
|
||||||
throw new BusinessException(50001, "凭证模板明细数据有误,请联系管理员");
|
|
||||||
}
|
|
||||||
|
|
||||||
BigDecimal amount = switch (matchedEnum) {
|
|
||||||
case COMPANY_COSTS -> summary.getBusinessExpenditureCosts();
|
|
||||||
case SALARY_PAYABLE -> summary.getTotalAmount().add(summary.getTotalSocialInsurance()).add(summary.getProvidentFund()).add(summary.getPersonalTax());
|
|
||||||
case ACTUAL_SALARY -> summary.getTotalAmount();
|
|
||||||
case PERSONAL_INCOME_TAX -> summary.getPersonalTax();
|
|
||||||
case PERSONAL_WITHHOLDING_SOCIAL_SECURITY -> summary.getTotalSocialInsurance();
|
|
||||||
case PERSONAL_WITHHOLDING_PROVIDENT_FUND -> summary.getProvidentFund();
|
|
||||||
case ENTERPRISES_PAY_SOCIAL_INSURANCE -> summary.getBusinessSocialInsurance();
|
|
||||||
case PROVIDENT_FUND_PAID_BY_ENTERPRISES -> summary.getBusinessProvidentFund();
|
|
||||||
};
|
|
||||||
|
|
||||||
boolean isDebit = "1".equals(rule.getDirection());
|
|
||||||
voucherItems.add(createVoucherItemDto(bookId, rule, isDebit, amount));
|
|
||||||
|
|
||||||
if (isDebit) {
|
|
||||||
debitAmount = debitAmount.add(amount);
|
|
||||||
} else {
|
|
||||||
creditAmount = creditAmount.add(amount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debitAmount.compareTo(creditAmount) != 0) {
|
|
||||||
throw new BusinessException(50001, "借贷不平衡,请调整工资凭证模板");
|
|
||||||
}
|
|
||||||
|
|
||||||
VoucherChangeDto voucherChangeDto = createVoucherChangeDto(book, bookId, currentTermLastDate, currentTerm.getYear(), currentTerm.getMonthValue(), debitAmount);
|
|
||||||
voucherChangeDto.setRemark(rules.get(0).getSummary());
|
|
||||||
voucherChangeDto.setItems(voucherItems);
|
|
||||||
voucherChangeDto.setStatus(VoucherStatusEnum.DRAFT.getValue());
|
|
||||||
|
|
||||||
voucherService.save(voucherChangeDto);
|
|
||||||
|
|
||||||
LambdaUpdateWrapper<EmployeeSalarySummary> updateWrapper = new LambdaUpdateWrapper<>();
|
|
||||||
if (voucherType == 0 || voucherType == 2) {
|
|
||||||
updateWrapper.set(EmployeeSalarySummary::getAccrualVoucherId, voucherChangeDto.getId());
|
|
||||||
} else if (voucherType == 1 || voucherType == 3) {
|
|
||||||
updateWrapper.set(EmployeeSalarySummary::getSalaryVoucherId, voucherChangeDto.getId());
|
|
||||||
}
|
|
||||||
updateWrapper.eq(EmployeeSalarySummary::getId, dto.getId());
|
|
||||||
super.update(updateWrapper);
|
|
||||||
|
|
||||||
return Message.ok(voucherChangeDto.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public String generateVoucherItemSummary(String summary, int year, int month) {
|
|
||||||
return summary.replace("{yy}", (year + "").substring(2)).replace("{yyyy}", year + "").replace("{mm}", month + "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the voucher change dto with common fields
|
|
||||||
*/
|
|
||||||
private VoucherChangeDto createVoucherChangeDto(Book book, String bookId,
|
|
||||||
Date voucherDate, Integer year, Integer month, BigDecimal amount) {
|
|
||||||
|
|
||||||
Integer wordNum = voucherService.getAbleWordNum(bookId, "记", null, null).getData();
|
|
||||||
|
|
||||||
VoucherChangeDto dto = new VoucherChangeDto();
|
|
||||||
dto.setWordHead("记");
|
|
||||||
dto.setWordNum(wordNum);
|
|
||||||
dto.setBookId(bookId);
|
|
||||||
dto.setCompanyName(book.getCompanyName());
|
|
||||||
dto.setVoucherDate(voucherDate);
|
|
||||||
dto.setVoucherYear(year);
|
|
||||||
dto.setVoucherMonth(month);
|
|
||||||
dto.setDebitAmount(amount);
|
|
||||||
dto.setCreditAmount(amount);
|
|
||||||
|
|
||||||
return dto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a voucher item dto based on rule and direction
|
|
||||||
*/
|
|
||||||
private VoucherItemChangeDto createVoucherItemDto(String bookId,
|
|
||||||
EmployeeSalaryVoucherRule rule, boolean isDebit, BigDecimal amount) {
|
|
||||||
|
|
||||||
LambdaQueryWrapper<BookSubject> wrapper = new LambdaQueryWrapper<>();
|
|
||||||
wrapper.eq(BookSubject::getBookId, bookId);
|
|
||||||
wrapper.eq(BookSubject::getCode, rule.getSubjectCode());
|
|
||||||
BookSubject bookSubject = bookSubjectMapper.selectOne(wrapper);
|
|
||||||
|
|
||||||
if (Objects.isNull(bookSubject)) {
|
|
||||||
throw new BusinessException(50001, "查询不到该工资凭证规则设置的账套科目,请检查。");
|
|
||||||
}
|
|
||||||
|
|
||||||
VoucherItemChangeDto itemDto = new VoucherItemChangeDto();
|
|
||||||
itemDto.setSummary(rule.getSummary());
|
|
||||||
itemDto.setSubjectId(bookSubject.getId());
|
|
||||||
if (isDebit) {
|
|
||||||
itemDto.setDebitAmount(amount);
|
|
||||||
} else {
|
|
||||||
itemDto.setCreditAmount(amount);
|
|
||||||
}
|
|
||||||
itemDto.setAuxiliary(List.of());
|
|
||||||
itemDto.setSubjectCode(bookSubject.getCode());
|
|
||||||
itemDto.setSubjectName(bookSubject.getCode() + "-" + bookSubject.getName());
|
|
||||||
itemDto.setDetailedAccounts("");
|
|
||||||
// itemDto.setSubjectBalance(BigDecimal.ZERO);
|
|
||||||
|
|
||||||
return itemDto;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EmployeeSalarySummary selectSalarySummary(SalarySummaryChangeDto dto) {
|
public EmployeeSalarySummary selectSalarySummary(SalarySummaryChangeDto dto) {
|
||||||
return this.baseMapper.selectSalarySummary(dto);
|
return this.baseMapper.selectSalarySummary(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<EmployeeSalaryVoucherRule> getSalaryVoucherRules(String bookId, Integer voucherType) {
|
|
||||||
List<EmployeeSalaryVoucherRuleTemplate> employeeSalaryVoucherRuleTemplates = employeeSalaryVoucherRuleTemplateMapper.selectList(Wrappers.<EmployeeSalaryVoucherRuleTemplate>lambdaQuery()
|
|
||||||
.eq(EmployeeSalaryVoucherRuleTemplate::getBookId, bookId)
|
|
||||||
.eq(EmployeeSalaryVoucherRuleTemplate::getStatus, 1)
|
|
||||||
.eq(EmployeeSalaryVoucherRuleTemplate::getVoucherType, voucherType));
|
|
||||||
if (ObjectUtils.isEmpty(employeeSalaryVoucherRuleTemplates)) {
|
|
||||||
if (Objects.equals(voucherType, 0)) {
|
|
||||||
throw new BusinessException(50001, "缺少计提工资凭证模板,请先在工资凭证规则处生成");
|
|
||||||
} else {
|
|
||||||
throw new BusinessException(50001, "缺少发放工资凭证模板,请先在工资凭证规则处生成");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String id = employeeSalaryVoucherRuleTemplates.get(0).getId();
|
|
||||||
List<EmployeeSalaryVoucherRule> employeeSalaryVoucherRules = employeeSalaryVoucherRuleMapper.selectList(Wrappers.<EmployeeSalaryVoucherRule>lambdaQuery()
|
|
||||||
.eq(EmployeeSalaryVoucherRule::getTemplateId, id));
|
|
||||||
|
|
||||||
if (employeeSalaryVoucherRules.size() < 2) {
|
|
||||||
throw new BusinessException(50001, "请添加模板明细数据");
|
|
||||||
}
|
|
||||||
|
|
||||||
return employeeSalaryVoucherRules;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import com.jinbooks.entity.Message;
|
import com.jinbooks.entity.Message;
|
||||||
import com.jinbooks.entity.book.Book;
|
import com.jinbooks.entity.book.Book;
|
||||||
import com.jinbooks.entity.book.BookSubject;
|
import com.jinbooks.entity.book.BookSubject;
|
||||||
import com.jinbooks.entity.hr.EmployeeSalarySummary;
|
|
||||||
import com.jinbooks.entity.idm.UserInfo;
|
import com.jinbooks.entity.idm.UserInfo;
|
||||||
import com.jinbooks.entity.voucher.*;
|
import com.jinbooks.entity.voucher.*;
|
||||||
import com.jinbooks.entity.voucher.dto.*;
|
import com.jinbooks.entity.voucher.dto.*;
|
||||||
@ -705,23 +704,6 @@ public class VoucherServiceImpl extends ServiceImpl<VoucherMapper, Voucher> impl
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//删除工资凭证关联
|
|
||||||
//计提
|
|
||||||
List<EmployeeSalarySummary> employeeSalarySummariesAccrual = employeeSalarySummaryMapper.selectList(Wrappers.<EmployeeSalarySummary>lambdaQuery()
|
|
||||||
.in(EmployeeSalarySummary::getAccrualVoucherId, ids));
|
|
||||||
if (ObjectUtils.isNotEmpty(employeeSalarySummariesAccrual)) {
|
|
||||||
employeeSalarySummariesAccrual.forEach(item -> item.setAccrualVoucherId(null));
|
|
||||||
}
|
|
||||||
employeeSalarySummaryMapper.updateById(employeeSalarySummariesAccrual);
|
|
||||||
|
|
||||||
//发放
|
|
||||||
List<EmployeeSalarySummary> employeeSalarySummaries = employeeSalarySummaryMapper.selectList(Wrappers.<EmployeeSalarySummary>lambdaQuery()
|
|
||||||
.in(EmployeeSalarySummary::getSalaryVoucherId, ids));
|
|
||||||
if (ObjectUtils.isNotEmpty(employeeSalarySummaries)) {
|
|
||||||
employeeSalarySummaries.forEach(item -> item.setSalaryVoucherId(null));
|
|
||||||
}
|
|
||||||
employeeSalarySummaryMapper.updateById(employeeSalarySummaries);
|
|
||||||
|
|
||||||
// 删除凭证项
|
// 删除凭证项
|
||||||
voucherItemMapper.delete(new LambdaUpdateWrapper<VoucherItem>().in(VoucherItem::getVoucherId, ids));
|
voucherItemMapper.delete(new LambdaUpdateWrapper<VoucherItem>().in(VoucherItem::getVoucherId, ids));
|
||||||
voucherItemAuxiliaryMapper.delete(new LambdaQueryWrapper<VoucherAuxiliary>().in(VoucherAuxiliary::getVoucherId, ids));
|
voucherItemAuxiliaryMapper.delete(new LambdaQueryWrapper<VoucherAuxiliary>().in(VoucherAuxiliary::getVoucherId, ids));
|
||||||
|
|||||||
@ -25,7 +25,6 @@ import com.jinbooks.entity.hr.EmployeeSalarySummary;
|
|||||||
import com.jinbooks.entity.hr.dto.SalaryDetailPageDto;
|
import com.jinbooks.entity.hr.dto.SalaryDetailPageDto;
|
||||||
import com.jinbooks.entity.hr.dto.SalarySummaryChangeDto;
|
import com.jinbooks.entity.hr.dto.SalarySummaryChangeDto;
|
||||||
import com.jinbooks.entity.idm.UserInfo;
|
import com.jinbooks.entity.idm.UserInfo;
|
||||||
import com.jinbooks.entity.voucher.dto.GenerateVoucherDto;
|
|
||||||
import com.jinbooks.persistence.service.EmployeeSalarySummaryService;
|
import com.jinbooks.persistence.service.EmployeeSalarySummaryService;
|
||||||
import com.jinbooks.validate.AddGroup;
|
import com.jinbooks.validate.AddGroup;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -79,9 +78,4 @@ public class EmployeeSalarySummaryController {
|
|||||||
return Message.ok(employeeSalarySummaryService.selectSalarySummary(dto));
|
return Message.ok(employeeSalarySummaryService.selectSalarySummary(dto));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/generate-voucher")
|
|
||||||
public Message<String> generateVoucher(@Validated @RequestBody GenerateVoucherDto dto, @CurrentUser UserInfo currentUser) {
|
|
||||||
dto.setBookId(currentUser.getBookId());
|
|
||||||
return employeeSalarySummaryService.generateVoucher(dto);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user