jiangping
2024-07-12 7e90b706ce34a759ea20de5e00896e66a8fca0aa
提交
已添加1个文件
已修改11个文件
363 ■■■■ 文件已修改
admin/public/template/users.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/users.js 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaUserImportWindow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/shopUsers.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/src/main/java/com/doumee/api/business/PushController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/model/ApiResponse.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/admin/request/UserImport.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/Users.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/IamInterfaceLogServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/public/template/users.xlsx
Binary files differ
admin/src/api/business/users.js
@@ -14,14 +14,9 @@
    download: true
  })
}
export function updateWorkStatus (data) {
  return request.post('/visitsAdmin/cloudService/business/member/updateWorkStatus', data)
}
export function importExcel (data) {
  return request.post('/visitsAdmin/cloudService/business/member/importExcel', data)
}
export function memberSync (data) {
  return request.post('/visitsAdmin/cloudService/business/member/syncAll', data)
  return request.post('/business/users/importExcel', data)
}
// åˆ›å»º
export function create (data) {
admin/src/components/business/OperaUserImportWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
<template>
  <el-dialog
      class="center-title"
      :title="title"
      width="500px"
      top="30vh"
      :visible.sync="visible"
      :confirm-working="isWorking"
      @confirm="confirm"
  >
    <p class="tip-warn"><i class="el-icon-warning"></i>导入说明:<br>
      1.请先下载文件模板,并按照模板要去填写表格内容;<br>
    </p>
    <el-form class="demo-form-inline" >
      <el-form-item label="组织信息清单" required>
        <div style="width: 100%;display: flex;align-items: center;">
          <el-button type="primary"   @click="clickRef">点击上传</el-button>
          <el-button type="text" @click="exportTemplate">点击下载模版.EXCEL</el-button>
        </div>
        <div style="font-size: 14px; color: black;" v-if="fileName">{{fileName}}</div>
      </el-form-item>
    </el-form>
    <input type="file" style="position: fixed; left: 0; top: -50px;" accept=".xlsx" ref="fileExcel" @change="result" />
    <template   v-slot:footer>
      <el-button @click="visible=false">返回</el-button>
    </template>
  </el-dialog>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { importExcel } from '@/api/business/users'
export default {
  name: 'OperaShopImportWindow',
  extends: BaseOpera,
  // eslint-disable-next-line vue/no-unused-components
  components: { GlobalWindow },
  data () {
    return {
      importing:false,
      fileName: '',
    }
  },
  methods: {
    open (title, companyType) {
      this.title = title
      this.fileName = ''
      this.visible = true
    },
    // å¯¼å‡ºæ¨¡æ¿
    exportTemplate () {
      // æŠ•保申请
      window.open('/template/users.xlsx')
    },
    clickRef () {
      this.$refs.fileExcel.click()
    },
    result (e) {
      const data = new FormData()
      data.append('file', e.target.files[0])
      data.append('companyType', this.companyType)
      importExcel(data)
        .then(res => {
          this.$tip.apiSuccess('发起批量上传任务成功,请稍后刷新页面查看')
          this.$emit('success')
          this.visible = false
        })
        .catch(err => {
          this.fileName = ''
        })
        .finally(() => {
          this.$refs.fileExcel.value = null
        })
    }
  }
}
</script>
<style lang="scss" scoped>
</style>
admin/src/views/business/shopUsers.vue
@@ -54,10 +54,11 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar"  style="height: 26px">
<!--        <li><el-button type="primary" @click="$refs.OperaMemberWindow.open('新建员工',null,department,searchForm.companyType)"  icon="el-icon-plus" v-permissions="['business:member:create']">新建员工</el-button></li>
        <li><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('人员导入',searchForm.companyType)"  icon="el-icon-plus" v-permissions="['business:member:create']">人员导入</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">批量删除</el-button></li>
     -->
        <li><el-button type="primary" @click="$refs.OperaUserImportWindow.open('初始化导入')"  icon="el-icon-plus" v-permissions="['business:member:create']">初始化导入</el-button></li>
        <!--        <li><el-button type="primary" @click="$refs.OperaMemberWindow.open('新建员工',null,department,searchForm.companyType)"  icon="el-icon-plus" v-permissions="['business:member:create']">新建员工</el-button></li>
                <li><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('人员导入',searchForm.companyType)"  icon="el-icon-plus" v-permissions="['business:member:create']">人员导入</el-button></li>
                <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">批量删除</el-button></li>
             -->
        <li style="float: right;">
         <el-checkbox style="font-size: 12px"  label="1" v-model="searchForm.includeChild" key="1"  @change="search" >是否包含下级组织</el-checkbox>
        </li>
@@ -69,23 +70,23 @@
          @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="name" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="iamUsername" label="登录账号" min-width="100px"></el-table-column>
        <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="name" label="姓名" fixed min-width="100px"></el-table-column>
        <el-table-column prop="iamUsername" fixed label="登录账号" min-width="100px"></el-table-column>
        <el-table-column prop="phone" label="手机号" fixed min-width="100px"></el-table-column>
        <el-table-column label="性别" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.sex == 0">男</span>
            <span v-if="row.sex == 1">女</span>
          </template>
        </el-table-column>
        <el-table-column prop="shopName" label="所属部门" min-width="100px"></el-table-column>
        <el-table-column prop="shopName" label="所属部门" min-width="150px"></el-table-column>
        <el-table-column prop="status" label="状态" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.status == 0" style="color: red">停用</span>
            <span v-if="row.status == 1" style="color:green">启用</span>
          </template>
        </el-table-column>
        <el-table-column prop="shopType" label="组织类型" min-width="80px">
        <el-table-column prop="shopType" label="组织类型" min-width="110px">
          <template scope="{row}">
            <span v-if="row.shopType == 1">HR</span>
            <span v-if="row.shopType == 2">加盟商</span>
@@ -130,8 +131,7 @@
      >
      </pagination>
      <!--    æŸ¥çœ‹äººå‘˜å¼€å¡è®°å½•    -->
      <OperaMemberWindow ref="OperaMemberWindow" @success="handlePageChange" />
      <OperaMemberImportWindow ref="OperaMemberImportWindow" @success="handlePageChange" />
      <OperaUserImportWindow ref="OperaUserImportWindow" @success="handlePageChange" />
    </template>
  </TableLayout1>
</template>
@@ -140,13 +140,12 @@
import BaseTable from '@/components/base/BaseTable'
import TableLayout1 from '@/layouts/TableLayout1'
import Pagination from '@/components/common/Pagination'
import OperaMemberWindow from '@/components/business/OperaMemberWindow'
import OperaMemberImportWindow from '@/components/business/OperaMemberImportWindow'
import OperaUserImportWindow from '@/components/business/OperaUserImportWindow'
import { fetchListByParent } from '@/api/business/shop'
export default {
  name: 'internalMember',
  extends: BaseTable,
  components: { TableLayout1, Pagination,  OperaMemberWindow, OperaMemberImportWindow },
  components: { TableLayout1, Pagination, OperaUserImportWindow },
  data () {
    return {
      TreeList: [],
server/admin/src/main/java/com/doumee/api/business/PushController.java
@@ -62,7 +62,7 @@
        ApiResponse<String> r = null;
        try {
            zbomIAMService.updateUserInfo(token,uuid,timestamp,upateUserModel);
            r  = ApiResponse.success("操作成功");
            r  = ApiResponse.successIam("操作成功");
        }catch (BusinessException e){
              success = Constants.ONE;
            r = ApiResponse.failed(StringUtils.defaultString(e.getMessage(),"操作失败"));
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java
@@ -313,6 +313,7 @@
        users.setIsdeleted(Constants.ZERO);
        users.setRemark(JSONObject.toJSONString(upateUserModel));
        users.setRoleNames(null);
        users.setRoleCodes(null);
        users.setRoleIds(null);
        users.setUserTypes(null);
        if( upateUserModel.getUserTypes() !=null){
@@ -331,8 +332,12 @@
                if(StringUtils.isBlank(users.getRoleNames())){
                    users.setRoleNames("");
                }
                users.setRoleIds(users.getRoleIds()+t.getId()+"["+t.getId()+"];");
                if(StringUtils.isBlank(users.getRoleCodes())){
                    users.setRoleCodes("");
                }
                users.setRoleIds(users.getRoleIds()+"["+t.getId()+"];");
                users.setRoleNames(users.getRoleNames()+"["+t.getName()+"];");
                users.setRoleCodes(users.getRoleCodes()+"["+t.getCode()+"];");
            }
        }
        if(upateUserModel.getJobs()!=null){
@@ -350,11 +355,8 @@
                        .last("limit 1"));
                users.setDepartmentId(shop ==null?null:shop.getId());
            }
        }
        return  users;
    }
    public  String getToken(String uuid,String time) {
server/service/src/main/java/com/doumee/core/model/ApiResponse.java
@@ -45,6 +45,16 @@
    public static <T> ApiResponse<T> success(T data) {
        return ApiResponse.success("请求成功", data);
    }
    public static <T> ApiResponse<T> successIam(T data) {
        return ApiResponse.successIam("请求成功", data);
    }
    /**
     * è¯·æ±‚成功
     */
    public static <T> ApiResponse<T> successIam(String message, T data) {
        return new ApiResponse<>(0, Boolean.TRUE, message, data, null);
    }
    /**
     * è¯·æ±‚成功
server/service/src/main/java/com/doumee/dao/admin/request/UserImport.java
@@ -18,22 +18,24 @@
    private String name;
    @ExcelColumn(name="登录账号",value = "accountNo",index = 3)
    private String accountNo;
    @ExcelColumn(name="状态",value = "status",index =4)
    private Integer status;
    @ExcelColumn(name="邮箱",value = "email",index = 5)
    @ExcelColumn(name="性别 0男 1女",value = "sex",index = 4)
    private String sex;
    @ExcelColumn(name="状态  0停用,1启用",value = "status",index =5)
    private String status;
    @ExcelColumn(name="邮箱",value = "email",index = 6)
    private String email;
    @ExcelColumn(name="手机号",value = "phone",index = 6)
    @ExcelColumn(name="手机号",value = "phone",index = 7)
    private String phone;
    @ExcelColumn(name="工号",value = "code",index = 7)
    @ExcelColumn(name="工号",value = "code",index = 8)
    private String code;
    @ExcelColumn(name="用户类型编码集合,多个英文逗号隔开",value = "typeCodes",index = 8)
    private String typeCodes;
    @ExcelColumn(name="部门编码集合,多个英文逗号隔开",value = "orgIds",index = 9)
    private String orgIds;
    @ExcelColumn(name="角色编码集合,多个英文逗号隔开",value = "roleIds",index = 10)
    private String roleIds;
    @ExcelColumn(name="角色code集合,多个英文逗号隔开",value = "roleCodes",index = 11)
    private String roleCodes;
    @ExcelColumn(name="角色名称集合,多个英文逗号隔开",value = "roleNames",index = 12)
    @ExcelColumn(name="用户类型编码集合,多个英文逗号隔开",value = "typeCodes",index = 10)
    private String typeCodes;
    @ExcelColumn(name="角色名称集合,多个英文逗号隔开",value = "roleNames",index = 11)
    private String roleNames;
    @ExcelColumn(name="角色code集合,多个英文逗号隔开",value = "roleCodes",index = 12)
    private String roleCodes;
    @ExcelColumn(name="角色编码集合,多个英文逗号隔开",value = "roleIds",index = 13)
    private String roleIds;
}
server/service/src/main/java/com/doumee/dao/business/model/Users.java
@@ -158,9 +158,12 @@
    @ExcelColumn(name="用户角色编码集合,多个用英语逗号隔开")
    private String roleIds;
    @ApiModelProperty(value = "用户角色名称集合,多个用英语逗号隔开")
    @ExcelColumn(name="用户角色名称集合,多个用英语逗号隔开")
    @ApiModelProperty(value = "用户角色名称集合")
    @ExcelColumn(name="用户角色名称集合")
    private String roleNames;
    @ApiModelProperty(value = "用户角色code集合,多个用英语逗号隔开")
    @ExcelColumn(name="用户角色code集合,多个用英语逗号隔开")
    private String roleCodes;
    @ApiModelProperty(value = "是否包含下级")
    @TableField(exist = false)
    private Boolean includeChild;
server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java
@@ -6,6 +6,7 @@
import com.doumee.dao.business.CustomerLogMapper;
import com.doumee.dao.business.model.CustomerLog;
import com.doumee.dao.business.model.IamInterfaceLog;
import com.doumee.dao.business.model.InterfaceLog;
import com.doumee.service.business.CustomerLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -186,13 +187,7 @@
        if (pageWrap.getModel().getQueryEndDate() != null) {
            queryWrapper.lambda().le(CustomerLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getQueryEndDate()));
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        queryWrapper.lambda().orderByDesc(CustomerLog::getCreateDate);
        return PageData.from(customerLogMapper.selectPage(page, queryWrapper));
    }
server/service/src/main/java/com/doumee/service/business/impl/IamInterfaceLogServiceImpl.java
@@ -4,6 +4,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.IamInterfaceLogMapper;
import com.doumee.dao.business.model.CustomerLog;
import com.doumee.dao.business.model.IamInterfaceLog;
import com.doumee.dao.business.model.InterfaceLog;
import com.doumee.service.business.IamInterfaceLogService;
@@ -146,13 +147,7 @@
        if (pageWrap.getModel().getQueryEndDate() != null) {
            queryWrapper.lambda().le(IamInterfaceLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getQueryEndDate()));
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        queryWrapper.lambda().orderByDesc(IamInterfaceLog::getCreateDate);
        return PageData.from(iamInterfaceLogMapper.selectPage(page, queryWrapper));
    }
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -2,6 +2,8 @@
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.zbom.model.IamUserRoleModel;
import com.doumee.biz.zbom.model.IamUserTypeModel;
import com.doumee.config.Jwt.JwtPayLoad;
import com.doumee.config.Jwt.JwtTokenUtil;
import com.doumee.core.annotation.excel.ExcelImporter;
@@ -409,8 +411,176 @@
        }
    }
    private void dealUserDataBiz(List<UserImport> finalDataList, Date date, LoginUserInfo loginUserInfo) {
    private void dealUserDataBiz(List<UserImport> dataList, Date date, LoginUserInfo loginUserInfo) {
        try {
            List<Users> list =  usersMapper.selectJoinList(Users.class,new MPJLambdaWrapper<Users>()
                    .selectAll(Users.class)
            );
            List<Users> insertList = new ArrayList<>();
            List<Users> updateList = new ArrayList<>();
            for(int i=0;i<dataList.size();i++){
                UserImport model = dataList.get(i);
                if(StringUtils.isBlank(model.getName())
                        &&StringUtils.isBlank(model.getCode()) ){
                    continue;
                }
                Users user = checkModelParam(model,insertList,updateList,i,loginUserInfo,list,date);
            }
            if(insertList .size() >0){
                int temp = 0;
                while(temp < insertList.size()){
                    int index;
                    if(temp + 500 <= insertList.size()){
                        index = temp+500;
                    }else{
                        index = insertList.size();
                    }
                    usersMapper.insert(insertList.subList(temp,index));
                    temp = index;
                }
            }
            if(updateList .size() >0){
                for(Users s : updateList){
                    //遍历更新数据
                    usersMapper.updateById(s);
                }
            }
        }catch (BusinessException e){
            throw e;
        }catch (Exception e){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"信息导入失败,请稍后重试");
        }finally {
            executor.shutdown();
            redisTemplate.delete(Constants.RedisKeys.IMPORTING_USERS);
        }
    }
    private Users getUserByUserID(String userId, List<Users> list) {
        if(list ==null || list.size() ==0){
            return null;
        }
        for(Users s :list){
            if(StringUtils.equals(s.getIamId(),userId)){
                return s;
            }
        }
        return null;
    }
    private Users checkModelParam(UserImport model, List<Users> insertList, List<Users> updateList, int index, LoginUserInfo loginUserInfo, List<Users> list, Date date) {
            if(StringUtils.isBlank(model.getUserId())){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【编码】信息不完整,请检查表格内容!");
            }
            if(StringUtils.isBlank(model.getName())){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【姓名】信息不完整,请检查表格内容!");
            }
            if(StringUtils.isBlank(model.getAccountNo())){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【登录账号】信息不完整,请检查表格内容!");
            }
            if(StringUtils.isBlank(model.getPhone())){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【手机号】信息不完整,请检查表格内容!");
            }
            Users users = getUserByUserID(model.getUserId(),list);
            if(users == null){
                users = new Users();
                users.setCreator(loginUserInfo.getId());
                users.setCreateDate(date);
                initUsersInfo(users,model,date,loginUserInfo);
                insertList.add(users);
            }else {
                initUsersInfo(users,model,date,loginUserInfo);
                updateList.add(users);
            }
            return  users;
        }
    private void initUsersInfo(Users users, UserImport model,Date date,LoginUserInfo loginUserInfo ){
        users.setEditor(loginUserInfo.getId());
        users.setEditDate(date);
        users.setName(model.getName());
        users.setIamUsername(model.getAccountNo());
        users.setPhone(model.getPhone());
        users.setStatus(model.getStatus());
        users.setEmail(model.getEmail());
        users.setIamId(model.getUserId());
        users.setCode(model.getCode());
        users.setSex(model.getSex());
        users.setStatus(model.getStatus());
        users.setIsdeleted(Constants.ZERO);
        users.setRoleIds("");
        users.setRoleNames("");
        users.setRoleCodes("");
        users.setUserTypes("");
        users.setIamOrgId("");
        getDepartidByParam(users,model.getOrgIds());
        setRolesInfo(users,model);
        getUserTypesByParam(users,model.getTypeCodes());
    }
    private String getUserTypesByParam(Users users,String typeCodes) {
        if( typeCodes !=null){
            String[] codes =typeCodes.split(",");
            for(String t : codes){
                if(StringUtils.isBlank(users.getUserTypes())){
                    users.setUserTypes("");
                }
                users.setUserTypes(users.getUserTypes()+"["+t+"];");
            }
        }
        return  users.getUserTypes();
    }
    private void setRolesInfo(Users users, UserImport model) {
        if( model.getRoleCodes() !=null){
            String[] codes = model.getRoleCodes().split(",");
            for(String t : codes){
                if(StringUtils.isBlank(users.getRoleCodes())){
                    users.setRoleCodes("");
                }
                users.setRoleCodes(users.getRoleCodes()+"["+t+"];");
            }
        }
        if( model.getRoleIds() !=null){
            String[] codes = model.getRoleIds().split(",");
            for(String t : codes){
                if(StringUtils.isBlank(users.getRoleIds())){
                    users.setRoleIds("");
                }
                users.setRoleIds(users.getRoleIds()+"["+t+"];");
            }
        }
        if( model.getRoleNames() !=null){
            String[] codes = model.getRoleNames().split(",");
            for(String t : codes){
                if(StringUtils.isBlank(users.getRoleNames())){
                    users.setRoleNames("");
                }
                users.setRoleNames(users.getRoleNames()+"["+t+"];");
            }
        }
    }
    private Shop getDepartidByParam(Users users , String orgIds) {
        if( orgIds ==null){
          return null;
        }
        String[] orgArray = orgIds.split(",");
        if( orgArray !=null && orgArray.length>0){
            for(String t : orgArray){
                Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda()
                        .eq(Shop::getOrgId,t)
                        .last("limit 1"));
                if(shop!=null) {
                    users.setIamOrgId(t);
                    users.setDepartmentId(shop.getId());
                    return  shop;
                }
            }
        }
        users.setIamOrgId(orgIds+"--尚未同步到组织");
        return null;
    }
}