Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	boman-web-core/src/main/java/com/boman/web/core/service/bomanMessageReceive/BomanMessageReceiveServiceImpl.java
Administrator 4 years ago
parent
commit
fd5c9cb654

+ 9 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysUser.java

@@ -81,6 +81,7 @@ public class SysUser extends BaseEntity
         @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
     })
     private SysDept dept;
+    private String deptName;
 
     /** 角色对象 */
     private List<SysRole> roles;
@@ -96,6 +97,14 @@ public class SysUser extends BaseEntity
 
     }
 
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
     public SysUser(Long id)
     {
         this.id = id;

+ 36 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/dto/PrimaryTableDto.java

@@ -0,0 +1,36 @@
+package com.boman.domain.dto;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author shiqian
+ * @date 2021年07月06日 13:32
+ **/
+@Data
+public class PrimaryTableDto {
+
+    /** 主表表名 **/
+    private String primaryTableName;
+
+    /** 主表数据id **/
+    private Long itemId;
+
+    /** 子表的集合 **/
+    private List<DeputyTableDto> deputyTableList;
+
+    @Data
+    public static class DeputyTableDto {
+
+       /** 副表表名 **/
+       private String deputyTableName;
+       /** 副表与子表关联的字段名称 **/
+       private String fkName;
+       /** 子表的集合 **/
+       private List<DeputyTableDto> deputyTableList;
+   }
+
+
+}

+ 1 - 1
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysDeptController.java

@@ -95,7 +95,7 @@ public class SysDeptController extends BaseController
      */
     @PreAuthorize(hasPermi = "system:dept:user")
     @GetMapping(value = "/user/{id}")
-    public AjaxResult getUserInfo(@PathVariable Long id)
+    public AjaxResult getUserInfo(@PathVariable(name = "id") Long id)
     {
         return AjaxResult.success(deptService.getUserInfo(id));
     }

+ 2 - 0
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysUserServiceImpl.java

@@ -568,6 +568,8 @@ public class SysUserServiceImpl implements ISysUserService
             List<SysUser> users = new ArrayList<>(16);
             for (SysUser sysUser : sysUsers) {
                 if (sysDept.getId().equals(sysUser.getDeptId())) {
+                    // 为了保持树形结构的完整性,需要外层和内层属性名称一致,这里都为 deptName (王梦韦)
+                    sysUser.setDeptName(sysUser.getUserName());
                     users.add(sysUser);
                 }
             }

+ 13 - 6
boman-web-core/src/main/java/com/boman/web/core/controller/ObjController.java

@@ -2,6 +2,7 @@ package com.boman.web.core.controller;
 
 import com.boman.domain.dto.AjaxResult;
 import com.boman.domain.dto.FormDataDto;
+import com.boman.domain.dto.PrimaryTableDto;
 import com.boman.web.core.service.TableServiceCmdService;
 import com.boman.web.core.service.common.ICommonService;
 import io.swagger.annotations.ApiOperation;
@@ -105,12 +106,13 @@ public class ObjController {
 
     /**
      * 功能描述: 获取单表单数据 默认查所有字段
-     * eg:{
-     * "table": "sys_config",
-     * "fixedData": {
-     * "id": 20
-     * }
-     * }
+     * 如果不需要带hr类型的,则调用{@link ObjController#getOneByMap(com.boman.domain.dto.FormDataDto)}
+     *      {
+     *        "table": "sys_config",
+     *        "fixedData": {
+     *           "id": 20
+     *          }
+     *       }
      *
      * @param condition condition
      * @return com.boman.domain.dto.AjaxResult
@@ -121,6 +123,11 @@ public class ObjController {
         return tableServiceCmdService.getObject(condition);
     }
 
+    @ApiOperation(value = "获取主子表数据")
+    @PostMapping("/getComplexObject")
+    public AjaxResult getComplexObject(@RequestBody PrimaryTableDto dto) {
+        return tableServiceCmdService.getComplexObject(dto);
+    }
 
     /**
      * 功能描述: 获取单表单数据 默认查所有字段

+ 111 - 14
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -9,7 +9,7 @@ import com.boman.common.core.utils.SecurityUtils;
 import com.boman.common.core.utils.StringUtils;
 import com.boman.common.core.utils.collection.CollectionUtils;
 import com.boman.common.core.utils.obj.ObjectUtils;
-import com.boman.domain.dto.AjaxResult;
+import com.boman.domain.dto.*;
 import com.boman.common.redis.RedisKey;
 import com.boman.common.redis.service.RedisService;
 import com.boman.common.security.service.TokenService;
@@ -17,18 +17,14 @@ import com.boman.domain.GenTable;
 import com.boman.domain.GenTableColumn;
 import com.boman.domain.SysDictData;
 import com.boman.domain.constant.*;
-import com.boman.domain.dto.ProcessDto;
-import com.boman.domain.dto.RoleMenuDto;
 import com.boman.domain.exception.NoSuchFunctionException;
 import com.boman.gen.api.RemoteGenTableColumnService;
 import com.boman.gen.api.RemoteGenTableService;
 import com.boman.jflow.api.RemoteJflowProcessService;
-import com.boman.jflow.api.RemoteJflowTaskService;
 import com.boman.system.api.RemoteMenuService;
 import com.boman.domain.SysMenu;
 import com.boman.system.api.model.LoginUser;
 import com.boman.web.core.domain.ActionType;
-import com.boman.domain.dto.FormDataDto;
 import com.boman.web.core.domain.RowResult;
 import com.boman.web.core.domain.TableContext;
 import com.boman.web.core.service.delete.IBaseDeleteService;
@@ -125,7 +121,7 @@ public class TableServiceCmdService {
         if (ActionType.INSERT.equals(context.getActionType())) {
             List<GenTableColumn> columns = context.getColumns();
             Long maxId = IdUtils.getMaxId(dto.getTable(), pkName);
-            ColumnUtils.packUpdateByAndTime(columns, commitData, new Timestamp(System.currentTimeMillis()), true);
+            packUpdateByAndTime(columns, commitData, new Timestamp(System.currentTimeMillis()), true);
             // 处理默认值
             handlerDefaultValue(commitData, columns);
             // 如果有单据、按照单据编号规则
@@ -212,17 +208,14 @@ public class TableServiceCmdService {
         List<RowResult> result = Lists.newArrayListWithCapacity(idArr.length);
         for (Long id : idArr) {
             // 校验权限
-            if (BooleanUtils.isTrue(checkAuthObjectDelete(genTable, id, pkName))) {
-                rowResult = deleteService.deleteById(dto.getTable(), pkName, id);
-                if (rowResult.isOk()) {
-                    LOGGER.info("删除成功, tableName: {}, id: {}, 操作人: {}", tableContext.getTableName(), id, getLoginUser().getUsername());
-                    continue;
-                }
-                LOGGER.info("删除失败, tableName: {}, id: {}, 操作人: {}", tableContext.getTableName(), id, getLoginUser().getUsername());
-            } else {
+            if (BooleanUtils.isFalse(checkAuthObjectDelete(genTable, id, pkName))) {
                 rowResult = RowResult.create(RowResult.FAIL, "无操作权限");
+                result.add(rowResult);
+                continue;
             }
 
+            rowResult = deleteService.deleteById(dto.getTable(), pkName, id);
+            LOGGER.info("删除" + (rowResult.isOk() ? "成功" : "失败") + ", tableName: {}, id: {}, 操作人: {}", tableContext.getTableName(), id, getLoginUser().getUsername());
             result.add(rowResult);
         }
 
@@ -445,6 +438,110 @@ public class TableServiceCmdService {
     }
 
 
+    public AjaxResult getComplexObject(PrimaryTableDto dto) {
+        String primaryTableName = requireNonNull(dto.getPrimaryTableName(), "primaryTableName is empty");
+        Long id = requireNonNull(dto.getItemId(), "itemId is empty");
+
+        GenTable primaryGenTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, primaryTableName);
+        if (BooleanUtils.isFalse(checkAuthGetObject(primaryGenTable, id))) {
+            throw new NoSuchFunctionException("不好意思,您无权限操作");
+        }
+
+        List<GenTableColumn> primaryColumns = primaryGenTable.getColumns();
+        // id = -1时,查询该表单对应的字段名称
+        if (ltZero(id)) {
+            return AjaxResult.error("when invoke getComplexObject param(id) must be gt 0, but id = " + id + " now");
+        }
+
+        List<PrimaryTableDto.DeputyTableDto> deputyTableList = dto.getDeputyTableList();
+        for (PrimaryTableDto.DeputyTableDto tableDto : deputyTableList) {
+
+        }
+
+        // extend的字段标记为true
+        markTrueByExtend(primaryColumns);
+        List<GenTableColumn> updateVisibleColumns = filterData(primaryColumns, 2, UPDATE_VISIBLE::equals);
+        List<String> showData = map(updateVisibleColumns, GenTableColumn::getColumnName);
+        String pkName = IdUtils.getPkName(primaryColumns);
+
+        List<JSONObject> jsonList = selectService.selectByIdList(primaryTableName, pkName, Lists.newArrayList(id), showData);
+        requireNonNull(jsonList, "id 为[" + id + "]的数据不存在, 模块为[" + primaryGenTable.getFunctionName() + "]");
+        // 查询时为null的列不显示的处理
+        handleNullColumnValue(jsonList, showData);
+        JSONObject json = jsonList.get(0);
+
+        // 处理blob
+        handleBlob(jsonList, primaryGenTable.getIsContainsBlob());
+        List<GenTableColumn> parentColumns = filterHrAndSort(primaryColumns);
+        removeColumnsByMask(parentColumns, 2, UPDATE_NOT_VISIBLE::equals);
+
+        //接收可能存在的cssClass
+        String cssClass = null;
+        // 处理成hr的形式
+        for (GenTableColumn hrColumn : parentColumns) {
+            List<GenTableColumn> children = Lists.newArrayListWithCapacity(16);
+            for (GenTableColumn column : updateVisibleColumns) {
+                if (!hrColumn.getId().equals(column.getHrParentId())) {
+                    continue;
+                }
+
+                String columnName = column.getColumnName(), columnType = column.getColumnType(), htmlType = column.getHtmlType(), dictType = column.getDictType();
+                if (!json.containsKey(columnName)) {
+                    continue;
+                }
+
+                Object value = json.get(columnName);
+                column.setColumnValue(value);
+                // sysDict
+                if (isNotEmpty(dictType)) {
+                    List<SysDictData> sysDictData = column.getSysDictData();
+                    if (sysDictData != null && sysDictData.size() > 0) {
+                        for (SysDictData sysDictDatum : sysDictData) {
+                            if (sysDictDatum.getDictValue().equals(value)) {
+                                cssClass = sysDictDatum.getCssClass();
+                                break;
+                            }
+                        }
+                    }
+                }
+                // dateTime
+                if (NEED_CONVERT_DATE_LIST.contains(columnType)) {
+                    assert value instanceof Timestamp;
+                    column.setColumnValue(getStrDate((Timestamp)value));
+                }
+                // fk
+                if (isNotEmpty(column.getForeignKey())) {
+                    column.setFkInfo(getFkInfoForGetObject(column.getFkInfo(), value));
+                    // 转换类型
+                    column.setColumnValue(castNumberValue(primaryColumns, columnName, value));
+                }
+                // annex
+                if (HTML_IMAGE_UPLOAD.equalsIgnoreCase(htmlType) || HTML_FILE_UPLOAD.equalsIgnoreCase(htmlType)) {
+                    column.setAnnex(getAnnex((String)value));
+                }
+
+                children.add(column);
+            }
+            hrColumn.setHrChildren(children);
+        }
+
+        //给基本属性和日志信息添加上cssClass
+        if (StringUtils.isNotBlank(cssClass)) {
+            for (GenTableColumn parentColumn : parentColumns) {
+                parentColumn.setCssClass(cssClass);
+            }
+        }
+        JSONObject result = new JSONObject();
+        result.put(SHOW_DATA, removeHr(parentColumns));
+        result.put(BUTTON_LIST, getButton(primaryTableName, json.getString(SubmitConstant.STATUS)));
+        Integer tableColumn = primaryGenTable.getTableColumn();
+        if (tableColumn != null) {
+            result.put(TABLE_COLUMN, tableColumn);
+        }
+        return AjaxResult.success(result);
+    }
+
+
     /**
      * 功能描述: 获取单表单所有数据
      *

+ 21 - 16
boman-web-core/src/main/java/com/boman/web/core/service/bomanMessageReceive/BomanMessageReceiveServiceImpl.java

@@ -9,6 +9,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.List;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.ifNullSetEmpty;
+import static com.boman.common.core.utils.obj.ObjectUtils.isEmpty;
 
 /**
  * @author tjf
@@ -22,27 +26,28 @@ public class BomanMessageReceiveServiceImpl implements IBomanMessageReceiveServi
 
     /**
      * 根据发文id查询出该发文所选人员名称和部门
-     * @param messageId
-     * @return
+     *
+     * @param messageId messageId
+     * @return AjaxResult
      */
     @Override
     public AjaxResult getUserNameAndDeptName(String messageId) {
         JSONObject jsonObject = new JSONObject();
-        jsonObject.put("message_id",messageId);
-        List<JSONObject> bomanMessageReceiveList = selectService.getByMap("boman_message_receive", jsonObject);
-        List<String> receiveUserNameList = new ArrayList<>();
-        List<String> receiveDeptNameList = new ArrayList<>();
-        for (JSONObject object : bomanMessageReceiveList) {
-            String receiveUserName = String.valueOf(object.get("receive_user_name"));
-            String receiveDeptName = String.valueOf(object.get("receive_dept_name"));
-            if (StringUtils.isNotBlank(receiveUserName)){
-                receiveUserNameList.add(receiveUserName);
-            }
-            if (StringUtils.isNotBlank(receiveDeptName)){
-                receiveDeptNameList.add(receiveDeptName);
-            }
+        jsonObject.put("message_id", messageId);
+        List<JSONObject> list = selectService.getByMap("boman_message_receive", jsonObject);
+        if (isEmpty(list)) {
+            return AjaxResult.success(ifNullSetEmpty(list));
         }
-        return Objects.requireNonNull(AjaxResult.success().put("receiveUserNameList", receiveUserNameList)).put("receiveDeptNameList",receiveDeptNameList);
+
+        for (JSONObject json : list) {
+            String userName = json.getString("receive_user_name");
+            String deptName = json.getString("receive_dept_name");
+            // {@link com.boman.system.service.impl.SysUserServiceImpl.listUserTree} 名称保持一致 (王梦韦)
+            json.put("userName", userName);
+            json.put("deptName", deptName);
+        }
+
+        return AjaxResult.success(list);
     }
 
     /**

+ 1 - 1
boman-web-core/src/main/java/com/boman/web/core/service/update/BaseUpdateServiceImpl.java

@@ -109,7 +109,7 @@ public class BaseUpdateServiceImpl implements IBaseUpdateService {
     private String covert(String columnType, String value) {
         // false 不需要转义
         boolean needEscape = columnType.contains(VARCHAR) || columnType.contains(CHAR) || columnType.contains(BLOB)
-                || columnType.contains(DATETIME) || columnType.contains(TIMESTAMP);
+                || columnType.contains(DATETIME)|| columnType.contains(DATE) || columnType.contains(TIMESTAMP);
         return needEscape ? escapeStr(value) : value;
     }
 }

+ 23 - 11
boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java

@@ -43,45 +43,57 @@ public class ColumnUtils {
      * 功能描述: 新增或者修改的时候,是否需要给修改人修改时间赋值
      *
      * @param columns     所有的列
-     * @param jsonObject  需要返回的数据
+     * @param commitData  需要返回的数据
      * @param currentTime currentTime
      * @param isSave      新增true、修改false
      */
-    public static void packUpdateByAndTime(List<GenTableColumn> columns, JSONObject jsonObject, Timestamp currentTime, boolean isSave) {
+    public static void packUpdateByAndTime(List<GenTableColumn> columns, JSONObject commitData, Timestamp currentTime, boolean isSave) {
         for (GenTableColumn column : columns) {
             String columnName = column.getColumnName();
             if (UPDATE_BY.equalsIgnoreCase(columnName)) {
-                jsonObject.put(columnName, SecurityUtils.getUsername());
+                commitData.put(columnName, SecurityUtils.getUsername());
                 continue;
             }
 
             if (UPDATE_TIME.equalsIgnoreCase(columnName)) {
-                jsonObject.put(columnName, currentTime);
+                commitData.put(columnName, currentTime);
                 continue;
             }
 
             if (isSave) {
                 if (CREATE_TIME.equalsIgnoreCase(columnName)) {
-                    jsonObject.put(columnName, currentTime);
+                    commitData.put(columnName, currentTime);
                     continue;
                 }
                 if (CREATE_BY.equalsIgnoreCase(columnName)) {
-                    jsonObject.put(columnName, SecurityUtils.getUsername());
+                    commitData.put(columnName, SecurityUtils.getUsername());
                     continue;
                 }
                 if (DATETIME.equalsIgnoreCase(column.getColumnType())) {
-                    Object value = jsonObject.getTimestamp(columnName);
+                    Object value = commitData.getTimestamp(columnName);
                     if (isNotEmpty(value)) {
-                        jsonObject.put(columnName, jsonObject.getTimestamp(columnName));
+                        commitData.put(columnName, commitData.getTimestamp(columnName));
                     }
                 }
             } else {
                 // 修改时,修改非创建时间的其他时间类型
-                if (DATETIME.equalsIgnoreCase(column.getColumnType())) {
-                    if (!CREATE_TIME.equalsIgnoreCase(columnName) && isNotEmpty(jsonObject.get(columnName))) {
-                        jsonObject.put(columnName, jsonObject.getTimestamp(columnName));
+                if (!CREATE_TIME.equalsIgnoreCase(columnName) && isNotEmpty(commitData.get(columnName))) {
+                    if (DATETIME.equalsIgnoreCase(column.getColumnType())) {
+                        commitData.put(columnName, commitData.getTimestamp(columnName));
+                    } else if (DATE.equalsIgnoreCase(column.getColumnType())) {
+                        commitData.put(columnName, commitData.getSqlDate(columnName));
                     }
                 }
+
+//                if (DATETIME.equalsIgnoreCase(column.getColumnType())) {
+//                    if (!CREATE_TIME.equalsIgnoreCase(columnName) && isNotEmpty(commitData.get(columnName))) {
+//                        commitData.put(columnName, commitData.getTimestamp(columnName));
+//                    }
+//                } else  if (DATE.equalsIgnoreCase(column.getColumnType())) {
+//                    if (!CREATE_TIME.equalsIgnoreCase(columnName) && isNotEmpty(commitData.get(columnName))) {
+//                        commitData.put(columnName, commitData.getSqlDate(columnName));
+//                    }
+//                }
             }
         }
     }