diff --git a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysDept.java b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysDept.java index 4ed75a2..897ee7c 100644 --- a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysDept.java +++ b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysDept.java @@ -1,58 +1,136 @@ package com.bonus.system.api.domain; -import java.util.ArrayList; -import java.util.List; +import com.bonus.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.bonus.common.core.web.domain.BaseEntity; +import java.util.ArrayList; +import java.util.List; /** * 部门表 sys_dept - * + * * @author bonus */ -public class SysDept extends BaseEntity -{ +public class SysDept extends BaseEntity { private static final long serialVersionUID = 1L; - /** 部门ID */ + /** + * 部门ID + */ private Long deptId; - /** 父部门ID */ + /** + * 父部门ID + */ private Long parentId; - /** 祖级列表 */ + /** + * 祖级列表 + */ private String ancestors; - /** 部门名称 */ + /** + * 部门名称 + */ private String deptName; - /** 显示顺序 */ + /** + * 显示顺序 + */ private Integer orderNum; - /** 负责人 */ + /** + * 负责人 + */ private String leader; - /** 联系电话 */ + /** + * 联系电话 + */ private String phone; - /** 邮箱 */ + /** + * 邮箱 + */ private String email; - /** 部门状态:0正常,1停用 */ + /** + * 部门状态:0正常,1停用 + */ private String status; - /** 删除标志(0代表存在 2代表删除) */ + /** + * 删除标志(0代表存在 2代表删除) + */ private String delFlag; - /** 父部门名称 */ + /** + * 父部门名称 + */ private String parentName; - - /** 子部门 */ + /** + * 省 + */ + private String province; + /** + * 市 + */ + private String city; + /** + * 县 + */ + private String district; + + /** + * 详细地址 + */ + private String address; + + + public void setCity(String city) { + this.city = city; + } + + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public String getCity() { + return city; + } + + + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + + /** + * 子部门 + */ private List children = new ArrayList(); private Integer level; @@ -65,150 +143,126 @@ public class SysDept extends BaseEntity this.level = level; } - public Long getDeptId() - { + public Long getDeptId() { return deptId; } - public void setDeptId(Long deptId) - { + public void setDeptId(Long deptId) { this.deptId = deptId; } - public Long getParentId() - { + public Long getParentId() { return parentId; } - public void setParentId(Long parentId) - { + public void setParentId(Long parentId) { this.parentId = parentId; } - public String getAncestors() - { + public String getAncestors() { return ancestors; } - public void setAncestors(String ancestors) - { + public void setAncestors(String ancestors) { this.ancestors = ancestors; } @NotBlank(message = "部门名称不能为空") @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") - public String getDeptName() - { + public String getDeptName() { return deptName; } - public void setDeptName(String deptName) - { + public void setDeptName(String deptName) { this.deptName = deptName; } @NotNull(message = "显示顺序不能为空") - public Integer getOrderNum() - { + public Integer getOrderNum() { return orderNum; } - public void setOrderNum(Integer orderNum) - { + public void setOrderNum(Integer orderNum) { this.orderNum = orderNum; } - public String getLeader() - { + public String getLeader() { return leader; } - public void setLeader(String leader) - { + public void setLeader(String leader) { this.leader = leader; } @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") - public String getPhone() - { + public String getPhone() { return phone; } - public void setPhone(String phone) - { + public void setPhone(String phone) { this.phone = phone; } @Email(message = "邮箱格式不正确") @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") - public String getEmail() - { + public String getEmail() { return email; } - public void setEmail(String email) - { + public void setEmail(String email) { this.email = email; } - public String getStatus() - { + public String getStatus() { return status; } - public void setStatus(String status) - { + public void setStatus(String status) { this.status = status; } - public String getDelFlag() - { + public String getDelFlag() { return delFlag; } - public void setDelFlag(String delFlag) - { + public void setDelFlag(String delFlag) { this.delFlag = delFlag; } - public String getParentName() - { + public String getParentName() { return parentName; } - public void setParentName(String parentName) - { + public void setParentName(String parentName) { this.parentName = parentName; } - public List getChildren() - { + public List getChildren() { return children; } - public void setChildren(List children) - { + public void setChildren(List children) { this.children = children; } @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("deptId", getDeptId()) - .append("parentId", getParentId()) - .append("ancestors", getAncestors()) - .append("deptName", getDeptName()) - .append("orderNum", getOrderNum()) - .append("leader", getLeader()) - .append("phone", getPhone()) - .append("email", getEmail()) - .append("status", getStatus()) - .append("delFlag", getDelFlag()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("orderNum", getOrderNum()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("email", getEmail()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) .append("level", getLevel()) - .toString(); + .toString(); } } diff --git a/bonus-auth/src/main/java/com/bonus/auth/controller/ConfigController.java b/bonus-auth/src/main/java/com/bonus/auth/controller/ConfigController.java index b89ef6f..fe768e7 100644 --- a/bonus-auth/src/main/java/com/bonus/auth/controller/ConfigController.java +++ b/bonus-auth/src/main/java/com/bonus/auth/controller/ConfigController.java @@ -28,9 +28,10 @@ public class ConfigController { map.put("registersConfig", systemConfig.getRegistersConfig()); map.put("isAdmin", systemConfig.isAdmin()); map.put("webSocketurl", systemConfig.getWebsocketurl()); - map.put("isAddRootCompany",systemConfig.isAddRootCompany()); - map.put("requestConfig",systemConfig.getRequestConfig()); - map.put("passwordConfig",systemConfig.getPasswordConfig()); + map.put("isAddRootCompany", systemConfig.isAddRootCompany()); + map.put("requestConfig", systemConfig.getRequestConfig()); + map.put("passwordConfig", systemConfig.getPasswordConfig()); + map.put("addAddress", systemConfig.isAddAddress()); return R.ok(map); } } diff --git a/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java b/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java index 3ba13b7..87086b0 100644 --- a/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java +++ b/bonus-common/bonus-common-config/src/main/java/com/bonus/config/SystemConfig.java @@ -1,7 +1,6 @@ package com.bonus.config; import lombok.Data; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; @@ -15,16 +14,21 @@ import java.util.List; @Component @ConfigurationProperties(prefix = "system-config") @Data -public class SystemConfig { +public class SystemConfig { /** * 登录配置 */ private LoginConfig loginConfig; /** - *增加配置以支持增加根节点公司的添加和删除功能 + * 增加配置以支持增加根节点公司的添加和删除功能 */ private boolean addRootCompany; + + /** + * 公司是否添加地址信息 + */ + private boolean addAddress; /** * token过期时间 */ @@ -50,7 +54,7 @@ public class SystemConfig { * websocketUrl */ private String websocketurl; - + @Data @RefreshScope public static class LoginConfig { @@ -109,9 +113,10 @@ public class SystemConfig { */ private boolean encryptResponse; } + @Data @RefreshScope - public static class PasswordConfig{ + public static class PasswordConfig { /** * 密码的最小长度 */ @@ -161,7 +166,7 @@ public class SystemConfig { */ private boolean forcePasswordChangeOnFirstLogin; /** - *是否开启定期修改密码 + * 是否开启定期修改密码 */ private boolean enableRegularlyChangePassword; /** diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/file/FileUtils.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/file/FileUtils.java index 01cc598..8118379 100644 --- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/file/FileUtils.java +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/file/FileUtils.java @@ -1,26 +1,22 @@ package com.bonus.common.core.utils.file; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; +import com.bonus.common.core.utils.StringUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; +import java.util.Base64; import java.util.Date; import java.util.UUID; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.ArrayUtils; -import com.bonus.common.core.utils.StringUtils; -import org.springframework.web.multipart.MultipartFile; /** * 文件处理工具类 @@ -296,4 +292,28 @@ public class FileUtils { IOUtils.copy(is, os); } } + + /** + * 将 MultipartFile 转换为带前缀的 Base64 编码 + * + * @param file 上传的文件 + * @return 带前缀的 Base64 编码的字符串 + * @throws IOException 如果读取文件时出错 + */ + public static String convertToBase64WithPrefix(MultipartFile file) throws IOException { + // 获取文件的字节数组 + byte[] fileBytes = file.getBytes(); + + // 获取文件的内容类型 (MIME Type) + String contentType = file.getContentType(); + + // 根据文件的 MIME 类型生成前缀 + String prefix = "data:" + contentType + ";base64,"; + + // 将文件字节数组转换为 Base64 字符串 + String base64Encoded = Base64.getEncoder().encodeToString(fileBytes); + + // 返回带前缀的 Base64 字符串 + return prefix + base64Encoded; + } } diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/config/FaceConfig.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/config/FaceConfig.java new file mode 100644 index 0000000..a3068d1 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/config/FaceConfig.java @@ -0,0 +1,21 @@ +package com.bonus.face.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * @author bonus + */ +@Configuration +//@ConditionalOnProperty(name = "storage.type", havingValue = "minio") +@ConfigurationProperties(prefix = "face") +@Data +public class FaceConfig { + /** + * 人脸识别网络路径 + */ + private String url; + + +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/controller/FaceDataController.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/controller/FaceDataController.java new file mode 100644 index 0000000..871184a --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/controller/FaceDataController.java @@ -0,0 +1,83 @@ +package com.bonus.face.controller; + +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.core.web.page.TableDataInfo; +import com.bonus.common.log.annotation.SysLog; +import com.bonus.common.log.enums.OperaType; +import com.bonus.common.security.annotation.RequiresPermissions; +import com.bonus.face.domain.FaceDataEntity; +import com.bonus.face.service.FaceDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * Controller + * + * @author bonus + * @date 2024-12-06 + */ +@RestController +@RequestMapping("/data") +public class FaceDataController extends BaseController { + @Autowired + private FaceDataService faceDataService; + + /** + * 查询列表 + */ + @RequiresPermissions("face:data:list") + @GetMapping("/list") + public TableDataInfo list(FaceDataEntity faceData) { + try { + startPage(); + List list = faceDataService.selectFaceDataList(faceData); + return getDataTable(list); + } catch (Exception e) { + return getDataTable(new ArrayList<>()); + } + + } + + /** + * 获取详细信息 + */ + @RequiresPermissions("face:data:query") + @GetMapping(value = "/{faceId}") + public AjaxResult getInfo(@PathVariable("faceId") Long faceId) { + return faceDataService.selectFaceDataByFaceId(faceId); + } + + /** + * 新增 + */ + @RequiresPermissions("face:data:add") + @PostMapping("/add") + @SysLog(title = "", businessType = OperaType.INSERT, logType = 0, module = "", details = "导出列表") + public AjaxResult add(FaceDataEntity faceData) { + return faceDataService.insertFaceData(faceData); + } + + /** + * 修改 + */ + @RequiresPermissions("face:data:edit") + @PostMapping("/edit") + @SysLog(title = "", businessType = OperaType.UPDATE, logType = 0, module = "", details = "导出列表") + public AjaxResult edit(FaceDataEntity faceData) { + return faceDataService.updateFaceData(faceData); + } + + /** + * 删除 + */ + @RequiresPermissions("face:data:remove") + @PostMapping("/delete/{faceIds}") + @SysLog(title = "", businessType = OperaType.DELETE, logType = 0, module = "", details = "导出列表") + public AjaxResult remove(@PathVariable Long[] faceIds) { + return faceDataService.deleteFaceDataByFaceIds(faceIds); + } +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/controller/FaceGroupsController.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/controller/FaceGroupsController.java new file mode 100644 index 0000000..1360622 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/controller/FaceGroupsController.java @@ -0,0 +1,83 @@ +package com.bonus.face.controller; + +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.core.web.page.TableDataInfo; +import com.bonus.common.log.annotation.SysLog; +import com.bonus.common.log.enums.OperaType; +import com.bonus.common.security.annotation.RequiresPermissions; +import com.bonus.face.domain.FaceGroupsEntity; +import com.bonus.face.service.FaceGroupsService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * Controller + * + * @author bonus + * @date 2024-12-06 + */ +@RestController +@RequestMapping("/groups") +public class FaceGroupsController extends BaseController { + @Resource + private FaceGroupsService faceGroupsService; + + /** + * 查询列表 + */ + @RequiresPermissions("face:groups:list") + @GetMapping("/list") + public TableDataInfo list(FaceGroupsEntity faceGroups) { + try { + startPage(); + List list = faceGroupsService.selectFaceGroupsList(faceGroups); + return getDataTable(list); + } catch (Exception e) { + return getDataTable(new ArrayList<>()); + } + + } + + /** + * 获取详细信息 + */ + @RequiresPermissions("face:groups:query") + @GetMapping(value = "/{groupId}") + public AjaxResult getInfo(@PathVariable("groupId") Long groupId) { + return faceGroupsService.selectFaceGroupsByGroupId(groupId); + } + + /** + * 新增 + */ + @RequiresPermissions("face:groups:add") + @PostMapping("/add") + @SysLog(title = "", businessType = OperaType.INSERT, logType = 0, module = "", details = "导出列表") + public AjaxResult add(@RequestBody FaceGroupsEntity faceGroups) { + return faceGroupsService.insertFaceGroups(faceGroups); + } + + /** + * 修改 + */ + @RequiresPermissions("face:groups:edit") + @PostMapping("/edit") + @SysLog(title = "", businessType = OperaType.UPDATE, logType = 0, module = "", details = "导出列表") + public AjaxResult edit(@RequestBody FaceGroupsEntity faceGroups) { + return faceGroupsService.updateFaceGroups(faceGroups); + } + + /** + * 删除 + */ + @RequiresPermissions("face:groups:remove") + @PostMapping("/delete/{groupIds}") + @SysLog(title = "", businessType = OperaType.DELETE, logType = 0, module = "", details = "导出列表") + public AjaxResult remove(@PathVariable Long[] groupIds) { + return faceGroupsService.deleteFaceGroupsByGroupIds(groupIds); + } +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/domain/FaceDataEntity.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/domain/FaceDataEntity.java new file mode 100644 index 0000000..54f7bfe --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/domain/FaceDataEntity.java @@ -0,0 +1,76 @@ +package com.bonus.face.domain; + +import com.bonus.common.core.web.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 对象 face_data + * + * @author bonus + * @date 2024-12-06 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class FaceDataEntity extends BaseEntity { + /** + * faceId + */ + private Long faceId; + + /** + * 分组code + */ + @Size(max = 255, message = "groupCode的长度不能超过255个字符") // 长度最大255 + private String groupCode; + + /** + * 用户名称 + */ + @NotBlank(message = "用户名称不能为空") // 用户名称不能为空 + @Size(max = 100, message = "名称的长度不能超过100个字符") // 长度最大100 + private String name; + + /** + * 用户身份证号 + */ + @NotBlank(message = "身份证号不能为空") // 身份证号不能为空 + @Size(min = 18, max = 18, message = "身份证号必须为18位") // 身份证号必须为18位 + private String idCard; + + /** + * 其他信息 + */ + @Size(max = 1000, message = "其他信息的长度不能超过1000个字符") // 长度最大1000 + private String otherInfo; + + /** + * 人脸特征数据 + */ + private String embedding; + + /** + * 人图片数据 + */ + private String imagePath; + + /** + * 创建时间 + */ + private Date createdAt; + + /** + * 修改时间 + */ + private Date updatedAt; + + /** + * 人脸图片 + */ + private MultipartFile file; +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/domain/FaceGroupsEntity.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/domain/FaceGroupsEntity.java new file mode 100644 index 0000000..a2aff63 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/domain/FaceGroupsEntity.java @@ -0,0 +1,43 @@ +package com.bonus.face.domain; + +import com.bonus.common.core.web.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 对象 face_groups + * + * @author bonus + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class FaceGroupsEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 分组ID + */ + private Long groupId; + + /** + * 分组唯一标识 + */ + private String groupCode; + + /** + * 分组名称 + */ + private String groupName; + + /** + * 分组备注 + */ + private String description; + + /** + * 创建时间 + */ + private Date createdAt; +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/mapper/FaceDataMapper.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/mapper/FaceDataMapper.java new file mode 100644 index 0000000..74921d4 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/mapper/FaceDataMapper.java @@ -0,0 +1,64 @@ +package com.bonus.face.mapper; + + +import com.bonus.face.domain.FaceDataEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Mapper接口 + * + * @author bonus + * @date 2024-12-06 + */ +public interface FaceDataMapper { + /** + * 查询 + * + * @param faceId 主键 + * @return + */ + public FaceDataEntity selectFaceDataByFaceId(Long faceId); + + /** + * 查询列表 + * + * @param faceData + * @return 集合 + */ + public List selectFaceDataList(FaceDataEntity faceData); + + /** + * 新增 + * + * @param faceData + * @return 结果 + */ + public int insertFaceData(FaceDataEntity faceData); + + /** + * 修改 + * + * @param faceData + * @return 结果 + */ + public int updateFaceData(FaceDataEntity faceData); + + /** + * 批量删除 + * + * @param faceIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteFaceDataByFaceIds(Long[] faceIds); + + /** + * 查询每个分组内身份证唯一 + * + * @param groupCode + * @param idCard + * @return + */ + public int isGroupAndIdCardUnique(@Param("groupCode") String groupCode, @Param("idCard") String idCard, @Param("faceId") Long faceId); +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/mapper/FaceGroupsMapper.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/mapper/FaceGroupsMapper.java new file mode 100644 index 0000000..4b83cc1 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/mapper/FaceGroupsMapper.java @@ -0,0 +1,63 @@ +package com.bonus.face.mapper; + +import com.bonus.face.domain.FaceGroupsEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 【请填写功能名称】Mapper接口 + * + * @author bonus + * @date 2024-12-06 + */ + +public interface FaceGroupsMapper { + /** + * 查询【请填写功能名称】 + * + * @param groupId 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + public FaceGroupsEntity selectFaceGroupsByGroupId(Long groupId); + + /** + * 查询【请填写功能名称】列表 + * + * @param faceGroups 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectFaceGroupsList(FaceGroupsEntity faceGroups); + + /** + * 新增【请填写功能名称】 + * + * @param faceGroups 【请填写功能名称】 + * @return 结果 + */ + public int insertFaceGroups(FaceGroupsEntity faceGroups); + + /** + * 修改【请填写功能名称】 + * + * @param faceGroups 【请填写功能名称】 + * @return 结果 + */ + public int updateFaceGroups(FaceGroupsEntity faceGroups); + + /** + * 批量删除【请填写功能名称】 + * + * @param groupIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteFaceGroupsByGroupIds(Long[] groupIds); + + /** + * 分组名称唯一校验 + * + * @param groupName + * @return + */ + public int isGroupNameUnique(@Param("groupName") String groupName, @Param("groupId") Long groupId); +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/FaceDataService.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/FaceDataService.java new file mode 100644 index 0000000..bac83c2 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/FaceDataService.java @@ -0,0 +1,57 @@ +package com.bonus.face.service; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.face.domain.FaceDataEntity; + +import java.util.List; + + +/** + * Service接口 + * + * @author bonus + * @date 2024-12-06 + */ +public interface FaceDataService +{ + /** + * 查询 + * + * @param faceId 主键 + * @return + */ + public AjaxResult selectFaceDataByFaceId(Long faceId); + + /** + * 查询列表 + * + * @param faceData + * @return 集合 + */ + public List selectFaceDataList(FaceDataEntity faceData); + + /** + * 新增 + * + * @param faceData + * @return 结果 + */ + public AjaxResult insertFaceData(FaceDataEntity faceData); + + /** + * 修改 + * + * @param faceData + * @return 结果 + */ + public AjaxResult updateFaceData(FaceDataEntity faceData); + + /** + * 批量删除 + * + * @param faceIds 需要删除的主键集合 + * @return 结果 + */ + public AjaxResult deleteFaceDataByFaceIds(Long[] faceIds); +} + diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/FaceGroupsService.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/FaceGroupsService.java new file mode 100644 index 0000000..8ec4b34 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/FaceGroupsService.java @@ -0,0 +1,54 @@ +package com.bonus.face.service; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.face.domain.FaceGroupsEntity; + +import java.util.List; + +/** + * Service接口 + * + * @author bonus + * @date 2024-12-06 + */ +public interface FaceGroupsService { + /** + * 查询 + * + * @param groupId 主键 + * @return + */ + public AjaxResult selectFaceGroupsByGroupId(Long groupId); + + /** + * 查询列表 + * + * @param faceGroups + * @return 集合 + */ + public List selectFaceGroupsList(FaceGroupsEntity faceGroups); + + /** + * 新增 + * + * @param faceGroups + * @return 结果 + */ + public AjaxResult insertFaceGroups(FaceGroupsEntity faceGroups); + + /** + * 修改 + * + * @param faceGroups + * @return 结果 + */ + public AjaxResult updateFaceGroups(FaceGroupsEntity faceGroups); + + /** + * 批量删除 + * + * @param groupIds 需要删除的主键集合 + * @return 结果 + */ + public AjaxResult deleteFaceGroupsByGroupIds(Long[] groupIds); +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/impl/FaceDataServiceImpl.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/impl/FaceDataServiceImpl.java new file mode 100644 index 0000000..61603ab --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/impl/FaceDataServiceImpl.java @@ -0,0 +1,127 @@ +package com.bonus.face.service.impl; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.face.domain.FaceDataEntity; +import com.bonus.face.mapper.FaceDataMapper; +import com.bonus.face.service.FaceDataService; +import com.bonus.face.utils.FaceUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Service业务层处理 + * + * @author bonus + * @date 2024-12-06 + */ +@Service +public class FaceDataServiceImpl implements FaceDataService { + @Resource + private FaceDataMapper faceDataMapper; + + @Resource + private FaceUtils faceUtils; + + /** + * 查询 + * + * @param faceId 主键 + * @return + */ + @Override + public AjaxResult selectFaceDataByFaceId(Long faceId) { + try { + FaceDataEntity faceData = faceDataMapper.selectFaceDataByFaceId(faceId); + if (ObjectUtils.isEmpty(faceData)) { + return AjaxResult.error(); + } else { + return AjaxResult.success(faceData); + } + } catch (Exception e) { + return AjaxResult.error(); + } + } + + /** + * 查询列表 + * + * @param faceData + * @return + */ + @Override + public List selectFaceDataList(FaceDataEntity faceData) { + return faceDataMapper.selectFaceDataList(faceData); + } + + /** + * 新增 + * + * @param faceData + * @return 结果 + */ + @Override + public AjaxResult insertFaceData(FaceDataEntity faceData) { + try { // 文件类型验证 + int groupAndIdCardUnique = faceDataMapper.isGroupAndIdCardUnique(faceData.getGroupCode(), faceData.getIdCard(), faceData.getFaceId()); + if (groupAndIdCardUnique > 0) { + return AjaxResult.error("身份证信息已存在"); + } + if (faceData.getFile() == null || faceData.getFile().isEmpty()) { + return AjaxResult.error("请选择图片"); + } + + // 校验文件类型 + if (!faceData.getFile().getContentType().startsWith("image/")) { + return AjaxResult.error("只能上传图片文件"); + } + + // 校验文件大小 + if (faceData.getFile().getSize() > 5 * 1024 * 1024) { + return AjaxResult.error("文件大小不能超过 5MB"); + } + + return faceUtils.addFace(faceData); + } catch (Exception e) { + return AjaxResult.error(); + } + } + + /** + * 修改 + * + * @param faceData + * @return 结果 + */ + @Override + public AjaxResult updateFaceData(FaceDataEntity faceData) { + try { + int groupAndIdCardUnique = faceDataMapper.isGroupAndIdCardUnique(faceData.getGroupCode(), faceData.getIdCard(), faceData.getFaceId()); + if (groupAndIdCardUnique > 0) { + return AjaxResult.error("身份证信息已存在"); + } + int rows = faceDataMapper.updateFaceData(faceData); + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } catch (Exception e) { + return AjaxResult.error(); + } + } + + /** + * 批量删除 + * + * @param faceIds 需要删除的主键 + * @return 结果 + */ + @Override + public AjaxResult deleteFaceDataByFaceIds(Long[] faceIds) { + try { + int rows = faceDataMapper.deleteFaceDataByFaceIds(faceIds); + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } catch (Exception e) { + return AjaxResult.error(); + } + } +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/impl/FaceGroupsServiceImpl.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/impl/FaceGroupsServiceImpl.java new file mode 100644 index 0000000..50fcb4c --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/service/impl/FaceGroupsServiceImpl.java @@ -0,0 +1,112 @@ +package com.bonus.face.service.impl; + +import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.face.domain.FaceGroupsEntity; +import com.bonus.face.mapper.FaceGroupsMapper; +import com.bonus.face.service.FaceGroupsService; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * Service业务层处理 + * + * @author bonus + * @date 2024-12-06 + */ +@Service +public class FaceGroupsServiceImpl implements FaceGroupsService { + @Resource + private FaceGroupsMapper faceGroupsMapper; + + /** + * 查询 + * + * @param groupId 主键 + * @return + */ + @Override + public AjaxResult selectFaceGroupsByGroupId(Long groupId) { + try { + FaceGroupsEntity faceGroups = faceGroupsMapper.selectFaceGroupsByGroupId(groupId); + if (ObjectUtils.isEmpty(faceGroups)) { + return AjaxResult.error(); + } else { + return AjaxResult.success(faceGroups); + } + } catch (Exception e) { + return AjaxResult.error(); + } + } + + /** + * 查询列表 + * + * @param faceGroups + * @return + */ + @Override + public List selectFaceGroupsList(FaceGroupsEntity faceGroups) { + return faceGroupsMapper.selectFaceGroupsList(faceGroups); + } + + /** + * 新增 + * + * @param faceGroups + * @return 结果 + */ + @Override + public AjaxResult insertFaceGroups(FaceGroupsEntity faceGroups) { + try { + int groupNameUnique = faceGroupsMapper.isGroupNameUnique(faceGroups.getGroupName(), faceGroups.getGroupId()); + if (groupNameUnique > 0) { + return AjaxResult.error("分组名称已存在"); + } + faceGroups.setGroupCode("GROUP-" + StringUtils.randomUUID().substring(0, 8)); + int rows = faceGroupsMapper.insertFaceGroups(faceGroups); + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } catch (Exception e) { + return AjaxResult.error(); + } + } + + /** + * 修改 + * + * @param faceGroups + * @return 结果 + */ + @Override + public AjaxResult updateFaceGroups(FaceGroupsEntity faceGroups) { + try { + int groupNameUnique = faceGroupsMapper.isGroupNameUnique(faceGroups.getGroupName(), faceGroups.getGroupId()); + if (groupNameUnique > 0) { + return AjaxResult.error("分组名称已存在"); + } + int rows = faceGroupsMapper.updateFaceGroups(faceGroups); + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } catch (Exception e) { + return AjaxResult.error(); + } + } + + /** + * 批量删除 + * + * @param groupIds 需要删除的主键 + * @return 结果 + */ + @Override + public AjaxResult deleteFaceGroupsByGroupIds(Long[] groupIds) { + try { + int rows = faceGroupsMapper.deleteFaceGroupsByGroupIds(groupIds); + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } catch (Exception e) { + return AjaxResult.error(); + } + } +} diff --git a/bonus-modules/bonus-face/src/main/java/com/bonus/face/utils/FaceUtils.java b/bonus-modules/bonus-face/src/main/java/com/bonus/face/utils/FaceUtils.java new file mode 100644 index 0000000..adc8823 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/java/com/bonus/face/utils/FaceUtils.java @@ -0,0 +1,50 @@ +package com.bonus.face.utils; + +import com.alibaba.fastjson.JSON; +import com.bonus.common.core.utils.file.FileUtils; +import com.bonus.common.core.utils.http.HttpRequestHelper; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.face.config.FaceConfig; +import com.bonus.face.domain.FaceDataEntity; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * @author bonus + */ +@Service +public class FaceUtils { + + @Resource + private FaceConfig faceConfig; + /** + * 添加人脸路径 + */ + private static final String ADD_FACE_DATA = "/addFaceData"; + + /** + * 添加人脸 + */ + public AjaxResult addFace(FaceDataEntity faceData) { + try { + Map params = new HashMap(); + params.put("name", faceData.getName()); + params.put("idCard", faceData.getIdCard()); + params.put("otherInfo", faceData.getOtherInfo()); + params.put("image", FileUtils.convertToBase64WithPrefix(faceData.getFile())); + params.put("groupCode", faceData.getGroupCode()); + String s = HttpRequestHelper.postJson(faceConfig.getUrl(), ADD_FACE_DATA, JSON.toJSONString(params), new HashMap()); + if (ObjectUtils.isNotEmpty(s)) { + return AjaxResult.success("添加成功"); + } else { + return AjaxResult.success("添加失败"); + } + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + } +} diff --git a/bonus-modules/bonus-face/src/main/resources/banner.txt b/bonus-modules/bonus-face/src/main/resources/banner.txt new file mode 100644 index 0000000..27cacb9 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/resources/banner.txt @@ -0,0 +1,10 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + _ __ _ _ + (_) / _|(_)| | + _ __ _ _ ___ _ _ _ ______ | |_ _ | | ___ +| '__|| | | | / _ \ | | | || ||______|| _|| || | / _ \ +| | | |_| || (_) || |_| || | | | | || || __/ +|_| \__,_| \___/ \__, ||_| |_| |_||_| \___| + __/ | + |___/ \ No newline at end of file diff --git a/bonus-modules/bonus-face/src/main/resources/logback.xml b/bonus-modules/bonus-face/src/main/resources/logback.xml new file mode 100644 index 0000000..7607fdf --- /dev/null +++ b/bonus-modules/bonus-face/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-face/src/main/resources/mapper/FaceDataMapper.xml b/bonus-modules/bonus-face/src/main/resources/mapper/FaceDataMapper.xml new file mode 100644 index 0000000..8800d51 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/resources/mapper/FaceDataMapper.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + select face_id, + group_code, + name, + id_card, + other_info, + embedding, + image_path, + created_at, + updated_at + from face_data + + + + + + + + + insert into face_data + + group_code, + name, + id_card, + other_info, + embedding, + image_path, + created_at, + updated_at, + + + #{groupCode}, + #{name}, + #{idCard}, + #{otherInfo}, + #{embedding}, + #{imagePath}, + #{createdAt}, + #{updatedAt}, + + + + + update face_data + + group_code = #{groupCode}, + name = #{name}, + id_card = #{idCard}, + other_info = #{otherInfo}, + embedding = #{embedding}, + image_path = #{imagePath}, + created_at = #{createdAt}, + updated_at = #{updatedAt}, + + where face_id = #{faceId} + + + + delete from face_data where face_id in + + #{faceId} + + + \ No newline at end of file diff --git a/bonus-modules/bonus-face/src/main/resources/mapper/FaceGroupsMapper.xml b/bonus-modules/bonus-face/src/main/resources/mapper/FaceGroupsMapper.xml new file mode 100644 index 0000000..a9a2a36 --- /dev/null +++ b/bonus-modules/bonus-face/src/main/resources/mapper/FaceGroupsMapper.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + select group_id, group_code, group_name, description, created_at from face_groups + + + + + + + + + insert into face_groups + + group_code, + group_name, + description, + created_at, + + + #{groupCode}, + #{groupName}, + #{description}, + #{createdAt}, + + + + + update face_groups + + group_code = #{groupCode}, + group_name = #{groupName}, + description = #{description}, + created_at = #{createdAt}, + + where group_id = #{groupId} + + + + delete from face_groups where group_id in + + #{groupId} + + + \ No newline at end of file diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java index b727e3e..099bc9c 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java @@ -21,6 +21,7 @@ import com.bonus.system.api.domain.SysUser; import com.bonus.system.api.model.LoginUser; import com.bonus.system.domain.UserPasswordHistory; import com.bonus.system.service.*; +import com.bonus.system.warning.WebSocketHandler; import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -66,6 +67,9 @@ public class SysUserController extends BaseController { @Resource private RedisService redisService; + @Resource + private WebSocketHandler webSocketHandler; + @Autowired private ISysLogService sysLogService; @@ -81,6 +85,7 @@ public class SysUserController extends BaseController { try { startPage(); List list = userService.selectUserList(user); + webSocketHandler.sendMessageToAll("213123"); return getDataTable(list); } catch (Exception e) { logger.error(e.toString(), e); @@ -561,5 +566,4 @@ public class SysUserController extends BaseController { boolean b = SecurityUtils.matchesPassword(user.getPassword(), sysUser.getPassword()); return b? success():error("密码错误"); } - } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java index f6002dd..841101a 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysLogServiceImpl.java @@ -1,21 +1,20 @@ package com.bonus.system.service.impl; -import com.bonus.system.warning.SysWarning; -import com.bonus.system.warning.WaringLogEvent; -import com.google.common.collect.Maps; - +import com.bonus.common.core.domain.R; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.StringUtils; -import com.bonus.system.service.ISysLogService; -import com.bonus.common.core.domain.R; +import com.bonus.common.core.utils.global.SystemGlobal; import com.bonus.common.core.utils.ip.IpUtils; import com.bonus.common.core.utils.uuid.IdUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; -import com.bonus.common.core.utils.global.SystemGlobal; import com.bonus.system.api.domain.SysLogsVo; import com.bonus.system.api.model.LoginUser; import com.bonus.system.mapper.SysLogMapper; +import com.bonus.system.service.ISysLogService; +import com.bonus.system.warning.SysWarning; +import com.bonus.system.warning.WaringLogEvent; +import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -24,7 +23,6 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; -import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/system/SysDeptMapper.xml b/bonus-modules/bonus-system/src/main/resources/mapper/system/SysDeptMapper.xml index 4c43786..183de4d 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -20,10 +20,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + - select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time + select d.dept_id, + d.parent_id, + d.ancestors, + d.dept_name, + d.order_num, + d.leader, + d.phone, + d.email, + d.status, + d.del_flag, + d.create_by, + d.create_time, + d.province, + d.city, + d.district, + d.address from sys_dept d @@ -122,32 +142,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - insert into sys_dept( - dept_id, - parent_id, - dept_name, - ancestors, - order_num, - leader, - phone, - email, - status, - create_by, - create_time - )values( - #{deptId}, - #{parentId}, - #{deptName}, - #{ancestors}, - #{orderNum}, - #{leader}, - #{phone}, - #{email}, - #{status}, - #{createBy}, - sysdate() - ) - + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + order_num, + leader, + phone, + email, + province, + city, + district, + address, + status, + create_by, + create_time + )values( + #{deptId}, + #{parentId}, + #{deptName}, + #{ancestors}, + #{orderNum}, + #{leader}, + #{phone}, + #{email}, + #{province}, + #{city}, + #{district}, + #{address}, + #{status}, + #{createBy}, + sysdate() + ) + update sys_dept @@ -159,6 +187,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" leader = #{leader}, phone = #{phone}, email = #{email}, + province = #{province}, + city = #{city}, + district = #{district}, + address = #{address}, status = #{status}, update_by = #{updateBy}, update_time = sysdate() diff --git a/bonus-modules/bonus-system/src/main/resources/mybatis-config.xml b/bonus-modules/bonus-system/src/main/resources/mybatis-config.xml new file mode 100644 index 0000000..479f671 --- /dev/null +++ b/bonus-modules/bonus-system/src/main/resources/mybatis-config.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/scripts/deploy.sh b/scripts/deploy.sh index b9e61d3..d817977 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -10,6 +10,7 @@ app_source_jars=( "bonus-gateway/target/bonus-gateway.jar" "bonus-modules/bonus-file/target/bonus-file.jar" "bonus-modules/bonus-gen/target/bonus-gen.jar" + "bonus-modules/bonus-face/target/bonus-face.jar" "bonus-modules/bonus-job/target/bonus-job.jar" "bonus-modules/bonus-oss/target/bonus-oss.jar" "bonus-modules/bonus-system/target/bonus-system.jar" @@ -27,7 +28,8 @@ jars=("bonus-auth.jar --spring.config.location=file:auth_bootstrap.yml" "bonus-gen.jar --spring.config.location=file:gen_bootstrap.yml" "bonus-job.jar --spring.config.location=file:job_bootstrap.yml" "bonus-file.jar --spring.config.location=file:file_bootstrap.yml" -"bonus-visual-monitor.jar --spring.config.location=file:visual_bootstrap.yml") +"bonus-visual-monitor.jar --spring.config.location=file:visual_bootstrap.yml" +"bonus-face.jar --spring.config.location=file:face_bootstrap.yml") # 遍历数组并检查每个JAR文件的进程 for jar_with_args in "${jars[@]}"; do diff --git a/scripts/face_bootstrap.yml b/scripts/face_bootstrap.yml new file mode 100644 index 0000000..dad743e --- /dev/null +++ b/scripts/face_bootstrap.yml @@ -0,0 +1,27 @@ +# Tomcat +server: + port: 18087 + +# Spring +spring: + application: + # 应用名称 + name: bonus-face + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 192.168.0.56:8848 + namespace: 9cde1ce1-98bc-4b9c-9213-f1fbf8a5b3cc + config: + # 配置中心地址 + server-addr: 192.168.0.56:8848 + namespace: 9cde1ce1-98bc-4b9c-9213-f1fbf8a5b3cc + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}