UserAuditRptController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. package com.dragoninfo.dcuc.authweb.restcontroller.audit;
  2. import com.alibaba.fastjson.JSON;
  3. import com.dragoninfo.dcuc.app.entity.ApplyInfo;
  4. import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
  5. import com.dragoninfo.dcuc.app.facade.IManufacturerInfoFacade;
  6. import com.dragoninfo.dcuc.authweb.util.CompareUtils;
  7. import com.dragoninfo.dcuc.duceap.facade.ICodeListResourceFacade;
  8. import com.dragoninfo.dcuc.duceap.facade.IDuceapCodeFacade;
  9. import com.dragoninfo.dcuc.user.user.entity.AccountInfo;
  10. import com.dragoninfo.dcuc.user.user.entity.PostInfo;
  11. import com.dragoninfo.dcuc.user.user.entity.UserInfo;
  12. import com.dragoninfo.dcuc.user.user.enumresources.*;
  13. import com.dragoninfo.dcuc.user.user.facade.IUserInfoFacade;
  14. import com.dragoninfo.dcuc.user.user.facade.IUserLogFacade;
  15. import com.dragoninfo.dcuc.user.user.vo.CompareVo;
  16. import com.dragoninfo.dcuc.user.user.vo.UserLogVo;
  17. import com.dragoninfo.duceap.core.response.Result;
  18. import com.dragonsoft.duceap.base.entity.metadata.CodeRecord;
  19. import com.dragonsoft.duceap.base.entity.search.SearchDTO;
  20. import com.dragonsoft.duceap.commons.util.ObjectUtils;
  21. import com.dragonsoft.duceap.commons.util.string.StringUtils;
  22. import io.swagger.annotations.Api;
  23. import io.swagger.annotations.ApiImplicitParam;
  24. import io.swagger.annotations.ApiImplicitParams;
  25. import io.swagger.annotations.ApiOperation;
  26. import org.slf4j.Logger;
  27. import org.slf4j.LoggerFactory;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.data.domain.Page;
  30. import org.springframework.web.bind.annotation.*;
  31. import java.text.ParseException;
  32. import java.text.SimpleDateFormat;
  33. import java.util.*;
  34. @Api(tags = {"用户审计报表"})
  35. @RestController
  36. @RequestMapping(value = "/auditsvr")
  37. public class UserAuditRptController {
  38. public static Logger logger = LoggerFactory.getLogger(UserAuditRptController.class);
  39. @Autowired
  40. private IUserLogFacade iUserLogFacade;
  41. @Autowired
  42. private IApplyInfoFacade iApplyInfoFacade;
  43. @Autowired
  44. private IManufacturerInfoFacade iManufacturerInfoFacade;
  45. @Autowired
  46. private IUserInfoFacade iUserInfoFacade;
  47. @Autowired
  48. private IDuceapCodeFacade iDuceapCodeFacade;
  49. @Autowired
  50. private ICodeListResourceFacade codeListResourceFacade;
  51. private Map<String, String> codeMap = new HashMap<String, String>() {{
  52. put("UserType", "DM_USER_TYPE"); //人员类型
  53. put("Area", "DM_AREA_CODE"); //地区
  54. put("UserStatus", "DM_USER_STATUS"); //人员状态
  55. put("AuxiliaryType", "DM_AUXILIARY_TYPE"); //辅警类型
  56. put("PoliceCategory", "T_MD_POLICE_TYPE"); //警钟
  57. put("Sex", "DM_SEX"); //性别
  58. put("Nation", "DM_NATION_CODE"); //民族
  59. put("Title", "DM_CERT_DUTY_LEVEL"); //职级
  60. put("Rank", "DM_POLICE_RANK"); //警衔
  61. }};
  62. @ApiOperation(value = "查询用户审计报表")
  63. @ApiImplicitParam(name = "SearchDTO", value = "查询条件,默认带一个IDCARD")
  64. @PostMapping(value = "users")
  65. public Result getUserAuditRpt(SearchDTO searchDTO) {
  66. searchDTO.setSort("");
  67. Page<UserLogVo> page = iUserLogFacade.findUserLogRpt(searchDTO);
  68. for (UserLogVo vo : page.getContent()) {
  69. List<CompareVo> dftMap = getCompareVos(vo);
  70. vo.setDftList(dftMap);
  71. continue;
  72. }
  73. return Result.success(page.getTotalElements(), page.getContent());
  74. }
  75. @ApiOperation(value = "查询用户审计详情")
  76. @ApiImplicitParams({@ApiImplicitParam(paramType = "path", name = "id", value = "主键ID", required = true
  77. , example = "40288a8b699fc2500169a33b20540000")})
  78. @GetMapping(value = "user/{id}")
  79. public Result<UserLogVo> userAuditDetail(@PathVariable("id") String id) {
  80. UserLogVo userLogVo = iUserLogFacade.userLogVoDetail(id);
  81. List<CompareVo> dftMap = getCompareVos(userLogVo);
  82. userLogVo.setDftList(dftMap);
  83. return Result.success(userLogVo);
  84. }
  85. @ApiOperation(value = "根据机构获取用户审计用户信息")
  86. @ApiImplicitParam(name = "SearchDTO", value = "带当前用户的机构Id(orgId)")
  87. @PostMapping(value = "/audit/users")
  88. public Result getUserWithDeleted(SearchDTO searchDTO) {
  89. Page<UserInfo> page = iUserInfoFacade.userList(searchDTO);
  90. Map<String, String> auxiliaryTypeList = getCodes("DM_AUXILIARY_TYPE");
  91. Map<String, String> policeUserTypeList = getCodes("DM_MAN_TYPE");
  92. page.forEach(item -> {
  93. if (UserTypeEnum.POLICE.getValue().equals(item.getUserType())) {
  94. item.setManType(policeUserTypeList.get(item.getManType()));
  95. }
  96. if (UserTypeEnum.HELPER.getValue().equals(item.getUserType())) {
  97. item.setManType(auxiliaryTypeList.get(item.getAuxiliaryType()));
  98. }
  99. });
  100. return Result.success(page.getTotalElements(), page.getContent());
  101. }
  102. private Map<String, String> getCodes(String codeName) {
  103. List<CodeRecord> codeRecordList = codeListResourceFacade.listCode("code", codeName);
  104. Map<String, String> map = new HashMap<>();
  105. codeRecordList.forEach(item -> {
  106. map.put(item.getValue(), item.getLabel());
  107. });
  108. return map;
  109. }
  110. private List<CompareVo> getCompareVos(UserLogVo vo) {
  111. List<CompareVo> dftMap = new ArrayList<CompareVo>();
  112. if (ObjectTypeEnum.USER.getValue().equals(vo.getObjectType())) {
  113. //用户信息
  114. try {
  115. UserInfo oldUser = JSON.parseObject(vo.getPreviousData(), UserInfo.class);
  116. UserInfo newUser = JSON.parseObject(vo.getJsonData(), UserInfo.class);
  117. if (vo.getOperateType().equals(OperateTypeEnum.UPDATE.getValue())) {
  118. filterColumn(oldUser, newUser);
  119. dftMap = CompareUtils.compareUser(oldUser, newUser);
  120. for (CompareVo compareVo : dftMap) {
  121. //放入对应枚举值
  122. setEunm(compareVo);
  123. }
  124. vo.setDftList(dftMap);
  125. }
  126. } catch (Exception e) {
  127. logger.error("userInfo-getUserAuditRpt:id:" + vo.getId());
  128. logger.error("", e);
  129. }
  130. } else if (ObjectTypeEnum.POSTINFO.getValue().equals(vo.getObjectType())) {
  131. try {
  132. //职位信息
  133. PostInfo newPost = JSON.parseObject(vo.getCurrentData(), PostInfo.class);
  134. PostInfo oldPost = new PostInfo();
  135. if (OperateTypeEnum.UPDATE.getValue().equals(vo.getOperateType()) && StringUtils.isNotEmpty(vo.getPreviousData())) {
  136. oldPost = JSON.parseObject(vo.getPreviousData(), PostInfo.class);
  137. }
  138. dftMap = CompareUtils.compareUser(oldPost, newPost);
  139. for (CompareVo compareVo : dftMap) {
  140. //放入对应枚举值
  141. setEunm(compareVo);
  142. }
  143. } catch (Exception e) {
  144. logger.error("postInfo-getUserAuditRpt:id:" + vo.getId());
  145. logger.error("", e);
  146. }
  147. } else if (ObjectTypeEnum.ACCOUNT.getValue().equals(vo.getObjectType())) {
  148. //账号信息
  149. try {
  150. AccountInfo newAccount = JSON.parseObject(vo.getCurrentData(), AccountInfo.class);
  151. if (vo.getOperateType().equals(OperateTypeEnum.UPDATE.getValue())) {
  152. if (StringUtils.isNotEmpty(vo.getPreviousData())) {
  153. AccountInfo oldAccount = JSON.parseObject(vo.getPreviousData(), AccountInfo.class);
  154. dftMap = CompareUtils.compareVos(oldAccount, newAccount, "endDate", "ipAddress", "isAtive", "password");
  155. for (CompareVo compareVo : dftMap) {
  156. //放入对应枚举值
  157. setEunm(compareVo);
  158. }
  159. }
  160. }
  161. } catch (Exception e) {
  162. logger.error("accountInfo-getUserAuditRpt:id:" + vo.getId());
  163. logger.error("getUserAuditRpt:json:" + vo.toString());
  164. logger.error("", e);
  165. }
  166. }
  167. return dftMap;
  168. }
  169. public CompareVo setEunm(CompareVo compareVo) {
  170. String name = compareVo.getName();
  171. if (StringUtils.isEmpty(name)) {
  172. return compareVo;
  173. }
  174. String beVal = "";
  175. String afterVal = "";
  176. if (name.equals("JobType")) {//在职类型
  177. for (JobTypeEnum jobTypeEnum : JobTypeEnum.values()) {
  178. if (jobTypeEnum.getValue().equals(compareVo.getAfterVal())) {
  179. compareVo.setAfterVal(jobTypeEnum.getLabel());
  180. }
  181. if (jobTypeEnum.getValue().equals(compareVo.getBeforeVal())) {
  182. compareVo.setBeforeVal(jobTypeEnum.getLabel());
  183. }
  184. }
  185. } else if (name.equals("ManType")) {//人员类型
  186. for (ManTypeEnum manTypeEnum : ManTypeEnum.values()) {
  187. if (manTypeEnum.getValue().equals(compareVo.getAfterVal())) {
  188. compareVo.setAfterVal(manTypeEnum.getLabel());
  189. }
  190. if (manTypeEnum.getValue().equals(compareVo.getBeforeVal())) {
  191. compareVo.setBeforeVal(manTypeEnum.getLabel());
  192. }
  193. }
  194. } else if (name.equals("Birth") || name.equals("CreateTime")) {
  195. afterVal = getDate(compareVo.getAfterVal());
  196. beVal = getDate(compareVo.getBeforeVal());
  197. compareVo.setAfterVal(afterVal);
  198. compareVo.setBeforeVal(beVal);
  199. } else if (name.equals("IsAtive")) {
  200. afterVal = compareVo.getAfterVal();
  201. beVal = compareVo.getBeforeVal();
  202. afterVal = "1".equals(afterVal) ? "启用" : "停用";
  203. beVal = "1".equals(beVal) ? "启用" : "停用";
  204. compareVo.setAfterVal(afterVal);
  205. compareVo.setBeforeVal(beVal);
  206. } else if (name.equals("Password")) {
  207. afterVal = "******";
  208. beVal = "******";
  209. compareVo.setAfterVal(afterVal);
  210. compareVo.setBeforeVal(beVal);
  211. } else if (name.equals("EndDate")) {//账号有效期
  212. afterVal = getDate(compareVo.getAfterVal());
  213. beVal = getDate(compareVo.getBeforeVal());
  214. if (afterVal.equals("")) {
  215. afterVal = "长期有效";
  216. }
  217. if (beVal.equals("")) {
  218. beVal = "长期有效";
  219. }
  220. compareVo.setAfterVal(afterVal);
  221. compareVo.setBeforeVal(beVal);
  222. } else if (name.equals("PoliceBusiness")) {
  223. String[] business = (StringUtils.isEmpty(compareVo.getAfterVal()) ? "" : compareVo.getAfterVal()).split(",");
  224. HashMap<String, String> map = getCodeVLMap(name);
  225. for (String b : business) {
  226. afterVal += map.get(b) + ",";
  227. }
  228. String[] busines = (StringUtils.isEmpty(compareVo.getBeforeVal()) ? "" : compareVo.getBeforeVal()).split(",");
  229. for (String b : busines) {
  230. beVal += map.get(b) + ",";
  231. }
  232. compareVo.setAfterVal(afterVal.length() > 0 ? afterVal.substring(0, afterVal.length() - 1) : "");
  233. compareVo.setBeforeVal(beVal.length() > 0 ? beVal.substring(0, beVal.length() - 1) : "");
  234. } else if (name.equals("Project") || name.equals("DutyProject")) {
  235. String[] projectAft = (StringUtils.isEmpty(compareVo.getAfterVal()) ? "" : compareVo.getAfterVal()).split(",");
  236. for (String b : projectAft) {
  237. ApplyInfo applyInfo = iApplyInfoFacade.applyDetail(b);
  238. if (ObjectUtils.isNotEmpty(applyInfo)) {
  239. afterVal += applyInfo.getApplyName() + ",";
  240. }
  241. }
  242. String[] projectBef = (StringUtils.isEmpty(compareVo.getBeforeVal()) ? "" : compareVo.getBeforeVal()).split(",");
  243. for (String b : projectBef) {
  244. ApplyInfo applyInfo = iApplyInfoFacade.applyDetail(b);
  245. if (ObjectUtils.isNotEmpty(applyInfo)) {
  246. beVal += iApplyInfoFacade.applyDetail(b).getApplyName() + ",";
  247. }
  248. }
  249. compareVo.setAfterVal(afterVal.length() > 0 ? afterVal.substring(0, afterVal.length() - 1) : "");
  250. compareVo.setBeforeVal(beVal.length() > 0 ? beVal.substring(0, beVal.length() - 1) : "");
  251. } else if ("Company".equals(name)) {
  252. if (StringUtils.isNotBlank(compareVo.getAfterVal())) {
  253. afterVal = iManufacturerInfoFacade.manufacturerInfoDetail(compareVo.getAfterVal()).getManufacturerName();
  254. compareVo.setAfterVal(afterVal);
  255. }
  256. if (StringUtils.isNotBlank(compareVo.getBeforeVal())) {
  257. beVal = iManufacturerInfoFacade.manufacturerInfoDetail(compareVo.getBeforeVal()).getManufacturerName();
  258. compareVo.setBeforeVal(beVal);
  259. }
  260. } else if (codeMap.containsKey(name)) {
  261. HashMap<String, String> map = getCodeVLMap(name);
  262. compareVo.setAfterVal(map.get(compareVo.getAfterVal()));
  263. compareVo.setBeforeVal(map.get(compareVo.getBeforeVal()));
  264. }
  265. return compareVo;
  266. }
  267. private HashMap<String, String> getCodeVLMap(String name) {
  268. HashMap<String, String> map = new HashMap<String, String>();
  269. String codeId = codeMap.get(name);
  270. List<Map<String, Object>> codeResource = iDuceapCodeFacade.getCodeResource(codeId);
  271. codeResource.forEach(item -> {
  272. String lable = item.get("NAME").toString();
  273. String value = item.get("CODE").toString();
  274. map.put(value, lable);
  275. });
  276. return map;
  277. }
  278. public String getDate(String time) {
  279. if (time.length() == 8) {
  280. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.US);
  281. Date d = null;
  282. try {
  283. d = sdf.parse(time);
  284. sdf = new SimpleDateFormat("yyyy-MM-dd");
  285. return sdf.format(d);
  286. } catch (ParseException e) {
  287. e.printStackTrace();
  288. }
  289. }
  290. if (time.length() == 10) {
  291. return time;
  292. } else {
  293. SimpleDateFormat sdf = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy", Locale.US);
  294. Date d;
  295. String date = "";
  296. try {
  297. if (org.apache.commons.lang.StringUtils.isNotEmpty(time)) {
  298. d = sdf.parse(time);
  299. sdf = new SimpleDateFormat("yyyy-MM-dd");
  300. date = sdf.format(d);
  301. }
  302. } catch (ParseException e) {
  303. // TODO Auto-generated catch block
  304. e.printStackTrace();
  305. }
  306. return date;
  307. }
  308. }
  309. /**
  310. * 过滤不需要展示的用户信息字段
  311. *
  312. * @param oldUser
  313. * @param newUser
  314. */
  315. private void filterColumn(UserInfo oldUser, UserInfo newUser) {
  316. oldUser.setJobType(null);
  317. newUser.setJobType(null);
  318. oldUser.setPostType(null);
  319. newUser.setPostType(null);
  320. oldUser.setBrithStr(null);
  321. newUser.setBrithStr(null);
  322. oldUser.setCreateTimeStr(null);
  323. newUser.setCreateTimeStr(null);
  324. if (UserTypeEnum.HELPER.getValue().equals(newUser.getUserType())
  325. || UserTypeEnum.EXTERNAL.getValue().equals(newUser.getUserType())) {
  326. oldUser.setMobilePrivate(null);
  327. newUser.setMobilePrivate(null);
  328. }
  329. }
  330. }