人员,工资卡,合同优化修改
This commit is contained in:
parent
1d69b537d6
commit
f9d6ed23d6
|
|
@ -0,0 +1,134 @@
|
|||
package com.bonus.bmw.controller;
|
||||
|
||||
import com.bonus.bmw.domain.vo.BmWorkerAtt;
|
||||
import com.bonus.bmw.service.BmWorkerAttService;
|
||||
import com.bonus.bmw.service.BmWorkerAttService;
|
||||
import com.bonus.common.core.web.controller.BaseController;
|
||||
import com.bonus.common.core.web.page.TableDataInfo;
|
||||
import com.bonus.common.log.annotation.SysLog;
|
||||
import com.bonus.common.log.enums.OperaType;
|
||||
import com.bonus.common.security.annotation.InnerAuth;
|
||||
import com.bonus.common.security.annotation.RequiresPermissionsOrInnerAuth;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 考勤统计
|
||||
*
|
||||
* @author fly
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/workerLight")
|
||||
public class BmWorkerAttController extends BaseController {
|
||||
/**
|
||||
* 服务对象
|
||||
*/
|
||||
@Autowired
|
||||
private BmWorkerAttService service;
|
||||
|
||||
/**
|
||||
* 查询列表-分公司
|
||||
* @param o
|
||||
* @return
|
||||
* , requiresPermissions = @RequiresPermissions("system:workerLight:list")
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth(isUser = false))
|
||||
@GetMapping("/getSubComAttList")
|
||||
@SysLog(title = "考勤统计", businessType = OperaType.QUERY, logType = 0, module = "施工人员->考勤管理->考勤统计", details = "分公司考勤统计")
|
||||
public TableDataInfo getSubComAttList(BmWorkerAtt o) {
|
||||
try {
|
||||
startPage();
|
||||
List<BmWorkerAtt> list = service.getSubComAttList(o);
|
||||
return getDataTable(list);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return getDataTableError(new ArrayList<>());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询列表-工程
|
||||
* @param o
|
||||
* @return
|
||||
* , requiresPermissions = @RequiresPermissions("system:workerLight:list")
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth(isUser = false))
|
||||
@GetMapping("/getProAttList")
|
||||
@SysLog(title = "工程考勤统计", businessType = OperaType.QUERY, logType = 0, module = "施工人员->考勤管理->考勤统计", details = "工程考勤统计")
|
||||
public TableDataInfo getProAttList(BmWorkerAtt o) {
|
||||
try {
|
||||
startPage();
|
||||
List<BmWorkerAtt> list = service.getProAttList(o);
|
||||
return getDataTable(list);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return getDataTableError(new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 班组考勤统计-工程
|
||||
* @param o
|
||||
* @return
|
||||
* , requiresPermissions = @RequiresPermissions("system:workerLight:list")
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth(isUser = false))
|
||||
@GetMapping("/getTeamAttList")
|
||||
@SysLog(title = "班组考勤统计", businessType = OperaType.QUERY, logType = 0, module = "施工人员->考勤管理->考勤统计", details = "班组考勤统计")
|
||||
public TableDataInfo getTeamAttList(BmWorkerAtt o) {
|
||||
try {
|
||||
startPage();
|
||||
List<BmWorkerAtt> list = service.getTeamAttList(o);
|
||||
return getDataTable(list);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return getDataTableError(new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询列表-班组下人员列表
|
||||
* @param o
|
||||
* @return
|
||||
* , requiresPermissions = @RequiresPermissions("system:workerLight:list")
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth(isUser = false))
|
||||
@GetMapping("/getWorkerAttList")
|
||||
@SysLog(title = "班组人员考勤统计", businessType = OperaType.QUERY, logType = 0, module = "施工人员->考勤管理->考勤统计", details = "班组人员考勤统计")
|
||||
public TableDataInfo getWorkerAttList(BmWorkerAtt o) {
|
||||
try {
|
||||
startPage();
|
||||
List<BmWorkerAtt> list = service.getWorkerAttList(o);
|
||||
return getDataTable(list);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return getDataTableError(new ArrayList<>());
|
||||
}
|
||||
|
||||
/**
|
||||
* 考勤统计列表-人员考勤明细
|
||||
* @param o
|
||||
* @return
|
||||
* , requiresPermissions = @RequiresPermissions("system:workerLight:list")
|
||||
*/
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth(isUser = false))
|
||||
@GetMapping("/getWorkerAttListById")
|
||||
@SysLog(title = "单人人员考勤统计", businessType = OperaType.QUERY, logType = 0, module = "施工人员->考勤管理->考勤统计", details = "单人人员考勤统计")
|
||||
public TableDataInfo getWorkerAttListById(BmWorkerAtt o) {
|
||||
try {
|
||||
startPage();
|
||||
List<BmWorkerAtt> list = service.getWorkerAttListById(o);
|
||||
return getDataTable(list);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return getDataTableError(new ArrayList<>());
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import com.bonus.bmw.domain.dto.FileBasicMsgDto;
|
|||
import com.bonus.bmw.domain.dto.WebFileDto;
|
||||
import com.bonus.bmw.domain.vo.BmWorkerContract;
|
||||
import com.bonus.bmw.domain.vo.BmWorkerWageCard;
|
||||
import com.bonus.bmw.domain.vo.PmWorker;
|
||||
import com.bonus.bmw.service.BmWorkerWageCardService;
|
||||
import com.bonus.common.core.utils.json.FastJsonHelper;
|
||||
import com.bonus.common.core.utils.poi.ExcelUtil;
|
||||
|
|
@ -57,11 +58,27 @@ public class BmWorkerWageCardController extends BaseController {
|
|||
return getDataTableError(new ArrayList<>());
|
||||
}
|
||||
|
||||
//, requiresPermissions = @RequiresPermissions("system:wageCard:edit")
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth)
|
||||
@PostMapping("/select/{id}")
|
||||
@SysLog(title = "工资卡管理", businessType = OperaType.QUERY, logType = 0, module = "施工人员->红绿灯管理->工资卡管理", details = "查看工资卡")
|
||||
public AjaxResult select(@PathVariable("id") Integer id) {
|
||||
try {
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
BmWorkerWageCard worker = service.selectByPrimaryKey(id);
|
||||
ajax.put("data", worker);
|
||||
return ajax;
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return error("系统异常,请联系管理员");
|
||||
}
|
||||
|
||||
//, requiresPermissions = @RequiresPermissions("system:wageCard:edit")
|
||||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth)
|
||||
@PostMapping("/edit")
|
||||
@SysLog(title = "工资卡管理", businessType = OperaType.UPDATE, logType = 0, module = "施工人员->红绿灯管理->工资卡管理", details = "修改工资卡")
|
||||
public AjaxResult edit(@RequestParam(value = "files") MultipartFile[] files, @RequestParam(value = "fileMsg") String fileMsg, @RequestParam(value = "params")String params) {
|
||||
public AjaxResult edit(@RequestParam(value = "files",required = false) MultipartFile[] files, @RequestParam(value = "fileMsg",required = false) String fileMsg, @RequestParam(value = "params")String params) {
|
||||
try {
|
||||
List<WebFileDto> listFile = FastJsonHelper.jsonArrStrToBeanList(fileMsg, WebFileDto.class);
|
||||
BmWorkerWageCard o = FastJsonHelper.jsonStrToBean(params, BmWorkerWageCard.class);
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ public class PmWorkerController extends BaseController {
|
|||
@RequiresPermissionsOrInnerAuth(innerAuth = @InnerAuth)
|
||||
@PostMapping("/edit")
|
||||
@SysLog(title = "人员入场管理", businessType = OperaType.UPDATE, logType = 0, module = "施工人员->出入场管理->人员入场管理", details = "修改人员入场")
|
||||
public AjaxResult edit(@RequestParam(value = "files") MultipartFile[] files,@RequestParam(value = "fileMsg") String fileMsg, @RequestParam(value = "params")String params) {
|
||||
public AjaxResult edit(@RequestParam(value = "files",required = false) MultipartFile[] files,@RequestParam(value = "fileMsg",required = false) String fileMsg, @RequestParam(value = "params")String params) {
|
||||
try {
|
||||
List<WebFileDto> listFile = FastJsonHelper.jsonArrStrToBeanList(fileMsg, WebFileDto.class);
|
||||
// 验证对应关系
|
||||
|
|
|
|||
|
|
@ -0,0 +1,158 @@
|
|||
package com.bonus.bmw.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 所有在场人员实时信息表-离场就删除
|
||||
*/
|
||||
@Data
|
||||
public class BmWorkerAtt {
|
||||
|
||||
/**
|
||||
* 工程
|
||||
*/
|
||||
private String proName;
|
||||
|
||||
/**
|
||||
* 工程id
|
||||
*/
|
||||
private Integer proId;
|
||||
|
||||
/**
|
||||
* 班组
|
||||
*/
|
||||
private String teamName;
|
||||
|
||||
/**
|
||||
* 班组id
|
||||
*/
|
||||
private Integer teamId;
|
||||
|
||||
/**
|
||||
* 分包
|
||||
*/
|
||||
private String subName;
|
||||
|
||||
/**
|
||||
* 分包id
|
||||
*/
|
||||
private Integer subId;
|
||||
|
||||
/**
|
||||
* 工种
|
||||
*/
|
||||
private String postName;
|
||||
|
||||
/**
|
||||
* 工种id
|
||||
*/
|
||||
private Integer postId;
|
||||
|
||||
/**
|
||||
* 分公司
|
||||
*/
|
||||
private String subComName;
|
||||
|
||||
/**
|
||||
* 分公司id
|
||||
*/
|
||||
private String subComId;
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 身份证号
|
||||
*/
|
||||
private String idNumber;
|
||||
|
||||
/**
|
||||
* 在建工程数量
|
||||
*/
|
||||
private Integer buildProNum;
|
||||
|
||||
/**
|
||||
* 完工工程数量
|
||||
*/
|
||||
private Integer completedProNum;
|
||||
|
||||
/**
|
||||
* 筹建工程数量
|
||||
*/
|
||||
private Integer preProNum;
|
||||
|
||||
/**
|
||||
* 分包数量
|
||||
*/
|
||||
private Integer subNum;
|
||||
|
||||
/**
|
||||
* 班组数
|
||||
*/
|
||||
private Integer teamNum;
|
||||
|
||||
/**
|
||||
* 在场人员数量
|
||||
*/
|
||||
private Integer einNum;
|
||||
|
||||
/**
|
||||
* 考勤人数
|
||||
*/
|
||||
private Integer attNum;
|
||||
|
||||
/**
|
||||
* 黄灯数量
|
||||
*/
|
||||
private String yellowNum;
|
||||
/**
|
||||
* 绿灯数量
|
||||
*/
|
||||
private String greenNum;
|
||||
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*/
|
||||
private String currentDay;
|
||||
|
||||
/**
|
||||
* 考勤时间
|
||||
*/
|
||||
private String startDate;
|
||||
/**
|
||||
* 考勤时间
|
||||
*/
|
||||
private String endDate;
|
||||
|
||||
private Integer workerId;
|
||||
|
||||
private Integer notAttNum;
|
||||
|
||||
/**
|
||||
* 入场时间
|
||||
*/
|
||||
private String einDay;
|
||||
/**
|
||||
* 考勤日期
|
||||
*/
|
||||
private String attDay;
|
||||
/**
|
||||
* 考勤状态
|
||||
*/
|
||||
private Integer isAtt;
|
||||
/**
|
||||
* 是否补卡
|
||||
*/
|
||||
private String isRepair;
|
||||
/**
|
||||
* 设备名称
|
||||
*/
|
||||
private String deviceName;
|
||||
/**
|
||||
* 考勤时间
|
||||
*/
|
||||
private String attTime;
|
||||
|
||||
}
|
||||
|
|
@ -81,4 +81,14 @@ public class BmWorkerWageCard {
|
|||
* 工资卡照片
|
||||
*/
|
||||
private List<UploadFileVo> files;
|
||||
/**
|
||||
* 是否上传 0未上传 1已上传
|
||||
*/
|
||||
private String isUpload;
|
||||
|
||||
/**
|
||||
* 照片id
|
||||
*/
|
||||
private String delIds;
|
||||
|
||||
}
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
package com.bonus.bmw.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.bonus.common.core.annotation.Excel;
|
||||
import com.bonus.system.api.model.UploadFileVo;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
|
|
@ -179,4 +181,10 @@ public class PmWorker {
|
|||
* 离职时间间隔
|
||||
*/
|
||||
private String daysSinceExit;
|
||||
|
||||
/**
|
||||
* 人脸照片
|
||||
*/
|
||||
private List<UploadFileVo> files;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package com.bonus.bmw.mapper;
|
||||
|
||||
import com.bonus.bmw.domain.vo.BmWorkerAtt;
|
||||
import com.bonus.bmw.domain.vo.BmWorkerLight;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface BmWorkerAttMapper {
|
||||
|
||||
List<BmWorkerAtt> getSubComAttList(BmWorkerAtt o);
|
||||
|
||||
List<BmWorkerAtt> getProAttList(BmWorkerAtt o);
|
||||
|
||||
List<BmWorkerAtt> getWorkerAttList(BmWorkerAtt o);
|
||||
|
||||
List<BmWorkerAtt> getTeamAttList(BmWorkerAtt o);
|
||||
|
||||
/**
|
||||
* 根据查询区间获取人员最新基础信息(班组分包等)
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<BmWorkerAtt> getWorkerEinMsgListByDateRange(BmWorkerAtt o);
|
||||
/**
|
||||
* 根据查询区间获取人员考勤天数
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<BmWorkerAtt> getWorkerAttDayNumByDateRange(BmWorkerAtt o);
|
||||
|
||||
/**
|
||||
* 根据查询区间获取单个人员考勤记录
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<BmWorkerAtt> getWorkerAttListById(BmWorkerAtt o);
|
||||
}
|
||||
|
|
@ -51,4 +51,12 @@ public interface BmWorkerWageCardMapper {
|
|||
int selectWageCardAndContract(Integer id);
|
||||
|
||||
void updateEinMsgByWorkerId(@Param("workerId") Integer id,@Param("lightStatus") Integer lightStatus,@Param("lightDate") String lightDate);
|
||||
|
||||
/**
|
||||
* select by primary key
|
||||
*
|
||||
* @param id primary key
|
||||
* @return object by id
|
||||
*/
|
||||
BmWorkerWageCard selectByPrimaryKey(Integer id);
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package com.bonus.bmw.service;
|
||||
|
||||
import com.bonus.bmw.domain.vo.BmWorkerAtt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BmWorkerAttService {
|
||||
|
||||
/**
|
||||
* 分公司考勤统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<BmWorkerAtt> getSubComAttList(BmWorkerAtt o);
|
||||
|
||||
/**
|
||||
* 工程考勤统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<BmWorkerAtt> getProAttList(BmWorkerAtt o);
|
||||
|
||||
/**
|
||||
* 人员考勤统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<BmWorkerAtt> getWorkerAttList(BmWorkerAtt o);
|
||||
|
||||
/**
|
||||
* 班组考勤统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<BmWorkerAtt> getTeamAttList(BmWorkerAtt o);
|
||||
|
||||
/**
|
||||
* 单人人员考勤统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
List<BmWorkerAtt> getWorkerAttListById(BmWorkerAtt o);
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package com.bonus.bmw.service;
|
|||
|
||||
import com.bonus.bmw.domain.dto.WebFileDto;
|
||||
import com.bonus.bmw.domain.vo.BmWorkerWageCard;
|
||||
import com.bonus.bmw.domain.vo.PmWorker;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -56,5 +57,12 @@ public interface BmWorkerWageCardService {
|
|||
* @return
|
||||
*/
|
||||
AjaxResult lookFileByPrimaryKey(Integer id);
|
||||
|
||||
/**
|
||||
* 查询工资卡信息
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
BmWorkerWageCard selectByPrimaryKey(Integer id);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,134 @@
|
|||
package com.bonus.bmw.service.impl;
|
||||
|
||||
import com.bonus.bmw.domain.vo.BmWorkerAtt;
|
||||
import com.bonus.bmw.mapper.BmWorkerAttMapper;
|
||||
import com.bonus.bmw.mapper.BmWorkerAttMapper;
|
||||
import com.bonus.bmw.service.BmWorkerAttService;
|
||||
import com.bonus.bmw.service.BmWorkerAttService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class BmWorkerAttServiceImpl implements BmWorkerAttService {
|
||||
|
||||
@Autowired
|
||||
private BmWorkerAttMapper mapper;
|
||||
|
||||
/**
|
||||
* 分公司考勤统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<BmWorkerAtt> getSubComAttList(BmWorkerAtt o) {
|
||||
return mapper.getSubComAttList(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BmWorkerAtt> getProAttList(BmWorkerAtt o) {
|
||||
return mapper.getProAttList(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BmWorkerAtt> getTeamAttList(BmWorkerAtt o) {
|
||||
return mapper.getTeamAttList(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BmWorkerAtt> getWorkerAttListById(BmWorkerAtt o) {
|
||||
List<BmWorkerAtt> list = mapper.getWorkerAttListById(o);
|
||||
// 如果列表为空,给它一个空的列表
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
}
|
||||
// 如果没有指定日期范围,则直接返回原始列表
|
||||
if (o.getStartDate() == null || o.getEndDate() == null) {
|
||||
return list;
|
||||
}
|
||||
LocalDate startDate = LocalDate.parse(o.getStartDate());
|
||||
LocalDate endDate = LocalDate.parse(o.getEndDate());
|
||||
|
||||
// 生成日期范围内的所有日期 (Java 8 兼容方式)
|
||||
List<LocalDate> dateRange = new ArrayList<>();
|
||||
LocalDate currentDate = startDate;
|
||||
while (!currentDate.isAfter(endDate)) {
|
||||
dateRange.add(currentDate);
|
||||
currentDate = currentDate.plusDays(1);
|
||||
}
|
||||
|
||||
// 补全缺失的日期
|
||||
Map<LocalDate, BmWorkerAtt> existingDataMap = list.stream()
|
||||
.filter(item -> item.getEinDay() != null)
|
||||
.collect(Collectors.toMap(
|
||||
item -> LocalDate.parse(item.getEinDay()),
|
||||
item -> item,
|
||||
(existing, replacement) -> existing
|
||||
));
|
||||
|
||||
// List<BmWorkerAtt> finalList = list;
|
||||
return dateRange.stream()
|
||||
.map(date -> {
|
||||
if (existingDataMap.containsKey(date)) {
|
||||
return existingDataMap.get(date);
|
||||
} else {
|
||||
// 创建缺失日期的默认数据
|
||||
BmWorkerAtt defaultAtt = new BmWorkerAtt();
|
||||
// 复制必要字段
|
||||
// if (!finalList.isEmpty()) {
|
||||
// BmWorkerAtt source = finalList.get(0);
|
||||
// defaultAtt.setWorkerId(source.getWorkerId());
|
||||
// }
|
||||
defaultAtt.setEinDay(date.toString());
|
||||
defaultAtt.setIsAtt(3);
|
||||
return defaultAtt;
|
||||
}
|
||||
})
|
||||
.sorted((a, b) -> b.getEinDay().compareTo(a.getEinDay())) // 倒序排序
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 人员考勤统计
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<BmWorkerAtt> getWorkerAttList(BmWorkerAtt o) {
|
||||
//1.查询 工程 班组 时间区间 姓名 身份证号码
|
||||
//根据区间产讯处最新的人员基础数据
|
||||
List<BmWorkerAtt> list = mapper.getWorkerEinMsgListByDateRange(o);
|
||||
//查询考勤天数 根据 时间区间 工程 班组 查询
|
||||
List<BmWorkerAtt> listAtt = mapper.getWorkerAttDayNumByDateRange(o);
|
||||
// 1. 安全地将 listAtt 转为 Map<workerId, attNum>
|
||||
Map<Integer, Integer> attNumMap = listAtt.stream()
|
||||
.filter(Objects::nonNull) // 过滤 null 对象
|
||||
.filter(item -> item.getWorkerId() != null) // 确保 workerId 不为 null
|
||||
.collect(Collectors.toMap(
|
||||
BmWorkerAtt::getWorkerId, // key: workerId
|
||||
BmWorkerAtt::getAttNum, // value: attNum
|
||||
(existing, replacement) -> replacement // 如果 key 重复,使用新的值(后者)
|
||||
));
|
||||
long daysBetween = getDaysBetween(o.getStartDate(), o.getEndDate());
|
||||
// 2. 遍历 list,根据 workerId 填充 attNum
|
||||
list.forEach(item -> {
|
||||
Integer attNum = attNumMap.get(item.getWorkerId());
|
||||
item.setAttNum(attNum != null ? attNum : 0); // 未匹配上则设为 0
|
||||
item.setNotAttNum((int) (daysBetween - item.getAttNum()));
|
||||
});
|
||||
return list;
|
||||
}
|
||||
|
||||
public static long getDaysBetween(String startDateStr, String endDateStr) {
|
||||
LocalDate start = LocalDate.parse(startDateStr);
|
||||
LocalDate end = LocalDate.parse(endDateStr);
|
||||
// 计算两个日期之间的天数差(包含边界)
|
||||
return ChronoUnit.DAYS.between(start, end) + 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -102,7 +102,12 @@ public class BmWorkerContractServiceImpl implements BmWorkerContractService{
|
|||
|
||||
@Override
|
||||
public BmWorkerContract selectContractListByWorkerIdAndValid(BmWorkerContract o) {
|
||||
return mapper.selectContractListByWorkerIdAndValid(o);
|
||||
BmWorkerContract workerContract = mapper.selectContractListByWorkerIdAndValid(o);
|
||||
if(workerContract != null){
|
||||
List<UploadFileVo> contractFile = fileUploadUtils.getFileList("", workerContract.getId().toString(), Constants.FILE_UPLOAD_CONTRACT, "");
|
||||
workerContract.setFiles(contractFile);
|
||||
}
|
||||
return workerContract;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
|||
import com.bonus.bmw.domain.dto.FileBasicMsgDto;
|
||||
import com.bonus.bmw.domain.dto.WebFileDto;
|
||||
import com.bonus.bmw.domain.vo.BmWorkerWageCard;
|
||||
import com.bonus.bmw.domain.vo.PmWorker;
|
||||
import com.bonus.bmw.mapper.BmWorkerWageCardMapper;
|
||||
import com.bonus.bmw.service.BmWorkerWageCardService;
|
||||
import com.bonus.common.core.constant.Constants;
|
||||
|
|
@ -39,17 +40,23 @@ public class BmWorkerWageCardServiceImpl implements BmWorkerWageCardService {
|
|||
public int updateByPrimaryKey(BmWorkerWageCard record, List<WebFileDto> listFile) {
|
||||
//存在则删除后新增,不存在则新增
|
||||
if(record.getId() != null){
|
||||
log.info("存在则删除后新增,不存在则新增");
|
||||
//删除工资卡图片 删除minio文件
|
||||
fileUploadUtils.delFileListById("", record.getId().toString(), Constants.FILE_UPLOAD_WAGE_CARD,"");
|
||||
//组装数据
|
||||
MultipartFile[] workerFiles = new MultipartFile[listFile.size()];
|
||||
String[] type = new String[listFile.size()];
|
||||
for (int i = 0; i < listFile.size(); i++) {
|
||||
workerFiles[i] = listFile.get(i).getFile();
|
||||
type[i] = listFile.get(i).getType();
|
||||
if(record.getDelIds() != null){
|
||||
//修改时删除部分图片
|
||||
String[] split = record.getDelIds().split(",");
|
||||
for (String s : split) {
|
||||
fileUploadUtils.delFileListById(s,"",Constants.FILE_UPLOAD_WAGE_CARD, "");
|
||||
}
|
||||
}
|
||||
if(!listFile.isEmpty()){
|
||||
//组装数据
|
||||
MultipartFile[] workerFiles = new MultipartFile[listFile.size()];
|
||||
String[] type = new String[listFile.size()];
|
||||
for (int i = 0; i < listFile.size(); i++) {
|
||||
workerFiles[i] = listFile.get(i).getFile();
|
||||
type[i] = listFile.get(i).getType();
|
||||
}
|
||||
List<UploadFileVo> uploadFileVos = fileUploadUtils.uploadFile(workerFiles, Constants.FILE_UPLOAD_WAGE_CARD, record.getId().toString(), type,"", "");
|
||||
}
|
||||
List<UploadFileVo> uploadFileVos = fileUploadUtils.uploadFile(workerFiles, Constants.FILE_UPLOAD_WAGE_CARD, record.getId().toString(), type,"", "");
|
||||
updateByPrimaryKeySelective(record);
|
||||
return 1;
|
||||
}else{
|
||||
|
|
@ -97,7 +104,11 @@ public class BmWorkerWageCardServiceImpl implements BmWorkerWageCardService {
|
|||
|
||||
@Override
|
||||
public BmWorkerWageCard selectWageCardByWorkerId(BmWorkerWageCard o) {
|
||||
return mapper.selectWageCardByWorkerId(o);
|
||||
BmWorkerWageCard bmWorkerWageCard = mapper.selectWageCardByWorkerId(o);
|
||||
if(bmWorkerWageCard != null){
|
||||
bmWorkerWageCard.setFiles(fileUploadUtils.getFileList("", bmWorkerWageCard.getId().toString(), Constants.FILE_UPLOAD_WAGE_CARD, ""));
|
||||
}
|
||||
return bmWorkerWageCard;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -136,6 +147,16 @@ public class BmWorkerWageCardServiceImpl implements BmWorkerWageCardService {
|
|||
return AjaxResult.success(contractFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BmWorkerWageCard selectByPrimaryKey(Integer id) {
|
||||
BmWorkerWageCard wageCard= mapper.selectByPrimaryKey(id);
|
||||
if(wageCard != null){
|
||||
List<UploadFileVo> contractFile = fileUploadUtils.getFileList("", wageCard.getId().toString(), Constants.FILE_UPLOAD_WAGE_CARD, "");
|
||||
wageCard.setFiles(contractFile);
|
||||
}
|
||||
return wageCard;
|
||||
}
|
||||
|
||||
private int selectWageCardAndContract(Integer id) {
|
||||
return mapper.selectWageCardAndContract(id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,8 +58,8 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
|||
record.setCreateUser(SecurityUtils.getUsername());
|
||||
int insert = mapper.insert(record);
|
||||
if(insert > 0){
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "人脸".equals(data.getName())).collect(Collectors.toList());
|
||||
//组装数据
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "faceImg".equals(data.getName())).collect(Collectors.toList());
|
||||
//组装数据
|
||||
MultipartFile[] workerFiles = new MultipartFile[collect.size()];
|
||||
String[] type = new String[collect.size()];
|
||||
for (int i = 0; i < collect.size(); i++) {
|
||||
|
|
@ -98,13 +98,13 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
|||
if(bmWorkerWageCard != null && StringUtil.isNotEmpty(bmWorkerWageCard.getBankCardCode())){
|
||||
bmWorkerWageCard.setCreateUser(SecurityUtils.getUsername());
|
||||
bmWorkerWageCard.setWorkerId(record.getId());
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "工资卡".equals(data.getName())).collect(Collectors.toList());
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "wageCard".equals(data.getName())).collect(Collectors.toList());
|
||||
wageCardService.updateByPrimaryKey(bmWorkerWageCard,collect);
|
||||
}
|
||||
if(bmWorkerContract != null && StringUtil.isNotEmpty(bmWorkerContract.getContractCode())){
|
||||
bmWorkerContract.setCreateUser(SecurityUtils.getUsername());
|
||||
bmWorkerContract.setWorkerId(record.getId());
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "合同".equals(data.getName())).collect(Collectors.toList());
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "contract".equals(data.getName())).collect(Collectors.toList());
|
||||
contractService.updateByPrimaryKey(bmWorkerContract,collect);
|
||||
record.setContractId(bmWorkerContract.getId());
|
||||
}
|
||||
|
|
@ -114,6 +114,9 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
|||
public PmWorker selectByPrimaryKey(Integer id) {
|
||||
//人员数据
|
||||
PmWorker worker = mapper.selectByPrimaryKey(id);
|
||||
if(worker != null){
|
||||
worker.setFiles(fileUploadUtils.getFileList("", worker.getId().toString(), Constants.FILE_UPLOAD_WORKER, ""));
|
||||
}
|
||||
//查询工资卡 数据
|
||||
BmWorkerWageCard wageCard = new BmWorkerWageCard();
|
||||
wageCard.setWorkerId(id);
|
||||
|
|
@ -140,6 +143,20 @@ public class PmWorkerServiceImpl implements PmWorkerService{
|
|||
//更新基础数据
|
||||
record.setUpdateUser(SecurityUtils.getUsername());
|
||||
int update = mapper.updateByPrimaryKey(record);
|
||||
//人脸照片是否修改
|
||||
List<WebFileDto> collect = fileMsg.stream().filter(data -> "faceImg".equals(data.getName())).collect(Collectors.toList());
|
||||
if(!collect.isEmpty()){
|
||||
String s = fileUploadUtils.delFileListById("", record.getId().toString(), Constants.FILE_UPLOAD_WORKER, "");
|
||||
//组装数据
|
||||
MultipartFile[] workerFiles = new MultipartFile[collect.size()];
|
||||
String[] type = new String[collect.size()];
|
||||
for (int i = 0; i < collect.size(); i++) {
|
||||
workerFiles[i] = collect.get(i).getFile();
|
||||
type[i] = collect.get(i).getType();
|
||||
}
|
||||
//人脸的数据添加
|
||||
List<UploadFileVo> uploadFileVos = fileUploadUtils.uploadFile(workerFiles, Constants.FILE_UPLOAD_WORKER, record.getId().toString(), type,"", "");
|
||||
}
|
||||
//更新入场记录最新记录标识 再入场,清除最新标识
|
||||
mapper.updateEinRecordLast(record.getId());
|
||||
//已经入过场了
|
||||
|
|
|
|||
|
|
@ -0,0 +1,189 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.bmw.mapper.BmWorkerAttMapper">
|
||||
<resultMap id="BaseResultMap" type="com.bonus.bmw.domain.vo.BmWorkerAtt">
|
||||
<result column="sub_company_name" property="subComName" />
|
||||
<result column="sub_com_id" property="subComId" />
|
||||
<result column="pro_name" property="proName" />
|
||||
<result column="pro_id" property="proId" />
|
||||
<result column="team_name" property="teamName" />
|
||||
<result column="team_id" property="teamId" />
|
||||
<result column="sub_name" property="subName" />
|
||||
<result column="worker_id" property="workerId" />
|
||||
<result column="name" property="name" />
|
||||
<result column="id_number" property="idNumber" />
|
||||
<result column="buildProNum" property="buildProNum" />
|
||||
<result column="preProNum" property="preProNum" />
|
||||
<result column="completedProNum" property="completedProNum" />
|
||||
<result column="subNum" property="subNum" />
|
||||
<result column="teamNum" property="teamNum" />
|
||||
<result column="einNum" property="einNum" />
|
||||
<result column="attNum" property="attNum" />
|
||||
<result column="ein_day" property="einDay" />
|
||||
<result column="att_day" property="attDay" />
|
||||
<result column="is_att" property="isAtt" />
|
||||
<result column="is_repair" property="isRepair" />
|
||||
<result column="device_name" property="deviceName" />
|
||||
<result column="att_time" property="attTime" />
|
||||
|
||||
</resultMap>
|
||||
|
||||
<select id="getSubComAttList" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
psc.id AS sub_com_id,
|
||||
psc.sub_company_name,
|
||||
COUNT(IF(pp.pro_status = '在建', 1, NULL)) AS buildProNum,
|
||||
COUNT(IF(pp.pro_status = '筹建', 1, NULL)) AS preProNum,
|
||||
COUNT(IF(pp.pro_status = '完工', 1, NULL)) AS completedProNum,
|
||||
COUNT(DISTINCT bsc.sub_id) AS subNum,
|
||||
COUNT(DISTINCT bstc.team_id) AS teamNum,
|
||||
COUNT(DISTINCT bwem.worker_id) AS einNum,
|
||||
COUNT(DISTINCT bap.worker_id) AS attNum
|
||||
FROM
|
||||
pm_sub_company psc
|
||||
LEFT JOIN pm_project pp ON psc.id = pp.sub_com_id
|
||||
AND pp.is_active = 1
|
||||
LEFT JOIN bm_sub_contract bsc ON bsc.pro_id = pp.id
|
||||
AND bsc.is_active = 1
|
||||
LEFT JOIN pm_sub_team_contract bstc ON bstc.sub_id = bsc.sub_id
|
||||
AND bsc.pro_id = bstc.pro_id
|
||||
AND bstc.is_active = 1
|
||||
LEFT JOIN bm_worker_ein_msg bwem ON pp.id = bwem.pro_id
|
||||
LEFT JOIN bm_att_person bap ON bap.pro_id = pp.id AND bap.att_day = #{currentDay}
|
||||
WHERE
|
||||
psc.is_active = 1
|
||||
GROUP BY
|
||||
psc.id
|
||||
</select>
|
||||
|
||||
<select id="getProAttList" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
pp.id as pro_id,
|
||||
pp.pro_name,
|
||||
ps.sub_name,
|
||||
pst.id as team_id,
|
||||
pst.team_name,
|
||||
COUNT(DISTINCT bwem.worker_id) AS einNum,
|
||||
COUNT(DISTINCT bap.worker_id) AS attNum
|
||||
FROM
|
||||
pm_project pp
|
||||
LEFT JOIN bm_sub_contract bsc ON bsc.pro_id = pp.id
|
||||
AND bsc.is_active = 1
|
||||
LEFT JOIN pm_sub ps ON ps.id = bsc.sub_id
|
||||
LEFT JOIN pm_sub_team_contract bstc ON bstc.sub_id = bsc.sub_id
|
||||
AND bsc.pro_id = bstc.pro_id
|
||||
AND bstc.is_active = 1
|
||||
LEFT JOIN pm_sub_team pst ON pst.id = bstc.team_id
|
||||
LEFT JOIN bm_worker_ein_msg bwem ON pp.id = bwem.pro_id
|
||||
LEFT JOIN bm_att_person bap ON bap.pro_id = pp.id AND bap.att_day = #{currentDay}
|
||||
WHERE
|
||||
pp.id = #{proId}
|
||||
AND pp.is_active = 1
|
||||
GROUP BY
|
||||
bstc.id
|
||||
</select>
|
||||
|
||||
<select id="getTeamAttList" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
pp.id as pro_id,
|
||||
pp.pro_name,
|
||||
ps.sub_name,
|
||||
pst.id as team_id,
|
||||
pst.team_name,
|
||||
COUNT(DISTINCT bwem.worker_id) AS einNum,
|
||||
COUNT(DISTINCT bap.worker_id) AS attNum
|
||||
FROM
|
||||
pm_project pp
|
||||
LEFT JOIN bm_sub_contract bsc ON bsc.pro_id = pp.id
|
||||
AND bsc.is_active = 1
|
||||
LEFT JOIN pm_sub ps ON ps.id = bsc.sub_id
|
||||
LEFT JOIN pm_sub_team_contract bstc ON bstc.sub_id = bsc.sub_id
|
||||
AND bsc.pro_id = bstc.pro_id
|
||||
AND bstc.is_active = 1
|
||||
LEFT JOIN pm_sub_team pst ON pst.id = bstc.team_id
|
||||
LEFT JOIN bm_worker_ein_msg bwem ON pp.id = bwem.pro_id
|
||||
LEFT JOIN bm_att_person bap ON bap.pro_id = pp.id AND bap.att_day = #{currentDay}
|
||||
WHERE
|
||||
pp.id = #{proId}
|
||||
AND pp.is_active = 1
|
||||
GROUP BY
|
||||
bstc.id
|
||||
</select>
|
||||
|
||||
<select id="getWorkerEinMsgListByDateRange" resultMap="BaseResultMap">
|
||||
|
||||
SELECT
|
||||
bwedr.worker_id,
|
||||
bwedr.id_number,
|
||||
bwedr.name,
|
||||
bwedr.pro_id,
|
||||
bwedr.team_id,
|
||||
bwedr.sub_id
|
||||
FROM bm_worker_ein_day_record bwedr
|
||||
INNER JOIN (
|
||||
-- 子查询:找出每个 worker_id 在 2025-08-01 至 2025-08-11 区间内的最后在场日期
|
||||
SELECT
|
||||
worker_id,
|
||||
MAX(ein_day) AS max_current_day
|
||||
FROM bm_worker_ein_day_record
|
||||
WHERE ein_day >= #{startDate}
|
||||
AND ein_day <= #{endDate}
|
||||
and pro_id = #{proId}
|
||||
and team_id = #{teamId}
|
||||
GROUP BY worker_id
|
||||
) latest ON bwedr.worker_id = latest.worker_id
|
||||
AND bwedr.ein_day = latest.max_current_day
|
||||
<where>
|
||||
<if test="name != null and name != ''">
|
||||
and bwedr.name = #{name}
|
||||
</if>
|
||||
<if test="idNumber != null and idNumber != ''">
|
||||
and bwedr.id_number = #{idNumber}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY bwedr.worker_id
|
||||
</select>
|
||||
|
||||
<select id="getWorkerAttDayNumByDateRange" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
a.worker_id,
|
||||
COUNT(*) AS attNum
|
||||
FROM
|
||||
bm_att_person a
|
||||
INNER JOIN bm_worker_ein_day_record e ON a.worker_id = e.worker_id
|
||||
AND a.att_day = e.ein_day
|
||||
WHERE
|
||||
a.att_day >= #{startDate}
|
||||
AND a.att_day <= #{endDate}
|
||||
GROUP BY
|
||||
a.worker_id
|
||||
</select>
|
||||
|
||||
<select id="getWorkerAttListById" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
bwedr.worker_id,
|
||||
bwedr.pro_name,
|
||||
bwedr.ein_day,
|
||||
bap.att_day,
|
||||
bap.att_time,
|
||||
bap.dev_name as device_name,
|
||||
bap.is_repair,
|
||||
IF(bap.att_day is null,0,1) is_att
|
||||
FROM
|
||||
bm_worker_ein_day_record bwedr
|
||||
LEFT JOIN bm_att_person bap ON bwedr.worker_id = bap.worker_id
|
||||
AND bap.att_day = bwedr.ein_day
|
||||
WHERE
|
||||
bwedr.ein_day >= #{startDate}
|
||||
AND bwedr.ein_day <= #{endDate}
|
||||
<if test="teamId != null and teamId != ''">
|
||||
and bwedr.team_id = #{teamId}
|
||||
</if>
|
||||
<if test="proId != null and proId != ''">
|
||||
and bwedr.pro_id = #{proId}
|
||||
</if>
|
||||
GROUP BY
|
||||
bwedr.worker_id
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
<result column="phone" property="phone" />
|
||||
<result column="name" property="name" />
|
||||
<result column="id_number" property="idNumber" />
|
||||
<result column="is_upload" property="isUpload" />
|
||||
</resultMap>
|
||||
<sql id="Base_Column_List">
|
||||
id, worker_id, bank_card_code, bank_name, bank_branch_name, create_user, update_user
|
||||
|
|
@ -38,7 +39,8 @@
|
|||
bwwc.bank_card_code,
|
||||
bwwc.bank_name,
|
||||
bwwc.bank_branch_name,
|
||||
bwwc.update_time
|
||||
bwwc.update_time,
|
||||
if(bwwc.id is not null, 1, 0) AS is_upload
|
||||
FROM
|
||||
pm_worker pw
|
||||
LEFT JOIN `bm_worker_wage_card` bwwc ON pw.id = bwwc.worker_id
|
||||
|
|
@ -60,6 +62,12 @@
|
|||
<if test="workerId != null and workerId != ''">
|
||||
AND bwwc.worker_id LIKE CONCAT('%', #{workerId}, '%')
|
||||
</if>
|
||||
<if test=' isUpload == 1'>
|
||||
AND bwwc.id is not null
|
||||
</if>
|
||||
<if test=' isUpload == 0'>
|
||||
AND bwwc.id is null
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="selectWageCardByWorkerId" resultMap="BaseResultMap">
|
||||
|
|
@ -125,4 +133,16 @@
|
|||
set light_status = #{lightStatus},yellow_date = #{lightDate}
|
||||
where worker_id = #{workerId}
|
||||
</update>
|
||||
|
||||
<select id="selectByPrimaryKey" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
bwwc.id,
|
||||
bwwc.bank_card_code,
|
||||
bwwc.bank_name,
|
||||
bwwc.bank_branch_name
|
||||
FROM
|
||||
`bm_worker_wage_card` bwwc
|
||||
WHERE
|
||||
bwwc.id = #{id}
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue