123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package com.jjt.calc.service.impl;
- import com.jjt.calc.domain.TwinCalcDayYhj;
- import com.jjt.calc.domain.TwinCalcHourYhj;
- import com.jjt.calc.mapper.TwinCalcDayYhjMapper;
- import com.jjt.calc.mapper.TwinCalcHourYhjMapper;
- import com.jjt.calc.service.ITwinCalcDayYhjService;
- import com.jjt.common.utils.DateUtils;
- import com.jjt.inventory.domain.TwinCalcHourBpOut;
- import com.jjt.inventory.service.ITwinCalcHourBpOutService;
- import org.apache.ibatis.session.ExecutorType;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.time.LocalDate;
- import java.time.LocalDateTime;
- import java.time.LocalTime;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * 印花机日统计数据Service业务层处理
- *
- * @author wukai
- * @date 2025-03-07
- */
- @Service
- public class TwinCalcDayYhjServiceImpl implements ITwinCalcDayYhjService {
- @Resource
- private TwinCalcDayYhjMapper twinCalcDayYhjMapper;
- @Resource
- private TwinCalcHourYhjMapper hourYhjMapper;
- @Resource
- private ITwinCalcHourBpOutService bpOutService;
- @Resource
- private SqlSessionFactory factory;
- /**
- * 查询印花机日统计数据
- *
- * @param id 印花机日统计数据主键
- * @return 印花机日统计数据
- */
- @Override
- public TwinCalcDayYhj selectTwinCalcDayYhjById(Long id) {
- return twinCalcDayYhjMapper.selectTwinCalcDayYhjById(id);
- }
- /**
- * 查询印花机日统计数据列表
- *
- * @param twinCalcDayYhj 印花机日统计数据
- * @return 印花机日统计数据
- */
- @Override
- public List<TwinCalcDayYhj> selectTwinCalcDayYhjList(TwinCalcDayYhj twinCalcDayYhj) {
- return twinCalcDayYhjMapper.selectTwinCalcDayYhjList(twinCalcDayYhj);
- }
- /**
- * 新增印花机日统计数据
- *
- * @param twinCalcDayYhj 印花机日统计数据
- * @return 结果
- */
- @Override
- public int insertTwinCalcDayYhj(TwinCalcDayYhj twinCalcDayYhj) {
- return twinCalcDayYhjMapper.insertTwinCalcDayYhj(twinCalcDayYhj);
- }
- /**
- * 修改印花机日统计数据
- *
- * @param twinCalcDayYhj 印花机日统计数据
- * @return 结果
- */
- @Override
- public int updateTwinCalcDayYhj(TwinCalcDayYhj twinCalcDayYhj) {
- return twinCalcDayYhjMapper.updateTwinCalcDayYhj(twinCalcDayYhj);
- }
- /**
- * 批量删除印花机日统计数据
- *
- * @param ids 需要删除的印花机日统计数据主键
- * @return 结果
- */
- @Override
- public int deleteTwinCalcDayYhjByIds(Long[] ids) {
- return twinCalcDayYhjMapper.deleteTwinCalcDayYhjByIds(ids);
- }
- /**
- * 删除印花机日统计数据信息
- *
- * @param id 印花机日统计数据主键
- * @return 结果
- */
- @Override
- public int deleteTwinCalcDayYhjById(Long id) {
- return twinCalcDayYhjMapper.deleteTwinCalcDayYhjById(id);
- }
- /**
- * 统计指定日期的数据
- * 需要统计2种类型,1.按班组统计 2.按自然日统计
- *
- * @param localDate 日期
- */
- @Override
- public void day(LocalDate localDate) {
- //先删除当前日期数据
- twinCalcDayYhjMapper.delete4date(localDate.toString());
- //1.先按班组统计
- TwinCalcHourYhj search = new TwinCalcHourYhj();
- Map<String, Object> params = new HashMap<>(16);
- LocalDateTime st = LocalDateTime.of(localDate, LocalTime.MIN).plusHours(7);
- LocalDateTime ed = st.plusHours(23);
- params.put("sTime", DateUtils.toDate(st));
- params.put("eTime", DateUtils.toDate(ed));
- search.setParams(params);
- List<TwinCalcHourYhj> list = hourYhjMapper.selectTwinCalcHourYhjList(search);
- //设置班组
- list.forEach(TwinCalcHourYhj::setTeam);
- //先按ID分组
- Map<Integer, List<TwinCalcHourYhj>> calcMap = list.stream().collect(Collectors.groupingBy(TwinCalcHourYhj::getDeviceId, LinkedHashMap::new, Collectors.toList()));
- Map<Integer, TwinCalcDayYhj> resultMap = new HashMap<>(16);
- for (Integer deviceId : calcMap.keySet()) {
- //按班组统计
- Map<String, Integer> calcLength = calcMap.get(deviceId).stream().collect(Collectors.groupingBy(TwinCalcHourYhj::getTeam, Collectors.reducing(0, TwinCalcHourYhj::getLength, Integer::sum)));
- Map<String, BigDecimal> calcWeight = calcMap.get(deviceId).stream().collect(Collectors.groupingBy(TwinCalcHourYhj::getTeam, Collectors.mapping(item -> item.getWeight() == null ? BigDecimal.ZERO : item.getWeight(), Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))));
- TwinCalcDayYhj calc = new TwinCalcDayYhj();
- calc.setDeviceId(deviceId);
- calc.setTime(DateUtils.toDate(localDate));
- calc.setLength(calcLength.get("A"), calcLength.get("B"));
- calc.setWeight(calcWeight.get("A"), calcWeight.get("B"));
- resultMap.put(deviceId, calc);
- }
- // //按自然日统计
- // search = new TwinCalcHourYhj();
- // params = new HashMap<>(16);
- // params.put("beginDataDate", localDate.toString());
- // params.put("endDataDate", localDate.toString());
- // search.setParams(params);
- // list = hourYhjMapper.selectTwinCalcHourYhjList(search);
- //查询白坯投放量
- TwinCalcHourBpOut bpOut = new TwinCalcHourBpOut();
- bpOut.setParams(params);
- List<TwinCalcHourBpOut> bpOutList = bpOutService.selectTwinCalcHourBpOutList(bpOut);
- List<TwinCalcDayYhj> yhjList = new ArrayList<>();
- //按ID分组统计
- Map<Integer, List<TwinCalcHourBpOut>> bpOutMap = bpOutList.stream().collect(Collectors.groupingBy(TwinCalcHourBpOut::getDeviceId, Collectors.toList()));
- for (Integer deviceId : calcMap.keySet()) {
- TwinCalcDayYhj calc = resultMap.get(deviceId);
- List<TwinCalcHourBpOut> bpList = bpOutMap.get(deviceId);
- if (bpList != null && !bpList.isEmpty()) {
- // 计算白坯投放的总米数和总重量
- int totalLength = bpList.stream().mapToInt(TwinCalcHourBpOut::getLength).sum();
- int totalWeight = bpList.stream().mapToInt(TwinCalcHourBpOut::getWeight).sum();
- // 设置到日统计对象中
- calc.setDayLength(totalLength);
- calc.setDayWeight(BigDecimal.valueOf(totalWeight).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP));
- } else {
- // 如果没有数据,设置为0
- calc.setDayLength(0);
- calc.setDayWeight(BigDecimal.ZERO);
- }
- yhjList.add(calc);
- }
- try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
- if (yhjList.size() > 0) {
- TwinCalcDayYhjMapper mapper = sqlSession.getMapper(TwinCalcDayYhjMapper.class);
- yhjList.forEach(mapper::insertTwinCalcDayYhj);
- sqlSession.commit();
- }
- }
- }
- }
|