提交 51ca0d23 authored 作者: 窦馨雨's avatar 窦馨雨

合并分支 'dxy' 到 'qa'

Dxy 查看合并请求 !8
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* *
...@@ -53,7 +54,25 @@ public class TemporaryActivityReportedDO implements Serializable { ...@@ -53,7 +54,25 @@ public class TemporaryActivityReportedDO implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String date; private String date;
/** /**
* 活动品项:老品/黑鸭/散称 * 活动品项:老品/黑鸭/散称/礼盒
*/ */
private String prdClass; private String prdClass;
// 促销员联系电话
private String temporaryPhone;
// 执行方式
private String executeModePlan;
// 配发试吃品是否有黑鸭口味
private String hasBlackDuckFlavor;
// 配发黑鸭试吃品(根)
private Integer blackDuckTastingNum;
// 配发卤香试吃品(根)
private Integer braisedTastingNum;
// 配发赠品个数
private Integer giftNum;
// 推广活动销额(元)
private BigDecimal promotionSales;
// 黑鸭销售(元)
private BigDecimal blackDuckSales;
// 礼盒销售(元)
private BigDecimal giftBoxSales;
} }
...@@ -99,48 +99,67 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -99,48 +99,67 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
row.add("0"); row.add("0");
row.add(rdo.getId()); row.add(rdo.getId());
row.add(rdo.getTemporaryId() + "-" + rdo.getTemporaryName()); row.add(rdo.getTemporaryId() + "-" + rdo.getTemporaryName());
//2026-1 新增 : 促销员电话列 D
row.add(ObjectUtil.isEmpty(rdo.getTemporaryPhone()) ? "" : rdo.getTemporaryPhone());
// 月份 // 月份
String createDate = rdo.getCreateDate(); String createDate = rdo.getCreateDate();
String[] dateArr = createDate.split("-"); String[] dateArr = createDate.split("-");
// 战区 // 战区 E
row.add(rdo.getOrgName()); row.add(rdo.getOrgName());
// 城市经理 // 城市经理 F
row.add(rdo.getManageName()); row.add(rdo.getManageName());
// 执行城市 // 执行城市 G
row.add(rdo.getCity()); row.add(rdo.getCity());
// 执行日期 // 执行日期 H
row.add(dateArr[1] + "月" + dateArr[2] + "日"); row.add(dateArr[1] + "月" + dateArr[2] + "日");
// 场次 // 场次 I
row.add("1"); row.add("1");
// 经销商 // 经销商 J
row.add(rdo.getDealerName()); row.add(rdo.getDealerName());
// 系统名称 // 系统名称 K
row.add(rdo.getLineName()); row.add(rdo.getLineName());
// 勤策门店编码 // 勤策门店编码 L
row.add(clockDo.getQinceStoreCode()); row.add(clockDo.getQinceStoreCode());
// 门店名称 // 门店名称 M
row.add(rdo.getStoreName()); row.add(rdo.getStoreName());
// 活动形式 // 活动形式 N
row.add(rdo.getActivityPattern()); row.add(rdo.getActivityPattern());
// 活动品类
// 执行方式 O
row.add(rdo.getExecuteModePlan());
// 活动品类 P
row.add(rdo.getPrdClass()); row.add(rdo.getPrdClass());
// 是否提交审核 // 是否提交审核 Q
row.add("APPROVED".equals(rdo.getApproveStatus()) ? "已审核" : "未提交"); row.add("APPROVED".equals(rdo.getApproveStatus()) ? "已审核" : "未提交");
// 推广活动销额(元) O //配发试吃品是否有黑鸭口味 R
row.add("0"); row.add("1".equals(rdo.getHasBlackDuckFlavor()) ? "有" : "无");
// 配发黑鸭试吃品(根) S
row.add(rdo.getBlackDuckTastingNum());
// 配发苦相试吃品(根) T
row.add(rdo.getBraisedTastingNum());
// 配发赠品个数 U
row.add(rdo.getGiftNum());
// 推广活动销额(元) V
row.add(rdo.getPromotionSales());
// 黑鸭销售 (元)W
row.add(rdo.getBlackDuckSales());
// 礼盒+礼袋销量(个)X
row.add(rdo.getGiftBoxSales());
// 上传文本数据 // 上传文本数据
addactivityDataRow(row); addactivityDataRow(row);
...@@ -153,18 +172,14 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -153,18 +172,14 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
String rangFormat = sheetInfoD.getSheetId() + "!%s" + rowNumStr + ":%s" + rowNumStr; String rangFormat = sheetInfoD.getSheetId() + "!%s" + rowNumStr + ":%s" + rowNumStr;
// T-AB: 上班打卡时间/地点 午休下班打卡时间/地点 午休上班打卡时间/地点 下班打卡时间/地点 // Y-AA: 上班打卡时间/地点 午休下班打卡时间/地点 午休上班打卡时间/地点 下班打卡时间/地点
if (Objects.nonNull(clockDo)) { if (Objects.nonNull(clockDo)) {
List<Object> rowClockData = new ArrayList<>(); List<Object> rowClockData = new ArrayList<>();
if (Objects.nonNull(clockDo.getClockInTime()) && Objects.nonNull(clockDo.getClockOutTime())) { // 调用新的时长计算方法(两段相加,缺卡则按上下班总时长)
long tl = DateUtil.between(clockDo.getClockInTime(), clockDo.getClockOutTime(), DateUnit.MINUTE); String workDuration = calculateWorkDuration(clockDo);
long hour = tl / 60; rowClockData.add(workDuration);
long minute = tl % 60;
rowClockData.add(hour + "." + minute); // 打卡时间(AA列)
} else {
rowClockData.add("0");
}
// 打卡时间
StringBuilder timeSb = new StringBuilder(); StringBuilder timeSb = new StringBuilder();
if (null != clockDo.getClockInTime()) { if (null != clockDo.getClockInTime()) {
timeSb.append("上班卡:").append(this.formatDateTime(clockDo.getClockInTime())); timeSb.append("上班卡:").append(this.formatDateTime(clockDo.getClockInTime()));
...@@ -180,7 +195,7 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -180,7 +195,7 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
} }
rowClockData.add(timeSb.toString()); rowClockData.add(timeSb.toString());
// 打卡地点 // 打卡地点(AB列)
StringBuilder addrSb = new StringBuilder(); StringBuilder addrSb = new StringBuilder();
if (null != clockDo.getClockInAddress()) { if (null != clockDo.getClockInAddress()) {
addrSb.append(clockDo.getClockInAddress()); addrSb.append(clockDo.getClockInAddress());
...@@ -196,10 +211,12 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -196,10 +211,12 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
} }
rowClockData.add(addrSb.toString()); rowClockData.add(addrSb.toString());
String range = String.format(rangFormat, "U", "W"); // 调整range为Z-AB列(对应图二上班时长、打卡时间、打卡定位)
String range = String.format(rangFormat, "Y", "AA");
updateClockData(range, rowClockData); updateClockData(range, rowClockData);
} }
log.info("开始处理上传照片,行号:{}", rowNumStr);
/** /**
* 获取推广、POS图片 * 获取推广、POS图片
*/ */
...@@ -209,33 +226,6 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -209,33 +226,6 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
} }
/**
* 推广照>> 真实pos证明反馈
*/
// List<TemporaryActivityPhotoDO> photosType7 = Objects.isNull(photoTypeMap.get(7)) ? new ArrayList<>() : photoTypeMap.get(7);
// int photosType7Size = photosType7.size();
//
// // 真实pos证明反馈1 >>>
// if (!(photosType7Size < 1 || Objects.isNull(photosType7.get(0)))) {
// valuesImageToSheet(String.format(rangFormat, "P", "P"), photosType7.get(0).getPhotoUrl());
// }
//
// // 真实pos证明反馈2 >>>
// if (!(photosType7Size < 2 || Objects.isNull(photosType7.get(1)))) {
// valuesImageToSheetByRobot2(String.format(rangFormat, "Q", "Q"), photosType7.get(1).getPhotoUrl());
// }
//
// // 真实pos证明反馈3 >>>
// if (!(photosType7Size < 3 || Objects.isNull(photosType7.get(2)))) {
// valuesImageToSheet(String.format(rangFormat, "R", "R"), photosType7.get(2).getPhotoUrl());
// }
//
// // 真实pos证明反馈4 >>>
// if (!(photosType7Size < 4 || Objects.isNull(photosType7.get(3)))) {
// valuesImageToSheetByRobot2(String.format(rangFormat, "S", "S"), photosType7.get(3).getPhotoUrl());
// }
log.info("上传pos照片完成,行号:{}", rowNumStr);
/** /**
* 打卡照片 * 打卡照片
* 打卡类型小于9 的 类型大于等于4的 照片 * 打卡类型小于9 的 类型大于等于4的 照片
...@@ -246,51 +236,24 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -246,51 +236,24 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
.collect(Collectors.toMap(TemporaryActivityPhotoDO::getType, TemporaryActivityPhotoDO::getPhotoUrl)); .collect(Collectors.toMap(TemporaryActivityPhotoDO::getType, TemporaryActivityPhotoDO::getPhotoUrl));
// 上班打卡照片 >>> // 上班打卡照片 >>>
if (clockMap.containsKey(4)) { if (clockMap.containsKey(4)) {
valuesImageToSheet(String.format(rangFormat, "X", "X"), clockMap.get(4)); valuesImageToSheet(String.format(rangFormat, "AB", "AB"), clockMap.get(4));
}
// 午休下班打卡照片 >>>
if (clockMap.containsKey(5)) {
valuesImageToSheetByRobot2(String.format(rangFormat, "Y", "Y"), clockMap.get(5));
}
// 午休上班打卡照片 >>>
if (clockMap.containsKey(6)) {
valuesImageToSheet(String.format(rangFormat, "Z", "Z"), clockMap.get(6));
}
// 下班打卡照片 >>>
if (clockMap.containsKey(7)) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AA", "AA"), clockMap.get(7));
} }
log.info("上传打卡照片完成,行号:{}", rowNumStr);
/**
* 推广试吃照片
*/
StringBuilder pct = new StringBuilder(); StringBuilder pct = new StringBuilder();
List<TemporaryActivityPhotoDO> photosType1 = Objects.isNull(photoTypeMap.get(1)) ? new ArrayList<>() : photoTypeMap.get(1); List<TemporaryActivityPhotoDO> photosType1 = Objects.isNull(photoTypeMap.get(1)) ? new ArrayList<>() : photoTypeMap.get(1);
int photosType1Size = photosType1.size(); int photosType1Size = photosType1.size();
// 推广试吃照片1 >>> // 推广试吃照片1 >>>
if (!(photosType1Size < 1 || Objects.isNull(photosType1.get(0)))) { if (!(photosType1Size < 1 || Objects.isNull(photosType1.get(0)))) {
valuesImageToSheet(String.format(rangFormat, "AB", "AB"), photosType1.get(0).getPhotoUrl()); valuesImageToSheet(String.format(rangFormat, "AC", "AC"), photosType1.get(0).getPhotoUrl());
pct.append("试吃1:"+DateUtil.formatDateTime(photosType1.get(0).getCreateTime())); pct.append("试吃1:"+DateUtil.formatDateTime(photosType1.get(0).getCreateTime()));
} }
// 推广试吃照片2 >>> // 推广试吃照片2 >>>
if (!(photosType1Size < 2 || Objects.isNull(photosType1.get(1)))) { if (!(photosType1Size < 2 || Objects.isNull(photosType1.get(1)))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AC", "AC"), photosType1.get(1).getPhotoUrl()); valuesImageToSheetByRobot2(String.format(rangFormat, "AD", "AD"), photosType1.get(1).getPhotoUrl());
pct.append("、试吃2:"+DateUtil.formatDateTime(photosType1.get(1).getCreateTime())); pct.append("、试吃2:"+DateUtil.formatDateTime(photosType1.get(1).getCreateTime()));
} }
// 推广试吃照片3 >>>
if (!(photosType1Size < 3 || Objects.isNull(photosType1.get(2)))) {
valuesImageToSheet(String.format(rangFormat, "AD", "AD"), photosType1.get(2).getPhotoUrl());
pct.append("、试吃3:"+DateUtil.formatDateTime(photosType1.get(2).getCreateTime()));
}
// 推广试吃照片4 >>> // 推广试吃照片4 >>>
if (!(photosType1Size < 4 || Objects.isNull(photosType1.get(3)))) { if (!(photosType1Size < 4 || Objects.isNull(photosType1.get(3)))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AE", "AE"), photosType1.get(3).getPhotoUrl()); valuesImageToSheetByRobot2(String.format(rangFormat, "AE", "AE"), photosType1.get(3).getPhotoUrl());
...@@ -298,6 +261,24 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -298,6 +261,24 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
} }
log.info("上传推广-试吃照片完成,行号:{}", rowNumStr); log.info("上传推广-试吃照片完成,行号:{}", rowNumStr);
// 午休下班打卡照片 >>>
if (clockMap.containsKey(5)) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AF", "AF"), clockMap.get(5));
}
// 午休上班打卡照片 >>>
if (clockMap.containsKey(6)) {
valuesImageToSheet(String.format(rangFormat, "AG", "AG"), clockMap.get(6));
}
/**
* 推广试吃照片
*/
// 推广试吃照片3 >>>
if (!(photosType1Size < 3 || Objects.isNull(photosType1.get(2)))) {
valuesImageToSheet(String.format(rangFormat, "AH", "AH"), photosType1.get(2).getPhotoUrl());
pct.append("、试吃3:"+DateUtil.formatDateTime(photosType1.get(2).getCreateTime()));
}
/** /**
...@@ -307,28 +288,10 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -307,28 +288,10 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
int photosType2Size = photosType2.size(); int photosType2Size = photosType2.size();
// 推广互动照片1 >>> // 推广互动照片1 >>>
if (!(photosType2Size < 1 || Objects.isNull(photosType2.get(0)))) { if (!(photosType2Size < 1 || Objects.isNull(photosType2.get(0)))) {
valuesImageToSheet(String.format(rangFormat, "AF", "AF"), photosType2.get(0).getPhotoUrl()); valuesImageToSheet(String.format(rangFormat, "AI", "AI"), photosType2.get(0).getPhotoUrl());
pct.append("、互动1:"+DateUtil.formatDateTime(photosType2.get(0).getCreateTime())); pct.append("、互动1:"+DateUtil.formatDateTime(photosType2.get(0).getCreateTime()));
} }
// 推广互动照片2 >>>
if (!(photosType2Size < 2 || Objects.isNull(photosType2.get(1)))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AG", "AG"), photosType2.get(1).getPhotoUrl());
pct.append("、互动2:"+DateUtil.formatDateTime(photosType2.get(1).getCreateTime()));
}
// 推广互动照片3 >>>
if (!(photosType2Size < 3 || Objects.isNull(photosType2.get(2)))) {
valuesImageToSheet(String.format(rangFormat, "AH", "AH"), photosType2.get(2).getPhotoUrl());
pct.append("、互动3:"+DateUtil.formatDateTime(photosType2.get(2).getCreateTime()));
}
// 推广互动照片4 >>>
if (!(photosType2Size < 4 || Objects.isNull(photosType2.get(3)))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AI", "AI"), photosType2.get(3).getPhotoUrl());
pct.append("、互动4:"+DateUtil.formatDateTime(photosType2.get(3).getCreateTime()));
}
log.info("上传推广-互动照片完成,行号:{}", rowNumStr);
/** /**
* 推广成交照片 * 推广成交照片
...@@ -341,58 +304,53 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -341,58 +304,53 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
pct.append("、成交1:"+DateUtil.formatDateTime(photosType3.get(0).getCreateTime())); pct.append("、成交1:"+DateUtil.formatDateTime(photosType3.get(0).getCreateTime()));
} }
// 推广成交照片2 >>>
if (!(photosType3Size < 2 || Objects.isNull(photosType3.get(1)))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AK", "AK"), photosType3.get(1).getPhotoUrl());
pct.append("、成交2:"+DateUtil.formatDateTime(photosType3.get(1).getCreateTime()));
}
// 推广成交照片3 >>>
if (!(photosType3Size < 3 || Objects.isNull(photosType3.get(2)))) {
valuesImageToSheet(String.format(rangFormat, "AL", "AL"), photosType3.get(2).getPhotoUrl());
pct.append("、成交3:"+DateUtil.formatDateTime(photosType3.get(2).getCreateTime()));
}
// 推广成交照片4 >>>
if (!(photosType3Size < 4 || Objects.isNull(photosType3.get(3)))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AM", "AM"), photosType3.get(3).getPhotoUrl());
pct.append("、成交4:"+DateUtil.formatDateTime(photosType3.get(3).getCreateTime()));
}
Map<Integer, List<TemporaryActivityPhotoDO>> taskMap = activityPhotoDOS.stream() Map<Integer, List<TemporaryActivityPhotoDO>> taskMap = activityPhotoDOS.stream()
.filter(photo -> photo.getType() >= 9) .filter(photo -> photo.getType() >= 9)
.collect(Collectors.groupingBy(TemporaryActivityPhotoDO::getType )); .collect(Collectors.groupingBy(TemporaryActivityPhotoDO::getType ));
// pos任务照片
List<TemporaryActivityPhotoDO> posTaskPhotos = taskMap.get(9);
if (ObjectUtil.isNotEmpty(posTaskPhotos) && posTaskPhotos.size() >0 && ObjectUtil.isNotEmpty(posTaskPhotos.get(0))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AO", "AO"), posTaskPhotos.get(0).getPhotoUrl());
pct.append("、pos任务1:"+DateUtil.formatDateTime(posTaskPhotos.get(0).getCreateTime()));
}
if (ObjectUtil.isNotEmpty(posTaskPhotos) && posTaskPhotos.size() >1 && ObjectUtil.isNotEmpty(posTaskPhotos.get(1))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AP", "AP"), posTaskPhotos.get(1).getPhotoUrl());
pct.append("、pos任务2:"+DateUtil.formatDateTime(posTaskPhotos.get(1).getCreateTime()));
}
// 随机任务照片 // 随机任务照片
List<TemporaryActivityPhotoDO> randTaskPhotos = taskMap.get(10); List<TemporaryActivityPhotoDO> randTaskPhotos = taskMap.get(10);
if (ObjectUtil.isNotEmpty(randTaskPhotos) && randTaskPhotos.size() > 0 && ObjectUtil.isNotEmpty(randTaskPhotos.get(0))) { if (ObjectUtil.isNotEmpty(randTaskPhotos) && randTaskPhotos.size() > 0 && ObjectUtil.isNotEmpty(randTaskPhotos.get(0))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AN", "AN"), randTaskPhotos.get(0).getPhotoUrl()); valuesImageToSheetByRobot2(String.format(rangFormat, "AK", "AK"), randTaskPhotos.get(0).getPhotoUrl());
pct.append("、随机任务:"+DateUtil.formatDateTime(randTaskPhotos.get(0).getCreateTime())); pct.append("、随机任务:"+DateUtil.formatDateTime(randTaskPhotos.get(0).getCreateTime()));
} }
/**
* 推广照>> 真实pos证明反馈
*/
List<TemporaryActivityPhotoDO> photosType8 = Objects.isNull(photoTypeMap.get(8)) ? new ArrayList<>() : photoTypeMap.get(8);
int photosType8Size = photosType8.size();
// 真实pos证明反馈1 >>>
if (!(photosType8Size < 1 || Objects.isNull(photosType8.get(0)))) {
valuesImageToSheet(String.format(rangFormat, "AL", "AL"), photosType8.get(0).getPhotoUrl());
}
// 真实pos证明反馈2 >>>
if (!(photosType8Size < 2 || Objects.isNull(photosType8.get(1)))) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AM", "AM"), photosType8.get(1).getPhotoUrl());
}
// 下班打卡照片 >>>
if (clockMap.containsKey(7)) {
valuesImageToSheetByRobot2(String.format(rangFormat, "AN", "AN"), clockMap.get(7));
}
log.info("上传打卡照片完成,行号:{}", rowNumStr);
// 推广类照片上传时间 // 推广类照片上传时间
String range =String.format(rangFormat, "AQ", "AQ"); String range =String.format(rangFormat, "AO", "AO");
updateClockData(range,Arrays.asList(pct.toString())); updateClockData(range,Arrays.asList(pct.toString()));
log.info("上传推广-成交照片完成,行号:{}", rowNumStr); log.info("结束上传推广打卡照片:{}",rowNumStr);
} }
private void addactivityDataRow(List<Object> rowData) { private void addactivityDataRow(List<Object> rowData) {
String redisKey = getRowNumRedisKey(); String redisKey = getRowNumRedisKey();
String rowNumStr = redisCache.get(redisKey); String rowNumStr = redisCache.get(redisKey);
Integer rowNumNext = StringUtils.isBlank(rowNumStr) ? 2 : Integer.parseInt(rowNumStr) + 1; Integer rowNumNext = StringUtils.isBlank(rowNumStr) ? 2 : Integer.parseInt(rowNumStr) + 1;
String range = sheetInfoD.getSheetId() + "!A" + rowNumNext + ":P" + rowNumNext; String range = sheetInfoD.getSheetId() + "!A" + rowNumNext + ":X" + rowNumNext;
Integer rowNumEnd = feishuSheetUtils.appendValueToSheet(range, rowData, sheetInfoD.getSheetToken(), getFeishuTenantToken1()); Integer rowNumEnd = feishuSheetUtils.appendValueToSheet(range, rowData, sheetInfoD.getSheetToken(), getFeishuTenantToken1());
if (rowNumEnd < 1) { if (rowNumEnd < 1) {
...@@ -459,4 +417,45 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe ...@@ -459,4 +417,45 @@ public class ActivityToFeishuSheetServiceImpl implements ActivityToFeishuSheetSe
return DatePattern.NORM_DATETIME_FORMAT.format(date); return DatePattern.NORM_DATETIME_FORMAT.format(date);
} }
/**
* 计算工时
*/
private String calculateWorkDuration(TemporaryActivityClockDO clockDo) {
// 基础校验:上班/下班时间为空,直接返回0
if (Objects.isNull(clockDo.getClockInTime()) || Objects.isNull(clockDo.getClockOutTime())) {
return "0";
}
// 上班打卡时间
Date clockIn = clockDo.getClockInTime();
// 午休下班时间
Date noonClockOut = clockDo.getNoonClockOutTime();
// 午休上班时间
Date noonClockIn = clockDo.getNoonClockInTime();
// 下班打卡时间
Date clockOut = clockDo.getClockOutTime();
long totalMinutes = 0;
// 判断是否午休缺卡(午休下班/午休上班任一为空)
boolean isNoonCardMissing = Objects.isNull(noonClockOut) || Objects.isNull(noonClockIn);
if (isNoonCardMissing) {
// 午休缺卡:直接计算上班→下班的总时长
totalMinutes = DateUtil.between(clockIn, clockOut, DateUnit.MINUTE);
} else {
// 午休不缺卡:两段时长相加(上午段 + 下午段)
// 上班→午休下班
long morningMinutes = DateUtil.between(clockIn, noonClockOut, DateUnit.MINUTE);
// 午休上班→下班
long afternoonMinutes = DateUtil.between(noonClockIn, clockOut, DateUnit.MINUTE);
totalMinutes = morningMinutes + afternoonMinutes;
}
// 分钟转小时(保留1位小数,避免多位小数)
double hours = totalMinutes / 60.0;
return String.format("%.1f", hours);
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论