package com.yuanchu.mom.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.common.PrintChina; import com.yuanchu.mom.dto.*; import com.yuanchu.mom.mapper.*; import com.yuanchu.mom.pojo.AuxiliaryCorrectionHours; import com.yuanchu.mom.pojo.Power; import com.yuanchu.mom.pojo.User; import com.yuanchu.mom.service.AuxiliaryOriginalHoursService; import com.yuanchu.mom.utils.QueryWrappers; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service public class AuxiliaryOriginalHoursServiceImpl implements AuxiliaryOriginalHoursService { @Resource GetLook getLook; @Resource UserMapper userMapper; @Resource PowerMapper powerMapper; @Resource AuxiliaryOriginalHoursMapper auxiliaryOriginalHoursMapper; @Resource AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper; @Resource AuxiliaryWorkingHoursDayMapper auxiliaryWorkingHoursDayMapper; @Resource AuxiliaryCorrectionHoursMapper auxiliaryCorrectionHoursMapper; @Override public Map selectAuxiliaryOriginalHours(Page page, AuxiliaryOriginalHoursLookDto auxiliaryOriginalHoursLookDto) { Map map = new HashMap<>(); List ids = new ArrayList<>(); ; map.put("head", PrintChina.printChina(AuxiliaryCorrectionHoursDto.class)); //判断组长,组员,管理员权限 Map map1 = getLook.selectPowerByMethodAndUserId("selectAuxiliaryOriginalHours"); User user = userMapper.selectById(map1.get("userId")); Integer roleId = user.getRoleId(); Power power = powerMapper.selectOne(Wrappers.lambdaQuery().eq(Power::getRoleId, roleId).eq(Power::getMenuMethod, "leader")); if (ObjectUtils.isEmpty(power)) { //不是组长 if (map1.get("look") == 1) { //是组员 ids.add(map1.get("userId")); } else { //管理员(不添加限制条件所有人都可以看) } } else { //是组长 //查询组长下的组员 List users = userMapper.selectList(Wrappers.lambdaQuery().like(User::getDepartLimsId, user.getDepartLimsId())); if (ObjectUtils.isNotEmpty(users)) { ids.addAll(users.stream().map(User::getId).distinct().collect(Collectors.toList())); } } String departLims = auxiliaryOriginalHoursLookDto.getDepartLims(); auxiliaryOriginalHoursLookDto.setDepartLims(null); String name = auxiliaryOriginalHoursLookDto.getName(); auxiliaryOriginalHoursLookDto.setName(null); if (ObjectUtils.isNotEmpty(departLims)) { //先模糊查询出来id List ides = auxiliaryCorrectionHoursMapper.selDepartLimsByName(departLims); for (Integer ide : ides) { List users = userMapper.selectList(Wrappers.lambdaQuery() .like(User::getDepartLimsId, ide) .eq(User::getState, 1)); if (ObjectUtils.isNotEmpty(users)) { ides.clear(); ids.addAll(users.stream().map(User::getId).distinct().collect(Collectors.toList())); } } } if (ObjectUtils.isNotEmpty(name)) { ids.clear(); ids.add(userMapper.selectOne(Wrappers.lambdaQuery().like(User::getName, name)).getId()); } IPage originalHoursDtoIPage = new Page<>(); originalHoursDtoIPage.setSize(page.getSize()); originalHoursDtoIPage.setCurrent(page.getCurrent()); List auxiliaryOriginalHoursDtos = new ArrayList<>(); //产量工时 List> maps = auxiliaryOutputWorkingHoursMapper.totalHours(auxiliaryOriginalHoursLookDto.getMonth(), ids); if (ObjectUtils.isNotEmpty(maps)) { for (Map objectMap : maps) { auxiliaryOriginalHoursDtos.add(getData(objectMap, "产量工时")); } } //辅助工时 List> maps1 = auxiliaryWorkingHoursDayMapper.totalHours(auxiliaryOriginalHoursLookDto.getMonth(), ids); if (ObjectUtils.isNotEmpty(maps1)) { for (Map objectMap : maps1) { auxiliaryOriginalHoursDtos.add(getData(objectMap, "辅助工时")); } } //加班工时 //总工时 List> maps2 = auxiliaryOriginalHoursMapper.totalHours(auxiliaryOriginalHoursLookDto.getMonth(), ids); if (ObjectUtils.isNotEmpty(maps2)) { //产量工时+辅助工时都不为空 for (Map objectMap : maps2) { auxiliaryOriginalHoursDtos.add(getData(objectMap, "总工时")); } } //如果产量工时为空 else if (ObjectUtils.isNotEmpty(maps1)) { for (Map objectMap : maps1) { auxiliaryOriginalHoursDtos.add(getData(objectMap, "总工时")); } } else if (ObjectUtils.isNotEmpty(maps)) { for (Map objectMap : maps) { auxiliaryOriginalHoursDtos.add(getData(objectMap, "总工时")); } } originalHoursDtoIPage.setRecords(auxiliaryOriginalHoursDtos); map.put("body", originalHoursDtoIPage); return map; } //导出原始工时 @Override public void exportWorkingHours(AuxiliaryOriginalHoursLookDto auxiliaryOriginalHoursLookDto, HttpServletResponse response) throws IOException { List auxiliaryOriginalHoursDtos = new ArrayList(); //查询原始工时(使用分页查询) IPage body = (IPage) selectAuxiliaryOriginalHours(new Page(-1, -1), auxiliaryOriginalHoursLookDto).get("body"); auxiliaryOriginalHoursDtos=body.getRecords(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("UTF-8"); // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 String fileName = URLEncoder.encode("工时统计导出", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); try { // 新建ExcelWriter ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); WriteSheet mainSheet = EasyExcel.writerSheet(0, "原始工时导出").head(AuxiliaryOriginalHoursDto.class).build(); excelWriter.write(auxiliaryOriginalHoursDtos, mainSheet); // 关闭流 excelWriter.finish(); } catch (IOException e) { throw new RuntimeException("导出失败"); } } private AuxiliaryOriginalHoursDto getData(Map objectMap, String type) { AuxiliaryOriginalHoursDto auxiliaryOriginalHoursDto = new AuxiliaryOriginalHoursDto(); auxiliaryOriginalHoursDto.setName(objectMap.get("name").toString());//姓名 auxiliaryOriginalHoursDto.setType(type); auxiliaryOriginalHoursDto.setMonth(objectMap.get("month").toString().substring(0, 7));//月份 //查询这个人这个月是否有修正的产量工时 AuxiliaryCorrectionHours auxiliaryCorrectionHours = auxiliaryCorrectionHoursMapper.selectOne(Wrappers.lambdaQuery() .eq(AuxiliaryCorrectionHours::getNameUser, userMapper.selectOne(Wrappers.lambdaQuery().eq(User::getName, auxiliaryOriginalHoursDto.getName())).getId()) .eq(AuxiliaryCorrectionHours::getType, auxiliaryOriginalHoursDto.getType()) .eq(AuxiliaryCorrectionHours::getMonth, auxiliaryOriginalHoursDto.getMonth())); switch (objectMap.get("month").toString().substring(8, 10)) { case "01": auxiliaryOriginalHoursDto.setOneHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getOneHours().compareTo(auxiliaryOriginalHoursDto.getOneHours()) != 0) { auxiliaryOriginalHoursDto.setOne(1); } } break; case "02": auxiliaryOriginalHoursDto.setTwoHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwoHours().compareTo(auxiliaryOriginalHoursDto.getTwoHours()) != 0) { auxiliaryOriginalHoursDto.setTwo(1); } } break; case "03": auxiliaryOriginalHoursDto.setThreeHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getThreeHours().compareTo(auxiliaryOriginalHoursDto.getThreeHours()) != 0) { auxiliaryOriginalHoursDto.setThree(1); } } break; case "04": auxiliaryOriginalHoursDto.setFourHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getFourHours().compareTo(auxiliaryOriginalHoursDto.getFourHours()) != 0) { auxiliaryOriginalHoursDto.setFour(1); } } break; case "05": auxiliaryOriginalHoursDto.setFiveHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getFiveHours().compareTo(auxiliaryOriginalHoursDto.getFiveHours()) != 0) { auxiliaryOriginalHoursDto.setFive(1); } } break; case "06": auxiliaryOriginalHoursDto.setSixHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getSixHours().compareTo(auxiliaryOriginalHoursDto.getSixHours()) != 0) { auxiliaryOriginalHoursDto.setSix(1); } } break; case "07": auxiliaryOriginalHoursDto.setSevenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getSevenHours().compareTo(auxiliaryOriginalHoursDto.getSevenHours()) != 0) { auxiliaryOriginalHoursDto.setSeven(1); } } break; case "08": auxiliaryOriginalHoursDto.setEightHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getEightHours().compareTo(auxiliaryOriginalHoursDto.getEightHours()) != 0) { auxiliaryOriginalHoursDto.setEight(1); } } break; case "09": auxiliaryOriginalHoursDto.setNineHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getNineHours().compareTo(auxiliaryOriginalHoursDto.getNineHours()) != 0) { auxiliaryOriginalHoursDto.setNine(1); } } break; case "10": auxiliaryOriginalHoursDto.setTenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTenHours().compareTo(auxiliaryOriginalHoursDto.getTenHours()) != 0) { auxiliaryOriginalHoursDto.setTen(1); } } break; case "11": auxiliaryOriginalHoursDto.setElevenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getElevenHours().compareTo(auxiliaryOriginalHoursDto.getElevenHours()) != 0) { auxiliaryOriginalHoursDto.setEleven(1); } } break; case "12": auxiliaryOriginalHoursDto.setTwelveHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwelveHours().compareTo(auxiliaryOriginalHoursDto.getTwelveHours()) != 0) { auxiliaryOriginalHoursDto.setTwelve(1); } } break; case "13": auxiliaryOriginalHoursDto.setThirteenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getThirteenHours().compareTo(auxiliaryOriginalHoursDto.getThirteenHours()) != 0) { auxiliaryOriginalHoursDto.setThirteen(1); } } break; case "14": auxiliaryOriginalHoursDto.setFourteenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getFourteenHours().compareTo(auxiliaryOriginalHoursDto.getFourteenHours()) != 0) { auxiliaryOriginalHoursDto.setFourteen(1); } } break; case "15": auxiliaryOriginalHoursDto.setFifteenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getFifteenHours().compareTo(auxiliaryOriginalHoursDto.getFifteenHours()) != 0) { auxiliaryOriginalHoursDto.setFifteen(1); } } break; case "16": auxiliaryOriginalHoursDto.setSixteenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getSixteenHours().compareTo(auxiliaryOriginalHoursDto.getSixteenHours()) != 0) { auxiliaryOriginalHoursDto.setSixteen(1); } } break; case "17": auxiliaryOriginalHoursDto.setSeventeenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getSeventeenHours().compareTo(auxiliaryOriginalHoursDto.getSeventeenHours()) != 0) { auxiliaryOriginalHoursDto.setSeventeen(1); } } break; case "18": auxiliaryOriginalHoursDto.setEighteenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getEighteenHours().compareTo(auxiliaryOriginalHoursDto.getEighteenHours()) != 0) { auxiliaryOriginalHoursDto.setEighteen(1); } } break; case "19": auxiliaryOriginalHoursDto.setNineteenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getNineteenHours().compareTo(auxiliaryOriginalHoursDto.getNineteenHours()) != 0) { auxiliaryOriginalHoursDto.setNineteen(1); } } break; case "20": auxiliaryOriginalHoursDto.setTwentyHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentyHours().compareTo(auxiliaryOriginalHoursDto.getTwentyHours()) != 0) { auxiliaryOriginalHoursDto.setTwenty(1); } } break; case "21": auxiliaryOriginalHoursDto.setTwentyOneHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentyOneHours().compareTo(auxiliaryOriginalHoursDto.getTwentyOneHours()) != 0) { auxiliaryOriginalHoursDto.setTwentyOne(1); } } break; case "22": auxiliaryOriginalHoursDto.setTwentyTwoHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentyTwoHours().compareTo(auxiliaryOriginalHoursDto.getTwentyTwoHours()) != 0) { auxiliaryOriginalHoursDto.setTwentyTwo(1); } } break; case "23": auxiliaryOriginalHoursDto.setTwentyThreeHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentyThreeHours().compareTo(auxiliaryOriginalHoursDto.getTwentyThreeHours()) != 0) { auxiliaryOriginalHoursDto.setTwentyThree(1); } } break; case "24": auxiliaryOriginalHoursDto.setTwentyFourHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentyFourHours().compareTo(auxiliaryOriginalHoursDto.getTwentyFourHours()) != 0) { auxiliaryOriginalHoursDto.setTwentyFour(1); } } break; case "25": auxiliaryOriginalHoursDto.setTwentyFiveHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentyFiveHours().compareTo(auxiliaryOriginalHoursDto.getTwentyFiveHours()) != 0) { auxiliaryOriginalHoursDto.setTwentyFive(1); } } break; case "26": auxiliaryOriginalHoursDto.setTwentySixHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentySixHours().compareTo(auxiliaryOriginalHoursDto.getTwentySixHours()) != 0) { auxiliaryOriginalHoursDto.setTwentySix(1); } } break; case "27": auxiliaryOriginalHoursDto.setTwentySevenHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentySevenHours().compareTo(auxiliaryOriginalHoursDto.getTwentySevenHours()) != 0) { auxiliaryOriginalHoursDto.setTwentySeven(1); } } break; case "28": auxiliaryOriginalHoursDto.setTwentyEightHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentyEightHours().compareTo(auxiliaryOriginalHoursDto.getTwentyEightHours()) != 0) { auxiliaryOriginalHoursDto.setTwentyEight(1); } } break; case "29": auxiliaryOriginalHoursDto.setTwentyNineHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getTwentyNineHours().compareTo(auxiliaryOriginalHoursDto.getTwentyNineHours()) != 0) { auxiliaryOriginalHoursDto.setTwentyNine(1); } } break; case "30": auxiliaryOriginalHoursDto.setThirtyHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getThirtyHours().compareTo(auxiliaryOriginalHoursDto.getThirtyHours()) != 0) { auxiliaryOriginalHoursDto.setThirty(1); } } break; case "31": auxiliaryOriginalHoursDto.setThirtyOneHours(Double.parseDouble(objectMap.get("manHours").toString())); if (ObjectUtils.isNotEmpty(auxiliaryCorrectionHours)) { if (auxiliaryCorrectionHours.getThirtyOneHours().compareTo(auxiliaryOriginalHoursDto.getThirtyOneHours()) != 0) { auxiliaryOriginalHoursDto.setThirtyOne(1); } } break; } return auxiliaryOriginalHoursDto; } }