package com.highdatas.mdm.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.highdatas.mdm.entity.*; import com.highdatas.mdm.mapper.TableInfoMapper; import com.highdatas.mdm.pojo.CodeMsg; import com.highdatas.mdm.pojo.Operate; import com.highdatas.mdm.pojo.Result; import com.highdatas.mdm.pojo.SysAssembleUpdateType; import com.highdatas.mdm.service.IMaintainDetailService; import com.highdatas.mdm.service.IMaintainService; import com.highdatas.mdm.service.IMenuMappingService; import com.highdatas.mdm.service.MasterDataService; 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.text.MessageFormat; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @author kimi * @description * @date 2019-12-17 12:02 */ @RestController @RequestMapping("/master") public class MasterDataController { @Autowired MasterDataService masterDataService; @Autowired IMaintainService maintainService; @Autowired IMaintainDetailService maintainDetailService; @Autowired IMenuMappingService menuMappingService; @Autowired TableInfoMapper tableInfoMapper; @RequestMapping(value = "{tableName}/uploaded", method = RequestMethod.GET) public Result get(@PathVariable String tableName, HttpServletRequest request) { String uploadTypeStr = request.getParameter("uploadType"); SysAssembleUpdateType uploadType; if (StringUtils.isEmpty(uploadTypeStr)) { uploadType = SysAssembleUpdateType.Increment; } uploadType = SysAssembleUpdateType.valueOf(uploadTypeStr); TUser user = (TUser) request.getSession().getAttribute(Constant.USER); Maintain maintain = masterDataService.uploadedData(tableName, uploadType, user.getUserId()); JSONObject object = new JSONObject(); object.fluentPut("maintainId",maintain.getId()); object.fluentPut("version",maintain.getVersion()); return Result.success(object); } @RequestMapping(value = "{tableName}/get/{id}", method = RequestMethod.GET) public Result get(@PathVariable String tableName, @PathVariable String id) { return masterDataService.selectById(tableName,id); } @RequestMapping(value = "{tableName}/all/{pageNo}", method = RequestMethod.GET) public Result getByPage(@PathVariable String tableName, @PathVariable Integer pageNo, HttpServletRequest request) throws UnsupportedEncodingException { String pageSizeStr = request.getParameter("pageSize"); String whereSegment = request.getParameter(Constant.WHERE_SEGMENT); String fields = request.getParameter(Constant.FIELDS); if (StringUtils.isEmpty(whereSegment)) { whereSegment = Constant.WHERE_DEFAULT; }else { whereSegment = URLDecoder.decode(whereSegment, "UTF-8"); } String version = request.getParameter(Constant.VERSION); String tableByName = tableInfoMapper.selectTableByName(tableName); if (StringUtils.isEmpty(tableByName)) { return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); } boolean findMax = false; if (StringUtils.isEmpty(version)) { Maintain nowVersion = maintainService.getNowVersion(tableName); if(nowVersion == null) { return Result.error(new CodeMsg(100001,"无当前版本")); } version = String.valueOf(nowVersion.getVersion()); }else if(version.equalsIgnoreCase(Constant.MAX)){ findMax = true; version = String.valueOf(maintainService.getMaxVersion(tableName).getVersion()); } if (StringUtils.isEmpty(fields)) { if (StringUtils.isEmpty(pageSizeStr)) { return masterDataService.selectListByPageByVersion(tableName, whereSegment,pageNo,version, findMax); } return masterDataService.selectListByPageByVersion(tableName, null, whereSegment,pageNo, Integer.valueOf(pageSizeStr),version,findMax); }else { String[] split = fields.split(Constant.COMMA_TRIM); List fieldList = Arrays.stream(split).collect(Collectors.toList()); if (StringUtils.isEmpty(pageSizeStr)) { return masterDataService.selectListByPageByVersion(tableName, fieldList, whereSegment,pageNo, null,version, findMax); } return masterDataService.selectListByPageByVersion(tableName, fieldList, whereSegment,pageNo, Integer.valueOf(pageSizeStr), findMax); } } @RequestMapping(value = "{tableName}/all", method = RequestMethod.GET) public Result getAll(@PathVariable String tableName,HttpServletRequest request) { String whereSegment = request.getParameter(Constant.WHERE_SEGMENT); String version = request.getParameter(Constant.VERSION); if (StringUtils.isEmpty(version)) { version = String.valueOf(maintainService.getNowVersion(tableName).getVersion()); } if (StringUtils.isEmpty(whereSegment)) { return masterDataService.selectList(tableName); } return masterDataService.selectList(tableName,whereSegment); } @RequestMapping(value = "{maintainId}/modify/{operateStr}", method = RequestMethod.POST) public Result modify(@RequestParam String datas, @PathVariable String maintainId, @PathVariable String operateStr, HttpServletRequest request) throws UnsupportedEncodingException { Result result = null; Operate operate = Operate.parse(operateStr); Maintain maintain = maintainService.selectById(maintainId); switch (operate) { case delete: //datas is id; Integer deleteCount = tableInfoMapper.deleteRecordByMaintainId(maintain.getTableName() + Constant.RECORD, DbUtils.quotedStr(datas), DbUtils.quotedStr(maintainId)); result = Result.success(deleteCount); break; case update: JSONObject jsonObject = JSONObject.parseObject(datas); String id = (String) jsonObject.get("id"); jsonObject.remove(Constant.ID); datas = jsonObject.toJSONString(); String updateSegment = masterDataService.getUpdateSegment(maintain.getTableName(), maintain.getTableName() + Constant.RECORD, datas); Integer updateCount = tableInfoMapper.updateRecordByMaintainId(maintain.getTableName() + Constant.RECORD, updateSegment, DbUtils.quotedStr(maintainId)); result = Result.success(updateCount); break; case create: JSONObject createObject = JSONObject.parseObject(datas); String recordId = DbUtils.getUUID(); createObject.fluentPut(Constant.ID, recordId); createObject.fluentPut(Constant.STD_ID, DbUtils.getUUID()); datas = createObject.toJSONString(); MaintainDetail maintainDetail = new MaintainDetail(); maintainDetail.setParentId(maintainId); maintainDetail.setId(DbUtils.getUUID()); maintainDetail.setPreMergeId(recordId); maintainDetail.setCreateTime(new Date()); maintainDetail.setOperate(Operate.create); result = masterDataService.insert(maintain.getTableName() + Constant.RECORD, datas); if (result.getSuccess()) { maintainDetail.insert(); } break; default: result = Result.error(CodeMsg.OPERATR_ERROR); break; } return result; } @RequestMapping(value = "{tableName}/{operateStr}", method = RequestMethod.POST) public Result insert(@PathVariable String tableName,@PathVariable String operateStr, @RequestParam String datas, @RequestParam String modify, HttpServletRequest request) { String fields = request.getParameter("fields"); Operate operate = Operate.parse(operateStr); TUser user = (TUser) request.getSession().getAttribute("user"); String userId = user.getUserId(); Maintain maintain = maintainService.getMaxVersion(tableName); Maintain nowMaintain = maintainService.getNextMaintain(tableName, userId); Result result; if (operate.equals(Operate.delete)) { String nowMaintainId = nowMaintain.getId(); String tempId = tableInfoMapper.getTempIdByStdId(tableName + Constant.RECORD,DbUtils.quotedStr(datas), DbUtils.quotedStr(nowMaintainId)); if (!StringUtils.isEmpty(tempId)){ maintainDetailService.delete(new EntityWrapper().eq("parent_id", maintain.getId()).eq("pre_merge_id",tempId)); result = masterDataService.deleteById(tableName + Constant.RECORD, tempId); return result; }else { result = masterDataService.selectById(tableName, datas); Object data = result.getData(); datas = JSON.toJSONString(data); JSONObject object = JSON.parseObject(datas); Object grid = object.get("grid"); datas = JSON.toJSONString(grid); } } else if (operate.equals(Operate.update)) { JSONObject jsonObject = JSONObject.parseObject(datas); Object id = jsonObject.get("id"); String nowMaintainId = nowMaintain.getId(); String tempId = tableInfoMapper.getTempIdByStdId(tableName + Constant.RECORD,DbUtils.quotedStr(id.toString()), DbUtils.quotedStr(nowMaintainId)); if (StringUtils.isEmpty(tempId)) { result = masterDataService.selectById(tableName, id.toString()); } else { jsonObject.put(Constant.STD_ID, id); jsonObject.put(Constant.ID, tempId); return masterDataService.updateById(tableName + Constant.RECORD, JSON.toJSONString(jsonObject), tempId,false); } } //merge 2 temp String tableTempName = tableName + Constant.RECORD; JSONObject object = JSON.parseObject(datas); Object dataId = object.get(Constant.ID); if (dataId == null) { dataId = DbUtils.getUUID(); } object.put(Constant.STD_ID, dataId); object.put(Constant.ID, DbUtils.getUUID()); datas = JSON.toJSONString(object); if (StringUtils.isEmpty(fields)) { result = masterDataService.insert(tableTempName, datas); } else { result = masterDataService.insert(tableTempName, fields, datas); } List ids = (List) result.getData(); nowMaintain.insertOrUpdate(); for (String id : ids) { MaintainDetail maintainDetail = new MaintainDetail(); maintainDetail.setId(DbUtils.getUUID()); maintainDetail.setParentId(nowMaintain.getId()); maintainDetail.setPreMergeId(id); maintainDetail.setOperate(operate); maintainDetail.setCreateTime(new Date()); maintainDetail.insert(); } result.setData(nowMaintain.getId()); Maintain firstVersionMaintain = maintainService.getMaintainFromVersion(tableName, Constant.VERSION_Default); MenuMapping menuMapping = menuMappingService.selectOne(new EntityWrapper().eq("table_name", firstVersionMaintain.getTableName())); SysOperateLog operateLog = new SysOperateLog(); operateLog.setChargeId(user.getUserId()).setId(DbUtils.getUUID()) .setMaintainId(nowMaintain.getId()) .setDesp(MessageFormat.format(operate.getLogMessage(), ids.size())) .setOperate("更新主题") .setCreateTime(new Date()) .setMenumappingId(menuMapping.getId()); operateLog.insert(); return result; } @RequestMapping(value = "update/{id}", method = RequestMethod.POST) public Result updateById(@PathVariable String tableName,@RequestParam String datas, @PathVariable String id, HttpServletRequest request) { String totalStr = request.getParameter(Constant.TOTAL); boolean total = false; if (!StringUtils.isEmpty(totalStr)) { total = true; } return masterDataService.updateById(tableName, datas, id, total); } @RequestMapping(value = "update", method = RequestMethod.POST) public Result update(@PathVariable String tableName, @RequestParam String datas, HttpServletRequest request) { String whereSegment = request.getParameter(Constant.WHERE_SEGMENT); String totalStr = request.getParameter(Constant.TOTAL); boolean total = false; if (!StringUtils.isEmpty(totalStr)) { total = true; } if (StringUtils.isEmpty(whereSegment)) { return masterDataService.update(tableName, datas,total); } else { return masterDataService.update(tableName, datas, whereSegment, total); } } @RequestMapping(value = "delete/{id}", method = RequestMethod.GET) public Result deleteById(@PathVariable String tableName, @PathVariable String id) { return masterDataService.deleteById(tableName,id); } @RequestMapping(value = "delete", method = RequestMethod.GET) public Result delete(@PathVariable String tableName, HttpServletRequest request) { String whereSegment = request.getParameter(Constant.WHERE_SEGMENT); if (StringUtils.isEmpty(whereSegment)) { return masterDataService.delete(tableName); } else { return masterDataService.delete(tableName, whereSegment); } } }