bug修改

This commit is contained in:
方亮 2025-10-13 18:25:35 +08:00
parent 115a07de9d
commit 704bd94130
19 changed files with 219 additions and 55 deletions

View File

@ -23,7 +23,7 @@ public interface RemoteJobService {
* @return
*/
@PostMapping(value = "/ownJob/update", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public AjaxResult update(@RequestPart(value = "month") String month, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
public AjaxResult update(@RequestPart(value = "month") String month,@RequestPart(value = "proId") Integer proId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

View File

@ -23,7 +23,7 @@ public class RemoteJobFallbackFactory implements FallbackFactory<RemoteJobServic
log.error("文件上传调用失败:{}", throwable.getMessage());
return new RemoteJobService(){
@Override
public AjaxResult update(String month, String source) {
public AjaxResult update(String month, Integer proId, String source) {
return AjaxResult.error("三表一册更新报错:" + throwable.getMessage());
}
};

View File

@ -295,7 +295,7 @@ public class PmProjectController extends BaseController {
*/
// @RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth, requiresPermissions = @RequiresPermissions("pro:month:list"))
@PostMapping("/updateSalary")
@SysLog(title = "三表一册", businessType = OperaType.UPDATE, module = "三表一册->封档")
@SysLog(title = "三表一册", businessType = OperaType.UPDATE, module = "三表一册->修改代扣代缴")
public AjaxResult updateSalary(@Validated @RequestBody List<UserWagePayVo> userWagePay) {
try {
int res = pmProjectService.updateSalary(userWagePay);

View File

@ -149,6 +149,17 @@ public class RepairCardApplyController extends BaseController {
return repairCardApplyMapper.saverepairCardApply(cardApplyDto, new FileBasicMsgDto(listFile, files));
}
/**
* 查询工程是否封档
*
* @param
* @return
*/
@PostMapping("/getProSalaryStatus")
public AjaxResult getProSalaryStatus(@RequestBody RepairCardApplyDto o) {
return repairCardApplyMapper.getProSalaryStatus(o);
}
/**
* 修改补卡申请驳回后重新提交
*

View File

@ -7,6 +7,7 @@ import com.bonus.bmw.domain.po.PmSubCompany;
import com.bonus.bmw.domain.vo.*;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
@ -127,4 +128,6 @@ public interface PmProjectMapper {
int getSealStatus(ProMonthTable proMonthTable);
int updateDataStatus(ProMonthTable proMonthTable);
void updateMonthSalary( @Param("netSalary") BigDecimal netSalary, @Param("monthId") String monthId);
}

View File

@ -56,4 +56,6 @@ public interface RepairCardApplyMapper {
Integer getPlayCardByWorkIdAndAttDay(RepairCardRecordDto repairCardRecord);
List<RepairCardApplyDto> getRepairCardApplyByProMonth(RepairCardApplyDto cardApplyDto);
String getSalaryStatus(RepairCardApplyDto cardApplyDto);
}

View File

@ -33,4 +33,6 @@ public interface RepairCardApplyService {
List<CardStatisticsDto> getCardStatistics(RepairCardApplyDto cardApply);
AjaxResult updateRepairCardApply(RepairCardApplyDto cardApplyDto, FileBasicMsgDto fileBasicMsgDto);
AjaxResult getProSalaryStatus(RepairCardApplyDto o);
}

View File

@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@ -252,6 +253,8 @@ public class PmProjectServiceImpl implements PmProjectService {
return i;
}
/**
* 回单上传
*/
@ -290,7 +293,14 @@ public class PmProjectServiceImpl implements PmProjectService {
@Override
public int updateSalary(List<UserWagePayVo> userWagePay) {
return pmProjectMapper.updateSalary(userWagePay);
int i = pmProjectMapper.updateSalary(userWagePay);
if(i>0){
BigDecimal sum = userWagePay.stream()
.map(UserWagePayVo::getActualMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);
pmProjectMapper.updateMonthSalary(sum, userWagePay.get(0).getMonthId());
}
return i;
}
@Override
@ -317,7 +327,7 @@ public class PmProjectServiceImpl implements PmProjectService {
@Override
public AjaxResult updateThreeTableOneRoster(ProMonthTable proMonthTable) {
try {
remoteJobService.update(proMonthTable.getTableMonth(), SecurityConstants.INNER);
remoteJobService.update(proMonthTable.getTableMonth(), Math.toIntExact(proMonthTable.getProId()), SecurityConstants.INNER);
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -5,7 +5,6 @@ import com.bonus.bmw.domain.po.MapBeanPo;
import com.bonus.bmw.domain.po.PmProject;
import com.bonus.bmw.mapper.PmProjectMapper;
import com.bonus.bmw.mapper.RepairCardApplyMapper;
import com.bonus.bmw.service.PmProjectService;
import com.bonus.bmw.service.RepairCardApplyService;
import com.bonus.common.core.constant.Constants;
import com.bonus.common.core.utils.StringUtils;
@ -130,6 +129,11 @@ public class RepairCardApplyServiceImpl implements RepairCardApplyService {
@Override
public AjaxResult saverepairCardApply(RepairCardApplyDto cardApplyDto, FileBasicMsgDto fileBasicMsgDto) {
cardApplyDto.setApplyUser(SecurityUtils.getLoginUser().getUsername());
// //查询工程月份是否封档
// boolean isClose =repairCardApplyMapper.getSalaryStatus(cardApplyDto);
// if (isClose) {
// return AjaxResult.error("工程"+cardApplyDto.getRepairMonth()+"已封档,无法再 补卡");
// }
Integer num = repairCardApplyMapper.saverepairCardApply(cardApplyDto);
if (num > 0) {
repairCardApplyMapper.saverepairCardDetails(cardApplyDto.getId(), cardApplyDto.getRepairCardRecords());
@ -177,6 +181,12 @@ public class RepairCardApplyServiceImpl implements RepairCardApplyService {
}
}
@Override
public AjaxResult getProSalaryStatus(RepairCardApplyDto o) {
String isClose =repairCardApplyMapper.getSalaryStatus(o);
return AjaxResult.success(isClose);
}
@Override
public Integer delRepairCardApply(RepairCardApplyDto cardApplyDto) {
Integer i = repairCardApplyMapper.delRepairCardApply(cardApplyDto);

View File

@ -110,7 +110,7 @@
INNER JOIN pm_project pp
ON bwem.pro_id = pp.id and pp.is_active = 1
<where>
bwem.is_active = 1 and bwem.ein_status = 2 and bwem.is_upload_file = 0
bwem.ein_status = 2 and bwem.is_upload_file = 0
<if test="subComId != null">
AND pp.sub_com_id
</if>
@ -309,4 +309,4 @@
)
</foreach>
</select>
</mapper>
</mapper>

View File

@ -217,6 +217,7 @@
left join pm_project pp on pp.id = tpmt.pro_id
left join pm_sub_company psc on pp.sub_com_id = psc.id
<where>
tpmt.status != 0
<if test="proName != null">
and pp.pro_name LIKE CONCAT('%', #{proName}, '%')
</if>
@ -329,4 +330,7 @@
update tb_pro_month_table set is_update = '0' where table_month = #{tableMonth}
</update>
<update id="updateMonthSalary">
update tb_pro_month_table set net_salary = #{netSalary} where id = #{monthId}
</update>
</mapper>

View File

@ -345,4 +345,14 @@
AND DATE_FORMAT(brcd.current_day, '%Y-%m') = #{repairMonth}
AND brca.pro_id = #{proId}
</select>
<select id="getSalaryStatus" resultType="java.lang.String">
SELECT
if(`status` = 2, 1, 0) as status
FROM
tb_pro_month_table
WHERE
table_month = #{repairMonth}
AND pro_id = #{proId}
</select>
</mapper>

View File

@ -15,7 +15,7 @@
Left join bm_worker_ein_msg bwem on pp.id = bwem.pro_id and bwem.is_active = 1 and bwem.worker_id = #{workerId}
</if>
<where>
pp.is_active = 1
pp.is_active = 1 and pp.pro_status != 4
<if test="subComId != null">
and pp.sub_com_id = #{subComId}
</if>

View File

@ -27,9 +27,9 @@ public class JobController extends BaseController {
* @return
*/
@PostMapping("update")
public AjaxResult update(String month) {
public AjaxResult update(String month,Integer proId) {
try {
service.update(month);
service.update(month,proId);
return AjaxResult.success("更新成功");
}catch (Exception e) {
return AjaxResult.error("三表一册更新报错");

View File

@ -8,5 +8,5 @@ package com.bonus.job.service;
public interface JobService
{
void update(String month);
void update(String month,Integer proId);
}

View File

@ -17,7 +17,7 @@ public class JobServiceImpl implements JobService
private ThreeTableOneRosterTask threeTableOneRosterTask;
@Override
public void update(String month) {
threeTableOneRosterTask.createThreeTableOneRosterData();
public void update(String month, Integer proId) {
threeTableOneRosterTask.createThreeTableOneRosterData(month, proId);
}
}

View File

@ -169,6 +169,121 @@ public class ThreeTableOneRosterTask {
}
}
/**
* 三表一册 更新 手动
* 每月1号生成上月数据
*/
public void createThreeTableOneRosterData(String month, Integer proId){
try{
// 解析年月
YearMonth yearMonth = YearMonth.parse(month);
// 计算本月第一天
LocalDate firstDayOfLastMonth = yearMonth.atDay(1);
// 计算下个月第一天
LocalDate firstDayOfThisMonth = yearMonth.plusMonths(1).atDay(1);
// 计算本月总天数
int daysInLastMonth = yearMonth.lengthOfMonth();
String startTime = firstDayOfLastMonth.format(FORMATTER)+" 00:00:00";
String endTime = firstDayOfThisMonth.format(FORMATTER)+" 00:00:00";
//先去检测上一月是否已经生成三表一册
boolean isExist = mapper.getThreeTableOneRosterDataByLastMonth(month);
//更新指定工程数据
List<MapBeanVo> listPro = new ArrayList<>();
MapBeanVo vo = new MapBeanVo();
vo.setId(proId);
listPro.add(vo);
List<ThreeTableOneRosterPo> listRosterAll = new ArrayList<>();
listPro.forEach(mapBeanVo -> {
//每个工程去循环生成
//1.花名册
List<ThreeTableOneRosterPo> listRoster = mapper.getWorkerRosterData(month,startTime,endTime,mapBeanVo.getId());
//2.农民工实名制工资信息报审表
List<ThreeTableOneRosterPo> listApply = mapper.getWorkerApplyData(month,mapBeanVo.getId());
//3.考勤明细表
List<ThreeTableOneRosterPo> listAtt = mapper.getWorkerAttData(month,mapBeanVo.getId());
List<ThreeTableOneRosterPo> listAttDeal = dealAttData(listAtt,yearMonth);
//4.农民工资支付表
// 数据串联生成工资支付数据
// 通过workerId,proId将listApplylistAttDeal数据填充到listRoster
// 先将listApply按workerId和proId分组
Map<String, ThreeTableOneRosterPo> applyMap = listApply.stream()
.collect(Collectors.toMap(
item -> item.getWorkerId() + "_" + item.getProId(),
item -> item,
(existing, replacement) -> existing
));
// 将listAttDeal按workerId和proId分组
Map<String, ThreeTableOneRosterPo> attDealMap = listAttDeal.stream()
.collect(Collectors.toMap(
item -> item.getWorkerId() + "_" + item.getProId(),
item -> item,
(existing, replacement) -> existing
));
// 遍历listRoster填充数据
listRoster.forEach(roster -> {
String key = roster.getWorkerId() + "_" + roster.getProId();
roster.setIsOnJob(roster.getLastExitTime() != null && !roster.getLastExitTime().isEmpty() ? "0" : "1");
roster.setMonthDay(daysInLastMonth);
// 从listApply中查找匹配的数据
ThreeTableOneRosterPo applyData = applyMap.get(key);
if (applyData != null) {
// 填充apply相关字段
roster.setBankName(applyData.getBankName());
roster.setBankCardCode(applyData.getBankCardCode());
roster.setBankIdentifierCode(applyData.getBankIdentifierCode());
roster.setContractId(applyData.getContractId());
roster.setPriceWage(applyData.getPriceWage());
roster.setPayment(applyData.getPayment());
roster.setPayDay(applyData.getPayDay());
}
// 从listAttDeal中查找匹配的数据
ThreeTableOneRosterPo attDealData = attDealMap.get(key);
if (attDealData != null) {
// 填充attDeal相关字段
roster.setAttendanceDay(attDealData.getAttendanceDay());
roster.setAttendanceNum(attDealData.getAttendanceNum());
roster.setRepairNum(attDealData.getRepairNum());
roster.setCheckDay(attDealData.getCheckDay());
// 根据实际需要填充其他字段
}
// 计算工资使用精度计算如果有null返回0
double calculatePayMoney = Optional.ofNullable(roster.getPriceWage()).orElse(0.0) *
Optional.ofNullable(roster.getAttendanceNum()).orElse(0);
roster.setPayMoney(calculatePayMoney);
roster.setDeductMoney(0.0);
roster.setActualMoney(calculatePayMoney);
});
listRosterAll.addAll(listRoster);
});
if(!listRosterAll.isEmpty()){
//插入数据
if(isExist){
mapper.deleteWorkerPay(month);
}
mapper.insertWorkerPay(listRosterAll);
//获取整合数据
List<AttProMonthPo> listRosterMonthAll = mapper.getProMonthData(month);
for (AttProMonthPo attProMonthPo : listRosterMonthAll) {
Integer id =mapper.getProMonthDataByTable(attProMonthPo);
if(id!=null && id>0){
attProMonthPo.setId(id);
attProMonthPo.setStatus(1);
mapper.updateProMonthData(attProMonthPo);
}else{
attProMonthPo.setStatus(1);
mapper.insertProMonthData(attProMonthPo);
}
mapper.updateMonthId(attProMonthPo);
}
}
}catch (Exception e){
logger.error("人员入场更新表失败,{}",e.getMessage());
}
}
private List<ThreeTableOneRosterPo> dealAttData(List<ThreeTableOneRosterPo> listAtt, YearMonth lastMonth) {
// 按照 workerId 分组
Map<Integer, List<ThreeTableOneRosterPo>> groupedByWorkerId = listAtt.stream()

View File

@ -78,9 +78,11 @@ public class WorkerEinDayRecordTask{
try{
//非上海内工程
List<BmWorkerBlackJob> list = mapper.getWorkerExitThan30Day();
int count = mapper.insertWorkerBlack(list);
logger.info("更新超30天未上传离场文件人员去失信人员成功{}",count);
mapper.updateWorkerEinDayRecordBlackStatus(list);
if(list != null && !list.isEmpty()){
int count = mapper.insertWorkerBlack(list);
logger.info("更新超30天未上传离场文件人员去失信人员成功{}",count);
mapper.updateWorkerEinDayRecordBlackStatus(list);
}
}catch (Exception e){
logger.error("人员入场更新表失败,{}",e.getMessage());
}

View File

@ -107,36 +107,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getWorkerRosterData" resultType="com.bonus.job.domain.ThreeTableOneRosterPo">
SELECT
d.pro_id,
d.pro_name,
d.att_month,
d.sub_id,
d.sub_name,
d.team_id,
d.team_name,
d.worker_id,
pw.`name`,
if(pw.sex = '男',1,0) as sex,
d.post_id,
d.post_name,
d.id_number,
pw.address,
pw.phone,
'花名册备注' as remark,
-- 正确的最早入场时间所有与8月相关的入场中最早的
MIN(p.ein_time) AS first_ein_time,
-- 获取最后一次“相关入场”的出场时间(即使为 null
(
SELECT p2.exit_time
FROM bm_worker_ein_pro_record p2
WHERE p2.worker_id = d.worker_id
AND p2.pro_id = d.pro_id
AND (
-- 情况1入场在8月内
(p2.ein_time >= #{startTime} AND p2.ein_time &lt; #{endTime})
OR
-- 情况2入场在8月前但8月仍在场
(p2.ein_time &lt; #{startTime} AND p2.exit_time >= #{startTime})
d.pro_id,
d.pro_name,
d.att_month,
d.sub_id,
d.sub_name,
d.team_id,
d.team_name,
d.worker_id,
pw.`name`,
IF(pw.sex = '男', 1, 0) AS sex,
d.post_id,
d.post_name,
d.id_number,
pw.address,
pw.phone,
'' AS remark,
MIN(p.ein_time) AS first_ein_time,
(
-- 子查询获取该工人在该项目上9月份相关记录中【最后一次入场】的 exit_time
SELECT p2.exit_time
FROM bm_worker_ein_pro_record p2
WHERE
p2.worker_id = d.worker_id
AND p2.pro_id = d.pro_id
AND (
-- 条件与2025-09有交集
(p2.ein_time >= #{startTime} AND p2.ein_time &lt; #{endTime})
OR (p2.ein_time &lt; #{startTime} AND (p2.exit_time IS NULL OR p2.exit_time >= #{startTime}))
)
ORDER BY p2.ein_time DESC
LIMIT 1
@ -144,21 +142,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM
bm_worker_ein_day_record d
LEFT JOIN pm_worker pw ON pw.id = d.worker_id
LEFT JOIN
bm_worker_ein_pro_record p
ON d.worker_id = p.worker_id
AND d.pro_id = p.pro_id
LEFT JOIN bm_worker_ein_pro_record p ON p.worker_id = d.worker_id
AND p.pro_id = d.pro_id
AND (
-- 同样条件只关联与8月出勤相关的出入记录
(p.ein_time >= #{startTime} AND p.ein_time &lt; #{endTime})
OR
(p.ein_time &lt; #{startTime} AND p.exit_time >= #{startTime})
OR (p.ein_time &lt; #{startTime} AND (p.exit_time IS NULL OR p.exit_time >= #{startTime}))
)
WHERE
d.pro_id = #{proId}
AND d.att_month = #{attMonth}
GROUP BY
d.worker_id;
d.worker_id
</select>
<select id="getWorkerApplyData" resultType="com.bonus.job.domain.ThreeTableOneRosterPo">