From bc5b433028879348a63fd7f2b5845ae17df896a6 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期四, 08 八月 2024 16:19:46 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java                             |   62 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java                                   |   54 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java                     |   20 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserAddressServiceImpl.java                       |    7 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java                                          |    2 
 ruoyi-service/ruoyi-chargingPile/pom.xml                                                                                       |    5 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java                 |   57 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java                                    |   15 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TSiteMenuService.java                            |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java              |   20 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java                            |   84 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysRoleClient.java                                   |   23 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java                               |   54 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java                         |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java                              |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java                     |  291 +++++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java                                         |    2 
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java                                                           |   50 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java                                   |  101 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java                        |    2 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java                            |   19 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java                              |   42 
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/HMACSHA1.java                                                             |   37 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java              |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TPartnerSiteMapper.xml                                 |   18 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysRoleFallbackFactory.java                              |   27 
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml                                                  |    9 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Region.java                                                 |   46 
 ruoyi-gateway/src/main/resources/bootstrap.yml                                                                                 |    4 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserAddressService.java                                |    6 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java      |   20 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ResetPassword.java                                   |   18 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java                                |   49 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java                          |   61 +
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml                                |   22 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java                                |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TPartnerSiteServiceImpl.java                |   20 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java                                            |    9 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java               |   20 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TSiteMenuServiceImpl.java                   |   20 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/AdvertisingStatusEnum.java                     |   45 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml                                      |   42 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml                    |   20 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java                                            |   10 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TSiteMenuMapper.xml                                    |   33 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java                                      |  226 ++++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java                                              |   15 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TSiteMenuMapper.java                              |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml                                                              |   18 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java                              |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java                        |   20 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java                              |   29 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java                        |  100 +
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml                                         |   92 +
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                                                  |    6 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java                                  |    3 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java                       |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java                           |   65 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java                                |   25 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java                                   |   26 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/IRegionService.java                                            |   11 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TPartnerSiteService.java                         |   16 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java                                |   10 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java                          |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java            |   16 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java   |   20 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetSiteList.java                               |   32 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java                                   |   26 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java                                         |    9 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TPartnerSiteController.java                   |   20 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/GetSysRoleByIds.java                                       |   17 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml                               |   27 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java                                       |   37 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSite.java                                     |  166 ++
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java                                                            |  115 ++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TSiteMenuController.java                      |   20 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TPartnerSiteMapper.java                           |   16 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java                                 |   11 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java                                 |  108 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TPartnerSite.java                              |   47 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java                 |   20 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java                  |   20 
 ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |    1 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java                                    |   65 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/RegionServiceImpl.java                                    |   15 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java                                 |   10 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/RegionMapper.java                                               |   11 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java                        |  145 ++
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml                                      |   22 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java                         |   25 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java                                 |   13 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java                        |   16 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java                             |   53 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java                                    |   13 
 94 files changed, 3,313 insertions(+), 44 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java
new file mode 100644
index 0000000..641f0ff
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java
@@ -0,0 +1,42 @@
+package com.ruoyi.chargingPile.api.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/8 9:29
+ */
+@Data
+@ApiModel
+public class GetSiteListDTO {
+	@ApiModelProperty(value = "站点id")
+	private Integer id;
+	@ApiModelProperty(value = "站点编号")
+	private String code;
+	@ApiModelProperty(value = "站点名称")
+	private String name;
+	@ApiModelProperty(value = "合作商名称")
+	private String partnerName;
+	@ApiModelProperty(value = "站点类型(0=其他,1=公共,2=个人,3=公交(专业),4=环卫(专用),5=物流(专用),6=出租车(专用))")
+	private Integer siteType;
+	@ApiModelProperty(value = "经营类型(1=直营,2=非直营)")
+	private Integer businessCategory;
+	@ApiModelProperty(value = "站点状态(1=正常使用,2=维修中,3=关闭下线)")
+	private Integer status;
+	@ApiModelProperty(value = "详细地址")
+	private String address;
+	@ApiModelProperty(value = "站点电话")
+	private String phone;
+	@ApiModelProperty(value = "服务电话")
+	private String servicePhone;
+	@ApiModelProperty(value = "车位数")
+	private Integer parkingSpace;
+	@ApiModelProperty(value = "建站时间")
+	private String establishmentTime;
+	@ApiModelProperty(value = "充电桩数量")
+	private Integer chargingPileNumber;
+	@ApiModelProperty(value = "排序")
+	private Integer sort;
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java
new file mode 100644
index 0000000..4cfe522
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/PartnerListDTO.java
@@ -0,0 +1,29 @@
+package com.ruoyi.chargingPile.api.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 14:03
+ */
+@Data
+@ApiModel
+public class PartnerListDTO {
+	@ApiModelProperty(value = "数据id")
+	private Integer id;
+	@ApiModelProperty(value = "合作商名称")
+	private String name;
+	private Integer roleId;
+	@ApiModelProperty(value = "角色名")
+	private String roleName;
+	@ApiModelProperty(value = "合作商电话1")
+	private String phoneOne;
+	@ApiModelProperty(value = "注册地址")
+	private String address;
+	@ApiModelProperty(value = "登录账号")
+	private String account;
+	@ApiModelProperty(value = "备注")
+	private String remark;
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java
new file mode 100644
index 0000000..481c96c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Partner.java
@@ -0,0 +1,101 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.web.domain.BasePojo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 13:37
+ */
+@Data
+@ApiModel
+@TableName("t_partner")
+public class Partner extends BasePojo {
+	
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id", type = IdType.AUTO)
+	private Integer id;
+	/**
+	 * 合作商ID
+	 */
+	@TableField("code")
+	@ApiModelProperty(value = "合作商ID", required = true)
+	private String code;
+	/**
+	 * 合作商名称
+	 */
+	@TableField("name")
+	@ApiModelProperty(value = "合作商名称", required = true)
+	private String name;
+	/**
+	 * 角色id
+	 */
+	@TableField("role_id")
+	@ApiModelProperty(value = "角色id", required = true)
+	private Integer roleId;
+	/**
+	 * 角色名称
+	 */
+	@TableField(exist = false)
+	@ApiModelProperty(value = "角色名称")
+	private String roleName;
+	/**
+	 * logo地址
+	 */
+	@TableField("logo_url")
+	@ApiModelProperty(value = "logo地址")
+	private String logoUrl;
+	/**
+	 * 费率
+	 */
+	@TableField("rate")
+	@ApiModelProperty(value = "费率")
+	private BigDecimal rate;
+	/**
+	 * 注册地址
+	 */
+	@TableField("address")
+	@ApiModelProperty(value = "address")
+	private String address;
+	/**
+	 * 合作商电话1
+	 */
+	@TableField("phone_one")
+	@ApiModelProperty(value = "合作商电话1", required = true)
+	private String phoneOne;
+	/**
+	 * 合作商电话2
+	 */
+	@TableField("phone_two")
+	@ApiModelProperty(value = "合作商电话2")
+	private String phoneTwo;
+	/**
+	 * 备注
+	 */
+	@TableField("remark")
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	/**
+	 * 登录账号
+	 */
+	@TableField("account")
+	@ApiModelProperty(value = "登录账号", required = true)
+	private String account;
+	/**
+	 * 登录密码
+	 */
+	@TableField("password")
+	@ApiModelProperty(value = "登录密码", required = true)
+	private String password;
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java
new file mode 100644
index 0000000..5bace65
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java
@@ -0,0 +1,226 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.web.domain.BasePojo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 19:31
+ */
+@Data
+@TableName("t_site")
+public class Site extends BasePojo {
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id", type = IdType.AUTO)
+	@ApiModelProperty(value = "站点id")
+	private Integer id;
+	/**
+	 * 合作商id
+	 */
+	@TableField("partner_id")
+	@ApiModelProperty(value = "合作商id", required = true)
+	private Integer partnerId;
+	/**
+	 * 站点编号
+	 */
+	@TableField("code")
+	@ApiModelProperty(value = "站点编号", required = true)
+	private String code;
+	/**
+	 * 站点名称
+	 */
+	@TableField("name")
+	@ApiModelProperty(value = "站点名称", required = true)
+	private String name;
+	/**
+	 * 站点类型(0=其他,1=公共,2=个人,3=公交(专业),4=环卫(专用),5=物流(专用),6=出租车(专用))
+	 */
+	@TableField("site_type")
+	@ApiModelProperty(value = "站点类型(0=其他,1=公共,2=个人,3=公交(专业),4=环卫(专用),5=物流(专用),6=出租车(专用))", required = true)
+	private Integer siteType;
+	/**
+	 * 经营类型(1=直营,2=非直营)
+	 */
+	@TableField("business_category")
+	@ApiModelProperty(value = "经营类型(1=直营,2=非直营)", required = true)
+	private Integer businessCategory;
+	/**
+	 * 站点状态(1=正常使用,2=维修中,3=关闭下线)
+	 */
+	@TableField("status")
+	@ApiModelProperty(value = "站点状态(1=正常使用,2=维修中,3=关闭下线)", required = true)
+	private Integer status;
+	/**
+	 * 建设场所(0=其他,1=居民区,2=公共机构,3=企事业单位,4=写字楼,5=工业园区,6=交通枢纽,7=大型文体设施,8=城市绿地,9=大型建筑配建停车场,10=路边停车位,11=城际高速服务区)
+	 */
+	@TableField("construction_site")
+	@ApiModelProperty(value = "建设场所(0=其他,1=居民区,2=公共机构,3=企事业单位,4=写字楼,5=工业园区,6=交通枢纽,7=大型文体设施,8=城市绿地,9=大型建筑配建停车场,10=路边停车位,11=城际高速服务区)", required = true)
+	private Integer constructionSite;
+	/**
+	 * 站点环境图
+	 */
+	@TableField("img_url")
+	@ApiModelProperty(value = "站点环境图", required = true)
+	private String imgUrl;
+	/**
+	 * 省名称
+	 */
+	@TableField("province")
+	@ApiModelProperty(value = "省名称", required = true)
+	private String province;
+	/**
+	 * 省区划代码
+	 */
+	@TableField("province_code")
+	@ApiModelProperty(value = "省区划代码", required = true)
+	private String provinceCode;
+	/**
+	 * 市名称
+	 */
+	@TableField("city")
+	@ApiModelProperty(value = "市名称", required = true)
+	private String city;
+	/**
+	 * 市区划代码
+	 */
+	@TableField("city_code")
+	@ApiModelProperty(value = "市区划代码", required = true)
+	private String cityCode;
+	/**
+	 * 区县名称
+	 */
+	@TableField("districts")
+	@ApiModelProperty(value = "区县名称", required = true)
+	private String districts;
+	/**
+	 * 区县区划代码
+	 */
+	@TableField("districts_code")
+	@ApiModelProperty(value = "区县区划代码", required = true)
+	private String districtsCode;
+	/**
+	 * 经度
+	 */
+	@TableField("lon")
+	@ApiModelProperty(value = "经度", required = true)
+	private String lon;
+	/**
+	 * 纬度
+	 */
+	@TableField("lat")
+	@ApiModelProperty(value = "纬度", required = true)
+	private String lat;
+	/**
+	 * 详细地址
+	 */
+	@TableField("address")
+	@ApiModelProperty(value = "详细地址", required = true)
+	private String address;
+	/**
+	 * 国家代码
+	 */
+	@TableField("country_code")
+	@ApiModelProperty(value = "国家代码")
+	private String countryCode;
+	/**
+	 * 站点电话
+	 */
+	@TableField("phone")
+	@ApiModelProperty(value = "站点电话", required = true)
+	private String phone;
+	/**
+	 * 服务电话
+	 */
+	@TableField("service_phone")
+	@ApiModelProperty(value = "服务电话", required = true)
+	private String servicePhone;
+	/**
+	 * 站点引导
+	 */
+	@TableField("guide")
+	@ApiModelProperty(value = "站点引导")
+	private String guide;
+	/**
+	 * 开始服务时间
+	 */
+	@TableField("start_service_time")
+	@ApiModelProperty(value = "开始服务时间")
+	private String startServiceTime;
+	/**
+	 * 结束服务时间
+	 */
+	@TableField("end_service_time")
+	@ApiModelProperty(value = "结束服务时间")
+	private String endServiceTime;
+	/**
+	 * 站内提供服务
+	 */
+	@TableField("service_description")
+	@ApiModelProperty(value = "站内提供服务")
+	private String serviceDescription;
+	/**
+	 * 车型描述
+	 */
+	@TableField("vehicle_description")
+	@ApiModelProperty(value = "车型描述")
+	private String vehicleDescription;
+	/**
+	 * 车位数
+	 */
+	@TableField("parking_space")
+	@ApiModelProperty(value = "车位数", required = true)
+	private Integer parkingSpace;
+	/**
+	 * 充电费率描述
+	 */
+	@TableField("rate_description")
+	@ApiModelProperty(value = "充电费率描述")
+	private String rateDescription;
+	/**
+	 * 超时占位费说明
+	 */
+	@TableField("space_charge_explain")
+	@ApiModelProperty(value = "超时占位费说明")
+	private String spaceChargeExplain;
+	/**
+	 * 计费策略id
+	 */
+	@TableField("accounting_strategy_id")
+	@ApiModelProperty(value = "计费策略id")
+	private Integer accountingStrategyId;
+	/**
+	 * 建站时间
+	 */
+	@TableField("establishment_time")
+	@ApiModelProperty(value = "建站时间", notes = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDate establishmentTime;
+	/**
+	 * 排序
+	 */
+	@TableField("sort")
+	@ApiModelProperty(value = "排序", required = true)
+	private Integer sort;
+	/**
+	 * 备注
+	 */
+	@TableField("remark")
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	/**
+	 * 评分
+	 */
+	@TableField("mark")
+	private Integer mark;
+	
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java
new file mode 100644
index 0000000..3fd2438
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPileNotification.java
@@ -0,0 +1,57 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_charging_pile_notification")
+@ApiModel(value="TChargingPileNotification对象", description="")
+public class TChargingPileNotification implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId("id")
+    private Long id;
+
+    @ApiModelProperty(value = "站点id")
+    @TableField("site_id")
+    private Integer siteId;
+
+    @ApiModelProperty(value = "充电桩id")
+    @TableField("charging_pile_id")
+    private Integer chargingPileId;
+
+    @ApiModelProperty(value = "通知内容")
+    @TableField("content")
+    private String content;
+
+    @ApiModelProperty(value = "发送时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "删除状态(0=否,1=是)")
+    @TableField("del_flag")
+    @TableLogic
+    private Integer delFlag;
+
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java
new file mode 100644
index 0000000..236e989
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java
@@ -0,0 +1,53 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.common.core.web.domain.BasePojo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_fault_message")
+@ApiModel(value="TFaultMessage对象", description="")
+public class TFaultMessage extends BasePojo {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "用户id")
+    @TableField("app_user_id")
+    private Long appUserId;
+
+    @ApiModelProperty(value = "站点id")
+    @TableField("site_id")
+    private Integer siteId;
+
+    @ApiModelProperty(value = "充电桩id")
+    @TableField("charging_pile_id")
+    private Integer chargingPileId;
+
+    @ApiModelProperty(value = "状态(1=离线,2=故障)")
+    @TableField("status")
+    private Integer status;
+
+    @ApiModelProperty(value = "故障时间")
+    @TableField("down_time")
+    private LocalDateTime downTime;
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java
new file mode 100644
index 0000000..2756fbb
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java
@@ -0,0 +1,84 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_parking_record")
+@ApiModel(value="TParkingRecord对象", description="")
+public class TParkingRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "订单id")
+    @TableId("id")
+    private Long id;
+
+    @ApiModelProperty(value = "用户id")
+    @TableField("app_user_id")
+    private Long appUserId;
+
+    @ApiModelProperty(value = "车牌号")
+    @TableField("license_plate")
+    private String licensePlate;
+
+    @ApiModelProperty(value = "车辆颜色")
+    @TableField("vehicle_color")
+    private String vehicleColor;
+
+    @ApiModelProperty(value = "充电订单id")
+    @TableField("charging_order_id")
+    private Long chargingOrderId;
+
+    @ApiModelProperty(value = "停车场id")
+    @TableField("parking_lot_id")
+    private Integer parkingLotId;
+
+    @ApiModelProperty(value = "入场时间")
+    @TableField("in_parking_time")
+    private LocalDateTime inParkingTime;
+
+    @ApiModelProperty(value = "出场时间")
+    @TableField("out_parking_time")
+    private LocalDateTime outParkingTime;
+
+    @ApiModelProperty(value = "停车时长(分钟)")
+    @TableField("parking_duration")
+    private Integer parkingDuration;
+
+    @ApiModelProperty(value = "总费用")
+    @TableField("order_amount")
+    private BigDecimal orderAmount;
+
+    @ApiModelProperty(value = "状态(1=已进场,2=已出场,3=已缴费出场)")
+    @TableField("status")
+    private Integer status;
+
+    @ApiModelProperty(value = "出场方式(1=缴费出场,2=免费时长内放行)")
+    @TableField("out_parking_type")
+    private Integer outParkingType;
+
+    @ApiModelProperty(value = "添加时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TPartnerSite.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TPartnerSite.java
new file mode 100644
index 0000000..fb5482c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TPartnerSite.java
@@ -0,0 +1,47 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_partner_site")
+@ApiModel(value="TPartnerSite对象", description="")
+public class TPartnerSite implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "站点id")
+    @TableField("site_id")
+    private Integer siteId;
+
+    @ApiModelProperty(value = "合作商id")
+    @TableField("partner_id")
+    private Integer partnerId;
+
+    @ApiModelProperty(value = "菜单id")
+    @TableField("site_menu_id")
+    private Integer siteMenuId;
+
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java
new file mode 100644
index 0000000..49f609b
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java
@@ -0,0 +1,54 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.common.core.web.domain.BasePojo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_repair")
+@ApiModel(value="TRepair对象", description="")
+public class TRepair extends BasePojo {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "报修人")
+    @TableField("repairman")
+    private String repairman;
+
+    @ApiModelProperty(value = "站点id")
+    @TableField("site_id")
+    private Integer siteId;
+
+    @ApiModelProperty(value = "充电桩id")
+    @TableField("charging_pile_id")
+    private Integer chargingPileId;
+
+    @ApiModelProperty(value = "报修内容")
+    @TableField("content")
+    private String content;
+
+    @ApiModelProperty(value = "报修时间")
+    @TableField("repair_time")
+    private LocalDateTime repairTime;
+
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSite.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSite.java
new file mode 100644
index 0000000..b099b24
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSite.java
@@ -0,0 +1,166 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.common.core.web.domain.BasePojo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_site")
+@ApiModel(value="TSite对象", description="")
+public class TSite extends BasePojo {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "合作商id")
+    @TableField("partner_id")
+    private Integer partnerId;
+
+    @ApiModelProperty(value = "站点编号")
+    @TableField("code")
+    private String code;
+
+    @ApiModelProperty(value = "站点名称")
+    @TableField("name")
+    private String name;
+
+    @ApiModelProperty(value = "站点类型(0=其他,1=公共,2=个人,3=公交(专业),4=环卫(专用),5=物流(专用),6=出租车(专用))")
+    @TableField("site_type")
+    private Integer siteType;
+
+    @ApiModelProperty(value = "经营类型(1=直营,2=非直营)")
+    @TableField("business_category")
+    private Integer businessCategory;
+
+    @ApiModelProperty(value = "站点状态(1=正常使用,2=维修中,3=关闭下线)")
+    @TableField("status")
+    private Integer status;
+
+    @ApiModelProperty(value = "建设场所(0=其他,1=居民区,2=公共机构,3=企事业单位,4=写字楼,5=工业园区,6=交通枢纽,7=大型文体设施,8=城市绿地,9=大型建筑配建停车场,10=路边停车位,11=城际高速服务区)")
+    @TableField("construction_site")
+    private Integer constructionSite;
+
+    @ApiModelProperty(value = "站点环境图")
+    @TableField("img_url")
+    private String imgUrl;
+
+    @ApiModelProperty(value = "省名称")
+    @TableField("province")
+    private String province;
+
+    @ApiModelProperty(value = "省区划代码")
+    @TableField("province_code")
+    private String provinceCode;
+
+    @ApiModelProperty(value = "市名称")
+    @TableField("city")
+    private String city;
+
+    @ApiModelProperty(value = "市区划代码")
+    @TableField("city_code")
+    private String cityCode;
+
+    @ApiModelProperty(value = "区县名称")
+    @TableField("districts")
+    private String districts;
+
+    @ApiModelProperty(value = "区县区划代码")
+    @TableField("districts_code")
+    private String districtsCode;
+
+    @ApiModelProperty(value = "经度")
+    @TableField("lon")
+    private String lon;
+
+    @ApiModelProperty(value = "纬度")
+    @TableField("lat")
+    private String lat;
+
+    @ApiModelProperty(value = "详细地址")
+    @TableField("address")
+    private String address;
+
+    @ApiModelProperty(value = "国家代码")
+    @TableField("country_code")
+    private String countryCode;
+
+    @ApiModelProperty(value = "站点电话")
+    @TableField("phone")
+    private String phone;
+
+    @ApiModelProperty(value = "服务电话")
+    @TableField("service_phone")
+    private String servicePhone;
+
+    @ApiModelProperty(value = "站点引导")
+    @TableField("guide")
+    private String guide;
+
+    @ApiModelProperty(value = "开始服务时间")
+    @TableField("start_service_time")
+    private String startServiceTime;
+
+    @ApiModelProperty(value = "结束服务时间")
+    @TableField("end_service_time")
+    private String endServiceTime;
+
+    @ApiModelProperty(value = "站内提供服务")
+    @TableField("service_description")
+    private String serviceDescription;
+
+    @ApiModelProperty(value = "车型描述")
+    @TableField("vehicle_description")
+    private String vehicleDescription;
+
+    @ApiModelProperty(value = "车位数")
+    @TableField("parking_space")
+    private Integer parkingSpace;
+
+    @ApiModelProperty(value = "充电费率描述")
+    @TableField("rate_description")
+    private String rateDescription;
+
+    @ApiModelProperty(value = "超时占位费说明")
+    @TableField("space_charge_explain")
+    private String spaceChargeExplain;
+
+    @ApiModelProperty(value = "计费策略id")
+    @TableField("accounting_strategy_id")
+    private Integer accountingStrategyId;
+
+    @ApiModelProperty(value = "建站时间")
+    @TableField("establishment_time")
+    private LocalDateTime establishmentTime;
+
+    @ApiModelProperty(value = "排序")
+    @TableField("sort")
+    private Integer sort;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+
+    @ApiModelProperty(value = "评分")
+    @TableField("mark")
+    private Integer mark;
+
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java
new file mode 100644
index 0000000..ac58640
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TSiteMenu.java
@@ -0,0 +1,108 @@
+package com.ruoyi.chargingPile.api.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_site_menu")
+@ApiModel(value="TSiteMenu对象", description="")
+public class TSiteMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "菜单ID")
+    @TableId(value = "menu_id", type = IdType.AUTO)
+    private Integer menuId;
+
+    @ApiModelProperty(value = "菜单名称")
+    @TableField("menu_name")
+    private String menuName;
+
+    @ApiModelProperty(value = "父菜单ID")
+    @TableField("parent_id")
+    private Long parentId;
+
+    @ApiModelProperty(value = "显示顺序")
+    @TableField("order_num")
+    private Integer orderNum;
+
+    @ApiModelProperty(value = "路由地址")
+    @TableField("path")
+    private String path;
+
+    @ApiModelProperty(value = "组件路径")
+    @TableField("component")
+    private String component;
+
+    @ApiModelProperty(value = "路由参数")
+    @TableField("query")
+    private String query;
+
+    @ApiModelProperty(value = "是否为外链(0是 1否)")
+    @TableField("is_frame")
+    private Integer isFrame;
+
+    @ApiModelProperty(value = "是否缓存(0缓存 1不缓存)")
+    @TableField("is_cache")
+    private Integer isCache;
+
+    @ApiModelProperty(value = "菜单类型(M目录 C菜单 F按钮)")
+    @TableField("menu_type")
+    private String menuType;
+
+    @ApiModelProperty(value = "菜单状态(0显示 1隐藏)")
+    @TableField("visible")
+    private String visible;
+
+    @ApiModelProperty(value = "菜单状态(0正常 1停用)")
+    @TableField("status")
+    private Boolean status;
+
+    @ApiModelProperty(value = "权限标识")
+    @TableField("perms")
+    private String perms;
+
+    @ApiModelProperty(value = "菜单图标")
+    @TableField("icon")
+    private String icon;
+
+    @ApiModelProperty(value = "创建者")
+    @TableField("create_by")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新者")
+    @TableField("update_by")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("remark")
+    private String remark;
+
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java
new file mode 100644
index 0000000..7505157
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetPartnerList.java
@@ -0,0 +1,19 @@
+package com.ruoyi.chargingPile.api.query;
+
+import com.ruoyi.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 13:54
+ */
+@Data
+@ApiModel
+public class GetPartnerList extends BasePage {
+	@ApiModelProperty(value = "合作商名称")
+	private String name;
+	@ApiModelProperty(value = "角色id")
+	private Integer roleId;
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetSiteList.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetSiteList.java
new file mode 100644
index 0000000..2da8f1f
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/GetSiteList.java
@@ -0,0 +1,32 @@
+package com.ruoyi.chargingPile.api.query;
+
+import com.ruoyi.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.Value;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/8 9:24
+ */
+@Data
+@ApiModel
+public class GetSiteList extends BasePage {
+	@ApiModelProperty(value = "站点名称")
+	private String name;
+	@ApiModelProperty(value = "合作商名称")
+	private String partnerName;
+	@ApiModelProperty(value = "站点类型(0=其他,1=公共,2=个人,3=公交(专业),4=环卫(专用),5=物流(专用),6=出租车(专用))")
+	private Integer siteType;
+	@ApiModelProperty(value = "经营类型(1=直营,2=非直营)")
+	private Integer businessCategory;
+	@ApiModelProperty(value = "站点状态(1=正常使用,2=维修中,3=关闭下线)")
+	private Integer status;
+	@ApiModelProperty(value = "站点省代码")
+	private String provinceCode;
+	@ApiModelProperty(value = "站点市代码")
+	private String cityCode;
+	@ApiModelProperty(value = "站点区代码")
+	private String districtsCode;
+}
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Region.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Region.java
new file mode 100644
index 0000000..6502f26
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Region.java
@@ -0,0 +1,46 @@
+package com.ruoyi.other.api.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/8 11:55
+ */
+@Data
+@TableName("t_region")
+public class Region {
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id", type = IdType.AUTO)
+	private Integer id;
+	/**
+	 * 城市名称
+	 */
+	@TableField("name")
+	private String name;
+	/**
+	 * 行政区划代码
+	 */
+	@TableField("code")
+	private String code;
+	/**
+	 * 城市code
+	 */
+	@TableField("citycode")
+	private String citycode;
+	/**
+	 * 父级ID
+	 */
+	@TableField("parent_id")
+	private Integer parentId;
+	/**
+	 * 英文名称
+	 */
+	@TableField("english")
+	private String english;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
index 3d3d0d2..8163aa5 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
@@ -62,6 +62,11 @@
 
     /** 用户头像 */
     private String avatar;
+    /**
+     * 登录账号
+     */
+    @TableField("account")
+    private String account;
 
     /** 密码 */
     @NotBlank(message = "密码不能为空")
@@ -265,7 +270,15 @@
     {
         this.avatar = avatar;
     }
-
+    
+    public String getAccount() {
+        return account;
+    }
+    
+    public void setAccount(String account) {
+        this.account = account;
+    }
+    
     public String getPassword()
     {
         return password;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysRoleFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysRoleFallbackFactory.java
new file mode 100644
index 0000000..8901fe8
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysRoleFallbackFactory.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.api.factory;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.feignClient.SysRoleClient;
+import com.ruoyi.system.api.model.GetSysRoleByIds;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author Pu Zhibing
+ */
+@Component
+public class SysRoleFallbackFactory implements FallbackFactory<SysRoleClient> {
+    
+    @Override
+    public SysRoleClient create(Throwable cause) {
+        return new SysRoleClient(){
+            @Override
+            public R<List<SysRole>> getSysRoleByIds(GetSysRoleByIds ids) {
+                return R.fail("获取角色失败:" + cause.getMessage());
+            }
+        };
+    }
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java
index 83a7f0c..ba46eb4 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java
@@ -89,6 +89,11 @@
             public R<SysUser> queryUserByUserName(String userName) {
                 return R.fail("通过账号查询用户失败:" + cause.getMessage());
             }
+    
+            @Override
+            public R addSysUser(SysUser user) {
+                return R.fail("添加用户失败:" + cause.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysRoleClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysRoleClient.java
new file mode 100644
index 0000000..10edd4c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysRoleClient.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.api.feignClient;
+
+import com.ruoyi.common.core.constant.ServiceNameConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.factory.SysRoleFallbackFactory;
+import com.ruoyi.system.api.model.GetSysRoleByIds;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 15:14
+ */
+@FeignClient(contextId = "SysRoleClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysRoleFallbackFactory.class)
+public interface SysRoleClient {
+	
+	@GetMapping("/role/getSysRoleByIds")
+	public R<List<SysRole>> getSysRoleByIds(GetSysRoleByIds ids);
+
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
index c8dcc52..ad41b7f 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
@@ -86,6 +86,15 @@
      */
     @PostMapping("/user/queryUserByPhone")
     R<SysUser>  queryUserByPhone(@RequestBody String phone);
+    
+    
+    /**
+     * 根据账号获取用户数据
+     * @param account
+     * @return
+     */
+    @PostMapping("/user/queryUserByAccount")
+    R<SysUser>  queryUserByAccount(@RequestBody String account);
 
     /**
      * 通过账号查询用户
@@ -94,5 +103,20 @@
      */
     @PostMapping("/user/queryUserByUserName")
     R<SysUser>  queryUserByUserName(@RequestBody String userName);
-
+    
+    /**
+     * 新增加用户信息
+     * @param user
+     */
+    @PostMapping("/user/addSysUser")
+    R addSysUser(SysUser user);
+    
+    
+    /**
+     * 重置密码
+     * @param user
+     * @return
+     */
+    @PostMapping("/user/resetPassword")
+    R resetPassword(SysUser user);
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/GetSysRoleByIds.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/GetSysRoleByIds.java
new file mode 100644
index 0000000..3219f16
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/GetSysRoleByIds.java
@@ -0,0 +1,17 @@
+package com.ruoyi.system.api.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 15:06
+ */
+@Data
+public class GetSysRoleByIds {
+	/**
+	 * ids
+	 */
+	private List<Integer> ids;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 4918e8c..7104897 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -2,3 +2,4 @@
 com.ruoyi.system.api.factory.RemoteLogFallbackFactory
 com.ruoyi.system.api.factory.RemoteFileFallbackFactory
 com.ruoyi.system.api.factory.SysUserFallbackFactory
+com.ruoyi.system.api.factory.SysRoleFallbackFactory
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java
index e1e5c2f..a6d2b55 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/TokenConstants.java
@@ -21,5 +21,15 @@
      * 令牌秘钥
      */
     public final static String SECRET = "abcdefghijklmnopqrstuvwxyz";
+    
+    /**
+     * 参数签名
+     */
+    public static final String SING = "sing";
+    
+    /**
+     * 参数随机字符串
+     */
+    public static final String NONCE_STR = "nonce_str";
 
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/AdvertisingStatusEnum.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/AdvertisingStatusEnum.java
new file mode 100644
index 0000000..33aa0dd
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/enums/status/AdvertisingStatusEnum.java
@@ -0,0 +1,45 @@
+package com.ruoyi.common.core.enums.status;
+
+import lombok.Getter;
+
+/**
+ * @Description
+ * @Author xiaochen
+ * @Date 2023/6/8 16:42
+ */
+public enum AdvertisingStatusEnum {
+
+
+    NO(0, "否"),
+    YES(1, "是");
+
+    @Getter
+    private String desc;
+
+
+    @Getter
+    private int code;
+
+
+    AdvertisingStatusEnum(int code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    /**
+     * 通过code获取枚举
+     *
+     * @param code
+     * @return
+     */
+    public static AdvertisingStatusEnum fromCode(Integer code) {
+        AdvertisingStatusEnum[] resultTypes = AdvertisingStatusEnum.values();
+        for (AdvertisingStatusEnum resultType : resultTypes) {
+            if (code.equals(resultType.getCode())) {
+                return resultType;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java
index 7778ec2..951d83d 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java
@@ -53,8 +53,7 @@
     {
         super.put(CODE_TAG, code);
         super.put(MSG_TAG, msg);
-        if (StringUtils.isNotNull(data))
-        {
+        if (StringUtils.isNotNull(data)) {
             super.put(DATA_TAG, data);
         }
     }
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
index 101de63..d59c735 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -3,6 +3,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
@@ -27,8 +28,7 @@
  * @author ruoyi
  */
 @Component
-public class AuthFilter implements GlobalFilter, Ordered
-{
+public class AuthFilter implements GlobalFilter, Ordered {
     private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);
 
     // 排除过滤的 uri 地址,nacos自行添加
@@ -37,43 +37,48 @@
 
     @Autowired
     private RedisService redisService;
+    
+    @Value("${security.sign}")
+    private boolean parameter_signature;
 
 
     @Override
-    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain)
-    {
+    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         ServerHttpRequest request = exchange.getRequest();
         ServerHttpRequest.Builder mutate = request.mutate();
 
         String url = request.getURI().getPath();
         // 跳过不需要验证的路径
-        if (StringUtils.matches(url, ignoreWhite.getWhites()))
-        {
+        if (StringUtils.matches(url, ignoreWhite.getWhites())) {
             return chain.filter(exchange);
         }
         String token = getToken(request);
-        if (StringUtils.isEmpty(token))
-        {
+        if (StringUtils.isEmpty(token)) {
             return unauthorizedResponse(exchange, "令牌不能为空");
         }
         Claims claims = JwtUtils.parseToken(token);
-        if (claims == null)
-        {
+        if (claims == null) {
             return unauthorizedResponse(exchange, "令牌已过期或验证不正确!");
         }
         String userkey = JwtUtils.getUserKey(claims);
         boolean islogin = redisService.hasKey(getTokenKey(userkey));
-        if (!islogin)
-        {
+        if (!islogin) {
             return unauthorizedResponse(exchange, "登录状态已过期");
         }
         String userid = JwtUtils.getUserId(claims);
         String username = JwtUtils.getUserName(claims);
-        if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))
-        {
+        if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) {
             return unauthorizedResponse(exchange, "令牌验证失败");
         }
-
+        if(parameter_signature){
+            String sign = request.getHeaders().getFirst(TokenConstants.SING);
+            String nonce_str = request.getHeaders().getFirst(TokenConstants.NONCE_STR);
+            if(StringUtils.isEmpty(sign) || StringUtils.isEmpty(nonce_str)){
+                log.error("[鉴权签名异常处理]请求路径:{}", exchange.getRequest().getPath());
+                return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "签名校验失败", HttpStatus.BAD_REQUEST);
+            }
+        }
+        
         // 设置用户信息到请求
         addHeader(mutate, SecurityConstants.USER_KEY, userkey);
         addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
@@ -83,10 +88,8 @@
         return chain.filter(exchange.mutate().request(mutate.build()).build());
     }
 
-    private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value)
-    {
-        if (value == null)
-        {
+    private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value) {
+        if (value == null) {
             return;
         }
         String valueStr = value.toString();
@@ -94,13 +97,11 @@
         mutate.header(name, valueEncode);
     }
 
-    private void removeHeader(ServerHttpRequest.Builder mutate, String name)
-    {
+    private void removeHeader(ServerHttpRequest.Builder mutate, String name) {
         mutate.headers(httpHeaders -> httpHeaders.remove(name)).build();
     }
 
-    private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg)
-    {
+    private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg) {
         log.error("[鉴权异常处理]请求路径:{}", exchange.getRequest().getPath());
         return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED);
     }
@@ -116,8 +117,7 @@
     /**
      * 获取请求token
      */
-    private String getToken(ServerHttpRequest request)
-    {
+    private String getToken(ServerHttpRequest request) {
         String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION);
         // 如果前端设置了令牌前缀,则裁剪掉前缀
         if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX))
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/HMACSHA1.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/HMACSHA1.java
new file mode 100644
index 0000000..976f086
--- /dev/null
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/HMACSHA1.java
@@ -0,0 +1,37 @@
+package com.ruoyi.gateway.filter;
+
+
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+public class HMACSHA1 {
+
+	private static final String MAC_NAME = "HmacSHA1";
+	private static final String ENCODING = "UTF-8";
+
+	/**
+	 * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
+	 * 
+	 * @param encryptText
+	 *            被签名的字符串
+	 * @param encryptKey
+	 *            密钥
+	 * @return
+	 * @throws Exception
+	 */
+	public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
+		byte[] data = encryptKey.getBytes(ENCODING);
+		// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
+		Mac mac = Mac.getInstance(MAC_NAME);
+		SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
+		// 生成一个指定 Mac 算法 的 Mac 对象
+		// 用给定密钥初始化 Mac 对象
+		mac.init(secretKey);
+
+		byte[] text = encryptText.getBytes(ENCODING);
+		// 完成 Mac 操作
+		return mac.doFinal(text);
+	}
+	
+}
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java
index 6fe6285..fe449a9 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java
@@ -1,7 +1,19 @@
 package com.ruoyi.gateway.filter;
 
 import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.constant.HttpStatus;
+import com.ruoyi.common.core.constant.TokenConstants;
+import com.ruoyi.common.core.utils.ServletUtils;
+import org.apache.commons.codec.binary.Base64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
@@ -34,9 +46,13 @@
 @ConditionalOnProperty(value = "security.xss.enabled", havingValue = "true")
 public class XssFilter implements GlobalFilter, Ordered
 {
+    private static final Logger log = LoggerFactory.getLogger(XssFilter.class);
     // 跨站脚本的 xss 配置,nacos自行添加
     @Autowired
     private XssProperties xss;
+    
+    @Value("${security.sign}")
+    private boolean parameter_signature;
 
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain)
@@ -65,6 +81,10 @@
             return chain.filter(exchange);
         }
         ServerHttpRequestDecorator httpRequestDecorator = requestDecorator(exchange);
+        if(parameter_signature && !authSign(httpRequestDecorator)){
+            log.error("[鉴权签名异常处理]请求路径:{}", exchange.getRequest().getPath());
+            return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "签名校验失败", HttpStatus.BAD_REQUEST);
+        }
         return chain.filter(exchange.mutate().request(httpRequestDecorator).build());
 
     }
@@ -120,7 +140,100 @@
         String header = exchange.getRequest().getHeaders().getFirst(HttpHeaders.CONTENT_TYPE);
         return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE);
     }
-
+    
+    
+    /**
+     * 签名校验
+     * @param httpRequestDecorator
+     * @return
+     */
+    private boolean authSign(ServerHttpRequestDecorator httpRequestDecorator) {
+        HttpHeaders headers = httpRequestDecorator.getHeaders();
+        AtomicReference<JSONObject> jsonObject = new AtomicReference<>(new JSONObject());
+        httpRequestDecorator.getBody().buffer().map(dataBuffers -> {
+            DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory();
+            DataBuffer join = dataBufferFactory.join(dataBuffers);
+            byte[] content = new byte[join.readableByteCount()];
+            join.read(content);
+            DataBufferUtils.release(join);
+            String bodyStr = new String(content, StandardCharsets.UTF_8);
+            jsonObject.set(JSON.parseObject(bodyStr));
+        
+            // 防xss攻击过滤
+            bodyStr = EscapeUtil.clean(bodyStr);
+            // 转成字节
+            byte[] bytes = bodyStr.getBytes();
+            NettyDataBufferFactory nettyDataBufferFactory = new NettyDataBufferFactory(ByteBufAllocator.DEFAULT);
+            DataBuffer buffer = nettyDataBufferFactory.allocateBuffer(bytes.length);
+            buffer.write(bytes);
+            return buffer;
+        });
+        JSONObject params = jsonObject.get();
+        String sign = headers.getFirst(TokenConstants.SING);
+        if(StringUtils.isEmpty(sign)){
+            return false;
+        }
+        String nonce_str = headers.getFirst(TokenConstants.NONCE_STR);
+        if(StringUtils.isEmpty(nonce_str)){
+            return false;
+        }
+    
+        String signUrlEncode = localSignUrl(params, nonce_str);
+        signUrlEncode = signUrlEncode.replaceAll("& #40;", "\\(")
+                .replaceAll("& #41;", "\\)")
+                .replaceAll("\\+", " ");
+        if(sign.equals(signUrlEncode)){
+            return true;
+        }
+        return false;
+    }
+    
+    
+    /**
+     * 组装签名路径
+     * @param params
+     * @return
+     */
+    public static String localSignUrl(JSONObject params, String key) {
+        List<String> keySet = new ArrayList<>(params.keySet());
+        // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
+        Collections.sort(keySet, new Comparator<String>() {
+            @Override
+            public int compare(String o1, String o2) {
+                return o1.compareTo(o2);
+            }
+        });
+        // 构造签名键值对的格式
+        StringBuilder sb = new StringBuilder();
+        for (String k : keySet) {
+            String v = params.getString(k);
+            if(StringUtils.isNotEmpty(v)){
+                sb.append(k + "=" + v + "&");
+            }
+        }
+        String signUrl = sb.substring(0, sb.length() - 1);
+        return signUrlEncode(signUrl, key);
+    }
+    
+    
+    /**
+     * 签名字符串加密
+     * @param signUrl
+     * @param encryptKey
+     * @return
+     */
+    public static String signUrlEncode(String signUrl, String encryptKey) {
+        byte[] signByte = new byte[0];
+        try {
+            signByte = HMACSHA1.HmacSHA1Encrypt(signUrl, encryptKey);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        String localSign = Base64.encodeBase64String(signByte);
+        return localSign;
+    }
+    
+    
     @Override
     public int getOrder()
     {
diff --git a/ruoyi-gateway/src/main/resources/bootstrap.yml b/ruoyi-gateway/src/main/resources/bootstrap.yml
index 71689d1..8fb6e4a 100644
--- a/ruoyi-gateway/src/main/resources/bootstrap.yml
+++ b/ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -41,12 +41,12 @@
       eager: true
       transport:
         # 控制台地址
-        dashboard: 192.168.110.34:8718
+        dashboard: 192.168.110.169:8718
       # nacos配置持久化
       datasource:
         ds1:
           nacos:
-            server-addr: 127.0.0.1:8848
+            server-addr: 192.168.110.169:8848
             dataId: sentinel-ruoyi-gateway
             groupId: DEFAULT_GROUP
             data-type: json
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
index 722a87a..537141f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
@@ -6,6 +6,7 @@
 import com.ruoyi.common.security.annotation.EnableCustomConfig;
 import com.ruoyi.common.security.annotation.EnableRyFeignClients;
 import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 /**
  * 系统模块
@@ -17,6 +18,7 @@
 @EnableCustomSwagger2
 @EnableRyFeignClients
 @SpringBootApplication
+@EnableTransactionManagement
 public class RuoYiSystemApplication
 {
     public static void main(String[] args)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
index cb0705f..59337ac 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
@@ -12,7 +12,9 @@
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.system.api.model.GetSysRoleByIds;
 import com.ruoyi.system.domain.SysMenus;
 import com.ruoyi.system.domain.SysRoleMenu;
 import com.ruoyi.system.domain.SysUserRole;
@@ -484,4 +486,17 @@
         ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
         return ajax;
     }
+    
+    
+    /**
+     * 根据id集合获取数据
+     * @param ids
+     * @return
+     */
+    @ResponseBody
+    @GetMapping(value = "/getSysRoleByIds")
+    public R<List<SysRole>> getSysRoleByIds(@RequestBody GetSysRoleByIds ids){
+        List<SysRole> sysRoleByIds = roleService.getSysRoleByIds(ids.getIds());
+        return R.ok(sysRoleByIds);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index 87fbfa6..28d1593 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -105,7 +105,7 @@
         user.setRoleType(1);
         int i = userService.insertUser(user);
         SysUserRole sysUserRole = new SysUserRole();
-        sysUserRole.setRoleId(1l);
+        sysUserRole.setRoleId(user.getRoleId());
         sysUserRole.setUserId(user.getUserId());
         int i1 = userRoleService.insertSysUserRole(sysUserRole);
         return AjaxResult.success(i1);
@@ -356,15 +356,21 @@
     }
 
     @PostMapping("/updateSysUser")
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
     public R<Boolean> updateSysUser(@RequestBody SysUser sysUser) {
         try {
             sysUser.setUpdateBy(SecurityUtils.getUsername());
             sysUser.setUpdateTime(new Date());
             userService.updateUser(sysUser);
+            userRoleService.deleteSysUserRoleByUserId(sysUser.getUserId());
+            SysUserRole sysUserRole = new SysUserRole();
+            sysUserRole.setRoleId(sysUser.getRoleId());
+            sysUserRole.setUserId(sysUser.getUserId());
+            userRoleService.insertSysUserRole(sysUserRole);
             return R.ok(true);
         } catch (Exception e) {
             e.printStackTrace();
-            return R.ok();
+            return R.fail();
         }
     }
 
@@ -669,6 +675,19 @@
                 .last("LIMIT 1"));
         return R.ok(user);
     }
+    
+    /**
+     * 根据账号获取用户数据
+     * @param account
+     * @return
+     */
+    @PostMapping("/queryUserByAccount")
+    public R<SysUser>  queryUserByAccount(@RequestBody String account){
+        SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class)
+                .eq(SysUser::getAccount, account)
+                .eq(SysUser::getDelFlag, "0"));
+        return R.ok(user);
+    }
 
 
     /**
@@ -676,6 +695,7 @@
      * @param userName
      * @return
      */
+    @ResponseBody
     @PostMapping("/queryUserByUserName")
     public R<SysUser> queryUserByUserName(@RequestBody String userName){
         SysUser user = userService.getOne(Wrappers.lambdaQuery(SysUser.class)
@@ -683,5 +703,44 @@
                 .last("LIMIT 1"));
         return R.ok(user);
     }
-
+    
+    
+    /**
+     * 添加管理员
+     * @param user
+     */
+    @ResponseBody
+    @PostMapping("/addSysUser")
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
+    public R addSysUser(@RequestBody SysUser user){
+        user.setUserName(user.getPhonenumber());
+        if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){
+            user.setNickName(user.getPhonenumber());
+        }
+        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
+            throw new RuntimeException("手机号已开通账号");
+        }
+        if (StringUtils.isNotEmpty(user.getAccount()) && !userService.checkAccountUnique(user)) {
+            throw new RuntimeException("登录账号已存在");
+        }
+        user.setCreateBy(SecurityUtils.getUsername());
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        user.setRoleType(1);
+        userService.insertUser(user);
+        SysUserRole sysUserRole = new SysUserRole();
+        sysUserRole.setRoleId(user.getRoleId());
+        sysUserRole.setUserId(user.getUserId());
+        userRoleService.insertSysUserRole(sysUserRole);
+        return R.ok();
+    }
+    
+    
+    @ResponseBody
+    @PostMapping("/resetPassword")
+    public R resetPassword(@RequestBody SysUser user) {
+        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+        user.setUpdateBy(SecurityUtils.getUsername());
+        userService.resetPwd(user);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
index a06f172..7fbf45e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
@@ -109,6 +109,12 @@
     public int deleteRoleByIds(Long[] roleIds);
 
     List<SysRole> isExitUpdate(@Param("roleName") String roleName, @Param("roleId") Long roleId, @Param("companyId") Integer companyId);
-
-
+    
+    
+    /**
+     * 根据id获取数据
+     * @param ids
+     * @return
+     */
+    List<SysRole> getSysRoleByIds(@Param("ids") List<Integer> ids);
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index 642cede..17dedc0 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -120,6 +120,15 @@
      * @return 结果
      */
     public SysUser checkPhoneUnique(String phonenumber);
+    
+    /**
+     * 校验登录账号是否唯一
+     * @param account 登录账号
+     * @return
+     */
+    SysUser checkAccountUnique(String account);
+    
+    
 
     /**
      * 校验email是否唯一
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
index 157b779..049a4b2 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
@@ -174,5 +174,12 @@
     public int insertAuthUsers(Long roleId, Long[] userIds);
 
     List<SysRole> isExitUpdate(String roleName, Long roleId,Integer companyId);
-
+    
+    
+    /**
+     * 根据id获取数据
+     * @param ids 数据id集合
+     * @return
+     */
+    List<SysRole> getSysRoleByIds(List<Integer> ids);
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 3f08d28..d4f7f95 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -85,6 +85,8 @@
      * @return 结果
      */
     public boolean checkPhoneUnique(SysUser user);
+    
+    boolean checkAccountUnique(SysUser user);
 
     /**
      * 校验email是否唯一
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index 7840000..fea5840 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -443,4 +443,14 @@
     public List<SysRole> isExitUpdate(String roleName, Long roleId,Integer companyId) {
         return roleMapper.isExitUpdate(roleName,roleId,companyId);
     }
+    
+    /**
+     * 根据id获取数据
+     * @param ids 数据id集合
+     * @return
+     */
+    @Override
+    public List<SysRole> getSysRoleByIds(List<Integer> ids) {
+        return this.baseMapper.getSysRoleByIds(ids);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 903350f..5bf158f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -196,7 +196,18 @@
         }
         return UserConstants.UNIQUE;
     }
-
+    
+    
+    @Override
+    public boolean checkAccountUnique(SysUser user) {
+        SysUser info = userMapper.checkAccountUnique(user.getAccount());
+        if (StringUtils.isNotNull(info) )
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+    
     /**
      * 校验email是否唯一
      *
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
index 5984eaa..a22d9b5 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -163,4 +163,13 @@
         </foreach> 
  	</delete>
  	
+	
+	
+	<select id="getSysRoleByIds" resultMap="SysRoleResult">
+		<include refid="selectRoleVo"/>
+		where id in
+		<foreach collection="ids" item="item" index="index" separator="," open="(" close=")">
+			#{item}
+		</foreach>
+	</select>
 </mapper> 
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index e7df625..78f62da 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -13,6 +13,7 @@
         <result property="phonenumber"  column="phonenumber"  />
         <result property="sex"          column="sex"          />
         <result property="avatar"       column="avatar"       />
+	    <result property="account"      column="account"      />
         <result property="password"     column="password"     />
         <result property="status"       column="status"       />
         <result property="delFlag"      column="del_flag"     />
@@ -120,6 +121,11 @@
 		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
 	</select>
 	
+	
+	<select id="checkAccountUnique" resultMap="SysUserResult">
+		select user_id, account from sys_user where account = #{account} and del_flag = '0' limit 1
+	</select>
+	
 	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
 	</select>
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
index f8422c4..1990b61 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
@@ -1,8 +1,15 @@
 package com.ruoyi.account.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.account.api.model.TAppUserAddress;
+import com.ruoyi.account.service.TAppUserAddressService;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * <p>
@@ -16,5 +23,55 @@
 @RequestMapping("/t-app-user-address")
 public class TAppUserAddressController {
 
+    private final TAppUserAddressService appUserAddressService;
+
+    @Autowired
+    public TAppUserAddressController(TAppUserAddressService appUserAddressService) {
+        this.appUserAddressService = appUserAddressService;
+    }
+
+    /**
+     * 查询用户地址列表
+     */
+    @ApiOperation(tags = {"小程序-用户地址"},value = "查询用户地址列表")
+    @GetMapping(value = "/queryAddress")
+    public AjaxResult<List<TAppUserAddress>> queryAddress() {
+        // TODO 用户id
+        return AjaxResult.ok(appUserAddressService.list(Wrappers.<TAppUserAddress>lambdaQuery().eq(TAppUserAddress::getAppUserId, null)));
+    }
+
+
+    /**
+     * 添加用户地址管理
+     */
+    @ApiOperation(tags = {"小程序-用户地址"},value = "添加用户地址")
+    @PostMapping(value = "/add")
+    public AjaxResult<Boolean> add(@RequestBody TAppUserAddress dto) {
+        // TODO 用户id
+        // 修改用户默认地址
+        appUserAddressService.updateDefaultAddress(dto.getDefaultAddress(),dto.getAppUserId());
+        return AjaxResult.ok(appUserAddressService.save(dto));
+    }
+
+    /**
+     * 修改用户地址
+     */
+    @ApiOperation(tags = {"小程序-用户地址"},value = "修改用户地址")
+    @PostMapping(value = "/update")
+    public AjaxResult<Boolean> update(@RequestBody TAppUserAddress dto) {
+        // 修改用户默认地址
+        appUserAddressService.updateDefaultAddress(dto.getDefaultAddress(),dto.getAppUserId());
+        return AjaxResult.ok(appUserAddressService.updateById(dto));
+    }
+
+    /**
+     * 删除用户地址
+     */
+    @ApiOperation(tags = {"小程序-用户地址"},value = "删除用户地址")
+    @DeleteMapping(value = "/deleteById")
+    public AjaxResult<Boolean> deleteById(@RequestParam Integer id) {
+        return AjaxResult.ok(appUserAddressService.removeById(id));
+    }
+
 }
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserAddressService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserAddressService.java
index 1c95c4a..a66141a 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserAddressService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserAddressService.java
@@ -13,4 +13,10 @@
  */
 public interface TAppUserAddressService extends IService<TAppUserAddress> {
 
+    /**
+     * 修改用户默认地址
+     * @param defaultAddress
+     */
+    void updateDefaultAddress(Integer defaultAddress,Long appUserId);
+
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserAddressServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserAddressServiceImpl.java
index d49af84..3c00b35 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserAddressServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserAddressServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.account.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.model.TAppUserAddress;
 import com.ruoyi.account.mapper.TAppUserAddressMapper;
@@ -17,4 +18,10 @@
 @Service
 public class TAppUserAddressServiceImpl extends ServiceImpl<TAppUserAddressMapper, TAppUserAddress> implements TAppUserAddressService {
 
+    @Override
+    public void updateDefaultAddress(Integer defaultAddress,Long appUserId) {
+        if (defaultAddress == 1) {
+            this.update(Wrappers.<TAppUserAddress>lambdaUpdate().set(TAppUserAddress::getDefaultAddress, 0).eq(TAppUserAddress::getAppUserId, appUserId));
+        }
+    }
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/pom.xml b/ruoyi-service/ruoyi-chargingPile/pom.xml
index d6fee25..eeef897 100644
--- a/ruoyi-service/ruoyi-chargingPile/pom.xml
+++ b/ruoyi-service/ruoyi-chargingPile/pom.xml
@@ -41,6 +41,11 @@
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
         </dependency>
+        
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
+        </dependency>
 
         <!-- SpringBoot Actuator -->
         <dependency>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java
index 733c4f8..25eaf50 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/RuoYiChargingPileApplication.java
@@ -7,6 +7,7 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 /**
  * 账户模块
@@ -18,6 +19,7 @@
 @EnableRyFeignClients
 @SpringBootApplication
 @EnableScheduling//开启定时任务
+@EnableTransactionManagement//开启事务
 public class RuoYiChargingPileApplication {
     public static void main(String[] args) {
         SpringApplication.run(RuoYiChargingPileApplication.class, args);
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
new file mode 100644
index 0000000..ba93e47
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
@@ -0,0 +1,100 @@
+package com.ruoyi.chargingPile.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.ruoyi.chargingPile.api.dto.PartnerListDTO;
+import com.ruoyi.chargingPile.api.model.Partner;
+import com.ruoyi.chargingPile.api.query.GetPartnerList;
+import com.ruoyi.chargingPile.dto.ResetPassword;
+import com.ruoyi.chargingPile.service.IPartnerService;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 13:49
+ */
+@RestController
+@RequestMapping("/partner")
+public class PartnerController {
+	
+	@Resource
+	private IPartnerService partnerService;
+
+	
+	
+	
+	@ResponseBody
+	@GetMapping("/getPartnerList")
+	@ApiOperation(value = "获取合作商列表", tags = {"管理后台-合作商管理"})
+	public AjaxResult<PageInfo<PartnerListDTO>> getPartnerList(@RequestBody GetPartnerList partnerList){
+		PageInfo<PartnerListDTO> list = partnerService.getPartnerList(partnerList);
+		return AjaxResult.success(list);
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/addPartner")
+	@ApiOperation(value = "添加合作商", tags = {"管理后台-合作商管理"})
+	public AjaxResult addPartner(@RequestBody Partner partner){
+		return partnerService.addPartner(partner);
+	}
+	
+	
+	
+	@ResponseBody
+	@GetMapping("/getPartner/{id}")
+	@ApiOperation(value = "获取合作商详情", tags = {"管理后台-合作商管理"})
+	@ApiImplicitParams({
+			@ApiImplicitParam(value = "合作商id", name = "id", dataTypeClass = Integer.class, required = true)
+	})
+	public AjaxResult<Partner> getPartner(@PathVariable Integer id){
+		Partner partner = partnerService.getPartner(id);
+		return AjaxResult.success(partner);
+	}
+	
+	
+	
+	@ResponseBody
+	@PostMapping("/editPartner")
+	@ApiOperation(value = "编辑合作商", tags = {"管理后台-合作商管理"})
+	public AjaxResult editPartner(@RequestBody Partner partner){
+		return partnerService.editPartner(partner);
+	}
+	
+	
+	
+	@ResponseBody
+	@DeleteMapping("/delPartner/{id}")
+	@ApiOperation(value = "删除合作商", tags = {"管理后台-合作商管理"})
+	@ApiImplicitParams({
+			@ApiImplicitParam(value = "合作商id", name = "id", dataTypeClass = Integer.class, required = true)
+	})
+	public AjaxResult delPartner(@PathVariable("id") Integer id){
+		return partnerService.delPartner(id);
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/resetPassword")
+	@ApiOperation(value = "合作商重置密码", tags = {"管理后台-合作商管理"})
+	public AjaxResult resetPassword(@RequestBody ResetPassword resetPassword){
+		return partnerService.resetPassword(resetPassword);
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/getPartner")
+	@ApiOperation(value = "获取所有合作商", tags = {"管理后台-站点管理"})
+	public AjaxResult<List<Partner>> getPartner(){
+		List<Partner> list = partnerService.list(new LambdaQueryWrapper<Partner>().eq(Partner::getDelFlag, 0));
+		return AjaxResult.success(list);
+	}
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
new file mode 100644
index 0000000..5d7f589
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -0,0 +1,65 @@
+package com.ruoyi.chargingPile.controller;
+
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
+import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.query.GetSiteList;
+import com.ruoyi.chargingPile.service.ISiteService;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 19:56
+ */
+@RestController
+@RequestMapping("/site")
+public class SiteController {
+	
+	@Resource
+	private ISiteService siteService;
+	
+	
+	@ResponseBody
+	@GetMapping("/getSiteList")
+	@ApiOperation(value = "获取站点列表", tags = {"管理后台-站点管理"})
+	public AjaxResult<PageInfo<GetSiteListDTO>> getSiteList(@RequestBody GetSiteList siteList){
+		PageInfo<GetSiteListDTO> list = siteService.getSiteList(siteList);
+		return AjaxResult.success(list);
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/getSiteList")
+	@ApiOperation(value = "添加站点", tags = {"管理后台-站点管理"})
+	public AjaxResult addSite(@RequestBody Site site){
+		return siteService.addSite(site);
+	}
+	
+	@ResponseBody
+	@PostMapping("/editSite")
+	@ApiOperation(value = "编辑站点", tags = {"管理后台-站点管理"})
+	public AjaxResult editSite(@RequestBody Site site){
+		return siteService.editSite(site);
+	}
+	
+	@ResponseBody
+	@DeleteMapping("/delSite/{id}")
+	@ApiOperation(value = "编辑站点", tags = {"管理后台-站点管理"})
+	@ApiImplicitParams({
+			@ApiImplicitParam(value = "站点id", name = "id", dataTypeClass = Integer.class, required = true)
+	})
+	public AjaxResult delSite(@PathVariable Integer id){
+		return siteService.delSite(id);
+	}
+	
+	
+	
+	
+	
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java
new file mode 100644
index 0000000..1827a95
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileNotificationController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@RestController
+@RequestMapping("/t-charging-pile-notification")
+public class TChargingPileNotificationController {
+
+}
+
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java
new file mode 100644
index 0000000..bfacc04
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@RestController
+@RequestMapping("/t-fault-message")
+public class TFaultMessageController {
+
+}
+
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
new file mode 100644
index 0000000..dbe9c26
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@RestController
+@RequestMapping("/t-parking-record")
+public class TParkingRecordController {
+
+}
+
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TPartnerSiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TPartnerSiteController.java
new file mode 100644
index 0000000..ba92715
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TPartnerSiteController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@RestController
+@RequestMapping("/t-partner-site")
+public class TPartnerSiteController {
+
+}
+
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java
new file mode 100644
index 0000000..e67572d
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@RestController
+@RequestMapping("/t-repair")
+public class TRepairController {
+
+}
+
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TSiteMenuController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TSiteMenuController.java
new file mode 100644
index 0000000..4bb8d88
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TSiteMenuController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@RestController
+@RequestMapping("/t-site-menu")
+public class TSiteMenuController {
+
+}
+
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ResetPassword.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ResetPassword.java
new file mode 100644
index 0000000..ca434c9
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ResetPassword.java
@@ -0,0 +1,18 @@
+package com.ruoyi.chargingPile.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 15:56
+ */
+@Data
+@ApiModel
+public class ResetPassword {
+	@ApiModelProperty(value = "合作商id", required = true)
+	private Integer id;
+	@ApiModelProperty(value = "新密码", required = true)
+	private String password;
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java
new file mode 100644
index 0000000..c5bd072
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/PartnerMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.chargingPile.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.api.dto.PartnerListDTO;
+import com.ruoyi.chargingPile.api.model.Partner;
+import com.ruoyi.chargingPile.api.query.GetPartnerList;
+import com.ruoyi.common.core.web.page.PageInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 13:44
+ */
+public interface PartnerMapper extends BaseMapper<Partner> {
+	
+	/**
+	 * 获取合作商列表
+	 * @param pageInfo
+	 * @param partnerList
+	 * @return
+	 */
+	List<PartnerListDTO> getPartnerList(PageInfo<PartnerListDTO> pageInfo, @Param("item") GetPartnerList partnerList);
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java
new file mode 100644
index 0000000..42263de
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.chargingPile.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
+import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.query.GetSiteList;
+import com.ruoyi.common.core.web.page.PageInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 19:49
+ */
+public interface SiteMapper extends BaseMapper<Site> {
+	
+	
+	/**
+	 * 获取站点列表
+	 * @param pageInfo
+	 * @param siteList
+	 * @return
+	 */
+	List<GetSiteListDTO> getSiteList(PageInfo<GetSiteListDTO> pageInfo, @Param("item") GetSiteList siteList);
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java
new file mode 100644
index 0000000..5cbc4f4
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileNotificationMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.api.model.TChargingPileNotification;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TChargingPileNotificationMapper extends BaseMapper<TChargingPileNotification> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java
new file mode 100644
index 0000000..1b2b56e
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.api.model.TFaultMessage;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TFaultMessageMapper extends BaseMapper<TFaultMessage> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java
new file mode 100644
index 0000000..0876ee7
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.api.model.TParkingRecord;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TParkingRecordMapper extends BaseMapper<TParkingRecord> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TPartnerSiteMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TPartnerSiteMapper.java
new file mode 100644
index 0000000..1ed9edc
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TPartnerSiteMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.api.model.TPartnerSite;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TPartnerSiteMapper extends BaseMapper<TPartnerSite> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java
new file mode 100644
index 0000000..e649544
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.api.model.TRepair;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TRepairMapper extends BaseMapper<TRepair> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TSiteMenuMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TSiteMenuMapper.java
new file mode 100644
index 0000000..57d50bc
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TSiteMenuMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.api.model.TSiteMenu;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TSiteMenuMapper extends BaseMapper<TSiteMenu> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java
new file mode 100644
index 0000000..27f1720
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/IPartnerService.java
@@ -0,0 +1,62 @@
+package com.ruoyi.chargingPile.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.api.dto.PartnerListDTO;
+import com.ruoyi.chargingPile.api.model.Partner;
+import com.ruoyi.chargingPile.api.query.GetPartnerList;
+import com.ruoyi.chargingPile.dto.ResetPassword;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 13:48
+ */
+public interface IPartnerService extends IService<Partner> {
+	
+	
+	/**
+	 * 获取合作商列表数据
+	 * @param partnerList
+	 * @return
+	 */
+	PageInfo<PartnerListDTO> getPartnerList(GetPartnerList partnerList);
+	
+	
+	/**
+	 * 添加合作商
+	 * @param partner
+	 * @return
+	 */
+	AjaxResult addPartner(Partner partner);
+	
+	
+	/**
+	 * 获取合作商详情
+	 * @param id 合作商id
+	 * @return
+	 */
+	Partner getPartner(Integer id);
+	
+	/**
+	 * 编辑合作商数据
+	 * @param partner
+	 * @return
+	 */
+	AjaxResult editPartner(Partner partner);
+	
+	/**
+	 * 删除合作商
+	 * @param id
+	 */
+	AjaxResult delPartner(Integer id);
+	
+	/**
+	 * 重置密码
+	 * @param resetPassword
+	 */
+	AjaxResult resetPassword(ResetPassword resetPassword);
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java
new file mode 100644
index 0000000..5e136d6
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java
@@ -0,0 +1,49 @@
+package com.ruoyi.chargingPile.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
+import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.query.GetSiteList;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 19:54
+ */
+public interface ISiteService extends IService<Site> {
+	
+	
+	/**
+	 * 获取站点管理列表
+	 * @param siteList
+	 * @return
+	 */
+	PageInfo<GetSiteListDTO> getSiteList(GetSiteList siteList);
+	
+	
+	/**
+	 * 添加站点信息
+	 * @param site
+	 * @return
+	 */
+	AjaxResult addSite(Site site);
+	
+	
+	/**
+	 * 编辑站点
+	 * @param site
+	 * @return
+	 */
+	AjaxResult editSite(Site site);
+	
+	
+	/**
+	 * 删除站点
+	 * @param id
+	 * @return
+	 */
+	AjaxResult delSite(Integer id);
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java
new file mode 100644
index 0000000..077787b
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileNotificationService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.api.model.TChargingPileNotification;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TChargingPileNotificationService extends IService<TChargingPileNotification> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java
new file mode 100644
index 0000000..3605b47
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.api.model.TFaultMessage;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TFaultMessageService extends IService<TFaultMessage> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java
new file mode 100644
index 0000000..1a1b349
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.api.model.TParkingRecord;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TParkingRecordService extends IService<TParkingRecord> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TPartnerSiteService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TPartnerSiteService.java
new file mode 100644
index 0000000..9393963
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TPartnerSiteService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.api.model.TPartnerSite;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TPartnerSiteService extends IService<TPartnerSite> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java
new file mode 100644
index 0000000..8f2487a
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.api.model.TRepair;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TRepairService extends IService<TRepair> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TSiteMenuService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TSiteMenuService.java
new file mode 100644
index 0000000..094b78f
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TSiteMenuService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.chargingPile.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.api.model.TSiteMenu;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+public interface TSiteMenuService extends IService<TSiteMenu> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
new file mode 100644
index 0000000..3e8b420
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
@@ -0,0 +1,291 @@
+package com.ruoyi.chargingPile.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.dto.PartnerListDTO;
+import com.ruoyi.chargingPile.api.model.Partner;
+import com.ruoyi.chargingPile.api.query.GetPartnerList;
+import com.ruoyi.chargingPile.dto.ResetPassword;
+import com.ruoyi.chargingPile.mapper.PartnerMapper;
+import com.ruoyi.chargingPile.service.IPartnerService;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.feignClient.SysRoleClient;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import com.ruoyi.system.api.model.GetSysRoleByIds;
+import io.seata.spring.annotation.GlobalTransactional;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 13:49
+ */
+@Service
+public class PartnerServiceImpl extends ServiceImpl<PartnerMapper, Partner> implements IPartnerService {
+	
+	@Resource
+	private SysRoleClient sysRoleClient;
+	
+	@Resource
+	private SysUserClient sysUserClient;
+	
+	
+	
+	/**
+	 * 获取合作商列表数据
+	 * @param partnerList
+	 * @return
+	 */
+	@Override
+	public PageInfo<PartnerListDTO> getPartnerList(GetPartnerList partnerList) {
+		PageInfo<PartnerListDTO> pageInfo = new PageInfo(partnerList.getPageCurr(), partnerList.getPageSize());
+		List<PartnerListDTO> list = this.baseMapper.getPartnerList(pageInfo, partnerList);
+		List<Integer> roleIds = list.stream().map(PartnerListDTO::getRoleId).collect(Collectors.toList());
+		GetSysRoleByIds ids = new GetSysRoleByIds();
+		ids.setIds(roleIds);
+		//获取相关的角色id
+		R<List<SysRole>> r = sysRoleClient.getSysRoleByIds(ids);
+		if(r.getCode() != 200){
+			throw new RuntimeException(r.getMsg());
+		}
+		List<SysRole> data = r.getData();
+		for (PartnerListDTO partnerListDTO : list) {
+			Integer roleId = partnerListDTO.getRoleId();
+			if(null != roleId){
+				continue;
+			}
+			SysRole sysRole = data.stream().filter(s -> roleId.equals(s.getRoleId())).findFirst().get();
+			if(null != sysRole){
+				partnerListDTO.setRoleName(sysRole.getRoleName());
+			}
+		}
+		pageInfo.setRecords(list);
+		return pageInfo;
+	}
+	
+	
+	/**
+	 * 添加合作商
+	 * @param partner
+	 * @return
+	 */
+	@Override
+	@GlobalTransactional//分布式事务
+	public AjaxResult addPartner(Partner partner) {
+		//校验参数和重复数据
+		AjaxResult ajaxResult = addPartnerParameterCheck(partner);
+		if(ajaxResult.isError()){
+			return ajaxResult;
+		}
+		Partner one = this.getOne(new LambdaQueryWrapper<Partner>()
+				.eq(Partner::getCode, partner.getCode())
+				.eq(Partner::getDelFlag, 0)
+		);
+		if(null != one){
+			return AjaxResult.error("合作商ID已存在");
+		}
+		one = this.getOne(new LambdaQueryWrapper<Partner>()
+				.eq(Partner::getAccount, partner.getAccount())
+				.eq(Partner::getDelFlag, 0)
+		);
+		if(null != one){
+			return AjaxResult.error("登录账号不能重复");
+		}
+		//添加新数据
+		this.save(partner);
+		//添加登录账户
+		SysUser user = new SysUser();
+		user.setAccount(partner.getAccount());
+		user.setPhonenumber(partner.getPhoneOne());
+		user.setUserName(partner.getName());
+		user.setNickName(partner.getName());
+		user.setAvatar(partner.getLogoUrl());
+		user.setPassword(partner.getPassword());
+		user.setStatus("0");
+		user.setDelFlag("0");
+		user.setRoleId(partner.getRoleId().longValue());
+		R r = sysUserClient.addSysUser(user);
+		if(200 != r.getCode()){
+			throw new RuntimeException(r.getMsg());
+		}
+		return AjaxResult.success();
+	}
+	
+	
+	/**
+	 * 校验参数是否为空
+	 * @param partner
+	 * @return
+	 */
+	AjaxResult addPartnerParameterCheck(Partner partner){
+		if(StringUtils.isEmpty(partner.getCode())){
+			return AjaxResult.error("合作商ID不能为空");
+		}
+		if(StringUtils.isEmpty(partner.getName())){
+			return AjaxResult.error("合作商名称不能为空");
+		}
+		if(null == partner.getRoleId()){
+			return AjaxResult.error("合作商角色不能为空");
+		}
+		if(StringUtils.isEmpty(partner.getPhoneOne())){
+			return AjaxResult.error("合作商电话1不能为空");
+		}
+		if(StringUtils.isEmpty(partner.getAccount())){
+			return AjaxResult.error("登录账号不能为空");
+		}
+		if(StringUtils.isEmpty(partner.getPassword())){
+			return AjaxResult.error("登录密码不能为空");
+		}
+		return AjaxResult.success();
+	}
+	
+	
+	/**
+	 * 获取合作商详情
+	 * @param id 合作商id
+	 * @return
+	 */
+	@Override
+	public Partner getPartner(Integer id) {
+		Partner partner = this.getById(id);
+		if(null == partner){
+			return partner;
+		}
+		GetSysRoleByIds ids = new GetSysRoleByIds();
+		ids.setIds(Arrays.asList(partner.getRoleId()));
+		//获取相关的角色id
+		R<List<SysRole>> r = sysRoleClient.getSysRoleByIds(ids);
+		if(r.getCode() != 200){
+			throw new RuntimeException(r.getMsg());
+		}
+		List<SysRole> data = r.getData();
+		if(data.size() > 0){
+			partner.setRoleName(data.get(0).getRoleName());
+		}
+		return partner;
+	}
+	
+	
+	/**
+	 * 编辑合作商
+	 * @param partner
+	 * @return
+	 */
+	@Override
+	@GlobalTransactional//分布式事务
+	public AjaxResult editPartner(Partner partner) {
+		//校验参数和重复数据
+		AjaxResult ajaxResult = addPartnerParameterCheck(partner);
+		if(ajaxResult.isError()){
+			return ajaxResult;
+		}
+		Partner one = this.getOne(new LambdaQueryWrapper<Partner>()
+				.eq(Partner::getCode, partner.getCode())
+				.eq(Partner::getDelFlag, 0)
+		);
+		if(null != one && !one.getId().equals(partner.getId())){
+			return AjaxResult.error("合作商ID已存在");
+		}
+		one = this.getOne(new LambdaQueryWrapper<Partner>()
+				.eq(Partner::getAccount, partner.getAccount())
+				.eq(Partner::getDelFlag, 0)
+		);
+		if(null != one && !one.getId().equals(partner.getId())){
+			return AjaxResult.error("登录账号不能重复");
+		}
+		Partner oldPartner = this.getById(partner.getId());
+		SysUser user = sysUserClient.queryUserByAccount(oldPartner.getAccount()).getData();
+		
+		//修改数据
+		this.updateById(partner);
+		//修改登录账户
+		if(null == user){
+			user = new SysUser();
+			user.setStatus("0");
+			user.setDelFlag("0");
+			user.setAccount(partner.getAccount());
+			user.setPhonenumber(partner.getPhoneOne());
+			user.setUserName(partner.getName());
+			user.setNickName(partner.getName());
+			user.setAvatar(partner.getLogoUrl());
+			user.setPassword(partner.getPassword());
+			user.setRoleId(partner.getRoleId().longValue());
+			R r = sysUserClient.addSysUser(user);
+			if(200 != r.getCode()){
+				throw new RuntimeException(r.getMsg());
+			}
+		}else{
+			user.setAccount(partner.getAccount());
+			user.setPhonenumber(partner.getPhoneOne());
+			user.setUserName(partner.getName());
+			user.setNickName(partner.getName());
+			user.setAvatar(partner.getLogoUrl());
+			user.setPassword(partner.getPassword());
+			user.setRoleId(partner.getRoleId().longValue());
+			R r = sysUserClient.updateSysUser(user);
+			if(200 != r.getCode()){
+				throw new RuntimeException(r.getMsg());
+			}
+		}
+		return AjaxResult.success();
+	}
+	
+	
+	/**
+	 * 删除合作商
+	 * @param id 合作商id
+	 */
+	@Override
+	@GlobalTransactional//分布式事务
+	public AjaxResult delPartner(Integer id) {
+		//查询有无关联数据
+		//站点
+		// todo 代码完善
+		//充电桩
+		
+		Partner partner = this.getById(id);
+		if(null == partner){
+			return AjaxResult.error("删除失败");
+		}
+		partner.setDelFlag(true);
+		this.updateById(partner);
+		SysUser user = sysUserClient.queryUserByAccount(partner.getAccount()).getData();
+		user.setDelFlag("2");
+		sysUserClient.updateUser(user);
+		return AjaxResult.success();
+	}
+	
+	
+	/**
+	 * 重置密码
+	 * @param resetPassword
+	 */
+	@Override
+	@GlobalTransactional//分布式事务
+	public AjaxResult resetPassword(ResetPassword resetPassword) {
+		if(null == resetPassword.getId()){
+			return AjaxResult.error("合作商id不能为空");
+		}
+		if(StringUtils.isEmpty(resetPassword.getPassword())){
+			return AjaxResult.error("密码不能为空");
+		}
+		Partner partner = this.getById(resetPassword.getId());
+		partner.setPassword(resetPassword.getPassword());
+		this.updateById(partner);
+		//修改登录账号的密码
+		SysUser user = sysUserClient.queryUserByAccount(partner.getAccount()).getData();
+		user.setPassword(partner.getPassword());
+		sysUserClient.resetPassword(user);
+		return AjaxResult.success();
+	}
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
new file mode 100644
index 0000000..8ed6be2
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -0,0 +1,145 @@
+package com.ruoyi.chargingPile.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
+import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.query.GetSiteList;
+import com.ruoyi.chargingPile.mapper.SiteMapper;
+import com.ruoyi.chargingPile.service.ISiteService;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/7 19:54
+ */
+@Service
+public class SiteServiceImpl extends ServiceImpl<SiteMapper, Site> implements ISiteService {
+	
+	
+	/**
+	 * 获取站点管理列表数据
+	 * @param siteList
+	 * @return
+	 */
+	@Override
+	public PageInfo<GetSiteListDTO> getSiteList(GetSiteList siteList) {
+		PageInfo<GetSiteListDTO> pageInfo = new PageInfo<>(siteList.getPageCurr(), siteList.getPageSize());
+		List<GetSiteListDTO> list = this.baseMapper.getSiteList(pageInfo, siteList);
+		return pageInfo.setRecords(list);
+	}
+	
+	/**
+	 * 添加站点信息
+	 * @param site
+	 * @return
+	 */
+	@Override
+	public AjaxResult addSite(Site site) {
+		AjaxResult ajaxResult = addSiteVerify(site);
+		if(ajaxResult.isError()){
+			return ajaxResult;
+		}
+		Site one = this.getOne(new LambdaQueryWrapper<Site>().eq(Site::getCode, site.getCode()).eq(Site::getDelFlag, 0));
+		if(null != one){
+			return AjaxResult.error("站点编号重复");
+		}
+		site.setMark(0);
+		this.save(site);
+		return AjaxResult.success();
+	}
+	
+	
+	/**
+	 * 编辑站点
+	 * @param site
+	 * @return
+	 */
+	@Override
+	public AjaxResult editSite(Site site) {
+		AjaxResult ajaxResult = addSiteVerify(site);
+		if(ajaxResult.isError()){
+			return ajaxResult;
+		}
+		Site one = this.getOne(new LambdaQueryWrapper<Site>().eq(Site::getCode, site.getCode()).eq(Site::getDelFlag, 0));
+		if(null != one && !one.getCode().equals(site.getCode())){
+			return AjaxResult.error("站点编号重复");
+		}
+		this.updateById(site);
+		return AjaxResult.success();
+	}
+	
+	/**
+	 * 校验必填项
+	 * @param site
+	 * @return
+	 */
+	AjaxResult addSiteVerify(Site site){
+		if(null == site.getPartnerId()){
+			return AjaxResult.error("合作商不能为空");
+		}
+		if(StringUtils.isEmpty(site.getCode())){
+			return AjaxResult.error("站点编号不能为空");
+		}
+		if(StringUtils.isEmpty(site.getName())){
+			return AjaxResult.error("站点名称不能为空");
+		}
+		if(null == site.getSiteType()){
+			return AjaxResult.error("站点类型不能为空");
+		}
+		if(null == site.getBusinessCategory()){
+			return AjaxResult.error("经营类别不能为空");
+		}
+		if(null == site.getStatus()){
+			return AjaxResult.error("站点状态不能为空");
+		}
+		if(null == site.getConstructionSite()){
+			return AjaxResult.error("建设场所不能为空");
+		}
+		if(StringUtils.isEmpty(site.getProvince()) || StringUtils.isEmpty(site.getProvinceCode()) ||
+				StringUtils.isEmpty(site.getCity()) || StringUtils.isEmpty(site.getCityCode()) ||
+				StringUtils.isEmpty(site.getDistricts()) || StringUtils.isEmpty(site.getDistrictsCode())){
+			return AjaxResult.error("所在区域不能为空");
+		}
+		if(StringUtils.isEmpty(site.getAddress())){
+			return AjaxResult.error("详细地址不能为空");
+		}
+		if(StringUtils.isEmpty(site.getLon()) || StringUtils.isEmpty(site.getLat())){
+			return AjaxResult.error("地图位置不能为空");
+		}
+		if(StringUtils.isEmpty(site.getPhone())){
+			return AjaxResult.error("站点电话不能为空");
+		}
+		if(StringUtils.isEmpty(site.getServicePhone())){
+			return AjaxResult.error("服务电话不能为空");
+		}
+		if(null == site.getParkingSpace()){
+			return AjaxResult.error("车位数量不能为空");
+		}
+		if(null == site.getSort()){
+			return AjaxResult.error("排序不能为空");
+		}
+		return AjaxResult.success();
+	}
+	
+	/**
+	 * 删除站点
+	 * @param id 站点id
+	 * @return
+	 */
+	@Override
+	public AjaxResult delSite(Integer id) {
+		//查询是否有关联数据
+		//充电桩
+		// todo 待完善
+		Site site = this.getById(id);
+		site.setDelFlag(true);
+		this.updateById(site);
+		return AjaxResult.success();
+	}
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java
new file mode 100644
index 0000000..f29d988
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileNotificationServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.model.TChargingPileNotification;
+import com.ruoyi.chargingPile.mapper.TChargingPileNotificationMapper;
+import com.ruoyi.chargingPile.service.TChargingPileNotificationService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Service
+public class TChargingPileNotificationServiceImpl extends ServiceImpl<TChargingPileNotificationMapper, TChargingPileNotification> implements TChargingPileNotificationService {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java
new file mode 100644
index 0000000..c5e9e20
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.model.TFaultMessage;
+import com.ruoyi.chargingPile.mapper.TFaultMessageMapper;
+import com.ruoyi.chargingPile.service.TFaultMessageService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Service
+public class TFaultMessageServiceImpl extends ServiceImpl<TFaultMessageMapper, TFaultMessage> implements TFaultMessageService {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
new file mode 100644
index 0000000..12d98fa
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.model.TParkingRecord;
+import com.ruoyi.chargingPile.mapper.TParkingRecordMapper;
+import com.ruoyi.chargingPile.service.TParkingRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Service
+public class TParkingRecordServiceImpl extends ServiceImpl<TParkingRecordMapper, TParkingRecord> implements TParkingRecordService {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TPartnerSiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TPartnerSiteServiceImpl.java
new file mode 100644
index 0000000..564eaa1
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TPartnerSiteServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.model.TPartnerSite;
+import com.ruoyi.chargingPile.mapper.TPartnerSiteMapper;
+import com.ruoyi.chargingPile.service.TPartnerSiteService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Service
+public class TPartnerSiteServiceImpl extends ServiceImpl<TPartnerSiteMapper, TPartnerSite> implements TPartnerSiteService {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java
new file mode 100644
index 0000000..c2a86c8
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.model.TRepair;
+import com.ruoyi.chargingPile.mapper.TRepairMapper;
+import com.ruoyi.chargingPile.service.TRepairService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Service
+public class TRepairServiceImpl extends ServiceImpl<TRepairMapper, TRepair> implements TRepairService {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TSiteMenuServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TSiteMenuServiceImpl.java
new file mode 100644
index 0000000..293aaba
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TSiteMenuServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.model.TSiteMenu;
+import com.ruoyi.chargingPile.mapper.TSiteMenuMapper;
+import com.ruoyi.chargingPile.service.TSiteMenuService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-08
+ */
+@Service
+public class TSiteMenuServiceImpl extends ServiceImpl<TSiteMenuMapper, TSiteMenu> implements TSiteMenuService {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
index 64b605d..f923f2a 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml
@@ -36,6 +36,24 @@
         # 共享配置
         shared-configs:
           - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+
+---
+seata:
+  application-id: seata-chargingPile
+  registry:
+    type: nacos
+    nacos:
+      server-addr: 192.168.110.169:8848
+      namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
+      group: DEFAULT_GROUP
+      application: seata-server #Nacos 中 Seata 名称
+      username: nacos
+      password: nacos
+  tx-service-group: seata_tx_group #事务组(被一个集群管理)
+  service:
+    vgroup-mapping:
+      seata_tx_group: default
+  data-source-proxy-mode: AT
 ---
 spring:
   config:
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml
new file mode 100644
index 0000000..ae39a6f
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/PartnerMapper.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.chargingPile.mapper.PartnerMapper">
+	
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.Partner">
+		<id column="id" property="id" />
+		<result column="code" property="code" />
+		<result column="`name`" property="name" />
+		<result column="role_id" property="roleId" />
+		<result column="logo_url" property="logoUrl" />
+		<result column="rate" property="rate" />
+		<result column="address" property="address" />
+		<result column="phone_one" property="phoneOne" />
+		<result column="phone_two" property="phoneTwo" />
+		<result column="remark" property="remark" />
+		<result column="account" property="account" />
+		<result column="password" property="password" />
+		<result column="create_time" property="createTime" />
+		<result column="del_flag" property="delFlag" />
+	</resultMap>
+	
+	
+	<select id="getPartnerList" resultType="com.ruoyi.chargingPile.api.dto.PartnerListDTO">
+		select
+		id,
+		name,
+		role_id as roleId,
+		phone_one as phoneOne,
+		address,
+		account,
+		remark
+		from t_partner where del_flag = 0
+		<if test="null != item.name and '' != item.name">
+			and `name` like CONCAT('%', #{item.name}, '%')
+		</if>
+		<if test="null != item.roleId and '' != item.name">
+			and role_id =  #{item.roleId}
+		</if>
+		order by create_time desc limit #{item.pageCurr}, #{item.pageSize}
+	</select>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml
new file mode 100644
index 0000000..e9cf906
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.chargingPile.mapper.SiteMapper">
+	
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.Site">
+		<id column="id" property="id" />
+		<result column="partner_id" property="partnerId" />
+		<result column="`code`" property="code" />
+		<result column="name" property="name" />
+		<result column="site_type" property="siteType" />
+		<result column="business_category" property="businessCategory" />
+		<result column="status" property="status" />
+		<result column="construction_site" property="constructionSite" />
+		<result column="img_url" property="imgUrl" />
+		<result column="province" property="province" />
+		<result column="province_code" property="provinceCode" />
+		<result column="city" property="city" />
+		<result column="city_code" property="cityCode" />
+		<result column="districts" property="districts" />
+		<result column="districts_code" property="districtsCode" />
+		<result column="lon" property="lon" />
+		<result column="lat" property="lat" />
+		<result column="address" property="address" />
+		<result column="country_code" property="countryCode" />
+		<result column="phone" property="phone" />
+		<result column="service_phone" property="servicePhone" />
+		<result column="guide" property="guide" />
+		<result column="start_service_time" property="startServiceTime" />
+		<result column="end_service_time" property="endServiceTime" />
+		<result column="service_description" property="serviceDescription" />
+		<result column="vehicle_description" property="vehicleDescription" />
+		<result column="parking_space" property="parkingSpace" />
+		<result column="rate_description" property="rateDescription" />
+		<result column="space_charge_explain" property="spaceChargeExplain" />
+		<result column="accounting_strategy_id" property="accountingStrategyId" />
+		<result column="establishment_time" property="establishmentTime" />
+		<result column="sort" property="sort" />
+		<result column="remark" property="remark" />
+		<result column="mark" property="mark" />
+		<result column="create_time" property="createTime" />
+		<result column="del_flag" property="delFlag" />
+	</resultMap>
+	
+	
+	<select id="getSiteList" resultType="com.ruoyi.chargingPile.api.dto.GetSiteListDTO">
+		select
+		a.id,
+		a.code,
+		a.name,
+		b.name as partnerName,
+		a.site_type as siteType,
+		a.business_category as businessCategory,
+		a.status,
+		CONCAT(a.province, a.city, a.districts, a.address) as address,
+		a.phone,
+		a.service_phone as servicePhone,
+		a.parking_space as parkingSpace,
+		DATE_FORMAT('%Y-%m-%d %H:%i:%s', a.establishment_time) as establishmentTime,
+		c.num as chargingPileNumber,
+		a.sort
+		from t_site a
+		left join t_partner b on (a.partner_id = b.id)
+		left join (select site_id, count(1) as num from t_charging_pile where del_flag = 0 group by site_id) c on (a.id = c.site_id)
+		WHERE a.del_flag = 0
+		<if test="null != item.name and '' != item.name">
+			and a.name like CONCAT('%', #{item.name}, '%')
+		</if>
+		<if test="null != item.partnerName and '' != item.partnerName">
+			and b.name like CONCAT('%', #{item.partnerName}, '%')
+		</if>
+		<if test="null != item.siteType">
+			and a.site_type = #{item.siteType}
+		</if>
+		<if test="null != item.businessCategory">
+			and a.business_category = #{item.businessCategory}
+		</if>
+		<if test="null != item.status">
+			and a.status = #{item.status}
+		</if>
+		<if test="null != item.provinceCode and '' != item.provinceCode">
+			and a.province_code = #{item.provinceCode}
+		</if>
+		<if test="null != item.cityCode and '' != item.cityCode">
+			and a.city_code = #{item.cityCode}
+		</if>
+		<if test="null != item.districtsCode and '' != item.districtsCode">
+			and a.districts_code = #{item.districtsCode}
+		</if>
+		order by a.sort desc, a.create_time desc limit #{item.pageCurr}, #{item.pageSize}
+	</select>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml
new file mode 100644
index 0000000..031175c
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileNotificationMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.chargingPile.mapper.TChargingPileNotificationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.TChargingPileNotification">
+        <id column="id" property="id" />
+        <result column="site_id" property="siteId" />
+        <result column="charging_pile_id" property="chargingPileId" />
+        <result column="content" property="content" />
+        <result column="create_time" property="createTime" />
+        <result column="del_flag" property="delFlag" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, site_id, charging_pile_id, content, create_time, del_flag
+    </sql>
+
+</mapper>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml
new file mode 100644
index 0000000..fc21cd6
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.chargingPile.mapper.TFaultMessageMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.TFaultMessage">
+        <id column="id" property="id" />
+        <result column="app_user_id" property="appUserId" />
+        <result column="site_id" property="siteId" />
+        <result column="charging_pile_id" property="chargingPileId" />
+        <result column="status" property="status" />
+        <result column="down_time" property="downTime" />
+        <result column="create_time" property="createTime" />
+        <result column="del_flag" property="delFlag" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, app_user_id, site_id, charging_pile_id, status, down_time, create_time, del_flag
+    </sql>
+
+</mapper>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
new file mode 100644
index 0000000..1ef7f1a
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.chargingPile.mapper.TParkingRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.TParkingRecord">
+        <id column="id" property="id" />
+        <result column="app_user_id" property="appUserId" />
+        <result column="license_plate" property="licensePlate" />
+        <result column="vehicle_color" property="vehicleColor" />
+        <result column="charging_order_id" property="chargingOrderId" />
+        <result column="parking_lot_id" property="parkingLotId" />
+        <result column="in_parking_time" property="inParkingTime" />
+        <result column="out_parking_time" property="outParkingTime" />
+        <result column="parking_duration" property="parkingDuration" />
+        <result column="order_amount" property="orderAmount" />
+        <result column="status" property="status" />
+        <result column="out_parking_type" property="outParkingType" />
+        <result column="create_time" property="createTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, app_user_id, license_plate, vehicle_color, charging_order_id, parking_lot_id, in_parking_time, out_parking_time, parking_duration, order_amount, status, out_parking_type, create_time
+    </sql>
+
+</mapper>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TPartnerSiteMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TPartnerSiteMapper.xml
new file mode 100644
index 0000000..b5b1a7f
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TPartnerSiteMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.chargingPile.mapper.TPartnerSiteMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.TPartnerSite">
+        <id column="id" property="id" />
+        <result column="site_id" property="siteId" />
+        <result column="partner_id" property="partnerId" />
+        <result column="site_menu_id" property="siteMenuId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, site_id, partner_id, site_menu_id
+    </sql>
+
+</mapper>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml
new file mode 100644
index 0000000..526a1ba
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.chargingPile.mapper.TRepairMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.TRepair">
+        <id column="id" property="id" />
+        <result column="repairman" property="repairman" />
+        <result column="site_id" property="siteId" />
+        <result column="charging_pile_id" property="chargingPileId" />
+        <result column="content" property="content" />
+        <result column="repair_time" property="repairTime" />
+        <result column="create_time" property="createTime" />
+        <result column="del_flag" property="delFlag" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, repairman, site_id, charging_pile_id, content, repair_time, create_time, del_flag
+    </sql>
+
+</mapper>
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TSiteMenuMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TSiteMenuMapper.xml
new file mode 100644
index 0000000..13d95cc
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TSiteMenuMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.chargingPile.mapper.TSiteMenuMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.chargingPile.api.model.TSiteMenu">
+        <id column="menu_id" property="menuId" />
+        <result column="menu_name" property="menuName" />
+        <result column="parent_id" property="parentId" />
+        <result column="order_num" property="orderNum" />
+        <result column="path" property="path" />
+        <result column="component" property="component" />
+        <result column="query" property="query" />
+        <result column="is_frame" property="isFrame" />
+        <result column="is_cache" property="isCache" />
+        <result column="menu_type" property="menuType" />
+        <result column="visible" property="visible" />
+        <result column="status" property="status" />
+        <result column="perms" property="perms" />
+        <result column="icon" property="icon" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        menu_id, menu_name, parent_id, order_num, `path`, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark
+    </sql>
+
+</mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
index af7e80c..446c350 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
@@ -1,9 +1,21 @@
 package com.ruoyi.order.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.order.api.model.TExchangeOrder;
+import com.ruoyi.order.api.model.TShoppingOrder;
+import com.ruoyi.order.service.TExchangeOrderService;
+import com.ruoyi.order.service.TShoppingOrderService;
 import io.swagger.annotations.Api;
+import io.swagger.models.auth.In;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -17,6 +29,48 @@
 @RestController
 @RequestMapping("/t-exchange-order")
 public class TExchangeOrderController {
+    @Autowired
+    private TShoppingOrderService tShoppingOrderService;
+    @Autowired
+    private TExchangeOrderService exchangeOrderService;
+    /**
+     * 管理后台 根据商品ids 查询对应的销量
+     * @param goodsIds
+     * @return
+     */
+    @PostMapping("/t-exchange-order/getSalesCountByGoodsIds")
+    public R<List<Integer>> getSalesCountByGoodsId(String goodsIds){
+        String[] split = goodsIds.split("-");
+        // 取出最后一位字符 类型1查询现金购买 类型2查询积分兑换
+        String s = split[split.length - 1];
+        List<Integer> res = new ArrayList<>();
+        switch (Integer.parseInt(s)){
+            case 1:
+                for (int i = 0; i < split.length-1; i++) {
 
+                    Integer reduce = tShoppingOrderService.list(new QueryWrapper<TShoppingOrder>()
+                                    .eq("goods_id", split[i])
+                                    .eq("payment_status", 2)
+                                    .ne("refund_status", 2))
+                            .stream().map(TShoppingOrder::getPurchaseQuantity).reduce(0, Integer::sum);
+
+                    res.add(reduce);
+                }
+                break;
+            case 2:
+                for (int i = 0; i < split.length-1; i++) {
+                    Integer reduce = exchangeOrderService.list(new QueryWrapper<TExchangeOrder>()
+                                    .eq("goods_id", split[i])
+                                    )
+                            .stream().map(TExchangeOrder::getPurchaseQuantity).reduce(0, Integer::sum);
+
+                    res.add(reduce);
+                }
+                break;
+        }
+
+
+        return R.ok(res);
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
new file mode 100644
index 0000000..622c6b9
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
@@ -0,0 +1,37 @@
+package com.ruoyi.other.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.other.api.domain.Region;
+import com.ruoyi.other.service.IRegionService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/8 12:00
+ */
+@RestController
+@RequestMapping("/region")
+public class RegionController {
+	
+	@Resource
+	private IRegionService regionService;
+	
+	
+	@ResponseBody
+	@GetMapping("/getRegion/{pid}")
+	@ApiOperation(value = "获取省市区数据", tags = {"管理后台-站点管理"})
+	@ApiImplicitParams({
+			@ApiImplicitParam(value = "父级id,没有传0", name = "pid", required = true)
+	})
+	public AjaxResult<List<Region>> getRegion(@PathVariable Integer pid){
+		List<Region> list = regionService.list(new LambdaQueryWrapper<Region>().eq(Region::getParentId, pid));
+		return AjaxResult.success(list);
+	}
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java
index 98ae556..4cfac38 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java
@@ -1,6 +1,8 @@
 package com.ruoyi.other.controller;
 
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.enums.status.AdvertisingStatusEnum;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.other.api.domain.TAdvertising;
@@ -13,6 +15,8 @@
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * <p>
@@ -56,5 +60,12 @@
     public AjaxResult<PageInfo<TAdvertising>> pageList(@RequestBody AdvertisingDTO dto) {
         return AjaxResult.ok(advertisingService.pageList(dto));
     }
+
+    @ApiOperation(tags = {"小程序-广告管理"},value = "广告列表查询")
+    @PostMapping(value = "/list")
+    public AjaxResult<List<TAdvertising>> list() {
+        return AjaxResult.ok(advertisingService.list(Wrappers.lambdaQuery(TAdvertising.class)
+                .eq(TAdvertising::getStatus, AdvertisingStatusEnum.YES.getCode())));
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java
index 6c217a3..cc3de1a 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TSystemConfigurationController.java
@@ -1,8 +1,16 @@
 package com.ruoyi.other.controller;
 
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.other.api.domain.TSystemConfiguration;
+import com.ruoyi.other.service.TSystemConfigurationService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -17,5 +25,22 @@
 @RequestMapping("/t-system-configuration")
 public class TSystemConfigurationController {
 
+    private final TSystemConfigurationService systemConfigurationService;
+
+    @Autowired
+    public TSystemConfigurationController(TSystemConfigurationService systemConfigurationService) {
+        this.systemConfigurationService = systemConfigurationService;
+    }
+
+    /**
+     * 查看系统设置
+     */
+    @ApiOperation(tags = {"小程序-系统设置"},value = "联系客服")
+    @GetMapping(value = "/getDetailById")
+    public AjaxResult<TSystemConfiguration> getDetailById(@RequestParam(name = "type",value = "1=客服信息,2=系统设置") Integer type) {
+        return AjaxResult.ok(systemConfigurationService.getOne(Wrappers.lambdaQuery(TSystemConfiguration.class)
+                .eq(TSystemConfiguration::getType, type)));
+    }
+
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/RegionMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/RegionMapper.java
new file mode 100644
index 0000000..ae03212
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/RegionMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.other.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.other.api.domain.Region;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/8 11:59
+ */
+public interface RegionMapper extends BaseMapper<Region> {
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/IRegionService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/IRegionService.java
new file mode 100644
index 0000000..a81edb8
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/IRegionService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.other.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.other.api.domain.Region;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/8 11:59
+ */
+public interface IRegionService extends IService<Region> {
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/RegionServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/RegionServiceImpl.java
new file mode 100644
index 0000000..8fd850a
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/RegionServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.other.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.other.api.domain.Region;
+import com.ruoyi.other.mapper.RegionMapper;
+import com.ruoyi.other.service.IRegionService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/8 11:59
+ */
+@Service
+public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService {
+}
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
index c584e2f..f74785a 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
@@ -11,6 +11,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -39,11 +40,17 @@
             // 去除最后一个字符
             stringBuilder.deleteCharAt(stringBuilder.length()-1);
         }
+        if (list.isEmpty()) {
+            pageInfo.setRecords(list);
+            return pageInfo;
+        }
         String string = stringBuilder.toString();
-        List<Integer> data = orderClient.getSalesCountByGoodsId(string).getData();
+        String res = string+"-"+dto.getType();
 
-//        goodsClient
-        // 远程调用cha'xun
+        List<Integer> data = orderClient.getSalesCountByGoodsId(res).getData();
+        for (int i = 0; i < list.size(); i++) {
+            list.get(i).setSalesCount(data.get(i));
+        }
         pageInfo.setRecords(list);
         return pageInfo;
     }

--
Gitblit v1.7.1