diff --git a/xm-core-ui-web/src/api/xm/core/xmProjectGroup.js b/xm-core-ui-web/src/api/xm/core/xmProjectGroup.js
new file mode 100644
index 00000000..70927fce
--- /dev/null
+++ b/xm-core-ui-web/src/api/xm/core/xmProjectGroup.js
@@ -0,0 +1,30 @@
+import axios from '@/utils/request'
+
+import config from '@/common/config'
+
+let base = config.getCoreBasePath();
+
+
+/**
+ * xm_project_group
+ *1 默认只开放普通查询,所有查询,只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录【数如果是0后台会自动计算总记录数非0不会自动计算】},后台都会自动按分页查询 其它 api用到再打开,没用到的api请注释掉,
+ *2 查询、新增、修改的参数格式 params={id:'主键 主键',groupName:'团队名称',projectId:'项目编号-属于产品线则可为空',pgTypeId:'项目团队类型编号',pgTypeName:'团队类型名称',leaderUserid:'团队负责人',leaderUsername:'负责人姓名',ctime:'创建时间',ltime:'更新时间',productId:'产品编号,属于项目组的团队则可为空',branchId:'机构编号',pgClass:'团队类别0项目1产品',pgroupId:'上级团队编号',lvl:'级别0级1级2级3级4级',pidPaths:'上级编号路径逗号分割,0,开始,本组编号+逗号结束',isTpl:'是否为模板',assUserid:'副组长编号',assUsername:'副组长姓名',childrenCnt:'下级团队数量',userCnt:'组员数量',qxCode:'权限码',calcWorkload:'是否计算工作量0否1是',ntype:'节点类型0管理团队、1执行团队'}
+ **/
+
+//普通查询 条件之间and关系
+export const listXmProjectGroup = params => { return axios.get(`${base}/xm/core/xmProjectGroup/list`, { params: params }); };
+
+//模糊查询xm_project_group 条件之间or关系
+//export const listXmProjectGroupKey = params => { return axios.get(`${base}/xm/core/xmProjectGroup/listKey`, { params: params }); };
+
+//删除一条xm_project_group params={id:'主键 主键'}
+export const delXmProjectGroup = params => { return axios.post(`${base}/xm/core/xmProjectGroup/del`,params); };
+
+//批量删除xm_project_group params=[{id:'主键 主键'}]
+export const batchDelXmProjectGroup = params => { return axios.post(`${base}/xm/core/xmProjectGroup/batchDel`, params); };
+
+//修改一条xm_project_group记录
+export const editXmProjectGroup = params => { return axios.post(`${base}/xm/core/xmProjectGroup/edit`, params); };
+
+//新增一条xm_project_group
+export const addXmProjectGroup = params => { return axios.post(`${base}/xm/core/xmProjectGroup/add`, params); };
\ No newline at end of file
diff --git a/xm-core-ui-web/src/api/xm/core/xmProjectGroupUser.js b/xm-core-ui-web/src/api/xm/core/xmProjectGroupUser.js
new file mode 100644
index 00000000..34bff9ff
--- /dev/null
+++ b/xm-core-ui-web/src/api/xm/core/xmProjectGroupUser.js
@@ -0,0 +1,30 @@
+import axios from '@/utils/request'
+
+import config from '@/common/config'
+
+let base = config.getCoreBasePath();
+
+
+/**
+ * xm_project_group_user
+ *1 默认只开放普通查询,所有查询,只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录【数如果是0后台会自动计算总记录数非0不会自动计算】},后台都会自动按分页查询 其它 api用到再打开,没用到的api请注释掉,
+ *2 查询、新增、修改的参数格式 params={groupId:'团队编号 主键',userid:'团队成员编号 主键',joinTime:'加入时间',username:'团队成员',outTime:'离队时间',status:'当前状态0参与中1已退出团队',obranchId:'组员原归属机构编号',isPri:'是否私人加入0否1是',seqNo:'排序号--从1开始',projectId:'项目编号',productId:'产品编号',pgClass:'0-项目,1-产品'}
+ **/
+
+//普通查询 条件之间and关系
+export const listXmProjectGroupUser = params => { return axios.get(`${base}/xm/core/xmProjectGroupUser/list`, { params: params }); };
+
+//模糊查询xm_project_group_user 条件之间or关系
+//export const listXmProjectGroupUserKey = params => { return axios.get(`${base}/xm/core/xmProjectGroupUser/listKey`, { params: params }); };
+
+//删除一条xm_project_group_user params={groupId:'团队编号 主键',userid:'团队成员编号 主键'}
+export const delXmProjectGroupUser = params => { return axios.post(`${base}/xm/core/xmProjectGroupUser/del`,params); };
+
+//批量删除xm_project_group_user params=[{groupId:'团队编号 主键',userid:'团队成员编号 主键'}]
+export const batchDelXmProjectGroupUser = params => { return axios.post(`${base}/xm/core/xmProjectGroupUser/batchDel`, params); };
+
+//修改一条xm_project_group_user记录
+export const editXmProjectGroupUser = params => { return axios.post(`${base}/xm/core/xmProjectGroupUser/edit`, params); };
+
+//新增一条xm_project_group_user
+export const addXmProjectGroupUser = params => { return axios.post(`${base}/xm/core/xmProjectGroupUser/add`, params); };
\ No newline at end of file
diff --git a/xm-core-ui-web/src/views/xm/core/xmProjectGroup/XmProjectGroupEdit.vue b/xm-core-ui-web/src/views/xm/core/xmProjectGroup/XmProjectGroupEdit.vue
new file mode 100644
index 00000000..fc66fb58
--- /dev/null
+++ b/xm-core-ui-web/src/views/xm/core/xmProjectGroup/XmProjectGroupEdit.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 提交
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xm-core-ui-web/src/views/xm/core/xmProjectGroup/XmProjectGroupMng.vue b/xm-core-ui-web/src/views/xm/core/xmProjectGroup/XmProjectGroupMng.vue
new file mode 100644
index 00000000..17e8eeeb
--- /dev/null
+++ b/xm-core-ui-web/src/views/xm/core/xmProjectGroup/XmProjectGroupMng.vue
@@ -0,0 +1,269 @@
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xm-core-ui-web/src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserEdit.vue b/xm-core-ui-web/src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserEdit.vue
new file mode 100644
index 00000000..006598cd
--- /dev/null
+++ b/xm-core-ui-web/src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserEdit.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 提交
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xm-core-ui-web/src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserMng.vue b/xm-core-ui-web/src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserMng.vue
new file mode 100644
index 00000000..cb43592c
--- /dev/null
+++ b/xm-core-ui-web/src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserMng.vue
@@ -0,0 +1,258 @@
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmBranchStateHisController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmBranchStateHisController.java
new file mode 100644
index 00000000..54291dbb
--- /dev/null
+++ b/xm-core/src/main/java/com/xm/core/ctrl/XmBranchStateHisController.java
@@ -0,0 +1,229 @@
+package com.xm.core.ctrl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.mdp.safe.client.entity.User;
+import com.mdp.safe.client.utils.LoginUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.stereotype.Controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+
+import static com.mdp.core.utils.ResponseHelper.*;
+import static com.mdp.core.utils.BaseUtils.*;
+import com.mdp.core.entity.Tips;
+import com.mdp.core.err.BizException;
+import com.mdp.mybatis.PageUtils;
+import com.mdp.core.utils.RequestUtils;
+import com.mdp.core.utils.NumberUtil;
+import com.xm.core.service.XmBranchStateHisService;
+import com.xm.core.entity.XmBranchStateHis;
+/**
+ * url编制采用rest风格,如对xm_branch_state_his 机构内所有项目指标汇总的操作有增删改查,对应的url分别为:
+ * 新增: core/xmBranchStateHis/add
+ * 查询: core/xmBranchStateHis/list
+ * 模糊查询: core/xmBranchStateHis/listKey
+ * 修改: core/xmBranchStateHis/edit
+ * 删除: core/xmBranchStateHis/del
+ * 批量删除: core/xmBranchStateHis/batchDel
+ * 组织 com 顶级模块 xm 大模块 core 小模块
+ * 实体 XmBranchStateHis 表 xm_branch_state_his 当前主键(包括多主键): biz_date,branch_id;
+ ***/
+@RestController("xm.core.xmBranchStateHisController")
+@RequestMapping(value="/**/core/xmBranchStateHis")
+@Api(tags={"机构内所有项目指标汇总操作接口"})
+public class XmBranchStateHisController {
+
+ static Logger logger =LoggerFactory.getLogger(XmBranchStateHisController.class);
+
+ @Autowired
+ private XmBranchStateHisService xmBranchStateHisService;
+
+
+
+
+ @ApiOperation( value = "查询机构内所有项目指标汇总信息列表",notes=" ")
+ @ApiResponses({
+ @ApiResponse(code = 200,response=XmBranchStateHis.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'错误码'},total:总记录数,data:[数据对象1,数据对象2,...]}")
+ })
+ @RequestMapping(value="/list",method=RequestMethod.GET)
+ public Map listXmBranchStateHis( @RequestParam Map xmBranchStateHis){
+ Map m = new HashMap<>();
+ Tips tips=new Tips("查询成功");
+ RequestUtils.transformArray(xmBranchStateHis, "pkList");
+ PageUtils.startPage(xmBranchStateHis);
+ List