| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.approve.utils.StartAndEndDateDto; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.excel.ConfigurableMergeStrategy; |
| | | import com.ruoyi.common.utils.excel.CustomCellStyleHandler; |
| | | import com.ruoyi.lavorissue.dto.StatisticsLaborIssue; |
| | |
| | | import com.ruoyi.project.system.mapper.SysDictDataMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.poi.ss.util.CellRangeAddress; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | |
| | | StartAndEndDateDto startAndEndDateDto = getStartAndEndDateDto(laborIssue.getSeason(), laborIssue.getIssueDate()); |
| | | laborIssue.setStartDate(startAndEndDateDto.getStartDate()); |
| | | laborIssue.setEndDate(startAndEndDateDto.getEndDate()); |
| | | IPage<LaborIssue> laborIssueIPage = lavorIssueMapper.listPage(page, laborIssue); |
| | | return laborIssueIPage; |
| | | return lavorIssueMapper.listPage(page, laborIssue); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> statisticsList(LaborIssue laborIssue){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | StartAndEndDateDto startAndEndDateDto = getStartAndEndDateDto(laborIssue.getSeason(), laborIssue.getIssueDate()); |
| | | laborIssue.setStartDate(startAndEndDateDto.getStartDate()); |
| | | laborIssue.setEndDate(startAndEndDateDto.getEndDate()); |
| | | List<LaborIssue> laborIssueIPage = lavorIssueMapper.list(laborIssue); |
| | | |
| | | // 使用可变的ArrayList替换默认的不可变列表 |
| | | List<Map<String, Object>> records = new ArrayList<>(); |
| | | |
| | | Map<String, List<LaborIssue>> collect = laborIssueIPage.stream().collect(Collectors.groupingBy(LaborIssue::getStaffNo)); |
| | | collect.forEach((k, v) -> { |
| | | HashMap<String, Object> hashMap = new HashMap<>(); |
| | | LaborIssue laborIssue1 = v.get(0); |
| | | hashMap.put("id", v.stream().map(LaborIssue::getId)); |
| | | hashMap.put("deptName", laborIssue1.getDeptName()); |
| | | hashMap.put("orderNo", laborIssue1.getOrderNo()); |
| | | hashMap.put("staffId", laborIssue1.getStaffId()); |
| | | hashMap.put("staffName", laborIssue1.getStaffName()); |
| | | hashMap.put("staffNo", laborIssue1.getStaffNo()); |
| | | hashMap.put("dictType", laborIssue1.getDictType()); |
| | | hashMap.put("dictTypeName", laborIssue1.getDictTypeName()); |
| | | hashMap.put("factoryDate", laborIssue1.getFactoryDate() == null ? "" : sdf.format(laborIssue1.getFactoryDate())); |
| | | hashMap.put("issueDate", laborIssue1.getIssueDate() == null ? "" : sdf.format(laborIssue1.getIssueDate())); |
| | | hashMap.put("adoptedDate", laborIssue1.getAdoptedDate() == null ? "" : sdf.format(laborIssue1.getAdoptedDate())); |
| | | hashMap.put("tenantId", laborIssue1.getTenantId()); |
| | | Map<String, List<LaborIssue>> collect1 = v.stream().collect(Collectors.groupingBy(LaborIssue::getDictId)); |
| | | collect1.forEach((k1, v1) -> { |
| | | hashMap.put(k1, v1.stream() |
| | | .mapToLong(LaborIssue::getNum) |
| | | .sum()); |
| | | }); |
| | | records.add(hashMap); |
| | | }); |
| | | return records; |
| | | } |
| | | |
| | | public StartAndEndDateDto getStartAndEndDateDto(Integer season,Date payDate){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | StartAndEndDateDto startAndEndDateDto = new StartAndEndDateDto(); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | int currentYear = calendar.get(Calendar.YEAR); |
| | | startAndEndDateDto.setYear(currentYear); |
| | | if(season != null){ |
| | | Calendar calendar = Calendar.getInstance(); |
| | | int currentYear = calendar.get(Calendar.YEAR); |
| | | switch (season){ |
| | | case 1: |
| | | startAndEndDateDto.setStartDate(currentYear + "-01-01"); |
| | | startAndEndDateDto.setEndDate(currentYear + "-03-31"); |
| | | startAndEndDateDto.setStartMonth(1); |
| | | startAndEndDateDto.setEndMonth(3); |
| | | break; |
| | | case 2: |
| | | startAndEndDateDto.setStartDate(currentYear + "-04-01"); |
| | | startAndEndDateDto.setEndDate(currentYear + "-06-30"); |
| | | startAndEndDateDto.setStartMonth(4); |
| | | startAndEndDateDto.setEndMonth(6); |
| | | break; |
| | | case 3: |
| | | startAndEndDateDto.setStartDate(currentYear + "-07-01"); |
| | | startAndEndDateDto.setEndDate(currentYear + "-09-30"); |
| | | startAndEndDateDto.setStartMonth(7); |
| | | startAndEndDateDto.setEndMonth(9); |
| | | break; |
| | | case 4: |
| | | startAndEndDateDto.setStartDate(currentYear + "-10-01"); |
| | | startAndEndDateDto.setEndDate(currentYear + "-12-31"); |
| | | startAndEndDateDto.setStartMonth(10); |
| | | startAndEndDateDto.setEndMonth(12); |
| | | break; |
| | | } |
| | | } |
| | | if(payDate != null){ |
| | | Date lastDayOfMonth = getLastDayOfMonth(payDate); |
| | | startAndEndDateDto.setStartDate(sdf.format(payDate)); |
| | | Date firstDayOfMonth = getFirstDayOfMonth(payDate); |
| | | startAndEndDateDto.setStartDate(sdf.format(firstDayOfMonth)); |
| | | startAndEndDateDto.setEndDate(sdf.format(lastDayOfMonth)); |
| | | startAndEndDateDto.setStartMonth(payDate.getMonth() + 1); |
| | | startAndEndDateDto.setEndMonth(payDate.getMonth() + 1); |
| | | } |
| | | return startAndEndDateDto; |
| | | } |
| | |
| | | private SysDictDataMapper sysDictDataMapper; |
| | | |
| | | @Override |
| | | public void exportCopy(HttpServletResponse response) throws UnsupportedEncodingException { |
| | | public void exportCopy(HttpServletResponse response, LaborIssue laborIssue) throws UnsupportedEncodingException { |
| | | List<SysDictData> sys_lavor_issue = sysDictDataMapper.selectDictDataByType("sys_lavor_issue"); |
| | | if(CollectionUtils.isEmpty(sys_lavor_issue)){ |
| | | throw new RuntimeException("字典数据为空"); |
| | | } |
| | | List<LaborIssue> laborIssues = lavorIssueMapper.list(new LaborIssue()); |
| | | StartAndEndDateDto startAndEndDateDto = getStartAndEndDateDto(laborIssue.getSeason(), laborIssue.getIssueDate()); |
| | | BeanUtils.copyProperties(startAndEndDateDto, laborIssue); |
| | | List<LaborIssue> laborIssues = lavorIssueMapper.list(laborIssue); |
| | | if (CollectionUtils.isEmpty(laborIssues)) { |
| | | throw new RuntimeException("数据为空"); |
| | | } |
| | |
| | | response.setContentType("application/vnd.ms-excel"); |
| | | response.setCharacterEncoding("UTF-8"); |
| | | // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 |
| | | String fileName = URLEncoder.encode("外部装箱单", "UTF-8"); |
| | | String fileName = URLEncoder.encode("劳保台账", "UTF-8"); |
| | | response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); |
| | | |
| | | try { |
| | |
| | | .registerWriteHandler(new ConfigurableMergeStrategy(exportExternalPackingListGetMerge(4,sys_lavor_issue.size(),laborIssueMap.size()))) |
| | | .build(); |
| | | |
| | | List<List<List<String>>> data = completeExternalPackingList(laborIssueMap, sys_lavor_issue); |
| | | List<List<List<String>>> data = completeExternalPackingList(laborIssueMap, sys_lavor_issue,laborIssue); |
| | | |
| | | for (int i = 0; i < data.size(); i++) { |
| | | List<List<String>> list = data.get(i); |
| | | |
| | | //获取sheet0对象 |
| | | WriteSheet mainSheet = EasyExcel.writerSheet(i, "外部装箱单" + i).build(); |
| | | WriteSheet mainSheet = EasyExcel.writerSheet(i, "劳保台账" + i).build(); |
| | | //向sheet0写入数据 传入空list这样只导出表头 |
| | | excelWriter.write(list, mainSheet); |
| | | } |
| | |
| | | |
| | | |
| | | // 处理外部装箱单数据 |
| | | private List<List<List<String>>> completeExternalPackingList(Map<String, List<LaborIssue>> listMap,List<SysDictData> sys_lavor_issue) { |
| | | private List<List<List<String>>> completeExternalPackingList(Map<String, List<LaborIssue>> listMap,List<SysDictData> sys_lavor_issue,LaborIssue obj) { |
| | | List<List<List<String>>> data = new ArrayList<>(); |
| | | int num = sys_lavor_issue.size(); |
| | | |
| | |
| | | list.add(""); |
| | | list.add("企业管理科"); |
| | | list.add(""); |
| | | list.add("企业管理科2025年1月-2025年3月劳保发放计划表"); |
| | | list.add("企业管理科" + obj.getYear() + "年" + obj.getStartMonth() + "月-" + obj.getYear() + "年" + obj.getEndMonth() +"月劳保发放计划表"); |
| | | for (int i = 1; i <= num; i++){ |
| | | list.add(""); |
| | | } |
| | |
| | | item.add(list1); |
| | | |
| | | List<String> list2 = new ArrayList<>(); |
| | | list2.add("2025"); |
| | | list2.add("1"); |
| | | list2.add("2025"); |
| | | list2.add("3"); |
| | | list2.add(obj.getYear().toString()); |
| | | list2.add(obj.getStartMonth().toString()); |
| | | list2.add(obj.getYear().toString()); |
| | | list2.add(obj.getEndMonth().toString()); |
| | | for (int i = 0; i <= num; i++){ |
| | | list.add(""); |
| | | } |
| | |
| | | calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); // 设置为当月最后一天 |
| | | return calendar.getTime(); // 返回Date对象 |
| | | } |
| | | |
| | | /** |
| | | * 获取当月第一天 |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public Date getFirstDayOfMonth(Date date) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(date); // 设置传入的Date |
| | | calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); // 设置为当月第一天 |
| | | return calendar.getTime(); // 返回Date对象 |
| | | } |
| | | |
| | | } |