在迁移项目但是遇到了一些问题,迁移项目的时候发现项目的整体框架很有趣,但是苦于项目框架太大了,竟然只能完整迁移,做不到部分迁移,于是我也只能从一半的角度来进行解释整个项目。
雇员
我们雇员这个为对象讲解一下整个项目
@Api(value = "人员基本信息模块", tags = "人员基本信息模块")
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/person/person_base_info")
@Slf4j
public class PersonBaseInfoController extends BaseHistoryController<PersonBaseInfo, PersonInfoDTO> {@Autowiredprivate PersonBaseInfoService personBaseInfoService;@Autowiredprivate PersonWordExport personWordExport;@Autowiredprivate PersonAllocationInfoService personAllocationInfoService;@Autowiredprivate PersonLifecycleInfoService personLifecycleInfoService;@Autowiredprivate AddressInfoService addressInfoService;@Autowiredprivate RedisTemplate redisTemplate;@ApiOperation(value = "人员信息验证", notes = "人员信息验证", response = PersonBaseInfoResponseVerifyDTO.class, httpMethod = "POST")@ApiImplicitParams({@ApiImplicitParam(name = "X-Person-Id", value = "登录人ID", paramType = "header", dataType = "long", required = true),@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "long", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "from", value = "人员信息验证请求", dataType = "PersonBaseInfoRequestVerifyDTO", required = true)})@ApiResponses({@ApiResponse(code = 200, message = "已更正")})@PostMapping("/verify")public ResponseEntity<Object> verify(@RequestHeader("X-Person-Id") Long xPersonId,@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestBody PersonBaseInfoRequestVerifyDTO from) {try {PersonBaseInfoResponseVerifyDTO responseVerifyDTO = personBaseInfoService.verify(xBusinessGroupId, from);return new ResponseEntity<>(responseVerifyDTO, HttpStatus.OK);} catch (ServiceException e) {return new ResponseEntity<>(e.getMessageResponse(), HttpStatus.NOT_FOUND);}}@ApiOperation(value = "根据ID查询单个人员基本信息", notes = "根据ID查询单个人员基本信息", response = PersonInfoDTO.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "人员基本信息ID", dataType = "long", required = true),@ApiImplicitParam(name = "assignmentId", value = "人员分配信息ID,默认:取主分配第一条", dataType = "long"),@ApiImplicitParam(name = "date", value = "查询日期,默认:取当前日期", dataType = "date", format = "date"),})@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/{id}")public ResponseEntity<Object> select(@PathVariable(value = "id") Long id,@RequestParam(value = "assignmentId", required = false) Long assignmentId,@RequestParam(value = "date", required = false)@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {PersonInfoDTO result = personBaseInfoService.selectPersonDtoById(id, assignmentId,Objects.nonNull(date) ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null);if (Objects.nonNull(result)) {return new ResponseEntity<>(result, HttpStatus.OK);} else {return new ResponseEntity<>(new PersonInfoDTO(), HttpStatus.OK);}}@ApiOperation(value = "通过职务id查询范围内的岗位级别", notes = "通过职务id查询范围内的岗位级别", response = GlobalLookupCodeInfoDTO.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "jobId", value = "职务id", dataType = "long"),@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "long", required = true, defaultValue = "1001")})@ApiResponse(code = 200, message = "返回数据成功")@GetMapping(value = {"/personGrade/{jobId}", "/personGrade"})public ResponseEntity<Object> selectByJobId(@PathVariable(value = "jobId", required = false) Long jobId,@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId) {return new ResponseEntity<>(personBaseInfoService.selectByJobId(jobId, xBusinessGroupId), HttpStatus.OK);}@ApiOperation(value = "根据证件查询单个人员基本信息", notes = "根据证件查询单个人员基本信息", response = PersonInfoDTO.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "long", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "idCardType", value = "证件类型ID", dataType = "long", required = true),@ApiImplicitParam(name = "idCardNumber", value = "证件编号", dataType = "string", required = true),@ApiImplicitParam(name = "date", value = "查询日期,默认:取当前日期", dataType = "date", format = "date"),})@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/card/{idCardType}/{idCardNumber}")public ResponseEntity<Object> card(@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@PathVariable(value = "idCardType") Long idCardType,@PathVariable(value = "idCardNumber") String idCardNumber,@RequestParam(value = "date", required = false)@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {PersonInfoDTO result = personBaseInfoService.selectPersonDtoByCard(xBusinessGroupId, idCardType, idCardNumber,Objects.nonNull(date) ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null);if (Objects.nonNull(result)) {return new ResponseEntity<>(result, HttpStatus.OK);} else {return new ResponseEntity<>(new PersonInfoDTO(), HttpStatus.OK);}}@Overrideprotected ResponseEntity<Object> modify(PersonInfoDTO from, PersonBaseInfo personBaseInfo, LocalDate localDate) {return ResponseEntityUtils.buildModifyResponseEntity(personBaseInfoService.modify(from, personBaseInfo, localDate));}@Overrideprotected ResponseEntity<Object> renew(PersonInfoDTO from, PersonBaseInfo personBaseInfo, LocalDate localDate) {return ResponseEntityUtils.buildRenewResponseEntity(personBaseInfoService.renew(from, personBaseInfo, localDate));}@Overrideprotected ResponseEntity<Object> create(PersonInfoDTO from, PersonBaseInfo personBaseInfo) {return ResponseEntityUtils.buildCreateResponseEntity(personBaseInfoService.create(from, personBaseInfo));}@ApiOperation(value = "更正人员基本和任职信息", notes = "更正人员基本和任职信息", response = PersonInfoDTO.class, httpMethod = "POST")@ApiImplicitParams({@ApiImplicitParam(name = "X-Person-Id", value = "登录人ID", paramType = "header", dataType = "long", required = true),@ApiImplicitParam(name = "X-Person-Name", value = "登录人姓名", paramType = "header", dataType = "string", required = true),@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "long", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "date", value = "查询日期", dataType = "date-time", format = "date"),@ApiImplicitParam(name = "from", value = "人员基本和任职信息信息", dataType = "PersonInfoDTO", required = true)})@ApiResponses({@ApiResponse(code = 200, message = "已更正")})@PostMappingpublic ResponseEntity<Object> modify(@RequestHeader("X-Person-Id") Long xPersonId,@RequestHeader("X-Person-Name") String xPersonName,@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestParam(value = "date", required = false)@DateTimeFormat(pattern = "yyyy-MM-dd") Date date,@RequestBody PersonInfoDTO from) {PersonBaseInfo personBaseInfo = newT();this.copyProperties(from, xPersonId, xPersonName, personBaseInfo);personBaseInfo.setBusinessGroupId(xBusinessGroupId);return this.createOrModify(from, xPersonId, xPersonName, date, personBaseInfo);}@Overrideprotected void copyProperties(PersonInfoDTO from, Long xPersonId, String xPersonName, PersonBaseInfo t) {BeanCopyUtils.copyProperties(from.getPersonBaseInfo(), t, PropertiesCopyable.ignoreCopyable("id"));t.setUpdateBy(xPersonId);t.setUpdateByName(xPersonName);}@ApiOperation(value = "更新人员基本和任职信息", notes = "更新人员基本和任职信息", response = PersonInfoDTO.class, httpMethod = "POST")@ApiImplicitParams({@ApiImplicitParam(name = "X-Person-Id", value = "登录人ID", paramType = "header", dataType = "long", required = true),@ApiImplicitParam(name = "X-Person-Name", value = "登录人姓名", paramType = "header", dataType = "string", required = true),@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "long", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "date", value = "查询日期", dataType = "date-time", format = "date"),@ApiImplicitParam(name = "from", value = "人员基本和任职信息", dataType = "PersonInfoDTO", required = true)})@ApiResponses({@ApiResponse(code = 200, message = "已更新")})@PostMapping("/renew")public ResponseEntity<Object> renew(@RequestHeader("X-Person-Id") Long xPersonId,@RequestHeader("X-Person-Name") String xPersonName,@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestParam(value = "date", required = false)@DateTimeFormat(pattern = "yyyy-MM-dd") Date date,@RequestBody PersonInfoDTO from) {PersonBaseInfo personBaseInfo = newT();this.copyProperties(from, xPersonId, xPersonName, personBaseInfo);personBaseInfo.setBusinessGroupId(xBusinessGroupId);return this.createOrRenew(from, xPersonId, xPersonName, date, personBaseInfo);}@ApiOperation(value = "更新人员离职信息", notes = "更新人员离职信息", response = PersonInfoDTO.class, httpMethod = "POST")@ApiImplicitParams({@ApiImplicitParam(name = "X-Person-Id", value = "登录人ID", paramType = "header", dataType = "long", required = true),@ApiImplicitParam(name = "X-Person-Name", value = "登录人姓名", paramType = "header", dataType = "string", required = true),@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "long", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "date", value = "查询日期", dataType = "date-time", format = "date"),@ApiImplicitParam(name = "from", value = "人员服务期间信息", dataType = "PersonInfoDTO", required = true)})@ApiResponses({@ApiResponse(code = 200, message = "已更新")})@PostMapping("/leaving")public ResponseEntity<Object> leaving(@RequestHeader("X-Person-Id") Long xPersonId,@RequestHeader("X-Person-Name") String xPersonName,@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestParam(value = "date", required = false)@DateTimeFormat(pattern = "yyyy-MM-dd") Date date,@RequestBody PersonInfoDTO from) {try {return ResponseEntityUtils.buildRenewResponseEntity(personBaseInfoService.leaving(from, xBusinessGroupId, xPersonId, xPersonName,Objects.nonNull(date) ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null));} catch (ServiceException e) {return new ResponseEntity<>(e.getMessageResponse(), HttpStatus.NOT_FOUND);}}/*** 拼装** @param xBusinessGroupId* @param personName* @param employeeNumber* @param orgId* @param idCardNumber* @param onDutyCategory* @param date* @param searchText* @param dataPermission* @return*/public static void fillPersonBaseInfoSearchDTO(PersonBaseInfoSearchDTO searchDTO, Long xBusinessGroupId, String personName,String employeeNumber, Long orgId, String idCardNumber, Long onDutyCategory, Date date, String searchText, String dataPermission) {searchDTO.setBusinessGroupId(xBusinessGroupId);searchDTO.setPersonName(personName);searchDTO.setEmployeeNumber(employeeNumber);searchDTO.setOrgId(orgId);searchDTO.setIdCardNumber(idCardNumber);searchDTO.setOnDutyCategory(onDutyCategory);searchDTO.setDate(Objects.nonNull(date) ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null);searchDTO.setSearchText(searchText);searchDTO.setDataPermission(dataPermission);}@ApiOperation(value = "分页查询人员基本信息", notes = "分页查询人员基本信息", response = Page.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "X-Person-Id", value = "登录人ID", paramType = "header", dataType = "string", required = true),@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "string", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "X-Data-Permission", value = "数据安全性", paramType = "header", dataType = "String", required = true),@ApiImplicitParam(name = "personName", value = "姓名", dataType = "string"),@ApiImplicitParam(name = "employeeNumber", value = "员工编号", dataType = "string"),@ApiImplicitParam(name = "orgId", value = "部门", dataType = "long"),@ApiImplicitParam(name = "idCardNumber", value = "身份证号", dataType = "string"),@ApiImplicitParam(name = "onDutyCategory", value = "在岗类别", dataType = "long"),@ApiImplicitParam(name = "date", value = "查询日期", dataType = "date", format = "date"),@ApiImplicitParam(name = "primary", value = "分配类型 1 只查主分配(默认) 0 只查不是主分配 -1 全查", dataType = "int"),@ApiImplicitParam(name = "ignorePersonId", value = "忽略不查询的人员Id", dataType = "long"),@ApiImplicitParam(name = "topOrgId", value = "二级单位ID", dataType = "long"),@ApiImplicitParam(name = "onDutyCategoryList", value = "只查哪些 在岗类别 \",\"号拼接Id", dataType = "string"),@ApiImplicitParam(name = "ignoreOnDutyCategoryList", value = "忽略哪些 在岗类别 \",\"号拼接Id", dataType = "string"),@ApiImplicitParam(name = "searchText", value = "人员基本编码 or 人员基本名称", dataType = "string"),@ApiImplicitParam(name = "whetherDataPermission", value = "是否适用数据安全性: 1 适用(默认) 0 不适用", dataType = "int"),@ApiImplicitParam(name = "pageNumber", value = "当前页", dataType = "int", defaultValue = "1"),@ApiImplicitParam(name = "pageSize", value = "页数", dataType = "int", defaultValue = "10")})@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@GetMapping("/search")public ResponseEntity<Object> search(@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestHeader("X-Data-Permission") String dataPermission,@RequestParam(value = "personName", required = false) String personName,@RequestParam(value = "employeeNumber", required = false) String employeeNumber,@RequestParam(value = "orgId", required = false) Long orgId,@RequestParam(value = "idCardNumber", required = false) String idCardNumber,@RequestParam(value = "onDutyCategory", required = false) Long onDutyCategory,@RequestParam(value = "date", required = false)@DateTimeFormat(pattern = "yyyy-MM-dd") Date date,@RequestParam(value = "primary", defaultValue = "1", required = false) Integer primary,@RequestParam(value = "ignorePersonId", required = false) Long ignorePersonId,@RequestParam(value = "topOrgId", required = false) Long topOrgId,@RequestParam(value = "onDutyCategoryList", required = false) String onDutyCategoryList,@RequestParam(value = "ignoreOnDutyCategoryList", required = false) String ignoreOnDutyCategoryList,@RequestParam(value = "searchText", required = false) String searchText,@RequestParam(value = "whetherDataPermission", required = false) Integer whetherDataPermission,@RequestParam(value = "pageNumber", defaultValue = "1", required = false) Integer pageNumber,@RequestParam(value = "pageSize", defaultValue = "10", required = false) Integer pageSize) {PersonBaseInfoSearchDTO searchDTO = new PersonBaseInfoSearchDTO(pageNumber, pageSize);fillPersonBaseInfoSearchDTO(searchDTO, xBusinessGroupId, personName,employeeNumber, orgId, idCardNumber, onDutyCategory, date, searchText, dataPermission);// 如果是其他值只查主分配if (Objects.isNull(primary)|| (primary != 1 && primary != 0 && primary != -1)) {primary = 1;}searchDTO.setPrimary(primary);searchDTO.setIgnorePersonId(ignorePersonId);searchDTO.setTopOrgId(topOrgId);searchDTO.setWhetherDataPermission(whetherDataPermission);try {if (StringUtils.isNotEmpty(onDutyCategoryList)) {searchDTO.setOnDutyCategoryList(Arrays.stream(onDutyCategoryList.split(",")).filter(StringUtils::isNotEmpty).map(Long::valueOf).collect(Collectors.toList()));}if (StringUtils.isNotEmpty(ignoreOnDutyCategoryList)) {searchDTO.setIgnoreOnDutyCategoryList(Arrays.stream(ignoreOnDutyCategoryList.split(",")).filter(StringUtils::isNotEmpty).map(Long::valueOf).collect(Collectors.toList()));}} catch (NumberFormatException e) {return new ResponseEntity<>(new MessageResponse("在岗类别\",\"号拼接 Id 只能为数字"), HttpStatus.NOT_FOUND);}// 不传默认需要分页searchDTO.setWhetherPage(ObjectUtil.isEmpty(searchDTO.getWhetherPage()) ? 0 : searchDTO.getWhetherPage());Page<PersonBaseInfoVO> page = personBaseInfoService.search(searchDTO);if (Objects.nonNull(page)) {if (ObjectUtil.equal(searchDTO.getWhetherPage(), 1)) {return new ResponseEntity<>(page.getRecords(), HttpStatus.OK);}return new ResponseEntity<>(page, HttpStatus.OK);}return new ResponseEntity<>(HttpStatus.NOT_FOUND);}@ApiOperation(value = "分页查询人员基本信息", notes = "分页查询人员基本信息", response = Page.class, httpMethod = "POST")@ApiImplicitParams({@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "string", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "X-Data-Permission", value = "数据安全性", paramType = "header", dataType = "String"),@ApiImplicitParam(name = "searchDTO", value = "人员服务期间信息", dataType = "PersonBaseInfoSearchDTO", required = true)})@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@PostMapping("/search")public ResponseEntity<Page<PersonBaseInfoVO>> postSearch(@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestHeader(value = "X-Data-Permission", required = false) String dataPermission,@RequestBody PersonBaseInfoSearchDTO searchDTO) {searchDTO.setBusinessGroupId(xBusinessGroupId);searchDTO.setDataPermission(dataPermission);// 不传默认需要分页searchDTO.setWhetherPage(ObjectUtil.isEmpty(searchDTO.getWhetherPage()) ? 0 : searchDTO.getWhetherPage());if (ObjectUtil.equal(searchDTO.getWhetherPage(), 0)) {int offSet = PageHelper.offsetCurrent(searchDTO.getPageNumber(), searchDTO.getPageSize());searchDTO.setOffset(offSet);}Integer primary = searchDTO.getPrimary();// 如果是其他值只查主分配if (Objects.isNull(primary)|| (primary != 1 && primary != 0 && primary != -1)) {searchDTO.setPrimary(1);}Page<PersonBaseInfoVO> page = personBaseInfoService.search(searchDTO);if (Objects.nonNull(page)) {return new ResponseEntity<>(page, HttpStatus.OK);}return new ResponseEntity<>(HttpStatus.NOT_FOUND);}/*** 并发数据测试支持千人以上秒级并发峰值访问** @param xBusinessGroupId* @param dataPermission* @param searchDTO* @return*/@ApiOperation(value = "分页查询人员基本信息", notes = "分页查询人员基本信息", response = Page.class, httpMethod = "POST")@ApiImplicitParams({@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "string", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "X-Data-Permission", value = "数据安全性", paramType = "header", dataType = "String"),@ApiImplicitParam(name = "searchDTO", value = "人员服务期间信息", dataType = "PersonBaseInfoSearchDTO", required = true)})@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@PostMapping("/searchfortoomuch")public ResponseEntity<List<PersonBaseInfoVO>> postSearchForTooMych(@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestHeader(value = "X-Data-Permission", required = false) String dataPermission,@RequestBody PersonBaseInfoSearchDTO searchDTO) throws Exception {if (searchDTO.getEmployeeNumber() == null || searchDTO.getEmployeeNumber() == "") {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}ValueOperations valueOperations = redisTemplate.opsForValue();if (valueOperations.get(searchDTO.getEmployeeNumber()) != null) {return new ResponseEntity<>((List<PersonBaseInfoVO>) valueOperations.get(searchDTO.getEmployeeNumber()), HttpStatus.OK);}List<PersonBaseInfoVO> personBaseInfoVOS = personBaseInfoService.searchFor(searchDTO);if (Objects.nonNull(personBaseInfoVOS)) {valueOperations.set(searchDTO.getEmployeeNumber(), personBaseInfoVOS, 5, TimeUnit.HOURS);return new ResponseEntity<>(personBaseInfoVOS, HttpStatus.OK);}return new ResponseEntity<>(HttpStatus.NOT_FOUND);}@ApiOperation(value = "分页查询人员基本信息", notes = "分页查询人员基本信息", response = Page.class, httpMethod = "POST")@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@PostMapping("/searchforhello")public ResponseEntity<Object> searchforhello() {int min = 300;int max = 600;int time = min + (int) (Math.random() * ((max - min) + 1));try {Thread.sleep(time);} catch (InterruptedException e) {throw new RuntimeException(e);}String result = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";for (int i = 0; i < time; i++) {result += "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";}return new ResponseEntity<>(result, HttpStatus.OK);}@ApiOperation(value = "查询人员基本历史信息", notes = "查询人员基本历史信息", response = HistoryDTO.class, responseContainer = "List", httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "人员基本ID", dataType = "long", required = true)})@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@GetMapping("/history/{id}")public ResponseEntity<Object> history(@PathVariable(value = "id") Long id) {return new ResponseEntity<>(personBaseInfoService.selectHistoryList(id), HttpStatus.OK);}@ApiOperation(value = "查询员工生命周期变更记录", notes = "查询员工生命周期变更记录", response = PersonLifecycleDTO.class, responseContainer = "List", httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "人员基本ID", dataType = "long", required = true)})@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@GetMapping("/lifecycle/{id}")public ResponseEntity<Object> lifecycle(@PathVariable(value = "id") Long id) {Map<LocalDate, PersonLifecycleDTO> lifecycleBaseInfoMap = personBaseInfoService.selectLifecycleList(id);for (Map.Entry<LocalDate, PersonLifecycleDTO> entry : personAllocationInfoService.selectLifecycleList(id).entrySet()) {LocalDate key = entry.getKey();PersonLifecycleDTO value = entry.getValue();PersonLifecycleDTO lifecycleBaseInfo = lifecycleBaseInfoMap.get(key);// 如果存在 有2种情况// 1、信息维护 直接覆盖// 2、入/离职 取出来排序if (Objects.isNull(lifecycleBaseInfo) || "信息维护".equals(lifecycleBaseInfo.getOperateTypeName())) {lifecycleBaseInfoMap.put(key, value);} else {List<PersonLifecycleDTO> temp = new ArrayList<>();// 添加temp.add(lifecycleBaseInfo);temp.addAll(lifecycleBaseInfo.getPersonLifecycleList());temp.add(value);temp.addAll(value.getPersonLifecycleList());// 清空lifecycleBaseInfo.setPersonLifecycleList(new ArrayList<>());value.setPersonLifecycleList(new ArrayList<>());// 排序temp.sort(Comparator.comparing(PersonLifecycleDTO::getDate));// 将剩余的放入第一个PersonLifecycleDTO firstLifecycle = temp.get(0);temp.remove(0);firstLifecycle.setPersonLifecycleList(temp);// 存入lifecycleBaseInfoMap.put(firstLifecycle.getDate(), firstLifecycle);}}return new ResponseEntity<>(lifecycleBaseInfoMap.values(), HttpStatus.OK);}@ApiOperation(value = "查询人员分配信息", notes = "查询人员分配信息", response = PersonAssignmentInfoDTO.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "string", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "id", value = "人员", dataType = "long"),@ApiImplicitParam(name = "orgId", value = "部门", dataType = "long"),@ApiImplicitParam(name = "jobId", value = "职务", dataType = "long"),@ApiImplicitParam(name = "positionId", value = "职位", dataType = "long"),@ApiImplicitParam(name = "date", value = "查询日期", dataType = "date", format = "date")})@GetMapping("/person/{id}/assignment")public ResponseEntity<PersonAssignmentInfoDTO> selectAssignmentInfoDtoBy(@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@PathVariable("id") Long id,@RequestParam(value = "orgId") Long orgId,@RequestParam(value = "jobId") Long jobId,@RequestParam(value = "positionId") Long positionId,@RequestParam(value = "date", required = false)@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {PersonAssignmentInfoDTO dto = personBaseInfoService.selectAssignmentInfoDtoBy(xBusinessGroupId, id, orgId, jobId, positionId,Objects.nonNull(date) ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null);if (Objects.nonNull(dto)) {return new ResponseEntity<>(dto, HttpStatus.OK);}return new ResponseEntity<>(HttpStatus.NOT_FOUND);}@ApiOperation(value = "查询员工异动详细信息", notes = "查询员工异动详细信息", response = PersonAllocationDTO.class, responseContainer = "List", httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "人员基本ID", dataType = "long", required = true),@ApiImplicitParam(name = "startDate", value = "开始日期", dataType = "date", format = "date", required = true),@ApiImplicitParam(name = "endDate", value = "结束日期", dataType = "date", format = "date", required = true)})@GetMapping("/allocation/{id}")public ResponseEntity<List<PersonAllocationDTO>> allocation(@PathVariable(value = "id") Long id,@RequestParam(value = "startDate")@DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,@RequestParam(value = "endDate")@DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {List<PersonAllocationDTO> allocationDtoList = personLifecycleInfoService.searchAllocationInfoBy(id, null,Objects.nonNull(startDate) ? startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null,Objects.nonNull(endDate) ? endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null);if (Objects.nonNull(allocationDtoList)) {return new ResponseEntity<>(allocationDtoList, HttpStatus.OK);}return new ResponseEntity<>(new ArrayList<>(), HttpStatus.NOT_FOUND);}@ApiOperation(value = "查询员工异动详细信息", notes = "查询员工异动详细信息", response = PersonAllocationDTO.class, responseContainer = "List", httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "from", value = "人员薪酬薪资期间信息", dataType = "PersonAllDTO", required = true)})@PostMapping("/allocation/list")public ResponseEntity<List<PersonAllocationDTO>> allocation(@RequestBody PersonAllFromDTO from) {log.info("查询参数:" + from.toString());List<PersonAllocationDTO> allocationDtoList = new ArrayList<>();HashSet<PersonAllDTO> personAllList = from.getPersonAllList();log.info("PersonAllList" + personAllList.toString());for (PersonAllDTO dto : personAllList) {LocalDate periodStartDate = dto.getPeriodStartDate();LocalDate periodEndDate = dto.getPeriodEndDate();List<PersonAllocationDTO> list = personLifecycleInfoService.searchAllocationInfoBy(dto.getPersonId(), dto.getPeriodId(),Objects.nonNull(periodStartDate) ? periodStartDate : null,Objects.nonNull(periodEndDate) ? periodEndDate : null);allocationDtoList.addAll(list);}return new ResponseEntity<>(allocationDtoList, HttpStatus.OK);}@ApiOperation(value = "根据员工编号查询单个人员基本信息", notes = "根据员工编号查询单个人员基本信息", response = PersonInfoDTO.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "long", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "employeeNumber", value = "员工编号", dataType = "string", required = true),@ApiImplicitParam(name = "date", value = "查询日期,默认:取当前日期", dataType = "date", format = "date"),})@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/employeeNumber")public ResponseEntity<Object> employeeNumber(@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestParam(value = "employeeNumber") String employeeNumber,@RequestParam(value = "date", required = false)@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {PersonInfoDTO result = personBaseInfoService.selectPersonDtoByEmployeeNumber(xBusinessGroupId, employeeNumber,Objects.nonNull(date) ? date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null);if (Objects.nonNull(result)) {return new ResponseEntity<>(result, HttpStatus.OK);} else {return new ResponseEntity<>(new PersonInfoDTO(), HttpStatus.OK);}}@ApiOperation(value = "根据cutId查询人员ID信息", notes = "根据cutId查询人员ID信息", response = Long.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "cutId", value = "人员", dataType = "long", required = true)})@GetMapping("/selectByCutId/{cutId}")public ResponseEntity<Long> selectByCutId(@PathVariable(value = "cutId") Long cutId) {Long personId = personBaseInfoService.selectByCutId(cutId);if (Objects.nonNull(personId)) {return new ResponseEntity<>(personId, HttpStatus.OK);}return new ResponseEntity<>(HttpStatus.NOT_FOUND);}@ApiOperation(value = "根据参加工作日期及社会工龄调整值(月)计算工龄", notes = "根据参加工作日期及社会工龄调整值(月)计算工龄", response = Integer.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "dateOfWork", value = "参加工作日期", dataType = "date", format = "date"),@ApiImplicitParam(name = "dateOfWorkAdj", value = "社会工龄调整值(月)", dataType = "int"),})@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@GetMapping("/workYear")public ResponseEntity<Object> getWorkYear(@RequestParam(value = "dateOfWork")@DateTimeFormat(pattern = "yyyy-MM-dd") Date dateOfWork,@RequestParam(value = "dateOfWorkAdj", defaultValue = "0", required = false) Integer dateOfWorkAdj) {LocalDate date = Objects.nonNull(dateOfWork) ? dateOfWork.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() : null;Integer workYear = personBaseInfoService.getWorkYear(date, dateOfWorkAdj);return new ResponseEntity<>(workYear, HttpStatus.OK);}@ApiOperation(value = "根据X-Person-Id查询personId", notes = "Id查询personId", response = Integer.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "X-Person-Id", value = "登录人ID", paramType = "header", dataType = "long", required = true)})@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@GetMapping("/getPersonId")public ResponseEntity<Long> getPersonId(@RequestHeader("X-Person-Id") Long xPersonId) {return new ResponseEntity<>(personBaseInfoService.getPersonId(xPersonId), HttpStatus.OK);}@ApiOperation(value = " 根据personId获取人员基本信息", notes = " 根据personId获取人员基本信息", response = PersonBaseInfoDTO.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "ids", value = "人员基本信息ID", dataType = "string", required = true),})@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/selectByIds")public ResponseEntity<Object> selectByIds(@RequestParam(value = "ids") String ids) {List<PersonBaseInfoDTO> result = personBaseInfoService.selectByIds(ids);if (Objects.nonNull(result)) {return new ResponseEntity<>(result, HttpStatus.OK);} else {return new ResponseEntity<>(new PersonInfoDTO(), HttpStatus.OK);}}@ApiOperation(value = " 根据employeeNumber获取人员基本信息", notes = " 根据personId获取人员基本信息", response = PersonBaseInfoDTO.class, httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "employeeNumbers", value = "员工编号信息ID", dataType = "string", required = true),})@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/selectByEmployeeNumbers")public ResponseEntity<Object> selectByEmployeeNumbers(@RequestParam(value = "employeeNumbers") String employeeNumbers) {List<PersonBaseInfoDTO> result = personBaseInfoService.selectByEmployeeNumbers(employeeNumbers);if (Objects.nonNull(result)) {return new ResponseEntity<>(result, HttpStatus.OK);} else {return new ResponseEntity<>(new PersonInfoDTO(), HttpStatus.OK);}}@ApiOperation(value = "查询人员基本附加信息", notes = "查询人员基本附加信息", response = HistoryDTO.class, responseContainer = "List", httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "string", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "flexStructureCode", value = "结构COde", dataType = "string", required = true),@ApiImplicitParam(name = "id", value = "人员ID,新增-1", dataType = "long")})@ApiResponse(code = 200, message = "返回数据成功", response = Page.class)@GetMapping("/attributesInfo/{id}")public ResponseEntity<Object> getAttributesInfo(@PathVariable(value = "id") Long id,@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@RequestParam(value = "flexStructureCode", required = false) String flexStructureCode) {return new ResponseEntity<>(personBaseInfoService.getAttributesInfo(xBusinessGroupId, flexStructureCode, id), HttpStatus.OK);}@ApiOperation(value = "导出word", notes = "导出word", response = PersonAnalysesInfoDTO.class, httpMethod = "GET", responseContainer = "LIST")@ApiImplicitParams({@ApiImplicitParam(name = "X-Business-Group-Id", value = "用户所属业务组编号", paramType = "header", dataType = "long", required = true, defaultValue = "1001"),@ApiImplicitParam(name = "personId", value = "员工信息主键", dataType = "long")})@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/word/export/{personId}")public ResponseEntity<Object> getAnalysesInfo(@RequestHeader("X-Business-Group-Id") Long xBusinessGroupId,@PathVariable(value = "personId") Long personId) {return new ResponseEntity<>(personWordExport.export(xBusinessGroupId, personId), HttpStatus.OK);}@ApiOperation(value = " 查询省市信息集合", notes = " 查询省市信息集合", response = AddressInfoDTO.class, responseContainer = "List", httpMethod = "GET")@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/addressInfo/search")public ResponseEntity<Object> searchAddressInfo() {List<AddressInfoDTO> result = addressInfoService.searchAddressInfo();if (Objects.nonNull(result)) {return new ResponseEntity<>(result, HttpStatus.OK);} else {return new ResponseEntity<>(new AddressInfoDTO(), HttpStatus.OK);}}@ApiOperation(value = " 根据市id查询地址信息", notes = " 查询省市信息集合", response = AddressInfo.class, httpMethod = "GET")@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/addressInfo/{id}")public ResponseEntity<Object> searchAddressById(@PathVariable String id) {AddressInfo result = addressInfoService.searchProvinceName(id);return new ResponseEntity<>(result, HttpStatus.OK);}@ApiOperation(value = " 获取一个每个字的首字母大写的拼音", notes = " 获取一个每个字的首字母大写的拼音", response = String.class, responseContainer = "String", httpMethod = "GET")@ApiResponse(code = 200, message = "返回数据成功")@GetMapping("/pinyinName")public ResponseEntity<String> pinyinName(@RequestParam(value = "chineseName") String chineseName) {return new ResponseEntity<>(PinyinUtils.pinyinName(chineseName), HttpStatus.OK);}}
好久没有接触过这种写法的项目了,其实刚接触的时候还是不是很适应的,但是这个controller写的还是挺漂亮的
这是所有的方法,
查询
很标准的一个查询,构建一个查询实体,然后去进行放置参数,进行查询,返回带分页的查询,可以通过参数配置是否需要分页。
新增、修改
一般来说会将新增和修改放在同一个接口中
这个时候开始体现框架了。
this.createOrRenew(from, xPersonId, xPersonName, date, personBaseInfo);
方法
PersonBaseInfoController 继承了BaseHistoryController,BaseHistoryController继承BaseController
/*** 创建 or 更新(插入新的)逻辑** @param from* @param xPersonId* @param xPersonName* @param date* @param t* @return*/protected ResponseEntity<Object> createOrRenew(D from, Long xPersonId, String xPersonName, Date date, T t) {try {if (Objects.isNull(from.getId())) {return new ResponseEntity<>(new MessageResponse("Id 不能为空!"), HttpStatus.NOT_FOUND);} else if (Objects.equals(from.getId(), NEED_CREATE_ID)) {t.setCreateBy(xPersonId);t.setCreateByName(xPersonName);return this.create(from, t);} else if (from.getId() > 0) {t.setId(from.getId());if (Objects.isNull(date)) {return this.renew(from, t);} else {LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();return this.renew(from, t, localDate);}}} catch (ServiceException e) {return new ResponseEntity<>(e.getMessageResponse(), HttpStatus.NOT_FOUND);}return new ResponseEntity<>(new MessageResponse("保存失败!"), HttpStatus.NOT_FOUND);}
public static final Long NEED_CREATE_ID = -1L;
D from就是传进来的参数,然后判断id,是否是存在不存在就提示报错,如果是新增的话id穿-1,如果是修改的话id就传原本的id,因为如果是修改的话也不会是修改id。
return this.create(from, t);
新增,在这里如果是单纯的点击去你就会去点进去
至少在我第一次看的时候确实是没有看到。
正确的是返回具体的实现类PersonBaseInfoController ,去PersonBaseInfoController 类的方法
@Overrideprotected ResponseEntity<Object> create(PersonInfoDTO from, PersonBaseInfo personBaseInfo) {return ResponseEntityUtils.buildCreateResponseEntity(personBaseInfoService.create(from, personBaseInfo));}
然后就去了personBaseInfoService.create方法了,具体去实现了新建的方法
return this.renew(from, t);
修改,
@Overrideprotected ResponseEntity<Object> renew(PersonInfoDTO from, PersonBaseInfo personBaseInfo, LocalDate localDate) {return ResponseEntityUtils.buildRenewResponseEntity(personBaseInfoService.renew(from, personBaseInfo, localDate));}
看到这里其实感觉还是挺简单,但是这些搞了好久,感觉还是挺新奇。
然后是修改的时候框架又出现了挺有趣的地方
public class PersonBaseInfoService extends HistoryServiceImpl
在PersonBaseInfoService 调用修改的方法renew()的时候,
@Transactional(rollbackFor = {RuntimeException.class, Exception.class})public int renew(T t, LocalDate date) {dataFill(t);dataCheck(t);// 局部date变量LocalDate renewDate = this.getOperatingDate(date);T dbRecord = getDbRecord(t, renewDate);Wrapper<T> wrapper = getDbRecordWrapper(dbRecord);T update = newT(t.getClass());update.setUpdateTime(LocalDateTime.now());int result = 0;// 更新if (renewDate.isAfter(dbRecord.getStartDate())) {update.setEndDate(renewDate.minusDays(1));this.renewUpdateEndDatePostProcessBefore(t, dbRecord, update, renewDate);baseMapper.update(update, wrapper);T insert = newT(t.getClass());BeanCopyUtils.copyProperties(dbRecord, insert);BeanCopyUtils.copyProperties(t, insert, PropertiesCopyable.updateIgnoreCopyable());insert.setStartDate(renewDate);insert.setUpdateTime(LocalDateTime.now());// 这里传入的是更新要insert的对象this.updatePostProcessBefore(t, dbRecord, insert, renewDate);String tableName = this.reflectTableName(t);if(Objects.nonNull(tableName)) {// SET IDENTITY_INSERT = ONdmMapper.setIdentityInsertON(tableName);System.out.println(t.toString());result = baseMapper.insert(insert);// SET IDENTITY_INSERT = OFFdmMapper.setIdentityInsertOFF(tableName);} else {result = baseMapper.insert(insert);}}// 更正if (renewDate.isEqual(dbRecord.getStartDate())) {BeanCopyUtils.copyProperties(t, update, PropertiesCopyable.updateIgnoreCopyable());this.updatePostProcessBefore(t, dbRecord, update, renewDate);result = baseMapper.update(update, wrapper);}this.updatePostProcessAfter(t, dbRecord, update, renewDate, result);return result;}
这个有啥用呢
这里只要想要实现具体的方法,就在这里重写即可,我觉得这个写法就很优秀,需要什么业务限制,就重写什么。