汽车服务管理系统 _od8kr

@TOC

springboot580汽车服务管理系统 _od8kr--论文

系统概述

该系统由个人管理员和员工管理,用户三部分组成。其中:用户进入系统首页可以实现首页,热销汽车,汽车配件,汽车资讯,后台管理,在线客服,个人中心等;员工管理可以对系统首页,个人中心,热销汽车管理,订单信息管理,汽车配件管理,配件订单管理,售后信息管理,潜在客户管理,系统管理等功能进行管理;管理员则是根据不同需求设置了不同功能,可以通过后台管理用户信息。

3.2 需求分析

需求分析,也称为软件需求分析、系统需求分析或需求分析工程,是指开发人员经过充分的研究和分析,准确地理解用户和项目在功能、性能、可靠性等方面的具体需求,并将用户的非正式需求表述转化为确定系统必须执行的需求的完整定义的过程[11]。

功能需求分析是系统设计的前提,它要求开发者和用户定义开发什么样的体系和系统需要什么样的功能。本文主要介绍了一种基于windows系统实现的汽车服务管理系统。该系统为用户找到汽车服务信息提供了更安全、更高效、更便捷的途径。本系统有三个角色:管理员和员工,用户,要求具备以下功能:

  1. 用户可以浏览主页了解汽车服务信息,可以查看首页,热销汽车,汽车配件,汽车资讯,后台管理,在线客服,个人中心等功能;

图3-1:用户用例图

  1. 管理员通过后台管理员界面,实现对系统首页,个人中心,用户管理,员工管理,部门信息管理,岗位信息管理,汽车品牌管理,热销汽车管理,订单信息管理,配件分类管理,汽车配件管理,配件订单管理,售后信息管理,潜在客户管理,系统管理等功能的操作;

图3-2:管理员用例图

  1. 员工管理通过后台管理界面,实现对系统首页,个人中心,热销汽车管理,订单信息管理,汽车配件管理,配件订单管理,售后信息管理,潜在客户管理,系统管理等功能的操作;

图3-3:员工管理用例图

3.3 可行性分析

可行性分析是指通过比较项目的主要内容和支撑条件,如市场需求、资源供应、环境影响、资金筹措情况、盈利能力等,预测项目建成后可能产生的资金、经济效益、社会和环境影响,为项目决策提供依据的综合性系统分析方法。可行性研究报告编制的质量直接影响着投资决策的成,而可行性研究报告编制程序又决定了可行性研究报告能否得到有效执行。因此,必须重视可行性研究工作,提高其编制水平。可行性分析应当具有预见性、公正性、可靠性和科学性[13]。

3.3.1 技术可行性分析

本系统是为了为用户寻找汽车服务提供更加安全、高效、便捷的方式,本系统需要运用到Java、MySQL、springboot、B/S结构等技术,这些技术在国内外已经非常成熟[14],在大学期间也有所涉及,相关的知识和工具在网络上也可以查到,再加上老师的指导,在技术上的难题可以得到解决。

3.3.2 经济可行性分析

该系统的主题是汽车服务管理系统的设计与实现。开发所需的软件资源是Eclipse。我们可以在它的网站上安装一个免费的版本,这对我们的开发和使用是足够好的。数据库就是MySQL数据库。是开源是免费的,服务器使用Tomcat服务器,浏览器使用日常IE浏览器,springboot框架是开源的。经过可行性评估,软件资源支出符合经济可行性[15]。硬件方面,配备齐全的笔记本电脑作为工具在经济上是可行的。

3.4流程设计

3.4.1程序流程图设计

非本系统的用户要想进行汽车服务就要注册本系统,登录时需要填写相应的资料,如有使用者,则会显示使用者名称已经存在,请再次键入使用者名称的提示框,若使用者不存在,则填写密码、确认密码等资料,并由系统判定密码与确认密码相符,确认无误后,填写使用者所填写的资料,即可进行登记。而且,为了保证系统的安全,只有在登录了本系统以后,才能进行汽车服务。该系统的工作流程见图3-4。

图3-4 程序流程图

3.4.2添加信息流程图设计

在添加信息的时候,会判断是哪类用户,并根据用户类型判断执行是否合法,合法者可以进行添加,不合法者则不能进行此操作[12]。管理员登录账号后可以对内容进行添加,拥有着最高的权限,用户权限次于管理员。添加信息流程图如图3-5所示:

图3-5系统添加流程图

3.4.3删除信息流程图设计

删除数据时与添加数据功能类似,删除数据具体流程如图3-6所示:

图3-6系统删除流程图

3.5 本章小结

汽车服务管理系统从市场、技术、经济、功能等方面分析了系统的功能需求,可以满足用户的汽车服务管理需求,帮助用户安全、高效地找到合适的汽车服务信息,因此有必要对其进行课题研究。

第4章 系统设计

系统设计是将被设计对象划分为单个模块进行构建,各个模块相互支持,相互制约,它们的组合是一个完整的系统。通过系统设计,可以最大限度地满足系统的预期目标,明确软件开发的目的。

4.1 系统基本结构设计

本次系统采用springboot框架集进行开发,springboot框架是一款企业界主流的软件开发框架,其简化了开发流程,大大缩减了软件开发所需的时间提高了软件的响应速度。系统总体结构图如图4-1所示。

图4-1 系统总体结构图

4.2 数据库设计

数据库结构设计的好坏直接影响到汽车服务管理系统的效率和实现的效果。本系统的数据库采用MySQL数据库,MySQL是一种开放源代码的关系型数据库管理系统,使用最常见的数据库管理语言SQL进行数据库管理。

4.2.1 数据库E-R图设计

E-R图也可称为实体-联系图,其可以清楚的显示实体与实体之间的关系,是描述概念模型的有效方式,通过各实体间的关系方便数据库结构的设计。以下是本系统主要的实体属性图如下所示。

汽车配件评论表实体如图4-2所示。

图4-2汽车配件评论表实体属性图

员工实体如图4-3所示。

图4-3员工实体属性图

售后信息实体如图4-4所示。

图4-4售后信息实体属性图

订单信息评价实体如图4-5所示。

图4-5订单信息实体属性图

用户实体如图4-6所示。

图4-6用户实体属性图

4.2.2 数据库表设计

数据表是用来保存多种数据的表,它是所有数据库的核心对象,且对于软件开发有着不可替代的作用。其相关数据表如下:

表4-1:汽车配件评论表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
refidbigint关联表id
useridbigint用户id
avatarurllongtext4294967295头像
nicknamevarchar200用户名
contentlongtext4294967295评论内容
replylongtext4294967295回复内容

表4-2:员工

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
yuangonggonghaovarchar200员工工号
mimavarchar200密码
yuangongxingmingvarchar200员工姓名
touxianglongtext4294967295头像
xingbievarchar200性别
bumenmingchengvarchar200部门名称
gangweimingchengvarchar200岗位名称
lianxifangshivarchar200联系方式
yuangongzhuangtaivarchar200员工状态
sfshvarchar200是否审核待审核
shhflongtext4294967295审核回复

表4-3:售后信息

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
shouhoubianhaovarchar200售后编号
yonghuzhanghaovarchar200用户账号
yonghuxingmingvarchar200用户姓名
lianxifangshivarchar200联系方式
kehudizhivarchar200客户地址
xiacibaoyangdate下次保养
yuangonggonghaovarchar200员工工号
yuangongxingmingvarchar200员工姓名

表4-4:订单信息

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
dingdanbianhaovarchar200订单编号
qichemingchengvarchar200汽车名称
qichetupianlongtext4294967295汽车图片
qichepinpaivarchar200汽车品牌
qichejiageint汽车价格
shuliangint数量
zongjineint总金额
weituodaigouvarchar200委托代购
yonghuzhanghaovarchar200用户账号
yonghuxingmingvarchar200用户姓名
lianxifangshivarchar200联系方式
goumaishijiandate购买时间
ispayvarchar200是否支付未支付

表4-5:用户

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
yonghuzhanghaovarchar200用户账号
mimavarchar200密码
yonghuxingmingvarchar200用户姓名
touxianglongtext4294967295头像
xingbievarchar200性别
lianxifangshivarchar200联系方式

表4-6:热销汽车

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
qichemingchengvarchar200汽车名称
qichetupianlongtext4294967295汽车图片
qichepinpaivarchar200汽车品牌
qichefenleivarchar200汽车分类
peizhivarchar200配置
zuoweivarchar200座位
qicheyansevarchar200汽车颜色
shangshinianfenvarchar200上市年份
qichejiageint汽车价格
shuliangint数量
canshupeizhilongtext4294967295参数配置
clicktimedatetime最近点击时间
clicknumint点击次数0

表4-7:配置文件

字段名称类型长度字段说明主键默认值
idbigint主键主键
namevarchar100配置参数名称
valuevarchar100配置参数值

表4-8:用户表

字段名称类型长度字段说明主键默认值
idbigint主键主键
usernamevarchar100用户名
passwordvarchar100密码
rolevarchar100角色管理员
addtimetimestamp新增时间CURRENT_TIMESTAMP

表4-9:汽车品牌

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
qichepinpaivarchar200汽车品牌

表4-10:部门信息

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
bumenbianhaovarchar200部门编号
bumenmingchengvarchar200部门名称
chuangjianshijiandate创建时间

表4-11:token表

字段名称类型长度字段说明主键默认值
idbigint主键主键
useridbigint用户id
usernamevarchar100用户名
tablenamevarchar100表名
rolevarchar100角色
tokenvarchar200密码
addtimetimestamp新增时间CURRENT_TIMESTAMP
expiratedtimetimestamp过期时间CURRENT_TIMESTAMP

表4-12:汽车配件

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
peijianbianhaovarchar200配件编号
peijianmingchengvarchar200配件名称
tupianlongtext4294967295图片
peijianfenleivarchar200配件分类
xinghaovarchar200型号
shiyongpinpaivarchar200适用品牌
shiyongchexivarchar200适用车系
peijianjiageint配件价格
shuliangint数量
peijianshuominglongtext4294967295配件说明
peijianxiangqinglongtext4294967295配件详情

表4-13:关于我们

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
titlevarchar200标题
subtitlevarchar200副标题
contentlongtext4294967295内容
picture1longtext4294967295图片1
picture2longtext4294967295图片2
picture3longtext4294967295图片3

表4-14:潜在客户

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
kehubianhaovarchar200客户编号
kehuxingmingvarchar200客户姓名
kehudianhuavarchar200客户电话
kehunianlingint客户年龄
yixiangchexingvarchar200意向车型
goucheyusuanvarchar200购车预算
yuangonggonghaovarchar200员工工号
yuangongxingmingvarchar200员工姓名
bumenmingchengvarchar200部门名称

表4-15:收藏表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
useridbigint用户id
refidbigint商品id
tablenamevarchar200表名
namevarchar200名称
picturelongtext4294967295图片
typevarchar200类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注)1
inteltypevarchar200推荐类型
remarkvarchar200备注

表4-16:配件分类

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
peijianfenleivarchar200配件分类

表4-17:配件订单

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
dingdanbianhaovarchar200订单编号
peijianmingchengvarchar200配件名称
tupianlongtext4294967295图片
peijianfenleivarchar200配件分类
peijianjiageint配件价格
shuliangint数量
hejijineint合计金额
yonghuzhanghaovarchar200用户账号
yonghuxingmingvarchar200用户姓名
lianxifangshivarchar200联系方式
ispayvarchar200是否支付未支付

表4-18:汽车资讯

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
titlevarchar200标题
introductionlongtext4294967295简介
picturelongtext4294967295图片
contentlongtext4294967295内容

表4-19:岗位信息

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
gangweibianhaovarchar200岗位编号
gangweimingchengvarchar200岗位名称
zhuangtaivarchar200状态

表4-20:热销汽车评论表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
refidbigint关联表id
useridbigint用户id
avatarurllongtext4294967295头像
nicknamevarchar200用户名
contentlongtext4294967295评论内容
replylongtext4294967295回复内容

4.3 本章小结

通过本章针对汽车服务管理系统功能的总体结构、E-R属性图和数据表的大概介绍,对在开发系统时所要涉及到的数据库进行简单设计,为下一章系统的实现做好铺垫。

第五章 系统实现

5.1系统功能实现

当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到汽车服务管理系统的导航条和。系统首页界面如图5-1所示:

图5-1 系统首页界面

系统注册:在系统注册页面输入用户注册信息进行注册操作;系统注册页面如图如图5-2所示:

图5-2系统注册页面

热销汽车:在热销汽车页面的输入栏中输入汽车名称,选择汽车分类和配置,汽车颜色进行查询;还可以进行收藏或立即购买操作;热销汽车页面如图5-3所示:

图5-3热销汽车详细页面

汽车配件:在汽车配件页面的输入栏中输入配件名称,型号,适用品牌和适用车系进行查询,还可以进行收藏和立即购买操作;汽车配件页面如图5-4所示:

图5-4汽车配件详细页面

个人中心:在个人中心页面通过填写个人详细信息进行信息更新操作,还可以对我的收藏进行详细操作;如图5-5所示:

图5-5个人中心界面

5.2管理员模块实现

管理员登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图5-6所示。

图5-6管理员登录界面

管理员进入主页面,主要功能包括对系统首页,个人中心,用户管理,员工管理,部门信息管理,岗位信息管理,汽车品牌管理,热销汽车管理,订单信息管理,配件分类管理,汽车配件管理,配件订单管理,售后信息管理,潜在客户管理,系统管理等进行操作。管理员主页面如图5-7所示:

图5-7 管理员主界面

管理员点击员工管理。在员工页面输入员工工号,员工姓名,部门名称,岗位名称和选择是否通过进行查询、新增或删除员工列表,并根据需要对员工详情信息进行详情、修改或删除操作;如图5-8所示:

图5-8员工管理界面

管理员点击部门信息管理。在部门信息页面输入部门编号和部门名称进行查询、新增或删除部门信息列表,并根据需要对部门详情信息进行详情、修改或删除操作;如图5-9所示:

图5-9部门信息管理界面

管理员点击岗位信息管理。在岗位信息页面输入岗位名称和状态进行查询、新增或删除岗位信息列表,并根据需要对岗位详情信息进行详情、修改或删除操作;如图5-10所示:

图5-10岗位信息管理界面

管理员点击汽车品牌管理。在汽车品牌页面输入汽车品牌进行查询,新增或删除汽车品牌列表,并根据需要对汽车品牌详情信息进行详情、修改或删除操作;如图5-11所示:

图5-11汽车品牌管理界面

5.3用户模块实现

用户进入系统可以对系统首页,个人中心,订单信息管理,配件信息管理,售后信息管理等功能进行操作。用户主页面如图5-12所示:

图5-12用户主界面

5.4员工模块实现

员工进入系统可以对系统首页,个人中心,热销汽车管理,订单信息管理,汽车配件管理,配件订单管理,售后信息管理,潜在客户管理,系统管理等功能进行操作。员工主页面如图5-13所示:

图5-13员工主界面

5.5本章小结

第五章主要内容是系统实现,首先实现了本系统中最重要的前台功能,其次分别实现了对管理员功能的管理和对用户,员工管理后台的管理,并对主要代码的编写,完成了系统全部功能设计。

YonghuController.java
package com.controller;import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;import com.entity.YonghuEntity;
import com.entity.view.YonghuView;import com.service.YonghuService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;/*** 用户* 后端接口* @author * @email * @date 2023-03-16 09:54:59*/
@RestController
@RequestMapping("/yonghu")
public class YonghuController {@Autowiredprivate YonghuService yonghuService;@Autowiredprivate TokenService tokenService;/*** 登录*/@IgnoreAuth@RequestMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", username));if(u==null || !u.getMima().equals(password)) {return R.error("账号或密码不正确");}String token = tokenService.generateToken(u.getId(), username,"yonghu",  "用户" );return R.ok().put("token", token);}/*** 注册*/@IgnoreAuth@RequestMapping("/register")public R register(@RequestBody YonghuEntity yonghu){//ValidatorUtils.validateEntity(yonghu);YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", yonghu.getYonghuzhanghao()));if(u!=null) {return R.error("注册用户已存在");}Long uId = new Date().getTime();yonghu.setId(uId);yonghuService.insert(yonghu);return R.ok();}/*** 退出*/@RequestMapping("/logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 获取用户的session用户信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id = (Long)request.getSession().getAttribute("userId");YonghuEntity u = yonghuService.selectById(id);return R.ok().put("data", u);}/*** 密码重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", username));if(u==null) {return R.error("账号不存在");}u.setMima("123456");yonghuService.updateById(u);return R.ok("密码已重置为:123456");}/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,YonghuEntity yonghu,HttpServletRequest request){EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,YonghuEntity yonghu, HttpServletRequest request){EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( YonghuEntity yonghu){EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu")); return R.ok().put("data", yonghuService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(YonghuEntity yonghu){EntityWrapper< YonghuEntity> ew = new EntityWrapper< YonghuEntity>();ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu")); YonghuView yonghuView =  yonghuService.selectView(ew);return R.ok("查询用户成功").put("data", yonghuView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){YonghuEntity yonghu = yonghuService.selectById(id);return R.ok().put("data", yonghu);}/*** 前端详情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){YonghuEntity yonghu = yonghuService.selectById(id);return R.ok().put("data", yonghu);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(yonghu);YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", yonghu.getYonghuzhanghao()));if(u!=null) {return R.error("用户已存在");}yonghu.setId(new Date().getTime());yonghuService.insert(yonghu);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(yonghu);YonghuEntity u = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuzhanghao", yonghu.getYonghuzhanghao()));if(u!=null) {return R.error("用户已存在");}yonghu.setId(new Date().getTime());yonghuService.insert(yonghu);return R.ok();}/*** 修改*/@RequestMapping("/update")@Transactionalpublic R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request){//ValidatorUtils.validateEntity(yonghu);yonghuService.updateById(yonghu);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){yonghuService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<YonghuEntity> wrapper = new EntityWrapper<YonghuEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}int count = yonghuService.selectCount(wrapper);return R.ok().put("count", count);}}
UsersController.java

package com.controller;import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UsersEntity;
import com.service.TokenService;
import com.service.UsersService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;/*** 登录相关*/
@RequestMapping("users")
@RestController
public class UsersController{@Autowiredprivate UsersService userService;@Autowiredprivate TokenService tokenService;/*** 登录*/@IgnoreAuth@PostMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));if(user==null || !user.getPassword().equals(password)) {return R.error("账号或密码不正确");}String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());return R.ok().put("token", token);}/*** 注册*/@IgnoreAuth@PostMapping(value = "/register")public R register(@RequestBody UsersEntity user){
//    	ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 密码重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));if(user==null) {return R.error("账号不存在");}user.setPassword("123456");userService.update(user,null);return R.ok("密码已重置为:123456");}/*** 列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,UsersEntity user){EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/list")public R list( UsersEntity user){EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();ew.allEq(MPUtil.allEQMapPre( user, "user")); return R.ok().put("data", userService.selectListView(ew));}/*** 信息*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") String id){UsersEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 获取用户的session用户信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id = (Long)request.getSession().getAttribute("userId");UsersEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 保存*/@PostMapping("/save")public R save(@RequestBody UsersEntity user){
//    	ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody UsersEntity user){
//        ValidatorUtils.validateEntity(user);UsersEntity u = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername()));if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {return R.error("用户名已存在。");}userService.updateById(user);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){userService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
}
YonghuServiceImpl.java
package com.service.impl;import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;import com.dao.YonghuDao;
import com.entity.YonghuEntity;
import com.service.YonghuService;
import com.entity.vo.YonghuVO;
import com.entity.view.YonghuView;@Service("yonghuService")
public class YonghuServiceImpl extends ServiceImpl<YonghuDao, YonghuEntity> implements YonghuService {@Overridepublic PageUtils queryPage(Map<String, Object> params) {Page<YonghuEntity> page = this.selectPage(new Query<YonghuEntity>(params).getPage(),new EntityWrapper<YonghuEntity>());return new PageUtils(page);}@Overridepublic PageUtils queryPage(Map<String, Object> params, Wrapper<YonghuEntity> wrapper) {Page<YonghuView> page =new Query<YonghuView>(params).getPage();page.setRecords(baseMapper.selectListView(page,wrapper));PageUtils pageUtil = new PageUtils(page);return pageUtil;}@Overridepublic List<YonghuVO> selectListVO(Wrapper<YonghuEntity> wrapper) {return baseMapper.selectListVO(wrapper);}@Overridepublic YonghuVO selectVO(Wrapper<YonghuEntity> wrapper) {return baseMapper.selectVO(wrapper);}@Overridepublic List<YonghuView> selectListView(Wrapper<YonghuEntity> wrapper) {return baseMapper.selectListView(wrapper);}@Overridepublic YonghuView selectView(Wrapper<YonghuEntity> wrapper) {return baseMapper.selectView(wrapper);}}
add-or-update.vue
<template><div class="addEdit-block" :style='{"padding":"30px 0 0"}' style="width: 100%;"><el-form:style='{"width":"86%","padding":"30px","boxShadow":"0px 4px 10px 0px rgba(0,0,0,0.3020)","margin":"0 auto","borderRadius":"6px","background":"rgba(255,255,255,.8)"}'class="add-update-preview"ref="ruleForm":model="ruleForm":rules="rules"label-width="140px"><template ><el-form-item :style='{"width":"100%","margin":"0 0 20px","display":"inline-block"}' class="input" v-if="type!='info'"  label="配件分类" prop="peijianfenlei"><el-input v-model="ruleForm.peijianfenlei" placeholder="配件分类" clearable  :readonly="ro.peijianfenlei"></el-input></el-form-item><el-form-item :style='{"width":"100%","margin":"0 0 20px","display":"inline-block"}' v-else class="input" label="配件分类" prop="peijianfenlei"><el-input v-model="ruleForm.peijianfenlei" placeholder="配件分类" readonly></el-input></el-form-item></template><el-form-item :style='{"padding":"0","margin":"0"}' class="btn"><el-button :style='{"border":"0","cursor":"pointer","padding":"0","margin":"0 20px 0 0","outline":"none","color":"rgba(255, 255, 255, 1)","borderRadius":"4px","background":"rgba(135, 154, 108, 1)","width":"128px","lineHeight":"40px","fontSize":"14px","height":"40px"}'  v-if="type!='info'" type="primary" class="btn-success" @click="onSubmit">提交</el-button><el-button :style='{"border":"1px solid rgba(135, 154, 108, 1)","cursor":"pointer","padding":"0","margin":"0","outline":"none","color":"rgba(135, 154, 108, 1)","borderRadius":"4px","background":"rgba(255, 255, 255, 1)","width":"128px","lineHeight":"40px","fontSize":"14px","height":"40px"}' v-if="type!='info'" class="btn-close" @click="back()">取消</el-button><el-button :style='{"border":"1px solid rgba(135, 154, 108, 1)","cursor":"pointer","padding":"0","margin":"0","outline":"none","color":"rgba(135, 154, 108, 1)","borderRadius":"4px","background":"rgba(255, 255, 255, 1)","width":"128px","lineHeight":"40px","fontSize":"14px","height":"40px"}' v-if="type=='info'" class="btn-close" @click="back()">返回</el-button></el-form-item></el-form></div>
</template>
<script>
// 数字,邮件,手机,url,身份证校验
import { isNumber,isIntNumer,isEmail,isPhone, isMobile,isURL,checkIdCard } from "@/utils/validate";
export default {data() {let self = thisvar validateIdCard = (rule, value, callback) => {if(!value){callback();} else if (!checkIdCard(value)) {callback(new Error("请输入正确的身份证号码"));} else {callback();}};var validateUrl = (rule, value, callback) => {if(!value){callback();} else if (!isURL(value)) {callback(new Error("请输入正确的URL地址"));} else {callback();}};var validateMobile = (rule, value, callback) => {if(!value){callback();} else if (!isMobile(value)) {callback(new Error("请输入正确的手机号码"));} else {callback();}};var validatePhone = (rule, value, callback) => {if(!value){callback();} else if (!isPhone(value)) {callback(new Error("请输入正确的电话号码"));} else {callback();}};var validateEmail = (rule, value, callback) => {if(!value){callback();} else if (!isEmail(value)) {callback(new Error("请输入正确的邮箱地址"));} else {callback();}};var validateNumber = (rule, value, callback) => {if(!value){callback();} else if (!isNumber(value)) {callback(new Error("请输入数字"));} else {callback();}};var validateIntNumber = (rule, value, callback) => {if(!value){callback();} else if (!isIntNumer(value)) {callback(new Error("请输入整数"));} else {callback();}};return {id: '',type: '',ro:{peijianfenlei : false,},ruleForm: {peijianfenlei: '',},rules: {peijianfenlei: [],}};},props: ["parent"],computed: {},created() {},methods: {// 下载download(file){window.open(`${file}`)},// 初始化init(id,type) {if (id) {this.id = id;this.type = type;}if(this.type=='info'||this.type=='else'){this.info(id);}else if(this.type=='logistics'){this.logistics=false;this.info(id);}else if(this.type=='cross'){var obj = this.$storage.getObj('crossObj');for (var o in obj){if(o=='peijianfenlei'){this.ruleForm.peijianfenlei = obj[o];this.ro.peijianfenlei = true;continue;}}}// 获取用户信息this.$http({url: `${this.$storage.get('sessionTable')}/session`,method: "get"}).then(({ data }) => {if (data && data.code === 0) {var json = data.data;} else {this.$message.error(data.msg);}});},// 多级联动参数info(id) {this.$http({url: `peijianfenlei/info/${id}`,method: "get"}).then(({ data }) => {if (data && data.code === 0) {this.ruleForm = data.data;//解决前台上传图片后台不显示的问题let reg=new RegExp('../../../upload','g')//g代表全部} else {this.$message.error(data.msg);}});},// 提交onSubmit() {var objcross = this.$storage.getObj('crossObj');//更新跨表属性var crossuserid;var crossrefid;var crossoptnum;if(this.type=='cross'){var statusColumnName = this.$storage.get('statusColumnName');var statusColumnValue = this.$storage.get('statusColumnValue');if(statusColumnName!='') {var obj = this.$storage.getObj('crossObj');if(statusColumnName && !statusColumnName.startsWith("[")) {for (var o in obj){if(o==statusColumnName){obj[o] = statusColumnValue;}}var table = this.$storage.get('crossTable');this.$http({url: `${table}/update`,method: "post",data: obj}).then(({ data }) => {});} else {crossuserid=this.$storage.get('userid');crossrefid=obj['id'];crossoptnum=this.$storage.get('statusColumnName');crossoptnum=crossoptnum.replace(/\[/,"").replace(/\]/,"");}}}this.$refs["ruleForm"].validate(valid => {if (valid) {if(crossrefid && crossuserid) {this.ruleForm.crossuserid = crossuserid;this.ruleForm.crossrefid = crossrefid;let params = { page: 1, limit: 10, crossuserid:this.ruleForm.crossuserid,crossrefid:this.ruleForm.crossrefid,} this.$http({ url: "peijianfenlei/page", method: "get", params: params }).then(({ data }) => { if (data && data.code === 0) { if(data.data.total>=crossoptnum) {this.$message.error(this.$storage.get('tips'));return false;} else {this.$http({url: `peijianfenlei/${!this.ruleForm.id ? "save" : "update"}`,method: "post",data: this.ruleForm}).then(({ data }) => {if (data && data.code === 0) {this.$message({message: "操作成功",type: "success",duration: 1500,onClose: () => {this.parent.showFlag = true;this.parent.addOrUpdateFlag = false;this.parent.peijianfenleiCrossAddOrUpdateFlag = false;this.parent.search();this.parent.contentStyleChange();}});} else {this.$message.error(data.msg);}});}} else { } });} else {this.$http({url: `peijianfenlei/${!this.ruleForm.id ? "save" : "update"}`,method: "post",data: this.ruleForm}).then(({ data }) => {if (data && data.code === 0) {this.$message({message: "操作成功",type: "success",duration: 1500,onClose: () => {this.parent.showFlag = true;this.parent.addOrUpdateFlag = false;this.parent.peijianfenleiCrossAddOrUpdateFlag = false;this.parent.search();this.parent.contentStyleChange();}});} else {this.$message.error(data.msg);}});}}});},// 获取uuidgetUUID () {return new Date().getTime();},// 返回back() {this.parent.showFlag = true;this.parent.addOrUpdateFlag = false;this.parent.peijianfenleiCrossAddOrUpdateFlag = false;this.parent.contentStyleChange();},}
};
</script>
<style lang="scss" scoped>.amap-wrapper {width: 100%;height: 500px;}.search-box {position: absolute;}.el-date-editor.el-input {width: auto;}.add-update-preview .el-form-item /deep/ .el-form-item__label {padding: 0 10px 0 0;color: #333;font-weight: 500;width: 140px;font-size: 14px;line-height: 40px;text-align: right;}.add-update-preview .el-form-item /deep/ .el-form-item__content {margin-left: 140px;}.add-update-preview .el-input /deep/ .el-input__inner {border: 2px solid #797979;border-radius: 4px;padding: 0 12px;outline: none;color: rgba(121, 121, 121, 1);width: auto;font-size: 14px;min-width: 400px;height: 40px;}.add-update-preview .el-select /deep/ .el-input__inner {border: 2px solid #797979;border-radius: 4px;padding: 0 10px;outline: none;color: rgba(121, 121, 121, 1);width: auto;font-size: 14px;min-width: 300px;height: 40px;}.add-update-preview .el-date-editor /deep/ .el-input__inner {border: 2px solid #797979;border-radius: 4px;padding: 0 10px 0 30px;outline: none;color: rgba(121, 121, 121, 1);width: auto;font-size: 14px;min-width: 300px;height: 40px;}.add-update-preview /deep/ .el-upload--picture-card {background: transparent;border: 0;border-radius: 0;width: auto;height: auto;line-height: initial;vertical-align: middle;}.add-update-preview /deep/ .upload .upload-img {border: 2px dashed #797979;cursor: pointer;border-radius: 6px;color: #797979;width: 150px;font-size: 32px;line-height: 100px;text-align: center;height: 100px;}.add-update-preview /deep/ .el-upload-list .el-upload-list__item {border: 2px dashed #797979;cursor: pointer;border-radius: 6px;color: #797979;width: 150px;font-size: 32px;line-height: 100px;text-align: center;height: 100px;}.add-update-preview /deep/ .el-upload .el-icon-plus {border: 2px dashed #797979;cursor: pointer;border-radius: 6px;color: #797979;width: 150px;font-size: 32px;line-height: 100px;text-align: center;height: 100px;}.add-update-preview .el-textarea /deep/ .el-textarea__inner {border: 2px solid #797979;border-radius: 4px;padding: 12px;outline: none;color: rgba(121, 121, 121, 1);width: 100%;font-size: 14px;height: 120px;}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405645.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务的基本理解和使用

目录​​​​​​​ 一、微服务基础知识 1、系统架构的演变 &#xff08;1&#xff09;单体应用架构 &#xff08;2&#xff09;垂直应用架构 &#xff08;3&#xff09;分布式SOA架构 &#xff08;4&#xff09;微服务架构 &#xff08;5&#xff09;SOA与微服务的关系…

什么是UDP?

UDP是工作在OSI&#xff08;开放系统互连&#xff0c;Open Systems Interconnection&#xff09;模型中传输层的协议。它使用IP作为底层协议&#xff0c;是为应用程序提供一种以最少的协议机制向其他程序发送消息的协议。其主要特点是无连接&#xff0c;不保证可靠传输和面向报…

[机器学习]--线性回归算法

线性回归算法原理 线性关系在生活中有很多案例: 摄氏度和华氏度的转化: F C ⋅ 9 5 32 F C \cdot\frac{9}{5}32 FC⋅59​32学科最终成绩的计算: 最终成绩 0.3 \times 平时成绩 0.7 \times 期末成绩 线性回归(Linear regression)就是利用回归函数对一个或多个自变量…

Qt中英文支持

目的 就是想让QT编的软件支持中英文。 情况 1、首先配置项目的pro文件&#xff1a; 这样就会生成相应的翻译配置文件&#xff0c;当前是&#xff1a; translate1_cn.ts&#xff1a;中文的配置文件&#xff0c;因为一般默认就是中文&#xff0c;所以一般中文的翻译文件是不需…

小程序商城被盗刷,使用SCDN安全加速有用吗?

在电子商务蓬勃发展的今天&#xff0c;小程序商城因其便捷性和灵活性成为商家和消费者的新宠。然而&#xff0c;随着其普及&#xff0c;小程序商城的安全问题也日益凸显&#xff0c;尤其是盗刷现象频发&#xff0c;给商家和用户带来了巨大损失。面对这一挑战&#xff0c;是否可…

虚拟机安装centos7-桥接模式

1、打开虚拟机&#xff0c;点击文件&#xff0c;选择新建虚拟机 2、选择典型&#xff0c;点击下一步 3、选择稍后安装操作系统&#xff0c;点击下一步 4、选择系统类型及版本&#xff0c;点击下一步&#xff0c;因centos7是Linux操作系统&#xff0c;且是64位的&#xff0c;所以…

主存编址例题

知识点 存储单元个数最大地址-最小地址1 存储单元个数BFFFFH-80000H13FFFFH140000H 这是个十六进制&#xff0c;转换为十进制4*16^44*2^4^44*2^164*2^6*2^10字节 1kb1024字节2^10字节 因此可以转换为4*2^6kb256kb 1byte8bit&#xff0c;1个字节8比特 16k*4bit16*1024*0.5…

高性能web服务器

目录 一、简介 &#xff08;一&#xff09;nginx-高性能的web服务端 &#xff08;二&#xff09;用户访问体验 二、I/O模型 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;网络I/O模型 &#xff08;三&#xff09;阻塞型 I/O 模型 &#xff08;四&#xf…

数据库MySQL之事务、索引

目录 1.概述 2.事务 3.索引 3.1索引结构 3.2操作语法 1.概述 场景&#xff1a;假如我们需要解散教学部&#xff0c;那么该部门下的所有员工都需要删除。如果教学部成功删除了&#xff0c;但员工出于某些原因(比如SQL语句写错了等)并没有删除&#xff0c;此时就会出现数据…

Unity Dots学习 (一)

先学习怎么使用&#xff0c;再研究底层代码。Dots大家都有所耳闻。一直没时间研究&#xff0c;最近研究一下 看上图可知&#xff0c;哪怕是CPU的第三级缓存也比内存要快2-5倍。 资料&#xff1a; 《DOTS之路》第零节——前导课(1)——DOTS的5W1H问题_哔哩哔哩_bilibili 《DOT…

保姆级-C#与Halcon的窗体界面展示阈值分割图像教程(机器视觉保姆级教程)

经历上一篇《零基础小白实现C#调用halcon dll的过程&#xff0c;并测试程序证明C#halcon联合开发成功》的发布已经过去三天啦&#xff0c; 零基础小白实现C#调用halcon dll的过程&#xff0c;并测试程序证明C#halcon联合开发成功-CSDN博客 在友友的催更下&#xff0c;我将用我…

人脸识别设计

总体思路 人脸识别使用的算法思路为&#xff1a;首先&#xff0c;定位一张图像中所有的人脸位置&#xff1b;其次&#xff0c;对于同一张脸&#xff0c;当光线改变或者朝向方位改变时&#xff0c;算法还能判断是同一张脸&#xff1b;然后找到每一张脸不同于其他脸的独特之处&a…

【秋招笔试】8.18大疆秋招(第一套)-后端岗

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

Linux安装redis和使用redisDesktop连接

目录 Linux安装redis及启动 第一步&#xff1a;下载redis压缩包 第二步&#xff1a;下载gcc-c 第三步&#xff1a;解压redis文件 第四步&#xff1a;进入redis-4.0.0.0目录执行make命令 第五步&#xff1a;安装redis到redis目录 第五步&#xff1a;复制redis.conf配置文件…

std::wcout,std::cout控制台输出中文乱码,std::cerr字符串的字符无效

系列文章目录 文章目录 系列文章目录前言一、中文乱码原因二、解决方法1.如果是windos11下&#xff0c;使用英文语言&#xff0c;需要加以下代码2.如果是中文语言只需要一行关键代码3.如果在异常处理中显示宽字符中文4.完整代码如下&#xff1a;实现文件测试代码输出打印 前言 …

Java异常捕获与处理:深入理解与实践

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

SAM 2——视频和图像实时实例分割的全新开源模型

引言 源码地址&#xff1a;https://github.com/facebookresearch/segment-anything-2 过去几年&#xff0c;人工智能领域在文本处理的基础人工智能方面取得了显著进步&#xff0c;这些进步改变了从客户服务到法律分析等各个行业。然而&#xff0c;在图像处理方面&#xff0c;我…

高考志愿智能推荐系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

数据采集监控平台内置SPC系统 提供统计控制功能

数据采集监控平台为了能多方位的为工作人员提供可视化界面&#xff0c;而不仅仅是采集显示这种单一功能&#xff0c;内置多种配置&#xff0c;而SPC系统就是提供统计控制功能的一个重要系统。 数据采集监控平台内置的统计过程控制&#xff08;Statistical Process Control, SPC…

Python3 运算符,数据类型,基本方法,学习

注意&#xff1a;部分代码直接复制菜鸟教程&#xff0c;在本地编辑器里运行 运算符 算术运算符 #!/usr/bin/python3a 21 b 10 c 0c a b print ("1 - c 的值为&#xff1a;", c)c a - b print ("2 - c 的值为&#xff1a;", c)c a * b print (&quo…