package com.vci.frameworkcore.compatibility.impl;
import com.vci.client.common.excel.ExcelDocumentUtils;
import com.vci.common.exception.VciException;
import com.vci.common.locale.LocaleDisplay;
import com.vci.common.utility.ObjectUtility;
import com.vci.corba.common.PLException;
import com.vci.corba.common.data.UserEntityInfo;
import com.vci.corba.framework.data.FuncOperationInfo;
import com.vci.corba.framework.data.FunctionInfo;
import com.vci.corba.framework.data.OperateInfo;
import com.vci.frameworkcore.compatibility.SmHMSysModConfigServiceI;
import com.vci.pagemodel.MenuVO;
import com.vci.client.common.excel.SheetDataSet;
import com.vci.starter.poi.bo.WriteExcelData;
import com.vci.starter.poi.bo.WriteExcelOption;
import com.vci.starter.poi.util.ExcelUtil;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.pagemodel.SessionInfo;
import com.vci.starter.web.util.LocalFileUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.WebThreadLocalUtil;
import com.vci.web.util.Func;
import com.vci.web.util.PlatformClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.*;
/**
* 首页系统模块配置添加按钮、添加操作类型等接口服务
* @author ludc
* @date 2024/8/19 12:42
*/
@Service
public class SmHMSysModConfigServiceImpl implements SmHMSysModConfigServiceI {
@Autowired
private PlatformClientUtil platformClientUtil;
private List fileFunctionDatas = new ArrayList();
private int count = 0;
private static FunctionOperateDelegate foDelegate;
{
if(Func.isEmpty(foDelegate)){
foDelegate = new FunctionOperateDelegate();
}
}
/**
* 日志
*/
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* 添加模块
* @param menuVO
* @return
*/
@Override
public MenuVO addModule(MenuVO menuVO) throws VciBaseException {
VciBaseUtil.alertNotNull(menuVO,"新增的模块对象");
try {
//往数据库里插入新建模块数据
String puid = foDelegate.saveModule(menuVO);
/**
* 返回值:1,表示模块名称重复
* 2,表示模块标识重复
* 3, 模板别名存在重复
*/
if(puid.equals("1")){
throw new VciBaseException("模块名称重复,请修改!");
}else if(puid.equals("2")){
throw new VciBaseException("模块标识重复,请修改!");
}else if(puid.equals("3")) {
throw new VciBaseException("模块别名重复,请修改!");
}
menuVO.setId(puid);
return menuVO;
} catch (Exception e) {
e.printStackTrace();
String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
logger.error(exceptionMessage);
throw new VciBaseException(exceptionMessage);
}
}
/**
* 修改模块
* @param menuVO
* @return
*/
@Override
public MenuVO updateModule(MenuVO menuVO) throws VciBaseException {
VciBaseUtil.alertNotNull(menuVO,"修改的模块对象");
try {
String res = "";
//更新数据库
res = foDelegate.updateMod(menuVO);
/**
* 返回:1表示模块名重复。
* 2表示模块标识重复。
* 3标示模块别名重复。
*/
if(res.equals("1")){
throw new VciBaseException("模块名称重复,请修改!");
}else if(res.equals("2")){
throw new VciBaseException("模块标识重复,请修改!");
}else if(res.equals("3")) {
throw new VciBaseException("模块别名重复,请修改!");
}/* else if (res.equals("4")) {
throw new VciBaseException("模块编号重复,请修改!");
}*/
return menuVO;
} catch (VciBaseException e) {
e.printStackTrace();
String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
logger.error(exceptionMessage);
throw new VciBaseException(exceptionMessage);
}
}
/**
* 删除模块
* @param menuVO
* @return
*/
@Override
public boolean delModule(MenuVO menuVO) {
VciBaseUtil.alertNotNull(menuVO,"添加操作类型的列表");
String res = "";
try {
String puid = "";
if("FunctionObject".equals(menuVO.getModeType())) {
puid = menuVO.getId();
}else if("modelManagmentNode".equals(menuVO.getId())) {
puid = "modelManagmentNode";
}else if("systemManagmentNode".equals(menuVO.getId())) {
puid = "systemManagmentNode";
}
if(Func.isBlank(puid)){
throw new VciBaseException("未找到要删除的模块!");
}
res = foDelegate.deleteModule(puid);
/**
* 返回值:1表示模块在权限模块已经有授权信息,无法删除
*/
if(res.equals("1")){
throw new VciBaseException("当前模块(或下级模块)已经存在授权信息,无法删除。");
}
return true;
} catch (Exception e) {
e.printStackTrace();
String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
logger.error(exceptionMessage);
throw new VciBaseException(exceptionMessage);
}
}
/**
* 增加操作类型
* @return
*/
@Override
public boolean addOperationType(List menuVOList) {
VciBaseUtil.alertNotNull(menuVOList,"添加操作类型的列表");
List objs = new ArrayList<>();
//将操作类型组装成需要存储的对象
menuVOList.stream().forEach(menuVO -> {
FuncOperationInfo info = new FuncOperationInfo();
//info.id = menuVO.getId() == null ? "" : menuVO.getId();
info.funcId = menuVO.getParentId() == null ? "" : menuVO.getParentId();
info.operId = menuVO.getId() == null ? "" : menuVO.getId();
info.operName = menuVO.getName() == null ? "" : menuVO.getName();
//info.operIndentify = menuVO.getOperIndentify() == null ? "" : menuVO.getOperIndentify();
info.operAlias = menuVO.getAlias() == null ? "" : menuVO.getAlias();
info.operDesc = menuVO.getRemark() == null ? "" : menuVO.getRemark();
info.number = -1;
info.isValid = true;
/*VCIBaseTreeNode node = (VCIBaseTreeNode)treePaths[i].getLastPathComponent();
OperateObject operateObject = (OperateObject) node.getObj();
obj.setFuncId(funcObj.getId());
obj.setOperId(operateObject.getId());
obj.setOperName(operateObject.getName());
obj.setOperIndentify(operateObject.getIdentify());
obj.setOperAlias(operateObject.getAlias());
obj.setNumber(-1);
obj.setIsValid(true);*/
objs.add(info);
});
//执行保存
boolean res = true;
try {
res = this.saveFuncOperation(objs.toArray(new FuncOperationInfo[objs.size()]));
} catch (Exception e) {
res = false;
e.printStackTrace();
String exceptionMessage = "增加操作类型失败,原因:" + VciBaseUtil.getExceptionMessage(e);
logger.error(exceptionMessage);
throw new VciBaseException(exceptionMessage);
}
return res;
}
/**
* 删除非系统模块
* @return
*/
@Override
public boolean delNonsysModule() {
try {
if(platformClientUtil.getFrameworkService().deleteModules("nonsys")){
return true;
}
} catch (PLException e) {
e.printStackTrace();
String exceptionMessage = "删除非系统模块失败,原因:"+VciBaseUtil.getExceptionMessage(e);
logger.error(exceptionMessage);
throw new VciBaseException(exceptionMessage);
}
return false;
}
/**
* 删除业务模块
* @return
*/
@Override
public boolean delBusinessModule() {
try {
if(platformClientUtil.getFrameworkService().deleteModules("business")){
return true;
}
} catch (PLException e) {
e.printStackTrace();
String exceptionMessage = "删除业务模块失败,原因:"+VciBaseUtil.getExceptionMessage(e);
logger.error(exceptionMessage);
throw new VciBaseException(exceptionMessage);
}
return false;
}
/**
* 导出sql
* @return
*/
@Override
public File exportFunctionSql(HttpServletResponse response,String exportPath,boolean isFunction) throws PLException {
String dir = Func.isBlank(exportPath) ? LocalFileUtil.getDefaultTempFolder():exportPath;
String[][] allDatas;
int size;
if(isFunction){
size = (int)platformClientUtil.getFrameworkService().getAllModelManagementNum();
allDatas = this.getAllDatas(size);
}else{
size = (int)platformClientUtil.getFrameworkService().getAllOperitionsNum();
allDatas = this.getAllOperitions(size);
}
File file = expData(dir,isFunction, allDatas);
return file;
}
/**
* 导出
* @return
*/
@Override
public String exportModule(HttpServletResponse response) throws IOException {
String defaultTempFolder = LocalFileUtil.getDefaultTempFolder();
//写excel
String excelPath = defaultTempFolder + File.separator + "module.xls";
final List columns = new ArrayList(Arrays.asList("PLNAME","PLRESOURCEC","PLSUFFIXC","PLRESOURCEB",
"PLSUFFIXB","PLMODULENO","PLDESC","PLISVALID","PLIMAGE","PLMODULESEQUENCE","PLALIASNAME",
"PLMODULENAME","PLRESOURCEDOTNET","PLRESOURCEMOBIL","级别","别名","PLNO","PLISVALID",
"PLNAME","PLUNIQUEFLAG","PLDESC","PLALIAS","PLSEQUENCE"));// 设置表单列名
//int count = transmitTreeObject.getCurrentTreeNode().getChildCount();
new File(excelPath).createNewFile();
//设置列
List excelDataList = new ArrayList<>(10000);
//设置列头
for (int index = 0; index < columns.size(); index++) {
excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
}
//查询要导出的数据
String[][] firstLevel = new String[3000][23];
try {
firstLevel = this.checkLevel();
} catch (VciBaseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String[][] datas = new String[10000][columns.size()];
for(int i=0;i files) throws PLException, IOException {
logger.info("正在收集表单数据......");
boolean isSuccess = collectionDatas(files);
logger.info("正在导入表单人员信息......");
logger.info("count==="+count);
boolean resBoolean = false;
if(isSuccess == false){
resBoolean = importExcelData(count);
}
return resBoolean ? BaseResult.success("导入成功!"):BaseResult.fail("导入失败!");
}
/**
* 管理功能模块、业务功能模块下的叶子节点—修改操作别名接口
* @return
*/
@Override
public boolean updateAlias(MenuVO menuVO) throws VciException {
String alias = menuVO.getAlias();
if ("".equals(alias)){
throw new VciBaseException("请填写操作别名!");
}
boolean isValid = menuVO.getIsValid();
String id = menuVO.getId();
return foDelegate.updateFuncOperation(id , alias, isValid);
}
@Override
public List
*
*@author xf
*@time 2012-5-15
*@return FunctionObject
* @return
*/
private FunctionInfo check(MenuVO menuVO,String type) {
FunctionInfo obj = new FunctionInfo();
//获取表单输入的值
String modelName = menuVO.getName();
String csIdentity = menuVO.getPathC();
String bsIdentity = menuVO.getPath();
String aliasName = menuVO.getAlias();
String resDotNet = menuVO.getResourceDotNet();
String resMobile = menuVO.getResourceMobile();
//int moduleNo = transferStringToNum(moduleNoTxt.getText());
int sequence = menuVO.getSort();
String description = menuVO.getRemark();
if("".equals(modelName) || "null".equals(modelName) || modelName == null) {
throw new VciBaseException("模块名不能为空!");
}else if(modelName.length() > 128) {
throw new VciBaseException("模块名长度不能超过128!");
}else if(description.length() > 255) {
throw new VciBaseException("描述长度不能超过255!");
}else if(csIdentity != null && !"".equals(csIdentity) && csIdentity.length() > 255) {
throw new VciBaseException("C/S标识长度不能超过255!");
} else if(resDotNet != null && !"".equals(resDotNet) && resDotNet.length() > 255) {
throw new VciBaseException(".NET标识长度不能超过255!");
}else if(resMobile != null && !"".equals(resMobile) && resMobile.length() > 255) {
throw new VciBaseException("Mobile标识长度不能超过255!");
} else if (sequence < 0) {
throw new VciBaseException("序号不能小于0!");
}
if(type.equals("add")){
//给object对象赋值
String parentId = "";
if(menuVO.getModeType().equals("FunctionObject")) {
parentId = menuVO.getParentId();
}else if("modelManagmentNode".equals(menuVO.getParentId())) {
parentId = "modelManagmentNode";
}else if("systemManagmentNode".equals(menuVO.getParentId())) {
parentId = "systemManagmentNode";
}
obj.parentId = parentId;
}else{
obj.id = menuVO.getId();
obj.parentId = menuVO.getParentId();
}
obj.name = modelName;
obj.resourceC = csIdentity;
obj.desc = description;
obj.resourceB = bsIdentity;
obj.suffixC = "";
obj.suffixB = "";
obj.seq = sequence;
obj.image = menuVO.getSource();
obj.isValid = menuVO.getValid();//1有效0无效
obj.aliasName = aliasName;
obj.resourceDotNet = resDotNet;
obj.resourceMobile = resMobile;
return obj;
}
/**
* 获取UserEntityInfo对象
* @return
*/
public UserEntityInfo getUserEntityInfo(){
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
UserEntityInfo userEntityInfo = new UserEntityInfo(sessionInfo.getUserId(), "");
return userEntityInfo;
}
/**
* 导入模块对象
* add by caill
* */
public boolean importModules(FunctionInfo[] funObject,int count) throws VciBaseException{
boolean b=false;
int len = funObject.length;
List funInfoList = new ArrayList();
for(int i = count ; i