From d2f062b46a96a2083864d529aff28628eea26b58 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期四, 13 三月 2025 13:58:35 +0800
Subject: [PATCH] add: 短信+内容+字典
---
src/main/java/com/jsh/erp/datasource/mappers/SysDictMapper.java | 15
src/main/java/com/jsh/erp/service/redis/RedisUtil.java | 22 +
src/main/java/com/jsh/erp/service/sms/impl/SmsServiceImpl.java | 83 ++++
src/main/java/com/jsh/erp/service/sms/SmsService.java | 6
src/main/resources/mapper_xml/SysDictMapper.xml | 51 ++
src/main/java/com/jsh/erp/filter/LogCostFilter.java | 42 +
src/main/resources/application.properties | 14
src/main/java/com/jsh/erp/service/cloudContent/impl/CloudContentServiceImpl.java | 45 ++
src/main/java/com/jsh/erp/datasource/entities/SysDictItem.java | 19 +
src/main/java/com/jsh/erp/service/sys/impl/SysDictServiceImpl.java | 83 ++++
src/main/java/com/jsh/erp/service/user/UserService.java | 9
src/main/java/com/jsh/erp/datasource/mappers/SysDictItemMapper.java | 26 +
src/main/java/com/jsh/erp/datasource/mappers/CloudContentMapper.java | 26 +
src/main/java/com/jsh/erp/service/sys/SysDictService.java | 33 +
src/main/java/com/jsh/erp/controller/CloudContentController.java | 142 +++++++
src/main/resources/mapper_xml/CloudContentMapper.xml | 48 ++
src/main/java/com/jsh/erp/config/Swagger2Config.java | 40 +
src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java | 4
src/main/java/com/jsh/erp/service/cloudContent/CloudContentService.java | 19 +
src/main/java/com/jsh/erp/utils/BaseResponseInfo.java | 2
src/main/resources/mapper_xml/SysDictItemMapper.xml | 42 ++
src/main/java/com/jsh/erp/controller/SmsController.java | 68 +++
src/main/java/com/jsh/erp/controller/SysDictController.java | 206 ++++++++++
src/main/java/com/jsh/erp/datasource/entities/SysDict.java | 17
src/main/java/com/jsh/erp/datasource/entities/CloudContent.java | 18
src/main/java/com/jsh/erp/service/redis/RedisConfig.java | 19 +
26 files changed, 1,085 insertions(+), 14 deletions(-)
diff --git a/src/main/java/com/jsh/erp/config/Swagger2Config.java b/src/main/java/com/jsh/erp/config/Swagger2Config.java
index 95c1f1a..042a93e 100644
--- a/src/main/java/com/jsh/erp/config/Swagger2Config.java
+++ b/src/main/java/com/jsh/erp/config/Swagger2Config.java
@@ -5,11 +5,14 @@
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.Contact;
+import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.List;
/**
* 插件集成配置
@@ -26,19 +29,46 @@
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(this.apiInfo())
.select()
- .apis(RequestHandlerSelectors.any())
+ .apis(RequestHandlerSelectors.basePackage("com.jsh.erp.controller"))
.paths(PathSelectors.any())
- .build();
+ .build()
+ // 添加登录认证
+ .securityContexts(securityContexts())
+ .securitySchemes(securitySchemes());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("云游管理系统 Restful Api")
.description("云游管理系统接口描述")
- .termsOfServiceUrl("http://127.0.0.1")
+ .termsOfServiceUrl("http://localhost:8888/jshERP-boot")
.contact(new Contact("jishenghua", "", ""))
.version("3.0")
.build();
}
+ private List<ApiKey> securitySchemes() {
+ List<ApiKey> apiKeys = new ArrayList<>();
+ apiKeys.add(new ApiKey("Authorization", "Authorization", "header"));
+ return apiKeys;
+ }
+
+ private List<SecurityContext> securityContexts() {
+ List<SecurityContext> securityContexts = new ArrayList<>();
+ securityContexts.add(SecurityContext.builder()
+ .securityReferences(defaultAuth())
+ .forPaths(PathSelectors.regex("^(?!auth).*$"))
+ .build());
+ return securityContexts;
+ }
+
+ private List<SecurityReference> defaultAuth() {
+ AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+ AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+ authorizationScopes[0] = authorizationScope;
+ List<SecurityReference> securityReferences = new ArrayList<>();
+ securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
+ return securityReferences;
+ }
+
}
diff --git a/src/main/java/com/jsh/erp/controller/CloudContentController.java b/src/main/java/com/jsh/erp/controller/CloudContentController.java
new file mode 100644
index 0000000..3c8a193
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/CloudContentController.java
@@ -0,0 +1,142 @@
+package com.jsh.erp.controller;
+
+import com.jsh.erp.datasource.entities.CloudContent;
+import com.jsh.erp.service.cloudContent.CloudContentService;
+import com.jsh.erp.utils.BaseResponseInfo;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/cloudContent")
+@Api(tags = "内容管理接口")
+public class CloudContentController {
+ @Resource
+ private CloudContentService cloudContentService;
+
+ @GetMapping("/list")
+ public BaseResponseInfo list(@RequestParam(value = "title", required = false) String title,
+ @RequestParam(value = "type", required = false) String type,
+ @RequestParam(value = "status", required = false) Integer status,
+ @RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ Map<String, Object> map = new HashMap<>();
+ try {
+ CloudContent query = new CloudContent();
+ query.setTitle(title);
+ query.setType(type);
+ query.setStatus(status);
+
+ List<CloudContent> dataList = cloudContentService.getList(query);
+ int total = dataList.size();
+ map.put("total", total);
+ map.put("rows", dataList);
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = map;
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @GetMapping("/getByType")
+ public BaseResponseInfo getByType(@RequestParam(value = "type", required = true) String type) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ CloudContent cloudContent = cloudContentService.getByType(type);
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = cloudContent;
+ } catch (Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @GetMapping("/{id}")
+ public BaseResponseInfo getById(@PathVariable Long id) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ CloudContent data = cloudContentService.getById(id);
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = data;
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @PostMapping
+ public BaseResponseInfo add(@RequestBody CloudContent cloudContent) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = cloudContentService.add(cloudContent);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = "新增成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @PutMapping
+ public BaseResponseInfo update(@RequestBody CloudContent cloudContent) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = cloudContentService.update(cloudContent);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = "修改成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @DeleteMapping("/{id}")
+ public BaseResponseInfo delete(@PathVariable Long id) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = cloudContentService.deleteById(id);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = "删除成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @DeleteMapping("/deleteBatch")
+ public BaseResponseInfo deleteBatch(@RequestParam("ids") String ids) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ String[] idArray = ids.split(",");
+ int result = 0;
+ for(String id : idArray) {
+ result += cloudContentService.deleteById(Long.parseLong(id));
+ }
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = "删除成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/controller/SmsController.java b/src/main/java/com/jsh/erp/controller/SmsController.java
new file mode 100644
index 0000000..b52c13c
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/SmsController.java
@@ -0,0 +1,68 @@
+package com.jsh.erp.controller;
+
+import com.jsh.erp.datasource.entities.User;
+import com.jsh.erp.datasource.entities.UserEx;
+import com.jsh.erp.service.sms.SmsService;
+import com.jsh.erp.service.user.UserService;
+import com.jsh.erp.utils.BaseResponseInfo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/api/sms")
+@RequiredArgsConstructor
+public class SmsController {
+ private final SmsService smsService;
+
+ @Resource
+ private UserService userService;
+
+ @PostMapping("/send-code")
+ public BaseResponseInfo sendCode(@RequestParam String phone) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ boolean success = smsService.sendCode(phone);
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = success;
+ } catch (Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @PostMapping("/login")
+ public BaseResponseInfo loginByCode(@RequestParam String phone, @RequestParam String code) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ //验证验证码
+ if (smsService.verifyCode(phone, code)) {
+ try {
+ //登录处理逻辑
+ //查询用户表中有没有对应手机号的信息,没有就注册
+ User user = userService.getByPhone(phone);
+ if (ObjectUtils.isEmpty(user)) {
+ UserEx userEx = new UserEx();
+ userEx.setPhonenum(phone);
+ userService.addUser(userEx);
+ }
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = true;
+ } catch (Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ } else {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = false;
+ return baseResponseInfo;
+ }
+ }
+
+}
diff --git a/src/main/java/com/jsh/erp/controller/SysDictController.java b/src/main/java/com/jsh/erp/controller/SysDictController.java
new file mode 100644
index 0000000..f137897
--- /dev/null
+++ b/src/main/java/com/jsh/erp/controller/SysDictController.java
@@ -0,0 +1,206 @@
+package com.jsh.erp.controller;
+
+import com.jsh.erp.datasource.entities.SysDict;
+import com.jsh.erp.datasource.entities.SysDictItem;
+import com.jsh.erp.service.sys.SysDictService;
+import com.jsh.erp.utils.BaseResponseInfo;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/sysDict")
+public class SysDictController {
+ @Resource
+ private SysDictService sysDictService;
+
+ @GetMapping("/list")
+ public BaseResponseInfo list(@RequestParam(value = "dictCode", required = false) String dictCode,
+ @RequestParam(value = "dictName", required = false) String dictName,
+ @RequestParam(value = "status", required = false) Integer status,
+ @RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ Map<String, Object> map = new HashMap<>();
+ try {
+ SysDict query = new SysDict();
+ query.setDictCode(dictCode);
+ query.setDictName(dictName);
+ query.setStatus(status);
+
+ List<SysDict> dataList = sysDictService.getList(query);
+ int total = dataList.size();
+ map.put("total", total);
+ map.put("rows", dataList);
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = map;
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @GetMapping("/{id}")
+ public BaseResponseInfo getById(@PathVariable Long id) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ SysDict data = sysDictService.getById(id);
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = data;
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @PostMapping
+ public BaseResponseInfo add(@RequestBody SysDict sysDict) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = sysDictService.add(sysDict);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.msg = "新增成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @PutMapping
+ public BaseResponseInfo update(@RequestBody SysDict sysDict) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = sysDictService.update(sysDict);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.msg = "修改成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @DeleteMapping("/{id}")
+ public BaseResponseInfo delete(@PathVariable Long id) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = sysDictService.deleteById(id);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.msg = "删除成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @DeleteMapping("/deleteBatch")
+ public BaseResponseInfo deleteBatch(@RequestParam("ids") String ids) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ String[] idArray = ids.split(",");
+ int result = 0;
+ for(String id : idArray) {
+ result += sysDictService.deleteById(Long.parseLong(id));
+ }
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = "删除成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ // 字典项相关接口
+ @GetMapping("/items/{dictId}")
+ public BaseResponseInfo getItems(@PathVariable Long dictId) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ List<SysDictItem> items = sysDictService.getItemsByDictId(dictId);
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = items;
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @PostMapping("/item")
+ public BaseResponseInfo addItem(@RequestBody SysDictItem sysDictItem) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = sysDictService.addItem(sysDictItem);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.msg = "新增成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @PutMapping("/item")
+ public BaseResponseInfo updateItem(@RequestBody SysDictItem sysDictItem) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = sysDictService.updateItem(sysDictItem);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.msg = "修改成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+ @DeleteMapping("/item/{id}")
+ public BaseResponseInfo deleteItem(@PathVariable Long id) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ int result = sysDictService.deleteItemById(id);
+ if(result > 0) {
+ baseResponseInfo.code = 200;
+ baseResponseInfo.msg = "删除成功";
+ }
+ } catch(Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.msg = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+
+
+ @GetMapping("/getByDictCodeAndItemText")
+ public BaseResponseInfo getByDictCodeAndItemText(@RequestParam(value = "dictCode", required = true) String dictCode,
+ @RequestParam(value = "itemText", required = true) String itemText) {
+ BaseResponseInfo baseResponseInfo = new BaseResponseInfo();
+ try {
+ SysDictItem sysDictItem = sysDictService.getByDictCodeAndItemText(dictCode,itemText);
+ baseResponseInfo.code = 200;
+ baseResponseInfo.data = sysDictItem;
+ } catch (Exception e) {
+ baseResponseInfo.code = 500;
+ baseResponseInfo.data = e.getMessage();
+ }
+ return baseResponseInfo;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/datasource/entities/CloudContent.java b/src/main/java/com/jsh/erp/datasource/entities/CloudContent.java
new file mode 100644
index 0000000..d2e9020
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/entities/CloudContent.java
@@ -0,0 +1,18 @@
+package com.jsh.erp.datasource.entities;
+
+import lombok.Data;
+import java.util.Date;
+
+@Data
+public class CloudContent {
+ private Long id;
+ private String type;
+ private String title;
+ private String content;
+ private String version;
+ private Integer status;
+ private Date createTime;
+ private Long creator;
+ private Date updateTime;
+ private Long updater;
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/datasource/entities/SysDict.java b/src/main/java/com/jsh/erp/datasource/entities/SysDict.java
new file mode 100644
index 0000000..9572518
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/entities/SysDict.java
@@ -0,0 +1,17 @@
+package com.jsh.erp.datasource.entities;
+
+import lombok.Data;
+import java.util.Date;
+
+@Data
+public class SysDict {
+ private Long id;
+ private String dictCode;
+ private String dictName;
+ private String description;
+ private Integer status;
+ private Date createTime;
+ private Long creator;
+ private Date updateTime;
+ private Long updater;
+}
diff --git a/src/main/java/com/jsh/erp/datasource/entities/SysDictItem.java b/src/main/java/com/jsh/erp/datasource/entities/SysDictItem.java
new file mode 100644
index 0000000..5369338
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/entities/SysDictItem.java
@@ -0,0 +1,19 @@
+package com.jsh.erp.datasource.entities;
+
+import lombok.Data;
+import java.util.Date;
+
+@Data
+public class SysDictItem {
+ private Long id;
+ private Long dictId;
+ private String itemText;
+ private String itemValue;
+ private String description;
+ private Integer sortOrder;
+ private Integer status;
+ private Date createTime;
+ private Long creator;
+ private Date updateTime;
+ private Long updater;
+}
diff --git a/src/main/java/com/jsh/erp/datasource/mappers/CloudContentMapper.java b/src/main/java/com/jsh/erp/datasource/mappers/CloudContentMapper.java
new file mode 100644
index 0000000..ce55559
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/mappers/CloudContentMapper.java
@@ -0,0 +1,26 @@
+package com.jsh.erp.datasource.mappers;
+
+import com.jsh.erp.datasource.entities.CloudContent;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface CloudContentMapper {
+
+
+ @Select("select * from cloud_content where status = '1' and type =#{type} limit 1")
+ CloudContent getByType(@Param("type") String type);
+
+ List<CloudContent> selectList(CloudContent cloudContent);
+
+ CloudContent selectById(Long id);
+
+ int insert(CloudContent cloudContent);
+
+ int update(CloudContent cloudContent);
+
+ int deleteById(Long id);
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/datasource/mappers/SysDictItemMapper.java b/src/main/java/com/jsh/erp/datasource/mappers/SysDictItemMapper.java
new file mode 100644
index 0000000..d720a17
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/mappers/SysDictItemMapper.java
@@ -0,0 +1,26 @@
+package com.jsh.erp.datasource.mappers;
+
+import com.jsh.erp.datasource.entities.SysDictItem;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface SysDictItemMapper {
+ List<SysDictItem> selectByDictId(Long dictId);
+
+ SysDictItem selectById(Long id);
+
+ int insert(SysDictItem sysDictItem);
+
+ int update(SysDictItem sysDictItem);
+
+ int deleteById(Long id);
+
+ int deleteByDictId(Long dictId);
+
+ //通过字典类型和字典code查询具体一条
+ @Select("SELECT * FROM sys_dict_item di LEFT JOIN sys_dict d ON di.dict_id = d.id WHERE d.dict_code = #{dictCode} AND di.item_text = #{itemText}")
+ SysDictItem getByDictCodeAndItemText(String dictCode, String itemText);
+}
diff --git a/src/main/java/com/jsh/erp/datasource/mappers/SysDictMapper.java b/src/main/java/com/jsh/erp/datasource/mappers/SysDictMapper.java
new file mode 100644
index 0000000..0db208e
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/mappers/SysDictMapper.java
@@ -0,0 +1,15 @@
+package com.jsh.erp.datasource.mappers;
+
+import com.jsh.erp.datasource.entities.SysDict;
+import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+
+@Mapper
+public interface SysDictMapper {
+ List<SysDict> selectList(SysDict sysDict);
+ SysDict selectById(Long id);
+ int insert(SysDict sysDict);
+ int update(SysDict sysDict);
+ int deleteById(Long id);
+ SysDict selectByCode(String dictCode);
+}
diff --git a/src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java b/src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java
index a6b9e79..3b628a7 100644
--- a/src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java
+++ b/src/main/java/com/jsh/erp/datasource/mappers/UserMapper.java
@@ -4,6 +4,7 @@
import com.jsh.erp.datasource.entities.UserExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
public interface UserMapper {
long countByExample(UserExample example);
@@ -27,4 +28,7 @@
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
+
+ @Select("select * from jsh_user where phonenum =#{phonenum}")
+ User getByPhone(String phonenum);
}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/filter/LogCostFilter.java b/src/main/java/com/jsh/erp/filter/LogCostFilter.java
index 8b8bee2..49c690d 100644
--- a/src/main/java/com/jsh/erp/filter/LogCostFilter.java
+++ b/src/main/java/com/jsh/erp/filter/LogCostFilter.java
@@ -17,7 +17,10 @@
"/jshERP-boot/user/registerUser#/jshERP-boot/user/randomImage#" +
"/jshERP-boot/platformConfig/getPlatform#/jshERP-boot/v2/api-docs#/jshERP-boot/webjars#" +
"/jshERP-boot/systemConfig/static#/jshERP-boot/api/plugin/wechat/weChat/share#" +
- "/jshERP-boot/api/plugin/general-ledger/pdf/voucher#/jshERP-boot/api/plugin/tenant-statistics/tenantClean")})
+ "/jshERP-boot/api/plugin/general-ledger/pdf/voucher#/jshERP-boot/api/plugin/tenant-statistics/tenantClean#" +
+ "/jshERP-boot/swagger-ui.html#/jshERP-boot/swagger-resources#" +
+ "/jshERP-boot/doc.html#/jshERP-boot/swagger-resources/**#" +
+ "/jshERP-boot/v2/api-docs/**#/jshERP-boot/webjars/**")})
public class LogCostFilter implements Filter {
private static final String FILTER_PATH = "filterPath";
@@ -40,14 +43,26 @@
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
String requestUrl = servletRequest.getRequestURI();
- //具体,比如:处理若用户未登录,则跳转到登录页
- Object userId = redisService.getObjectFromSessionByKey(servletRequest,"userId");
- if(userId!=null) { //如果已登录,不阻止
+
+ if (isSwaggerRequest(requestUrl)) {
chain.doFilter(request, response);
return;
}
- if (requestUrl != null && (requestUrl.contains("/doc.html") ||
- requestUrl.contains("/user/login") || requestUrl.contains("/user/register"))) {
+
+ if (requestUrl != null && (
+ requestUrl.contains("/doc.html") ||
+ requestUrl.contains("/swagger-ui.html") ||
+ requestUrl.contains("/swagger-resources") ||
+ requestUrl.contains("/v2/api-docs") ||
+ requestUrl.contains("/webjars/") ||
+ requestUrl.contains("/user/login") ||
+ requestUrl.contains("/user/register"))) {
+ chain.doFilter(request, response);
+ return;
+ }
+
+ Object userId = redisService.getObjectFromSessionByKey(servletRequest,"userId");
+ if(userId!=null) { //如果已登录,不阻止
chain.doFilter(request, response);
return;
}
@@ -64,6 +79,21 @@
servletResponse.getWriter().write("loginOut");
}
}
+ private boolean isSwaggerRequest(String requestUrl) {
+ return requestUrl != null && (
+ requestUrl.contains("/doc.html") ||
+ requestUrl.contains("/swagger-ui.html") ||
+ requestUrl.contains("/swagger-resources") ||
+ requestUrl.contains("/v2/api-docs") ||
+ requestUrl.contains("/webjars/") ||
+ requestUrl.contains("/user/login") ||
+ requestUrl.contains("/user/register") ||
+ // 添加API尝试请求
+ requestUrl.contains("/cloudContent/getByType") || // 允许未登录访问的API
+ requestUrl.contains("/cloudContent/list") || // 允许未登录访问的API
+ requestUrl.contains("/sysDict/getByDictCodeAndItemText") //允许查询字典值API
+ );
+ }
@Override
public void destroy() {
diff --git a/src/main/java/com/jsh/erp/service/cloudContent/CloudContentService.java b/src/main/java/com/jsh/erp/service/cloudContent/CloudContentService.java
new file mode 100644
index 0000000..675cbd9
--- /dev/null
+++ b/src/main/java/com/jsh/erp/service/cloudContent/CloudContentService.java
@@ -0,0 +1,19 @@
+package com.jsh.erp.service.cloudContent;
+
+import com.jsh.erp.datasource.entities.CloudContent;
+
+import java.util.List;
+
+public interface CloudContentService {
+ List<CloudContent> getList(CloudContent cloudContent);
+
+ CloudContent getById(Long id);
+
+ int add(CloudContent cloudContent);
+
+ int update(CloudContent cloudContent);
+
+ int deleteById(Long id);
+
+ CloudContent getByType(String type);
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/service/cloudContent/impl/CloudContentServiceImpl.java b/src/main/java/com/jsh/erp/service/cloudContent/impl/CloudContentServiceImpl.java
new file mode 100644
index 0000000..4b03955
--- /dev/null
+++ b/src/main/java/com/jsh/erp/service/cloudContent/impl/CloudContentServiceImpl.java
@@ -0,0 +1,45 @@
+package com.jsh.erp.service.cloudContent.impl;
+
+import com.jsh.erp.datasource.entities.CloudContent;
+import com.jsh.erp.datasource.mappers.CloudContentMapper;
+import com.jsh.erp.service.cloudContent.CloudContentService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class CloudContentServiceImpl implements CloudContentService {
+ @Resource
+ private CloudContentMapper cloudContentMapper;
+
+ @Override
+ public List<CloudContent> getList(CloudContent cloudContent) {
+ return cloudContentMapper.selectList(cloudContent);
+ }
+
+ @Override
+ public CloudContent getById(Long id) {
+ return cloudContentMapper.selectById(id);
+ }
+
+ @Override
+ public int add(CloudContent cloudContent) {
+ return cloudContentMapper.insert(cloudContent);
+ }
+
+ @Override
+ public int update(CloudContent cloudContent) {
+ return cloudContentMapper.update(cloudContent);
+ }
+
+ @Override
+ public int deleteById(Long id) {
+ return cloudContentMapper.deleteById(id);
+ }
+
+ @Override
+ public CloudContent getByType(String type) {
+ return cloudContentMapper.getByType(type);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/service/redis/RedisConfig.java b/src/main/java/com/jsh/erp/service/redis/RedisConfig.java
new file mode 100644
index 0000000..31ff609
--- /dev/null
+++ b/src/main/java/com/jsh/erp/service/redis/RedisConfig.java
@@ -0,0 +1,19 @@
+package com.jsh.erp.service.redis;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+ @Bean
+ public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
+ RedisTemplate<String, String> template = new RedisTemplate<>();
+ template.setConnectionFactory(factory);
+ template.setKeySerializer(new StringRedisSerializer());
+ template.setValueSerializer(new StringRedisSerializer());
+ return template;
+ }
+}
diff --git a/src/main/java/com/jsh/erp/service/redis/RedisUtil.java b/src/main/java/com/jsh/erp/service/redis/RedisUtil.java
new file mode 100644
index 0000000..bf7054f
--- /dev/null
+++ b/src/main/java/com/jsh/erp/service/redis/RedisUtil.java
@@ -0,0 +1,22 @@
+package com.jsh.erp.service.redis;
+
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.TimeUnit;
+
+@Component
+@RequiredArgsConstructor
+public class RedisUtil {
+ private final RedisTemplate<String, String> redisTemplate;
+
+ public void setCode(String phone, String code) {
+ redisTemplate.opsForValue().set(phone, code, 2, TimeUnit.MINUTES);
+ }
+
+ public String getCode(String phone) {
+ return redisTemplate.opsForValue().get(phone);
+ }
+}
diff --git a/src/main/java/com/jsh/erp/service/sms/SmsService.java b/src/main/java/com/jsh/erp/service/sms/SmsService.java
new file mode 100644
index 0000000..48cb97d
--- /dev/null
+++ b/src/main/java/com/jsh/erp/service/sms/SmsService.java
@@ -0,0 +1,6 @@
+package com.jsh.erp.service.sms;
+
+public interface SmsService {
+ boolean sendCode(String phone);
+ boolean verifyCode(String phone, String code);
+}
diff --git a/src/main/java/com/jsh/erp/service/sms/impl/SmsServiceImpl.java b/src/main/java/com/jsh/erp/service/sms/impl/SmsServiceImpl.java
new file mode 100644
index 0000000..0ff9fba
--- /dev/null
+++ b/src/main/java/com/jsh/erp/service/sms/impl/SmsServiceImpl.java
@@ -0,0 +1,83 @@
+package com.jsh.erp.service.sms.impl;
+
+import com.jsh.erp.service.redis.RedisUtil;
+import com.jsh.erp.service.sms.SmsService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.Random;
+
+@Service
+@Slf4j
+public class SmsServiceImpl implements SmsService {
+ private final RedisUtil redisUtil;
+
+ private final String accessKey;
+ private final String secretKey;
+ private final String region;
+ private final String signName;
+ private final String templateId;
+
+ public SmsServiceImpl(RedisUtil redisUtil, @Value("${volc.sms.access-key}") String accessKey, @Value("${volc.sms.secret-key}") String secretKey, @Value("${volc.sms.region}") String region, @Value("${volc.sms.sign-name}") String signName, @Value("${volc.sms.template-id}") String templateId) {
+ this.redisUtil = redisUtil;
+ this.accessKey = accessKey;
+ this.secretKey = secretKey;
+ this.region = region;
+ this.signName = signName;
+ this.templateId = templateId;
+ }
+
+ @Override
+ public boolean sendCode(String phone) {
+ //测试生成固定的凑得
+ String code = "888888";
+ redisUtil.setCode(phone, code);
+ return true;
+// // 生成6位随机验证码
+// String code = String.format("%06d", new Random().nextInt(999999));
+//
+// // 存储到Redis
+// redisUtil.setCode(phone, code);
+//
+// // 构造火山云请求
+// try {
+// // 使用火山云短信API(示例为简化版,需根据官方文档调整)
+// String url = "https://sms.volcengineapi.com/v2/send";
+// String jsonBody = String.format("{\"phone\":\"%s\",\"sign_name\":\"%s\",\"template_id\":\"%s\",\"template_param\":\"{\\\"code\\\":\\\"%s\\\"}\"}", phone, signName, templateId, code);
+//
+// // 生成签名(需按火山云签名算法实现)
+// String signature = generateVolcSignature(accessKey, secretKey);
+//
+// // 发送HTTP请求
+// CloseableHttpClient client = HttpClients.createDefault();
+// HttpPost httpPost = new HttpPost(url);
+// httpPost.setHeader("Content-Type", "application/json");
+// httpPost.setHeader("Authorization", "HMAC-SHA256 Credential=" + accessKey + ",Signature=" + signature);
+// httpPost.setEntity(new StringEntity(jsonBody));
+//
+// CloseableHttpResponse response = client.execute(httpPost);
+// return response.getStatusLine().getStatusCode() == 200;
+// } catch (Exception e) {
+// log.error("短信发送失败: {}", e.getMessage());
+// return false;
+// }
+ }
+
+ @Override
+ public boolean verifyCode(String phone, String code) {
+ String storedCode = redisUtil.getCode(phone);
+ return code != null && code.equals(storedCode);
+ }
+
+ // 火山云签名生成方法(需根据官方文档实现)
+ private String generateVolcSignature(String accessKey, String secretKey) {
+ // 实际需按火山云签名算法生成(示例简化)
+ return "generated_signature";
+ }
+}
diff --git a/src/main/java/com/jsh/erp/service/sys/SysDictService.java b/src/main/java/com/jsh/erp/service/sys/SysDictService.java
new file mode 100644
index 0000000..798cfb2
--- /dev/null
+++ b/src/main/java/com/jsh/erp/service/sys/SysDictService.java
@@ -0,0 +1,33 @@
+package com.jsh.erp.service.sys;
+
+import com.jsh.erp.datasource.entities.SysDict;
+import com.jsh.erp.datasource.entities.SysDictItem;
+
+import java.util.List;
+
+public interface SysDictService {
+ List<SysDict> getList(SysDict sysDict);
+
+ SysDict getById(Long id);
+
+ int add(SysDict sysDict);
+
+ int update(SysDict sysDict);
+
+ int deleteById(Long id);
+
+ SysDict getByCode(String dictCode);
+
+ // 字典项相关
+ List<SysDictItem> getItemsByDictId(Long dictId);
+
+ SysDictItem getItemById(Long id);
+
+ int addItem(SysDictItem sysDictItem);
+
+ int updateItem(SysDictItem sysDictItem);
+
+ int deleteItemById(Long id);
+
+ SysDictItem getByDictCodeAndItemText(String dictCode, String itemText);
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/service/sys/impl/SysDictServiceImpl.java b/src/main/java/com/jsh/erp/service/sys/impl/SysDictServiceImpl.java
new file mode 100644
index 0000000..0ab1310
--- /dev/null
+++ b/src/main/java/com/jsh/erp/service/sys/impl/SysDictServiceImpl.java
@@ -0,0 +1,83 @@
+package com.jsh.erp.service.sys.impl;
+
+import com.jsh.erp.datasource.entities.SysDict;
+import com.jsh.erp.datasource.entities.SysDictItem;
+import com.jsh.erp.datasource.mappers.SysDictItemMapper;
+import com.jsh.erp.datasource.mappers.SysDictMapper;
+import com.jsh.erp.service.sys.SysDictService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class SysDictServiceImpl implements SysDictService {
+ @Resource
+ private SysDictMapper sysDictMapper;
+
+ @Resource
+ private SysDictItemMapper sysDictItemMapper;
+
+ @Override
+ public List<SysDict> getList(SysDict sysDict) {
+ return sysDictMapper.selectList(sysDict);
+ }
+
+ @Override
+ public SysDict getById(Long id) {
+ return sysDictMapper.selectById(id);
+ }
+
+ @Override
+ public int add(SysDict sysDict) {
+ return sysDictMapper.insert(sysDict);
+ }
+
+ @Override
+ public int update(SysDict sysDict) {
+ return sysDictMapper.update(sysDict);
+ }
+
+ @Override
+ @Transactional
+ public int deleteById(Long id) {
+ sysDictItemMapper.deleteByDictId(id);
+ return sysDictMapper.deleteById(id);
+ }
+
+ @Override
+ public SysDict getByCode(String dictCode) {
+ return sysDictMapper.selectByCode(dictCode);
+ }
+
+ @Override
+ public List<SysDictItem> getItemsByDictId(Long dictId) {
+ return sysDictItemMapper.selectByDictId(dictId);
+ }
+
+ @Override
+ public SysDictItem getItemById(Long id) {
+ return sysDictItemMapper.selectById(id);
+ }
+
+ @Override
+ public int addItem(SysDictItem sysDictItem) {
+ return sysDictItemMapper.insert(sysDictItem);
+ }
+
+ @Override
+ public int updateItem(SysDictItem sysDictItem) {
+ return sysDictItemMapper.update(sysDictItem);
+ }
+
+ @Override
+ public int deleteItemById(Long id) {
+ return sysDictItemMapper.deleteById(id);
+ }
+
+ @Override
+ public SysDictItem getByDictCodeAndItemText(String dictCode, String itemText) {
+ return sysDictItemMapper.getByDictCodeAndItemText(dictCode, itemText);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/service/user/UserService.java b/src/main/java/com/jsh/erp/service/user/UserService.java
index e8b0190..7a26da9 100644
--- a/src/main/java/com/jsh/erp/service/user/UserService.java
+++ b/src/main/java/com/jsh/erp/service/user/UserService.java
@@ -8,6 +8,7 @@
import com.jsh.erp.service.redis.RedisService;
import com.jsh.erp.service.role.RoleService;
import com.jsh.erp.utils.HttpClient;
+import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -963,4 +964,12 @@
}
return 0;
}
+ public User getByPhone(String phonenum){
+ User user = userMapper.getByPhone(phonenum);
+ if (!ObjectUtils.isEmpty(user)) {
+ return user;
+ } else {
+ return null;
+ }
+ }
}
diff --git a/src/main/java/com/jsh/erp/utils/BaseResponseInfo.java b/src/main/java/com/jsh/erp/utils/BaseResponseInfo.java
index 807d0ea..93e5b6b 100644
--- a/src/main/java/com/jsh/erp/utils/BaseResponseInfo.java
+++ b/src/main/java/com/jsh/erp/utils/BaseResponseInfo.java
@@ -2,10 +2,12 @@
public class BaseResponseInfo {
public int code;
+ public String msg;
public Object data;
public BaseResponseInfo() {
code = 400;
data = null;
+ msg = "";
}
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 3a46c2c..eb77fa7 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -11,9 +11,10 @@
#mybatis-plus配置
mybatis-plus.mapper-locations=classpath:./mapper_xml/*.xml
# Redis
-spring.redis.host=192.168.1.235
+#spring.redis.host=192.168.1.235
+spring.redis.host=localhost
spring.redis.port=6379
-spring.redis.password=123456
+#spring.redis.password=123456
#租户对应的角色id
manage.roleId=10
#租户允许创建的用户数
@@ -32,4 +33,11 @@
server.tomcat.basedir=/opt/tmp/tomcat
#文件上传限制(byte)
spring.servlet.multipart.max-file-size=10485760
-spring.servlet.multipart.max-request-size=10485760
\ No newline at end of file
+spring.servlet.multipart.max-request-size=10485760
+
+# ???????
+volc.sms.access-key= your-volc-access-key # ???AccessKey
+volc.sms.secret-key= your-volc-secret-key # ???SecretKey
+volc.sms.region= cn-north-1 # ??????????
+volc.sms.sign-name= ????? # ????
+volc.sms.template-id= SMS_1234567890 # ????ID
\ No newline at end of file
diff --git a/src/main/resources/mapper_xml/CloudContentMapper.xml b/src/main/resources/mapper_xml/CloudContentMapper.xml
new file mode 100644
index 0000000..ad14d5d
--- /dev/null
+++ b/src/main/resources/mapper_xml/CloudContentMapper.xml
@@ -0,0 +1,48 @@
+<?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.jsh.erp.datasource.mappers.CloudContentMapper">
+ <select id="selectList" resultType="com.jsh.erp.datasource.entities.CloudContent">
+ select * from cloud_content
+ <where>
+ <if test="type != null and type != ''">
+ and type = #{type}
+ </if>
+ <if test="title != null and title != ''">
+ and title like concat('%', #{title}, '%')
+ </if>
+ <if test="status != null">
+ and status = #{status}
+ </if>
+ </where>
+ order by create_time desc
+ </select>
+
+ <select id="selectById" resultType="com.jsh.erp.datasource.entities.CloudContent">
+ select * from cloud_content where id = #{id}
+ </select>
+
+ <insert id="insert" parameterType="com.jsh.erp.datasource.entities.CloudContent">
+ insert into cloud_content
+ (type, title, content, version, status, create_time, creator, update_time, updater)
+ values
+ (#{type}, #{title}, #{content}, #{version}, #{status}, now(), #{creator}, now(), #{updater})
+ </insert>
+
+ <update id="update" parameterType="com.jsh.erp.datasource.entities.CloudContent">
+ update cloud_content
+ <set>
+ <if test="type != null">type = #{type},</if>
+ <if test="title != null">title = #{title},</if>
+ <if test="content != null">content = #{content},</if>
+ <if test="version != null">version = #{version},</if>
+ <if test="status != null">status = #{status},</if>
+ update_time = now(),
+ <if test="updater != null">updater = #{updater},</if>
+ </set>
+ where id = #{id}
+ </update>
+
+ <delete id="deleteById">
+ delete from cloud_content where id = #{id}
+ </delete>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper_xml/SysDictItemMapper.xml b/src/main/resources/mapper_xml/SysDictItemMapper.xml
new file mode 100644
index 0000000..52caa3b
--- /dev/null
+++ b/src/main/resources/mapper_xml/SysDictItemMapper.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.jsh.erp.datasource.mappers.SysDictItemMapper">
+ <select id="selectByDictId" resultType="com.jsh.erp.datasource.entities.SysDictItem">
+ select * from sys_dict_item
+ where dict_id = #{dictId}
+ order by sort_order asc
+ </select>
+
+ <select id="selectById" resultType="com.jsh.erp.datasource.entities.SysDictItem">
+ select * from sys_dict_item where id = #{id}
+ </select>
+
+ <insert id="insert" parameterType="com.jsh.erp.datasource.entities.SysDictItem">
+ insert into sys_dict_item
+ (dict_id, item_text, item_value, description, sort_order, status, create_time, creator, update_time, updater)
+ values
+ (#{dictId}, #{itemText}, #{itemValue}, #{description}, #{sortOrder}, #{status}, now(), #{creator}, now(), #{updater})
+ </insert>
+
+ <update id="update" parameterType="com.jsh.erp.datasource.entities.SysDictItem">
+ update sys_dict_item
+ <set>
+ <if test="itemText != null">item_text = #{itemText},</if>
+ <if test="itemValue != null">item_value = #{itemValue},</if>
+ <if test="description != null">description = #{description},</if>
+ <if test="sortOrder != null">sort_order = #{sortOrder},</if>
+ <if test="status != null">status = #{status},</if>
+ update_time = now(),
+ <if test="updater != null">updater = #{updater},</if>
+ </set>
+ where id = #{id}
+ </update>
+
+ <delete id="deleteById">
+ delete from sys_dict_item where id = #{id}
+ </delete>
+
+ <delete id="deleteByDictId">
+ delete from sys_dict_item where dict_id = #{dictId}
+ </delete>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper_xml/SysDictMapper.xml b/src/main/resources/mapper_xml/SysDictMapper.xml
new file mode 100644
index 0000000..50b42e1
--- /dev/null
+++ b/src/main/resources/mapper_xml/SysDictMapper.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.jsh.erp.datasource.mappers.SysDictMapper">
+ <select id="selectList" resultType="com.jsh.erp.datasource.entities.SysDict">
+ select * from sys_dict
+ <where>
+ <if test="dictCode != null and dictCode != ''">
+ and dict_code like concat('%', #{dictCode}, '%')
+ </if>
+ <if test="dictName != null and dictName != ''">
+ and dict_name like concat('%', #{dictName}, '%')
+ </if>
+ <if test="status != null">
+ and status = #{status}
+ </if>
+ </where>
+ order by create_time desc
+ </select>
+
+ <select id="selectById" resultType="com.jsh.erp.datasource.entities.SysDict">
+ select * from sys_dict where id = #{id}
+ </select>
+
+ <select id="selectByCode" resultType="com.jsh.erp.datasource.entities.SysDict">
+ select * from sys_dict where dict_code = #{dictCode}
+ </select>
+
+ <insert id="insert" parameterType="com.jsh.erp.datasource.entities.SysDict">
+ insert into sys_dict
+ (dict_code, dict_name, description, status, create_time, creator, update_time, updater)
+ values
+ (#{dictCode}, #{dictName}, #{description}, #{status}, now(), #{creator}, now(), #{updater})
+ </insert>
+
+ <update id="update" parameterType="com.jsh.erp.datasource.entities.SysDict">
+ update sys_dict
+ <set>
+ <if test="dictCode != null">dict_code = #{dictCode},</if>
+ <if test="dictName != null">dict_name = #{dictName},</if>
+ <if test="description != null">description = #{description},</if>
+ <if test="status != null">status = #{status},</if>
+ update_time = now(),
+ <if test="updater != null">updater = #{updater},</if>
+ </set>
+ where id = #{id}
+ </update>
+
+ <delete id="deleteById">
+ delete from sys_dict where id = #{id}
+ </delete>
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.3