package com.dy.pmsProduct.schedule; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.dy.common.webUtil.QueryResultVo; import com.dy.pmsGlobal.daoBa.BaUserMapper; import com.dy.pmsGlobal.daoPlt.PltStationMapper; import com.dy.pmsGlobal.daoPr.PrAssemblyPlanMapper; import com.dy.pmsGlobal.daoPr.PrScheduleMapper; import com.dy.pmsGlobal.daoPr.PrScheduleRelMapper; import com.dy.pmsGlobal.pojoBa.BaUser; import com.dy.pmsGlobal.pojoPlt.PltStation; import com.dy.pmsGlobal.pojoPr.PrSchedule; import com.dy.pmsGlobal.pojoPr.PrScheduleRel; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Slf4j @Service public class ScheduleSv { private PrScheduleMapper scheduleDao; private PrScheduleRelMapper scheduleRelDao; private PrAssemblyPlanMapper assemblyPlanDao; private PltStationMapper stationDao; private BaUserMapper baUserDao; @Autowired public void setStationDao(PltStationMapper stationDao) { this.stationDao = stationDao; } @Autowired public void setScheduleRelDao(PrScheduleRelMapper scheduleRelDao) { this.scheduleRelDao = scheduleRelDao; } @Autowired public void setAssemblyPlanDao(PrAssemblyPlanMapper assemblyPlanDao) { this.assemblyPlanDao = assemblyPlanDao; } @Autowired public void setScheduleDao(PrScheduleMapper scheduleDao) { this.scheduleDao = scheduleDao; } @Autowired private void setBaUserMapper(BaUserMapper baUserDao) { this.baUserDao = baUserDao; } @Transactional public int save(PrSchedule schedule) { int count = scheduleDao.insertSelective(schedule); saveRel(schedule); return count; } @Transactional public int update(PrSchedule schedule) { scheduleRelDao.deleteByScheduleId(schedule.id); saveRel(schedule); return scheduleDao.updateByPrimaryKeySelective(schedule); } private void saveRel(PrSchedule schedule) { schedule.relList.forEach(rel -> validateRelData(rel, schedule)); schedule.relList.forEach(rel -> scheduleRelDao.insertSelective(rel)); } private void validateRelData(PrScheduleRel rel, PrSchedule schedule) { validatePlan(rel); validateStation(rel); rel.scheduleId = schedule.id; } private void validatePlan(PrScheduleRel rel) { if (rel.planId != null && rel.nodeId != null) { long countPlan = assemblyPlanDao.countByPlanIdAndNodeId(rel.planId, rel.nodeId); if (countPlan == 0) { log.error("排班数据不匹配, planId:{}, nodeId:{}", rel.planId, rel.nodeId); throw new RuntimeException("排班数据不匹配, planId:" + rel.planId + ", nodeId:" + rel.nodeId); } } } private void validateStation(PrScheduleRel rel) { if (rel.stationId != null) { Optional stationOpt = Optional.ofNullable(stationDao.selectByPrimaryKey(rel.stationId)); stationOpt.orElseThrow(() -> { log.error("工站信息不存在, stationId:{}", rel.stationId); return new RuntimeException("工站信息不存在, stationId:" + rel.stationId); }); } } public PrSchedule selectById(Long id) { return scheduleDao.selectByPrimaryKey(id); } public List selectById() { List userList = baUserDao.getUserList(); return userList; } public QueryResultVo> selectSome(QueryVo vo) { Map params = (Map) PojoUtils.generalize(vo); //查询符合条件的记录总数 Long itemTotal = scheduleDao.selectSomeCount(params); QueryResultVo> rsVo = new QueryResultVo<>(vo.pageSize, vo.pageCurr); //计算分页等信息 rsVo.calculateAndSet(itemTotal, params); //查询符合条件的记录 rsVo.obj = scheduleDao.selectSome(params); return rsVo; } public List selectPlan(QueryVo vo) { List list = assemblyPlanDao.selectByPlanName(vo.planName); Map map = new ConcurrentHashMap<>(); // 使用并发安全的Map for(JSONObject item:list){ String planId = String.valueOf(item.getObj("planId")); JSONObject innerObject = new JSONObject() .set("nodeId", String.valueOf(item.getObj("nodeId"))) .set("content", item.getObj("content")); if(map.containsKey(planId)){ JSONArray array = (JSONArray)map.get(planId).get("nodes"); array.add(innerObject); }else{ JSONArray array = new JSONArray(); array.add(innerObject); JSONObject outObject= new JSONObject() .set("planId", planId) .set("planName", item.getObj("planName")) .set("nodes", array); map.put(planId,outObject); } } return map.values().stream().collect(Collectors.toList()); } public List selectAll(QueryVo queryVo) { return scheduleDao.selectAll(queryVo.scheduleDate, queryVo.userId); } }