From 0b7e2752b6f1e87084b837043291c890cca780a8 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期三, 15 十月 2025 19:11:48 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java | 1 ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java | 2 ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml | 17 + ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotificationUser.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/importExcel/EmployeeImportExcel.java | 99 +++++++++ ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java | 6 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml | 2 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java | 6 ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationsMapper.xml | 1 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotifationUserController.java | 124 ++++++++++++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java | 42 ++- ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java | 2 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java | 209 +++++++++++++++++--- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java | 32 +++ ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java | 3 15 files changed, 492 insertions(+), 57 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java index 9b641d3..58bd53f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/AssetHouseInspectionItemController.java @@ -269,6 +269,7 @@ e.printStackTrace(); } } + } @Log(title = "房屋巡检导入", businessType = BusinessType.INSERT) @@ -345,6 +346,7 @@ assetHouseInspectionDetail.setRemark(assetHouseInspectionImport.getHouseCloseStatus()); if (assetHouseInspectionImport.getHouseCloseStatus().equals("正常")){ assetHouseInspectionDetail.setInspectionResult(true); + assetHouseInspectionRecord.setHouseCloseStatus("正常"); }else{ assetHouseInspectionDetail.setInspectionResult(false); } @@ -352,14 +354,13 @@ String waterStatus1 = assetHouseInspectionImport.getWaterStatus1(); String waterStatus2 = assetHouseInspectionImport.getWaterStatus2(); String waterStatus3 = assetHouseInspectionImport.getWaterStatus3(); - assetHouseInspectionRecord.setWaterElectronicGasCloseStatus("正常"); + AssetHouseInspectionDetail assetHouseInspectionDetailWatter1 = new AssetHouseInspectionDetail(); assetHouseInspectionDetailWatter1.setInspectionItemId(3); assetHouseInspectionDetailWatter1.setItemName("水电气表关闭情况"); assetHouseInspectionDetailWatter1.setSubItemId(4); assetHouseInspectionDetailWatter1.setSubItemName("水表关闭情况"); assetHouseInspectionDetailWatter1.setRemark(assetHouseInspectionImport.getWaterStatus1()); - assetHouseInspectionDetails.add(assetHouseInspectionDetailWatter1); AssetHouseInspectionDetail assetHouseInspectionDetailWatter2 = new AssetHouseInspectionDetail(); assetHouseInspectionDetailWatter2.setInspectionItemId(3); @@ -367,7 +368,6 @@ assetHouseInspectionDetailWatter2.setSubItemId(5); assetHouseInspectionDetailWatter2.setSubItemName("气表关闭情况"); assetHouseInspectionDetailWatter2.setRemark(assetHouseInspectionImport.getWaterStatus2()); - assetHouseInspectionDetails.add(assetHouseInspectionDetailWatter2); AssetHouseInspectionDetail assetHouseInspectionDetailWatter3 = new AssetHouseInspectionDetail(); assetHouseInspectionDetailWatter3.setInspectionItemId(3); @@ -375,10 +375,11 @@ assetHouseInspectionDetailWatter3.setSubItemId(6); assetHouseInspectionDetailWatter3.setSubItemName("电表关闭情况"); assetHouseInspectionDetailWatter3.setRemark(assetHouseInspectionImport.getWaterStatus3()); - assetHouseInspectionDetails.add(assetHouseInspectionDetailWatter3); if (waterStatus1.equals("正常")&&waterStatus2.equals("正常")&&waterStatus3.equals("正常")){ + assetHouseInspectionDetailWatter1.setInspectionResult(true); assetHouseInspectionDetailWatter2.setInspectionResult(true); assetHouseInspectionDetailWatter3.setInspectionResult(true); + assetHouseInspectionRecord.setWaterElectronicGasCloseStatus("正常"); }else{ StringBuilder stringBuilder = new StringBuilder(); if (!waterStatus1.equals("正常")){ @@ -404,6 +405,10 @@ } assetHouseInspectionRecord.setInnerStatus(stringBuilder.toString()); } + assetHouseInspectionDetails.add(assetHouseInspectionDetailWatter1); + assetHouseInspectionDetails.add(assetHouseInspectionDetailWatter2); + assetHouseInspectionDetails.add(assetHouseInspectionDetailWatter3); + String innerStatus1 = assetHouseInspectionImport.getInnerStatus1(); String innerStatus2 = assetHouseInspectionImport.getInnerStatus2(); String innerStatus3 = assetHouseInspectionImport.getInnerStatus3(); @@ -414,7 +419,6 @@ assetHouseInspectionDetailInner1.setSubItemId(8); assetHouseInspectionDetailInner1.setSubItemName("墙壁漏水情况"); assetHouseInspectionDetailInner1.setRemark(assetHouseInspectionImport.getWaterStatus1()); - assetHouseInspectionDetails.add(assetHouseInspectionDetailInner1); AssetHouseInspectionDetail assetHouseInspectionDetailInner2 = new AssetHouseInspectionDetail(); assetHouseInspectionDetailInner2.setInspectionItemId(7); @@ -422,7 +426,6 @@ assetHouseInspectionDetailInner2.setSubItemId(9); assetHouseInspectionDetailInner2.setSubItemName("设备损坏情况"); assetHouseInspectionDetailInner2.setRemark(assetHouseInspectionImport.getWaterStatus2()); - assetHouseInspectionDetails.add(assetHouseInspectionDetailInner2); AssetHouseInspectionDetail assetHouseInspectionDetailInner3 = new AssetHouseInspectionDetail(); assetHouseInspectionDetailInner3.setInspectionItemId(7); @@ -430,7 +433,6 @@ assetHouseInspectionDetailInner3.setSubItemId(10); assetHouseInspectionDetailInner3.setSubItemName("墙壁掉灰情况"); assetHouseInspectionDetailInner3.setRemark(assetHouseInspectionImport.getWaterStatus3()); - assetHouseInspectionDetails.add(assetHouseInspectionDetailInner3); AssetHouseInspectionDetail assetHouseInspectionDetailInner4 = new AssetHouseInspectionDetail(); assetHouseInspectionDetailInner4.setInspectionItemId(7); @@ -438,9 +440,13 @@ assetHouseInspectionDetailInner4.setSubItemId(11); assetHouseInspectionDetailInner4.setSubItemName("地瓷砖开裂情况"); assetHouseInspectionDetailInner4.setRemark(assetHouseInspectionImport.getWaterStatus3()); - assetHouseInspectionDetails.add(assetHouseInspectionDetailInner4); if (innerStatus1.equals("正常")&&innerStatus2.equals("正常")&&innerStatus3.equals("正常")&&innerStatus4.equals("正常")){ assetHouseInspectionRecord.setInnerStatus("正常"); + assetHouseInspectionDetailInner4.setInspectionResult(true); + assetHouseInspectionDetailInner3.setInspectionResult(true); + assetHouseInspectionDetailInner2.setInspectionResult(true); + assetHouseInspectionDetailInner1.setInspectionResult(true); + }else{ StringBuilder stringBuilder = new StringBuilder(); if (!innerStatus1.equals("正常")){ @@ -451,27 +457,32 @@ } if (!innerStatus2.equals("正常")){ stringBuilder.append(innerStatus2).append("|"); - assetHouseInspectionDetailInner1.setInspectionResult(false); + assetHouseInspectionDetailInner2.setInspectionResult(false); }else{ - assetHouseInspectionDetailInner1.setInspectionResult(true); + assetHouseInspectionDetailInner2.setInspectionResult(true); } if (!innerStatus3.equals("正常")){ stringBuilder.append(innerStatus3).append("|"); - assetHouseInspectionDetailInner1.setInspectionResult(false); + assetHouseInspectionDetailInner3.setInspectionResult(false); }else{ - assetHouseInspectionDetailInner1.setInspectionResult(true); + assetHouseInspectionDetailInner3.setInspectionResult(true); } if (!innerStatus4.equals("正常")){ stringBuilder.append(innerStatus4).append("|"); - assetHouseInspectionDetailInner1.setInspectionResult(false); + assetHouseInspectionDetailInner4.setInspectionResult(false); }else{ - assetHouseInspectionDetailInner1.setInspectionResult(true); + assetHouseInspectionDetailInner4.setInspectionResult(true); } if (stringBuilder.length()>0){ stringBuilder.deleteCharAt(stringBuilder.length()-1); } assetHouseInspectionRecord.setInnerStatus(stringBuilder.toString()); } + assetHouseInspectionDetails.add(assetHouseInspectionDetailInner4); + assetHouseInspectionDetails.add(assetHouseInspectionDetailInner3); + assetHouseInspectionDetails.add(assetHouseInspectionDetailInner2); + assetHouseInspectionDetails.add(assetHouseInspectionDetailInner1); + assetHouseInspectionRecord.setRemarks(assetHouseInspectionImport.getRemark()); assetHouseInspectionRecordService.save(assetHouseInspectionRecord); assetHouseInspectionDetails.add(assetHouseInspectionDetail); @@ -481,6 +492,9 @@ assetHouseInspectionDetailService.saveBatch(assetHouseInspectionDetails); } + if(!result.isEmpty()){ + return R.fail(result.toString()); + } return R.ok(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotifationUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotifationUserController.java index 6437622..e33b0f2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotifationUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotifationUserController.java @@ -1,8 +1,36 @@ package com.ruoyi.web.controller.api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.entity.TDept; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.model.OaNotification; +import com.ruoyi.system.model.OaNotificationUser; +import com.ruoyi.system.query.NotificationListQuery; +import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.OaNotifationUserService; +import com.ruoyi.system.service.OaNotificationService; +import com.ruoyi.system.service.TDeptService; +import com.ruoyi.system.vo.system.NotificationDeptUserDetailVO; +import com.ruoyi.system.vo.system.NotificationDetailVO; +import com.ruoyi.system.vo.system.NotificationUserDetailVO; +import com.ruoyi.system.vo.system.NotificationVO; +import io.swagger.annotations.ApiOperation; +import jdk.nashorn.internal.parser.Token; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * <p> @@ -15,6 +43,98 @@ @RestController @RequestMapping("/oa-notifation-user") public class OaNotifationUserController { + @Resource + private OaNotificationService oaNotificationService; + @Resource + private OaNotifationUserService oaNotifationUserService; + @Resource + private TDeptService deptService; + @Resource + private ISysUserService sysUserService; + @Resource + private TokenService tokenService; + /** + * 获取部门树列表 + */ + @ApiOperation("消息通知分页列表") + @PostMapping("/pageList") + public R<PageInfo<NotificationVO>> pageListUser(@RequestBody NotificationListQuery query) { + Long userId = tokenService.getLoginUser().getUserId(); + query.setUserId(userId); + return R.ok(oaNotificationService.pageListUser(query)); + } + + + @ApiOperation(value = "消息通知详情") + @GetMapping(value = "/detail") + public R<NotificationDetailVO> detail(String id) { + NotificationDetailVO notificationDetailVO = new NotificationDetailVO(); + OaNotification oaNotification = oaNotificationService.getById(id); + BeanUtils.copyProperties(oaNotification, notificationDetailVO); +// StringBuilder deptName = new StringBuilder(); +// List<TDept> tDepts = deptService.list(); +// List<SysUser> sysUsers = sysUserService.selectAllList(); +// List<OaNotificationUser> notifationUsers = oaNotifationUserService.lambdaQuery().eq(OaNotificationUser::getNotificationId, id) +// .list(); +// Map<Integer, String> deptMap = tDepts.stream().collect(Collectors.toMap(TDept::getId, TDept::getDeptName)); +// Map<Long, SysUser> userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, e->e)); +// if (oaNotification.getType()){ +// for (String deptId : oaNotification.getDeptIds().split(",")) { +// String orDefault = deptMap.getOrDefault(Integer.parseInt(deptId), ""); +// deptName.append(orDefault).append(","); +// } +// if (deptName.length() > 0){ +// notificationDetailVO.setDeptName(deptName.substring(0,deptName.length()-1)); +// }else { +// notificationDetailVO.setDeptName(""); +// } +// List<NotificationDeptUserDetailVO> notificationUserVOS = new ArrayList<>(); +// List<Long> userIds = notifationUsers.stream().map(e -> e.getUserId().longValue()).collect(Collectors.toList()); +// if (!userIds.isEmpty()){ +// Map<String, List<SysUser>> deptUserList = sysUsers.stream().filter(e -> userIds.contains(e.getUserId())) +// .collect(Collectors.groupingBy(SysUser::getDeptId)); +// // 遍历这个map +// for (Map.Entry<String, List<SysUser>> entry : deptUserList.entrySet()) { +// List<SysUser> users = entry.getValue(); +// String deptId = entry.getKey(); +// NotificationDeptUserDetailVO notificationDeptUserDetailVO = new NotificationDeptUserDetailVO(); +// notificationDeptUserDetailVO.setDeptName(deptMap.getOrDefault(Integer.parseInt(deptId), "")); +// notificationDeptUserDetailVO.setUsers(users); +// // 查询部门下的员工数是否和users一致 +// long count = sysUsers.stream().filter(e -> e.getDeptId().equals(deptId)).count(); +// if (count==users.size()){ +// notificationDeptUserDetailVO.setIsAll(true); +// }else{ +// notificationDeptUserDetailVO.setIsAll(false); +// } +// notificationUserVOS.add(notificationDeptUserDetailVO); +// } +// } +// notificationDetailVO.setNotificationDeptUserDetailVOList(notificationUserVOS); +// +// }else{ +// +// notificationDetailVO.setDeptName("全部人员"); +// } +// List<NotificationUserDetailVO> notificationUserDetailVOS = new ArrayList<>(); + +// for (OaNotificationUser notifationUser : notifationUsers) { +// NotificationUserDetailVO notificationUserDetailVO = new NotificationUserDetailVO(); +// BeanUtils.copyProperties(notifationUser, notificationUserDetailVO); +// SysUser sysUser = userMap.get(notifationUser.getUserId().longValue()); +// if (sysUser==null){ +// continue; +// } +// notificationUserDetailVO.setDeptName(deptMap.getOrDefault(Integer.parseInt(sysUser.getDeptId()), "")); +// notificationUserDetailVO.setNickName(sysUser.getNickName()); +// notificationUserDetailVO.setPhonenumber(sysUser.getPhonenumber()); +// notificationUserDetailVO.setPosition(sysUser.getPosition()); +// notificationUserDetailVOS.add(notificationUserDetailVO); +// } + +// notificationDetailVO.setNotificationUserDetailVOS(notificationUserDetailVOS); + return R.ok(notificationDetailVO); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java index 74b8fe2..5b77a38 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -51,7 +52,8 @@ */ @ApiOperation("消息通知分页列表") @PostMapping("/pageList") - public R<PageInfo<NotificationVO>> pageList(@RequestBody NotificationListQuery query) { + public R<PageInfo<NotificationVO>> pageList(@RequestBody NotificationListQuery query + ) { return R.ok(oaNotificationService.pageList(query)); } @@ -164,7 +166,7 @@ } notificationDetailVO.setNotificationUserDetailVOS(notificationUserDetailVOS); - return R.ok(); + return R.ok(notificationDetailVO); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 5fa85d2..454d29b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -13,6 +13,7 @@ import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; @@ -20,12 +21,11 @@ import com.ruoyi.common.utils.WebUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.SysUserUpdateStatusDTO; -import com.ruoyi.system.importExcel.TSysUserImportExcel; +import com.ruoyi.system.importExcel.EmployeeImportExcel; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.SysUserVO; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.poi.ss.usermodel.Workbook; @@ -38,12 +38,13 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -65,6 +66,8 @@ @Autowired private ISysDeptService deptService; + @Autowired + private TDeptService tDeptService; @Autowired private TokenService tokenService; @@ -185,59 +188,189 @@ @ApiOperation(value = "员工导入") @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) @PostMapping("/importUser") - public R<String> importUser(@RequestPart("file") MultipartFile file) { - List<SysRole> sysRoles = roleService.selectRoleAll(); + public R<Object> importUser(@RequestPart("file") MultipartFile file) { ImportParams params = new ImportParams(); -// params.setTitleRows(1); // 标题行数 - params.setHeadRows(1); //表头行数 + params.setHeadRows(1); // 表头行数 InputStream inputStream = null; -// List<CustomerImportFailedData> failedData = new ArrayList<>(); - List<TSysUserImportExcel> locationExcelList; + List<EmployeeImportExcel> employeeExcelList; + try { inputStream = file.getInputStream(); - locationExcelList = ExcelImportUtil.importExcel(inputStream, - TSysUserImportExcel.class, params); + employeeExcelList = ExcelImportUtil.importExcel(inputStream, + EmployeeImportExcel.class, params); } catch (Exception e) { e.printStackTrace(); - throw new ServiceException("员工导入失败!"); + throw new ServiceException("员工导入失败: " + e.getMessage()); } finally { - try { - inputStream.close(); - } catch (IOException e) { - throw new ServiceException(e.getMessage()); + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } } } - if (CollectionUtils.isEmpty(locationExcelList)) { + + if (CollectionUtils.isEmpty(employeeExcelList)) { throw new ServiceException("员工数据为空!"); + } + + int successCount = 0; + int failCount = 0; + List<String> errorMessages = new ArrayList<>(); + + for (EmployeeImportExcel employeeExcel : employeeExcelList) { + try { + // 数据验证 + + // 数据验证 + if (StringUtils.isEmpty(employeeExcel.getNickName())) { + errorMessages.add("第" + (successCount + failCount + 1) + "行:姓名为空"); + failCount++; + continue; + } + + if (StringUtils.isEmpty(employeeExcel.getPhoneNumber())) { + errorMessages.add("第" + (successCount + failCount + 1) + "行:联系电话为空"); + failCount++; + continue; + } + + // 转换并保存用户 + SysUser sysUser = convertToSysUser(employeeExcel); + if (StringUtils.isEmpty(employeeExcel.getDepartment())) { + errorMessages.add("第" + (successCount + failCount + 1) + "行:所在股室为空"); + failCount++; + continue; + } + + TDept dept = tDeptService.lambdaQuery().eq(TDept::getDeptName, employeeExcel.getDepartment()) + .last("limit 1").one(); + if (dept == null){ + errorMessages.add("第" + (successCount + failCount + 1) + "行:所在股室不存在"); + failCount++; + continue; + } + sysUser.setDeptId(dept.getId().toString()); + userService.insertUser(sysUser); + successCount++; + + } catch (Exception e) { + errorMessages.add("第" + (successCount + failCount + 1) + "行:" + e.getMessage()); + failCount++; + e.printStackTrace(); + } } + JSONObject result = new JSONObject(); - List<SysUser> sysUsers = new ArrayList<>(); - for (TSysUserImportExcel locationExcel : locationExcelList) { - System.err.println(locationExcel); - SysUser sysUser = new SysUser(); - sysUser.setStatus("0"); - sysUser.setDelFlag("0"); - sysUser.setCreateBy(getUsername()); - userService.insertUser(sysUser); + result.put("successCount", successCount); + result.put("failCount", failCount); + result.put("totalCount", successCount + failCount); + if (!errorMessages.isEmpty()) { + result.put("errorMessages", errorMessages); + return R.fail(result.get("errorMessages")); } - if (!result.isEmpty()) { - return R.ok(result.toString()); + + return R.ok("导入完成", result.toString()); + } + + /** + * 解析日期字符串为Date对象 + * @param dateStr 日期字符串,格式如:2022.09 + * @return Date对象 + */ + private Date parseDate(String dateStr) { + if (StringUtils.isEmpty(dateStr)) { + return null; } - return R.ok(); + try { + // 支持 YYYY.MM 格式 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); + return sdf.parse(dateStr); + } catch (ParseException e) { + try { + // 支持 YYYY-MM 格式 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + return sdf.parse(dateStr); + } catch (ParseException ex) { + try { + // 支持 YYYY-MM-DD 格式 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + return sdf.parse(dateStr); + } catch (ParseException exc) { + return null; + } + } + } + } + + /** + * 将EmployeeImportExcel转换为SysUser + * @param employeeExcel 员工导入Excel数据 + * @return SysUser对象 + */ + private SysUser convertToSysUser(EmployeeImportExcel employeeExcel) { + SysUser sysUser = new SysUser(); + sysUser.setPassword(SecurityUtils.encryptPassword("123456")); + + // 基本信息 + sysUser.setNickName(employeeExcel.getNickName()); + sysUser.setUserName(employeeExcel.getPhoneNumber()); + sysUser.setPhonenumber(employeeExcel.getPhoneNumber()); + // 性别转换 + if ("男".equals(employeeExcel.getSex())) { + sysUser.setSex("0"); + } else if ("女".equals(employeeExcel.getSex())) { + sysUser.setSex("1"); + } else { + sysUser.setSex("0"); + } + + // 身份证 + sysUser.setIdCard(employeeExcel.getIdCard()); + + // 政治面貌 + sysUser.setPoliticalOutlook(employeeExcel.getPoliticalOutlook()); + + // 时间字段 + sysUser.setParticipationTime(parseDate(employeeExcel.getParticipationTime())); + sysUser.setCompanyTime(parseDate(employeeExcel.getCompanyTime())); + sysUser.setPositionTime(parseDate(employeeExcel.getPositionTime())); + // 学历信息 + sysUser.setFirstDegree(employeeExcel.getFirstDegree()); + sysUser.setFirstCollege(employeeExcel.getFirstCollege()); + sysUser.setFirstMajor(employeeExcel.getFirstMajor()); + sysUser.setHighestDegree(employeeExcel.getHighestDegree()); + sysUser.setHighestCollege(employeeExcel.getHighestCollege()); + sysUser.setHighestMajor(employeeExcel.getHighestMajor()); + + // 职务和部门 + sysUser.setPosition(employeeExcel.getPosition()); + sysUser.setOrganization(employeeExcel.getOrganization()); + + // 系统字段 + sysUser.setStatus("0"); // 正常状态 + sysUser.setDelFlag("0"); // 未删除 + sysUser.setCreateBy(getUsername()); + + return sysUser; } @ApiOperation(value = "员工导入模板下载") @GetMapping("/importDownload") public void importDownload() { - List<TSysUserImportExcel> locationImportExcels = new ArrayList<>(); - TSysUserImportExcel tLocationImportExcel = new TSysUserImportExcel(); - locationImportExcels.add(tLocationImportExcel); - Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TSysUserImportExcel.class, locationImportExcels); + List<EmployeeImportExcel> employeeImportExcels = new ArrayList<>(); + EmployeeImportExcel employeeImportExcel = new EmployeeImportExcel(); + employeeImportExcels.add(employeeImportExcel); + ExportParams exportParams = new ExportParams(); + exportParams.setTitle("员工信息导入模板"); + exportParams.setSheetName("员工信息"); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, EmployeeImportExcel.class, employeeImportExcels); HttpServletResponse response = WebUtils.response(); ServletOutputStream outputStream = null; try { - String fileName = URLEncoder.encode("员工导入模板.xls", "utf-8"); + String fileName = URLEncoder.encode("员工信息导入模板.xls", "utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setHeader("content-Type", "application/vnd.ms-excel"); response.setHeader("Pragma", "no-cache"); @@ -248,10 +381,12 @@ e.printStackTrace(); System.out.println("员工导入模板下载失败!"); } finally { - try { - outputStream.close(); - } catch (IOException e) { - e.printStackTrace(); + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } } } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/EmployeeImportExcel.java b/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/EmployeeImportExcel.java new file mode 100644 index 0000000..7bc3127 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/importExcel/EmployeeImportExcel.java @@ -0,0 +1,99 @@ +package com.ruoyi.system.importExcel; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel(value = "员工导入Excel") +public class EmployeeImportExcel implements Serializable { + + @Excel(name = "姓名", width = 20) + @ApiModelProperty(value = "姓名") + private String nickName; + + @Excel(name = "性别", width = 10) + @ApiModelProperty(value = "性别") + private String sex; + + @Excel(name = "身份证号码", width = 25) + @ApiModelProperty(value = "身份证号码") + private String idCard; + + @Excel(name = "年龄", width = 10) + @ApiModelProperty(value = "年龄") + private Integer age; + + @Excel(name = "政治面貌", width = 15) + @ApiModelProperty(value = "政治面貌") + private String politicalOutlook; + + @Excel(name = "参工时间", width = 15) + @ApiModelProperty(value = "参工时间") + private String participationTime; + + @Excel(name = "进入公司时间", width = 15) + @ApiModelProperty(value = "进入公司时间") + private String companyTime; + + // 第一学历 + @Excel(name = "第一学历-学历", width = 15) + @ApiModelProperty(value = "第一学历") + private String firstDegree; + + @Excel(name = "第一学历-学院", width = 25) + @ApiModelProperty(value = "第一学历学院") + private String firstCollege; + + @Excel(name = "第一学历-专业", width = 25) + @ApiModelProperty(value = "第一学历专业") + private String firstMajor; + + // 最高学历 + @Excel(name = "最高学历-学历", width = 15) + @ApiModelProperty(value = "最高学历") + private String highestDegree; + + @Excel(name = "最高学历-学院", width = 25) + @ApiModelProperty(value = "最高学历学院") + private String highestCollege; + + @Excel(name = "最高学历-专业", width = 25) + @ApiModelProperty(value = "最高学历专业") + private String highestMajor; + + @Excel(name = "所在股室", width = 20) + @ApiModelProperty(value = "所在股室") + private String department; + + @Excel(name = "职务", width = 25) + @ApiModelProperty(value = "职务") + private String position; + + @Excel(name = "任职时间", width = 15) + @ApiModelProperty(value = "任职时间") + private String positionTime; + + @Excel(name = "电话号码", width = 15) + @ApiModelProperty(value = "电话号码") + private String phoneNumber; + + @Excel(name = "编制", width = 15) + @ApiModelProperty(value = "编制") + private String organization; + + + + // 部门名称(系统字段) + @Excel(name = "部门名称", width = 20) + @ApiModelProperty(value = "部门名称") + private String deptName; + + // 角色名称(系统字段) + @Excel(name = "角色名称", width = 20) + @ApiModelProperty(value = "角色名称") + private String roleName; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java index d50c11c..90ff3b5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java @@ -21,4 +21,6 @@ List<NotificationVO> pageList(@Param("query")NotificationListQuery query, @Param("pageInfo")PageInfo<NotificationVO> pageInfo); + List<NotificationVO> pageListUser(@Param("query")NotificationListQuery query, @Param("pageInfo")PageInfo<NotificationVO> pageInfo); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java index 692d2a9..085f1fd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -47,6 +48,7 @@ @ApiModelProperty(value = "创建时间") @TableField("create_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty(value = "创建人") @@ -55,6 +57,7 @@ @ApiModelProperty(value = "更新时间") @TableField("update_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime updateTime; @ApiModelProperty(value = "更新人") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotificationUser.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotificationUser.java index 689d4af..9c3b3f4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotificationUser.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotificationUser.java @@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; +import java.time.LocalDateTime; /** * <p> @@ -42,6 +44,5 @@ @ApiModelProperty(value = "阅读状态 0-未读,1-已读") @TableField("read_status") private Boolean readStatus; - } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java index 948f083..eb9e637 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java @@ -17,4 +17,6 @@ private String deptName; @ApiModelProperty(value = "部门ids 前端忽略") private List<Integer> deptIds; + @ApiModelProperty(value = "当前登陆人id 前端忽略") + private Long userId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java index 30e62a8..777e874 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java @@ -18,4 +18,5 @@ PageInfo<NotificationVO> pageList(NotificationListQuery query); + PageInfo<NotificationVO> pageListUser(NotificationListQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java index 8887cd7..0ca76f9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java @@ -62,4 +62,36 @@ pageInfo.setRecords(list); return pageInfo; } + + @Override + public PageInfo<NotificationVO> pageListUser(NotificationListQuery query) { + List<TDept> tDepts = deptMapper.selectList(null); + Map<Integer, String> deptMap = tDepts.stream().collect(Collectors.toMap(TDept::getId, TDept::getDeptName)); + if (StringUtils.hasLength(query.getDeptName())){ + List<Integer> deptIds = deptMapper.selectList(new LambdaQueryWrapper<TDept>().like(TDept::getDeptName, query.getDeptName())) + .stream().map(TDept::getId).collect(Collectors.toList()); + if (deptIds.isEmpty()){ + return new PageInfo<>(); + } + query.setDeptIds(deptIds); + } + PageInfo<NotificationVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<NotificationVO> list = this.baseMapper.pageListUser(query,pageInfo); + for (NotificationVO notificationVO : list) { + StringBuilder deptName = new StringBuilder(); + if (notificationVO.getType()){ + for (String deptId : notificationVO.getDeptIds().split(",")) { + String orDefault = deptMap.getOrDefault(Integer.parseInt(deptId), ""); + deptName.append(orDefault).append(","); + } + notificationVO.setDeptName(deptName.substring(0,deptName.length()-1)); + }else{ + notificationVO.setDeptName("全部人员"); + + } + + } + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java index 6fa1952..9fb6c10 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java @@ -1,10 +1,14 @@ package com.ruoyi.system.vo.system; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.model.OaNotification; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; + +import java.time.LocalDateTime; @Data @ApiModel(value = "消息通知分页返回VO") @@ -12,5 +16,7 @@ @ApiModelProperty(value = "通知部门") private String deptName; + @ApiModelProperty(value = "阅读状态 0-未读,1-已读") + private Boolean readStatus; } diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml index 2594ff7..45744a9 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationPurchaseItemMapper.xml @@ -24,7 +24,7 @@ from oa_approval_application_purchase_item t1 left join asset_type t2 on t2.id = t1.asset_type_id where t1.approval_application_id = #{query.approvalApplicationId} - + order by t1.id desc </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationsMapper.xml index 768b50d..0bacb04 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationsMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaApprovalApplicationsMapper.xml @@ -33,6 +33,7 @@ <if test="query.userId != null "> and applicant_user_id like concat('%',#{query.userId},'%') </if> + order by approval_time desc </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml index 3caab6c..538d0f5 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml @@ -35,5 +35,22 @@ AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} order by create_time desc </select> + <select id="pageListUser" resultType="com.ruoyi.system.vo.system.NotificationVO"> + select t1.read_status as readStatus,t1.notification_id notificationId,t2.* from oa_notification t2 + where 1=1 + <if test="query.title != null and query.title != ''"> + and t2.title like concat('%',#{query.title},'%') + </if> + <if test="deptIds != null and deptIds.size() > 0"> + AND ( + <foreach collection="deptIds" item="deptId" separator=" OR "> + FIND_IN_SET(#{deptId}, t2.dept_ids) + </foreach> + ) + </if> + and t1.user_id = #{query.userId} + AND t2.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + order by t1.id desc + </select> </mapper> -- Gitblit v1.7.1