国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

024-從零搭建微服務(wù)-系統(tǒng)服務(wù)(六)

這篇具有很好參考價值的文章主要介紹了024-從零搭建微服務(wù)-系統(tǒng)服務(wù)(六)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

寫在最前

如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。

源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning

源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui

文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis

本節(jié)概要

mingyue-ui 目前與后端交互只有登錄登出接口,本節(jié)從用戶入手,完成用戶前后端交互增刪改查

分頁查詢用戶

分頁查詢通用類

@Data
@Schema(description = "分頁查詢通用類")
public class PageCommon implements Serializable {

	private static final long serialVersionUID = 1L;

	@Schema(description = "分頁大小")
	private Integer pageSize;

	@Schema(description = "當(dāng)前頁數(shù)")
	private Integer pageNum;

	@Schema(description = "排序列")
	private String orderByColumn;

	@Schema(description = "排序的方向 desc 或者 asc")
	private String isAsc;

	/**
	 * 當(dāng)前記錄起始索引 默認(rèn)值
	 */
	public static final int DEFAULT_PAGE_NUM = 1;

	/**
	 * 每頁顯示記錄數(shù) 默認(rèn)值 默認(rèn)查全部
	 */
	public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;

	public <T> Page<T> build() {
		Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
		Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);
		if (pageNum <= 0) {
			pageNum = DEFAULT_PAGE_NUM;
		}
		Page<T> page = new Page<>(pageNum, pageSize);
		List<OrderItem> orderItems = buildOrderItem();
		if (CollUtil.isNotEmpty(orderItems)) {
			page.addOrder(orderItems);
		}
		return page;
	}

	/**
	 * 構(gòu)建排序
	 *
	 * 支持的用法如下: {isAsc:"asc",orderByColumn:"id"} order by id asc
	 * {isAsc:"asc",orderByColumn:"id,createTime"} order by id asc,create_time asc
	 * {isAsc:"desc",orderByColumn:"id,createTime"} order by id desc,create_time desc
	 * {isAsc:"asc,desc",orderByColumn:"id,createTime"} order by id asc,create_time desc
	 */
	private List<OrderItem> buildOrderItem() {
		if (StrUtil.isBlank(orderByColumn) || StrUtil.isBlank(isAsc)) {
			return null;
		}
		String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
		orderBy = StrUtil.toUnderlineCase(orderBy);

		String[] orderByArr = orderBy.split(StrUtil.COMMA);
		String[] isAscArr = isAsc.split(StrUtil.COMMA);
		if (isAscArr.length != 1 && isAscArr.length != orderByArr.length) {
			throw new ServiceException("排序參數(shù)有誤");
		}

		List<OrderItem> list = new ArrayList<>();
		// 每個字段各自排序
		for (int i = 0; i < orderByArr.length; i++) {
			String orderByStr = orderByArr[i];
			String isAscStr = isAscArr.length == 1 ? isAscArr[0] : isAscArr[i];
			if ("asc".equals(isAscStr)) {
				list.add(OrderItem.asc(orderByStr));
			}
			else if ("desc".equals(isAscStr)) {
				list.add(OrderItem.desc(orderByStr));
			}
			else {
				throw new ServiceException("排序參數(shù)有誤");
			}
		}

		return list;
	}

}

接口層

@GetMapping("list")
@SaCheckPermission("system:user:list")
@Operation(summary = "獲取所有用戶信息")
public R<IPage<SysUserVo>> getSysUsers(PageCommon page, UserQueryDto dto) {
  return R.ok(sysUserService.getSysUsers(page, dto));
}

邏輯層

@Override
public IPage<SysUserVo> getSysUsers(PageCommon page, UserQueryDto dto) {
  return sysUserMapper.getUserVosPage(page.build(), dto);
}

數(shù)據(jù)層

<select id="getUserVosPage" resultType="com.csp.mingyue.system.api.vo.SysUserVo">
      SELECT su.*,sr.role_name, sr.role_code
      FROM sys_user su
      LEFT JOIN sys_user_role sur ON sur.user_id = su.user_id
      LEFT JOIN sys_role sr ON sur.role_id = sr.role_id
      <where>
          su.is_deleted = '0'
          <if test="query.username != null and query.username != ''">
              <bind name="usernameLike" value="'%' + query.username + '%'" />
              and su.username LIKE #{usernameLike}
          </if>
      </where>
      ORDER BY su.create_time DESC
  </select>

接口測試

非排序入?yún)?/p>

curl -X 'GET' \
  'http://mingyue-gateway:9100/system/sysUser/list?pageSize=10&pageNum=1&username=' \
  -H 'accept: */*' \
  -H 'Authorization: vhiqUYS3NtT5zpvyzwudffAhyu3vswAV'

排序入?yún)?/p>

curl -X 'GET' \
  'http://mingyue-gateway:9100/system/sysUser/list?pageSize=10&pageNum=2&orderByColumn=userId&isAsc=desc&username=' \
  -H 'accept: */*' \
  -H 'Authorization: vhiqUYS3NtT5zpvyzwudffAhyu3vswAV'

添加或編輯用戶

接口層

@PostMapping("addOrEdit")
@Operation(summary = "添加或編輯用戶")
public R<Boolean> addOrEdit(@Valid @RequestBody UserAddOrEditDto dto) {
  return R.ok(sysUserService.addOrEdit(dto));
}

邏輯層

@Override
@Transactional(rollbackFor = Exception.class)
public boolean addOrEdit(UserAddOrEditDto dto) {
  SysUser sysUser = BeanUtil.copyProperties(dto, SysUser.class);

  // 添加用戶
  if (Objects.isNull(sysUser.getUserId())) {
    // 密碼加密
    sysUser.setPassword(BCrypt.hashpw(sysUser.getPassword(), userPasswordProperties.getSalt()));
  }

  boolean flag = this.saveOrUpdate(sysUser);
  if (!flag) {
    throw new UserException("用戶信息保存異常");
  }

  // 保存角色關(guān)系
  flag = sysRoleService.addUserRole(sysUser.getUserId(), dto.getRoleCode());
  if (!flag) {
    throw new UserException("用戶角色信息保存異常");
  }

  return true;
}

刪除用戶

接口層

@DeleteMapping("{userId}")
@Operation(summary = "刪除用戶", parameters = { @Parameter(name = "userId", description = "用戶ID", required = true) })
public R<Boolean> delUser(@PathVariable Long userId) {
  return R.ok(sysUserService.delUser(userId));
}

邏輯層

@Override
public boolean delUser(Long userId) {
  return sysUserMapper.deleteByIdLogic(userId) > 0;
}

數(shù)據(jù)層

<delete id="deleteByIdLogic">
    UPDATE sys_user su SET su.is_deleted = '1' WHERE su.user_id = #{userId}
</delete>

mingyue-ui 接口交互

接口定義

list: (page: object) => {
    return request({
        url: '/api/system/sysUser/list',
        method: 'get',
        params: page
    });
},
addOrEdit: (data: object) => {
    return request({
        url: '/api/system/sysUser/addOrEdit',
        method: 'post',
        data: data
    });
},
del: (userId: number) => {
    return request({
        url: '/api/system/sysUser/' + userId,
        method: 'delete'
    });
}

分頁查詢

src/views/system/user/index.vue

const getTableData = async () => {
  state.tableData.loading = true;

  const res = await getUserList();
  state.tableData.data = res.data.records;
  state.tableData.total = res.data.total;

  state.tableData.loading = false;
};

添加或編輯用戶

src/views/system/user/dialog.vue

const onSubmit = () => {
  userApi().addOrEdit(state.ruleForm).then(res => {
    if (res.data) {
      closeDialog();
      emit('refresh');
      state.dialog.type === 'add' ? ElMessage.success('添加成功') : ElMessage.success('修改成功');
    } else {
      state.dialog.type === 'add' ? ElMessage.error('添加失敗') : ElMessage.error('修改失敗');
    }
  })
};

刪除用戶

src/views/system/user/index.vue

const onRowDel = (row: RowUserType) => {
	ElMessageBox.confirm(`此操作將永久刪除賬戶名稱:“${row.username}”,是否繼續(xù)?`, '提示', {
		confirmButtonText: '確認(rèn)',
		cancelButtonText: '取消',
		type: 'warning',
	})
		.then(() => {
      userApi().del(row.userId).then(() => {
        getTableData();
        ElMessage.success('刪除成功');
      });
		})
		.catch(() => {});
};

小結(jié)

用戶管理已經(jīng)可以交互接口完成真實的增刪改查了。

目前 mingyue 已經(jīng)包含了 統(tǒng)一網(wǎng)關(guān)服務(wù)統(tǒng)一認(rèn)證服務(wù)、統(tǒng)一系統(tǒng)服務(wù)、統(tǒng)一推送服務(wù),距離目標(biāo)還差

統(tǒng)一文件服務(wù)、統(tǒng)一定時服務(wù)統(tǒng)一搜索服務(wù) 等等。接下來搞一搞 統(tǒng)一文件服務(wù) 吧!

本人后端一枚,前端粗通,等后續(xù)后端服務(wù)基本完成后,再去抽時間完善前端代碼哈~~ 見諒《 - 。- 》文章來源地址http://www.zghlxwxcb.cn/news/detail-698961.html

到了這里,關(guān)于024-從零搭建微服務(wù)-系統(tǒng)服務(wù)(六)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 從零開始:如何使用Docker構(gòu)建微服務(wù)架構(gòu)

    使用 Docker 構(gòu)建微服務(wù)架構(gòu)是一種流行的方法,因為 Docker 提供了輕量級的容器化技術(shù),使得每個微服務(wù)可以在隔離的環(huán)境中獨(dú)立運(yùn)行。從零開始構(gòu)建這樣的架構(gòu)涉及到多個步驟,包括理解微服務(wù)架構(gòu)的基本概念、安裝 Docker、創(chuàng)建 Docker 容器和鏡像、配置網(wǎng)絡(luò),以及部署和管理

    2024年04月14日
    瀏覽(28)
  • 028-從零搭建微服務(wù)-搜索服務(wù)(二)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 更多用法可以參考 E

    2024年02月07日
    瀏覽(15)
  • 023-從零搭建微服務(wù)-推送服務(wù)(三)

    023-從零搭建微服務(wù)-推送服務(wù)(三)

    原【短信服務(wù)】更名【推送服務(wù)】 如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springc

    2024年02月10日
    瀏覽(20)
  • 027-從零搭建微服務(wù)-搜索服務(wù)(一)

    027-從零搭建微服務(wù)-搜索服務(wù)(一)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis Docker 安裝 ELK 7.17.2 h

    2024年02月07日
    瀏覽(13)
  • 022-從零搭建微服務(wù)-短信服務(wù)(二)

    022-從零搭建微服務(wù)-短信服務(wù)(二)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 需要注冊一個阿里云賬

    2024年02月11日
    瀏覽(11)
  • 021-從零搭建微服務(wù)-短信服務(wù)(一)

    021-從零搭建微服務(wù)-短信服務(wù)(一)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 短信服務(wù)(Short Messa

    2024年02月11日
    瀏覽(46)
  • 從零搭建微服務(wù)-認(rèn)證中心(二)

    從零搭建微服務(wù)-認(rèn)證中心(二)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis Idea 創(chuàng)建 maven 項目這兒

    2024年02月06日
    瀏覽(22)
  • 從零開始的Spring Cloud Gateway指南:構(gòu)建強(qiáng)大微服務(wù)架構(gòu)

    從零開始的Spring Cloud Gateway指南:構(gòu)建強(qiáng)大微服務(wù)架構(gòu)

    微服務(wù)架構(gòu)的興起已經(jīng)改變了軟件開發(fā)的面貌,使得開發(fā)者能夠更靈活地構(gòu)建、部署和維護(hù)應(yīng)用程序。而在這個微服務(wù)的時代,強(qiáng)大而靈活的網(wǎng)關(guān)是確保微服務(wù)之間通信順暢的關(guān)鍵之一。在本文中,我們將深入研究Spring Cloud Gateway,一款開源的、基于Spring Framework的微服務(wù)網(wǎng)關(guān)

    2024年02月02日
    瀏覽(93)
  • 019-從零搭建微服務(wù)-認(rèn)證中心(八)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 我們現(xiàn)在已經(jīng)可以通過

    2024年02月13日
    瀏覽(57)
  • 029-從零搭建微服務(wù)-消息隊列(一)

    029-從零搭建微服務(wù)-消息隊列(一)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):mingyue-springcloud-learning: ?? 基于 Spring Boot、Spring Cloud Alibaba 的分布式微服務(wù)架構(gòu)基礎(chǔ)服務(wù)中心?? 給出微服務(wù)的一些搭建建議 源碼地址(前端):mingyue-springcloud-ui: ?? 基于

    2024年02月07日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包