Browse Source

Merge remote-tracking branch 'origin/dev' into dev

loovi 1 year ago
parent
commit
0325a6ecd8
41 changed files with 1751 additions and 57 deletions
  1. 1 1
      app.pid
  2. 3 1
      sp-core/sp-api/src/main/java/com/pj/api/client/admin/AdminInterface.java
  3. 6 1
      sp-core/sp-api/src/main/java/com/pj/api/client/admin/AdminInterfaceFallback.java
  4. 11 5
      sp-core/sp-api/src/main/java/com/pj/api/consts/FeignFactory.java
  5. 48 0
      sp-core/sp-base/src/main/java/com/pj/current/satoken/StpAPPUserUtil.java
  6. 4 4
      sp-generate/src/main/java/com/pj/SpGenerateApplication.java
  7. 1 18
      sp-generate/src/main/resources/freemarker/mybatis/Util.ftl
  8. 1 0
      sp-service/level-one-server/src/main/java/com/pj/tb_goods/TbGoodsService.java
  9. 18 1
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransitController.java
  10. 41 0
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransitService.java
  11. 29 0
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/param/JudgeTransitParam.java
  12. 21 0
      sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleAppController.java
  13. 23 1
      sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleController.java
  14. 91 0
      sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleService.java
  15. 121 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUser.java
  16. 97 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserController.java
  17. 30 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserMapper.java
  18. 67 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserMapper.xml
  19. 78 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserService.java
  20. 30 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserUtil.java
  21. 80 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLog.java
  22. 87 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogController.java
  23. 30 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogMapper.java
  24. 53 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogMapper.xml
  25. 51 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogService.java
  26. 29 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogUtil.java
  27. 65 0
      sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenu.java
  28. 91 0
      sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuController.java
  29. 30 0
      sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuMapper.java
  30. 47 0
      sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuMapper.xml
  31. 52 0
      sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuService.java
  32. 27 0
      sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuUtil.java
  33. 75 0
      sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreement.java
  34. 98 0
      sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementController.java
  35. 30 0
      sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementMapper.java
  36. 51 0
      sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementMapper.xml
  37. 81 0
      sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementService.java
  38. 27 0
      sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementUtil.java
  39. 1 2
      sp-service/sp-admin/src/main/java/com/pj/project4sp/admin4login/SpAccAdminService.java
  40. 25 21
      sp-service/transport-server/src/main/java/com/pj/project/tb_driver/TbDriver.java
  41. 0 2
      sp-service/transport-server/src/main/java/com/pj/project/tb_driver/TbDriverController.java

+ 1 - 1
app.pid

@@ -1 +1 @@
-12244
+30260

+ 3 - 1
sp-core/sp-api/src/main/java/com/pj/api/client/admin/AdminInterface.java

@@ -18,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestParam;
 		)	
 public interface AdminInterface {
 
+	/** 启/停边民的app账号登陆限制 */
+	@RequestMapping("rpc/isLock")
+	int isLock(@RequestParam("id") String id,@RequestParam("status") Integer status);
 
-	
 }

+ 6 - 1
sp-core/sp-api/src/main/java/com/pj/api/client/admin/AdminInterfaceFallback.java

@@ -28,7 +28,12 @@ public class AdminInterfaceFallback implements FallbackFactory<AdminInterface>
 		// 返回熔断后的对象 
 		return new AdminInterface() {
 
-			
+			//启/停边民的app账号登陆限制
+			@Override
+			public int isLock(String id,Integer status) {
+				log.error("错误的id:{},状态:{},保护操作:{}",id,status,"熔断");
+				return 0;
+			}
 		};
 	}
 

+ 11 - 5
sp-core/sp-api/src/main/java/com/pj/api/consts/FeignFactory.java

@@ -1,5 +1,6 @@
 package com.pj.api.consts;
 
+import com.pj.api.client.admin.AdminInterface;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -21,9 +22,14 @@ public class FeignFactory {
 	public void setSpCfgInterface(SpCfgInterface spCfgInterface) {
 		FeignFactory.spCfgInterface = spCfgInterface;
 	}
-	
-	
-	
-	
-	
+
+
+	/**
+	 *  用户基本配置
+	 */
+	public static AdminInterface adminInterface;
+	@Autowired
+	public static void setAdminInterface(AdminInterface adminInterface) {
+		FeignFactory.adminInterface = adminInterface;
+	}
 }

+ 48 - 0
sp-core/sp-base/src/main/java/com/pj/current/satoken/StpAPPUserUtil.java

@@ -0,0 +1,48 @@
+package com.pj.current.satoken;
+
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.stp.SaTokenInfo;
+import cn.dev33.satoken.stp.StpLogic;
+import cn.dev33.satoken.stp.StpUtil;
+import org.springframework.stereotype.Component;
+
+@Component
+public class StpAPPUserUtil {
+    /**
+     * 账号类型标识
+     */
+    public static final String TYPE = "app";
+
+    /**
+     * 底层的 StpLogic 对象
+     */
+    public static StpLogic stpLogic = new StpLogic(TYPE);
+
+    /**
+     * 获取当前 StpLogic 的账号类型
+     * @return See Note
+     */
+    public static String getLoginType(){
+        return stpLogic.getLoginType();
+    }
+
+    /**
+     * 重置 StpLogic 对象
+     * @param stpLogic /
+     */
+    public static void setStpLogic(StpLogic stpLogic) {
+        StpUtil.stpLogic = stpLogic;
+        // 防止自定义 stpLogic 被覆盖
+        SaManager.putStpLogic(stpLogic);
+    }
+    public static void login(Object id) {
+        stpLogic.login(id);
+    }
+    public static SaTokenInfo getTokenInfo(){
+       return stpLogic.getTokenInfo();
+    }
+    public static boolean isLogin() {
+        return stpLogic.isLogin();
+    }
+
+}

+ 4 - 4
sp-generate/src/main/java/com/pj/SpGenerateApplication.java

@@ -23,7 +23,7 @@ public class SpGenerateApplication {
 		// ===================================  设置连接信息  =================================== 
         FlyConfig config = new FlyConfig();
         config.setDriverClassName("com.mysql.cj.jdbc.Driver");
-        config.setUrl("jdbc:mysql://47.101.143.145:3006/transport-system?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
+        config.setUrl("jdbc:mysql://47.101.143.145:3006/sp-admin?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
         config.setUsername("yun_user");
         config.setPassword("yun_Root@1123");
         config.setPrintSql(true);		// 是否打印sql  
@@ -38,7 +38,7 @@ public class SpGenerateApplication {
 		// ===================================  一些全局设置  =================================== 
 		GenCfgManager.cfg
 			.setProjectPath("D://project//market")	// 总项目地址 (生成代码的路径)
-	        .setServerProjectName("market-server/sp-service/transport-server")				// 服务端 - 项目名称
+	        .setServerProjectName("market-server/sp-service/sp-admin")				// 服务端 - 项目名称
 //	        .setServerProjectName("sp-com/sp-core")			// 服务端 - 项目名称 (sp-com多模块版填此格式)
 	        .setCodePath("src/main/java/")					// 服务端代码 - 存放路径 
 	        .setPackagePath( "com.pj.project")				// 服务端代码 - 总包名 
@@ -64,7 +64,7 @@ public class SpGenerateApplication {
 			.setOutFC(false)					// 是否输出FC.java工厂类
 			.setDefaultMeunIcon("el-icon-folder-opened")	// 生成后台管理页面时,默认的菜单图标
 			.setWebLibImportWay(2) 			// 前端js库导入方式(1=cdn导入, 2=本地导入[需将sa-admin附带js包复制到kj文件夹])
-			 .addTableName("tb_driver")	// 添加要生成的表 (单个添加)
+			 .addTableName("app_user","app_user_login_log")	// 添加要生成的表 (单个添加)
 //			.addTableAll()		// 添加要生成的表 (一次性添加所有表)
             .removeTableName("sp_role", "sp_role_permission", "sp_admin", "sp_apilog", "sp_cfg")	// 移除这些内置的表,不必生成代码
             ; 
@@ -77,7 +77,7 @@ public class SpGenerateApplication {
 		GenUtil.doOutMyBatis();	// 输出java代码 (mybatis版本)
 		GenUtil.doOutMyBatisService();	// 输出java代码 - 追加service层
 		GenUtil.doOutAdminHtml();	// 输出 admin后台管理页面
-		GenUtil.doOutApidoc();	// 输出 接口文档页面
+//		GenUtil.doOutApidoc();	// 输出 接口文档页面
 		
 
 		

+ 1 - 18
sp-generate/src/main/resources/freemarker/mybatis/Util.ftl

@@ -23,25 +23,8 @@ public class ${t.mkNameBig}Util {
 		${t.mkNameBig}Util.${t.varName}Mapper = ${t.varName}Mapper;
 	}
 	
-	
-	/** 
-	 * 将一个 ${t.modelName} 对象进行进行数据完整性校验 (方便add/update等接口数据校验) [G] 
-	 */
-	static void check(${t.modelName} ${t.varNameSimple}) {
-${t.getT1List_ByUtilCheck()}<#rt>
-	}
 
-	/** 
-	 * 获取一个${t.modelName} (方便复制代码用) [G] 
-	 */ 
-	static ${t.modelName} get${t.modelName}() {
-<#if  cfg.utilDocWay == 2 >		// 声明对象${cfg.line}</#if><#rt>
-		${t.modelName} ${t.varNameSimple} = new ${t.modelName}();<#if cfg.utilDocWay == 1>	// 声明对象 </#if>
-${t.getT1List_ByUtilGetModel()}<#rt>
-		return ${t.varNameSimple};
-	}
-	
-	
+
 	
 	
 	

+ 1 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_goods/TbGoodsService.java

@@ -64,6 +64,7 @@ public class TbGoodsService extends ServiceImpl<TbGoodsMapper, TbGoods> implemen
 		return tbGoodsMapper.getList(so);	
 	}
 
+
 	/**
 	 * 导入
 	 * @param file excel文件

+ 18 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransitController.java

@@ -2,6 +2,8 @@ package com.pj.tb_goods_transit;
 
 import java.io.IOException;
 import java.util.List;
+
+import com.pj.tb_goods_transit.param.JudgeTransitParam;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -104,6 +106,20 @@ public class TbGoodsTransitController {
 		return AjaxJson.getByLine(line);
 	}
 
+	/** 查看一级市场的在校商品列表 */
+	@GetMapping("getTransitList")
+	public AjaxJson getTransitList(){
+		SoMap so = SoMap.getRequestSoMap();
+		List<TbGoodsTransit> transitList = tbGoodsTransitService.getTransitList(so.startPage());
+		return AjaxJson.getPageData(so.getDataCount(),transitList);
+	}
+
+	/** 审核上架的商品,可批量 */
+	@GetMapping("judgeTransit")
+	public AjaxJson judgeTransit(JudgeTransitParam judgeTransitParam){
+		String judgedTransit = tbGoodsTransitService.judgeTransit(judgeTransitParam);
+		return AjaxJson.getSuccess(judgedTransit);
+	}
 
 
 	/**
@@ -131,7 +147,8 @@ public class TbGoodsTransitController {
 	 */
 	@RequestMapping("goodsTransitOutport")
 	@ResponseBody
-	public AjaxJson dataOutport(@RequestParam(value = "keyword",required = false) String keyword,@RequestParam(value = "filepath",required = false)String filepath){
+	public AjaxJson dataOutport(@RequestParam(value = "keyword",required = false) String keyword,
+								@RequestParam(value = "filepath",required = false)String filepath){
 		try {
 			String importData = tbGoodsTransitService.outportExcel(keyword,filepath);
 			AjaxJson.getSuccess(importData);

+ 41 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransitService.java

@@ -4,10 +4,12 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Date;
 import java.util.List;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.pj.tb_enterprise.TbEnterprise;
+import com.pj.tb_goods_transit.param.JudgeTransitParam;
 import com.pj.utils.so.SoMap;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFRow;
@@ -64,6 +66,45 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 		return tbGoodsTransitMapper.getList(so);	
 	}
 
+	/** 查看一级市场在销商品 */
+	List<TbGoodsTransit> getTransitList(SoMap so){
+		//设置可展示的状态
+		so.set("audit_status",1);
+		so.set("delete_status",1);
+		so.set("goods_status",1);
+		//获取在销商品列表,根据日期进行降序排序
+		List<TbGoodsTransit> goodsTransitList = tbGoodsTransitMapper.getList(so);
+		return goodsTransitList;
+	}
+
+	/** 审核在销商品,可批量 */
+	String judgeTransit(JudgeTransitParam judgeTransitParam){
+		//获取审核id
+		List<String> ids = judgeTransitParam.getIds();
+		if(ids.size() == 0)return "没有需要审核的数据。";
+		//获取审核状态
+		Integer judgeStatus = judgeTransitParam.getJudgeStatus();
+		//添加审核计数器
+		int count = 0;
+		//开始审核
+		for (String item : ids) {
+			TbGoodsTransit tbGoodsTransit = tbGoodsTransitMapper.selectById(item);
+			//判断对象值和该对象是否已经审核过了
+			if(tbGoodsTransit == null || tbGoodsTransit.getAuditStatus() != 0){
+				continue;
+			}
+			//设置审核状态
+			tbGoodsTransit.setAuditStatus(judgeStatus);
+			//设置审核内容
+			tbGoodsTransit.setRemark(judgeTransitParam.getRemark());
+			//设置基本参数
+			tbGoodsTransit.setAuditTime(new Date());
+			//保存结果
+			int i = tbGoodsTransitMapper.updateById(tbGoodsTransit);
+			if(i == 1)count += 1;
+		}
+		return "已完成 " + count + "条 数据审核!";
+	}
 
 	/**
 	 * 导入

+ 29 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/param/JudgeTransitParam.java

@@ -0,0 +1,29 @@
+package com.pj.tb_goods_transit.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author Mechrevo
+ * @Date 2023 07 24 14 00
+ **/
+@Data
+public class JudgeTransitParam {
+
+    /**
+     * 批量审核时的ID集合
+     */
+    private List<String> ids;
+
+    /**
+     * 审核状态
+     */
+    private Integer judgeStatus;
+
+    /**
+     * 审核不通过时的备注
+     */
+    private String remark;
+
+}

+ 21 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleAppController.java

@@ -0,0 +1,21 @@
+package com.pj.tb_people;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author Mechrevo
+ * @Date 2023 07 24 14 56
+ **/
+@RestController
+@RequestMapping("/app/TbPeople/")
+public class TbPeopleAppController {
+
+    @Autowired
+    private TbPeopleService tbPeopleService;
+
+
+
+
+}

+ 23 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleController.java

@@ -63,7 +63,7 @@ public class TbPeopleController {
 
 	/** 查 - 根据id */  
 	@RequestMapping("getById")
-		@SaCheckPermission(TbPeople.PERMISSION_CODE)
+//	@SaCheckPermission(TbPeople.PERMISSION_CODE)
 	public AjaxJson getById(String id){
 		TbPeople t = tbPeopleService.getById(id);
 		return AjaxJson.getSuccessData(t);
@@ -88,7 +88,29 @@ public class TbPeopleController {
 		return AjaxJson.getByLine(line);
 	}
 
+	/** 审核 */
+	@PostMapping("judge")
+	public AjaxJson judge(TbPeople tbPeople){
+		boolean judge = tbPeopleService.judge(tbPeople);
+		if(judge){
+			return AjaxJson.getSuccess("审核成功!");
+		}
+		return AjaxJson.getError("审核失败!");
+	}
 
+	/** 启/停 */
+	@PostMapping("isLock")
+	public AjaxJson isLock(TbPeople tbPeople){
+		boolean lock = tbPeopleService.isLock(tbPeople);
+		return AjaxJson.getSuccess(lock + "");
+	}
+
+	/** 身份识别 */
+	@PostMapping("identification")
+	//TODO: 身份识别
+	public AjaxJson identification(){
+		return AjaxJson.getSuccess();
+	}
 
 	/**
 	 * 数据导入接口

+ 91 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleService.java

@@ -4,8 +4,10 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Date;
 import java.util.List;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.pj.tb_goods_transit.TbGoodsTransit;
 import com.pj.utils.so.SoMap;
@@ -54,6 +56,7 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
 
 	}
 
+
 	/** 查 */
 	TbPeople getById(String id){
 		return super.getById(id);
@@ -65,6 +68,94 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
 	}
 
 	/**
+	 * 审核
+	 */
+	boolean judge(TbPeople tbPeople){
+		//获取当前登陆人
+		String loginUser = "admin";
+		//获取当前被审核人的编号和审核情况
+		Long id = tbPeople.getId();
+		Integer judgeStatus = tbPeople.getJudgeStatus();
+		//获取被审核人
+		TbPeople tbPeople1 = tbPeopleMapper.selectById(id);
+		if(tbPeople1 == null)throw new RuntimeException("审核用户不存在,请检查!");
+		//判断删除状态
+		Integer deleteStatus = tbPeople1.getDeleteStatus();
+		if(deleteStatus == 0)throw new RuntimeException("该用户已被删除,无法进行审核");
+		//设置审核状态
+		tbPeople1.setJudgeStatus(judgeStatus);
+		if(id == 0) tbPeople1.setJudgeContent(tbPeople.getJudgeContent());
+		//设置审核人
+		tbPeople1.setPersonId(loginUser);
+		//审核时间
+		tbPeople1.setJudgeTime(new Date());
+		//保存
+		int i = tbPeopleMapper.updateById(tbPeople1);
+		return i == 1;
+
+	}
+
+	/**
+	 * 启/停
+	 */
+	boolean isLock(TbPeople tbPeople){
+		//获取被修改用户id
+		Long id = tbPeople.getId();
+		//查询
+		TbPeople tbPeople1 = tbPeopleMapper.selectById(id);
+		if(tbPeople1 == null)throw new RuntimeException("审核用户不存在,请检查!");
+		//判断删除状态
+		Integer deleteStatus = tbPeople1.getDeleteStatus();
+		if(deleteStatus == 0)throw new RuntimeException("该用户已被删除,无法进行启/停操作!");
+		//获取启停状态
+		Integer isLock = tbPeople.getIsLock();
+		//设置启/停
+		tbPeople1.setIsLock(isLock);
+		//保存结果
+		int i = tbPeopleMapper.updateById(tbPeople1);
+		return i == 1;
+	}
+
+	/**
+	 * TODO: 对接单一窗口商务端实现身份识别(预留认证接口)
+	 */
+	void identification(){
+
+	}
+
+
+	/** 边民账号停用后不能登录app */
+	void loginPeople(String userName,String password){
+
+	}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	/**
 	 * 导入
 	 * @param file excel文件
 	 * @return

+ 121 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUser.java

@@ -0,0 +1,121 @@
+package com.pj.project.app_user;
+
+import java.io.Serializable;
+import java.util.*;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.EqualsAndHashCode;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * Model: app_user -- 移动端账号
+ * @author qzy 
+ */
+@Data
+@Accessors(chain = true)
+@TableName(AppUser.TABLE_NAME)
+@EqualsAndHashCode(callSuper = false)
+public class AppUser extends Model<AppUser> implements Serializable {
+
+	// ---------- 模块常量 ----------
+	/**
+	 * 序列化版本id 
+	 */
+	private static final long serialVersionUID = 1L;	
+	/**
+	 * 此模块对应的表名 
+	 */
+	public static final String TABLE_NAME = "app_user";	
+	/**
+	 * 此模块对应的权限码 
+	 */
+	public static final String PERMISSION_CODE = "app-user";
+	public static final String PERMISSION_CODE_ADD = "app-user-add";
+	public static final String PERMISSION_CODE_EDIT = "app-user-edit";
+	public static final String PERMISSION_CODE_DEL = "app-user-del";
+
+
+
+
+	// ---------- 表中字段 ----------
+	/**
+	 * 主键 
+	 */
+	@TableId(type = IdType.AUTO)
+	private Long id;	
+
+	/**
+	 * 手机号码 
+	 */
+	private String phone;	
+
+	/**
+	 * 姓名 
+	 */
+	private String name;	
+
+	/**
+	 * 类型(1=边民,2=组长,3=商户,4=收购商,5=司机) 
+	 */
+	private String userType;	
+
+	/**
+	 * 外联id,user_type=1=>边民ID;user_type=3=>商户ID 
+	 */
+	private String fkId;	
+
+	/**
+	 * 状态(0=禁用,1=启用) 
+	 */
+	private String status;	
+
+	/**
+	 * 是否认证(0=未认证,1=已认证) 
+	 */
+	private String auth;	
+
+	/**
+	 * 人证时间 
+	 */
+	private String authTime;	
+
+	/**
+	 * 登录次数 
+	 */
+	private Long loginCount;	
+
+	/**
+	 * 上次登录时间 
+	 */
+	private String lastLoginTime;	
+
+	/**
+	 * 创建时间 
+	 */
+	private Date createTime;	
+
+	/**
+	 * 更新者id 
+	 */
+	private String updateById;	
+
+	/**
+	 * 更新者名称 
+	 */
+	private String updateByName;	
+
+	/**
+	 * 更新时间 
+	 */
+	private Date updateTime;	
+
+
+
+
+
+	
+
+
+}

+ 97 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserController.java

@@ -0,0 +1,97 @@
+package com.pj.project.app_user;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import com.pj.utils.sg.*;
+import com.pj.project4sp.SP;
+
+import com.pj.current.satoken.StpUserUtil;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+
+
+/**
+ * Controller: app_user -- 移动端账号
+ * @author qzy 
+ */
+@RestController
+@RequestMapping("/AppUser/")
+public class AppUserController {
+
+	/** 底层 Service 对象 */
+	@Autowired
+	AppUserService appUserService;
+
+	/** 增 */  
+	@RequestMapping("add")
+	@SaCheckPermission(AppUser.PERMISSION_CODE_ADD)
+	public AjaxJson add(AppUser a){
+		appUserService.add(a);
+		a = appUserService.getById(SP.publicMapper.getPrimarykey());
+		return AjaxJson.getSuccessData(a);
+	}
+
+	/** 删 */  
+	@RequestMapping("delete")
+	@SaCheckPermission(AppUser.PERMISSION_CODE_DEL)
+	public AjaxJson delete(Long id){
+		 appUserService.delete(id);
+		return AjaxJson.getSuccess();
+	}
+	
+	/** 删 - 根据id列表 */  
+	@RequestMapping("deleteByIds")
+	@SaCheckPermission(AppUser.PERMISSION_CODE_DEL)
+	public AjaxJson deleteByIds(){
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class); 
+		int line = SP.publicMapper.deleteByIds(AppUser.TABLE_NAME, ids);
+		return AjaxJson.getByLine(line);
+	}
+	
+	/** 改 */  
+	@RequestMapping("update")
+	@SaCheckPermission(AppUser.PERMISSION_CODE_EDIT)
+	public AjaxJson update(AppUser a){
+		appUserService.update(a);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 查 - 根据id */  
+	@RequestMapping("getById")
+		@SaCheckPermission(AppUser.PERMISSION_CODE)
+	public AjaxJson getById(Long id){
+		AppUser a = appUserService.getById(id);
+		return AjaxJson.getSuccessData(a);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	@RequestMapping("getList")
+		@SaCheckPermission(AppUser.PERMISSION_CODE)
+	public AjaxJson getList() { 
+		SoMap so = SoMap.getRequestSoMap();
+		List<AppUser> list = appUserService.getList(so.startPage());
+		return AjaxJson.getPageData(so.getDataCount(), list);
+	}
+
+
+
+
+	/** 启/停边民的app账号登陆限制 */
+	@RequestMapping("rpc/isLock")
+	public AjaxJson isLock(@RequestParam("id") String id,@RequestParam("status") Integer status) {
+		boolean lock = appUserService.isLock(id,status);
+		if(lock) return AjaxJson.getSuccess();
+		return AjaxJson.getError();
+	}
+
+
+
+
+
+
+
+
+}

+ 30 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserMapper.java

@@ -0,0 +1,30 @@
+package com.pj.project.app_user;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.pj.utils.so.*;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Mapper: app_user -- 移动端账号
+ * @author qzy 
+ */
+
+@Mapper
+@Repository
+public interface AppUserMapper extends BaseMapper <AppUser> {
+
+
+
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param so 参数集合 
+	 * @return 数据列表 
+	 */
+	List<AppUser> getList(SoMap so);
+
+
+}

+ 67 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserMapper.xml

@@ -0,0 +1,67 @@
+<?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.pj.project.app_user.AppUserMapper">
+
+
+
+
+	<!-- ================================== 查询相关 ================================== -->
+	<!-- select id, phone, name, user_type, fk_id, status, auth, auth_time, login_count, last_login_time, create_time, update_by_id, update_by_name, update_time from app_user  -->
+	
+	<!-- 通用映射:自动模式 -->
+	<resultMap id="model" autoMapping="true" type="com.pj.project.app_user.AppUser"></resultMap>
+	
+	<!-- 公共查询sql片段 -->
+	<sql id="select_sql">
+		select * 
+		from app_user 
+	</sql>
+
+	
+	<!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [G] -->
+	<select id="getList" resultMap="model">
+		<include refid="select_sql"></include>
+		<where>
+			<if test=' this.has("id") '> and id = #{id} </if>
+			<if test=' this.has("phone") '> and phone = #{phone} </if>
+			<if test=' this.has("name") '> and name = #{name} </if>
+			<if test=' this.has("userType") '> and user_type = #{userType} </if>
+			<if test=' this.has("fkId") '> and fk_id = #{fkId} </if>
+			<if test=' this.has("status") '> and status = #{status} </if>
+			<if test=' this.has("auth") '> and auth = #{auth} </if>
+			<if test=' this.has("authTime") '> and auth_time = #{authTime} </if>
+			<if test=' this.has("loginCount") '> and login_count = #{loginCount} </if>
+			<if test=' this.has("lastLoginTime") '> and last_login_time = #{lastLoginTime} </if>
+			<if test=' this.has("updateById") '> and update_by_id = #{updateById} </if>
+			<if test=' this.has("updateByName") '> and update_by_name = #{updateByName} </if>
+		</where>
+		order by
+		<choose>
+			<when test='sortType == 1'> id desc </when>
+			<when test='sortType == 2'> phone desc </when>
+			<when test='sortType == 3'> name desc </when>
+			<when test='sortType == 4'> user_type desc </when>
+			<when test='sortType == 5'> fk_id desc </when>
+			<when test='sortType == 6'> status desc </when>
+			<when test='sortType == 7'> auth desc </when>
+			<when test='sortType == 8'> auth_time desc </when>
+			<when test='sortType == 9'> login_count desc </when>
+			<when test='sortType == 10'> last_login_time desc </when>
+			<when test='sortType == 11'> create_time desc </when>
+			<when test='sortType == 12'> update_by_id desc </when>
+			<when test='sortType == 13'> update_by_name desc </when>
+			<when test='sortType == 14'> update_time desc </when>
+			<otherwise> id desc </otherwise>
+		</choose>
+	</select>
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+</mapper>

+ 78 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserService.java

@@ -0,0 +1,78 @@
+package com.pj.project.app_user;
+
+import java.util.List;
+
+import com.pj.api.client.admin.AdminInterface;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import com.pj.utils.sg.*;
+
+/**
+ * Service: app_user -- 移动端账号
+ * @author qzy 
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class AppUserService extends ServiceImpl<AppUserMapper, AppUser> implements IService<AppUser>{
+
+	/** 底层 Mapper 对象 */
+	@Autowired
+	AppUserMapper appUserMapper;
+
+	/** 注入远程调用对象 admin */
+	@Autowired
+	private AdminInterface adminInterface;
+
+	/** 增 */
+	void add(AppUser t){
+		save(t);
+	}
+
+	/** 删 */
+	void delete(Long id){
+		removeById(id);
+	}
+
+	/** 改 */
+	void update(AppUser a){
+		updateById(a);
+
+	}
+
+	/** 查 */
+	AppUser getById(Long id){
+		return super.getById(id);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	List<AppUser> getList(SoMap so) { 
+		return appUserMapper.getList(so);	
+	}
+
+	/** 启/停边民的app账号登陆限制 */
+	boolean isLock(String id,Integer status){
+		//查询
+		AppUser appUser1 = appUserMapper.selectById(id);
+		if(appUser1 == null)throw new RuntimeException("您进行修改的用户不存在!");
+		//设置状态
+		appUser1.setStatus(status.toString());
+		//定义计数器
+		int count = 0;
+		//保存
+		int i = appUserMapper.updateById(appUser1);
+		count += i;
+		if(i == 1){
+			//远程调用
+			int lock = adminInterface.isLock(id, status);
+			count += lock;
+		}
+		if(count != 2)throw new RuntimeException("启/停状态修改失败!");
+		return count == 2;
+	}
+	
+
+}

+ 30 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserUtil.java

@@ -0,0 +1,30 @@
+package com.pj.project.app_user;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.pj.utils.sg.*;
+import java.util.*;
+
+/**
+ * 工具类:app_user -- 移动端账号
+ * @author qzy 
+ *
+ */
+@Component
+public class AppUserUtil {
+
+	
+	/** 底层 Mapper 对象 */
+	public static AppUserMapper appUserMapper;
+	@Autowired
+	private void setAppUserMapper(AppUserMapper appUserMapper) {
+		AppUserUtil.appUserMapper = appUserMapper;
+	}
+	
+
+
+	
+	
+	
+}

+ 80 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLog.java

@@ -0,0 +1,80 @@
+package com.pj.project.app_user_login_log;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.EqualsAndHashCode;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * Model: app_user_login_log -- 移动端用户登录日志
+ * @author qzy 
+ */
+@Data
+@Accessors(chain = true)
+@TableName(AppUserLoginLog.TABLE_NAME)
+@EqualsAndHashCode(callSuper = false)
+public class AppUserLoginLog extends Model<AppUserLoginLog> implements Serializable {
+
+	// ---------- 模块常量 ----------
+	/**
+	 * 序列化版本id 
+	 */
+	private static final long serialVersionUID = 1L;	
+	/**
+	 * 此模块对应的表名 
+	 */
+	public static final String TABLE_NAME = "app_user_login_log";	
+	/**
+	 * 此模块对应的权限码 
+	 */
+	public static final String PERMISSION_CODE = "app-user-login-log";
+	public static final String PERMISSION_CODE_ADD = "app-user-login-log-add";
+	public static final String PERMISSION_CODE_EDIT = "app-user-login-log-edit";
+	public static final String PERMISSION_CODE_DEL = "app-user-login-log-del";
+
+
+
+
+	// ---------- 表中字段 ----------
+	/**
+	 * 主键 
+	 */
+	@TableId(type = IdType.AUTO)
+	private Long id;	
+
+	/**
+	 * 用户ID 
+	 */
+	private Long usreId;	
+
+	/**
+	 * 登录时间 
+	 */
+	private String loginTime;	
+
+	/**
+	 * 登录IP 
+	 */
+	private String loginIp;	
+
+	/**
+	 * 登录设备 
+	 */
+	private String deviceMode;	
+
+	/**
+	 * app版本号 
+	 */
+	private String appVersion;	
+
+
+
+
+
+	
+
+
+}

+ 87 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogController.java

@@ -0,0 +1,87 @@
+package com.pj.project.app_user_login_log;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import com.pj.utils.sg.*;
+import com.pj.project4sp.SP;
+
+import com.pj.current.satoken.StpUserUtil;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+
+
+/**
+ * Controller: app_user_login_log -- 移动端用户登录日志
+ * @author qzy 
+ */
+@RestController
+@RequestMapping("/AppUserLoginLog/")
+public class AppUserLoginLogController {
+
+	/** 底层 Service 对象 */
+	@Autowired
+	AppUserLoginLogService appUserLoginLogService;
+
+	/** 增 */  
+	@RequestMapping("add")
+	@SaCheckPermission(AppUserLoginLog.PERMISSION_CODE_ADD)
+	public AjaxJson add(AppUserLoginLog a){
+		appUserLoginLogService.add(a);
+		a = appUserLoginLogService.getById(SP.publicMapper.getPrimarykey());
+		return AjaxJson.getSuccessData(a);
+	}
+
+	/** 删 */  
+	@RequestMapping("delete")
+	@SaCheckPermission(AppUserLoginLog.PERMISSION_CODE_DEL)
+	public AjaxJson delete(Long id){
+		 appUserLoginLogService.delete(id);
+		return AjaxJson.getSuccess();
+	}
+	
+	/** 删 - 根据id列表 */  
+	@RequestMapping("deleteByIds")
+	@SaCheckPermission(AppUserLoginLog.PERMISSION_CODE_DEL)
+	public AjaxJson deleteByIds(){
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class); 
+		int line = SP.publicMapper.deleteByIds(AppUserLoginLog.TABLE_NAME, ids);
+		return AjaxJson.getByLine(line);
+	}
+	
+	/** 改 */  
+	@RequestMapping("update")
+	@SaCheckPermission(AppUserLoginLog.PERMISSION_CODE_EDIT)
+	public AjaxJson update(AppUserLoginLog a){
+		appUserLoginLogService.update(a);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 查 - 根据id */  
+	@RequestMapping("getById")
+		@SaCheckPermission(AppUserLoginLog.PERMISSION_CODE)
+	public AjaxJson getById(Long id){
+		AppUserLoginLog a = appUserLoginLogService.getById(id);
+		return AjaxJson.getSuccessData(a);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	@RequestMapping("getList")
+		@SaCheckPermission(AppUserLoginLog.PERMISSION_CODE)
+	public AjaxJson getList() { 
+		SoMap so = SoMap.getRequestSoMap();
+		List<AppUserLoginLog> list = appUserLoginLogService.getList(so.startPage());
+		return AjaxJson.getPageData(so.getDataCount(), list);
+	}
+	
+	
+	
+	
+
+	
+	
+	
+
+}

+ 30 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogMapper.java

@@ -0,0 +1,30 @@
+package com.pj.project.app_user_login_log;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.pj.utils.so.*;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Mapper: app_user_login_log -- 移动端用户登录日志
+ * @author qzy 
+ */
+
+@Mapper
+@Repository
+public interface AppUserLoginLogMapper extends BaseMapper <AppUserLoginLog> {
+
+
+
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param so 参数集合 
+	 * @return 数据列表 
+	 */
+	List<AppUserLoginLog> getList(SoMap so);
+
+
+}

+ 53 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogMapper.xml

@@ -0,0 +1,53 @@
+<?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.pj.project.app_user_login_log.AppUserLoginLogMapper">
+
+
+
+
+	<!-- ================================== 查询相关 ================================== -->
+	<!-- select id, usre_id, login_time, login_ip, device_mode, app_version from app_user_login_log  -->
+	
+	<!-- 通用映射:自动模式 -->
+	<resultMap id="model" autoMapping="true" type="com.pj.project.app_user_login_log.AppUserLoginLog"></resultMap>
+	
+	<!-- 公共查询sql片段 -->
+	<sql id="select_sql">
+		select * 
+		from app_user_login_log 
+	</sql>
+
+	
+	<!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [G] -->
+	<select id="getList" resultMap="model">
+		<include refid="select_sql"></include>
+		<where>
+			<if test=' this.has("id") '> and id = #{id} </if>
+			<if test=' this.has("usreId") '> and usre_id = #{usreId} </if>
+			<if test=' this.has("loginTime") '> and login_time = #{loginTime} </if>
+			<if test=' this.has("loginIp") '> and login_ip = #{loginIp} </if>
+			<if test=' this.has("deviceMode") '> and device_mode = #{deviceMode} </if>
+			<if test=' this.has("appVersion") '> and app_version = #{appVersion} </if>
+		</where>
+		order by
+		<choose>
+			<when test='sortType == 1'> id desc </when>
+			<when test='sortType == 2'> usre_id desc </when>
+			<when test='sortType == 3'> login_time desc </when>
+			<when test='sortType == 4'> login_ip desc </when>
+			<when test='sortType == 5'> device_mode desc </when>
+			<when test='sortType == 6'> app_version desc </when>
+			<otherwise> id desc </otherwise>
+		</choose>
+	</select>
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+</mapper>

+ 51 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogService.java

@@ -0,0 +1,51 @@
+package com.pj.project.app_user_login_log;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import com.pj.utils.sg.*;
+
+/**
+ * Service: app_user_login_log -- 移动端用户登录日志
+ * @author qzy 
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class AppUserLoginLogService extends ServiceImpl<AppUserLoginLogMapper, AppUserLoginLog> implements IService<AppUserLoginLog>{
+
+	/** 底层 Mapper 对象 */
+	@Autowired
+	AppUserLoginLogMapper appUserLoginLogMapper;
+
+	/** 增 */
+	void add(AppUserLoginLog t){
+		save(t);
+	}
+
+	/** 删 */
+	void delete(Long id){
+		removeById(id);
+	}
+
+	/** 改 */
+	void update(AppUserLoginLog a){
+		updateById(a);
+
+	}
+
+	/** 查 */
+	AppUserLoginLog getById(Long id){
+		return super.getById(id);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	List<AppUserLoginLog> getList(SoMap so) { 
+		return appUserLoginLogMapper.getList(so);	
+	}
+	
+
+}

+ 29 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user_login_log/AppUserLoginLogUtil.java

@@ -0,0 +1,29 @@
+package com.pj.project.app_user_login_log;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.pj.utils.sg.*;
+
+/**
+ * 工具类:app_user_login_log -- 移动端用户登录日志
+ * @author qzy 
+ *
+ */
+@Component
+public class AppUserLoginLogUtil {
+
+	
+	/** 底层 Mapper 对象 */
+	public static AppUserLoginLogMapper appUserLoginLogMapper;
+	@Autowired
+	private void setAppUserLoginLogMapper(AppUserLoginLogMapper appUserLoginLogMapper) {
+		AppUserLoginLogUtil.appUserLoginLogMapper = appUserLoginLogMapper;
+	}
+	
+
+
+	
+	
+	
+}

+ 65 - 0
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenu.java

@@ -0,0 +1,65 @@
+package com.pj.project.re_role_menu;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.EqualsAndHashCode;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * Model: re_role_menu -- app用户菜单中间表
+ * @author qzy 
+ */
+@Data
+@Accessors(chain = true)
+@TableName(ReRoleMenu.TABLE_NAME)
+@EqualsAndHashCode(callSuper = false)
+public class ReRoleMenu extends Model<ReRoleMenu> implements Serializable {
+
+	// ---------- 模块常量 ----------
+	/**
+	 * 序列化版本id 
+	 */
+	private static final long serialVersionUID = 1L;	
+	/**
+	 * 此模块对应的表名 
+	 */
+	public static final String TABLE_NAME = "re_role_menu";	
+	/**
+	 * 此模块对应的权限码 
+	 */
+	public static final String PERMISSION_CODE = "re-role-menu";
+	public static final String PERMISSION_CODE_ADD = "re-role-menu-add";
+	public static final String PERMISSION_CODE_EDIT = "re-role-menu-edit";
+	public static final String PERMISSION_CODE_DEL = "re-role-menu-del";
+
+
+
+
+	// ---------- 表中字段 ----------
+	/**
+	 * 主键 
+	 */
+	@TableId(type = IdType.AUTO)
+	private Long id;	
+
+	/**
+	 * app用户id 
+	 */
+	private Long appRoleId;	
+
+	/**
+	 * app菜单id 
+	 */
+	private Long appMenuId;	
+
+
+
+
+
+	
+
+
+}

+ 91 - 0
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuController.java

@@ -0,0 +1,91 @@
+package com.pj.project.re_role_menu;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import com.pj.utils.sg.*;
+import com.pj.project4sp.SP;
+
+import com.pj.current.satoken.StpUserUtil;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+
+
+/**
+ * Controller: re_role_menu -- app用户菜单中间表
+ * @author qzy 
+ */
+@RestController
+@RequestMapping("/ReRoleMenu/")
+public class ReRoleMenuController {
+
+	/** 底层 Service 对象 */
+	@Autowired
+	ReRoleMenuService reRoleMenuService;
+
+	/** 增 */  
+	@RequestMapping("add")
+	@SaCheckPermission(ReRoleMenu.PERMISSION_CODE_ADD)
+	public AjaxJson add(ReRoleMenu r){
+		reRoleMenuService.add(r);
+		r = reRoleMenuService.getById(SP.publicMapper.getPrimarykey());
+		return AjaxJson.getSuccessData(r);
+	}
+
+	/** 删 */  
+	@RequestMapping("delete")
+	@SaCheckPermission(ReRoleMenu.PERMISSION_CODE_DEL)
+	public AjaxJson delete(Long id){
+		 reRoleMenuService.delete(id);
+		return AjaxJson.getSuccess();
+	}
+	
+	/** 删 - 根据id列表 */  
+	@RequestMapping("deleteByIds")
+	@SaCheckPermission(ReRoleMenu.PERMISSION_CODE_DEL)
+	public AjaxJson deleteByIds(){
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class); 
+		int line = SP.publicMapper.deleteByIds(ReRoleMenu.TABLE_NAME, ids);
+		return AjaxJson.getByLine(line);
+	}
+	
+	/** 改 */  
+	@RequestMapping("update")
+	@SaCheckPermission(ReRoleMenu.PERMISSION_CODE_EDIT)
+	public AjaxJson update(ReRoleMenu r){
+		reRoleMenuService.update(r);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 查 - 根据id */  
+	@RequestMapping("getById")
+		@SaCheckPermission(ReRoleMenu.PERMISSION_CODE)
+	public AjaxJson getById(Long id){
+		ReRoleMenu r = reRoleMenuService.getById(id);
+		return AjaxJson.getSuccessData(r);
+	}
+
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param appRoleId 职务ID,非必填
+	 * @return
+	 */
+	@RequestMapping("getList")
+		@SaCheckPermission(ReRoleMenu.PERMISSION_CODE)
+	public AjaxJson getList(@RequestParam(value = "appRoleId",required = false) Integer appRoleId) {
+		SoMap so = SoMap.getRequestSoMap();
+		List<ReRoleMenu> list = reRoleMenuService.getList(so.startPage(),appRoleId);
+		return AjaxJson.getPageData(so.getDataCount(), list);
+	}
+	
+	
+	
+	
+
+	
+	
+	
+
+}

+ 30 - 0
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuMapper.java

@@ -0,0 +1,30 @@
+package com.pj.project.re_role_menu;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.pj.utils.so.*;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Mapper: re_role_menu -- app用户菜单中间表
+ * @author qzy 
+ */
+
+@Mapper
+@Repository
+public interface ReRoleMenuMapper extends BaseMapper <ReRoleMenu> {
+
+
+
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param so 参数集合 
+	 * @return 数据列表 
+	 */
+	List<ReRoleMenu> getList(SoMap so);
+
+
+}

+ 47 - 0
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuMapper.xml

@@ -0,0 +1,47 @@
+<?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.pj.project.re_role_menu.ReRoleMenuMapper">
+
+
+
+
+	<!-- ================================== 查询相关 ================================== -->
+	<!-- select id, app_role_id, app_menu_id from re_role_menu  -->
+	
+	<!-- 通用映射:自动模式 -->
+	<resultMap id="model" autoMapping="true" type="com.pj.project.re_role_menu.ReRoleMenu"></resultMap>
+	
+	<!-- 公共查询sql片段 -->
+	<sql id="select_sql">
+		select * 
+		from re_role_menu 
+	</sql>
+
+	
+	<!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [G] -->
+	<select id="getList" resultMap="model">
+		<include refid="select_sql"></include>
+		<where>
+			<if test=' this.has("id") '> and id = #{id} </if>
+			<if test=' this.has("appRoleId") '> and app_role_id = #{appRoleId} </if>
+			<if test=' this.has("appMenuId") '> and app_menu_id = #{appMenuId} </if>
+		</where>
+		order by
+		<choose>
+			<when test='sortType == 1'> id desc </when>
+			<when test='sortType == 2'> app_role_id desc </when>
+			<when test='sortType == 3'> app_menu_id desc </when>
+			<otherwise> id desc </otherwise>
+		</choose>
+	</select>
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+</mapper>

+ 52 - 0
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuService.java

@@ -0,0 +1,52 @@
+package com.pj.project.re_role_menu;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import com.pj.utils.sg.*;
+
+/**
+ * Service: re_role_menu -- app用户菜单中间表
+ * @author qzy 
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ReRoleMenuService extends ServiceImpl<ReRoleMenuMapper, ReRoleMenu> implements IService<ReRoleMenu>{
+
+	/** 底层 Mapper 对象 */
+	@Autowired
+	ReRoleMenuMapper reRoleMenuMapper;
+
+	/** 增 */
+	void add(ReRoleMenu r){
+		save(r);
+	}
+
+	/** 删 */
+	void delete(Long id){
+		removeById(id);
+	}
+
+	/** 改 */
+	void update(ReRoleMenu r){
+		updateById(r);
+
+	}
+
+	/** 查 */
+	ReRoleMenu getById(Long id){
+		return super.getById(id);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	List<ReRoleMenu> getList(SoMap so,Integer appRoleId) {
+		so.set("app_role_id",appRoleId);
+		return reRoleMenuMapper.getList(so);	
+	}
+	
+
+}

+ 27 - 0
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuUtil.java

@@ -0,0 +1,27 @@
+package com.pj.project.re_role_menu;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 工具类:re_role_menu -- app用户菜单中间表
+ * @author qzy 
+ *
+ */
+@Component
+public class ReRoleMenuUtil {
+
+	
+	/** 底层 Mapper 对象 */
+	public static ReRoleMenuMapper reRoleMenuMapper;
+	@Autowired
+	private void setReRoleMenuMapper(ReRoleMenuMapper reRoleMenuMapper) {
+		ReRoleMenuUtil.reRoleMenuMapper = reRoleMenuMapper;
+	}
+	
+
+
+	
+	
+	
+}

+ 75 - 0
sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreement.java

@@ -0,0 +1,75 @@
+package com.pj.project.tb_agreement;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.EqualsAndHashCode;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * Model: tb_agreement -- 隐私政策管理
+ * @author qzy 
+ */
+@Data
+@Accessors(chain = true)
+@TableName(TbAgreement.TABLE_NAME)
+@EqualsAndHashCode(callSuper = false)
+public class TbAgreement extends Model<TbAgreement> implements Serializable {
+
+	// ---------- 模块常量 ----------
+	/**
+	 * 序列化版本id 
+	 */
+	private static final long serialVersionUID = 1L;	
+	/**
+	 * 此模块对应的表名 
+	 */
+	public static final String TABLE_NAME = "tb_agreement";	
+	/**
+	 * 此模块对应的权限码 
+	 */
+	public static final String PERMISSION_CODE = "tb-agreement";
+	public static final String PERMISSION_CODE_ADD = "tb-agreement-add";
+	public static final String PERMISSION_CODE_EDIT = "tb-agreement-edit";
+	public static final String PERMISSION_CODE_DEL = "tb-agreement-del";
+
+
+
+
+	// ---------- 表中字段 ----------
+	/**
+	 * 隐私政策管理主键 
+	 */
+	@TableId(type = IdType.AUTO)
+	private Integer id;	
+
+	/**
+	 * 类型 
+	 */
+	private Integer textType;	
+
+	/**
+	 * 隐私管理文本内容 
+	 */
+	private String context;	
+
+	/**
+	 * 版本号 
+	 */
+	private Integer version;
+
+	/**
+	 * 创建时间 
+	 */
+	private String createTime;	
+
+
+
+
+
+	
+
+
+}

+ 98 - 0
sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementController.java

@@ -0,0 +1,98 @@
+package com.pj.project.tb_agreement;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import com.pj.utils.sg.*;
+import com.pj.project4sp.SP;
+
+import com.pj.current.satoken.StpUserUtil;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+
+
+/**
+ * Controller: tb_agreement -- 隐私政策管理
+ * @author qzy 
+ */
+@RestController
+@RequestMapping("/TbAgreement/")
+public class TbAgreementController {
+
+	/** 底层 Service 对象 */
+	@Autowired
+	TbAgreementService tbAgreementService;
+
+	/** 增 */  
+	@RequestMapping("add")
+	@SaCheckPermission(TbAgreement.PERMISSION_CODE_ADD)
+	public AjaxJson add(TbAgreement t){
+		tbAgreementService.add(t);
+		t = tbAgreementService.getById(SP.publicMapper.getPrimarykey());
+		return AjaxJson.getSuccessData(t);
+	}
+
+	/** 删 */  
+	@RequestMapping("delete")
+	@SaCheckPermission(TbAgreement.PERMISSION_CODE_DEL)
+	public AjaxJson delete(Long id){
+		 tbAgreementService.delete(id);
+		return AjaxJson.getSuccess();
+	}
+	
+	/** 删 - 根据id列表 */  
+	@RequestMapping("deleteByIds")
+	@SaCheckPermission(TbAgreement.PERMISSION_CODE_DEL)
+	public AjaxJson deleteByIds(){
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class); 
+		int line = SP.publicMapper.deleteByIds(TbAgreement.TABLE_NAME, ids);
+		return AjaxJson.getByLine(line);
+	}
+	
+	/** 改 */  
+	@RequestMapping("update")
+	@SaCheckPermission(TbAgreement.PERMISSION_CODE_EDIT)
+	public AjaxJson update(TbAgreement t){
+		tbAgreementService.update(t);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 查 - 根据id */  
+	@RequestMapping("getById")
+		@SaCheckPermission(TbAgreement.PERMISSION_CODE)
+	public AjaxJson getById(Integer id){
+		TbAgreement t = tbAgreementService.getById(id);
+		return AjaxJson.getSuccessData(t);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	@RequestMapping("getList")
+		@SaCheckPermission(TbAgreement.PERMISSION_CODE)
+	public AjaxJson getList() { 
+		SoMap so = SoMap.getRequestSoMap();
+		List<TbAgreement> list = tbAgreementService.getList(so.startPage());
+		return AjaxJson.getPageData(so.getDataCount(), list);
+	}
+
+
+	/**
+	 * 根据类型获取其版本号最大的那一条数据
+	 * @param textType 类型[1=隐私政策管理,2=服务协议]
+	 * @return
+	 */
+	@RequestMapping("getMaxVersion")
+	@SaCheckPermission(TbAgreement.PERMISSION_CODE)
+	public AjaxJson getMaxVersion(Integer textType){
+		TbAgreement t = tbAgreementService.getMaxVersion(textType);
+		return AjaxJson.getSuccessData(t);
+	}
+
+
+
+
+
+
+
+}

+ 30 - 0
sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementMapper.java

@@ -0,0 +1,30 @@
+package com.pj.project.tb_agreement;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.pj.utils.so.*;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Mapper: tb_agreement -- 隐私政策管理
+ * @author qzy 
+ */
+
+@Mapper
+@Repository
+public interface TbAgreementMapper extends BaseMapper <TbAgreement> {
+
+
+
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param so 参数集合 
+	 * @return 数据列表 
+	 */
+	List<TbAgreement> getList(SoMap so);
+
+
+}

+ 51 - 0
sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementMapper.xml

@@ -0,0 +1,51 @@
+<?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.pj.project.tb_agreement.TbAgreementMapper">
+
+
+
+
+	<!-- ================================== 查询相关 ================================== -->
+	<!-- select id, text_type, context, version, create_time from tb_agreement  -->
+	
+	<!-- 通用映射:自动模式 -->
+	<resultMap id="model" autoMapping="true" type="com.pj.project.tb_agreement.TbAgreement"></resultMap>
+	
+	<!-- 公共查询sql片段 -->
+	<sql id="select_sql">
+		select * 
+		from tb_agreement 
+	</sql>
+
+	
+	<!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [G] -->
+	<select id="getList" resultMap="model">
+		<include refid="select_sql"></include>
+		<where>
+			<if test=' this.has("id") '> and id = #{id} </if>
+			<if test=' this.has("textType") '> and text_type = #{textType} </if>
+			<if test=' this.has("context") '> and context = #{context} </if>
+			<if test=' this.has("version") '> and version = #{version} </if>
+			<if test=' this.has("createTime") '> and create_time = #{createTime} </if>
+		</where>
+		order by
+		<choose>
+			<when test='sortType == 1'> id desc </when>
+			<when test='sortType == 2'> text_type desc </when>
+			<when test='sortType == 3'> context desc </when>
+			<when test='sortType == 4'> version desc </when>
+			<when test='sortType == 5'> create_time desc </when>
+			<otherwise> id desc </otherwise>
+		</choose>
+	</select>
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+</mapper>

+ 81 - 0
sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementService.java

@@ -0,0 +1,81 @@
+package com.pj.project.tb_agreement;
+
+import java.util.Comparator;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import com.pj.utils.sg.*;
+
+/**
+ * Service: tb_agreement -- 隐私政策管理
+ * @author qzy 
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class TbAgreementService extends ServiceImpl<TbAgreementMapper, TbAgreement> implements IService<TbAgreement>{
+
+	/** 底层 Mapper 对象 */
+	@Autowired
+	TbAgreementMapper tbAgreementMapper;
+
+	/** 增 */
+	void add(TbAgreement t){
+		//判断
+		if(t == null || t.getTextType() > 2 || t.getTextType() < 0)
+			throw new RuntimeException("请输入正确的类型!");
+		//获取同类型最新的那一条数据
+		LambdaQueryWrapper<TbAgreement> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(TbAgreement::getTextType,t.getTextType());
+		queryWrapper.orderByDesc(TbAgreement::getVersion);
+		TbAgreement tbAgreement = tbAgreementMapper.selectList(queryWrapper).get(0);
+		if(tbAgreement == null)throw new RuntimeException("服务器繁忙,请稍后重试~");
+		//获取最新对象的版本号
+		Integer version = tbAgreement.getVersion();
+		//保存到对象中
+		t.setVersion(version + 1);
+		save(t);
+	}
+
+	/** 删 */
+	void delete(Long id){
+		removeById(id);
+	}
+
+	/** 改 */
+	void update(TbAgreement t){
+		updateById(t);
+
+	}
+
+	/** 查 */
+	TbAgreement getById(Integer id){
+		return super.getById(id);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	List<TbAgreement> getList(SoMap so) { 
+		return tbAgreementMapper.getList(so);	
+	}
+
+	/**
+	 * 根据类型,查询单个协议,获取其最新的一条数据
+	 * 类型[1=隐私政策管理,2=服务协议]
+	 * @return
+	 */
+	TbAgreement getMaxVersion(Integer textType){
+		//构建查询条件
+		LambdaQueryWrapper<TbAgreement> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(TbAgreement::getTextType,textType);
+		List<TbAgreement> tbAgreements = tbAgreementMapper.selectList(queryWrapper);
+		//过滤版本号最大的一条数据
+		TbAgreement tbAgreement = tbAgreements.stream().max(Comparator.comparing(TbAgreement::getVersion)).orElse(null);
+		return tbAgreement;
+	}
+
+}

+ 27 - 0
sp-service/sp-admin/src/main/java/com/pj/project/tb_agreement/TbAgreementUtil.java

@@ -0,0 +1,27 @@
+package com.pj.project.tb_agreement;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 工具类:tb_agreement -- 隐私政策管理
+ * @author qzy 
+ *
+ */
+@Component
+public class TbAgreementUtil {
+
+	
+	/** 底层 Mapper 对象 */
+	public static TbAgreementMapper tbAgreementMapper;
+	@Autowired
+	private void setTbAgreementMapper(TbAgreementMapper tbAgreementMapper) {
+		TbAgreementUtil.tbAgreementMapper = tbAgreementMapper;
+	}
+	
+
+
+	
+	
+	
+}

+ 1 - 2
sp-service/sp-admin/src/main/java/com/pj/project4sp/admin4login/SpAccAdminService.java

@@ -93,8 +93,7 @@ public class SpAccAdminService {
         // =========== 至此, 已登录成功 ============ 
         successLogin(admin);
         StpUtil.login(admin.getId());
-
-        // 组织返回参数  
+        // 组织返回参数
         SoMap map = new SoMap();
         map.put("admin", admin);
         List<String> per_list = spRolePermissionService.getPcodeByRid2(admin.getRoleId());

+ 25 - 21
sp-service/transport-server/src/main/java/com/pj/project/tb_driver/TbDriver.java

@@ -129,59 +129,63 @@ public class TbDriver extends Model<TbDriver> implements Serializable {
 	private Integer isLock;
 
 	/**
-	 * 创建者id 
+	 * 审核不通过原因
 	 */
-	private String createBy;	
+	private String nopassReason;
+
 
 	/**
-	 * 创建者名称 
+	 * 审核状态(0=待审核,1=已通过,2=不通过)
 	 */
-	private String createName;	
+	private Integer auditStatus;
 
 	/**
-	 * 创建时间 
+	 * 审核人
 	 */
-	@JsonFormat(pattern = "yyyy-MM-dd")
-	private Date createTime;
+	private String auditBy;
 
 	/**
-	 * 审核不通过原因
+	 * 审核时间
 	 */
-	private String nopassReason;
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date auditTime;
+
+
 
 	/**
-	 * 更新者id 
+	 * 创建者id 
 	 */
-	private String updateBy;	
+	private String createBy;	
 
 	/**
-	 * 更新者名称 
+	 * 创建者名称 
 	 */
-	private String updateName;	
+	private String createName;	
 
 	/**
-	 * 更新时间 
+	 * 创建时间 
 	 */
 	@JsonFormat(pattern = "yyyy-MM-dd")
-	private Date updateTime;	
+	private Date createTime;
 
 
 
 	/**
-	 * 审核状态(0=待审核,1=已通过,2=不通过) 
+	 * 更新者id 
 	 */
-	private Integer auditStatus;	
+	private String updateBy;	
 
 	/**
-	 * 审核人 
+	 * 更新者名称 
 	 */
-	private String auditBy;	
+	private String updateName;	
 
 	/**
-	 * 审核时间 
+	 * 更新时间 
 	 */
 	@JsonFormat(pattern = "yyyy-MM-dd")
-	private Date auditTime;
+	private Date updateTime;	
+
 
 
 

+ 0 - 2
sp-service/transport-server/src/main/java/com/pj/project/tb_driver/TbDriverController.java

@@ -4,13 +4,11 @@ import java.io.IOException;
 import java.util.List;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import com.pj.utils.sg.*;
 import com.pj.project4sp.SP;
 
-import com.pj.current.satoken.StpUserUtil;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import org.springframework.web.multipart.MultipartFile;