当前位置: 首页 > 编程日记 > 正文

Java项目:(小程序)全套商城系统(spring+spring mvc+mybatis+layui+微信小程)

源码获取:博客首页 "资源" 里下载!

一、项目简述

本系统功能包括: 商品模块: 商品添加、规格设置,商品上下架等 订单模块: 下单、购物车、支付,发货、收货、评 退款等 营销模块: 积分、优惠券、分销、砍价、拼团、秒 多门店等 微信模块: 自定义菜单、自动回复、微信授权、图文 管理、模板消息推送 五:配置模块:各种配置 六:用户模块:登陆、注册、会员卡、充值等 七:其他等

二、项目运行

环境配置: 1.1 springframework4.3.7.RELEASE 1.2 mybatis3.1.0s MyBatis-Plus 3.1.0 1.3 shirol.3.2 1.4 servlet3.1.0 1.5 druid1.0.28 1.6 slf4j1.7.19 1.7 fastjson1.2.30 1.8 poi3.15 1.9 velocityl .7 1.10 quartz2.2.3 1.11 mysql5.1.39 1.12 swagger2.4 1.13 j2cache2.3.22-release 1.14 weixin-java-mp3.2.0 1.15 MybatisPlus3.1.0 1.16 lombok等等

项目技术

2.1 Vue2.5.1

2.2 iview

2.3 layer3.0.3

2.4 jquery2.2.4

2.5 bootstraps.3.7等等。

管理员角色控制层:

@RestController
@RequestMapping("/admin/role")
@Validated
public class AdminRoleController {private static final Logger logger = LoggerFactory.getLogger(AdminRoleController.class);@Autowiredprivate DtsRoleService roleService;@Autowiredprivate DtsPermissionService permissionService;@RequiresPermissions("admin:role:list")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色查询")@GetMapping("/list")public Object list(String name, @RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer limit,@Sort @RequestParam(defaultValue = "add_time") String sort,@Order @RequestParam(defaultValue = "desc") String order) {logger.info("【请求开始】系统管理->角色管理->角色查询,请求参数,name:{},page:{}", name, page);List<DtsRole> roleList = roleService.querySelective(name, page, limit, sort, order);long total = PageInfo.of(roleList).getTotal();Map<String, Object> data = new HashMap<>();data.put("total", total);data.put("items", roleList);logger.info("【请求结束】系统管理->角色管理->角色查询,响应结果:{}", JSONObject.toJSONString(data));return ResponseUtil.ok(data);}@GetMapping("/options")public Object options() {List<DtsRole> roleList = roleService.queryAll();logger.info("【请求开始】系统管理->角色管理->查询所有角色");List<Map<String, Object>> options = new ArrayList<>(roleList.size());for (DtsRole role : roleList) {Map<String, Object> option = new HashMap<>(2);option.put("value", role.getId());option.put("label", role.getName());options.add(option);}logger.info("【请求结束】系统管理->角色管理->查询所有角色,响应结果:{}", JSONObject.toJSONString(options));return ResponseUtil.ok(options);}@RequiresPermissions("admin:role:read")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色详情")@GetMapping("/read")public Object read(@NotNull Integer id) {logger.info("【请求开始】系统管理->角色管理->角色详情,请求参数,id:{}", id);DtsRole role = roleService.findById(id);logger.info("【请求结束】系统管理->角色管理->角色详情,响应结果:{}", JSONObject.toJSONString(role));return ResponseUtil.ok(role);}private Object validate(DtsRole role) {String name = role.getName();if (StringUtils.isEmpty(name)) {return ResponseUtil.badArgument();}return null;}@RequiresPermissions("admin:role:create")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色添加")@PostMapping("/create")public Object create(@RequestBody DtsRole role) {logger.info("【请求开始】系统管理->角色管理->角色添加,请求参数:{}", JSONObject.toJSONString(role));Object error = validate(role);if (error != null) {return error;}if (roleService.checkExist(role.getName())) {logger.info("系统管理->角色管理->角色添加错误:{}", ROLE_NAME_EXIST.desc());return AdminResponseUtil.fail(ROLE_NAME_EXIST);}roleService.add(role);logger.info("【请求结束】系统管理->角色管理->角色添加,响应结果:{}", JSONObject.toJSONString(role));return ResponseUtil.ok(role);}@RequiresPermissions("admin:role:update")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色编辑")@PostMapping("/update")public Object update(@RequestBody DtsRole role) {logger.info("【请求开始】系统管理->角色管理->角色编辑,请求参数:{}", JSONObject.toJSONString(role));Object error = validate(role);if (error != null) {return error;}roleService.updateById(role);logger.info("【请求结束】系统管理->角色管理->角色编辑,响应结果:{}", "成功!");return ResponseUtil.ok();}@RequiresPermissions("admin:role:delete")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "角色删除")@PostMapping("/delete")public Object delete(@RequestBody DtsRole role) {logger.info("【请求开始】系统管理->角色管理->角色删除,请求参数,id:{}", JSONObject.toJSONString(role));Integer id = role.getId();if (id == null) {return ResponseUtil.badArgument();}roleService.deleteById(id);logger.info("【请求结束】系统管理->角色管理->角色删除,响应结果:{}", "成功!");return ResponseUtil.ok();}@Autowiredprivate ApplicationContext context;private List<PermVo> systemPermissions = null;private Set<String> systemPermissionsString = null;private List<PermVo> getSystemPermissions() {final String basicPackage = "com.qiguliuxing.dts.admin";if (systemPermissions == null) {List<Permission> permissions = PermissionUtil.listPermission(context, basicPackage);systemPermissions = PermissionUtil.listPermVo(permissions);systemPermissionsString = PermissionUtil.listPermissionString(permissions);}return systemPermissions;}private Set<String> getAssignedPermissions(Integer roleId) {// 这里需要注意的是,如果存在超级权限*,那么这里需要转化成当前所有系统权限。// 之所以这么做,是因为前端不能识别超级权限,所以这里需要转换一下。Set<String> assignedPermissions = null;if (permissionService.checkSuperPermission(roleId)) {getSystemPermissions();assignedPermissions = systemPermissionsString;} else {assignedPermissions = permissionService.queryByRoleId(roleId);}return assignedPermissions;}/*** 管理员的权限情况** @return 系统所有权限列表和管理员已分配权限*/@RequiresPermissions("admin:role:permission:get")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "权限详情")@GetMapping("/permissions")public Object getPermissions(Integer roleId) {logger.info("【请求开始】系统管理->角色管理->权限详情,请求参数,roleId:{}", roleId);List<PermVo> systemPermissions = getSystemPermissions();Set<String> assignedPermissions = getAssignedPermissions(roleId);Map<String, Object> data = new HashMap<>();data.put("systemPermissions", systemPermissions);data.put("assignedPermissions", assignedPermissions);logger.info("【请求结束】系统管理->角色管理->权限详情,响应结果:{}", JSONObject.toJSONString(data));return ResponseUtil.ok(data);}/*** 更新管理员的权限** @param body* @return*/@RequiresPermissions("admin:role:permission:update")@RequiresPermissionsDesc(menu = { "系统管理", "角色管理" }, button = "权限变更")@PostMapping("/permissions")public Object updatePermissions(@RequestBody String body) {logger.info("【请求开始】系统管理->角色管理->权限变更,请求参数,body:{}", body);Integer roleId = JacksonUtil.parseInteger(body, "roleId");List<String> permissions = JacksonUtil.parseStringList(body, "permissions");if (roleId == null || permissions == null) {return ResponseUtil.badArgument();}// 如果修改的角色是超级权限,则拒绝修改。if (permissionService.checkSuperPermission(roleId)) {logger.error("系统管理->角色管理->权限变更 错误:{}", AdminResponseCode.ROLE_SUPER_SUPERMISSION.desc());return AdminResponseUtil.fail(AdminResponseCode.ROLE_SUPER_SUPERMISSION);}// 先删除旧的权限,再更新新的权限permissionService.deleteByRoleId(roleId);for (String permission : permissions) {DtsPermission DtsPermission = new DtsPermission();DtsPermission.setRoleId(roleId);DtsPermission.setPermission(permission);permissionService.add(DtsPermission);}logger.info("【请求结束】系统管理->角色管理->权限变更,响应结果:{}", "成功!");return ResponseUtil.ok();}}

管理员用户控制层:

@RestController
@RequestMapping("/admin/user")
@Validated
public class AdminUserController {private static final Logger logger = LoggerFactory.getLogger(AdminUserController.class);@Autowiredprivate DtsUserService userService;@Autowiredprivate QCodeService qCodeService;@RequiresPermissions("admin:user:list")@RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "查询")@GetMapping("/list")public Object list(String username, String mobile, @RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer limit,@Sort @RequestParam(defaultValue = "add_time") String sort,@Order @RequestParam(defaultValue = "desc") String order) {logger.info("【请求开始】用户管理->会员管理->查询,请求参数,username:{},code:{},page:{}", username, mobile, page);List<DtsUser> userList = userService.querySelective(username, mobile, page, limit, sort, order);long total = PageInfo.of(userList).getTotal();Map<String, Object> data = new HashMap<>();data.put("total", total);data.put("items", userList);logger.info("【请求结束】用户管理->会员管理->查询:响应结果:{}", JSONObject.toJSONString(data));return ResponseUtil.ok(data);}/*** 订单详情** @param id* @return*/@RequiresPermissions("admin:user:read")@RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "代理详情")@GetMapping("/detailApprove")public Object detailApprove(@NotNull Integer id) {logger.info("【请求开始】用户管理->会员管理->代理详情,请求参数:id:{}", id);DtsUserAccount dbAccount = userService.detailApproveByUserId(id);if (dbAccount == null) {logger.error("用户管理->会员管理->代理详情 错误:userID:{},{}",id,"代理账号信息不存在");ResponseUtil.badArgumentValue();}logger.info("【请求结束】用户管理->会员管理->代理详情:响应结果:{}", JSONObject.toJSONString(dbAccount));return ResponseUtil.ok(dbAccount);}@RequiresPermissions("admin:user:approveAgency")@RequiresPermissionsDesc(menu = { "用户管理", "会员管理" }, button = "代理审批")@PostMapping("/approveAgency")public Object approveAgency(@RequestBody String body) {logger.info("【请求开始】用户管理->会员管理->代理审批,请求参数:{}",body);Integer userId = JacksonUtil.parseInteger(body, "userId");Integer settlementRate = JacksonUtil.parseInteger(body, "settlementRate");if (userId == null || settlementRate == null || settlementRate.intValue() <= 0 ){return ResponseUtil.badArgument();}try {/** 生成代理用户独有分享的二维码需要小程序已经上线,所以未上线小程序这里调用会异常* 建议通过后台参数控制,因为定制用户对这里的特殊性要求,本程序暂不做调整*/String shareUrl = qCodeService.createShareUserImage(userId);userService.approveAgency(userId,settlementRate,shareUrl);}catch (Exception e) {logger.error("用户管理->会员管理->代理审批 出错:{}",e.getMessage());e.printStackTrace();}logger.info("【请求结束】用户管理->会员管理->代理审批:响应结果:{}", "成功!");return ResponseUtil.ok();}}

管理员订单管理层:

@RestController
@RequestMapping("/admin/order")
@Validated
public class AdminOrderController {private static final Logger logger = LoggerFactory.getLogger(AdminOrderController.class);@Autowiredprivate AdminOrderService adminOrderService;/*** 查询订单** @param userId* @param orderSn* @param orderStatusArray* @param page* @param limit* @param sort* @param order* @return*/@RequiresPermissions("admin:order:list")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "查询")@GetMapping("/list")public Object list(Integer userId, String orderSn, @RequestParam(required = false) List<Short> orderStatusArray,@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit,@Sort @RequestParam(defaultValue = "add_time") String sort,@Order @RequestParam(defaultValue = "desc") String order) {logger.info("【请求开始】商场管理->订单管理->查询,请求参数:userId:{},orderSn:{},page:{}", userId, orderSn, page);return adminOrderService.list(userId, orderSn, orderStatusArray, page, limit, sort, order);}/*** 订单详情** @param id* @return*/@RequiresPermissions("admin:order:read")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "详情")@GetMapping("/detail")public Object detail(@NotNull Integer id) {logger.info("【请求开始】商场管理->订单管理->详情,请求参数:id:{}", id);return adminOrderService.detail(id);}/*** 订单退款** @param body 订单信息,{ orderId:xxx }* @return 订单退款操作结果*/@RequiresPermissions("admin:order:refund")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "订单退款")@PostMapping("/refund")public Object refund(@RequestBody String body) {logger.info("【请求开始】商场管理->订单管理->订单退款,请求参数,body:{}", body);return adminOrderService.refund(body);}/*** 发货** @param body 订单信息,{ orderId:xxx, shipSn: xxx, shipChannel: xxx }* @return 订单操作结果*/@RequiresPermissions("admin:order:ship")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "订单发货")@PostMapping("/ship")public Object ship(@RequestBody String body) {logger.info("【请求开始】商场管理->订单管理->订单发货,请求参数,body:{}", body);return adminOrderService.ship(body);}/*** 回复订单商品** @param body 订单信息,{ orderId:xxx }* @return 订单操作结果*/@RequiresPermissions("admin:order:reply")@RequiresPermissionsDesc(menu = { "商场管理", "订单管理" }, button = "订单商品回复")@PostMapping("/reply")public Object reply(@RequestBody String body) {logger.info("【请求开始】商场管理->订单管理->订单商品回复,请求参数,body:{}", body);return adminOrderService.reply(body);}}

 源码获取:博客首页 "资源" 里下载!

相关文章:

【转】[退役]纪念我的ACM——headacher@XDU

转自&#xff1a;http://hi.baidu.com/headacher/item/5a2ce1d50609091b20e25022 退役了&#xff0c;是时候总结一下我ACM的生涯了。虽然很舍不得&#xff0c;但这段回忆很值得纪念。ACM生涯虽然结束&#xff0c;但是新生活总要继续&#xff0c;还有很多东西需要我去学习&#…

VMware扩大硬盘后修改Linux逻辑卷大小

一、背景随着业务的不断成熟&#xff0c;数据库积累的数据也越来越多了。前些天发现服务器的磁盘将要满了。因此向虚拟化管理员申请增加磁盘空间。由于这个系统是建立在威睿的vSphere平台上的&#xff0c;因此虚拟化管理员只简单地通过 VMware vSphere Client 扩大了磁盘空间&a…

axios与ajax区别

1.jQuery ajax $.ajax({ type: POST, url: url, data: data, dataType: dataType, success: function () {}, error: function () {}});优缺点&#xff1a; 本身是针对MVC的编程,不符合现在前端MVVM的浪潮基于原生的XHR开发&#xff0c;XHR本身的架构不清晰&#xff0c;已经有…

单机 “5千万以上“ 工业级 LRU cache 实现

文章目录前言工业级 LRU Cache1. 基本架构2. 基本操作2.1 insert 操作2.2 高并发下 insert 的一致性/性能 保证2.3 Lookup操作2.4 shard 对 cache Lookup 性能的影响2.4 Erase 操作2.5 内存维护3. 优化前言 近期做了很多 Cache 优化相关的事情&#xff0c;因为对存储引擎较为熟…

Java项目:校园人力人事资源管理系统(java+Springboot+ssm+mysql+jsp+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 校园人力资源管理系统&#xff1a;学校部门管理&#xff0c;教室管理&#xff0c;学历信息管理&#xff0c;职务&#xff0c;教师职称&#xff0c;奖励&#xff0c;学历&#xff0c;社会关系&#xff0c;工作…

GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

在当前很多的GPS平台当中&#xff0c;有很多是基于asp.NETsiverlight开发的遗留项目&#xff0c;代码混乱而又难以维护&#xff0c;各种耦合和关联&#xff0c;要命的是界面也没见到比Javascript做的控件有多好看&#xff0c;随着需求的增多&#xff0c;平台已经臃肿不堪。 设计…

关于CSDN不给任何通知强制关闭我的6年博客,我深表痛心

关于CSDN不给任何通知强制关闭我的6年博客&#xff0c;我深表痛心。最近有很长一段时间没有去csdn博客了&#xff0c; 前几天去看的时候发现博客被封闭了。 我联系了管理员&#xff0c;但是没有得到任何回复。 我猜想&#xff0c;可能是不是我在博客文章里面加入 自己网站的网…

Vue 环境搭建(win10)

1.安装node node官网安装地址 推荐安装稳定版本&#xff08;LTS&#xff09;以及安装路径为系统盘&#xff08;C&#xff09; 查看node安装成功否 注释&#xff1a;以下命令使用 命令提示符&#xff08;管理员&#xff09;权限,win10 对user权限的限制了访问权限。node -v 查看…

Java项目:化妆品商城系统(java+Springboot+ssm+mysql+jsp+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统主要实现的功能有&#xff1a; 网上商城系统&#xff0c;前台后台管理&#xff0c;用户注册&#xff0c;登录&#xff0c;上架展示&#xff0c;分组展示&#xff0c;搜索&#xff0c;收…

python 绘图脚本系列简单记录

简单记录平时画图用到的python 便捷小脚本 1. 从单个文件输入 绘制坐标系图 #!/usr/bin/python # coding: utf-8 import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl import sysfile_name1 sys.argv[1] data_title sys.argv[2] print(file_name1…

iOS-c语言小练习01

// // main.c // C&#xff0d;变量的地址 // // Created by cgq on 15/4/9. // Copyright (c) 2015年 cgq. All rights reserved. // #include <stdio.h> //访问变量的地址 void test1() { char a A; int b 44; printf("a的值&#xff1a;%d\n",a); pri…

蓝桥杯 【基础练习】 十六进制转八进制

问题描述给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。输入格式输入的第一行为一个正整数n &#xff08;1<n<10&#xff09;。接下来n行&#xff0c;每行一个由0~9、大写字母A~F组成的字符串&#xff0c;表示要转换的十六进制正整数&#xff0c;每个十六进…

泛在网:泛在网

ylbtech-泛在网&#xff1a;泛在网泛在网络来源于拉丁语Ubiquitous&#xff0c;从字面上看就是广泛存在的&#xff0c;无所不在的网络。也就是人置身于无所不在的网络之中&#xff0c;实现人在任何时间、地点&#xff0c;使用任何网络与任何人与物的信息交换&#xff0c;基于个…

Mac 从Makefile 编译 Rocksdb 源码的一些注意事项

文章目录前言Makefile 编译流程1. 平台变量/环境变量的初始化。2. 编译需要的源码文件变量初始化。3. include 目录的设置。4. 编译的执行逻辑。问题记录1&#xff1a;可能的打包命令ar 失效问题5. 执行具体的编译指令问题记录2: jar 包编译前言 最近在Mac 本地编译Rocksdb 过…

Java项目:在线考试系统(单选,多选,判断,填空,简答题)(java+Springboot+ssm+mysql+html+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能&#xff1a; 学生信息 班级 专业 学号 姓名 在线考试 成绩查询 个人信息 密码修改 教师管理 教师编号 姓名 所教科目 题库管理 单选题 多选题 填空题 判断题&#xff0c;简答题&#xff08;人工…

看了极光推送技术原理的几点思考

看了极光推送技术原理的几点思考 分类&#xff1a; android2012-11-26 20:50 16586人阅读 评论(18) 收藏 举报目录(?)[] 移动互联网应用现状 因为手机平台本身、电量、网络流量的限制&#xff0c;移动互联网应用在设计上跟传统 PC 上的应用很大不一样&#xff0c;需要根据手机…

查询远程或本地计算机的登录账户

用下面这个函数能获取远程或本地电脑的当前登录用户&#xff0c;同时附加了它的计算机名&#xff0c;所以当你查询多台电脑时将知道结果从哪里来。function Get-LoggedOnUser {param([String[]]$ComputerName $env:COMPUTERNAME)$ComputerName | ForEach-Object {(quser /SERV…

LIS ZOJ - 4028

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode4028 memset超时 这题竟然是一个差分约束 好吧呢 对于每一个a[i], l < a[i] < r 那么设一个源点s 使 l < a[i] - s < r 是不是就能建边了 然后对于每一个f[i] 如果前面有一个相等的f[j] 则肯定 a[i…

存储引擎 K/V 分离下的index回写问题

前言 近期在做on nvme hash引擎相关的事情&#xff0c;对于非全序的数据集的存储需求&#xff0c;相比于我们传统的LSM或者B-tree的数据结构来说 能够减少很多维护全序上的计算/存储资源。当然我们要保证hash场景下的高写入能力&#xff0c;append-only 还是比较友好的选择。 …

经典贪心法:时间序列问题及其全局最优性证明

贪心算法是指在对问题求解时&#xff0c;总做出在当前看来是最好的选择。也就是说&#xff0c;不从整体上加以考虑&#xff0c;它所作出的仅仅是在某种意义上的局部最优解。一旦贪心算法求出了一个可行解&#xff0c;就要确定这个算法是否找到了最优解。为此&#xff0c;要么证…

Java项目:在线水果商城系统(java+JSP+Spring+SpringMVC +MyBatis+html+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a; 区分为管理员用户和普通用户&#xff0c;普通用户&#xff1a;用户注册登录&#xff0c;首页水果展示&#xff0c;商品分类展示&#xff0c;购物车添加&#xff0c;下单&…

曲苑杂坛--收缩数据库文件

很多人在删除大量数据后收缩数据库&#xff0c;却发现没法收缩到预期效果。 由于使用DBCC SHRINKFILE来收缩数据文件时&#xff0c;是针对数据区来收缩&#xff0c;因此可以先使用DBCC SHOWFILESTATS来查看文件中未使用的分区数(TotalExtents-UsedExtents)&#xff0c;如果删除…

python字典去重

今天实习的web大表哥说帮我看环境不过前提是要我帮他写个python合并列表的demo,大概思路就是利用zip库进行keys和values的遍历&#xff0c;然后在输出就行key1{name1:小明,name2:小红} key2{小明:[men,20],小红:[women,30]} for k,v in zip(key1.values(),key1.keys()):for i, …

关于 线程模型中经常使用的 __sync_fetch_and_add 原子操作的性能

最近从 kvell 这篇论文中看到一些单机存储引擎的优秀设计&#xff0c;底层存储硬件性能在不远的未来可能不再是主要的性能瓶颈&#xff0c;反而高并发下的CPU可能是软件性能的主要限制。像BPS/AEP/Optane-SSD 等Intel 推出的硬件存储栈已经能够在延时上接近DRAM的量级&#xff…

R 语言爬虫 之 cnblog博文爬取

Cnbolg Crawl a). 加载用到的R包 ##library packages needed in this case library(proto) library(gsubfn) ## Warning in doTryCatch(return(expr), name, parentenv, handler): 无法载入共享目标对象‘/Library/Frameworks/R.framework/Resources/modules//R_X11.so’&#…

Java项目:宿舍管理系统(java+jsp+SSM+Spring+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a;包括学生管理&#xff0c;班级管理&#xff0c;宿舍管理&#xff0c;人员信息维 护。维修登记&#xff0c;卫生管理&#xff0c;访客管理等等。 二、项目运行 环境配置&am…

项目管理5大过程组,42个过程一句话讲解

2019独角兽企业重金招聘Python工程师标准>>> 启动过程组&#xff1a;&#xff08;1&#xff09;制定项目章程&#xff1a;诞生项目&#xff0c;并为项目经理“正名”&#xff1b;&#xff08;2&#xff09;识别干系人&#xff1a;搞清楚谁与项目相关&#xff1b;规划…

Android Q 变更和新特性

安全和隐私变更 隐私保护是Android Q重要的主题之一&#xff0c;Android Q带来了一系列增强用户隐私保护的变更。 1 应用文件存储空间限制 应用访问限制是Android Q影响最大变更之一。在Android Q系统中&#xff0c;应用只可以通过路径读取自己应用沙箱内的文件&#xff0c;如果…

KVell 单机k/v引擎:用最少的CPU 来调度Nvme的极致性能

文章目录前言KVell背景业界引擎使用Nvme的问题CPU 会是 LSM-kv 存储的瓶颈CPU 也会是 Btree-kv 存储的瓶颈KVell 设计亮点 及 总体架构实现KVell 设计亮点1. Share nothing2. Do not sorted on disk, but keep indexes in memory3. Aim for fewer syscalls , not for sequentia…

android录像增加时间记录(源码里修改)

需要做一个功能&#xff0c;录像和播放时都显示录时的时间&#xff0c;参考文章链接找不到了&#xff0c;不好意思&#xff0c;这里记录一下&#xff0c;防止下次找不到了。另一篇关于源码录像的流程请参考 http://www.verydemo.com/demo_c131_i79000.html 在源码CameraSource.…