黑名单导入时间问题

未打卡可直接离场
This commit is contained in:
方亮 2025-12-26 17:09:00 +08:00
parent 99e963a22f
commit f59ddd32c8
5 changed files with 49 additions and 4 deletions

View File

@ -60,4 +60,6 @@ public interface PmWorkerExitMapper {
List<PmWorker> selectWorkListByProId(PmWorkerDto o);
List<PmWorker> getWorkerListByPhone(PmWorkerDto o);
int selectAttByEinTimeAfter(@Param("workerId") Integer workerId,@Param("proId") Integer proId);
}

View File

@ -21,9 +21,12 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.validation.Validator;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
import java.util.List;
import java.util.Locale;
@Service
public class BmWorkerBlackServiceImpl implements BmWorkerBlackService{
@ -104,6 +107,8 @@ public class BmWorkerBlackServiceImpl implements BmWorkerBlackService{
continue;
}
try {
worker.setStartTime(convertToString(worker.getStartTime()));
worker.setEndTime(convertToString(worker.getEndTime()));
// 验证是否存在这个用户
// 添加员工时判断员工编号是否已存在
BmWorkerBlack w = mapper.getWorkerBlackByNumber(worker.getIdNumber());
@ -185,5 +190,26 @@ public class BmWorkerBlackServiceImpl implements BmWorkerBlackService{
}
public static String convertToString(String dateStr) {
if (dateStr == null || dateStr.trim().isEmpty()) {
return null; // 或返回空字符串 ""
}
if (!dateStr.contains("CST")) {
return dateStr;
}
// CST 替换为明确的时区偏移中国标准时间 = UTC+8
String fixed = dateStr.replace("CST", "GMT+08:00");
// 构建解析格式注意必须用英文 Locale
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("EEE MMM dd HH:mm:ss ")
.appendZoneOrOffsetId()
.appendPattern(" yyyy")
.toFormatter(Locale.ENGLISH);
// 解析为 ZonedDateTime
ZonedDateTime zdt = ZonedDateTime.parse(fixed, formatter);
// 提取 LocalDate 并格式化为 "yyyy-MM-dd"
return zdt.toLocalDate().toString(); // toString() 默认就是 "2023-01-01"
}
}

View File

@ -60,7 +60,9 @@ public class PmWorkerExitServiceImpl implements PmWorkerExitService {
Boolean isShangHai = mapper.getProLocationByProId(record.getProId());
//查询合同工资卡是否齐全
List<MapBeanVo> list = mapper.getContractIdAndWageCard(record.getWorkerId(),record.getProId());
if(Integer.parseInt(list.get(0).getValue())>0 && Integer.parseInt(list.get(1).getValue())>0){
//没打过卡可以直接离场 20251226
int x = mapper.selectAttByEinTimeAfter(record.getWorkerId(),record.getProId());
if(x ==0 || (Integer.parseInt(list.get(0).getValue())>0 && Integer.parseInt(list.get(1).getValue())>0)){
contractService.deleteByWorkerId(record.getWorkerId(),record.getProId());
//查询是不是上海内最后一个在场工程一定要放在删除实时在场前查
int number = mapper.getEinProNum(record.getWorkerId());
@ -124,7 +126,9 @@ public class PmWorkerExitServiceImpl implements PmWorkerExitService {
for (PmWorkerDto bean : list) {
//查询合同工资卡是否齐全
List<MapBeanVo> listData = mapper.getContractIdAndWageCard(bean.getWorkerId(),bean.getProId());
if("1".equals(listData.get(0).getValue()) && "1".equals(listData.get(1).getValue())) {
//没打过卡可以直接离场 20251226
int x = mapper.selectAttByEinTimeAfter(bean.getWorkerId(),bean.getProId());
if(x==0 || ("1".equals(listData.get(0).getValue()) && "1".equals(listData.get(1).getValue()))) {
//查询是否上海外
Boolean isShangHai = mapper.getProLocationByProId(bean.getProId());
int i = contractService.deleteByWorkerId(bean.getWorkerId(),bean.getProId());

View File

@ -27,7 +27,7 @@
kul.user_phone as userPhoto,
kul.dev_code as devCode,kul.update_time updateTime
from kq_user_list kul
left join pm_worker pw on pw.id=kul.user_id
LEFT JOIN pm_worker pw ON pw.id = kul.user_id and pw.name = kul.user_name
where kul.dev_code = #{deviceCode}
<if test="isOnDataBase!=null and isOnDataBase!=''">
<if test='isOnDataBase=="1"' >
@ -43,7 +43,7 @@
<if test="userId!=null and userId!=''">
and kul.user_id=#{userId}
</if>
order by CAST(kul.user_id AS SIGNED) asc
order by CAST(kul.user_id AS SIGNED) asc
</select>
<select id="getProDeviceWorker" resultType="com.bonus.bmw.domain.vo.KqCmdBean">

View File

@ -263,4 +263,17 @@
AND bwepr.is_upload_file = 0 and pp.is_shanghai = 0
and if(is_upload_file=0,DATEDIFF(NOW(), exit_time),0) &lt; 31
</select>
<select id="selectAttByEinTimeAfter" resultType="int">
SELECT
count(1)
FROM
bm_worker_ein_msg bwem
INNER JOIN bm_att_person bap ON bap.worker_id
AND bap.pro_id = bwem.pro_id
WHERE
bwem.worker_id = #{workerId}
AND bwem.pro_id = #{proId}
AND DATE_FORMAT(bwem.ein_time, '%Y-%m-%d') &lt;= bap.att_day
</select>
</mapper>