1、源代码和开发工具

MagicShop是重庆小当家互联网信息技术有限公司自行研发的企业级的商城应用系统,整体架构采用了基于接口的标准MVVM仓储服务架构,集成安卓APP,苹果APP,微信小程序,抖音小程序,H5商城等。

目前MagicShop有JAVA版本和.NetCore两个版本,采用了完全相同的数据库及架构设计。

仓库地址:

Java版GIT地址:git clone https://gitcode.com/MagicShop/MagicShop.Java.git

.NET版GIT地址:git clone https://gitcode.com/MagicShop/MagicShop.Net.git

.NET版SVN地址::https://data-beta/svn/20210421MagicShop.Net/

 

官方管理后台部署地址:https://pro.magicshop.top

官方API端(Swagger调试账号密码:MetaMagicShop):https://api.magicshop.top

 

开发环境:Windows 10 + SqlServer 2012 R2 + Visual Studio 2022企业版

 

1.1、公司指定的开发工具

1.1.1、VisuaStudio2022安装

目前采用VisuaStudio2022进行团队开发,会实时更新到最新的VS稳定版本。

官方下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/

公司云盘下载地址:https://pan.baidu.com/s/1e9aOnT-gNJq22FOuvBrgSA?pwd=R2ks (提取码:R2ks)

Professional:【TD244-P4NB7-YQ6XK-Y8MMM-YWV2J】

Enterprise:【VHF9H-NXBBB-638P6-6JHCY-88JWH】

下载并安装:

image-20240323093149112

1.1.2、SqlServer 2012R2安装

MagicShop使用Mysql和Sqlserver两个版本的数据库,目前支持SqlServer2016,SqlServer2012 R2,SqlServer2008;目前数据库的开发、测试及投产环境使用的都是Sqlserver 2012 R2版本,所以原则上Sqlserver 2012 R2版本或更高版本(SqlServer 2016)使用效果更好;Sqlserver 2008版本需要自行降级处理,为了兼容多版本数据库(目前已经支持Sqlserver、Mysql),数据库未使用存储过程、视图等多库下非通用模式。

可以通过公司百度云盘下载安装,也可以直接通过一下远程地址下载:

链接:https://pan.baidu.com/s/1ohOF7tlGySTOy4tyeYQDWQ?pwd=R2ks (提取码:R2ks)

SqlServer 2012 R2下载地址(安装内置序列号)

SqlServer 2016下载地址(安装内置序列号):

以下是安装步骤:

1)、打开网址 https://msdn.itellyou.cn/

2)、点击左侧的【服务器】,找到【SQL Server 2012】并点击

clipboard.png

3)、在其中我们找到【SQL Server 2012 Enterprise Edition with Service Pack 1 (x64) - DVD (Chinese-Simplified) 】 企业版并包含了更新包。

4)、复制其中的地址在服务器中进行下载。下载成功后,是个.ios文件,我们可以用winrar解压,或者直接装载到dvd盘。我习惯后者,防止有时候解压漏文件或者文件损坏。

5)、打开解压后的文件,点击setup.exe文件。然后按照以下步骤进行操作。

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

这个下载更新的过程比较缓慢。

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

如果是Sqlserver2016,需要自行到官方下载SSMS管理端并进行安装。

img

6)、安装成功后,我们右键【以管理员身份运行】运行SSMS数据库管理客户端工具。

clipboard.png

7)、打开后,我们使用Window身份验证模式进行登录。

clipboard.png

8)、登录成功后,我们点击左侧面板【服务器名称】,右键点击【属性】

clipboard.png

点击内存,将【最大服务器内存】进行修改,默认一般为主机的1/4或者1/3内存。

clipboard.png

点击数据库设置,将数据库文件,日志,备份等默认路径设置为一个新的路径。(反正尽量少放C盘)

clipboard.png

确定保存之后,我们再点击左侧面板,进行重启。

clipboard.png

至此,Sql Server 2012 R2数据库的安装完成。

安装完成后一定要重启服务器,重启服务器,重启服务器。重要的事情说三遍。

1.1.3、Redis 5.0.14及RDM安装

服务器和本地都需要安装Redis,保证已经Redis版本为 3.x或以上版本

特别注意:公司用的开发版本为:Redis 5.0.14版本,请同同步使用该版本,否则可能会出现一些奇怪的错误。

官网进行下载:https://redis.io/

公司网盘下载地址:https://pan.baidu.com/s/1nOD3RUCCgNcK-YzcPWZ6aQ?pwd=xnce (提取码:xnce)

RDM下载地址:同上↑

 

1,安装Redis-x64-5.0.14

windows下我们可以直接使用一键安装包,我们将从网盘下载的软件解压,获得【Redis在Windows下的两种安装包】Redis-x64-5.0.14.rar解压,将软件Redis-x64-5.0.14.msi复制到服务器,右键管理员模式进行安装。

img

img

img

img

img

img

img

img

2)、配置Redis的环境变量和密码

为了方便调试,本地电脑需要配置环境变量。服务器上还需要将Redis配置到服务中。

1、找到安装目录

img

2、打开redis.windows-service.conf文件

【# requirepass foobared】 的 # 去掉,【foobared 】改为你要设置的密码,公司统一使用MetaMagicShop

img

img

3,设置环境变量并启动Redis 在这里插入图片描述 在这里插入图片描述 输入 redis-server.exe 按下回车键,redis启动成功: 在这里插入图片描述

2)、RDM安装并测试连接

首先我们从网盘中获取到redis图形化管理软件RedisDesktopManager解压后进行安装。

img

img

img

img

img

img

img

img

img

img

img

 

1.1.4、开发中还需要用到的其他工具

日常开发过程中还经常会用到以下软件工具:

有道词典翻译:https://fanyi.youdao.com/download-Windows?keyfrom=fanyiweb_navigation

FTP工具FlashFXP(网盘地址):https://pan.baidu.com/s/1Wc5LWc2Hwo9kwzGvGEdf0Q?pwd=R2ks (提取码:R2ks)

(FTP工具也可以安装Xshell)

前端工具VSCode:https://code.visualstudio.com/

前端工具HBuilderX:

接口工具PostMan或者ApiPost:

文档工具Typora:(公司协同办公系统:\192.168.1.8\项目管理\软件共享\Typora)

1.2、通过SVN获取源代码

1)、本地安装SVN客户端:https://data-beta/svn/20210421MagicShop.Net/

官方下载SVN客户端TortoiseSVN和中文语言包进行安装。

下图是通过360软件管家搜索SVN客户端(这里注意:VisualSVN Server是服务器端,不用安装)并安装的步骤:

image-20240323095252899

2)、本地创建项目名称的文件夹并拉去代码

项目文件夹上右键---》检出(复制SVN地址到检出界面)

image-20240323100243357

image-20240323100334588

等待检出完成即获得项目完整的源代码:

image-20240323100446031

以上即是MagicShop整个项目的源代码。

1.3、通过GIT获取源代码

克隆地址:git clone https://gitcode.com/MagicShop/MagicShop.Net.git

image-20240323100730358

image-20240323100904402

获取完成后打开MagicShop.Net项目即可。

2、MagicShop后端代码简介

2.1 、代码架构解析

2.2、MagicShop.Net.Auth 类库

主要是权限验证,采用了官方标准JWT技术栈

2.3、MagicShop.Net.Caching类库

处理缓存业务类库,管理系统全局缓存。

2.4、MagicShop.Net.CodeGenerator

2.5、MagicShop.Net.Configuration类库

系统级全局配置,包括静态文件映射、全局常量枚举等。

2.6、MagicShop.Net.Core类库

包括AOP切面处理、自定义特性、依赖注入配置、全局技术栈启动配置等。

2.7、MagicShop.Net.Filter类库

过滤器组件、权限处理和各层级异常处理。

2.8、MagicShop.Net.Loging类库

日志组件,Nlog技术栈。

2.9、MagicShop.Net.Mapping类库

AutoMapper技术栈,数据库映射框架。

2.10、MagicShop.Net.Middlewares类库

中间件处理

2.11、MagicShop.Net.RedisMQ类库

消息队列,Redis技术栈,InitQ技术栈。

2.12、MagicShop.Net.Swagger类库

官方Swagger技术栈。

2.13、MagicShop.Net.Task类库

定时任务,HangFire技术栈。

2.14、MagicShop.Net.Utility类库

公共服务库,帮助类型、扩展类型。

2.15、MagicShop.Net.Model

Model层、Dao层数据实体对象。

2.16、MagicShop.Net.IServices

Services接口层。

2.17、MagicShop.Net.Services

服务Services层。

2.18、MagicShop.Net.IRepository

仓储接口层。

2.19、MagicShop.Net.Repository

仓储层

2.20、MagicShop.Net.WeChat.Service

微信组件独立服务层。

2.21、MagicShop.Net.Uni-App

集成的安卓APP,苹果APP,微信小程序,抖音小程序等。

2.22、MagicShop.Net.Web.Admin

管理系统后台,采用LayUiAdmin接口框架。

2.23、MagicShop.Net.Web.WebApi

API接口端,供后台和APP调用。

3、数据库操作

3.1、本地化数据库

远程数据库部署在公司华为云RDS数据库服务上,服务器端为公司统一演示开发使用,MagicShop服务器端不能轻易做改动,所以需要将数据库本地化进行调试测试。

本地化数据库有两种方式:通过bak备份文件还原;通过sql脚本生成带数据的数据库。

登录公司华为云RDS数据库,找到标准数据库:20210421MagicShop.Net,右键数据库表,在任务重打开生成脚本:

image-20240323190905302

一直点击下部到这个页面

image-20240323191242327

点击高级设置,并拖动到底部,双击两次,修改要编写脚本的数据类型为:架构和数据

如果不勾选,默认只有表结构并没有数据。

image-20240323191108142

然后一直点击下一步,生成脚本后,修改数据库名称,即可生成一个新的数据库表。

image-20240323191326825

image-20240323191347254

打开生成的文件,修改一下数据库名称,并执行:

image-20240323191625638

执行过后,修改的新的数据库就生成了,然后到代码中修改数据库配置名称即可运行项目。参考:5.2.1

3.2、商城SqlServer数据库一键清零操作脚本

以下为SqlServer数据库一键清零数据,只保留了基础商品演示、权限相关、初始化配置数据。

3.3、SQL Server Management Studio的开发设置

 

正常情况下,我们操作sqlserver数据库,都是使用的SQL Server Management Studio(简称ssms);

而ssms表设计中默认是不显示字段备注及一些其他需要用到的列。对于开发数据库非常不便。

如下图示:

image-20240323190750459

修改方法如下:

  1. 输入 regedit打开注册表

  2. 定位到:HKEY_CURRENT_USER\Software\Microsoft\SQL Server Management Studio\11.0\DataProject,注意这里的11.0表示安装的SQL Server Management Studio版本号。如果是SQL Server 2008 R2则对应100,SQL Server 2012对应11.0,以此类推。

  3. 注意对于 SQL Server Management Studio Version 18.x (2019),路径变为 HKEY_CURRENT_USER\Software\Microsoft\SQL Server Management Studio\18.0_IsoShell\DataProject

  4. 找到SSVPropViewColumnsSQL70SSVPropViewColumnsSQL80

  5. 默认值为:1,2,6;。将其修改为1,2,3,6,7,17; 即可。再次打开管理器。

注意:在设置注册表时,管理器需要是关闭状态。

其中,各数字代表的意思如下:

1:Column Name (列名)

2:Data Type (数据类型)

3:Length(长度)

4:Precision(精度)

5:Scale

6:Allow Nulls(允许为Null)

7:Default Value(默认值)

8:Identity

9:Identity Seed

10:Identity Increment

11:Row GUID

12:Nullable

13:Condensed Type

14:Not for Replication

15:Formula

16:Collation

17:Description

图解步骤

img

img

img

4、代码生成

MagicShop集成了高度匹配项目的代码生成器,通过生成器可以直接将数据库单表的前后端增、删、改、查、缓存、列表等文件统一生成及对应的文件夹。将文件及文件夹复制到对应的目录,即实现了一个单表的完整操作。

通过代码生成器对单表代码的生成,将生成以下文件:

  1. Entity:数据库对应的类文件及文件夹。

  2. IServices:业务接口层文件及文件夹。

  3. Services:业务层接口实现文件及文件夹。

  4. IRepository:数据层接口文件及文件夹。

  5. Repository:数据层接口实现文件及文件夹。

  6. HTML:前端数据列表、增、删、改、查html文件及文件夹。

生成文件后,我们只需要修改个人文件内的命名路径,即可实现单表的功能操作。

目前代码生成器支持的SqlServer字段为:

  1. int

  2. nvarchar

  3. bit

  4. datetime

  5. decimal

4.1、使用代码生成器

当数据库表制作成功后,我们可以通过代码生成器来生成单表操作数据了,前提请保证数据库表的字段说明,必须不能为空。以下是调试模式下生成模板代码文件的操作设置:

4.1.1、第一步确保代码文件类型

image-20240323104945358

image-20240323105208529

image-20240323105311865

4.1.2、第二步编译源代码并发布

 

过程省略。。。。。。

4.1.3、第三步后台进行代码生成

image-20240323105357192

image-20240323105535693

image-20240323105605474

image-20240323105654068

点击【立即生成】按钮,将生成文件压缩包。

image-20240323105817355

解压后得到的文件就可以直接复制到项目中对应的文件夹使用。

4.2、代码生成文件的使用

代码生成器生成的文件是根据文件名和项目目录默认结构生成的。但实际操作中,根据不同的开发人员会有不同,我们来阐述下代码生成后的文件对应的位置及需要调整的内容。

  1. Controller:对应9.App/MagicShop.Net.Web.Admin/Controllers/

  2. Entity:对应3.Entity/MagicShop.Net.Model/Entities (最后一个文件内,可以根据需求创建文件夹,保持目录更好的阅读性)

  3. Html:对应9.App/MagicShop.Net.Web.Admin/wwwroot/views/

  4. IRepository:对应4.Repository/MagicShop.Net.IRepository/(最后一个文件内,可以根据需求创建文件夹,保持目录更好的阅读性)

  5. Repository:对应4.Repository/MagicShop.Net.Repository/(最后一个文件内,可以根据需求创建文件夹,保持目录更好的阅读性)

  6. IServices:对应3.Services/MagicShop.Net.IServices/(最后一个文件内,可以根据需求创建文件夹,保持目录更好的阅读性)

  7. Services:对应3.Services/MagicShop.Net.Services/(最后一个文件内,可以根据需求创建文件夹,保持目录更好的阅读性)

根据生成的文件,按照以上目录结构,对应放置到文件下即可。

另外我们还有几处需要调整。

4.2.1、修改数据列表缓存的key名称

Repository文件中需要调整GetCaChe()方法内关于缓存字段名称的定义。可定义一个常量或者改为字符串。

4.2.2、修改前端html中对于添加,编辑,浏览详情页面的链接

注意注意:这里一定要改,非常重要。

因为我们是前后端分离,生成的前端文件夹是用户根据自己的目录结构来摆放位置的,那么静态文件里面有些链接是无法生成用户想要的。需要自行手动更改下。

我们打开代码生成中的index.html文件,找到代码中有3处 view(this.id).render的方法,将其中的 base/类名/edit base/类名/details base/类名/create修改为对应路径名称即可。

4.2.3、将已经生成的代码挂靠到后端左侧面板路径。

我们只需要通过【后台管理】【菜单管理】添加和维护路径信息即可。 里面的菜单Url就是对应的html文件路径。不需要录入后缀

完成之后,我们只需要给与角色对应的链接挂靠即可。通过左侧【后台管理】【角色管理】【权限分配】添加对应的权限即可。

image-20240323105914149

4.3、新建接口与Uni-App端交互

很多业务场景,我们是对数据库表的CURD操作,比如一个单表About(关于我们),我们在数据库创建了一个新表(注意每个字段的描述都要编写),然后通过代码生成器实现了后台单表的数据管理功能。那么我们如何将这个数据通过接口实现,uniapp前端调用,进行数据展示呢。我们从以下方式来描述,前提是后端已经实现了单表的管理。

4.3.1、创建Controller和Action

image-20240323215341494

image-20240323215451340

image-20240323215617060

image-20240323215757555

创建好方法后,在方法或者控制器前输入三个///,会自动生成带参数和返回值的注释,记得要晚上参数param的说明

image-20240323220343742

添加注释区域块(快捷键:Ctr+K+S 按上下键选择#region可以快速注入代码,同理其他很多代码块都可以快速注入)

image-20240323220632314

输入patm后,按Tab键,快速创建一个方法

关于如何配置patm,请参考:

https://learn.microsoft.com/zh-cn/visualstudio/ide/visual-csharp-code-snippets?view=vs-2019

image-20240323232512421

image-20240323232730161

修改方法名称,泛型WebApiCallBack为返回值类型,选择方法需要传入的参数

image-20240323233936971

image-20240323234048749

image-20240324000009939

到这个步骤,我们就新建的一个简单的接口及数据返回,返回的数据是WebApiCallBack的json数据。

4.3.2、通过Swagger查阅接口是否正常

image-20240323234736612

首先我们将webapi设置为启动项。

image-20240323234840409

点击vs工具栏上的【调试】【开始执行(不调试)|| 或者调试】自己根据业务是否需要调试

注意:调试前记得开启redis,并确保redis能正常使用密码连接

image-20240324000141583

Swagger的接口调试,后有详解,7.3有Token校验的详细说明

4.3.3、设置传参模式

一般情况下,直接获取数据的方法不多,更多的是通过传输参数,通过参数的自定义内容,来获取对应的数据。

下面模拟传一个int类型的id,获取其他数据的操作。

img

修改之后,我们编译下程序,然后刷新接口文档页面。获取新的文档内容,发现就多了FMIntId实体的参数需求。

img

img

img

img

到这里,就证明我们的接口编写完成了。如果需要验证用户的权限,只需要在action添加授权验证属性即可。

image-20240324000527088

4.3.4、uniapp前端与接口交互(交由前端处理)

接口制作完成后,我们将接口发布到服务上,然后就可以前端进行调用交互了。

1、打开项目下MagicShop.Net.Uni-App\MagicShop\common\request\http.api.js 统一接口配置文件。添加接口的请求地址。

image-20240324105206710

image-20240324105322969

2、在前端需要的位置,使用方法调用即可。

img

img

4.4、后台设置基于角色的颗粒化权限控制

目前的后端已经设置了基于角色权限的访问控制,简称RBAC,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

具体设置如下:

首先我们将【MagicShop.Net.Web.Admin.Controllers】命名空间下的所有【Controller】文件的【[Authorize]】属性修改为【[Authorize(Permissions.Name)]】,就是将只验证jwt授权,修改为验证jwt及action具体权限。

[Authorize]属性为:只验证jwt是否授权。

[Authorize(Permissions.Name)]属性为:除了验证jwt是否授权,另外还要验证Role表关联,是否每个Controller标注这个属性的action都可以访问。

ToolsController不需要修改,因为这个控制器放置的是通用方法,用于全局使用。

image-20240324000857141

image-20240324000950119

进入后台【后台管理】【菜单管理】针对菜单,我们导入和菜单相关的controller下面的action列表。

img

img

img

除了导入,我们也可以直接自己手动添加,因为可能存在并不是每个链接都绑定一个Controller。

img

进入【后台管理】【角色管理】针对需要赋值的角色,点击后面的【权限分配】,勾选需要赋值操作的权限,进行保存即可。

image-20240324001055914

重新登录,就可以获取对应的权限。

4.5、VUE 管理后台根据表名生成代码和结构说明 (交由前端处理)

vue 管理后台根据表名生成代码和结构说明 【文档说明 使用MagicShopUser 用户表举列,其他表生成代码操作是一样的】

vue管理后台根据表名生成页面 和操作, (目前包含的功能:表格列表,表格搜索,新增,删除,查看详情,查询导出数据,全部导出数据)

目前只支持单个表生成前端页面和后端增删改查

目前vue 的前端代码 是采用typescript 编写,需要定义类型,使用状态管理(vuex)管理数据,根据Json文件 生成组件,组件化拼装页面 和功能,因此生成的页面,文件,文件夹比较多,需要把放在代码里面对应的位置

image-20240323110115053

以用户管理表为列子 讲解生成的文件 文件夹 的各自存放路径 和作用

生成vue 管理后台文件夹结构如下图

img

  1. models: 存放MagicShopUser 用户表模型,对应接口定义的用户表类

  2. pages: 存放用户管理页面 包含:用户列表,新增,查询,删除,搜索 等功能

  3. service:定义用户的服务 包含 增晒改查

  4. store:状态管理: 用来存放用户的数据

  5. router: 用户管理的路由配置

具体每个文件夹和存放位置说明

4.5.1、models 模型文件

1.index.ts 存放用户表的模型字段定义

存放位置 models 文件夹

image-20240323111202483

4.3.2、pages 文件夹

  1. MagicShopUser: 存放用户管理的视图页面,包含表格列表,新增 删除,编辑,查询等 组件

  2. detail-config: 存放查询数据详情的Json文件配置

  3. form-schema:存数据新增和编辑的Json 文件配置

  4. index: 用户管理的视图页面。包含表格列表,新增,删除 ,查询详情,导出等功能

  5. search-field: 存放表格搜索字段的配置

  6. table-config:存放页面表格的配置

  7. index: 导出页面路由

存放位置 pages 文件夹

image-20240323111221794

4.5.2、service 存放用户表的增删改查

  1. api 定义 service 的增删改查的接口的地址

  2. index :定义 增删改查的方法

存放位置 services 文件夹

image-20240323111239192

4.5.3、store 存放用户管理数据的状态

1.MagicShopUser.index 用户状态管理的新增 删除,等操作

2.index: 导出用户管理的Store

存放位置 的store.modules文件夹

img

*把文件夹复制到store.modules 时,必须要做的一件事情是:在store.modules.index 文件 增加 上文提到的导出用户管理的store**

如图红色圈出来的

image-20240323111644383

4.5.4、router 页面配置,管理的菜单 会根据此路由进行配置和生成

img

将生成出来的路由配置 复制到router.config.ts 文件里面

img

复制进去的文件结构展示图下图

img

切记每个文件夹和文件 一定要放在对应的目录 和文件,不然会报错 一定要放在对应的目录 和文件,不然会报错

5、项目基础配置

想要让项目在服务器上跑起来,需要

5.1、软件配置

服务器端运行前提:(服务器端部署将在第6章中详细讲解步骤)

本地运行前提:

因为本地VS集成了项目的运行环境,所以本地只需要配置以下两项:

5.2、代码配置WebAdmin

项目配置文件appsettings.json配置了整个项目所有的信息。

首先我们通过vsual studio 2022打开MagicShop源代码解决方案。打开【Web】【MagicShop.Net.Web.Admin】【appsettings.json】配置文件。

image-20240324001442425

5.2.1、修改数据库连接

首先我们将代码定位到第3行ConnectionStrings - DbType节点,我们根据自己的需求,修改为SqlServer或者MySql

如果使用的是**SqlServer**的数据库,我们只需要修改第4行内的链接字符串内容:

  1. Server:服务器节点,ip或者域名

  2. uid:登录数据库的用户名(建议不要使用sa超级权限)

  3. pwd:登录数据库的密码

  4. Database:数据库的名称

  5. MultipleActiveResultSets:是否开启数据库连接复用。

  6. 完整的字符串格式如下

如果使用的是**MySql**数据库,我们可以注释掉第4行数据库连接字符串,取消第8行mysql数据库连接字符串的示例,然后根据自己的权限参数进行调整:

  1. Server:服务器节点,ip或者域名

  2. Port:端口号

  3. Database:数据库的名称

  4. Uid:登录数据库的密码(建议不要使用root超级权限)

  5. Pwd:登录数据库的密码

  6. CharSet:字符集编码格式

  7. pooling:是否开启池化,这个键的值设置为true,当值为True时,任何一个新创建的连接都将添加到连接池中当程序被关闭时,在下次试图开启一个相同的连接时,这个连接将从连接池中取出,如果连接字符串相同,则被认为是同一个连接。如果连接字符串不相同,则认为是不同的连接。

  8. SslMode:是否开启ssl

  9. Treat Tiny As Boolean:如果设置为True,则Mysql中的tinyint类型会被转换为MS Server中的bit类型,但有时候我们是不想要这来的转换的,所以这个可以根据自己的需要来配置

  10. Allow User Variables:是否允许 SQL 中出现用户变量(报表功能使用到纯sql查询,此功能需开启)

  11. Convert Zero Datetime:当没有设置此属性时,如果Mysql数据库中的datetime列为null的时候,.net在转换时会抛出如下异常:Unable to convert MySQL date/time value to System.DateTime at MySql.Data.Types.MySqlDateTime.GetDateTime()这是因为.net的默认最小日期和Mysql的不匹配,导致转换出错,解决办法就是以上连接串中的(设置Convert Zero Datetime=True)

  12. 完整的字符串格式如下

注:Mysql数据库链接字符串,请保持后面的属性别少。经过测试,mysql版本需要5.7或以上

20211115002004_2440

5.2.2、修改软件全局配置域名

我们将代码定位到第16行的 AppConfig 下面的AppUrlAppInterFaceUrl ,分别录入后端管理程序的网站域名地址,以及api接口端部署后提供访问的域名地址(api接口一般为https协议)

image-20240324001801091

5.2.3、配置redis链接字符串

我们将代码定位到第21行的RedisConfig下:

  1. 将UseCache设置为true

  2. 将UseTimedTask设置为true

  3. ConnectionString为redis链接字符串

    1. 127.0.0.1:6379分别为redis的服务器访问ip地址,6379为端口号。

    2. password:链接的权限密码,默认为空的情况下可以不设置。

    3. connectTimeout:客户端与redis链接超时时间。毫秒单位。

    4. connectRetry:重试连接次数

    5. syncTimeout: 同步操作默认超时时间

    6. DefaultDatabase:默认链接的数据库,类似于sqlserver或者mysql里面单个的数据库,唯一就是redis不需要去创建,直接指定即可,具体redis有多少库,根据自己的配置来选择。

    7. 完整示例如下

image-20240324001909674

5.2.4、配置微信支付和支付宝支付

(2.0版本已经改为后台设置,不通过appsetting.json配置文件配置)

我们将代码定位到第84行WeChatPay节点,针对以下节点进行设置:

  1. AppId:微信小程序AppId,通过管理微信小程序管理

  2. MchId:微信的支付的商户号,不是微信小程序的appid,一般是16开头的10位数字

  3. APIKey:为微信支付商户平台的API密钥,请注意不是APIv3密钥。可了解【前端文档】获取密钥的步骤

  4. APIv3Key:这个是APIv3密钥,我们目前未采用,为以后使用APIv3版本预留。可为空

  5. Certificate:证书文件的存放地址,默认【WxPayCert\apiclient_cert.p12】即可。可了解【前端文档】申请证书的步骤

  6. RsaPublicKey:企业付款到银行卡API使用的接口核验,目前为保留字段,可为空

image-20240324002031836

5.2.5、微信api交互授权配置

我们将代码定位到第158行WeChatOptions节点,针对以下节点进行设置:

  1. WxOpenAppId:微信小程序的Appid

  2. WxOpenAppSecret:微信小程序的AppSecret

  3. WxOpenToken:微信服务消息推送的核验令牌。(管理端无需设置)

  4. WxOpenEncodingAESKey:微信服务消息推送消息的加密密钥。(管理端无需设置)

以前四个内容:

WxOpenAppId、WxOpenAppSecret可以通过微信后台直接获取。

image-20240324002126172

image-20240324002158947

通过以上的设置,源代码基础的运行配置就配置好了,下一步我们进行项目的发布。

5.3、代码配置API端

首先我们通过vsual studio 2022打开MagicShop源代码解决方案。打开【Web】【MagicShop.Net.Web.WebApi】【appsettings.json】配置文件。

讲解同上↑

5.3.1、修改数据库连接

同上

5.3.2、配置定时任务管理面板账号密码

我们将代码定位到第12行的HangFire节点,分别设置Login【账号名】,PassWord【密码】

image-20240324002351215

5.3.3、修改软件全局配置域名

同上

5.3.4、配置redis链接字符串

同上

5.4.4、配置微信支付(新版已经改为后台设置,不通过appsetting.json配置文件配置)

同上

5.4.5、微信支付后的回调设置

(新版已经改为后台设置,不通过appsetting.json配置文件配置)

当用户使用我们的微信支付成功后,微信服务器会异步将支付结果信息推送到我们的服务器。则我们需要告知微信需要推送到哪个网址。

我们将代码定位到第148行PayCallBack节点,针对以下节点进行设置:

  1. WeChatPayUrl:微信支付回调的信息,有失败,也有成功的讯息。我们需要配置的地址为Api接口站点域名+/Notify/WeChatPay/Unifiedorder的路径。

  2. WeChatRefundUrl:当发起退款处理时,微信异步将处理结果推送到我们的配置地址,地址为Api接口站点域名+/Notify/WeChatPay/Refund的路径。

微信支付和回调均已调整到管理后台

5.4.6、微信api交互授权配置

我们将代码定位到第158行WeChatOptions节点,针对以下节点进行设置:

  1. WxOpenAppId:微信小程序的Appid

  2. WxOpenAppSecret:微信小程序的AppSecret

  3. WxOpenToken:微信服务消息推送的核验令牌。

  4. WxOpenEncodingAESKey:微信服务消息推送消息的加密密钥。

以前四个内容:

WxOpenAppId、WxOpenAppSecret可以通过微信后台直接获取。可参考【前端文档】

WxOpenToken、WxOpenEncodingAESKey需要先优先配置好接口站点并上传可以正常外网访问。可参考:【前端文档】

image-20240324002455930

通过以上的设置,源代码基础的运行配置就配置好了,下一步我们进行调试开发或项目的发布部署。

6、服务器部署

服务器部署包含以下几个步骤:

1、服务器安装windows2012 R2企业版或数据中心版本,或者windows2016企业版或数据中心版本。并导入数据库。

2、安装IIS。

3、安装Asp.Net Core Runtime运行时。

4、安装常用防护软件及设置。

6、安装自动备份软件、木马查杀软件等,

7、调整服务器端口开放。及阿里云安全组设置。

8、发布项目。

9、部署项目。

6.1、服务器环境安装

服务器环境安装是将项目部署到服务器上,本地VisualStudio集成开发环境是不需要安装配置的,调试环境下VS已经集成了所有的配置。

6.1.1、服务器安装MSSQL

服务器上安装MSSQL(windows2012 R2或者windows2016)的步骤与本地安装一致。这里就不在赘诉......

6.1.2、服务器安装IIS

1、服务器安装好之后,我们首要工作是安装iis。

2、服务器版的操作系统,我们可以通过点击【此电脑】的【管理】按钮进入【服务器管理器】,也可以直接通过桌面的【服务器管理器】直接进入。

clipboard.png

3、在打开的【服务器管理器】中,点击右上角的【管理】【添加角色功能】,然后按照图示一步步操作。

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

安装完成后一定要重启服务器,重启服务器,重启服务器。重要的事情说三遍。

4、安装完成并重启服务器之后,我们可以通过【服务器管理器】右上角的【工具】【IIS管理器】进入IIS

clipboard.png

5、也可以通过【控制面板】找到,并将图标放置到桌面。

打开【控制面板】,点击右上角的【类别】选择【小图标】,在其中选择【管理工具】

clipboard.png

clipboard.png

在【管理工具】中我们可以看到【IIS管理器】,可以右键将图标发送到桌面快捷方式。

clipboard.png

6、我们打开IIS,点击左侧的默认站点,然后点击右侧的浏览。

clipboard.png

clipboard.png

出现以上画面既表示安装成功。

6.1.3、服务器安装.Net 8.x运行时支持

下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0

img

img

自动下载或者手动下载安装即可。记得重启服务器。

安装完成后一定要重启服务器,重启服务器,重启服务器。重要的事情说三遍。

6.1.4、服务器安装Redis

Redis-x64-5.0.14和RDM的安装与本地安装完全一致。这里不在赘诉......

特别说明:

如何将Redis配置为系统服务:

每次配置Redis服务后,都需要重启

img

img

安装好Redis后,需要确保服务器的端口已经开启,确保阿里云或者腾讯云等服务器安全组开启了【6379】端口

确保防火墙开启了【6379】端口

6.1.5、服务器安全配置

为了服务器的安全,一般需要安装以下软件:

免费:云锁 https://yunsuo.qianxin.com/

免费:火绒 https://www.huorong.cn/

收费:护卫神入侵防护系统(360/年) https://www.hws.com/soft/sec/

6.2、代码部署发布及更新

6.2.1、发布.NETCore项目

代码编写完成后,我们如何发布代码呢。下面按照截图一步步操作。

修改好需要的项目代码

 

右键需要发布的项目:

image-20240323174857890

image-20240323175029601

image-20240323175100852

image-20240323175217262

image-20240323175252531

image-20240323175315606

等待发布完成

image-20240323175521682

image-20240323175634918

这样就完成了代码的发布,压缩发布包并上传到服务器指定文件夹

6.2.2、Windows部署项目

6.2.2.1、新建站点

将项目上传到服务器指定目录,上传项目一般使用FlashFXP或者Xshell等工具。也可以直接复制项目包到服务器端。

创建服务器站点步骤如下:

准备好项目代码,准备好域名,发布成项目包,上传项目包到指定的服务器中

登录到远程服务器,准备好域名证书:(因为所有小程序开发要求https,所以我们的项目都需要https证书)

image-20240323181206466

导入证书:

image-20240323181309638

打开服务器中的IIS管理器(Internet Information Services)

image-20240323180252921

image-20240323181350260

image-20240323181432062

点击确定绑定证书,即完成站点的创建。

右键网站,添加网站

image-20240323180430900

image-20240323180651868

image-20240323181606118

6.2.2.2、设置权限

部分服务器上安全权限需要进行配置,需要在IIS站点开启IIS_User权限,设置如下

image-20240323183317325

image-20240323183412054

image-20240323183454265

image-20240323183539238

双击选择该用户组

image-20240323183613425

image-20240323183651410

6.2.2.3、配置应用程序池

代开IIS服务器管理器,找到应用程序池,每个网站项目对应一个应用程序池。

image-20240323184159890

右键基本设置:

image-20240323184232548

 

image-20240323184403247

image-20240323184501936

注意:每次配置完,都要进行项目和应用程序池的重启。

image-20240323184534920

image-20240323184656489

配置好应用程序池后,项目即可启动了。

image-20240324100546457

6.2.2.4、SSL证书申请和导入

微信小程序数据交互要求为https协议,故我们的api接口端访问域名必须支持此协议,故我们需要在服务器安装ssl证书,以保证域名的支持https绑定。

准备工作:

  1. 一台windows服务器。

  2. 一个支持iis版本的ssl证书包,未获取的请先申请

下载证书

当我们在阿里云申请免费的ssl证书后,我们可以下载IIS支持包。

img

img

安装证书

首先我们将下载后的整数包解压,获得一个包含申请域名的.pfx后缀的文件,以及一个命名为pfx-password.txt的密码文本文档。我们将两个文件复制到服务器,然后按照以下步骤操作。

img

img

img

img

img

img

img

img

img

然后我们前往IIS绑定域名。

 

6.2.3、代码更新

当我们发布完整项目部署的时候,需要上传整个项目的文件包,

image-20240324101257546

image-20240324101533263

有时候我们只修改了某个特定的文件,这样发布的时候只会生成对应的类库文件,所以我们不用每次都完整的更新整个文件包。

只需要更新需要跟心的类库文件即可:

image-20240323185040553

只需要将红框中的部分上传到服务器覆盖即可

当该项目正处于访问中,上传会失败,所以,每次更新需要提前先停止项目和应用程序池。

image-20240324101840834

停止服务器和应用程序池后,上传覆盖文件,重启服务器和应用程序池。

6.2.4、七牛云云桶配置

七牛云官方地址:https://www.qiniu.com/

首先登录公司七牛云账号,公司账号下有多个云桶(文件空间),云空间都已经解析并配置好了域名。

获取密钥并配置

image-20240324005026130

img

img

image-20240324004536665

创建桶(空间)并配置

img

img

img

image-20240324005143041

image-20240324005351936

每个项目都要创建文件目录,并配置到后台,这样每个项目都有自己的云空间文件。

最后记得点保存即可。

备注:目前除了七牛云以外,还有阿里云云空间,华为云,腾讯云等都支持云盘存储静态资源。因为开发公司大都使用七牛云,这里就不在对其他平台做讲解......

6.2.5、打印机及相关配置

如果需要用到打印机,需要进行如下配置:

MagicShop已经对接了易联云网络打印机,可以上天猫购买对应的产品,接入即可,推荐是:易联云K6,易联云K7(支持自动切纸,不用一张张手撕)

一、激活打印机

首先我们买到打印机后,按照打印机的说明书,设置好打印机能正常联网,同时可以注意到机器的底部有终端号密钥,这个在后面注册机器到开发者平台有用到。

二、注册开发者平台

我们打开易联云官网:https://www.yilianyun.net/ 找到开发者登录。

img

没有账号的请先注册账号。

三、创建【自有型】应用

我们点击开发者平台左侧的【应用列表】,进入后创建【自有应用】。

img

img

img

img

img

四、注册打印机

img

添加成功后,我们可以通过打印机列表获取到打印机状态和机器信息。

img

img

五、链接商城系统

我们将创建的【自有应用】和打印机的终端密钥信息获取到后。登录我们商城后台

image-20240324005751486

image-20240324005833011

 

img

也可以打印测试页进行测试。

六、如何修改打印模板

可参考易联云官方支持的打印排版方式,结合我们的代码进行修改

排版模式:https://www.kancloud.cn/elind-dev/openapi/2096750

image-20240324010012063

6.3、其他平台的部署与配置

Linux+宝塔环境的部署

服务器上首先初始化宝塔环境,一键安装宝塔环境可以参考官方文档。

Docker容器部署

在CentOs上安装Docker引擎必须是CentOs7或者8以上,不支持测试版本 centos-extras 仓库必须要启用,在CenOs上面默认是启用的

H5端部署

暂未更新

VUE3.0端部署

暂未更新

7、项目开发与调试

 

7.1、HangFire定时任务的配置

我们系统集成的定时任务名称叫:Hangfire【https://www.hangfire.io/

此定时任务支持可视化面板,支持redis,mysql,sqlserver等常见数据库。

7.1.1、配置说明

在我们的项目中,定时任务只集成在接口端,后端没有定时任务。

image-20240324002735114

定时任务的账号密码,以及是否使用redis作为数据支持,都在接口端配置文件的前面几项内,可以自主设置。

image-20240324003218555

在接口的启动文件内,我们首页对hangfire配置文件进行了注册。可以点击查看实现代码。

image-20240324003538874

通过查看注册文件,我们发现里面对常见数据库进行了定义,同时做了全局的处理。

在配置文件项目用户配置中,我们可以设置定时任务的访问设置,最常用的就是设置定时任务的访问路由。

7.1.2、UI面板的使用

通过浏览器直接访问定时任务路由,可以进行项目管理

image-20240324003748089

image-20240324003807190

大家能看到我们这里是英文的面板,因为是使用redis数据库的问题,如果使用sqlserver,mysql数据库作为支撑,那么会是中文面板。

img

进入面板后我们就能看到UI顶部有几个通道。

1、servers表示链接到这个支撑数据库所查询到的api调用接口有哪些,如果你的服务器上已经跑着一个api项目,同时在本地又在调试,那么可能会在servers里面看到有2个记录。

2、recuming jobk:表示正在运行的循环任务有哪些。

3、retries:表示出错正在重试的任务有哪些。

4、jobs:表示定时任务任务执行情况以及反馈信息等。

三、如何新增定时任务

image-20240324003907107

img

在【HangfireDispose.cs】中我们可以构建自己需要定时任务,这个大家可以根据官方文档【https://www.hangfire.io/】制作自己需要执行的类型,比如订阅,比如单次执行,比如多次定时循环等等。

image-20240324004005507

在任务业务类中,我们只需要实现其【Execute】方法即可。

7.1.3、异常处理

1、如果出现了新增业务在定时任务没有发现的情况,可以先发布最新的接口代码,然后删除支撑redis数据库中的hangfire节点,如果是sqlserver/mysql,可以直接清理掉hangfire前缀的表,让其自动加载新的,这个是最简单的处理方式。

7.2、错误调试

日常开发或者环境部署中,我们开发项目经常会碰到很多的异常,但是无法找到原因,只能靠猜。现在分享几种我们自己的处理方式。

首先我们将iis抛出日志的开关打开。

img

img

7.2.1、代码找错方法一。

在发布到IIS的webApi项目中,运行时报出以上错误,

1、打开发布目录文件夹,找到web.config文件

img

2、打开web.config找到stdoutLogEnabled="false",把该值改为true,即->stdoutLogEnabled="true"

3、Web.Config增加环境变量为开发模式(用的多)

如源代码为

修改为

注意看,是在 aspNetCore 节点里面增加了 environmentVariables节点。那么IIs下500就会抛出详细异常了。而不只是提示友好说明。

7.2.2、代码找错方法二。

通过服务器的事件查看器获取。

img

img

7.2.3、前端浏览器F12获取

建议使用edge或者chorme浏览器,在打开网页的情况下,按F12,或者点击右上角选项里面的【开发人员工具】。

image-20240324004248026

对当前页重新进行业务操作,那么右侧的开发者工具里面,就会有响应的请求或者数据提示,大家可以通过查看【控制台】或者【网络】里面的请求查阅信息。

7.3、获取Token进行API端调试

开启调试进入Swagger控制面板,需要输入Swagger配置的密码:

不需要Token校验的API接口可以直接进行断点调试

对于需要Token校验的API接口的调试步骤如下:

找到Swagger中的登陆接口

image-20240323170747799

点击try it out 进行调试输入用户名和密码

image-20240323170901035

如果输入正确,接口返回成功,返回结果中有Token

image-20240323171005384

复制Token填写到Authrization中

image-20240323171056959

image-20240323171419604

image-20240323171438261

输入Token后,即可进行在线调试接口。

7.4、RedisMQ消息列队的开发和使用

RedisMQ用于基于redis的持久消息队列系统,了解RedisMQ,先了解【Stack栈】集合先进先出和【Queue队】集合先进后出栈操作原理。

将需要丢入消息列队处理的数据写入消息队列

image-20240328113426803

编写队列处理文件,将业务处理逻辑代码编写好:

image-20240328113656617

在RedisMQ的启动文件中挂载启动文件。

image-20240328113807231

至此,RedisMQ配置完成,这里注意,调试的时候,可以直接将消息列队的方法拉到普通服务代码文件中或API中调试。

大家还可以了解RabitMQ的使用:

https://blog.csdn.net/qq_37997978/article/details/88635408

8、开发相关

8.1、公司开发规范

开发规范包括:文件目录规范文件命名规范、代码规范、注释规范

详将小当家协同办公文件系统---》项目管理---》公共资源

请严格遵守公司开发规范。

7.2、Git与SVN操作规范

Git参考:https://blog.csdn.net/bjbz_cxy/article/details/116703787

SVN使用:

1,每天早晚要更新代码,确保你这天的代码时最新的

2,合并代码时,如果有冲突的,要检查冲突。

8.3、VS使用技巧

参考协同办公服务器文档。