diff --git a/gear-oa/src/main/java/com/gear/oa/service/impl/GearWageEntryDetailServiceImpl.java b/gear-oa/src/main/java/com/gear/oa/service/impl/GearWageEntryDetailServiceImpl.java index 47630cc..34dd447 100644 --- a/gear-oa/src/main/java/com/gear/oa/service/impl/GearWageEntryDetailServiceImpl.java +++ b/gear-oa/src/main/java/com/gear/oa/service/impl/GearWageEntryDetailServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gear.common.core.domain.PageQuery; import com.gear.common.core.page.TableDataInfo; import com.gear.common.helper.LoginHelper; +import com.gear.common.utils.DateUtils; import com.gear.common.utils.StringUtils; import com.gear.oa.domain.GearWageEntryDetail; import com.gear.oa.domain.GearWageRateConfig; @@ -23,7 +24,10 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Collection; +import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * 工资录入明细Service业务层处理 @@ -44,6 +48,7 @@ public class GearWageEntryDetailServiceImpl implements IGearWageEntryDetailServi @Override public TableDataInfo queryPageList(GearWageEntryDetailBo bo, PageQuery pageQuery) { + syncTodayWorkers(bo.getEntryDate()); LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); @@ -57,6 +62,7 @@ public class GearWageEntryDetailServiceImpl implements IGearWageEntryDetailServi // } @Override public List queryList(GearWageEntryDetailBo bo) { + syncTodayWorkers(bo.getEntryDate()); // 将 selectList 改为 selectVoList List list = baseMapper.selectVoList(buildQueryWrapper(bo)); // 处理累计金额 @@ -68,6 +74,72 @@ public class GearWageEntryDetailServiceImpl implements IGearWageEntryDetailServi return list; } + private void syncTodayWorkers(Date entryDate) { + if (entryDate == null) { + return; + } + if (!DateUtils.isSameDay(entryDate, DateUtils.getNowDate())) { + return; + } + + java.sql.Date date = new java.sql.Date(entryDate.getTime()); + + List existList = baseMapper.selectList(Wrappers.lambdaQuery() + .select(GearWageEntryDetail::getEmpId, GearWageEntryDetail::getBillingType, GearWageEntryDetail::getRateId, GearWageEntryDetail::getOrderNo) + .eq(GearWageEntryDetail::getEntryDate, date) + .eq(GearWageEntryDetail::getOrderNo, "")); + + Set existKeys = new HashSet<>(); + for (GearWageEntryDetail d : existList) { + existKeys.add(buildDailyKey(d.getEmpId(), d.getBillingType(), d.getRateId(), d.getOrderNo())); + } + + List workers = gearWorkerMapper.selectList(Wrappers.lambdaQuery() + .eq(GearWorker::getStatus, "0") + .orderByAsc(GearWorker::getWorkerNo)); + + for (GearWorker worker : workers) { + String billingType = StringUtils.isBlank(worker.getDefaultBillingType()) ? "1" : worker.getDefaultBillingType(); + GearWageRateConfig rateConfig = gearWageRateConfigMapper.selectOne(Wrappers.lambdaQuery() + .eq(GearWageRateConfig::getBillingType, billingType) + .eq(StringUtils.isNotBlank(worker.getDefaultWorkTypeName()), GearWageRateConfig::getRateName, worker.getDefaultWorkTypeName()) + .eq(GearWageRateConfig::getStatus, "0") + .last("limit 1")); + Long rateId = rateConfig == null ? 0L : rateConfig.getRateId(); + String orderNo = ""; + + String key = buildDailyKey(worker.getWorkerId(), billingType, rateId, orderNo); + if (existKeys.contains(key)) { + continue; + } + + GearWageEntryDetail detail = new GearWageEntryDetail(); + detail.setEntryDate(date); + detail.setEmpId(worker.getWorkerId()); + detail.setEmpName(worker.getWorkerName()); + detail.setBillingType(billingType); + detail.setWorkTypeName(StringUtils.isNotBlank(worker.getDefaultWorkTypeName()) ? worker.getDefaultWorkTypeName() : (rateConfig == null ? null : rateConfig.getRateName())); + detail.setRateId(rateId); + detail.setWorkload(BigDecimal.ZERO); + detail.setUnitPrice(rateConfig == null || rateConfig.getUnitPrice() == null ? BigDecimal.ZERO : rateConfig.getUnitPrice()); + detail.setBaseAmount(BigDecimal.ZERO); + detail.setExtraAmount(BigDecimal.ZERO); + detail.setTotalAmount(BigDecimal.ZERO); + detail.setIsMakeup("0"); + detail.setOrderNo(orderNo); + detail.setRemark("当日名单热更新"); + try { + baseMapper.insert(detail); + existKeys.add(key); + } catch (Exception ignored) { + } + } + } + + private String buildDailyKey(Long empId, String billingType, Long rateId, String orderNo) { + return String.valueOf(empId) + "|" + String.valueOf(billingType) + "|" + String.valueOf(rateId) + "|" + String.valueOf(orderNo); + } + private LambdaQueryWrapper buildQueryWrapper(GearWageEntryDetailBo bo) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getDetailId() != null, GearWageEntryDetail::getDetailId, bo.getDetailId());