|
@@ -19,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.util.Assert;
|
|
import org.springframework.util.Assert;
|
|
|
|
+
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
import java.time.*;
|
|
import java.time.*;
|
|
@@ -71,6 +72,9 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
//判断创建时间是否为空
|
|
//判断创建时间是否为空
|
|
if (boy.getCreateTime() == null) {
|
|
if (boy.getCreateTime() == null) {
|
|
boy.setCreateTime(new Date());
|
|
boy.setCreateTime(new Date());
|
|
|
|
+ } else {
|
|
|
|
+ //如果创建时间不为空,则判断时间是否在今天之后 如果是则提醒 创建时间只能小于等于今天
|
|
|
|
+ Assert.isTrue(boy.getCreateTime().after(new Date()), "500-创建时间不能大于今天");
|
|
}
|
|
}
|
|
//通过产线名称和创建如期去查询产线数据是否存在
|
|
//通过产线名称和创建如期去查询产线数据是否存在
|
|
LambdaQueryWrapper<MesLine> wr = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<MesLine> wr = new LambdaQueryWrapper<>();
|
|
@@ -91,6 +95,11 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
* @param boy
|
|
* @param boy
|
|
*/
|
|
*/
|
|
public void edit(MesLine boy) {
|
|
public void edit(MesLine boy) {
|
|
|
|
+ //检验数据
|
|
|
|
+ this.check(boy);
|
|
|
|
+ //判断一下时间
|
|
|
|
+ Assert.isTrue(boy.getCreateTime() != null, "500-时间不能为空");
|
|
|
|
+ Assert.isTrue(boy.getCreateTime().after(new Date()), "500-创建时间不能大于今天");
|
|
boy.setUpdateTime(new Date())
|
|
boy.setUpdateTime(new Date())
|
|
.setUpdateBy(SecurityUtils.getUsername());
|
|
.setUpdateBy(SecurityUtils.getUsername());
|
|
this.updateById(boy);
|
|
this.updateById(boy);
|
|
@@ -234,7 +243,7 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
*
|
|
*
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- public R<Long> getMonthTotal() {
|
|
|
|
|
|
+ public R<Map<String,Long>> getMonthTotal() {
|
|
//获取当前时间
|
|
//获取当前时间
|
|
LocalDate now = LocalDate.now();
|
|
LocalDate now = LocalDate.now();
|
|
//获取本月的开始时间和结束时间
|
|
//获取本月的开始时间和结束时间
|
|
@@ -244,14 +253,21 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
LambdaQueryWrapper<MesLine> wr = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<MesLine> wr = new LambdaQueryWrapper<>();
|
|
wr.between(MesLine::getCreateTime, startOfMonth, endOfMonth);
|
|
wr.between(MesLine::getCreateTime, startOfMonth, endOfMonth);
|
|
List<MesLine> list = mesLineMapper.selectList(wr);
|
|
List<MesLine> list = mesLineMapper.selectList(wr);
|
|
- //开始累加本月总产量
|
|
|
|
- Long total = 0L;
|
|
|
|
- if (list != null && !list.isEmpty()) {
|
|
|
|
|
|
+ // 开始累加本月各产线总产量
|
|
|
|
+ Map<String, Long> totalByLine = new HashMap<>();
|
|
|
|
+ if (list != null && !list.isEmpty()){
|
|
for (MesLine mesLine : list) {
|
|
for (MesLine mesLine : list) {
|
|
- total += mesLine.getCurrentQty();
|
|
|
|
|
|
+ String lineName = mesLine.getLineName();
|
|
|
|
+ Long currentQty = mesLine.getCurrentQty();
|
|
|
|
+ if (totalByLine.containsKey(lineName)){
|
|
|
|
+ totalByLine.put(lineName, totalByLine.get(lineName) + currentQty);
|
|
|
|
+ }else {
|
|
|
|
+ totalByLine.put(lineName, currentQty);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return R.ok(total);
|
|
|
|
|
|
+ return R.ok(totalByLine);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -259,7 +275,7 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
*
|
|
*
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- public R<Map<String, Map<String, Object>>> getPassRate() {
|
|
|
|
|
|
+ public R<Map<String, List<Map<String, Map<String, Object>>>>> getPassRate() {
|
|
//获取当前日期
|
|
//获取当前日期
|
|
LocalDate now = LocalDate.now();
|
|
LocalDate now = LocalDate.now();
|
|
//计算本周的星期一
|
|
//计算本周的星期一
|
|
@@ -272,8 +288,12 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
List<MesLine> boy = mesLineMapper.selectList(wr);
|
|
List<MesLine> boy = mesLineMapper.selectList(wr);
|
|
//创建Map 用于存储统计结果 星期一:合格率
|
|
//创建Map 用于存储统计结果 星期一:合格率
|
|
Map<String, Map<String, Object>> weekMap = new LinkedHashMap<>();
|
|
Map<String, Map<String, Object>> weekMap = new LinkedHashMap<>();
|
|
|
|
+ //存储的数据格式 key:产线名称 value:星期几 value:{产量:0,合格数量:0,不合格数量:0,合格率}
|
|
|
|
+ Map<String, List<Map<String, Map<String, Object>>>> map = new LinkedHashMap<>();
|
|
|
|
+
|
|
|
|
+
|
|
//添加星期一-星期日
|
|
//添加星期一-星期日
|
|
- for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
|
|
|
|
|
|
+ /* for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
|
|
String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
|
|
String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
|
|
weekMap.put(dayOfWeekName, new HashMap<>());
|
|
weekMap.put(dayOfWeekName, new HashMap<>());
|
|
}
|
|
}
|
|
@@ -315,12 +335,85 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
- return R.ok(weekMap);
|
|
|
|
|
|
+ return R.ok(weekMap);*/
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //初始化每周的数据
|
|
|
|
+ for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
|
|
|
|
+ String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
|
|
|
|
+ if (boy != null && !boy.isEmpty()) {
|
|
|
|
+ for (MesLine mesLine : boy) {
|
|
|
|
+ //获取产线名称
|
|
|
|
+ String lineName = mesLine.getLineName();
|
|
|
|
+ if (!map.containsKey(lineName)) {
|
|
|
|
+ map.put(lineName, new ArrayList<>());
|
|
|
|
+ }
|
|
|
|
+ //通过key 获取对应的list
|
|
|
|
+ List<Map<String, Map<String, Object>>> mapList = map.get(lineName);
|
|
|
|
+ boolean found = false;
|
|
|
|
+ for (Map<String, Map<String, Object>> dayData : mapList) {
|
|
|
|
+ if (dayData.containsKey(dayOfWeekName)) {
|
|
|
|
+ found = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (!found) {
|
|
|
|
+ Map<String, Map<String, Object>> dayData = new HashMap<>();
|
|
|
|
+ dayData.put(dayOfWeekName, new HashMap<>());
|
|
|
|
+ mapList.add(dayData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 遍历集合,统计每条产线的数据
|
|
|
|
+ if (boy != null && !boy.isEmpty()) {
|
|
|
|
+ for (MesLine mesLine : boy) {
|
|
|
|
+ // 获取创建日期
|
|
|
|
+ LocalDate createTime = mesLine.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
|
|
|
+ if (createTime.isAfter(mondayOfWeek.minusDays(1)) && createTime.isBefore(sundayOfWeek.plusDays(1))) {
|
|
|
|
+ DayOfWeek dayOfWeek = createTime.getDayOfWeek();
|
|
|
|
+ String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
|
|
|
|
+ String lineName = mesLine.getLineName();
|
|
|
|
+ List<Map<String, Map<String, Object>>> lineData = map.get(lineName);
|
|
|
|
+ for (Map<String, Map<String, Object>> dayData : lineData) {
|
|
|
|
+ if (dayData.containsKey(dayOfWeekName)) {
|
|
|
|
+ Map<String, Object> stats = dayData.get(dayOfWeekName);
|
|
|
|
+ // 累加总产量
|
|
|
|
+ Long totalOutput = (Long) stats.getOrDefault("产量", 0L);
|
|
|
|
+ Long count = mesLine.getCurrentQty();//产量+不合格数
|
|
|
|
+ Long poorQty = mesLine.getPoorQty();//不合格数量
|
|
|
|
+ totalOutput += (count + poorQty);
|
|
|
|
+ stats.put("产量", totalOutput);
|
|
|
|
+
|
|
|
|
+ // 累加不合格数量
|
|
|
|
+ Long totalPoorQty = (Long) stats.getOrDefault("不合格数量", 0L);
|
|
|
|
+ totalPoorQty += mesLine.getPoorQty();
|
|
|
|
+ stats.put("不合格数量", totalPoorQty);
|
|
|
|
+
|
|
|
|
+ //计算合格数量
|
|
|
|
+ Long totalQualifiedQty = (Long) stats.getOrDefault("合格数量", 0L);
|
|
|
|
+ totalQualifiedQty += count;
|
|
|
|
+ stats.put("合格数量", totalQualifiedQty);
|
|
|
|
+
|
|
|
|
+ // 更新合格率
|
|
|
|
+ if (totalOutput > 0) {
|
|
|
|
+ double qualificationRate = ((double) totalQualifiedQty / (double) totalOutput) * 100;
|
|
|
|
+ stats.put("合格率", String.format(Locale.US, "%.2f%%", qualificationRate));
|
|
|
|
+ } else {
|
|
|
|
+ stats.put("合格率", "0.00%");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return R.ok(map);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 获取人均产出(星期1-7)
|
|
|
|
|
|
+ * 获取人均产出(按月)
|
|
*
|
|
*
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@@ -337,6 +430,23 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
List<MesLine> boy = mesLineMapper.selectList(wr);
|
|
List<MesLine> boy = mesLineMapper.selectList(wr);
|
|
//创建Map 用于存储统计结果 日期:产线 每日产量 每日工作人数 人均产出
|
|
//创建Map 用于存储统计结果 日期:产线 每日产量 每日工作人数 人均产出
|
|
Map<String, Map<String, Map<String, Object>>> weekMap = new LinkedHashMap<>();
|
|
Map<String, Map<String, Map<String, Object>>> weekMap = new LinkedHashMap<>();
|
|
|
|
+ //初始化 每月1号到当前时间
|
|
|
|
+ LocalDate currentDate = firstDayOfMonth;
|
|
|
|
+ while (currentDate.isBefore(now.plusDays(1))) {
|
|
|
|
+ String dateString = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
+ if (boy != null && !boy.isEmpty()) {
|
|
|
|
+ for (MesLine mesLine : boy) {
|
|
|
|
+ String lineName = mesLine.getLineName();
|
|
|
|
+ Map<String, Map<String, Object>> dayStats = weekMap.computeIfAbsent(lineName, k -> new TreeMap<>(Comparator.naturalOrder()));
|
|
|
|
+ dayStats.putIfAbsent(dateString, new HashMap<String, Object>() {{
|
|
|
|
+ put("产量", 0L);
|
|
|
|
+ put("每日工作人数", 0);
|
|
|
|
+ put("人均产出", BigDecimal.ZERO);
|
|
|
|
+ }});
|
|
|
|
+ }
|
|
|
|
+ currentDate = currentDate.plusDays(1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
//遍历集合 获取某条线产量
|
|
//遍历集合 获取某条线产量
|
|
if (boy != null && !boy.isEmpty()) {
|
|
if (boy != null && !boy.isEmpty()) {
|
|
for (MesLine mesLine : boy) {
|
|
for (MesLine mesLine : boy) {
|
|
@@ -347,8 +457,8 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
//序列化日期格式 年月日
|
|
//序列化日期格式 年月日
|
|
String dateString = createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
String dateString = createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
//初始化数据
|
|
//初始化数据
|
|
- Map<String, Map<String, Object>> dayStats = weekMap.computeIfAbsent(lineName, k -> new HashMap<>());
|
|
|
|
- Map<String, Object> lineStats = dayStats.computeIfAbsent(dateString, k -> new HashMap<>());
|
|
|
|
|
|
+ Map<String, Map<String, Object>> dayStats = weekMap.get(lineName);
|
|
|
|
+ Map<String, Object> lineStats = dayStats.get(dateString);
|
|
//累加产量
|
|
//累加产量
|
|
Long totalOutPut = (Long) lineStats.getOrDefault("产量", 0L);
|
|
Long totalOutPut = (Long) lineStats.getOrDefault("产量", 0L);
|
|
Long count = mesLine.getCurrentQty();//产量
|
|
Long count = mesLine.getCurrentQty();//产量
|
|
@@ -378,8 +488,6 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
return R.ok(weekMap);
|
|
return R.ok(weekMap);
|
|
}
|
|
}
|
|
}
|
|
}
|