package com.dragoninfo.dcuc.authweb.restcontroller.audit; import com.alibaba.fastjson.JSON; import com.dragoninfo.dcuc.app.entity.ApplyInfo; import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade; import com.dragoninfo.dcuc.app.facade.IManufacturerInfoFacade; import com.dragoninfo.dcuc.authweb.util.CompareUtils; import com.dragoninfo.dcuc.duceap.facade.ICodeListResourceFacade; import com.dragoninfo.dcuc.duceap.facade.IDuceapCodeFacade; import com.dragoninfo.dcuc.user.user.entity.AccountInfo; import com.dragoninfo.dcuc.user.user.entity.PostInfo; import com.dragoninfo.dcuc.user.user.entity.UserInfo; import com.dragoninfo.dcuc.user.user.enumresources.*; import com.dragoninfo.dcuc.user.user.facade.IUserInfoFacade; import com.dragoninfo.dcuc.user.user.facade.IUserLogFacade; import com.dragoninfo.dcuc.user.user.vo.CompareVo; import com.dragoninfo.dcuc.user.user.vo.UserLogVo; import com.dragoninfo.duceap.core.response.Result; import com.dragonsoft.duceap.base.entity.metadata.CodeRecord; import com.dragonsoft.duceap.base.entity.search.SearchDTO; import com.dragonsoft.duceap.commons.util.ObjectUtils; import com.dragonsoft.duceap.commons.util.string.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @Api(tags = {"用户审计报表"}) @RestController @RequestMapping(value = "/auditsvr") public class UserAuditRptController { public static Logger logger = LoggerFactory.getLogger(UserAuditRptController.class); @Autowired private IUserLogFacade iUserLogFacade; @Autowired private IApplyInfoFacade iApplyInfoFacade; @Autowired private IManufacturerInfoFacade iManufacturerInfoFacade; @Autowired private IUserInfoFacade iUserInfoFacade; @Autowired private IDuceapCodeFacade iDuceapCodeFacade; @Autowired private ICodeListResourceFacade codeListResourceFacade; private Map codeMap = new HashMap() {{ put("UserType", "DM_USER_TYPE"); //人员类型 put("Area", "DM_AREA_CODE"); //地区 put("UserStatus", "DM_USER_STATUS"); //人员状态 put("AuxiliaryType", "DM_AUXILIARY_TYPE"); //辅警类型 put("PoliceCategory", "T_MD_POLICE_TYPE"); //警钟 put("Sex", "DM_SEX"); //性别 put("Nation", "DM_NATION_CODE"); //民族 put("Title", "DM_CERT_DUTY_LEVEL"); //职级 put("Rank", "DM_POLICE_RANK"); //警衔 }}; @ApiOperation(value = "查询用户审计报表") @ApiImplicitParam(name = "SearchDTO", value = "查询条件,默认带一个IDCARD") @PostMapping(value = "users") public Result getUserAuditRpt(SearchDTO searchDTO) { searchDTO.setSort(""); Page page = iUserLogFacade.findUserLogRpt(searchDTO); for (UserLogVo vo : page.getContent()) { List dftMap = getCompareVos(vo); vo.setDftList(dftMap); continue; } return Result.success(page.getTotalElements(), page.getContent()); } @ApiOperation(value = "查询用户审计详情") @ApiImplicitParams({@ApiImplicitParam(paramType = "path", name = "id", value = "主键ID", required = true , example = "40288a8b699fc2500169a33b20540000")}) @GetMapping(value = "user/{id}") public Result userAuditDetail(@PathVariable("id") String id) { UserLogVo userLogVo = iUserLogFacade.userLogVoDetail(id); List dftMap = getCompareVos(userLogVo); userLogVo.setDftList(dftMap); return Result.success(userLogVo); } @ApiOperation(value = "根据机构获取用户审计用户信息") @ApiImplicitParam(name = "SearchDTO", value = "带当前用户的机构Id(orgId)") @PostMapping(value = "/audit/users") public Result getUserWithDeleted(SearchDTO searchDTO) { Page page = iUserInfoFacade.userList(searchDTO); Map auxiliaryTypeList = getCodes("DM_AUXILIARY_TYPE"); Map policeUserTypeList = getCodes("DM_MAN_TYPE"); page.forEach(item -> { if (UserTypeEnum.POLICE.getValue().equals(item.getUserType())) { item.setManType(policeUserTypeList.get(item.getManType())); } if (UserTypeEnum.HELPER.getValue().equals(item.getUserType())) { item.setManType(auxiliaryTypeList.get(item.getAuxiliaryType())); } }); return Result.success(page.getTotalElements(), page.getContent()); } private Map getCodes(String codeName) { List codeRecordList = codeListResourceFacade.listCode("code", codeName); Map map = new HashMap<>(); codeRecordList.forEach(item -> { map.put(item.getValue(), item.getLabel()); }); return map; } private List getCompareVos(UserLogVo vo) { List dftMap = new ArrayList(); if (ObjectTypeEnum.USER.getValue().equals(vo.getObjectType())) { //用户信息 try { UserInfo oldUser = JSON.parseObject(vo.getPreviousData(), UserInfo.class); UserInfo newUser = JSON.parseObject(vo.getJsonData(), UserInfo.class); if (vo.getOperateType().equals(OperateTypeEnum.UPDATE.getValue())) { filterColumn(oldUser, newUser); dftMap = CompareUtils.compareUser(oldUser, newUser); for (CompareVo compareVo : dftMap) { //放入对应枚举值 setEunm(compareVo); } vo.setDftList(dftMap); } } catch (Exception e) { logger.error("userInfo-getUserAuditRpt:id:" + vo.getId()); logger.error("", e); } } else if (ObjectTypeEnum.POSTINFO.getValue().equals(vo.getObjectType())) { try { //职位信息 PostInfo newPost = JSON.parseObject(vo.getCurrentData(), PostInfo.class); PostInfo oldPost = new PostInfo(); if (OperateTypeEnum.UPDATE.getValue().equals(vo.getOperateType()) && StringUtils.isNotEmpty(vo.getPreviousData())) { oldPost = JSON.parseObject(vo.getPreviousData(), PostInfo.class); } dftMap = CompareUtils.compareUser(oldPost, newPost); for (CompareVo compareVo : dftMap) { //放入对应枚举值 setEunm(compareVo); } } catch (Exception e) { logger.error("postInfo-getUserAuditRpt:id:" + vo.getId()); logger.error("", e); } } else if (ObjectTypeEnum.ACCOUNT.getValue().equals(vo.getObjectType())) { //账号信息 try { AccountInfo newAccount = JSON.parseObject(vo.getCurrentData(), AccountInfo.class); if (vo.getOperateType().equals(OperateTypeEnum.UPDATE.getValue())) { if (StringUtils.isNotEmpty(vo.getPreviousData())) { AccountInfo oldAccount = JSON.parseObject(vo.getPreviousData(), AccountInfo.class); dftMap = CompareUtils.compareVos(oldAccount, newAccount, "endDate", "ipAddress", "isAtive", "password"); for (CompareVo compareVo : dftMap) { //放入对应枚举值 setEunm(compareVo); } } } } catch (Exception e) { logger.error("accountInfo-getUserAuditRpt:id:" + vo.getId()); logger.error("getUserAuditRpt:json:" + vo.toString()); logger.error("", e); } } return dftMap; } public CompareVo setEunm(CompareVo compareVo) { String name = compareVo.getName(); if (StringUtils.isEmpty(name)) { return compareVo; } String beVal = ""; String afterVal = ""; if (name.equals("JobType")) {//在职类型 for (JobTypeEnum jobTypeEnum : JobTypeEnum.values()) { if (jobTypeEnum.getValue().equals(compareVo.getAfterVal())) { compareVo.setAfterVal(jobTypeEnum.getLabel()); } if (jobTypeEnum.getValue().equals(compareVo.getBeforeVal())) { compareVo.setBeforeVal(jobTypeEnum.getLabel()); } } } else if (name.equals("ManType")) {//人员类型 for (ManTypeEnum manTypeEnum : ManTypeEnum.values()) { if (manTypeEnum.getValue().equals(compareVo.getAfterVal())) { compareVo.setAfterVal(manTypeEnum.getLabel()); } if (manTypeEnum.getValue().equals(compareVo.getBeforeVal())) { compareVo.setBeforeVal(manTypeEnum.getLabel()); } } } else if (name.equals("Birth") || name.equals("CreateTime")) { afterVal = getDate(compareVo.getAfterVal()); beVal = getDate(compareVo.getBeforeVal()); compareVo.setAfterVal(afterVal); compareVo.setBeforeVal(beVal); } else if (name.equals("IsAtive")) { afterVal = compareVo.getAfterVal(); beVal = compareVo.getBeforeVal(); afterVal = "1".equals(afterVal) ? "启用" : "停用"; beVal = "1".equals(beVal) ? "启用" : "停用"; compareVo.setAfterVal(afterVal); compareVo.setBeforeVal(beVal); } else if (name.equals("Password")) { afterVal = "******"; beVal = "******"; compareVo.setAfterVal(afterVal); compareVo.setBeforeVal(beVal); } else if (name.equals("EndDate")) {//账号有效期 afterVal = getDate(compareVo.getAfterVal()); beVal = getDate(compareVo.getBeforeVal()); if (afterVal.equals("")) { afterVal = "长期有效"; } if (beVal.equals("")) { beVal = "长期有效"; } compareVo.setAfterVal(afterVal); compareVo.setBeforeVal(beVal); } else if (name.equals("PoliceBusiness")) { String[] business = (StringUtils.isEmpty(compareVo.getAfterVal()) ? "" : compareVo.getAfterVal()).split(","); HashMap map = getCodeVLMap(name); for (String b : business) { afterVal += map.get(b) + ","; } String[] busines = (StringUtils.isEmpty(compareVo.getBeforeVal()) ? "" : compareVo.getBeforeVal()).split(","); for (String b : busines) { beVal += map.get(b) + ","; } compareVo.setAfterVal(afterVal.length() > 0 ? afterVal.substring(0, afterVal.length() - 1) : ""); compareVo.setBeforeVal(beVal.length() > 0 ? beVal.substring(0, beVal.length() - 1) : ""); } else if (name.equals("Project") || name.equals("DutyProject")) { String[] projectAft = (StringUtils.isEmpty(compareVo.getAfterVal()) ? "" : compareVo.getAfterVal()).split(","); for (String b : projectAft) { ApplyInfo applyInfo = iApplyInfoFacade.applyDetail(b); if (ObjectUtils.isNotEmpty(applyInfo)) { afterVal += applyInfo.getApplyName() + ","; } } String[] projectBef = (StringUtils.isEmpty(compareVo.getBeforeVal()) ? "" : compareVo.getBeforeVal()).split(","); for (String b : projectBef) { ApplyInfo applyInfo = iApplyInfoFacade.applyDetail(b); if (ObjectUtils.isNotEmpty(applyInfo)) { beVal += iApplyInfoFacade.applyDetail(b).getApplyName() + ","; } } compareVo.setAfterVal(afterVal.length() > 0 ? afterVal.substring(0, afterVal.length() - 1) : ""); compareVo.setBeforeVal(beVal.length() > 0 ? beVal.substring(0, beVal.length() - 1) : ""); } else if ("Company".equals(name)) { if (StringUtils.isNotBlank(compareVo.getAfterVal())) { afterVal = iManufacturerInfoFacade.manufacturerInfoDetail(compareVo.getAfterVal()).getManufacturerName(); compareVo.setAfterVal(afterVal); } if (StringUtils.isNotBlank(compareVo.getBeforeVal())) { beVal = iManufacturerInfoFacade.manufacturerInfoDetail(compareVo.getBeforeVal()).getManufacturerName(); compareVo.setBeforeVal(beVal); } } else if (codeMap.containsKey(name)) { HashMap map = getCodeVLMap(name); compareVo.setAfterVal(map.get(compareVo.getAfterVal())); compareVo.setBeforeVal(map.get(compareVo.getBeforeVal())); } return compareVo; } private HashMap getCodeVLMap(String name) { HashMap map = new HashMap(); String codeId = codeMap.get(name); List> codeResource = iDuceapCodeFacade.getCodeResource(codeId); codeResource.forEach(item -> { String lable = item.get("NAME").toString(); String value = item.get("CODE").toString(); map.put(value, lable); }); return map; } public String getDate(String time) { if (time.length() == 8) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.US); Date d = null; try { d = sdf.parse(time); sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(d); } catch (ParseException e) { e.printStackTrace(); } } if (time.length() == 10) { return time; } else { SimpleDateFormat sdf = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy", Locale.US); Date d; String date = ""; try { if (org.apache.commons.lang.StringUtils.isNotEmpty(time)) { d = sdf.parse(time); sdf = new SimpleDateFormat("yyyy-MM-dd"); date = sdf.format(d); } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return date; } } /** * 过滤不需要展示的用户信息字段 * * @param oldUser * @param newUser */ private void filterColumn(UserInfo oldUser, UserInfo newUser) { oldUser.setJobType(null); newUser.setJobType(null); oldUser.setPostType(null); newUser.setPostType(null); oldUser.setBrithStr(null); newUser.setBrithStr(null); oldUser.setCreateTimeStr(null); newUser.setCreateTimeStr(null); if (UserTypeEnum.HELPER.getValue().equals(newUser.getUserType()) || UserTypeEnum.EXTERNAL.getValue().equals(newUser.getUserType())) { oldUser.setMobilePrivate(null); newUser.setMobilePrivate(null); } } }