|
@@ -102,7 +102,7 @@ public class TwinEmpCalcServiceImpl implements ITwinEmpCalcService {
|
|
|
}
|
|
|
|
|
|
@Resource
|
|
|
- private ITwinDeviceSpecService specService;
|
|
|
+ private ITwinCalcHourSpecService hourSpecService;
|
|
|
|
|
|
/**
|
|
|
* 按日统计
|
|
@@ -112,7 +112,14 @@ public class TwinEmpCalcServiceImpl implements ITwinEmpCalcService {
|
|
|
*/
|
|
|
@Override
|
|
|
public int calc(Date date) {
|
|
|
+ //先删除
|
|
|
twinEmpCalcMapper.deleteTwinEmpCalcByDate(date);
|
|
|
+
|
|
|
+ //获取统计数据
|
|
|
+ List<TwinCalcHourSpec> specHourList = hourSpecService.selectTwinCalcHourSpecListByDate(date);
|
|
|
+ specHourList.forEach(obj -> obj.setTeam());
|
|
|
+ // 按照deviceId、density、mick、team,并统计每组的length总和
|
|
|
+ Map<String, List<TwinCalcHourSpec>> specHourMap = specHourList.stream().collect(Collectors.groupingBy(o -> o.getDeviceId() + "-" + o.getTeam(), LinkedHashMap::new, Collectors.toList()));
|
|
|
List<TwinCalcDay> twinCalcDays = twinCalcDayService.selectTwinCalcDayListByTime(date, date);
|
|
|
Map<Long, TwinCalcDay> calcMap = twinCalcDays.stream().collect(Collectors.toMap(TwinCalcDay::getDeviceId, o -> o));
|
|
|
TwinEmp emp = empService.selectTwinEmpByDate(date);
|
|
@@ -120,13 +127,10 @@ public class TwinEmpCalcServiceImpl implements ITwinEmpCalcService {
|
|
|
List<TwinEmpConfig> configs = empConfigService.selectTwinEmpConfigList(new TwinEmpConfig());
|
|
|
Map<BigDecimal, BigDecimal> configMap = configs.stream().collect(Collectors.toMap(o -> o.getDensity().setScale(2, RoundingMode.HALF_UP), TwinEmpConfig::getPrice));
|
|
|
|
|
|
- List<TwinDeviceSpec> specs = specService.selectTwinDeviceSpecList(new TwinDeviceSpec());
|
|
|
- Map<Long, TwinDeviceSpec> specMap = specs.stream().collect(Collectors.toMap(TwinDeviceSpec::getDeviceId, o -> o));
|
|
|
-
|
|
|
List<TwinEmpCalc> calcList = new ArrayList<>();
|
|
|
- process(true, emp, calcMap, specMap, configMap, calcList);
|
|
|
- process(false, emp, calcMap, specMap, configMap, calcList);
|
|
|
- if (calcList != null && calcList.size() > 0) {
|
|
|
+ process(true, emp, calcMap, configMap, calcList, specHourMap);
|
|
|
+ process(false, emp, calcMap, configMap, calcList, specHourMap);
|
|
|
+ if (calcList.size() > 0) {
|
|
|
try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
TwinEmpCalcMapper mapper = sqlSession.getMapper(TwinEmpCalcMapper.class);
|
|
|
calcList.forEach(mapper::insertTwinEmpCalc);
|
|
@@ -140,35 +144,40 @@ public class TwinEmpCalcServiceImpl implements ITwinEmpCalcService {
|
|
|
/**
|
|
|
* @param flag true为A班false为B班
|
|
|
*/
|
|
|
- private void process(boolean flag, TwinEmp emp, Map<Long, TwinCalcDay> calcMap, Map<Long, TwinDeviceSpec> specMap, Map<BigDecimal, BigDecimal> configMap, List<TwinEmpCalc> calcList) {
|
|
|
+ private void process(boolean flag, TwinEmp emp, Map<Long, TwinCalcDay> calcMap, Map<BigDecimal, BigDecimal> configMap, List<TwinEmpCalc> calcList, Map<String, List<TwinCalcHourSpec>> specHourMap) {
|
|
|
List<TwinEmpDetail> list = emp.getTwinEmpDetailListA();
|
|
|
+ String team = "A";
|
|
|
if (!flag) {
|
|
|
+ team = "B";
|
|
|
list = emp.getTwinEmpDetailListB();
|
|
|
}
|
|
|
for (TwinEmpDetail d : list) {
|
|
|
Long[] devices = getDevices(d.getDevices());
|
|
|
for (int i = 0; i < devices.length; i++) {
|
|
|
Long deviceId = devices[i];
|
|
|
- TwinDeviceSpec spec = specMap.get(deviceId);
|
|
|
- TwinCalcDay td = calcMap.get(deviceId);
|
|
|
- TwinEmpCalc calc = new TwinEmpCalc();
|
|
|
- calc.setDeviceId(deviceId);
|
|
|
- calc.setEfficiency(td.getEfficiencyA());
|
|
|
- calc.setEmpDate(td.getTime());
|
|
|
- BigDecimal length = td.getLengthA();
|
|
|
- if (!flag) {
|
|
|
- calc.setEfficiency(td.getEfficiencyB());
|
|
|
- length = td.getLengthB();
|
|
|
- }
|
|
|
- if (length.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- calc.setLength(length);
|
|
|
- calc.setEmpTeam(d.getEmpTeam());
|
|
|
- calc.setEmpName(d.getEmpName());
|
|
|
- if (spec != null) {
|
|
|
- calc.setMick(spec.getMick());
|
|
|
- BigDecimal density = spec.getDensity().setScale(2, RoundingMode.HALF_UP);
|
|
|
+ List<TwinCalcHourSpec> specs = specHourMap.get(deviceId + "-" + team);
|
|
|
+ //按密度和米克重分组统计
|
|
|
+ Map<String, BigDecimal> resultMap = specs.stream().collect(Collectors.groupingBy(t -> t.getDensity() + "-" + t.getMick(), Collectors.reducing(BigDecimal.ZERO, TwinCalcHourSpec::getLength, BigDecimal::add)));
|
|
|
+ for (String ss : resultMap.keySet()) {
|
|
|
+ String[] temp = ss.split("-");
|
|
|
+ BigDecimal density = new BigDecimal(temp[0]).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ Integer mick = Integer.parseInt(temp[1]);
|
|
|
+ TwinCalcDay td = calcMap.get(deviceId);
|
|
|
+ TwinEmpCalc calc = new TwinEmpCalc();
|
|
|
+ calc.setDeviceId(deviceId);
|
|
|
+ calc.setEfficiency(td.getEfficiencyA());
|
|
|
+ calc.setEmpDate(td.getTime());
|
|
|
+ BigDecimal length = resultMap.get(ss);
|
|
|
+ if (!flag) {
|
|
|
+ calc.setEfficiency(td.getEfficiencyB());
|
|
|
+ }
|
|
|
+ if (length.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ calc.setLength(length);
|
|
|
+ calc.setEmpTeam(d.getEmpTeam());
|
|
|
+ calc.setEmpName(d.getEmpName());
|
|
|
+ calc.setMick(mick);
|
|
|
calc.setDensity(density);
|
|
|
BigDecimal price = configMap.get(Tools.density(density));
|
|
|
calc.setPrice(price);
|
|
@@ -176,8 +185,8 @@ public class TwinEmpCalcServiceImpl implements ITwinEmpCalcService {
|
|
|
BigDecimal total = length.multiply(price);
|
|
|
calc.setTotalPrice(total);
|
|
|
}
|
|
|
+ calcList.add(calc);
|
|
|
}
|
|
|
- calcList.add(calc);
|
|
|
}
|
|
|
}
|
|
|
}
|