|
@@ -347,7 +347,7 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
|
|
|
if(StringUtils.isNotBlank(tableAlias) && StringUtils.isNotBlank(tableName)){
|
|
|
String s = cusReportForm.getExecuteSql()+" and "+tableAlias+".company_id="+user.getCompanyId()+" ";
|
|
|
- if(1 == wxCorpInfo.getSaasSyncContact()){
|
|
|
+ if(null != wxCorpInfo && 1 == wxCorpInfo.getSaasSyncContact()){
|
|
|
List<FormTransCondition> formTransConditions = JSONObject.parseArray(cusReportForm.getFormTransConditionJson(), FormTransCondition.class);
|
|
|
for (FormTransCondition formTransCondition : formTransConditions) {
|
|
|
String str = formTransCondition.getTblAlias()+"."+formTransCondition.getColName();
|
|
@@ -720,6 +720,9 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
|
|
|
if(CollectionUtils.isNotEmpty(columnList)){
|
|
|
|
|
|
+ List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, user.getCompanyId()));
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
|
|
|
+
|
|
|
List<FormTransColumn> checkColumns = formTransColumnMapper.selectList(new LambdaQueryWrapper<FormTransColumn>());
|
|
|
Map<String, List<FormTransColumn>> tblColumnMap = new HashMap<>();
|
|
|
if(CollectionUtils.isNotEmpty(checkColumns)){
|
|
@@ -727,261 +730,21 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
.collect(Collectors.groupingBy(FormTransColumn::getTblName));
|
|
|
}
|
|
|
|
|
|
- Map<String,List<String>> indexMap = new HashMap<>(2);
|
|
|
- indexMap.put("userName",new ArrayList<>());
|
|
|
- indexMap.put("deptName",new ArrayList<>());
|
|
|
- Map<String,String> tableNameAliasMap = new HashMap<>();
|
|
|
- Matcher mainMatcher = MAIN_TABLE_PATTERN.matcher(tableColumnSql);
|
|
|
- if (mainMatcher.find()) {
|
|
|
- tableNameAliasMap.put(mainMatcher.group(1),mainMatcher.group(2));
|
|
|
- } else {
|
|
|
- msg.setError("主业务表无法识别,请联系管理员");
|
|
|
+ try {
|
|
|
+ resColumnList = this.getTransResColumns(columnList, formFieldHeads, columnAliasMap, tableColumnFixTransMap
|
|
|
+ , tblColumnMap, userList, wxCorpInfo, tableColumnSql, user);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ msg.setError(e.getMessage());
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
- Matcher joinMatcher = JOIN_TABLE_PATTERN.matcher(tableColumnSql);
|
|
|
- while (joinMatcher.find()){
|
|
|
- tableNameAliasMap.put(joinMatcher.group(1),joinMatcher.group(2));
|
|
|
- }
|
|
|
- for (String tableName : tableNameAliasMap.keySet()) {
|
|
|
- List<FormTransColumn> tmpColList = tblColumnMap.get(tableName);
|
|
|
- String tableAlias = tableNameAliasMap.get(tableName);
|
|
|
- if(CollectionUtils.isNotEmpty(tmpColList)){
|
|
|
- for (FormTransColumn formTransColumn : tmpColList) {
|
|
|
- String col = tableAlias+"."+formTransColumn.getColName();
|
|
|
- if(tableColumnSql.contains(col)){
|
|
|
- if(1 == formTransColumn.getTransType()){
|
|
|
- //当前位置的是人名,需要转义
|
|
|
- for (int i = 0; i < formFieldHeads.size(); i++) {
|
|
|
- if(formFieldHeads.get(i).getTableName().equals(tableName)
|
|
|
- &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
|
|
|
- ){
|
|
|
- List<String> tmpList = indexMap.get("userName");
|
|
|
- tmpList.add(formFieldHeads.get(i).getColumnVal());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else if (2 == formTransColumn.getTransType()) {
|
|
|
- //当前位置是部门,需要转义
|
|
|
- for (int i = 0; i < formFieldHeads.size(); i++) {
|
|
|
- if(formFieldHeads.get(i).getTableName().equals(tableName)
|
|
|
- &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
|
|
|
- ){
|
|
|
- List<String> tmpList = indexMap.get("deptName");
|
|
|
- tmpList.add(formFieldHeads.get(i).getColumnVal());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, user.getCompanyId()));
|
|
|
- WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
|
|
|
- for (Map<String, Object> data : columnList) {
|
|
|
- String valRes = "";
|
|
|
- Map<String,Object> map = new HashMap<>();
|
|
|
- for (String key : columnList.get(0).keySet()) {
|
|
|
- //固定值转换
|
|
|
- FormFieldHead formFieldHead = columnAliasMap.get(key);//字段对应别名和表
|
|
|
- List<ColumnFixTrans> transColList = tableColumnFixTransMap.get(formFieldHead.getTableName());//固定值字段集合
|
|
|
- List<ColumnFixTrans> currentFixValList = transColList.stream()
|
|
|
- .filter(t -> t.getColName().equals(formFieldHead.getColumnName()))
|
|
|
- .collect(Collectors.toList());//当前字段固定值对照值
|
|
|
- if(CollectionUtils.isNotEmpty(currentFixValList)){
|
|
|
- Map<String, String> valMeanMap = currentFixValList.stream()
|
|
|
- .collect(Collectors.toMap(ColumnFixTrans::getColVal, ColumnFixTrans::getValMean));
|
|
|
- Object value = data.get(key);
|
|
|
- String mean = valMeanMap.get(value.toString());
|
|
|
- valRes = mean;
|
|
|
- }else{
|
|
|
- //转义
|
|
|
- List<String> userNameIndexes = indexMap.get("userName");
|
|
|
- List<String> deptNameIndexes = indexMap.get("deptName");
|
|
|
- if(1 == user.getUserNameNeedTranslate()){
|
|
|
- Object value = data.get(key);
|
|
|
- if (value == null) {
|
|
|
- } else {
|
|
|
- String val = value.toString();
|
|
|
- if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
- if(CollectionUtils.isNotEmpty(userNameIndexes) && userNameIndexes.contains(key)){
|
|
|
- String name = val;
|
|
|
- Optional<User> first = userList.stream().filter(u -> u.getName().equals(name)).findFirst();
|
|
|
- if(first.isPresent()){
|
|
|
- val = "$userName="+first.get().getCorpwxUserid()+"$";
|
|
|
- }else {
|
|
|
- val = "";
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- if(CollectionUtils.isNotEmpty(deptNameIndexes) && deptNameIndexes.contains(key)){
|
|
|
- String name = val;
|
|
|
- Optional<User> first = userList.stream().filter(u -> u.getName().equals(name)).findFirst();
|
|
|
- if(first.isPresent()){
|
|
|
- val = "$departmentName="+first.get().getCorpwxDeptid()+"$";
|
|
|
- }else {
|
|
|
- val = "";
|
|
|
- }
|
|
|
- }
|
|
|
- valRes = val;
|
|
|
- }
|
|
|
- }else{
|
|
|
- Object value = data.get(key);
|
|
|
- if (value == null) {
|
|
|
- valRes = "";
|
|
|
- } else {
|
|
|
- valRes = value.toString();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- map.put(key,valRes);
|
|
|
- }
|
|
|
- resColumnList.add(map);
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- msg.setData(resColumnList);
|
|
|
- return msg;
|
|
|
- }
|
|
|
-
|
|
|
- /**移动报表到文件夹*/
|
|
|
- @Override
|
|
|
- public HttpRespMsg moveFormStore(Integer formId,Integer targetStoreId, HttpServletRequest request) {
|
|
|
- HttpRespMsg msg = new HttpRespMsg();
|
|
|
- User user = userMapper.selectById(request.getHeader("token"));
|
|
|
- BusReportStore busReportStore = busReportStoreMapper.selectOne(new LambdaQueryWrapper<BusReportStore>()
|
|
|
- .eq(BusReportStore::getCompanyId, user.getCompanyId())
|
|
|
- .eq(BusReportStore::getRelateFormId, formId)
|
|
|
- );
|
|
|
-
|
|
|
- BusReportStore lastOneStore = busReportStoreMapper.selectOne(new LambdaQueryWrapper<BusReportStore>()
|
|
|
- .eq(BusReportStore::getCompanyId, user.getCompanyId())
|
|
|
- .eq(BusReportStore::getParentStoreId, busReportStore.getParentStoreId())
|
|
|
- .orderByDesc(BusReportStore::getOrderItem)
|
|
|
- .last(" limit 1 ")
|
|
|
- );
|
|
|
- if(null == lastOneStore){
|
|
|
- busReportStore.setParentStoreId(targetStoreId);
|
|
|
- busReportStore.setOrderItem(1);
|
|
|
- busReportStore.setUpdateBy(user.getId());
|
|
|
- busReportStore.setUpdateTime(new Date());
|
|
|
- }else{
|
|
|
- busReportStore.setParentStoreId(targetStoreId);
|
|
|
- busReportStore.setOrderItem(lastOneStore.getOrderItem()+1);
|
|
|
- busReportStore.setUpdateBy(user.getId());
|
|
|
- busReportStore.setUpdateTime(new Date());
|
|
|
- }
|
|
|
-
|
|
|
- busReportStoreMapper.updateById(busReportStore);
|
|
|
-
|
|
|
- return msg;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public HttpRespMsg getAllStoresTree(HttpServletRequest request) {
|
|
|
- HttpRespMsg msg = new HttpRespMsg();
|
|
|
- User user = userMapper.selectById(request.getHeader("token"));
|
|
|
- List<BusReportStore> busReportStores = busReportStoreMapper.selectList(new LambdaQueryWrapper<BusReportStore>()
|
|
|
- .eq(BusReportStore::getCompanyId, user.getCompanyId())
|
|
|
- .ne(BusReportStore::getStoreType,2)
|
|
|
- );
|
|
|
- List<BusReportStore> listTree = this.listToTree(busReportStores);
|
|
|
- msg.setData(listTree);
|
|
|
- return msg;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public HttpRespMsg getResByFormJson(String formJson,String formTransConditionJson, HttpServletRequest request) {
|
|
|
- HttpRespMsg msg = new HttpRespMsg();
|
|
|
- List<Map<String,Object>> columnList = new ArrayList<>();
|
|
|
- Matcher deleteMatcher = DELETE_SGIN_PATTERN.matcher(formJson);
|
|
|
- Matcher updateMatcher = UPDATE_SIGN_PATTERN.matcher(formJson);
|
|
|
- Matcher insertMatcher = INSERT_SIGN_PATTERN.matcher(formJson);
|
|
|
- if (deleteMatcher.find() || updateMatcher.find() || insertMatcher.find()) {
|
|
|
- msg.setError("包含非法字符,无法执行");
|
|
|
- return msg;
|
|
|
- }
|
|
|
- User user = userMapper.selectById(request.getHeader("token"));
|
|
|
- WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
|
|
|
- if(1 == wxCorpInfo.getSaasSyncContact()){
|
|
|
- List<FormTransCondition> formTransConditions = JSONObject.parseArray(formTransConditionJson, FormTransCondition.class);
|
|
|
- for (FormTransCondition formTransCondition : formTransConditions) {
|
|
|
- String str = formTransCondition.getTblAlias()+"."+formTransCondition.getColName();
|
|
|
- String replaceObj = str+" like concat('%','"+formTransCondition.getUseVal()+"','%')";
|
|
|
- if(1 == formTransCondition.getTransType()){
|
|
|
- HashMap<String, List> result = null;
|
|
|
- try {
|
|
|
- result = wxCorpInfoService.getOpenId(wxCorpInfo.getCorpid(), formTransCondition.getUseVal(), null,1,200);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- msg.setError("企微转义有误,请联系管理员");
|
|
|
- return msg;
|
|
|
- }
|
|
|
- List users = result.get("user");
|
|
|
- List<User> realUser = userMapper.getUserByDepartment(null, user.getCompanyId(), null,null, null, null, null, users);
|
|
|
- String replaceStr = str+" in(";
|
|
|
- int count = 0;
|
|
|
- for (User tmpUser : realUser) {
|
|
|
- replaceStr += "'"+tmpUser.getName()+"'";
|
|
|
- count++;
|
|
|
- if(count<realUser.size()){
|
|
|
- replaceStr += ", ";
|
|
|
- }
|
|
|
- }
|
|
|
- replaceStr +=") ";
|
|
|
- formJson.replace(replaceObj,replaceStr);
|
|
|
- } else if (2 == formTransCondition.getTransType()) {
|
|
|
- Integer deptWxId = null;
|
|
|
- try {
|
|
|
- deptWxId = wxCorpInfoService.searchCorpWxDeptId(wxCorpInfo.getCorpid(), formTransCondition.getUseVal());
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- msg.setError("企微转义有误,请联系管理员");
|
|
|
- return msg;
|
|
|
- }
|
|
|
- if(null != deptWxId){
|
|
|
- String replaceStr = str+" ="+deptWxId+" ";
|
|
|
- formJson.replace(replaceObj,replaceStr);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- List<Map<String,Object>> resColumnList = new ArrayList<>();
|
|
|
- try (Connection connection = dataSource.getConnection()) {
|
|
|
- PreparedStatement preparedStatement = connection.prepareStatement(formJson);
|
|
|
- ResultSet resultSet = preparedStatement.executeQuery();
|
|
|
- columnList = this.convertListWithAlias(resultSet);
|
|
|
- }catch (SQLException e) {
|
|
|
- e.printStackTrace();
|
|
|
- msg.setError("SQL语句有误,请联系管理员");
|
|
|
- return msg;
|
|
|
- }
|
|
|
-// if(CollectionUtils.isNotEmpty(columnList)){
|
|
|
-// //转换固定值
|
|
|
-// List<FormFieldHead> formFieldHeads = JSONArray.parseArray(cusReportForm.getFormFieldHead(), FormFieldHead.class);
|
|
|
-// List<ColumnFixTrans> columnFixTrans = columnFixTransMapper.selectList(null);
|
|
|
-// Map<String, List<ColumnFixTrans>> tableColumnFixTransMap = columnFixTrans.stream()
|
|
|
-// .collect(Collectors.groupingBy(ColumnFixTrans::getTblName));// key tblName
|
|
|
-//
|
|
|
-// //根据表头获取 'xxx' --> 别名.字段名 --> 表名.字段名
|
|
|
-// Map<String, FormFieldHead> columnAliasMap = new HashMap<>();
|
|
|
-// for (FormFieldHead formFieldHead : formFieldHeads) {
|
|
|
-// columnAliasMap.put(formFieldHead.getColumnVal(),formFieldHead);
|
|
|
-// }
|
|
|
-//
|
|
|
-// List<FormTransColumn> checkColumns = formTransColumnMapper.selectList(new LambdaQueryWrapper<FormTransColumn>());
|
|
|
-// Map<String, List<FormTransColumn>> tblColumnMap = new HashMap<>();
|
|
|
-// if(CollectionUtils.isNotEmpty(checkColumns)){
|
|
|
-// tblColumnMap = checkColumns.stream()
|
|
|
-// .collect(Collectors.groupingBy(FormTransColumn::getTblName));
|
|
|
-// }
|
|
|
-//
|
|
|
// Map<String,List<String>> indexMap = new HashMap<>(2);
|
|
|
// indexMap.put("userName",new ArrayList<>());
|
|
|
// indexMap.put("deptName",new ArrayList<>());
|
|
|
// Map<String,String> tableNameAliasMap = new HashMap<>();
|
|
|
-// Matcher mainMatcher = MAIN_TABLE_PATTERN.matcher(formJson);
|
|
|
+// Matcher mainMatcher = MAIN_TABLE_PATTERN.matcher(tableColumnSql);
|
|
|
// if (mainMatcher.find()) {
|
|
|
// tableNameAliasMap.put(mainMatcher.group(1),mainMatcher.group(2));
|
|
|
// } else {
|
|
@@ -989,7 +752,7 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
// return msg;
|
|
|
// }
|
|
|
//
|
|
|
-// Matcher joinMatcher = JOIN_TABLE_PATTERN.matcher(formJson);
|
|
|
+// Matcher joinMatcher = JOIN_TABLE_PATTERN.matcher(tableColumnSql);
|
|
|
// while (joinMatcher.find()){
|
|
|
// tableNameAliasMap.put(joinMatcher.group(1),joinMatcher.group(2));
|
|
|
// }
|
|
@@ -999,7 +762,7 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
// if(CollectionUtils.isNotEmpty(tmpColList)){
|
|
|
// for (FormTransColumn formTransColumn : tmpColList) {
|
|
|
// String col = tableAlias+"."+formTransColumn.getColName();
|
|
|
-// if(formJson.contains(col)){
|
|
|
+// if(tableColumnSql.contains(col)){
|
|
|
// if(1 == formTransColumn.getTransType()){
|
|
|
// //当前位置的是人名,需要转义
|
|
|
// for (int i = 0; i < formFieldHeads.size(); i++) {
|
|
@@ -1027,7 +790,7 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
// }
|
|
|
// }
|
|
|
// List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, user.getCompanyId()));
|
|
|
-//
|
|
|
+// WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, user.getCompanyId()));
|
|
|
// for (Map<String, Object> data : columnList) {
|
|
|
// String valRes = "";
|
|
|
// Map<String,Object> map = new HashMap<>();
|
|
@@ -1035,15 +798,20 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
// //固定值转换
|
|
|
// FormFieldHead formFieldHead = columnAliasMap.get(key);//字段对应别名和表
|
|
|
// List<ColumnFixTrans> transColList = tableColumnFixTransMap.get(formFieldHead.getTableName());//固定值字段集合
|
|
|
-// List<ColumnFixTrans> currentFixValList = transColList.stream()
|
|
|
-// .filter(t -> t.getColName().equals(formFieldHead.getColumnName()))
|
|
|
-// .collect(Collectors.toList());//当前字段固定值对照值
|
|
|
+// List<ColumnFixTrans> currentFixValList = new ArrayList<>();
|
|
|
+// if(CollectionUtils.isNotEmpty(transColList)){
|
|
|
+// currentFixValList = transColList.stream()
|
|
|
+// .filter(t -> t.getColName().equals(formFieldHead.getColumnName()))
|
|
|
+// .collect(Collectors.toList());//当前字段固定值对照值
|
|
|
+// }
|
|
|
// if(CollectionUtils.isNotEmpty(currentFixValList)){
|
|
|
// Map<String, String> valMeanMap = currentFixValList.stream()
|
|
|
// .collect(Collectors.toMap(ColumnFixTrans::getColVal, ColumnFixTrans::getValMean));
|
|
|
// Object value = data.get(key);
|
|
|
-// String mean = valMeanMap.get(value.toString());
|
|
|
-// valRes = mean;
|
|
|
+// if(null != value){
|
|
|
+// String mean = valMeanMap.get(value.toString());
|
|
|
+// valRes = mean;
|
|
|
+// }
|
|
|
// }else{
|
|
|
// //转义
|
|
|
// List<String> userNameIndexes = indexMap.get("userName");
|
|
@@ -1086,11 +854,164 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
// }
|
|
|
// }
|
|
|
// map.put(key,valRes);
|
|
|
+// valRes = "";
|
|
|
// }
|
|
|
// resColumnList.add(map);
|
|
|
// }
|
|
|
-// }
|
|
|
- msg.setData(columnList);
|
|
|
+ }
|
|
|
+
|
|
|
+ msg.setData(resColumnList);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**移动报表到文件夹*/
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg moveFormStore(Integer formId,Integer targetStoreId, HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
+ BusReportStore busReportStore = busReportStoreMapper.selectOne(new LambdaQueryWrapper<BusReportStore>()
|
|
|
+ .eq(BusReportStore::getCompanyId, user.getCompanyId())
|
|
|
+ .eq(BusReportStore::getRelateFormId, formId)
|
|
|
+ );
|
|
|
+
|
|
|
+ BusReportStore lastOneStore = busReportStoreMapper.selectOne(new LambdaQueryWrapper<BusReportStore>()
|
|
|
+ .eq(BusReportStore::getCompanyId, user.getCompanyId())
|
|
|
+ .eq(BusReportStore::getParentStoreId, busReportStore.getParentStoreId())
|
|
|
+ .orderByDesc(BusReportStore::getOrderItem)
|
|
|
+ .last(" limit 1 ")
|
|
|
+ );
|
|
|
+ if(null == lastOneStore){
|
|
|
+ busReportStore.setParentStoreId(targetStoreId);
|
|
|
+ busReportStore.setOrderItem(1);
|
|
|
+ busReportStore.setUpdateBy(user.getId());
|
|
|
+ busReportStore.setUpdateTime(new Date());
|
|
|
+ }else{
|
|
|
+ busReportStore.setParentStoreId(targetStoreId);
|
|
|
+ busReportStore.setOrderItem(lastOneStore.getOrderItem()+1);
|
|
|
+ busReportStore.setUpdateBy(user.getId());
|
|
|
+ busReportStore.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+
|
|
|
+ busReportStoreMapper.updateById(busReportStore);
|
|
|
+
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getAllStoresTree(HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
+ List<BusReportStore> busReportStores = busReportStoreMapper.selectList(new LambdaQueryWrapper<BusReportStore>()
|
|
|
+ .eq(BusReportStore::getCompanyId, user.getCompanyId())
|
|
|
+ .ne(BusReportStore::getStoreType,2)
|
|
|
+ );
|
|
|
+ List<BusReportStore> listTree = this.listToTree(busReportStores);
|
|
|
+ msg.setData(listTree);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getResByFormJson(String formSql,String formTransConditionJson,String formFieldHeads, HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ List<Map<String,Object>> columnList = new ArrayList<>();
|
|
|
+ Matcher deleteMatcher = DELETE_SGIN_PATTERN.matcher(formSql);
|
|
|
+ Matcher updateMatcher = UPDATE_SIGN_PATTERN.matcher(formSql);
|
|
|
+ Matcher insertMatcher = INSERT_SIGN_PATTERN.matcher(formSql);
|
|
|
+ if (deleteMatcher.find() || updateMatcher.find() || insertMatcher.find()) {
|
|
|
+ msg.setError("包含非法字符,无法执行");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
|
|
|
+ if(StringUtils.isNotBlank(formTransConditionJson)){
|
|
|
+ if(null != wxCorpInfo && 1 == wxCorpInfo.getSaasSyncContact()){
|
|
|
+ List<FormTransCondition> formTransConditions = JSONObject.parseArray(formTransConditionJson, FormTransCondition.class);
|
|
|
+ for (FormTransCondition formTransCondition : formTransConditions) {
|
|
|
+ String str = formTransCondition.getTblAlias()+"."+formTransCondition.getColName();
|
|
|
+ String replaceObj = str+" like concat('%','"+formTransCondition.getUseVal()+"','%')";
|
|
|
+ if(1 == formTransCondition.getTransType()){
|
|
|
+ HashMap<String, List> result = null;
|
|
|
+ try {
|
|
|
+ result = wxCorpInfoService.getOpenId(wxCorpInfo.getCorpid(), formTransCondition.getUseVal(), null,1,200);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ msg.setError("企微转义有误,请联系管理员");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ List users = result.get("user");
|
|
|
+ List<User> realUser = userMapper.getUserByDepartment(null, user.getCompanyId(), null,null, null, null, null, users);
|
|
|
+ String replaceStr = str+" in(";
|
|
|
+ int count = 0;
|
|
|
+ for (User tmpUser : realUser) {
|
|
|
+ replaceStr += "'"+tmpUser.getName()+"'";
|
|
|
+ count++;
|
|
|
+ if(count<realUser.size()){
|
|
|
+ replaceStr += ", ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ replaceStr +=") ";
|
|
|
+ formSql.replace(replaceObj,replaceStr);
|
|
|
+ } else if (2 == formTransCondition.getTransType()) {
|
|
|
+ Integer deptWxId = null;
|
|
|
+ try {
|
|
|
+ deptWxId = wxCorpInfoService.searchCorpWxDeptId(wxCorpInfo.getCorpid(), formTransCondition.getUseVal());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ msg.setError("企微转义有误,请联系管理员");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ if(null != deptWxId){
|
|
|
+ String replaceStr = str+" ="+deptWxId+" ";
|
|
|
+ formSql.replace(replaceObj,replaceStr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String,Object>> resColumnList = new ArrayList<>();
|
|
|
+ try (Connection connection = dataSource.getConnection()) {
|
|
|
+ PreparedStatement preparedStatement = connection.prepareStatement(formSql);
|
|
|
+ ResultSet resultSet = preparedStatement.executeQuery();
|
|
|
+ columnList = this.convertListWithAlias(resultSet);
|
|
|
+ }catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ msg.setError("SQL语句有误,请联系管理员");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ if(CollectionUtils.isNotEmpty(columnList)){
|
|
|
+ List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, user.getCompanyId()));
|
|
|
+ List<FormTransColumn> checkColumns = formTransColumnMapper.selectList(new LambdaQueryWrapper<FormTransColumn>());
|
|
|
+ Map<String, List<FormTransColumn>> tblColumnMap = new HashMap<>();
|
|
|
+ if(CollectionUtils.isNotEmpty(checkColumns)){
|
|
|
+ tblColumnMap = checkColumns.stream()
|
|
|
+ .collect(Collectors.groupingBy(FormTransColumn::getTblName));
|
|
|
+ }
|
|
|
+ //转换固定值
|
|
|
+ Map<String, List<ColumnFixTrans>> tableColumnFixTransMap = new HashMap<>();
|
|
|
+ List<ColumnFixTrans> columnFixTrans = columnFixTransMapper.selectList(null);
|
|
|
+ tableColumnFixTransMap = columnFixTrans.stream()
|
|
|
+ .collect(Collectors.groupingBy(ColumnFixTrans::getTblName));// key tblName
|
|
|
+ //根据表头获取 'xxx' --> 别名.字段名 --> 表名.字段名
|
|
|
+ List<FormFieldHead> formFieldHeadList = new ArrayList<>();
|
|
|
+ Map<String, FormFieldHead> columnAliasMap = new HashMap<>();
|
|
|
+ if(StringUtils.isNotBlank(formFieldHeads)){
|
|
|
+ formFieldHeadList = JSONArray.parseArray(formFieldHeads, FormFieldHead.class);
|
|
|
+ for (FormFieldHead formFieldHead : formFieldHeadList) {
|
|
|
+ columnAliasMap.put(formFieldHead.getColumnVal(),formFieldHead);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ resColumnList = this.getTransResColumns(columnList, formFieldHeadList, columnAliasMap, tableColumnFixTransMap
|
|
|
+ , tblColumnMap, userList, wxCorpInfo, formSql, user);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ msg.setError(e.getMessage());
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ msg.setData(resColumnList);
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
@@ -1267,15 +1188,23 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
//固定值转换
|
|
|
FormFieldHead formFieldHead = columnAliasMap.get(key);//字段对应别名和表
|
|
|
List<ColumnFixTrans> transColList = tableColumnFixTransMap.get(formFieldHead.getTableName());//固定值字段集合
|
|
|
- List<ColumnFixTrans> currentFixValList = transColList.stream()
|
|
|
- .filter(t -> t.getColName().equals(formFieldHead.getColumnName()))
|
|
|
- .collect(Collectors.toList());//当前字段固定值对照值
|
|
|
+ List<ColumnFixTrans> currentFixValList = new ArrayList<>();
|
|
|
+ if(CollectionUtils.isNotEmpty(transColList)){
|
|
|
+ currentFixValList = transColList.stream()
|
|
|
+ .filter(t -> t.getColName().equals(formFieldHead.getColumnName()))
|
|
|
+ .collect(Collectors.toList());//当前字段固定值对照值
|
|
|
+ }
|
|
|
+
|
|
|
if(CollectionUtils.isNotEmpty(currentFixValList)){
|
|
|
Map<String, String> valMeanMap = currentFixValList.stream()
|
|
|
.collect(Collectors.toMap(ColumnFixTrans::getColVal, ColumnFixTrans::getValMean));
|
|
|
Object value = data.get(key);
|
|
|
- String mean = valMeanMap.get(value.toString());
|
|
|
- valRes = mean;
|
|
|
+ if(null == value){
|
|
|
+// valRes = "";
|
|
|
+ }else{
|
|
|
+ String mean = valMeanMap.get(value.toString());
|
|
|
+ valRes = mean;
|
|
|
+ }
|
|
|
}else{
|
|
|
//转义
|
|
|
List<String> userNameIndexes = indexMap.get("userName");
|
|
@@ -1340,6 +1269,7 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
}
|
|
|
|
|
|
item.add(valRes);
|
|
|
+ valRes = "";
|
|
|
}
|
|
|
resList.add(item);
|
|
|
}
|
|
@@ -1455,4 +1385,137 @@ public class CusTableColumnServiceImpl extends ServiceImpl<CusTableColumnMapper,
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ //转换固定值并转义
|
|
|
+ public List<Map<String,Object>> getTransResColumns(List<Map<String,Object>> columnList
|
|
|
+ ,List<FormFieldHead> formFieldHeads
|
|
|
+ ,Map<String, FormFieldHead> columnAliasMap
|
|
|
+ ,Map<String, List<ColumnFixTrans>> tableColumnFixTransMap
|
|
|
+ ,Map<String, List<FormTransColumn>> tblColumnMap
|
|
|
+ ,List<User> companyUsers
|
|
|
+ ,WxCorpInfo wxCorpInfo
|
|
|
+ ,String sql
|
|
|
+ ,User user){
|
|
|
+ List<Map<String,Object>> resColumnList = new ArrayList<>();
|
|
|
+ if(CollectionUtils.isNotEmpty(columnList)){
|
|
|
+ Map<String,List<String>> indexMap = new HashMap<>(2);
|
|
|
+ indexMap.put("userName",new ArrayList<>());
|
|
|
+ indexMap.put("deptName",new ArrayList<>());
|
|
|
+ Map<String,String> tableNameAliasMap = new HashMap<>();
|
|
|
+ Matcher mainMatcher = MAIN_TABLE_PATTERN.matcher(sql);
|
|
|
+ if (mainMatcher.find()) {
|
|
|
+ tableNameAliasMap.put(mainMatcher.group(1),mainMatcher.group(2));
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("主业务表无法识别,请联系管理员");
|
|
|
+ }
|
|
|
+
|
|
|
+ Matcher joinMatcher = JOIN_TABLE_PATTERN.matcher(sql);
|
|
|
+ while (joinMatcher.find()){
|
|
|
+ tableNameAliasMap.put(joinMatcher.group(1),joinMatcher.group(2));
|
|
|
+ }
|
|
|
+ for (String tableName : tableNameAliasMap.keySet()) {
|
|
|
+ List<FormTransColumn> tmpColList = tblColumnMap.get(tableName);
|
|
|
+ String tableAlias = tableNameAliasMap.get(tableName);
|
|
|
+ if(CollectionUtils.isNotEmpty(tmpColList)){
|
|
|
+ for (FormTransColumn formTransColumn : tmpColList) {
|
|
|
+ String col = tableAlias+"."+formTransColumn.getColName();
|
|
|
+ if(sql.contains(col)){
|
|
|
+ if(1 == formTransColumn.getTransType()){
|
|
|
+ //当前位置的是人名,需要转义
|
|
|
+ for (int i = 0; i < formFieldHeads.size(); i++) {
|
|
|
+ if(formFieldHeads.get(i).getTableName().equals(tableName)
|
|
|
+ &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
|
|
|
+ ){
|
|
|
+ List<String> tmpList = indexMap.get("userName");
|
|
|
+ tmpList.add(formFieldHeads.get(i).getColumnVal());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (2 == formTransColumn.getTransType()) {
|
|
|
+ //当前位置是部门,需要转义
|
|
|
+ for (int i = 0; i < formFieldHeads.size(); i++) {
|
|
|
+ if(formFieldHeads.get(i).getTableName().equals(tableName)
|
|
|
+ &&formFieldHeads.get(i).getColumnName().equals(formTransColumn.getColName())
|
|
|
+ ){
|
|
|
+ List<String> tmpList = indexMap.get("deptName");
|
|
|
+ tmpList.add(formFieldHeads.get(i).getColumnVal());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (Map<String, Object> data : columnList) {
|
|
|
+ String valRes = "";
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ for (String key : columnList.get(0).keySet()) {
|
|
|
+ //固定值转换
|
|
|
+ FormFieldHead formFieldHead = columnAliasMap.get(key);//字段对应别名和表
|
|
|
+ List<ColumnFixTrans> transColList = tableColumnFixTransMap.get(formFieldHead.getTableName());//固定值字段集合
|
|
|
+ List<ColumnFixTrans> currentFixValList = new ArrayList<>();
|
|
|
+ if(CollectionUtils.isNotEmpty(transColList)){
|
|
|
+ currentFixValList = transColList.stream()
|
|
|
+ .filter(t -> t.getColName().equals(formFieldHead.getColumnName()))
|
|
|
+ .collect(Collectors.toList());//当前字段固定值对照值
|
|
|
+ }
|
|
|
+ if(CollectionUtils.isNotEmpty(currentFixValList)){
|
|
|
+ Map<String, String> valMeanMap = currentFixValList.stream()
|
|
|
+ .collect(Collectors.toMap(ColumnFixTrans::getColVal, ColumnFixTrans::getValMean));
|
|
|
+ Object value = data.get(key);
|
|
|
+ if(null != value){
|
|
|
+ String mean = valMeanMap.get(value.toString());
|
|
|
+ valRes = mean;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //转义
|
|
|
+ List<String> userNameIndexes = indexMap.get("userName");
|
|
|
+ List<String> deptNameIndexes = indexMap.get("deptName");
|
|
|
+ if(1 == user.getUserNameNeedTranslate()){
|
|
|
+ Object value = data.get(key);
|
|
|
+ if (value == null) {
|
|
|
+ } else {
|
|
|
+ String val = value.toString();
|
|
|
+ if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
+ if(CollectionUtils.isNotEmpty(userNameIndexes) && userNameIndexes.contains(key)){
|
|
|
+ String name = val;
|
|
|
+ Optional<User> first = companyUsers.stream().filter(u -> u.getName().equals(name)).findFirst();
|
|
|
+ if(first.isPresent()){
|
|
|
+ val = "$userName="+first.get().getCorpwxUserid()+"$";
|
|
|
+ }else {
|
|
|
+ val = "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if(CollectionUtils.isNotEmpty(deptNameIndexes) && deptNameIndexes.contains(key)){
|
|
|
+ String name = val;
|
|
|
+ Optional<User> first = companyUsers.stream().filter(u -> u.getName().equals(name)).findFirst();
|
|
|
+ if(first.isPresent()){
|
|
|
+ val = "$departmentName="+first.get().getCorpwxDeptid()+"$";
|
|
|
+ }else {
|
|
|
+ val = "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ valRes = val;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ Object value = data.get(key);
|
|
|
+ if (value == null) {
|
|
|
+ valRes = "";
|
|
|
+ } else {
|
|
|
+ valRes = value.toString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ map.put(key,valRes);
|
|
|
+ valRes = "";
|
|
|
+ }
|
|
|
+ resColumnList.add(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resColumnList;
|
|
|
+ }
|
|
|
+
|
|
|
}
|