工人热更新

This commit is contained in:
朱昊天
2026-04-27 10:09:33 +08:00
parent d02ef34751
commit 96a1f9f9bc

View File

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gear.common.core.domain.PageQuery; import com.gear.common.core.domain.PageQuery;
import com.gear.common.core.page.TableDataInfo; import com.gear.common.core.page.TableDataInfo;
import com.gear.common.helper.LoginHelper; import com.gear.common.helper.LoginHelper;
import com.gear.common.utils.DateUtils;
import com.gear.common.utils.StringUtils; import com.gear.common.utils.StringUtils;
import com.gear.oa.domain.GearWageEntryDetail; import com.gear.oa.domain.GearWageEntryDetail;
import com.gear.oa.domain.GearWageRateConfig; import com.gear.oa.domain.GearWageRateConfig;
@@ -23,7 +24,10 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 工资录入明细Service业务层处理 * 工资录入明细Service业务层处理
@@ -44,6 +48,7 @@ public class GearWageEntryDetailServiceImpl implements IGearWageEntryDetailServi
@Override @Override
public TableDataInfo<GearWageEntryDetailVo> queryPageList(GearWageEntryDetailBo bo, PageQuery pageQuery) { public TableDataInfo<GearWageEntryDetailVo> queryPageList(GearWageEntryDetailBo bo, PageQuery pageQuery) {
syncTodayWorkers(bo.getEntryDate());
LambdaQueryWrapper<GearWageEntryDetail> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<GearWageEntryDetail> lqw = buildQueryWrapper(bo);
Page<GearWageEntryDetailVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<GearWageEntryDetailVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
@@ -57,6 +62,7 @@ public class GearWageEntryDetailServiceImpl implements IGearWageEntryDetailServi
// } // }
@Override @Override
public List<GearWageEntryDetailVo> queryList(GearWageEntryDetailBo bo) { public List<GearWageEntryDetailVo> queryList(GearWageEntryDetailBo bo) {
syncTodayWorkers(bo.getEntryDate());
// 将 selectList 改为 selectVoList // 将 selectList 改为 selectVoList
List<GearWageEntryDetailVo> list = baseMapper.selectVoList(buildQueryWrapper(bo)); List<GearWageEntryDetailVo> list = baseMapper.selectVoList(buildQueryWrapper(bo));
// 处理累计金额 // 处理累计金额
@@ -68,6 +74,72 @@ public class GearWageEntryDetailServiceImpl implements IGearWageEntryDetailServi
return list; 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<GearWageEntryDetail> existList = baseMapper.selectList(Wrappers.<GearWageEntryDetail>lambdaQuery()
.select(GearWageEntryDetail::getEmpId, GearWageEntryDetail::getBillingType, GearWageEntryDetail::getRateId, GearWageEntryDetail::getOrderNo)
.eq(GearWageEntryDetail::getEntryDate, date)
.eq(GearWageEntryDetail::getOrderNo, ""));
Set<String> existKeys = new HashSet<>();
for (GearWageEntryDetail d : existList) {
existKeys.add(buildDailyKey(d.getEmpId(), d.getBillingType(), d.getRateId(), d.getOrderNo()));
}
List<GearWorker> workers = gearWorkerMapper.selectList(Wrappers.<GearWorker>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.<GearWageRateConfig>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<GearWageEntryDetail> buildQueryWrapper(GearWageEntryDetailBo bo) { private LambdaQueryWrapper<GearWageEntryDetail> buildQueryWrapper(GearWageEntryDetailBo bo) {
LambdaQueryWrapper<GearWageEntryDetail> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<GearWageEntryDetail> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getDetailId() != null, GearWageEntryDetail::getDetailId, bo.getDetailId()); lqw.eq(bo.getDetailId() != null, GearWageEntryDetail::getDetailId, bo.getDetailId());