package com.highdatas.mdm.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.highdatas.mdm.entity.Flows; import com.highdatas.mdm.entity.Maintain; import com.highdatas.mdm.entity.TUser; import com.highdatas.mdm.mapper.MaintainDetailMapper; import com.highdatas.mdm.mapper.TableInfoMapper; import com.highdatas.mdm.pojo.ActivitiStatus; import com.highdatas.mdm.pojo.CodeMsg; import com.highdatas.mdm.pojo.Operate; import com.highdatas.mdm.pojo.Result; import com.highdatas.mdm.service.*; import com.highdatas.mdm.util.Constant; import com.highdatas.mdm.util.DbUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.*; import java.util.stream.Collectors; /** *

* 前端控制器 *

* @description 数据版本接口 * @author kimi * @since 2019-12-16 */ @RestController @RequestMapping("/maintain") public class MaintainController { @Autowired IMaintainService maintainService; @Autowired IMaintainDetailService maintainDetailService; @Autowired TableInfoMapper tableInfoMapper; @Autowired IFlowsService flowsService; @Autowired IMaintainFieldService maintainFieldService; @Autowired IMasterAuthorService masterAuthorService; @Autowired MaintainDetailMapper maintainDetailMapper; /** * * @description: 通过id获取版本信息 * @param id maintainId * @return: maintain信息 * */ @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) public Result get(@PathVariable String id) { //通过id获取版本信息 Maintain maintain = maintainService.selectById(id); if (maintain == null) { return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } return Result.success(maintain); } /** * * @description: 通过id 获取上个版本的相关数据 * @param maintainId 版本id * @param id 数据id * @return: 上个版本的数据信息 * */ @RequestMapping(value = "/getPreInfo/{id}", method = RequestMethod.GET) public Result getPreInfo(@PathVariable String id, @RequestParam String maintainId) { //通过id获取版本信息 Maintain maintain = maintainService.selectById(maintainId); if (maintain == null) { return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } //通过id获取上个版本的数据信息 Map preInfo = maintainService.getPreInfo(maintain, id); return Result.success(preInfo); } /** * * @description: 获取未提交的数据列表 * @param tableName 表名 * @param pageNo 页数 * @return: 未提交数据 * */ @RequestMapping(value = "{tableName}/unSubmit/{pageNo}", method = RequestMethod.GET) public Result unSubmit(@PathVariable String tableName, @PathVariable Integer pageNo, HttpServletRequest request) throws UnsupportedEncodingException { //pageSize 每页数据量 , whereSegment筛选条件 String pageSize = request.getParameter("pageSize"); String whereSegment = request.getParameter("whereSegment"); //请求头里获取用户信息 TUser user = DbUtils.getUser(request); //获取筛选 if (StringUtils.isEmpty(whereSegment)) { whereSegment = Constant.WHERE_DEFAULT; }else { whereSegment = URLDecoder.decode(whereSegment, "UTF-8"); } //获取未提交的数据 return maintainService.getUnSubmitData(user, tableName, pageNo, pageSize, whereSegment); } /** * * @description: 获取未提交的数据量 * @param tableName 表名 * @return: 未提交数据量 * */ @RequestMapping(value = "{tableName}/unSubmitCnt", method = RequestMethod.GET) public Result unSubmitCnt(@PathVariable String tableName,HttpServletRequest request) throws UnsupportedEncodingException { //whereSegment 筛选条件 String whereSegment = request.getParameter("whereSegment"); TUser user = DbUtils.getUser(request); if (StringUtils.isEmpty(whereSegment)) { whereSegment = Constant.WHERE_DEFAULT; }else { whereSegment = URLDecoder.decode(whereSegment, "UTF-8"); } //获取未提交的数据量 Long unSubmitDataCnt = maintainService.getUnSubmitDataCnt(user, tableName, whereSegment); return Result.success(unSubmitDataCnt); } /** * * @description: 获取未审批的数据量 * @param tableName 表名 * @return: 未审批数据量 * */ @RequestMapping(value = "{tableName}/unflowCnt", method = RequestMethod.GET) public Result unflow(@PathVariable String tableName, HttpServletRequest request) throws UnsupportedEncodingException { //whereSegment 筛选条件 String whereSegment = request.getParameter("whereSegment"); TUser user = DbUtils.getUser(request); //组合筛选条件 if (StringUtils.isEmpty(whereSegment)) { whereSegment = Constant.WHERE_DEFAULT; }else { whereSegment = URLDecoder.decode(whereSegment, "UTF-8"); } //获取未审批的数据条数 Long invalidVerionDataCnt = maintainService.getInvalidVerionDataCnt(user, tableName, whereSegment); return Result.success(invalidVerionDataCnt); } /** * * @description: 获取未提交的数据列表 * @param tableName 表名 * @param pageNo 页数 * @return: 未提交数据 * */ @RequestMapping(value = "{tableName}/unflow/{pageNo}", method = RequestMethod.GET) public Result unflow(@PathVariable String tableName, @PathVariable Integer pageNo, HttpServletRequest request) throws UnsupportedEncodingException { //pageSize 每页数据量 , whereSegment筛选条件 String pageSize = request.getParameter("pageSize"); String whereSegment = request.getParameter("whereSegment"); //请求头里获取用户信息 TUser user = DbUtils.getUser(request); //组装筛选条件 if (StringUtils.isEmpty(whereSegment)) { whereSegment = Constant.WHERE_DEFAULT; }else { whereSegment = URLDecoder.decode(whereSegment, "UTF-8"); } //获取未审批通过的数据 if (StringUtils.isEmpty(pageSize)) { return maintainService.getInvalidVerionData(user, tableName, whereSegment, pageNo, null); } else { return maintainService.getInvalidVerionData(user, tableName, whereSegment, pageNo, Integer.valueOf(pageSize)); } } /** * * @description: 获取主题的版本list * @param tableName 表名 * @return: 主题的版本list * */ @RequestMapping(value = "/version/{tableName}", method = RequestMethod.GET) public Result getHistory(@PathVariable String tableName, HttpServletRequest request) { //获取请求头里的用户信息 TUser user = DbUtils.getUser(request); String userId = user.getUserId(); //获取最大版本 Maintain maxVersion = maintainService.getMaxVersion(tableName); if (maxVersion == null) { return Result.error(new CodeMsg(100001,"无当前版本")); } //获取当前版本 Maintain nowVersion = maintainService.getNowVersion(tableName); //获取版本list List maintainList = maintainService.selectList(new EntityWrapper().eq("table_name", tableName).orderBy("order_no",false)); List result = new ArrayList<>(); int count = 0; for (Maintain maintain : maintainList) { String flowId = maintain.getFlowId(); //去除未生效的版本 if (StringUtils.isEmpty(flowId)) { continue; } //校验是否有权限 boolean author = masterAuthorService.checkMaintainAuthor(user, maintain.getId()); if (!author) { continue; } Flows flows = flowsService.selectById(maintain.getFlowId()); if (flows.getStatus().equals(ActivitiStatus.close)) { continue; } //校验是否为下一节点审批人 if (flows.getStatus().equals(ActivitiStatus.working) || flows.getStatus().equals(ActivitiStatus.refuse)) { boolean nextAudit = flowsService.isNextAudit(flows, userId); if (nextAudit) { count++; } // count++; continue; }else if(flows.getStatus().equals(ActivitiStatus.open)){ //历史i版本状态为1 maintain.setMaintainType(1); } if (nowVersion != null && maintain.getId().equalsIgnoreCase(nowVersion.getId())) { //当前版本状态为0 maintain.setMaintainType(0); } result.add(maintain); } // int cnt = maintainFieldService.getUnFlowCount(tableName, userId); count += cnt; if (count > 0) { //未生效版本状态为-1 Maintain maintain = new Maintain(); maintain.setMaintainType(-1); maintain.setVersion("待审核"); maintain.setTableName(tableName); maintain.setRecordCount(count); result.add(maintain); } //list 倒叙 Collections.sort(result, new Comparator() { @Override public int compare(Maintain o1, Maintain o2) { return o1.getMaintainType().compareTo(o2.getMaintainType()); } }); return Result.success(result); } // /** // * // * @description: 获取主题的版本list // * @param tableName 表名 // * @return: 主题的版本list // * // */ // @RequestMapping(value = "/detail/{id}/{pageNo}", method = RequestMethod.GET) // public Result detail(@PathVariable String id, @PathVariable int pageNo) { // Maintain maintain = maintainService.selectById(id); // String tableName = maintain.getTableName(); // String tableTempName = tableName + Constant.RECORD; // // List maintainDetailList = maintainDetailService.selectList(new EntityWrapper().eq("parent_id", id)); // // return Result.success(maintain); // } /** * * @description: 获取所有版本的list * @param pageno yeshu * @return: 所有版本的list * */ @RequestMapping(value = "/all/{pageno}", method = RequestMethod.GET) public Result all(@PathVariable int pageno, HttpServletRequest request) { //表名 String tableName = request.getParameter("tableName"); //检验表名是否存在 String s = tableInfoMapper.selectTableByName(tableName); Page result; //pageSize 每页数据量 String pageSize = request.getParameter("pageSize"); Page maintainPage; if (StringUtils.isEmpty(pageSize)) { maintainPage = new Page(pageno, 20); } else { maintainPage = new Page(pageno, Integer.valueOf(pageSize)); } //筛选--表名 if (StringUtils.isEmpty(tableName)) { result = maintainService.selectPage(maintainPage); } else { Wrapper tableNameWrapper = new EntityWrapper().eq("table_name", tableName); tableNameWrapper.orderBy("order_no desc"); result = maintainService.selectPage(maintainPage, tableNameWrapper); } List records = result.getRecords(); List resultObj = new ArrayList<>(); for (Maintain record : records) { //校验是否审批结束 String flowId = record.getFlowId(); if (StringUtils.isEmpty(flowId)) { continue; } Flows flows = flowsService.selectById(flowId); if (flows == null || !flows.getStatus().equals(ActivitiStatus.open)) { continue; } //校验用户是否存在 String chargeId = record.getChargeId(); TUser user = DbUtils.getUserById(chargeId); if (user == null) { record.setChargeId("用户已删除"); }else { record.setChargeId(user.getUserName()); } resultObj.add(record); } result.setRecords(resultObj); return Result.success(result); } /** * * @description: 获取允许比较的版本list * @param pageNo 页数 * @return: 允许比较的版本list * */ @RequestMapping(value = "/compareList/{pageNo}", method = RequestMethod.GET) public Result compare(@PathVariable Integer pageNo, @RequestParam String tableName, HttpServletRequest request) { //pageSize 每页数据量 String pageSizeStr = request.getParameter("pageSize"); int pageSize = 15; if (!StringUtils.isEmpty(pageSizeStr)) { pageSize = Integer.valueOf(pageSizeStr); } //筛选掉不含流程信息后的版本list List maintainList = maintainService.selectList(new EntityWrapper().eq("table_name", tableName).isNotNull("flow_id").orderBy("order_no desc")); com.highdatas.mdm.pojo.Page page = new com.highdatas.mdm.pojo.Page(maintainList.size()); page.setPageNo(pageNo); page.setPageSize(pageSize); //筛选审批成功的版本list,即当前生效的版本 List collect = maintainList.stream().filter(maintain -> ActivitiStatus.open.equals(flowsService.getStatusByBusinessId(maintain.getId()))) .skip(page.getBeginRecordNo_1()).limit(pageSize).collect(Collectors.toList()); List> result = new ArrayList<>(); for (int i = 0; i < collect.size(); i++) { Maintain maintain = collect.get(i); String version = maintain.getVersion(); Date createTime = maintain.getCreateTime(); String chargeId = maintain.getChargeId(); TUser user = DbUtils.getUserById(chargeId); HashMap oneResult = new HashMap<>(); oneResult.put("version", version); oneResult.put("time", createTime); oneResult.put("userName", chargeId); oneResult.put("id", maintain.getId()); if (user != null) { //添加用户信息 oneResult.put("userName", user.getUserName()); } if (i < collect.size() - 1) { //获取上个版本的版本信息 Maintain preMaintain = collect.get(i + 1); //BY操作类型获取上个版本的数据量 List> maps = maintainDetailMapper.selectOperateCnt(maintain.getTableName(), preMaintain.getOrderNo(), maintain.getOrderNo()); oneResult.put("content", maps); oneResult.put("preMaintain", preMaintain); } else { List> maps = maintainDetailMapper.selectOperateFirstCnt(maintain.getTableName(), maintain.getOrderNo()); oneResult.put("content", maps); } result.add(oneResult); } //组装返回值 JSONObject object = new JSONObject(); object.fluentPut("total", page.getRecordCount()); object.fluentPut("size", page.getPageSize()); object.fluentPut("pages", page.getPageCount()); object.fluentPut("current", page.getPageNo()); object.fluentPut("records", result); return Result.success(object); } /** * * @description: BY 操作类型获取比较两个版本的数据 * @param pageNo 页数 * @param operate 操作类型 * @param maintainId1 第一个版本 * @param maintainId2 第二个版本 * @return: BY 操作类型返回数据 * */ @RequestMapping(value = "/compare/{maintainId1}/{maintainId2}", method = RequestMethod.GET) public Result compare(@PathVariable String maintainId1, @PathVariable String maintainId2, @RequestParam Operate operate, @RequestParam int pageNo, HttpServletRequest request) { //pageSize 每页数据量 String pageSizeStr = request.getParameter("pageSize"); int pageSize = 15; if (!StringUtils.isEmpty(pageSizeStr)) { pageSize = Integer.valueOf(pageSizeStr); } //比较两个版本 JSONObject object = maintainService.compare(maintainId1, maintainId2, operate, pageNo, pageSize); return Result.success(object); } /** * * @description: 获取比较两个版本的字段 * @param maintainId1 第一个版本 * @param maintainId2 第二个版本 * @return: 比较两个版本的字段 * */ @RequestMapping(value = "/compareField/{maintainId1}/{maintainId2}", method = RequestMethod.GET) public Result compareField(@PathVariable String maintainId1, @PathVariable String maintainId2) { //比较两个版本的字段 JSONObject object = maintainService.compareField(maintainId1, maintainId2); return Result.success(object); } /** * * @description: 判断是否能继续上传表结构 * @param tableName 表名 * @return: 是否能继续上传表结构 * */ @RequestMapping(value = "/canUpload/{tableName}", method = RequestMethod.GET) public Result canUpload(@PathVariable String tableName) { //获取当前版本 Maintain nowVersion = maintainService.getNowVersion(tableName); if (nowVersion == null) { return Result.success(true); }else { return Result.success(false); } } /** * * @description: 获取某个版本下的记录 * @param pageNo 页数 * @return: 某个版本下的记录 * */ @RequestMapping(value = "/detail/{pageNo}", method = RequestMethod.GET) public Result setFlowId(@RequestParam String flowId,@PathVariable Integer pageNo, HttpServletRequest request) { //whereSegment 筛选条件 String whereSegment = request.getParameter("whereSegment"); //pageSize 每页数据量 String pageSize = request.getParameter("pageSize"); //获取请求头中的用户信息 TUser user = DbUtils.getUser(request); if (StringUtils.isEmpty(whereSegment)) { whereSegment = Constant.WHERE_DEFAULT; } //通过筛选调教获取记录表中的数据 if (StringUtils.isEmpty(pageSize)) { return maintainService.tempDataByVersionByFlow(user, flowId, whereSegment, pageNo, null); } return maintainService.tempDataByVersionByFlow(user, flowId, whereSegment, pageNo, Integer.valueOf(pageSize)); } /** * * @description: 更新流程实例id * @param id 版本id * @param flowid 流程实例id * @return: 是否更新成功 * */ @RequestMapping(value = "/set/{id}", method = RequestMethod.GET) public Result setFlowId(@PathVariable String id, @RequestParam String flowid) { //通过id获取版本信息 Maintain maintain = maintainService.selectById(id); if (maintain == null) { return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } //更新流程实例id maintain.setFlowId(flowid); maintain.updateById(); return Result.success(maintain); } }