package com.highdatas.mdm.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.highdatas.mdm.entity.Maintain;
import com.highdatas.mdm.entity.MenuMapping;
import com.highdatas.mdm.entity.SysMenu;
import com.highdatas.mdm.entity.TUser;
import com.highdatas.mdm.mapper.MenuMappingMapper;
import com.highdatas.mdm.mapper.TableInfoMapper;
import com.highdatas.mdm.pojo.CodeMsg;
import com.highdatas.mdm.pojo.Result;
import com.highdatas.mdm.service.*;
import com.highdatas.mdm.util.Constant;
import com.highdatas.mdm.util.DbUtils;
import com.highdatas.mdm.util.WorkflowUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Map;
/**
*
* 服务实现类
*
*
* @author kimi
* @since 2019-12-16
*/
@Service
public class MenuMappingServiceImpl extends ServiceImpl implements IMenuMappingService {
@Autowired
TableInfoMapper tableInfoMapper;
@Autowired
MenuMappingMapper menuMappingMapper;
@Autowired
IMaintainService maintainService;
@Autowired
ActivitiService activitiService;
@Autowired
ISysMenuService menuService;
@Autowired
IMaintainFieldService maintainFieldService;
@Autowired
IMasterAuthorService masterAuthorService;
public static final String key = "process";
@Override
public MenuMapping create(String json, HttpSession session) {
JSONObject jsonObject = JSONObject.parseObject(json);
// //1
// Flows flows = activitiService.start(key, session);
// if (flows == null) {
// return false;
// }
// //2
// String flowsId = flows.getId();
TUser user = (TUser)session.getAttribute(Constant.USER);
String userId = user.getUserId();
//Maintain maintain = createMaintain(userId, jsonObject, null);
/*if (maintain == null) {
return false;
}*/
//String maintainId = maintain.getId();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MenuMapping menuMapping = null;
try {
menuMapping = objectMapper.readValue(json, MenuMapping.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
String menuId = menuMapping.getMenuId();
if (StringUtils.isEmpty(menuId)) {
return null;
}
int cnt = selectCount(new EntityWrapper().eq("menu_id", menuId));
if (cnt != 0) {
return null;
}
//menuMapping.setMaintainFieldId(maintainId);
return create(menuMapping);
}
private Maintain createMaintain(String userId, JSONObject jsonObject, String flowsId) {
Maintain maintain = new Maintain();
maintain.setCreateTime(new Date());
maintain.setChargeId(userId);
// maintain.setFlowId(flowsId);
maintain.setVersion(Constant.VERSION_Default);
maintain.setId(DbUtils.getUUID());
String desp = jsonObject.getString("desp");
String tableName = jsonObject.getString("tableName");
if(StringUtils.isEmpty(tableName)) {
return null;
}
maintain.setDesp(desp);
maintain.setTableName(tableName);
boolean insert = maintainService.insert(maintain);
if (insert) {
return maintain;
}
return null;
}
@Override
public MenuMapping create(MenuMapping menuMapping) {
menuMapping.setCreateTime(new Date());
menuMapping.setId(DbUtils.getUUID());
String name = menuMapping.getName();
name = DbUtils.getChineseOrEnglishOrNumber(name);
String tableName = WorkflowUtils.toFirstChar(name.toLowerCase());
tableName = Constant.MD + tableName;
String tableByName = tableInfoMapper.selectTableByName(tableName);
if (!StringUtils.isEmpty(tableByName)){
int sameCount = selectCount(new EntityWrapper().eq("table_name", tableName));
if (sameCount > 0) {
tableName = tableName + "_" + DbUtils.getUUID(5);
}
}
int length = 0;
try {
length = tableName.getBytes("UTF-8").length;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (length > 18) {
tableName = Constant.MD + DbUtils.getUUID(10);
}
menuMapping.setTableName(tableName);
boolean insert = this.insert(menuMapping);
if (insert) {
return menuMapping;
} else {
return null;
}
}
@Override
public boolean update(String json) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MenuMapping menuMapping = null;
try {
menuMapping = objectMapper.readValue(json, MenuMapping.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
return false;
}
//update menu name
String menuId = menuMapping.getMenuId();
SysMenu sysMenu = menuService.selectById(menuId);
if (sysMenu == null) {
return false;
}
sysMenu.setName(menuMapping.getName());
sysMenu.updateById();
return this.updateById(menuMapping);
}
@Override
public Result getMapping(HttpSession session, String id) {
SysMenu sysMenu = menuService.selectById(id);
if (sysMenu == null) {
return Result.error(CodeMsg.SELECT_ERROR);
}
String menuType = sysMenu.getMenuType();
if (StringUtils.isEmpty(menuType)) {
return Result.error(CodeMsg.SELECT_ERROR);
}
if (menuType.equalsIgnoreCase("StructureMenu")) {
return Result.success(null);
}
Map mapping = menuMappingMapper.getMapping(id);
Wrapper menuWrapper = new EntityWrapper().eq("menu_id", sysMenu.getId());
MenuMapping menuMapping = selectOne(menuWrapper);
if (menuMapping == null) {
return Result.error(new CodeMsg(10008,"当前主题无版本数据"));
}
String tableName = menuMapping.getTableName();
String chargeId = menuMapping.getChargeId();
TUser userByChargeId = DbUtils.getUserById(chargeId);
TUser user = (TUser) session.getAttribute(Constant.USER);
Maintain resultMaintain = masterAuthorService.getMaxVersionMaintain(user, tableName);
Maintain nowVersion = maintainService.getNowVersion(tableName);
if (resultMaintain != null) {
if (nowVersion.getOrderNo().equals(resultMaintain.getOrderNo())) {
mapping.put("maintainType", 0);
}else {
mapping.put("maintainType", 1);
}
mapping.put("version", resultMaintain.getVersion());
mapping.put("maintainId", resultMaintain.getId());
}
if (userByChargeId != null) {
mapping.put("userName", userByChargeId.getUserName());
}
if (nowVersion != null) {
mapping.put("hasData", true);
}else {
mapping.put("hasData", false);
}
return Result.success(mapping);
}
@Override
public SysMenu getMenuByTableName(String tableName) {
MenuMapping menuMapping = selectOne(new EntityWrapper().eq("table_name", tableName).orderBy("create_time desc"));
if (menuMapping == null) {
return null;
}
String menuId = menuMapping.getMenuId();
SysMenu sysMenu = menuService.selectById(menuId);
return sysMenu;
}
@Override
public MenuMapping getMenuMappingByTableName(String tableName) {
MenuMapping menuMapping = selectOne(new EntityWrapper().eq("table_name", tableName).orderBy("create_time desc"));
if (menuMapping == null) {
return null;
}
return menuMapping;
}
@Override
public String getTableNameByMenu(String menuId) {
MenuMapping menuMapping = selectOne(new EntityWrapper().eq("menu_id", menuId).orderBy("create_time desc"));
if (menuMapping == null) {
return null;
}
return menuMapping.getTableName();
}
}